diff --git a/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm b/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm index d6ed4c73c0e..a093255a2f5 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm @@ -214,10 +214,6 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 6 }, -/obj/item/valentine{ - pixel_x = -2; - pixel_y = 10 - }, /obj/item/clothing/neck/tie/gay{ pixel_x = 8; pixel_y = 15 diff --git a/_maps/configs/hardliners_leyak.json b/_maps/configs/hardliners_leyak.json index 6dfdf988799..a8ce4bade4d 100644 --- a/_maps/configs/hardliners_leyak.json +++ b/_maps/configs/hardliners_leyak.json @@ -18,6 +18,7 @@ "map_path": "_maps/shuttles/hardliner/hardliners_leyak.dmm", "map_id": "hardliners_leyak", "limit": 1, + "tranist_y_offset": -11, "starting_funds": 1500, "job_slots": { "Captain": { @@ -35,7 +36,7 @@ "officer": true, "slots": 1 }, - "Medical Doctor": { + "Field Medic": { "outfit": "/datum/outfit/job/syndicate/doctor/gorlex", "slots": 1 }, @@ -43,17 +44,13 @@ "outfit": "/datum/outfit/job/syndicate/engineer/gorlex", "slots": 1 }, - "Wrecker": { - "outfit": "/datum/outfit/job/syndicate/miner/gorlex", - "slots":1 - }, "Trooper": { "outfit": "/datum/outfit/job/syndicate/security/gorlex", "slots": 2 }, "Junior Agent": { "outfit": "/datum/outfit/job/syndicate/assistant/gorlex", - "slots": 2 + "slots": 1 } }, "enabled": true diff --git a/_maps/configs/ngr_pururangi.json b/_maps/configs/ngr_pururangi.json new file mode 100644 index 00000000000..4dfa0c2eee4 --- /dev/null +++ b/_maps/configs/ngr_pururangi.json @@ -0,0 +1,62 @@ +{ + "faction": "/datum/faction/syndicate/ngr", + "prefix": "NGRV", + "manufacturer": "Hardline Salvage and Mining", + "namelists": [ + "GORLEX", + "NATURAL", + "BEASTS", + "CRUISE" + ], + "map_name": "Puru-Rangi-class Auxiliary Response Vessel", + "map_short_name": "Puru-Rangi-class", + "tranist_x_offset": -21, + "tranist_y_offset": -11, + "description": "While destroyers and patrol craft maintain the Republic's borders, it is the Puru-Rangi that ensures that there are not unprotected gaps in its territory. These response vessels are a common sight within the Second Battlegroup's auxiliary fleet, providing a versatile complement of personnel for disaster response and military escort. While their relative size renders them impractical to manufacture on a large scale, their communications equipment and diverse crew are valuable assets for coordinating and leading quick response forces staged in the backline.", + "tags": [ + "RP Focus", + "Combat", + "Medical", + "Telecomms" + ], + "map_path": "_maps/shuttles/ngr/ngr_pururangi.dmm", + "map_id": "syndicate_gorlex_pururangi", + "limit": 1, + "job_slots": { + "Captain": { + "outfit": "/datum/outfit/job/syndicate/captain/ngr/stripped", + "officer": true, + "slots": 1 + }, + "Lieutenant": { + "outfit": "/datum/outfit/job/syndicate/hos/ngr/stripped", + "officer": true, + "slots": 1 + }, + "Medical Doctor": { + "outfit": "/datum/outfit/job/syndicate/doctor/ngr/stripped", + "slots": 1 + }, + "Field Medic": { + "outfit": "/datum/outfit/job/syndicate/paramedic/ngr/stripped", + "slots": 1 + }, + "Mechanic": { + "outfit": "/datum/outfit/job/syndicate/engineer/ngr/stripped", + "slots": 1 + }, + "Operative": { + "outfit": "/datum/outfit/job/syndicate/security/ngr", + "slots": 1 + }, + "Wrecker": { + "outfit": "/datum/outfit/job/syndicate/miner/ngr", + "slots": 1 + }, + "Crewman": { + "outfit": "/datum/outfit/job/syndicate/assistant/ngr", + "slots": 1 + } + }, + "enabled": true +} diff --git a/_maps/outpost/cybersun_gas_giant.dmm b/_maps/outpost/cybersun_gas_giant.dmm index 8862113a1d7..e71d18326a7 100644 --- a/_maps/outpost/cybersun_gas_giant.dmm +++ b/_maps/outpost/cybersun_gas_giant.dmm @@ -15387,10 +15387,6 @@ }, /obj/effect/turf_decal/industrial/hatch, /obj/structure/closet/crate/trashcart, -/obj/item/valentine{ - pixel_x = -4; - pixel_y = -1 - }, /obj/item/trash/waffles{ pixel_x = 3; pixel_y = 7 diff --git a/_maps/shuttles/hardliner/hardliners_leyak.dmm b/_maps/shuttles/hardliner/hardliners_leyak.dmm index bc4e42d0e34..c00125f8d4c 100644 --- a/_maps/shuttles/hardliner/hardliners_leyak.dmm +++ b/_maps/shuttles/hardliner/hardliners_leyak.dmm @@ -1,9 +1,18 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aj" = ( -/obj/effect/spawner/bunk_bed, -/obj/structure/curtain/cloth/grey, -/obj/machinery/light/directional/east, -/turf/open/floor/carpet/nanoweave, +/obj/effect/turf_decal/siding{ + color = "#474747" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "ak" = ( /obj/structure/catwalk/over/plated_catwalk/white, @@ -197,15 +206,15 @@ /turf/open/floor/plating, /area/ship/engineering/engines) "bD" = ( -/obj/machinery/computer/mech_bay_power_console{ +/obj/structure/chair/plastic{ dir = 1 }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 6 +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "bJ" = ( /obj/structure/sink{ dir = 4; @@ -319,7 +328,7 @@ /obj/structure/guncloset, /obj/item/gun/ballistic/automatic/pistol/asp/no_mag, /obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag, -/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag, +/obj/item/gun/ballistic/automatic/smg/cobra/no_mag, /turf/open/floor/plasteel/dark, /area/ship/security/armory) "cS" = ( @@ -342,15 +351,11 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "cU" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/structure/railing/thin, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/structure/bed/roller, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "dl" = ( /obj/structure/falsewall/titanium, /turf/open/floor/plating, @@ -443,24 +448,13 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) "eb" = ( -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, /obj/effect/turf_decal/siding/black{ dir = 4 }, +/obj/structure/closet/emcloset/wall/directional/west, +/obj/effect/turf_decal/corner/opaque/syndiered/border{ + dir = 8 + }, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "eh" = ( @@ -483,19 +477,29 @@ /obj/item/ammo_box/magazine/m57_39_asp, /obj/item/ammo_box/magazine/m12g_bulldog/slug, /obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m12g_bulldog{ + pixel_x = 7; + pixel_y = -4 + }, +/obj/item/ammo_box/magazine/m12g_bulldog{ + pixel_x = 6; + pixel_y = -4 + }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) "eA" = ( -/obj/structure/mecha_wreckage/touro, -/obj/effect/turf_decal/industrial/traffic{ - dir = 1 +/obj/structure/table/chem, +/obj/item/storage/box/bodybags{ + pixel_x = 6; + pixel_y = 6 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "eD" = ( /obj/effect/turf_decal/siding/wood{ color = "#E6D2BA"; @@ -566,39 +570,14 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "fj" = ( -/obj/item/clothing/under/syndicate/hardliners/jumpsuit{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 1 }, -/obj/item/clothing/suit/hazardvest/hardliners{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/clothing/gloves/explorer{ - pixel_y = -8 - }, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/head/hardhat/hardliners{ - pixel_x = -10; - pixel_y = -7 - }, -/obj/item/radio/headset/alt{ - pixel_x = 8; - pixel_y = -5 - }, -/obj/item/melee/knife/survival, -/obj/item/flashlight/seclite, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/closet/secure_closet/wall/directional/north{ - icon_state = "sec_wall"; - req_access_txt = list(48) - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "fq" = ( /obj/effect/turf_decal/industrial/fire{ dir = 4 @@ -647,15 +626,22 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "ge" = ( -/obj/structure/catwalk/over/plated_catwalk/white, /obj/structure/cable{ icon_state = "1-4" }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/white, /turf/open/floor/plating, /area/ship/hallway/central) "gs" = ( @@ -701,14 +687,19 @@ /turf/open/floor/plating, /area/ship/security) "hg" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 +/obj/item/storage/firstaid/medical{ + pixel_x = 8; + pixel_y = -1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/storage/firstaid/brute{ + pixel_x = -9; + pixel_y = -1 }, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/structure/rack, +/obj/item/storage/firstaid/regular, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "hm" = ( /obj/structure/catwalk/over/plated_catwalk, /obj/structure/cable{ @@ -733,20 +724,44 @@ /turf/open/floor/plasteel/tech, /area/ship/cargo) "hu" = ( -/obj/effect/turf_decal/siding{ - color = "#474747" +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = 5; + pixel_y = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = 8; + pixel_y = -1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = -4; + pixel_y = 7 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = -3; + pixel_y = -1 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/dark, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/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/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners, +/obj/item/clothing/under/syndicate/hardliners, +/obj/item/clothing/under/syndicate/hardliners, +/obj/item/clothing/under/syndicate/hardliners, +/obj/structure/closet/wall/red/directional/south, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "hw" = ( /obj/machinery/power/port_gen/pacman, @@ -845,14 +860,32 @@ dir = 8 }, /obj/structure/rack, -/obj/item/storage/toolbox/ammo/a12g_slug{ - pixel_x = -7 - }, /obj/item/storage/toolbox/ammo/c57{ pixel_x = 8 }, /obj/item/storage/toolbox/ammo/c9mm{ - pixel_y = 10 + pixel_y = 9; + pixel_x = 8 + }, +/obj/item/storage/toolbox/ammo/c45{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/storage/box/ammo/a12g_slug{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/storage/box/ammo/a12g_slug{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/storage/box/ammo/a12g_buckshot{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/storage/box/ammo/a12g_buckshot{ + pixel_x = -5; + pixel_y = -2 }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) @@ -957,11 +990,6 @@ "kr" = ( /obj/effect/turf_decal/industrial/fire, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/structure/closet/syndicate/personal{ - name = "demolitions closet"; - populate = 0 - }, -/obj/item/storage/backpack/duffelbag/syndie/c4, /obj/effect/turf_decal/industrial/fire{ dir = 1 }, @@ -969,6 +997,19 @@ dir = 1 }, /obj/machinery/light/small/directional/north, +/obj/structure/table/reinforced, +/obj/item/gun_maint_kit{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/gun_maint_kit{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/item/gun_maint_kit{ + pixel_x = -4; + pixel_y = 10 + }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) "kw" = ( @@ -1076,19 +1117,15 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/engines) "lP" = ( -/obj/effect/turf_decal/techfloor, -/obj/structure/cable{ - icon_state = "5-8" +/obj/structure/table/chem, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "mh" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 4 @@ -1181,10 +1218,11 @@ /area/ship/crew/canteen) "nd" = ( /obj/docking_port/stationary{ - dwidth = 15; - height = 15; - width = 30; - dir = 2 + dwidth = 30; + height = 60; + width = 60; + dir = 2; + name = "Leyak Starboard Dock" }, /turf/template_noop, /area/template_noop) @@ -1359,21 +1397,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) -"oP" = ( -/obj/machinery/shower{ - pixel_y = 20 - }, -/obj/structure/curtain, -/obj/structure/chair/handrail, -/obj/effect/turf_decal/steeldecal/steel_decals9{ - dir = 4 - }, -/obj/effect/turf_decal/steeldecal/steel_decals9{ - dir = 1 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/dorm) "pi" = ( /obj/machinery/computer/crew{ icon_state = "computer-left" @@ -1446,13 +1469,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/ship/hallway/central) -"qc" = ( -/obj/effect/turf_decal/spline/plain/opaque/syndiered{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/syndiered/half, -/turf/open/floor/engine/hull, -/area/ship/external/dark) "qd" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ dir = 8 @@ -1513,25 +1529,26 @@ /area/ship/bridge) "rM" = ( /obj/docking_port/stationary{ - dwidth = 15; - height = 15; - width = 30 + dwidth = 30; + height = 60; + width = 60; + disable_on_owner_ship_dock = 1; + name = "Leyak Port Dock" }, /turf/template_noop, /area/template_noop) "rW" = ( -/obj/effect/turf_decal/techfloor, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "se" = ( /obj/structure/window/reinforced/fulltile/shuttle, /obj/structure/grille, @@ -1672,10 +1689,14 @@ /area/ship/hallway/central) "tQ" = ( /obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 + color = "#474747" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "tT" = ( @@ -1729,11 +1750,16 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "uA" = ( -/obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 +/obj/structure/chair/sofa/red/corpo/right, +/obj/item/bedsheet/black{ + pixel_x = 8; + pixel_y = 0 }, -/turf/open/floor/plasteel/dark, +/obj/structure/sign/poster/contraband/syndiemoth{ + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "uW" = ( /obj/effect/turf_decal/isf_big/seven, @@ -1817,17 +1843,16 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "vQ" = ( -/obj/effect/turf_decal/siding{ - color = "#474747" - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-4" +/obj/structure/table/glass, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -15; + pixel_y = -25 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = -8; + pixel_y = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "vU" = ( /obj/effect/turf_decal/siding/thinplating/dark{ @@ -1883,24 +1908,15 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/security) "ws" = ( -/obj/structure/closet/wall/red/directional/north, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/turf/open/floor/carpet/nanoweave, +/obj/effect/turf_decal/siding/black{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/firealarm/directional/north{ + pixel_x = -4; + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "wH" = ( /obj/structure/railing/corner{ @@ -1967,10 +1983,10 @@ /obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 1 }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-9" +/obj/structure/closet/wall/red/directional/south{ + name = "demolition's closet" }, +/obj/item/storage/backpack/duffelbag/syndie/c4, /turf/open/floor/plasteel/white, /area/ship/security/armory) "xJ" = ( @@ -2012,10 +2028,14 @@ /turf/open/floor/plating, /area/ship/hallway/central) "ys" = ( -/obj/structure/bed/roller, /obj/effect/turf_decal/siding/thinplating{ dir = 6 }, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 5 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) "yu" = ( @@ -2060,13 +2080,19 @@ /turf/open/floor/plasteel/dark, /area/ship/engineering/engines) "yY" = ( -/obj/item/clothing/mask/gas/syndicate, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/machinery/firealarm/directional/west, -/obj/item/clothing/suit/space/syndicate/white_red, -/obj/item/clothing/head/helmet/space/syndicate/white_red, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/structure/chair/plastic{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor3-old" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "zd" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/canteen) @@ -2084,27 +2110,34 @@ /turf/open/floor/plating, /area/ship/hallway/central) "zp" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/clothing/gloves/color/latex/nitrile/evil, +/obj/item/clothing/suit/hardliners, +/obj/item/clothing/under/syndicate/hardliners{ + pixel_x = -8; + pixel_y = 1 }, -/obj/machinery/button/door{ - dir = 1; +/obj/item/clothing/shoes/combat{ pixel_x = 4; - pixel_y = -20; - name = "Launch Door Control"; - id = "leyakmech" + pixel_y = -5 }, -/obj/machinery/button/shieldwallgen{ - dir = 1; - pixel_x = -5; - pixel_y = -20; - id = "leyakgen" +/obj/item/pinpointer/crew{ + pixel_x = -6; + pixel_y = -6 }, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/item/sensor_device{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/structure/closet/secure_closet/wall/directional/south{ + name = "Medic's closet"; + req_access_txt = "5" + }, +/obj/item/roller, +/obj/item/roller, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "zF" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/central) @@ -2155,7 +2188,7 @@ /area/ship/external/dark) "Ae" = ( /turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science/workshop) +/area/ship/medical) "Ah" = ( /obj/effect/turf_decal/siding/thinplating/dark, /obj/effect/turf_decal/trimline/opaque/syndiered/line{ @@ -2248,24 +2281,20 @@ /turf/open/floor/plasteel/mono/white, /area/ship/security) "Be" = ( -/obj/docking_port/mobile{ - dir = 8; - launch_status = 0; - preferred_direction = 4 +/obj/structure/chair/handrail{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 4 }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "leyakmech" +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 1 }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - id = "leyakgen"; +/obj/machinery/shower{ dir = 1 }, -/turf/open/floor/engine/hull/reinforced/interior, -/area/ship/science/workshop) +/turf/open/floor/plasteel/showroomfloor, +/area/ship/crew/dorm) "Bj" = ( /obj/structure/chair/bench/red/directional/north, /obj/machinery/newscaster/directional/east, @@ -2292,14 +2321,22 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "BG" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 8 +/obj/structure/table/chem, +/obj/item/reagent_containers/syringe/contraband/morphine{ + pixel_x = 2; + pixel_y = 4; + name = "morphine syringe"; + desc = "A syringe, with MORPHINE written on it in bright-red marker." }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 10 +/obj/item/reagent_containers/glass/bottle/morphine{ + pixel_x = -5; + pixel_y = 5 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "BI" = ( /obj/machinery/door/airlock/hatch{ dir = 4; @@ -2348,15 +2385,13 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/engines) "CB" = ( -/obj/structure/dresser{ - dir = 4; - pixel_x = -9 - }, -/obj/effect/turf_decal/siding{ - color = "#474747" +/obj/structure/table/glass, +/obj/item/radio/intercom/directional/south{ + pixel_x = -6; + pixel_y = -31 }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/dark, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "CD" = ( /obj/machinery/power/terminal{ @@ -2576,8 +2611,6 @@ /area/ship/cargo) "FQ" = ( /obj/machinery/autolathe, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass/twenty, /obj/item/radio/intercom/directional/east, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) @@ -2598,12 +2631,10 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "Gc" = ( -/obj/structure/chair/plastic{ - dir = 1 - }, /obj/effect/turf_decal/siding/thinplating{ dir = 10 }, +/obj/structure/table/reinforced, /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) "Gj" = ( @@ -2634,17 +2665,9 @@ pixel_x = 8; pixel_y = 2 }, -/obj/item/gun_maint_kit{ - pixel_x = -9; - pixel_y = 1 - }, -/obj/item/gun_maint_kit{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/item/gun_maint_kit{ - pixel_x = -9; - pixel_y = 5 +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-10" }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) @@ -2698,6 +2721,13 @@ /obj/machinery/door/airlock/external, /obj/machinery/atmospherics/pipe/layer_manifold/visible, /obj/effect/mapping_helpers/airlock/locked, +/obj/docking_port/mobile{ + launch_status = 0; + preferred_direction = 4; + dir = 2; + port_direction = 8; + name = "Leyak Mobile Dock" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/central) "In" = ( @@ -2822,8 +2852,14 @@ pixel_x = 1; pixel_y = 4 }, -/obj/item/melee/energy/flyssa, /obj/item/radio/headset/syndicate/alt/captain/cybersun, +/obj/item/gun/ballistic/automatic/pistol/himehabu, +/obj/item/ammo_box/magazine/m22lr_himehabu, +/obj/item/ammo_box/magazine/m22lr_himehabu, +/obj/item/clothing/under/cybersun/sneak{ + pixel_x = 8; + pixel_y = -7 + }, /turf/open/floor/plasteel/patterned/brushed, /area/ship/bridge) "Jv" = ( @@ -2839,23 +2875,14 @@ }, /area/ship/bridge) "JF" = ( -/obj/effect/turf_decal/siding{ - color = "#474747" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -20 +/obj/effect/spawner/bunk_bed, +/obj/structure/curtain/cloth/grey, +/obj/structure/sign/poster/contraband/backdoor_xeno_babes_6{ + pixel_y = -32; + pixel_x = 0 }, -/turf/open/floor/plasteel/dark, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "JL" = ( /obj/structure/catwalk/over/plated_catwalk/white, @@ -2963,6 +2990,7 @@ pixel_y = 11 }, /obj/item/radio/headset/syndicate/alt/captain/cybersun, +/obj/item/clothing/glasses/hud/security/sunglasses/hardliners, /turf/open/floor/plasteel/patterned/brushed, /area/ship/bridge) "Lg" = ( @@ -2993,10 +3021,6 @@ /turf/open/floor/plating, /area/ship/cargo) "Lp" = ( -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner, /obj/structure/cable{ icon_state = "4-8" }, @@ -3009,6 +3033,9 @@ /obj/effect/turf_decal/siding/black{ dir = 8 }, +/obj/effect/turf_decal/stairs{ + dir = 9 + }, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "Lv" = ( @@ -3043,23 +3070,22 @@ /obj/item/radio/weather_monitor, /obj/item/mining_scanner, /obj/item/mining_scanner, +/obj/item/melee/sledgehammer/gorlex{ + pixel_x = -4 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "LA" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor7-old" }, -/obj/machinery/mass_driver{ - dir = 4; - id = "leyaklaunch" - }, -/obj/structure/railing/thin, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/decal/cleanable/oil, +/obj/structure/sign/poster/contraband/cybersun_med{ + pixel_x = 0; + pixel_y = 31 }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "LF" = ( /obj/effect/turf_decal/isf_big/three, /turf/open/floor/plasteel/tech, @@ -3105,12 +3131,8 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/engines) "Ml" = ( -/obj/effect/spawner/bunk_bed{ - dir = 4 - }, -/obj/structure/curtain/cloth/grey, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/nanoweave, +/obj/effect/turf_decal/siding/black, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "Mp" = ( /turf/template_noop, @@ -3190,22 +3212,26 @@ /turf/closed/wall/mineral/titanium, /area/ship/security/armory) "Nm" = ( -/obj/effect/turf_decal/techfloor{ - dir = 6 +/obj/effect/turf_decal/trimline/opaque/neutral/line{ + dir = 8 + }, +/obj/structure/chair/office/dark{ + dir = 8 }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "Nt" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "NO" = ( /turf/closed/wall/mineral/titanium, -/area/ship/science/workshop) +/area/ship/medical) "NT" = ( /obj/machinery/power/port_gen/pacman/super, /obj/effect/turf_decal/industrial/outline/red, @@ -3230,38 +3256,33 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/engines) "Oi" = ( -/obj/effect/turf_decal/corner/opaque/syndiered/border{ - dir = 8 - }, -/obj/structure/closet/emcloset/wall/directional/west, /obj/effect/turf_decal/siding/black{ dir = 4 }, -/turf/open/floor/plasteel/mono/white, -/area/ship/hallway/central) -"Ok" = ( -/obj/structure/closet/wall/red/directional/north, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = 5; - pixel_y = 8 +/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ + dir = 1 }, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = 8; - pixel_y = -1 +/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ + dir = 8 }, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = -4; - pixel_y = 7 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = -3; - pixel_y = -1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/item/clothing/head/soft/cybersun, -/obj/item/clothing/head/soft/cybersun, -/obj/item/clothing/head/soft/cybersun, -/obj/item/clothing/head/soft/cybersun, -/turf/open/floor/carpet/nanoweave, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/hallway/central) +"Ok" = ( +/obj/effect/turf_decal/siding/black{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "Ot" = ( /obj/structure/cable{ @@ -3275,7 +3296,7 @@ }, /obj/machinery/door/airlock/grunge{ dir = 4; - name = "Wrecker's Closet" + name = "Sick Bay" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -3284,7 +3305,7 @@ dir = 4 }, /turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/area/ship/medical) "Ou" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3425,29 +3446,19 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "PJ" = ( -/obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/sofa/red/corpo/left, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "PK" = ( /turf/open/floor/engine/hull, /area/ship/external/dark) "PT" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - id = "leyakgen" - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "leyakmech" +/obj/effect/turf_decal/siding/black, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/open/floor/engine/hull/reinforced/interior, -/area/ship/science/workshop) +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) "PX" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/filled/line{ dir = 1 @@ -3469,16 +3480,10 @@ /area/ship/bridge) "Qj" = ( /obj/structure/crate_shelf, -/obj/structure/closet/crate/medical{ - name = "medical supplies" - }, -/obj/item/clothing/suit/hardliners, -/obj/item/clothing/gloves/color/latex/nitrile/evil, /obj/effect/turf_decal/techfloor, /obj/effect/turf_decal/techfloor{ dir = 1 }, -/obj/item/storage/firstaid/regular, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Qn" = ( @@ -3689,28 +3694,20 @@ /turf/open/floor/plasteel/patterned/brushed, /area/ship/bridge) "SR" = ( -/obj/structure/rack, -/obj/effect/turf_decal/siding/thinplating{ - dir = 9 - }, -/obj/item/pickaxe{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/melee/sledgehammer/gorlex{ - pixel_x = -4 +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 8 }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" +/obj/effect/turf_decal/trimline/opaque/syndiered/line{ + dir = 1 }, +/obj/machinery/light/small/directional/west, /obj/machinery/light_switch{ dir = 4; - pixel_x = -20; - pixel_y = -4 + pixel_x = -21; + pixel_y = -10 }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "SS" = ( /obj/effect/turf_decal/corner/opaque/syndiered/mono, /obj/machinery/computer/helm{ @@ -3748,34 +3745,19 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "Tr" = ( /obj/structure/rack, -/obj/item/storage/firstaid/brute{ - pixel_x = -9; - pixel_y = 6 - }, -/obj/item/storage/firstaid/medical{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/item/reagent_containers/glass/bottle/morphine{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/reagent_containers/syringe/contraband/morphine{ - pixel_x = 5; - pixel_y = -4; - name = "morphine syringe"; - desc = "A syringe, with MORPHINE written on it in bright-red marker." - }, /obj/machinery/light/directional/south, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/metal/twenty, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Tu" = ( @@ -3853,24 +3835,20 @@ /turf/open/floor/plating, /area/ship/engineering/engines) "TV" = ( -/obj/effect/turf_decal/techfloor, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/effect/turf_decal/trimline/opaque/neutral/filled/warning{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "Uk" = ( /obj/effect/turf_decal/industrial/fire{ dir = 5 @@ -3985,14 +3963,23 @@ /turf/open/floor/plasteel/tech, /area/ship/cargo) "Wh" = ( -/obj/effect/spawner/bunk_bed{ - dir = 4 +/obj/effect/turf_decal/siding/black{ + dir = 1 }, -/obj/structure/curtain/cloth/grey, -/obj/structure/sign/poster/contraband/backdoor_xeno_babes_6{ - pixel_y = 31 +/obj/machinery/light/small/directional/west, +/obj/structure/dresser{ + pixel_x = 0; + pixel_y = 0 }, -/turf/open/floor/carpet/nanoweave, +/obj/structure/bedsheetbin{ + pixel_x = -1; + pixel_y = 7 + }, +/obj/structure/extinguisher_cabinet/directional/north{ + pixel_x = 8; + pixel_y = 28 + }, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "WE" = ( /obj/effect/turf_decal/corner/opaque/syndiered/border{ @@ -4142,13 +4129,16 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "Ye" = ( -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 1 }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "Yf" = ( /turf/closed/wall/mineral/titanium, /area/ship/cargo) @@ -4157,15 +4147,15 @@ dir = 9 }, /obj/effect/turf_decal/trimline/opaque/syndiered/corner, -/obj/structure/cable{ - icon_state = "6-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/ship/security/armory) "Yj" = ( @@ -4176,12 +4166,16 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "Yo" = ( -/obj/effect/spawner/bunk_bed, -/obj/structure/curtain/cloth/grey, -/obj/structure/sign/poster/contraband/syndiemoth{ - pixel_x = 29 +/obj/effect/turf_decal/siding/black{ + dir = 1 }, -/turf/open/floor/carpet/nanoweave, +/obj/machinery/light/small/directional/east, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "Yq" = ( /obj/structure/railing/corner{ @@ -4214,13 +4208,14 @@ /turf/open/floor/plasteel/mono/white, /area/ship/crew/canteen) "YE" = ( -/obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 - }, -/obj/machinery/recharge_station, +/obj/effect/spawner/bunk_bed, /obj/structure/curtain/cloth/grey, -/turf/open/floor/plasteel/dark, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 10 + }, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "YF" = ( /obj/structure/catwalk/over/plated_catwalk/white, @@ -4260,6 +4255,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, +/obj/structure/cable{ + icon_state = "5-8" + }, /turf/open/floor/plasteel/white, /area/ship/security/armory) "YU" = ( @@ -4288,22 +4286,13 @@ }, /area/ship/bridge) "YW" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/obj/machinery/button/massdriver{ - pixel_y = 21; - id = "leyaklaunch" - }, -/obj/structure/cable{ - icon_state = "4-10" +/obj/effect/turf_decal/trimline/opaque/neutral/line{ + dir = 8 }, -/obj/effect/decal/cleanable/oil/streak, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "YY" = ( /obj/effect/turf_decal/isf_big/six, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -4529,8 +4518,8 @@ Mp Mp "} (7,1,1) = {" -QX -qc +Mp +vm PK PK OI @@ -4548,12 +4537,12 @@ zd zd PK PK -hD -Qt +EH +Mp "} (8,1,1) = {" -QX -qc +Mp +vm RZ ja OI @@ -4571,12 +4560,12 @@ Yq zd vo cr -hD -Qt +EH +Mp "} (9,1,1) = {" -QX -qc +Mp +vm PK OI Oa @@ -4594,12 +4583,12 @@ by mJ zd PK -hD -Qt +EH +Mp "} (10,1,1) = {" -QX -qc +Mp +vm ja OI Ow @@ -4617,21 +4606,21 @@ RV YA zd vo -hD -Qt +EH +Mp "} (11,1,1) = {" -QX -qc +Mp +vm OI OI OI BI vx vx -oP bJ xx +Be vx na bf @@ -4640,22 +4629,22 @@ xu zd zd zd -hD -Qt +EH +Mp "} (12,1,1) = {" Mp -qc +vm OI yu Iw OC vx vx -vx lo vx vx +vx LR jz Ed @@ -4698,7 +4687,7 @@ OI jO vx ws -xs +PT PJ vQ vx @@ -4721,8 +4710,8 @@ us bP vx Ok -xs tQ +xs hu vx kM @@ -4767,9 +4756,9 @@ OS nI vx vx +UB vx vx -UB vx nG AJ @@ -5324,8 +5313,8 @@ Mp Mp Mp Ae -PT -Be +Ae +Ae NO Mp Mp diff --git a/_maps/shuttles/ngr/ngr_derecho.dmm b/_maps/shuttles/ngr/ngr_derecho.dmm index cee0d32a690..fe2e70a29c4 100644 --- a/_maps/shuttles/ngr/ngr_derecho.dmm +++ b/_maps/shuttles/ngr/ngr_derecho.dmm @@ -3946,8 +3946,7 @@ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/suit/space/syndicate/ngr, -/obj/item/clothing/head/helmet/space/syndicate/ngr, +/obj/item/clothing/suit/space/hardsuit/mining/heavy/ngr, /turf/open/floor/pod, /area/ship/storage/equip) "Id" = ( @@ -4015,12 +4014,11 @@ name = "foreman's suit storage unit"; req_access = list(56) }, -/obj/item/clothing/suit/space/syndicate/engie, -/obj/item/clothing/head/helmet/space/syndicate/engie, /obj/item/clothing/shoes/magboots/syndie, /obj/structure/sign/poster/contraband/engis_unite{ pixel_y = -32 }, +/obj/item/clothing/suit/space/hardsuit/mining/heavy/ngr, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo/office) "Jh" = ( @@ -5376,8 +5374,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/suit/space/syndicate/ngr, -/obj/item/clothing/head/helmet/space/syndicate/ngr, +/obj/item/clothing/suit/space/hardsuit/mining/heavy/ngr, /turf/open/floor/pod, /area/ship/storage/equip) "UA" = ( diff --git a/_maps/shuttles/ngr/ngr_pururangi.dmm b/_maps/shuttles/ngr/ngr_pururangi.dmm new file mode 100644 index 00000000000..87f6040dc83 --- /dev/null +++ b/_maps/shuttles/ngr/ngr_pururangi.dmm @@ -0,0 +1,7884 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"af" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/wall/white/directional/east{ + name = "fridge cabinet" + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/ghost_chili, +/obj/item/food/grown/ghost_chili, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/corn, +/obj/item/food/grown/corn, +/obj/item/food/grown/eggplant, +/obj/item/food/grown/eggplant, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/turf/open/floor/plastic, +/area/ship/crew) +"ag" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"an" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"ap" = ( +/obj/structure/chair/sofa/brown/old/right, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"az" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"aC" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"aD" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = -11 + }, +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"aP" = ( +/obj/machinery/bluespace_drive{ + icon_state = "bsdrive_right" + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"ba" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_y = 13; + pixel_x = 9 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"bd" = ( +/obj/effect/turf_decal/stairs{ + dir = 2; + color = "#575757" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"bf" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/beige, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"bg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/computer/helm/viewscreen/directional/west, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"bk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light/small/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"bm" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_personal{ + populate = 0 + }, +/obj/item/clothing/shoes/workboots, +/obj/item/storage/backpack/industrial, +/obj/item/clothing/under/syndicate/ngr, +/obj/item/clothing/suit/hazardvest/ngr, +/obj/item/clothing/accessory/armband/engine, +/obj/item/clothing/head/hardhat/ngr, +/obj/item/storage/belt/utility, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/head/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/gloves/color/yellow, +/obj/item/radio/headset/alt, +/obj/item/storage/backpack/duffelbag/engineering, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/neck/shemagh/ngr, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"bs" = ( +/obj/effect/spawner/bunk_bed, +/obj/structure/curtain/cloth/grey, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"bt" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 10; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/storage) +"bA" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/item/storage/backpack/duffelbag/syndie/med{ + pixel_y = 12 + }, +/obj/item/healthanalyzer{ + pixel_x = -9; + pixel_y = 10 + }, +/obj/item/healthanalyzer{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/item/sensor_device{ + pixel_x = 12; + pixel_y = 12 + }, +/obj/item/pinpointer/crew{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/clothing/suit/ngr/smock, +/obj/item/storage/belt/medical, +/obj/item/clothing/head/ngr/surgical, +/obj/item/storage/pouch/medical{ + pixel_y = -9; + pixel_x = -9 + }, +/obj/item/storage/belt/medical/webbing{ + pixel_y = -6 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 7; + pixel_y = -10 + }, +/obj/structure/closet/secure_closet/wall/directional/south{ + icon_door = "med_wall"; + req_access_txt = "5" + }, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/neck/shemagh/ngr, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"bC" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/item/clothing/suit/space/hardsuit/syndi/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/machinery/suit_storage_unit/inherit/locked{ + req_access_txt = "3" + }, +/obj/item/tank/jetpack/oxygen/harness, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"bN" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"bR" = ( +/obj/structure/platform/military, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"bS" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/holopad/secure, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"bV" = ( +/obj/structure/table/reinforced, +/obj/structure/bedsheetbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/towel{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"ci" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"cm" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/item/radio/intercom/wideband/table{ + dir = 4; + pixel_y = -18; + layer = 2.9 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"co" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"cw" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"cF" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/plastic{ + color = "#999999"; + dir = 1; + layer = 2; + pixel_y = 3; + pixel_x = -4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"cG" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/item/reagent_containers/condiment/milk{ + pixel_y = 13; + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/soymilk{ + pixel_y = 13; + pixel_x = -8 + }, +/obj/item/storage/fancy/egg_box{ + pixel_y = 7 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"cK" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "5-8" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"cV" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"db" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -11 + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"de" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"ds" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"dv" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"dy" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/wall/directional/east{ + name = "sundries cabinet" + }, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr/flap, +/obj/item/clothing/head/ngr/flap, +/turf/open/floor/carpet/red, +/area/ship/crew) +"dR" = ( +/obj/structure/railing/thin/corner{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = -12 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/cryo) +"dW" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1; + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/corner/opaque/red/half, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"ee" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"eg" = ( +/obj/machinery/button/door{ + name = "armory shutters control"; + id = "puru_armory_shutters"; + dir = 4; + pixel_x = -21; + pixel_y = 8; + req_access_txt = "3" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/red/half{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"eh" = ( +/obj/structure/crate_shelf, +/obj/structure/closet/crate/chem, +/obj/effect/turf_decal/techfloor, +/obj/item/reagent_containers/glass/chem_jug/aluminium, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/item/reagent_containers/glass/chem_jug/carbon, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"ei" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/small/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"ek" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/machinery/light/directional/north, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"el" = ( +/obj/structure/rack, +/obj/item/roller{ + pixel_y = 14; + pixel_x = -7 + }, +/obj/effect/turf_decal/techfloor, +/obj/item/roller{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/item/melee/sledgehammer/gorlex, +/obj/item/trench_tool{ + pixel_x = -5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"eo" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/structure/platform/military{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"ep" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/security/armory) +"ev" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"eA" = ( +/obj/structure/crate_shelf, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/closet/crate/freezer/surplus_limbs/organs, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"eG" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"eH" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Recovery Room A" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"eJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"eN" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"eS" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable/yellow{ + icon_state = "6-9" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"eX" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -13 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"eY" = ( +/obj/structure/table, +/obj/machinery/coffeemaker{ + pixel_y = 2 + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"fa" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"fg" = ( +/obj/structure/platform/military{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"fn" = ( +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/ngr, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"fp" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/structure/sign/poster/official/work_for_a_future{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"fq" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/table/reinforced, +/obj/item/clipboard{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/item/folder/syndicate{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/desk_flag/ngr{ + pixel_x = -14; + pixel_y = 19 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"fr" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"fw" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"fO" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"fY" = ( +/obj/machinery/button/door{ + dir = 8; + pixel_y = -1; + pixel_x = 10; + name = "bridge shutters control"; + id = "puru_bridge_shutters" + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 10; + pixel_x = 10; + name = "exterior shutters control"; + id = "puru_exterior_shutters" + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 10; + pixel_x = -1; + name = "cargo bay blast doors control"; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/button/shieldwallgen{ + dir = 8; + pixel_x = -3; + pixel_y = 1; + name = "cargo bay holofield switch"; + id = "puru_cargo_holofield" + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"fZ" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/item/paper, +/obj/item/pen/fountain{ + pixel_y = -2; + pixel_x = -2 + }, +/obj/item/clothing/glasses/regular{ + pixel_y = 7; + pixel_x = -3 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"gf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/syndicate/surplus, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/surplus, +/obj/machinery/camera/autoname, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"gi" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"gk" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"gn" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/maintenance/starboard) +"gp" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Closet" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"gw" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Cryopod Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"gz" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"gH" = ( +/obj/structure/railing/thin/corner{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 12; + pixel_x = 10 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 16 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"gI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/sign/poster/official/moth/hardhats{ + pixel_x = 32 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"gM" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/suit_storage_unit/inherit/locked{ + req_access_txt = "3" + }, +/obj/item/clothing/suit/space/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/tank/jetpack/oxygen/harness, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"gR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/computer/helm{ + dir = 8; + icon_state = "computer-right" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"gS" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"gV" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/aft) +"gW" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 21 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 8; + pixel_x = 21; + name = "port thrusters blast door control"; + id = "puru_thrusters_port_blastdoors" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"ha" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/aft) +"hb" = ( +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1; + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"hf" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/cargo) +"hj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"hq" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 6; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew) +"hD" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/crew) +"hL" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Recovery Room B" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"hQ" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"hZ" = ( +/obj/machinery/door/airlock/security{ + req_access_txt = "3"; + dir = 4; + name = "Armory" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"ie" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "engine fuel pump" + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"if" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"ir" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/closet/wall/directional/north{ + name = "radio closet" + }, +/obj/item/radio{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/radio{ + pixel_y = 8 + }, +/obj/item/radio{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/item/radio{ + pixel_x = -8 + }, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio{ + pixel_x = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"iA" = ( +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"iE" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"iK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"iL" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"iW" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/cargo) +"jb" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"jf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"ji" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"jA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"jB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"jJ" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"jK" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/machinery/recharger{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 5; + pixel_x = -2 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"jO" = ( +/obj/structure/chair/sofa/brown/old/left, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"jR" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"ke" = ( +/obj/effect/turf_decal/borderfloorblack, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"kh" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"ks" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters, +/obj/effect/turf_decal/corner/opaque/beige{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"kx" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"kC" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"kK" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"kL" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kN" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/machinery/fax/syndicate, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 1 + }, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"kS" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kW" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/chair/handrail, +/obj/effect/turf_decal/trimline/opaque/bar/warning{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kX" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch{ + fast_close = 1; + req_access_txt = "10"; + name = "Life Support" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"la" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/dorm/commad) +"lf" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Cargo Bay" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"lj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 13 + }, +/obj/structure/closet/crate/engineering{ + name = "relay crate" + }, +/obj/effect/mapping_helpers/crate_shelve, +/obj/item/circuitboard/machine/telecomms/relay, +/obj/item/circuitboard/machine/telecomms/relay, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stack/cable_coil/white, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"lm" = ( +/obj/structure/bed/pod{ + dir = 4 + }, +/obj/machinery/iv_drip, +/obj/structure/curtain, +/obj/item/bedsheet/medical{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"ln" = ( +/obj/structure/cable/yellow{ + icon_state = "1-10" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"lo" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/emcloset/wall/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"lp" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"lq" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/button/door{ + dir = 4; + pixel_y = -15; + pixel_x = -21; + name = "recovery room privacy shutters control"; + id = "puru_medroom_fore_shutters" + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"ls" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"lv" = ( +/obj/machinery/light_switch{ + pixel_x = 12; + pixel_y = 23 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/closet/emcloset/wall/directional/north, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"lw" = ( +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"ly" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"lA" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/sustenance, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"lB" = ( +/obj/effect/turf_decal/stairs{ + dir = 6; + color = "#575757" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/railing/thin/corner, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"lC" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"lF" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/syndicate{ + pixel_y = 10; + pixel_x = 5 + }, +/obj/item/toy/cards/deck/tarot{ + pixel_x = -7; + pixel_y = 3 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"lM" = ( +/obj/machinery/computer/security{ + dir = 1; + icon_state = "computer-right" + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"lS" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 5; + pixel_y = 13 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"lU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/structure/filingcabinet/double/grey{ + dir = 8; + pixel_x = 10 + }, +/obj/item/folder/syndicate, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 + }, +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/folder/blue, +/obj/item/folder/syndicate, +/obj/item/pen/fourcolor, +/obj/structure/cable/yellow, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"lW" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Cargo Bay" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"lY" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/plaque{ + pixel_y = 28; + engraved = 1; + name = "Puru-Rangi commemoration plaque"; + desc = "Ranginui, god of the sky, rains grievous tears upon the soil of his beloved Papatūānuku, and at times he storms in desperation to reach her. Puru-Rangi, a prayer to soothe his yearning heart, deprives the wind of its power, rendering gentle the would-be torrent." + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"ml" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"mr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"mv" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"mA" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/clothing/suit/space/syndicate/engie, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/engie, +/obj/item/tank/jetpack/oxygen/harness, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"mE" = ( +/obj/structure/crate_shelf, +/obj/effect/turf_decal/techfloor, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/item/stack/sheet/metal/twenty{ + pixel_y = 2; + pixel_x = -2 + }, +/obj/item/stack/sheet/glass/twenty{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/structure/closet/crate/engineering{ + name = "materials crate" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"mF" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/medical) +"mI" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"mU" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"mY" = ( +/obj/effect/turf_decal/techfloor, +/obj/item/radio/intercom/directional/north, +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/machinery/telecomms/processor/preset_one{ + network = "ngr_commnet"; + autolinkers = list("processor4","bus") + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"na" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"nb" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -15; + pixel_x = 21; + name = "recovery room privacy shutters control"; + id = "puru_medroom_aft_shutters" + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"nk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"nl" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/arrow_ccw{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"nm" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 9; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/communications/room) +"nt" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = -12 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/light/directional/north, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"nv" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_bridge_shutters"; + dir = 4 + }, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/ship/bridge) +"nA" = ( +/obj/structure/platform/military/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"nL" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 5; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/cargo) +"nQ" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"oa" = ( +/obj/structure/chair/comfy/grey{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"ob" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"oc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"ou" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"oy" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"oS" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Crew Quarters" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"oV" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/structure/table/reinforced, +/obj/item/radio/intercom/table{ + pixel_x = 6; + pixel_y = 2; + dir = 4 + }, +/obj/item/desk_flag/ngr{ + pixel_x = -10; + pixel_y = 10 + }, +/obj/item/pen/red{ + pixel_x = -5; + pixel_y = -7 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"oX" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/computer/atmos_control/tank/air_tank/pururangi{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"pe" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_port_blastdoors" + }, +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"pg" = ( +/obj/structure/chair/sofa/brown/old/right{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"pr" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"ps" = ( +/obj/structure/chair/handrail, +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"pB" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"pE" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"pJ" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 10; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/maintenance/starboard) +"pO" = ( +/obj/structure/bed/pod, +/obj/machinery/iv_drip, +/obj/structure/curtain, +/obj/item/bedsheet/medical, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"pT" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"qb" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 4 + }, +/obj/item/reagent_containers/glass/bucket{ + pixel_x = -8; + pixel_y = 7 + }, +/obj/structure/sink{ + pixel_y = 20 + }, +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"qc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"qg" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"qi" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/rag{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/structure/closet/wall/chem/directional/north{ + icon_door = "med_wall"; + icon_state = "freezer_wall"; + name = "chemistry supplies cabinet" + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/light/directional/west, +/obj/item/stock_parts/capacitor{ + pixel_x = -9; + pixel_y = 4 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/lighter, +/obj/item/reagent_containers/glass/filter{ + pixel_x = 4; + pixel_y = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"qn" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Morgue" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"qo" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"qq" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"qr" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"qD" = ( +/obj/structure/railing/thin/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"qG" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/sign/flag/ngr{ + pixel_y = 32 + }, +/obj/machinery/computer/atmos_control/external/pururangi{ + dir = 8; + icon_state = "computer-left" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"qH" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = 14; + pixel_y = 5 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -12; + pixel_x = 21; + name = "restroom door bolt control"; + id = "puru_restroom_doorbolts"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_x = 28; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"qJ" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"qN" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/plastic{ + color = "#999999"; + dir = 8; + layer = 2; + pixel_y = 9; + pixel_x = 3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"qO" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"qS" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/cryo) +"qU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/gun/ballistic/automatic/smg/sidewinder/no_mag, +/obj/item/gun/ballistic/automatic/pistol/rattlesnake/no_mag, +/obj/item/gun/ballistic/automatic/pistol/asp/no_mag, +/obj/structure/guncloset{ + anchored = 1; + req_access_txt = "3" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"rk" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/toxin{ + pixel_x = 3; + pixel_y = 10 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"rl" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/table, +/obj/item/coffee_cartridge/fancy/mocha{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/coffee_cartridge/fancy/blue{ + pixel_x = -1; + pixel_y = 7 + }, +/obj/item/coffee_cartridge/fancy/roast{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/item/storage/fancy/coffee_cart_rack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"rm" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 5; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"rn" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"rz" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"rN" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -16; + pixel_x = -12 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"rT" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/thin{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/cryo) +"rV" = ( +/obj/structure/platform/military{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"sd" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/computer/cargo{ + dir = 8; + icon_state = "computer-middle" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"sg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"si" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"sj" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/telecomms/hub{ + autolinkers = list("hub","bus","relay","broadcasterG","receiverG"); + id = "Communications Hub"; + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"st" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/fore) +"sz" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"sF" = ( +/obj/structure/table/reinforced, +/obj/item/cutting_board{ + pixel_y = 5; + pixel_x = 2 + }, +/obj/item/melee/knife, +/obj/item/kitchen/rollingpin{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 11; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 17; + pixel_x = -10 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"sG" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"sN" = ( +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/secure_closet/armorycage{ + anchored = 1; + name = "ammunition locker"; + locked = 0; + req_access = null; + req_access_txt = "3" + }, +/obj/item/storage/toolbox/ammo/c57, +/obj/item/storage/toolbox/ammo/c9mm, +/obj/item/ammo_box/magazine/m9mm_rattlesnake/empty, +/obj/item/ammo_box/magazine/m9mm_rattlesnake/empty, +/obj/item/ammo_box/magazine/m9mm_rattlesnake/empty, +/obj/item/ammo_box/magazine/m57_39_asp/empty, +/obj/item/ammo_box/magazine/m57_39_asp/empty, +/obj/item/ammo_box/magazine/m57_39_asp/empty, +/obj/item/ammo_box/magazine/m57_39_sidewinder/empty, +/obj/item/ammo_box/magazine/m57_39_sidewinder/empty, +/obj/item/ammo_box/magazine/m57_39_sidewinder/empty, +/obj/item/storage/toolbox/ammo/c57, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"sS" = ( +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/structure/window/plasma/reinforced/spawner, +/obj/machinery/air_sensor/atmos/air_tank/pururangi, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output/pururangi{ + dir = 8; + piping_layer = 2 + }, +/turf/open/floor/engine/air, +/area/ship/engineering) +"tc" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"tf" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_cargo_shutters" + }, +/obj/structure/platform/military/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"tg" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/crew/office) +"tp" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/machinery/autolathe, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"tv" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/southright{ + req_access_txt = "3"; + req_ship_access = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_armory_shutters"; + layer = 3.3 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"tB" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/hatch/blue, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"tD" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock/medical/glass{ + dir = 4; + name = "Infirmary" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"tG" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"tL" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "puru_cargo_holofield"; + dir = 1 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-9" + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/cargo) +"tP" = ( +/obj/machinery/power/shuttle/engine/electric, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"tS" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engines/starboard) +"tW" = ( +/obj/machinery/firealarm/directional/south{ + pixel_x = 3 + }, +/obj/structure/extinguisher_cabinet/directional/south{ + pixel_x = -8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"uc" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/gec{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"ue" = ( +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input/pururangi{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/ship/engineering) +"uh" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/southleft{ + req_access_txt = "3"; + req_ship_access = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_armory_shutters"; + layer = 3.3 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"uo" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/turretid/ship{ + id = "puru_turrets"; + pixel_y = 24 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 2 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"ux" = ( +/obj/structure/railing/thin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"uM" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"uR" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -14; + pixel_y = 5 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/cleanliness{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"uS" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"uT" = ( +/obj/machinery/modular_computer/console/preset/command{ + dir = 1; + icon_state = "computer-left" + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"uV" = ( +/obj/structure/closet/wall/directional/west{ + name = "cleaning supplies locker" + }, +/obj/item/towel{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/item/towel{ + pixel_x = 2; + pixel_y = -4 + }, +/obj/item/mop, +/obj/item/pushbroom{ + pixel_x = -9; + pixel_y = 6 + }, +/obj/item/reagent_containers/glass/bucket, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"uW" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"vb" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/structure/closet/crate/secure{ + name = "Patriotism Crate"; + desc = "A secure crate containing the Flag of the Republic, perfectly pressed and folded for rapid deployment." + }, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/effect/mapping_helpers/crate_shelve, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"vf" = ( +/obj/machinery/griddle, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plastic, +/area/ship/crew) +"vn" = ( +/obj/machinery/bluespace_drive, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"vo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/closet/emcloset/wall/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"vr" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/structure/sign/flag/ngr{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/cell_charger{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/paper_bin{ + pixel_x = -16; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -16; + pixel_y = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"vw" = ( +/obj/machinery/washing_machine{ + pixel_x = 8; + pixel_y = 2; + density = 0; + should_we_be_dense = 0 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"vG" = ( +/obj/docking_port/stationary{ + dwidth = 15; + height = 15; + width = 30; + name = "Puru-Rangi Starboard Airlock"; + dir = 2 + }, +/turf/template_noop, +/area/template_noop) +"vI" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/arrow_ccw{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"vJ" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/wall/white/directional/north{ + name = "kitchen supplies cabinet" + }, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/sink/chem{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/plate/large, +/obj/item/plate/large, +/obj/item/plate/large, +/obj/item/plate, +/obj/item/plate, +/obj/item/plate, +/obj/item/plate/small, +/obj/item/plate/small, +/obj/item/plate/small, +/obj/item/kitchen/fork{ + pixel_x = -9 + }, +/obj/item/kitchen/fork{ + pixel_x = -9 + }, +/obj/item/kitchen/spoon/plastic{ + pixel_x = 14 + }, +/obj/item/kitchen/spoon/plastic{ + pixel_x = 14 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 14 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 7 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"vL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/crate_shelf, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/mineral/plastitanium/five, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/item/radio/intercom/directional/south, +/obj/structure/closet/crate/engineering{ + name = "materials crate" + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"vN" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/computer/helm/viewscreen/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"vS" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"wk" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -12; + pixel_y = -14 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"wx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"wy" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"wA" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"wE" = ( +/obj/structure/cable/yellow{ + icon_state = "2-9" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"wH" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/engineering/communications/room) +"wJ" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"xd" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_y = 9; + pixel_x = -7 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"xi" = ( +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/structure/curtain, +/obj/machinery/shower{ + pixel_y = 19 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/machinery/door/window, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/crew/toilet) +"xm" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_cargo_shutters" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"xs" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"xz" = ( +/obj/effect/turf_decal/techfloor, +/obj/item/paper_bin{ + pixel_y = 3; + pixel_x = 6 + }, +/obj/item/pen/fountain{ + pixel_y = 4; + pixel_x = 6 + }, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"xG" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"xH" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"xI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"xN" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-5" + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"xX" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"yc" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"yh" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/camera/autoname{ + dir = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"ym" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"yn" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/pen/fountain{ + pixel_y = 9; + pixel_x = 7 + }, +/obj/item/clipboard{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/item/folder/white{ + pixel_x = -7 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"yo" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/computer/helm/viewscreen/directional/west, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"yr" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"yz" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"yC" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/yellow, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 + }, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/beige, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"yE" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_port_blastdoors" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"yN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"yT" = ( +/obj/structure/closet/wall/white/med{ + pixel_y = -28; + name = "cleaning supplies locker"; + icon_door = null + }, +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/rag{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"yX" = ( +/turf/open/floor/plastic, +/area/ship/crew) +"yZ" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_port_blastdoors" + }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"zf" = ( +/obj/machinery/power/shuttle/engine/electric, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"zo" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/trinary/mixer, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 6 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"zA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"zH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/industrial/outline/blue, +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"zM" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/structure/closet/secure_closet/wall/directional/west{ + req_access_txt = "3"; + icon_state = "sec_wall"; + name = "supply closet"; + pixel_x = 0; + dir = 2; + pixel_y = -28 + }, +/obj/item/storage/box/flares{ + pixel_x = 1; + pixel_y = -2 + }, +/obj/item/melee/knife/survival{ + pixel_x = -6; + pixel_y = -5 + }, +/obj/item/melee/knife/survival{ + pixel_x = -11; + pixel_y = -3 + }, +/obj/item/flashlight/seclite{ + pixel_x = 5; + pixel_y = -6 + }, +/obj/item/flashlight/seclite{ + pixel_x = -1; + pixel_y = -12 + }, +/obj/item/gps{ + pixel_x = 0; + pixel_y = 10 + }, +/obj/item/gps{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/item/radio/headset/alt, +/obj/item/radio/headset/alt, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Aa" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/firealarm/directional/north{ + pixel_x = 2 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"Ag" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"An" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/security/armory) +"Ay" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/communications/room) +"AC" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Office" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/office) +"AG" = ( +/obj/structure/curtain, +/obj/structure/toilet{ + dir = 8; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"AN" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/pen/fountain{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/stamp{ + pixel_x = -9; + pixel_y = 9 + }, +/obj/item/stamp/denied{ + pixel_x = -5 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"AO" = ( +/obj/machinery/button/door{ + dir = 1; + pixel_y = -17; + pixel_x = 5; + name = "cargo bay blast doors control"; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/button/shieldwallgen{ + dir = 1; + pixel_x = -3; + pixel_y = -15; + name = "cargo bay holofield switch"; + id = "puru_cargo_holofield" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"AP" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"Bb" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "engine fuel pump" + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"Be" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/computer/telecomms/server{ + dir = 4; + icon_state = "computer-right" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Bk" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"Bn" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/bar/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"BD" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Operating Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"BE" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"BL" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_fore_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/medical) +"BQ" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"BR" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"Ca" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor, +/obj/item/food/tortilla, +/obj/item/food/tortilla, +/obj/item/food/tortilla{ + pixel_y = 2 + }, +/obj/item/food/tortilla{ + pixel_y = 2 + }, +/obj/item/food/tortilla{ + pixel_y = 4 + }, +/obj/item/food/tortilla{ + pixel_y = 4 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"Cu" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"CH" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"CI" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/structure/closet/wall/orange/directional/east{ + name = "Wrecker's Locker"; + req_access = list(48); + pixel_x = 0; + pixel_y = 28; + dir = 1 + }, +/obj/item/storage/belt/mining/ngr, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr/flap, +/obj/item/clothing/gloves/explorer, +/obj/item/clothing/head/hardhat/ngr, +/obj/item/clothing/accessory/armband/cargo, +/obj/item/clothing/suit/hazardvest/ngr, +/obj/item/clothing/under/syndicate/ngr/jumpsuit, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"CJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"CS" = ( +/obj/structure/platform/military/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/stairs/left{ + color = "#575757" + }, +/area/ship/cargo) +"Do" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/corner/opaque/red, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Dz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/maintenance_hatch{ + req_access_txt = "10"; + name = "Starboard Engines" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"DA" = ( +/turf/open/floor/pod/dark, +/area/ship/cargo) +"DE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"DG" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_fore_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/medical) +"DJ" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/medical) +"DO" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/bodycamera{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/bodycamera{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/bodycamera{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/bodycamera{ + pixel_x = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Ed" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/warning{ + dir = 1 + }, +/obj/structure/chair/handrail, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Es" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Storage Bay" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) +"Eu" = ( +/obj/effect/turf_decal/stairs{ + dir = 5; + color = "#575757" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"ED" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"EG" = ( +/obj/machinery/camera/autoname{ + dir = 9 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"EI" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"EK" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/closet/crate/freezer/blood, +/obj/effect/mapping_helpers/crate_shelve, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Fk" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Fn" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Fo" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"FC" = ( +/obj/machinery/computer/operating, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"FE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"FI" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"FJ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/closet/firecloset/wall/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"FP" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/stairs{ + color = "#575757"; + dir = 1 + }, +/area/ship/crew/cryo) +"FQ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engines/port) +"FS" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/closet/firecloset/wall/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"FT" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/external, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/maintenance/starboard) +"FU" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/medical/glass{ + dir = 4; + name = "Infirmary" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"Ga" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 6; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"Gb" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/outline/blue, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Gc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Gd" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/telecomms/broadcaster/preset_right{ + autolinkers = list("broadcasterG","hub"); + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"Gj" = ( +/obj/machinery/power/ship_gravity, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Gp" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Gt" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/gun_maint_kit{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/item/gun_maint_kit{ + pixel_y = 4; + pixel_x = 3 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"GF" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west{ + pixel_y = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"GJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/structure/chair/sofa/brown/old/right/directional/east, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/carpet/red, +/area/ship/crew) +"GK" = ( +/obj/machinery/power/shuttle/engine/fire, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"GL" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"GO" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/bar/warning, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"GP" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/item/disk/surgery/t2{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 16 + }, +/obj/item/storage/case/surgery{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/structure/table/rolling{ + desc = "A rolling table model standard in the Republic. It can and will move." + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"GZ" = ( +/obj/item/storage/firstaid{ + pixel_y = 9 + }, +/obj/item/storage/firstaid/medical{ + pixel_x = -7 + }, +/obj/item/storage/firstaid/brute{ + pixel_x = 6 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/structure/closet/wall/white/med{ + dir = 1; + name = "first aid supplies locker"; + pixel_y = 28 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = -12 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"Hg" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/telecomms/receiver/preset_left/birdstation{ + autolinkers = list("receiverG"); + freq_listening = list(1353, 1205); + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"Hh" = ( +/obj/machinery/oven, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plastic, +/area/ship/crew) +"Hj" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"Hl" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Ht" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/black, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/stairs{ + color = "#575757"; + dir = 4 + }, +/area/ship/bridge) +"Hu" = ( +/obj/structure/railing/thin, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"HE" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"HF" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = 11 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"HJ" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Ih" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"In" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"Ix" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/engis_unite{ + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"IQ" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"IV" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/item/kirbyplants{ + icon_state = "plant-04" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"IY" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Jc" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Jn" = ( +/turf/template_noop, +/area/template_noop) +"Js" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Jw" = ( +/obj/effect/turf_decal/stairs{ + dir = 2; + color = "#575757" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_grid, +/obj/effect/turf_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"JB" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/warning, +/obj/structure/chair/handrail{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"JE" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/advanced_airlock_controller/directional/east, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"JF" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/crew) +"JI" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/tan, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"JJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"JN" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"JR" = ( +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/item/clothing/suit/space/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/ngr, +/obj/machinery/suit_storage_unit/inherit, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"JS" = ( +/obj/structure/sign/flag/ngr{ + pixel_y = 32 + }, +/obj/machinery/air_sensor/external/pururangi, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Kd" = ( +/obj/machinery/power/shuttle/engine/fire, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"Kf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/item/paper/guides/jobs/engi/combustion_thruster, +/obj/structure/noticeboard{ + pixel_x = 2; + pixel_y = 26 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Ki" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/item/kirbyplants{ + icon_state = "plant-12" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Kl" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/table/wood, +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_y = 7; + pixel_x = 7 + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Kr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 4 + }, +/obj/structure/sign/poster/radio/arf{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/item/kirbyplants{ + icon_state = "plant-05"; + pixel_x = -6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"KI" = ( +/obj/structure/platform/military/corner{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"KJ" = ( +/obj/structure/platform/military{ + dir = 4 + }, +/obj/machinery/power/port_gen/pacman{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/structure/sign/poster/official/help_others{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"KP" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"KW" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/computer/monitor{ + icon_state = "computer-left"; + dir = 4 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Lc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Ld" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/communications/room) +"Lg" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + name = "Engineering"; + req_access_txt = "10"; + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Lh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/closet/firecloset/wall/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"Lk" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/beige{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"LD" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow, +/obj/machinery/firealarm/directional/west{ + pixel_y = -14 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"LP" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"LS" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 9; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/medical) +"LY" = ( +/obj/structure/railing/thin/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Ma" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Mz" = ( +/obj/effect/turf_decal/techfloor, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/under/syndicate/ngr/jumpsuit, +/obj/item/clothing/under/syndicate/ngr/jumpsuit, +/obj/item/clothing/under/syndicate/ngr/fatigues, +/obj/item/clothing/under/syndicate/ngr/fatigues, +/obj/item/clothing/under/syndicate/ngr, +/obj/item/clothing/under/syndicate/ngr, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/structure/closet/wall/directional/south{ + name = "wardrobe cabinet" + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"ME" = ( +/obj/structure/filingcabinet/double/grey, +/obj/item/clipboard, +/obj/item/folder/syndicate, +/obj/item/folder, +/obj/machinery/firealarm/directional/north{ + pixel_x = -1 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/pen, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"MF" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Communications Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/communications/room) +"MM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"MR" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"MZ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ni" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"Np" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_aft_shutters"; + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Recovery Room" + }, +/turf/open/floor/plating, +/area/ship/medical) +"ND" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 8 + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"On" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 2 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Op" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/pipe_dispenser{ + pixel_x = -3; + pixel_y = 11 + }, +/obj/machinery/light/directional/east, +/obj/item/storage/toolbox/syndicate{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/gear_pack/anglegrinder, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"OE" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"OX" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/light/directional/north, +/obj/machinery/telecomms/bus/preset_one{ + autolinkers = list("hub","processor4","bus"); + network = "ngr_commnet"; + freq_listening = list(1353, 1205) + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"OY" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Pc" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/item/towel{ + pixel_y = 5; + pixel_x = -6 + }, +/obj/item/towel{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/towel{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/towel{ + pixel_y = 12; + pixel_x = 6 + }, +/obj/structure/closet/wall/directional/north{ + name = "towel closet" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"Po" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Ps" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/maintenance/starboard) +"PC" = ( +/obj/effect/turf_decal/stairs{ + dir = 5; + color = "#575757" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"PN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/radiation{ + name = "fuel crate" + }, +/obj/item/stack/sheet/mineral/plasma/twenty, +/obj/item/stack/sheet/mineral/uranium/ten, +/obj/effect/mapping_helpers/crate_shelve, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"PW" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Qa" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Qe" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Qw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = 11 + }, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"Qz" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/engineering) +"QD" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"QI" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"QJ" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/docking_port/mobile{ + launch_status = 0; + name = "Puru-Rangi"; + preferred_direction = 4; + port_direction = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"QN" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/ship/engineering) +"QO" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/telecomms/server/presets/common{ + autolinkers = list("common","hub"); + freq_listening = list(1353); + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"QP" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/office) +"QU" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/mortar/metal, +/obj/item/pestle{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"Rd" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/structure/table/optable, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"RB" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"RC" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 1 + }, +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/machinery/computer/cryopod/directional/west, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"RD" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch{ + dir = 1; + req_ship_access = 0; + id_tag = "puru_restroom_doorbolts"; + name = "Restroom" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/toilet) +"RF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Starboard Maintenance Airlock" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/maintenance/starboard) +"RM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"RP" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/railing/thin, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"RR" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/modular_computer/console/preset/command{ + dir = 8; + layer = 2.91 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"RU" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/closet/emcloset/wall/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"RV" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "puru_cargo_holofield" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-10" + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/cargo) +"RW" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Sh" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/item/clothing/gloves/combat{ + pixel_x = 4; + pixel_y = -10 + }, +/obj/item/clothing/gloves/combat{ + pixel_x = 4; + pixel_y = -10 + }, +/obj/item/storage/belt/security/webbing/ngr{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/storage/belt/security/webbing/ngr{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/storage/pouch/ammo{ + pixel_x = 13; + pixel_y = -2 + }, +/obj/item/storage/pouch/ammo{ + pixel_x = 13; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/ngr{ + pixel_x = 12; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/ngr{ + pixel_x = 12; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/ngr{ + pixel_x = -9; + pixel_y = -1 + }, +/obj/item/clothing/head/helmet/ngr{ + pixel_x = -9; + pixel_y = -1 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr{ + pixel_x = -7; + pixel_y = 10 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr{ + pixel_x = -7; + pixel_y = 10 + }, +/obj/item/storage/belt/security/webbing/ngr/alt, +/obj/item/storage/belt/security/webbing/ngr/alt, +/obj/structure/closet/secure_closet/wall/directional/west{ + req_access_txt = "3"; + icon_state = "sec_wall"; + name = "armor closet"; + pixel_x = 0; + dir = 2; + pixel_y = -28 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Sq" = ( +/obj/structure/chair/handrail, +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"St" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"SD" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"SN" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew) +"SR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "6-8" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"SY" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/item/radio/intercom/directional/north{ + pixel_x = -5; + pixel_y = 31 + }, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 23 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Tb" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Tn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Tp" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-6" + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"Ts" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"Tx" = ( +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"TG" = ( +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"TO" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"TY" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red/half{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Ud" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"Un" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Us" = ( +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"Uu" = ( +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"UA" = ( +/obj/structure/rack, +/obj/item/storage/box/bodybags{ + pixel_x = -7; + pixel_y = 13 + }, +/obj/item/storage/box/gloves{ + pixel_y = 13; + pixel_x = 9 + }, +/obj/item/storage/box/masks{ + pixel_y = 5; + pixel_x = -1 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"UB" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Communications Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/communications/room) +"UC" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/secure_closet/wall/directional/north{ + req_access_txt = "3"; + name = "lieutenant's locker"; + icon_state = "sec_wall"; + dir = 4; + pixel_x = 28; + pixel_y = 0 + }, +/obj/item/storage/guncase/pistol/asp, +/obj/item/clothing/under/syndicate/ngr/officer, +/obj/item/clothing/suit/armor/ngr/lieutenant, +/obj/item/clothing/head/ngr/flap, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr/peaked, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/mask/breath/ngr, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/storage/pouch/squad, +/obj/item/radio/headset/syndicate/alt/ngr, +/obj/item/megaphone/sec, +/obj/item/radio/headset/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"UI" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs/right{ + color = "#575757" + }, +/area/ship/cargo) +"UK" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"UO" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/kirbyplants{ + icon_state = "plant-05"; + pixel_x = -6 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"UR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/stamp/ngr/lieutenant{ + pixel_x = -7; + pixel_y = 13 + }, +/obj/item/stamp/ngr/captain{ + pixel_x = 3; + pixel_y = 11 + }, +/obj/item/clipboard{ + pixel_x = 1; + pixel_y = -6 + }, +/obj/item/folder/documents/syndicate/ngr{ + pixel_y = -10; + pixel_x = 4 + }, +/obj/machinery/light/directional/east, +/obj/item/stamp/ngr{ + pixel_x = -10; + pixel_y = 4 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"UT" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/toilet) +"UU" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/medical) +"UX" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/helm/viewscreen/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"UY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Vb" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_aft_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/medical) +"Vd" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/light/directional/west, +/obj/structure/chair/sofa/brown/old/left/directional/east, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Ve" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"Vk" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Vq" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/filingcabinet/double/grey{ + dir = 8; + pixel_x = 6 + }, +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/pen, +/obj/item/pen/fountain, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Vu" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Vx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"Vy" = ( +/obj/structure/railing/thin, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clipboard{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/pen/fountain{ + pixel_y = 5; + pixel_x = 7 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"VA" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"VJ" = ( +/obj/machinery/button/door{ + dir = 1; + pixel_y = -17; + pixel_x = -5; + name = "cargo bay shutters control"; + id = "puru_cargo_shutters" + }, +/obj/machinery/light/directional/south{ + pixel_x = 14 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"VO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"VU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/curtain/cloth/grey, +/obj/effect/spawner/bunk_bed, +/obj/structure/sign/flag/ngr{ + pixel_y = 32 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"VX" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/red/half{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Wj" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Wq" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"Ws" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/machinery/light/directional/north, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"WA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/platform/military{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"WD" = ( +/obj/structure/table/reinforced, +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = 22 + }, +/obj/item/stack/rods/ten{ + pixel_y = 5; + pixel_x = -8 + }, +/obj/item/stack/sheet/mineral/titanium/five{ + pixel_y = 7; + pixel_x = 6 + }, +/obj/structure/closet/wall/white/med{ + dir = 4; + pixel_x = 28; + name = "surgical supplies locker" + }, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, +/obj/item/clothing/head/welding{ + pixel_x = 8; + pixel_y = -4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"WE" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 6; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/cargo) +"WF" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/tan, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"WG" = ( +/obj/machinery/door/airlock/grunge{ + req_access_txt = "19"; + dir = 4; + name = "Command Quarters" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/dorm/commad) +"WJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"WN" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"WO" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"WP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos{ + dir = 4; + icon_state = "vent_map_siphon_on-3" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"WR" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"WZ" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Xa" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/machinery/airalarm/directional/south, +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_y = 3 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Xb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/engineering) +"Xd" = ( +/obj/machinery/power/port_gen/pacman/super{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/obj/structure/platform/military{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Xf" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/closet/crate/rations, +/obj/effect/mapping_helpers/crate_shelve, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Xh" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Xr" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/chem_master, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"Xu" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/cargo) +"Xw" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + name = "Crew Quarters" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"XD" = ( +/obj/structure/railing/thin, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"XE" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_starboard_blastdoors" + }, +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"XO" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_starboard_blastdoors" + }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"XP" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/autoname, +/obj/item/reagent_containers/food/drinks/bottle/wine{ + pixel_y = 17; + pixel_x = 9 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 13 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 18; + pixel_x = -6 + }, +/obj/structure/dresser, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"XR" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/chair/handrail, +/obj/effect/turf_decal/trimline/opaque/bar/warning{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"XZ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/storage) +"Ye" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/maintenance_hatch{ + req_access_txt = "10"; + name = "Port Engines" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"Yf" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -14; + pixel_x = -12 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -8; + pixel_x = 21; + name = "starboard thrusters blast door control"; + id = "puru_thrusters_starboard_blastdoors" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"Yq" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"Yv" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Yw" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Yz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/bar/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"YA" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/beige{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"YC" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"YF" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 9 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -13 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"YG" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/fire{ + pixel_x = -3; + pixel_y = 10 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"YQ" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/cola/starkist, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Zc" = ( +/obj/structure/chair/sofa/brown/old/left{ + dir = 8 + }, +/obj/machinery/computer/helm/viewscreen/directional/south, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"Zh" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Zi" = ( +/obj/effect/spawner/bunk_bed, +/obj/structure/curtain/cloth/grey, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Zv" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"ZG" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/structure/closet/secure_closet/wall/directional/north{ + req_access_txt = "20"; + icon_state = "solgov_wall"; + name = "captain's locker" + }, +/obj/item/storage/guncase/pistol/asp, +/obj/item/clothing/under/syndicate/ngr/officer, +/obj/item/clothing/suit/armor/ngr/captain, +/obj/item/clothing/head/ngr/peaked, +/obj/machinery/airalarm/directional/west, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/mask/breath/ngr, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/storage/pouch/squad, +/obj/item/radio/headset/syndicate/alt/captain/ngr, +/obj/item/megaphone/sec, +/obj/item/radio/headset/syndicate/captain/ngr, +/obj/item/clothing/mask/gas/syndicate, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"ZO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/plastic{ + color = "#999999"; + dir = 4; + layer = 2; + pixel_y = 4; + pixel_x = -4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"ZQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"ZU" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"ZX" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/tank_dispenser, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) + +(1,1,1) = {" +Jn +Jn +ae +Jn +Jn +FQ +Kd +zf +zf +FQ +Jn +Jn +Jn +tS +tP +tP +GK +tS +Jn +Jn +Jn +Jn +Jn +"} +(2,1,1) = {" +Jn +Jn +TG +Jn +Jn +FQ +yZ +pe +yE +FQ +Zv +EG +WP +tS +XE +XE +XO +tS +Jn +Jn +Jn +Jn +Jn +"} +(3,1,1) = {" +Jn +Jn +TG +Jn +Jn +FQ +Bb +Tp +uS +FQ +Wq +MR +WN +tS +fO +xN +ie +tS +Jn +Jn +Jn +Jn +Jn +"} +(4,1,1) = {" +ae +Jn +TG +Jn +Jn +FQ +gW +sG +wE +Ye +kx +eX +FJ +Dz +ln +sg +Yf +tS +Jn +Jn +Jn +ae +Jn +"} +(5,1,1) = {" +TG +Jn +Un +nm +Ay +Ay +FQ +FQ +FQ +FQ +KI +FE +tW +tS +tS +tS +tS +tS +XZ +bt +Jn +TG +Jn +"} +(6,1,1) = {" +TG +Jn +Ay +Ay +Gd +Ay +ly +ci +tB +RP +hb +iK +Vx +DE +Gj +XZ +Aa +lj +vL +XZ +Jn +TG +Jn +"} +(7,1,1) = {" +TG +Jn +Ay +mY +VO +MF +zA +cV +zo +lB +Jw +fw +SD +RM +OE +Es +yN +qc +PN +XZ +Jn +TG +Jn +"} +(8,1,1) = {" +TG +Jn +wH +QO +oc +Ay +Kf +Xb +xG +Qz +sz +jf +PC +jf +yz +XZ +vn +Ve +aC +XZ +Jn +TG +Jn +"} +(9,1,1) = {" +TG +Jn +wH +sj +wk +Ay +SY +QN +Gb +MR +KJ +fg +WA +rV +Xd +XZ +aP +lo +pT +XZ +Jn +TG +Jn +"} +(10,1,1) = {" +TG +Jn +Ay +OX +Ud +UB +zH +Fo +kI +kX +Hj +BR +qq +IQ +Ix +QP +QP +QP +QP +QP +Jn +TG +Jn +"} +(11,1,1) = {" +TG +Jn +Ld +Ay +Hg +Ay +ue +sS +oX +MR +xI +Ih +hj +ji +gI +AC +uW +Be +KW +QP +Jn +TG +Jn +"} +(12,1,1) = {" +TG +Jn +Jn +Ay +Ay +Ay +MR +MR +MR +MR +nt +Ts +aD +QP +QP +QP +WR +QI +HJ +tg +Jn +TG +Jn +"} +(13,1,1) = {" +TG +Jn +Jn +UU +qi +Xr +yn +UU +UA +UU +MR +Lg +MR +QP +mA +GF +WZ +wJ +qr +tg +Jn +TG +Jn +"} +(14,1,1) = {" +TG +Jn +Jn +DJ +QU +bf +Lk +gp +yT +UU +ha +oy +rN +QP +bm +uc +Op +oV +vr +QP +Jn +TG +Jn +"} +(15,1,1) = {" +TG +Jn +Jn +DJ +lS +iL +bA +UU +UU +UU +gV +Fn +mU +Ps +Ps +Ps +Ps +Ps +Ps +Ps +pJ +Qa +Jn +"} +(16,1,1) = {" +ke +LS +UU +UU +UU +jJ +JN +UU +YG +UU +UU +Ed +ev +RF +vo +bk +Lh +FT +RU +ei +gn +QJ +vG +"} +(17,1,1) = {" +Jn +UU +Ma +ls +qn +qo +uM +hL +xH +lm +Vb +ee +IV +Ps +HF +MM +Qw +Ps +gf +JE +AP +Qa +Jn +"} +(18,1,1) = {" +Jn +UU +Cu +Rd +UU +ps +xX +Np +nb +UX +UU +lp +ds +Ps +Ps +Ps +Ps +Ps +Ps +Ps +Ps +iE +Jn +"} +(19,1,1) = {" +mF +UU +UU +UU +UU +yh +HE +UU +UU +UU +UU +kW +jA +Xw +yC +an +bg +Kr +Vd +GJ +hD +Jn +Jn +"} +(20,1,1) = {" +UU +FC +Gp +UU +uR +hQ +LP +BL +lq +vN +UU +IY +Fk +oS +QD +WO +Ni +fa +Js +Kl +JF +Jn +Jn +"} +(21,1,1) = {" +UU +fr +PW +BD +az +pB +uM +eH +Yw +pO +DG +kL +Ki +SN +Hh +Yq +sF +fa +Js +Mz +SN +Jn +Jn +"} +(22,1,1) = {" +UU +WD +GP +UU +GZ +YA +ks +UU +rk +UU +UU +kS +kC +SN +cG +yX +Ca +xs +WJ +Zi +SN +Jn +Jn +"} +(23,1,1) = {" +UU +UU +UU +UU +UU +tD +FU +gS +gS +gS +gS +gz +Bk +gS +vJ +vf +af +BQ +dy +bs +SN +Jn +Jn +"} +(24,1,1) = {" +qS +qb +YF +RC +qS +Yv +RW +gS +WF +fp +UO +BE +cw +gS +la +la +la +WG +la +la +hq +Jn +Jn +"} +(25,1,1) = {" +qS +Pc +nA +eo +qS +Qe +yr +gS +fZ +xd +cF +Vk +ym +eY +la +ZG +GL +lC +lU +la +Jn +Jn +Jn +"} +(26,1,1) = {" +qS +Ag +bR +rT +gw +ob +JB +gS +ba +fq +qN +YC +St +rl +la +XP +co +oa +UK +la +Jn +Jn +Jn +"} +(27,1,1) = {" +qS +ir +FP +dR +qS +rn +jR +gS +lY +FI +tc +vS +St +Xa +la +VU +UC +UR +AN +la +Jn +Jn +Jn +"} +(28,1,1) = {" +qS +qS +qS +qS +qS +FS +de +gS +ME +RB +bS +eN +nQ +if +la +la +la +la +la +la +ep +Jn +Jn +"} +(29,1,1) = {" +UT +vw +uV +db +RD +Gc +UY +pr +gi +TO +kh +Bn +Yz +pE +ND +nl +uh +yo +eg +lM +An +Jn +Jn +"} +(30,1,1) = {" +UT +bV +jB +Us +UT +Zh +OY +qJ +Tb +kK +eG +gk +gk +LY +nk +vI +tv +Vq +TY +uT +An +Jn +Jn +"} +(31,1,1) = {" +UT +xi +qH +AG +UT +EI +jb +gS +jK +Wj +Xh +KP +xz +An +hZ +An +An +bC +Eu +gM +An +Jn +Jn +"} +(32,1,1) = {" +UT +UT +UT +UT +UT +XR +GO +gS +gS +uo +cm +RR +kN +An +Do +XD +wA +ou +ml +zM +An +Jn +Jn +"} +(33,1,1) = {" +mv +Jn +Hl +Jn +st +Lc +CH +lA +gS +Ht +bN +ZU +na +An +dW +VX +bd +Tn +ZQ +Sh +An +Jn +Jn +"} +(34,1,1) = {" +TG +Jn +TG +Jn +st +lv +Vu +YQ +gS +qG +sd +gR +fY +An +DO +Vy +sN +qU +Gt +MZ +An +Jn +Jn +"} +(35,1,1) = {" +TG +Jn +TG +Jn +qg +lW +lf +gS +gS +nv +nv +nv +nv +An +An +An +An +An +An +An +ep +Jn +Jn +"} +(36,1,1) = {" +TG +Jn +TG +Jn +qg +wy +si +LD +CS +qO +ED +eJ +dv +tf +Jc +Tx +tp +qg +Jn +Jn +Jn +Jn +Jn +"} +(37,1,1) = {" +TG +Jn +TG +Jn +qg +Sq +In +qD +UI +yc +ag +On +JJ +xm +JI +mI +el +qg +Jn +Jn +Jn +Jn +Jn +"} +(38,1,1) = {" +TG +Jn +lw +Jn +iW +DA +CJ +ux +JR +mr +SR +Uu +VJ +qg +Po +tG +ZX +qg +Jn +Jn +Jn +Jn +Jn +"} +(39,1,1) = {" +TG +Jn +Jn +Jn +iW +ap +ZO +Hu +fn +wx +cK +eS +AO +qg +CI +Xf +mE +qg +Jn +Jn +Jn +Jn +Jn +"} +(40,1,1) = {" +VA +Jn +Jn +Jn +iW +jO +lF +gH +qg +RV +hf +hf +tL +qg +rz +vb +eh +qg +Jn +Jn +Jn +Jn +Jn +"} +(41,1,1) = {" +Jn +Jn +Jn +Jn +qg +Ws +pg +Zc +qg +JS +TG +TG +iA +qg +ek +EK +eA +qg +Jn +Jn +Jn +Jn +Jn +"} +(42,1,1) = {" +Jn +Jn +Jn +Jn +nL +Xu +Xu +Xu +Ga +Jn +Jn +Jn +Jn +rm +qg +qg +qg +WE +Jn +Jn +Jn +Jn +Jn +"} diff --git a/_maps/shuttles/warra/warra_harrier.dmm b/_maps/shuttles/warra/warra_harrier.dmm index 8cec55449a4..28ea9cc77ad 100644 --- a/_maps/shuttles/warra/warra_harrier.dmm +++ b/_maps/shuttles/warra/warra_harrier.dmm @@ -2512,10 +2512,10 @@ /area/ship/cargo) "nx" = ( /obj/effect/turf_decal/warra/modern_big/top_right, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 5 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 5 }, /turf/open/floor/plasteel, @@ -2926,10 +2926,10 @@ /area/ship/storage/eva) "qO" = ( /obj/effect/turf_decal/warra/modern_big/bottom_right, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 6 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 6 }, /turf/open/floor/plasteel, @@ -3836,10 +3836,10 @@ /area/ship/storage/eva) "vm" = ( /obj/effect/turf_decal/warra/modern_big/bottom_left, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 10 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 10 }, /turf/open/floor/plasteel, @@ -4086,10 +4086,10 @@ "wr" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/warra/modern_big/top_left, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 9 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 9 }, /turf/open/floor/plasteel, @@ -5836,8 +5836,8 @@ /area/ship/hallway/starboard) "FR" = ( /obj/effect/turf_decal/warra/modern_big/bottom_center, -/obj/effect/turf_decal/trimline/opaque/warrablue/line, /obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line, /turf/open/floor/plasteel, /area/ship/hallway/central) "FS" = ( @@ -6206,10 +6206,10 @@ /area/ship/storage/eva) "Ia" = ( /obj/effect/turf_decal/warra/modern_big/top_center, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 1 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 1 }, /turf/open/floor/plasteel, @@ -7163,10 +7163,10 @@ dir = 4 }, /obj/effect/turf_decal/warra/modern_big/center_left, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 8 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 8 }, /turf/open/floor/plasteel, @@ -7832,10 +7832,10 @@ dir = 8 }, /obj/effect/turf_decal/warra/modern_big/center_right, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 4 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 4 }, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/warra/warra_magpie.dmm b/_maps/shuttles/warra/warra_magpie.dmm index 80ceba47e8c..07e2016d5ea 100644 --- a/_maps/shuttles/warra/warra_magpie.dmm +++ b/_maps/shuttles/warra/warra_magpie.dmm @@ -26,7 +26,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/office) "aC" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/filled/corner, @@ -73,7 +73,7 @@ /turf/open/floor/plating, /area/ship/hallway/starboard) "aO" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/structure/table, @@ -92,7 +92,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/central) "aU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/warning, @@ -118,7 +118,7 @@ /obj/effect/turf_decal/siding/white{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/warning, @@ -202,7 +202,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "bu" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -310,7 +310,7 @@ /turf/open/floor/plasteel/mono, /area/ship/crew/canteen) "ci" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/siding/white{ @@ -849,7 +849,7 @@ /turf/open/floor/plasteel/mono, /area/ship/medical) "gh" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/warning{ @@ -1034,7 +1034,7 @@ /turf/open/floor/plasteel/patterned/ridged, /area/ship/crew/toilet) "gD" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -1435,7 +1435,7 @@ /obj/effect/turf_decal/siding/white{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -1618,7 +1618,7 @@ /obj/structure/chair/bench/blue{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /turf/open/floor/plasteel/tech/techmaint, @@ -1654,7 +1654,7 @@ /turf/closed/wall/mineral/titanium, /area/ship/security) "kM" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/siding/white{ @@ -1767,7 +1767,7 @@ /turf/open/floor/engine/hull/reinforced, /area/ship/external/dark) "mh" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 9 }, /turf/open/floor/plasteel/tech/techmaint, @@ -1882,7 +1882,7 @@ /turf/open/floor/plasteel/patterned/grid/dark, /area/ship/cargo/starboard) "nd" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/siding/white, @@ -1926,7 +1926,7 @@ /area/ship/engineering) "nA" = ( /obj/structure/chair/sofa/blue/corpo/left, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/item/toy/plush/blahaj{ @@ -2020,7 +2020,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/external/dark) "oC" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/warning{ @@ -2269,7 +2269,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "qk" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/filled/corner{ @@ -2310,7 +2310,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "qR" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/warning{ @@ -2407,7 +2407,7 @@ /turf/open/floor/plasteel/patterned/brushed, /area/ship/crew/cryo) "ry" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/siding/white{ @@ -2474,9 +2474,6 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/engineering/atmospherics) "sC" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 10 - }, /obj/structure/chair/office, /obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 @@ -2600,7 +2597,7 @@ /turf/open/floor/plasteel/dark, /area/ship/security) "sX" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/siding/white, @@ -2618,7 +2615,7 @@ /area/ship/crew/dorm) "tf" = ( /obj/structure/table, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/item/plate/small{ @@ -2675,7 +2672,7 @@ /area/ship/cargo) "tr" = ( /obj/machinery/vending/cola/blue, -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/trimline/opaque/white/filled/line{ dir = 8 }, @@ -2838,9 +2835,6 @@ /turf/open/floor/wood/walnut, /area/ship/crew/dorm/commad) "ua" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 6 - }, /obj/structure/cable/white{ icon_state = "1-4" }, @@ -2964,7 +2958,7 @@ /turf/closed/wall/mineral/titanium, /area/ship/crew/toilet) "ve" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/structure/fluff/hedge, @@ -3007,7 +3001,7 @@ /turf/open/floor/plating, /area/ship/engineering) "vF" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/warraspaceworks_small/right, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) @@ -3160,8 +3154,8 @@ pixel_x = -1; pixel_y = 2 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 9 +/obj/effect/turf_decal/corner/opaque/warrablue{ + dir = 5 }, /obj/machinery/power/apc/auto_name/directional/south, /obj/machinery/light_switch{ @@ -3203,7 +3197,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/dorm/commad) "xm" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -3223,7 +3217,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "xn" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters, +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters, /obj/effect/turf_decal/trimline/opaque/white/corner{ dir = 4 }, @@ -3256,7 +3250,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/external/dark) "xR" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/filled/warning, @@ -3438,7 +3432,7 @@ /area/ship/crew/canteen) "zz" = ( /obj/machinery/vending/cigarette, -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters{ +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters{ dir = 1 }, /obj/machinery/camera/autoname{ @@ -3585,7 +3579,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "AB" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/warning, @@ -3672,7 +3666,7 @@ /turf/open/floor/plating, /area/ship/engineering) "Bp" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -3886,7 +3880,7 @@ /obj/structure/chair/bench/blue{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /turf/open/floor/plasteel/tech/techmaint, @@ -4117,7 +4111,7 @@ /turf/open/floor/plasteel/mono, /area/ship/hallway/port) "DW" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/warraspaceworks_small, /obj/structure/chair/office, /turf/open/floor/plasteel/mono/dark, @@ -4136,7 +4130,7 @@ /turf/open/floor/plasteel/lightgrey, /area/ship/medical) "Ek" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters{ +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters{ dir = 4 }, /turf/open/floor/plasteel/tech/techmaint, @@ -4336,7 +4330,7 @@ /turf/open/floor/plasteel/mono, /area/ship/crew/canteen) "Fn" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -4558,7 +4552,7 @@ /turf/open/floor/plating, /area/ship/engineering/atmospherics) "Hv" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters{ +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters{ dir = 8 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -4759,7 +4753,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering/atmospherics) "HU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -4772,8 +4766,8 @@ /area/ship/hallway/starboard) "HZ" = ( /obj/machinery/washing_machine, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 9 +/obj/effect/turf_decal/corner/opaque/warrablue{ + dir = 5 }, /obj/machinery/firealarm/directional/east{ pixel_y = 6 @@ -4866,7 +4860,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "ID" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/warraspaceworks_small/left, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) @@ -6158,7 +6152,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/atmospherics) "RU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -6316,7 +6310,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/external/dark) "Tk" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -6692,7 +6686,7 @@ /obj/effect/turf_decal/siding/white{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -6868,7 +6862,7 @@ /area/ship/bridge) "XN" = ( /obj/structure/chair/sofa/blue/corpo/right, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /turf/open/floor/plasteel/tech/techmaint, @@ -7022,7 +7016,7 @@ /area/ship/cargo) "Zc" = ( /obj/machinery/vending/snack/teal, -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/trimline/opaque/white/filled/line{ dir = 8 }, @@ -7100,7 +7094,7 @@ /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) "ZD" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -7110,7 +7104,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "ZJ" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -7128,7 +7122,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "ZR" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -7159,7 +7153,7 @@ /turf/open/floor/plating, /area/ship/security) "ZU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/siding/white, diff --git a/check_regex.yaml b/check_regex.yaml index 184e5fae74f..bb7f28e5078 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -38,7 +38,7 @@ standards: - exactly: [ - 262, + 259, "non-bitwise << uses", '(? 0. #define NOHUSK 22 // Can't be husked. #define NOMOUTH 23 diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index c3ffd14dd9b..8369ea8eed4 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -6,7 +6,6 @@ #define MUTE_PRAY (1<<2) #define MUTE_ADMINHELP (1<<3) #define MUTE_DEADCHAT (1<<4) -#define MUTE_MENTORHELP (1<<5) #define MUTE_ALL (~0) //Some constants for DB_Ban @@ -38,7 +37,6 @@ #define R_SPAWN (1<<12) #define R_AUTOADMIN (1<<13) #define R_DBRANKS (1<<14) -#define R_MENTOR (1<<15) #define R_DEFAULT R_AUTOADMIN diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 698d3f05b6f..8c3e31dd0df 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -14,7 +14,6 @@ #define MESSAGE_TYPE_ADMINPM "adminpm" #define MESSAGE_TYPE_COMBAT "combat" #define MESSAGE_TYPE_ADMINCHAT "adminchat" -#define MESSAGE_TYPE_MENTORCHAT "mentorchat" #define MESSAGE_TYPE_EVENTCHAT "eventchat" #define MESSAGE_TYPE_ADMINLOG "adminlog" #define MESSAGE_TYPE_ATTACKLOG "attacklog" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index e151089f286..c4f88948fde 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -196,6 +196,11 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun))) #define EXPLODE_LIGHT 3 #define EXPLODE_GIB_THRESHOLD 50 //ex_act() with EXPLODE_DEVASTATE severity will gib mobs with less than this much bomb armor +#define EX_LIGHT_BASE_DAM 40 +#define EX_LIGHT_BASE_ITEM_DAM 45 +#define EX_HEAVY_BASE_DAM 80 +#define EX_HEAVY_BASE_ITEM_DAM 75 + #define EMP_HEAVY 1 #define EMP_LIGHT 2 diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 76b30176df4..e163639be16 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -76,7 +76,6 @@ #define span_medradio(str) ("" + str + "") #define span_memo(str) ("" + str + "") #define span_memoedit(str) ("" + str + "") -#define span_mentornotice(str) ("" + str + "") #define span_message(str) ("" + str + "") #define span_mind_control(str) ("" + str + "") #define span_minorannounce(str) ("" + str + "") diff --git a/code/__DEFINES/traits/traits.dm b/code/__DEFINES/traits/traits.dm index f4214cbc9bc..59793ca5e9c 100644 --- a/code/__DEFINES/traits/traits.dm +++ b/code/__DEFINES/traits/traits.dm @@ -396,13 +396,14 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Trait for allowing an item that isn't food into the customizable reagent holder #define TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT "odd_customizable_food_ingredient" +///Replaces all of a mob's limbs and organs with cybernetics at roundstart. +#define TRAIT_USE_PROSTHETIC "use_prosthetic" +///This human's a mutant! +#define TRAIT_GENEMODDED "genemodded" + ///Trait granted by lipstick #define LIPSTICK_TRAIT "lipstick_trait" -//Bone breaking traits. Don't actually do anything(?) -#define TRAIT_NOBREAK "no_break" -#define TRAIT_ALLBREAK "all_break" - //common trait sources #define TRAIT_GENERIC "generic" #define GENERIC_ITEM_TRAIT "generic_item" diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 63dff75ee83..818ec26d367 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -76,11 +76,6 @@ if (CONFIG_GET(flag/log_adminchat)) WRITE_LOG(GLOB.world_game_log, "ADMIN: DSAY: [text]") -/proc/log_mentor(text) - GLOB.mentorlog.Add(text) - if (CONFIG_GET(flag/log_admin)) - WRITE_FILE(GLOB.world_game_log, "MENTOR: [text]") - /* All other items are public. */ /proc/log_game(text) if (CONFIG_GET(flag/log_game)) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 70c8e42e9b8..2932ea5c891 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -200,18 +200,28 @@ return pick(GLOB.skin_tones) GLOBAL_LIST_INIT(skin_tones, sortList(list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2" + "ivory", + "porcelain", + "peach", + "coral", + "cotton", + "bisque", + "rosewood", + "sepia", + "taupe", + "russet", + "beige", + "walnut", + "bronze", + "burnet", + "amber", + "hazel", + "champagne", + "olive", + "tawny", + "ochre", + "cedar", + "sable" ))) /proc/pick_species_adjective(mob/living/carbon/human/H) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 72340f8bdb9..f702320f34d 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -24,7 +24,6 @@ DEFINE_BITFIELD(admin_flags, list( "DBRANKS" = R_DBRANKS, "DEBUG" = R_DEBUG, "FUN" = R_FUN, - "MENTOR" = R_MENTOR, "PERMISSIONS" = R_PERMISSIONS, "POLL" = R_POLL, "POSSESS" = R_POSSESS, diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 30fe48136de..89031817f51 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -2,8 +2,6 @@ GLOBAL_LIST_EMPTY(clients) //all clients GLOBAL_LIST_EMPTY(admins) //all clients whom are admins GLOBAL_PROTECT(admins) GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb. -GLOBAL_LIST_EMPTY(mentors) -GLOBAL_PROTECT(mentors) GLOBAL_LIST_EMPTY_TYPED(directory, /client) //all ckeys with associated client GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for stealthmins diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 54e378f6731..4a422366240 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -73,8 +73,6 @@ GLOBAL_LIST_EMPTY(OOClog) GLOBAL_PROTECT(OOClog) GLOBAL_LIST_EMPTY(adminlog) GLOBAL_PROTECT(adminlog) -GLOBAL_LIST_EMPTY(mentorlog) -GLOBAL_PROTECT(mentorlog) GLOBAL_LIST_EMPTY(active_turfs_startlist) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 4a7ff23cf8c..6c9479bb945 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -138,8 +138,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FRIENDLY" = TRAIT_FRIENDLY, "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, "TRAIT_BALD" = TRAIT_BALD, - "TRAIT_NOBREAK" = TRAIT_NOBREAK, - "TRAIT_ALLBREAK" = TRAIT_ALLBREAK, + "TRAIT_USE_PROSTHETIC" = TRAIT_USE_PROSTHETIC, "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, "TRAIT_HOLDABLE" = TRAIT_HOLDABLE, "TRAIT_NOBLEED" = TRAIT_NOBLEED, diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 5a5f443a710..60b08d14a64 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -191,12 +191,6 @@ /datum/config_entry/flag/load_legacy_ranks_only //Loads admin ranks only from legacy admin_ranks.txt, while enabled ranks are mirrored to the database protection = CONFIG_ENTRY_LOCKED -/datum/config_entry/flag/mentors_mobname_only // Only display mob name to mentors in mentorhelps - protection = CONFIG_ENTRY_LOCKED - -/datum/config_entry/flag/mentor_legacy_system // Whether to use the legacy mentor system (flat file) instead of SQL - protection = CONFIG_ENTRY_LOCKED - /datum/config_entry/string/hostedby /datum/config_entry/flag/norespawn diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index 657f1cfb472..1204fbf17f1 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -74,7 +74,6 @@ SUBSYSTEM_DEF(explosions) /datum/controller/subsystem/explosions/proc/is_exploding() return (length(lowturf) || length(medturf) || length(highturf) || length(flameturf) || length(throwturf) || length(lowobj) || length(medobj) || length(highobj)) - /client/proc/check_bomb_impacts() set name = "Check Bomb Impact" set category = "Debug" @@ -164,7 +163,7 @@ SUBSYSTEM_DEF(explosions) // 5 explosion power is a (0, 1, 3) explosion. // 1 explosion power is a (0, 0, 1) explosion. -/proc/explosion(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = TRUE, ignorecap = FALSE, flame_range = 0, silent = FALSE, smoke = FALSE, gentle = FALSE) +/proc/explosion(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = TRUE, ignorecap = FALSE, flame_range = 0, silent = FALSE, smoke = FALSE, gentle = FALSE, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) . = SSexplosions.explode(arglist(args)) #define CREAK_DELAY 5 SECONDS //Time taken for the creak to play after explosion, if applicable. @@ -177,7 +176,7 @@ SUBSYSTEM_DEF(explosions) #define FREQ_UPPER 40 //The upper limit for the randomly selected frequency. #define FREQ_LOWER 25 //The lower of the above. -/datum/controller/subsystem/explosions/proc/explode(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog, ignorecap, flame_range, silent, smoke, gentle) +/datum/controller/subsystem/explosions/proc/explode(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog, ignorecap, flame_range, silent, smoke, gentle, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) epicenter = get_turf(epicenter) if(!epicenter) return @@ -194,6 +193,11 @@ SUBSYSTEM_DEF(explosions) var/orig_max_distance = max(devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range) + var/light_damage = light_dam + var/heavy_damage = heavy_dam + var/heavy_item_damage = heavy_item_dam + var/light_item_damage = light_item_dam + //Zlevel specific bomb cap multiplier var/cap_multiplier = epicenter.virtual_level_trait(ZTRAIT_BOMBCAP_MULTIPLIER) if (isnull(cap_multiplier)) @@ -209,8 +213,8 @@ SUBSYSTEM_DEF(explosions) var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range) var/started_at = REALTIMEOFDAY if(adminlog) - message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in [ADMIN_VERBOSEJMP(epicenter)]") - log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in [loc_name(epicenter)]") + message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) and damage ([light_damage], [light_item_damage], [heavy_damage], [heavy_item_damage]) in [ADMIN_VERBOSEJMP(epicenter)]") + log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) and damage ([light_damage], [light_item_damage], [heavy_damage], [heavy_item_damage]) in [loc_name(epicenter)]") var/x0 = epicenter.x var/y0 = epicenter.y @@ -345,22 +349,26 @@ SUBSYSTEM_DEF(explosions) if(istype(A, /mob/living)) items -= A // Because GetAllContents returns the mob too, resulting in double damage for(var/O in items) + //have this pass a list var/atom/A = O + var/list/to_explode = list(A,light_damage,light_item_damage,heavy_damage,heavy_item_damage) if(!QDELETED(A)) switch(dist) if(EXPLODE_DEVASTATE) - SSexplosions.highobj += A + SSexplosions.highobj += list(to_explode) if(EXPLODE_HEAVY) - SSexplosions.medobj += A + SSexplosions.medobj += list(to_explode) if(EXPLODE_LIGHT) - SSexplosions.lowobj += A + SSexplosions.lowobj += list(to_explode) + //shit is mainly handled by turf explosions, with the occasional direct add + var/list/turf_explode = list(T,light_damage,light_item_damage,heavy_damage,heavy_item_damage) switch(dist) if(EXPLODE_DEVASTATE) - SSexplosions.highturf += T + SSexplosions.highturf += list(turf_explode) if(EXPLODE_HEAVY) - SSexplosions.medturf += T + SSexplosions.medturf += list(turf_explode) if(EXPLODE_LIGHT) - SSexplosions.lowturf += T + SSexplosions.lowturf += list(turf_explode) if(flame_dist && prob(40) && !isspaceturf(T) && !T.density) @@ -474,7 +482,12 @@ SUBSYSTEM_DEF(explosions) var/list/low_turf = lowturf lowturf = list() for(var/thing in low_turf) - if(thing) + if(islist(thing)) + var/list/explodey = thing + var/turf/T = explodey[1] + T.explosion_level = max(T.explosion_level, EXPLODE_LIGHT) + T.ex_act(EXPLODE_LIGHT, null, explodey[2],explodey[3],explodey[4],explodey[5]) + else if(isturf(thing)) var/turf/T = thing T.explosion_level = max(T.explosion_level, EXPLODE_LIGHT) T.ex_act(EXPLODE_LIGHT) @@ -484,7 +497,12 @@ SUBSYSTEM_DEF(explosions) var/list/med_turf = medturf medturf = list() for(var/thing in med_turf) - if(thing) + if(islist(thing)) + var/list/explodey = thing + var/turf/T = explodey[1] + T.explosion_level = max(T.explosion_level, EXPLODE_HEAVY) + T.ex_act(EXPLODE_HEAVY, null, explodey[2],explodey[3],explodey[4],explodey[5]) + else if(isturf(thing)) var/turf/T = thing T.explosion_level = max(T.explosion_level, EXPLODE_HEAVY) T.ex_act(EXPLODE_HEAVY) @@ -494,7 +512,12 @@ SUBSYSTEM_DEF(explosions) var/list/high_turf = highturf highturf = list() for(var/thing in high_turf) - if(thing) + if(islist(thing)) + var/list/explodey = thing + var/turf/T = explodey[1] + T.explosion_level = max(T.explosion_level, EXPLODE_DEVASTATE) + T.ex_act(EXPLODE_DEVASTATE, null, explodey[2],explodey[3],explodey[4],explodey[5]) + else if(isturf(thing)) var/turf/T = thing T.explosion_level = max(T.explosion_level, EXPLODE_DEVASTATE) T.ex_act(EXPLODE_DEVASTATE) @@ -516,27 +539,52 @@ SUBSYSTEM_DEF(explosions) currentpart = SSEXPLOSIONS_THROWS timer = TICK_USAGE_REAL + //make this take list var/list/high_obj = highobj highobj = list() - for(var/obj/O as anything in high_obj) - if(!QDELETED(O)) - O.ex_act(EXPLODE_DEVASTATE) + // for(var/obj/O as anything in high_obj) + // if(!QDELETED(O)) + // O.ex_act(EXPLODE_DEVASTATE) + for(var/exploded as anything in high_obj) + if(islist(exploded)) + var/list/explodey = exploded + var/obj/O = explodey[1] + if(!QDELETED(O)) + O.ex_act(EXPLODE_DEVASTATE,null, explodey[2],explodey[3],explodey[4],explodey[5]) + else if(isatom(exploded)) + var/obj/O = exploded + if(!QDELETED(O)) + O.ex_act(EXPLODE_DEVASTATE) cost_highobj = MC_AVERAGE(cost_highobj, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) timer = TICK_USAGE_REAL var/list/med_obj = medobj medobj = list() - for(var/obj/O as anything in med_obj) - if(!QDELETED(O)) - O.ex_act(EXPLODE_HEAVY) + for(var/exploded in med_obj) + if(islist(exploded)) + var/list/explodey = exploded + var/obj/O = explodey[1] + if(!QDELETED(O)) + O.ex_act(EXPLODE_HEAVY, null, explodey[2],explodey[3],explodey[4],explodey[5]) + else if(isatom(exploded)) + var/obj/O = exploded + if(!QDELETED(O)) + O.ex_act(EXPLODE_HEAVY) cost_medobj = MC_AVERAGE(cost_medobj, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) timer = TICK_USAGE_REAL var/list/low_obj = lowobj lowobj = list() - for(var/obj/O as anything in low_obj) - if(!QDELETED(O)) - O.ex_act(EXPLODE_LIGHT) + for(var/exploded as anything in low_obj) + if(islist(exploded)) + var/list/explodey = exploded + var/obj/O = explodey[1] + if(!QDELETED(O)) + O.ex_act(EXPLODE_LIGHT, null, explodey[2],explodey[3],explodey[4],explodey[5]) + else if(isatom(exploded)) + var/obj/O = exploded + if(!QDELETED(O)) + O.ex_act(EXPLODE_LIGHT) cost_lowobj = MC_AVERAGE(cost_lowobj, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 71374916255..a92f318c52f 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -78,7 +78,7 @@ var/atom/final_target = hiding_target ? hiding_target : target if(!can_see(basic_mob, final_target, required_distance)) - return AI_BEHAVIOR_INSTANT + return AI_BEHAVIOR_DELAY if(avoid_friendly_fire && check_friendly_in_path(basic_mob, target, targetting_datum)) adjust_position(basic_mob, target) diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index f2af8b8df45..e5ac875e29e 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -72,7 +72,7 @@ ) else used_oven.visible_message( - span_boldwarning("Black smoke spills from the oven![used_oven]."), + span_boldwarning("Black smoke spills from the [used_oven]!"), blind_message = span_boldwarning("You smell something burning..."), ) SEND_SIGNAL(parent, COMSIG_BAKE_COMPLETED, baked_result) diff --git a/code/datums/components/crafting/recipes/weapon.dm b/code/datums/components/crafting/recipes/weapon.dm index fdf0d3a9598..778223ef471 100644 --- a/code/datums/components/crafting/recipes/weapon.dm +++ b/code/datums/components/crafting/recipes/weapon.dm @@ -50,65 +50,6 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/meteorslug - name = "Meteorslug Shell" - result = /obj/item/ammo_casing/shotgun/meteorslug - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/rcd_ammo = 1, - /obj/item/stock_parts/manipulator = 2) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/pulseslug - name = "Pulse Slug Shell" - result = /obj/item/ammo_casing/shotgun/pulseslug - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/stock_parts/capacitor = 3, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/cell = 1, - /datum/reagent/lithium = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/dragonsbreath - name = "Dragonsbreath Shell" - result = /obj/item/ammo_casing/shotgun/dragonsbreath - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /datum/reagent/phosphorus = 10) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/frag12 - name = "FRAG-12 Shell" - result = /obj/item/ammo_casing/shotgun/frag12 - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /datum/reagent/glycerol = 5, - /datum/reagent/toxin/acid = 5, - /datum/reagent/toxin/acid/fluacid = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/ionslug - name = "Ion Scatter Shell" - result = /obj/item/ammo_casing/shotgun/ion - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/stock_parts/micro_laser = 2, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/scanning_module = 1, - /datum/reagent/iron = 5, - /datum/reagent/uranium = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - /datum/crafting_recipe/improvisedslug name = "Improvised Shotgun Shell" result = /obj/item/ammo_casing/shotgun/improvised @@ -120,19 +61,6 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/laserscatter - name = "Scatter Laser Shell" - result = /obj/item/ammo_casing/shotgun/laserscatter - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 3, - /obj/item/stock_parts/cell = 1, - /datum/reagent/lithium = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - /datum/crafting_recipe/ishotgun name = "Improvised Shotgun" result = /obj/item/gun/ballistic/shotgun/doublebarrel/improvised diff --git a/code/datums/components/melee/twohanded.dm b/code/datums/components/melee/twohanded.dm index 6b6d9e5a442..5014b86a9ec 100644 --- a/code/datums/components/melee/twohanded.dm +++ b/code/datums/components/melee/twohanded.dm @@ -18,6 +18,8 @@ var/icon_wielded = FALSE /// The icon that will be used when wielded var/obj/item/offhand/offhand_item = null /// Reference to the offhand created for the item var/sharpened_increase = 0 /// The amount of increase recived from sharpening the item + var/attack_cooldown_wielded = null /// The attack speed of the item when wielded + var/attack_cooldown_unwielded = null /// The attack speed of the item when unwielded /** * Two Handed component @@ -31,9 +33,11 @@ * * force_wielded (optional) The force setting when the item is wielded, do not use with force_multiplier * * force_unwielded (optional) The force setting when the item is unwielded, do not use with force_multiplier * * icon_wielded (optional) The icon to be used when wielded + * * attack_cooldown_wielded (optional) The attack cooldown when the item is wielded + * * attack_cooldown_unwielded (optional) The attack cooldown when the item is unwielded */ /datum/component/two_handed/Initialize(require_twohands=FALSE, wieldsound=FALSE, unwieldsound=FALSE, attacksound=FALSE, \ - force_multiplier=0, force_wielded=null, force_unwielded=null, icon_wielded=FALSE) + force_multiplier=0, force_wielded=null, force_unwielded=null, icon_wielded=FALSE, attack_cooldown_wielded=null, attack_cooldown_unwielded=null) if(!isitem(parent)) return COMPONENT_INCOMPATIBLE @@ -45,10 +49,12 @@ src.force_wielded = force_wielded src.force_unwielded = force_unwielded src.icon_wielded = icon_wielded + src.attack_cooldown_wielded = attack_cooldown_wielded + src.attack_cooldown_unwielded = attack_cooldown_unwielded // Inherit the new values passed to the component /datum/component/two_handed/InheritComponent(datum/component/two_handed/new_comp, original, require_twohands, wieldsound, unwieldsound, \ - force_multiplier, force_wielded, force_unwielded, icon_wielded) + force_multiplier, force_wielded, force_unwielded, icon_wielded, attack_cooldown_wielded, attack_cooldown_unwielded) if(!original) return if(require_twohands) @@ -67,6 +73,10 @@ src.force_unwielded = force_unwielded if(icon_wielded) src.icon_wielded = icon_wielded + if(attack_cooldown_wielded) + src.attack_cooldown_wielded = attack_cooldown_wielded + if(attack_cooldown_unwielded) + src.attack_cooldown_unwielded = attack_cooldown_unwielded // register signals withthe parent item /datum/component/two_handed/RegisterWithParent() @@ -157,6 +167,8 @@ parent_item.force = force_wielded if(sharpened_increase) parent_item.force += sharpened_increase + if(attack_cooldown_wielded) + parent_item.attack_cooldown = attack_cooldown_wielded parent_item.name = "[parent_item.name] (Wielded)" parent_item.update_appearance() @@ -202,6 +214,8 @@ parent_item.force /= force_multiplier else if(!isnull(force_unwielded)) parent_item.force = force_unwielded + if(attack_cooldown_unwielded) + parent_item.attack_cooldown = attack_cooldown_unwielded // update the items name to remove the wielded status var/sf = findtext(parent_item.name, " (Wielded)", -10) // 10 == length(" (Wielded)") diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm index b61afeaf9cf..580208744aa 100644 --- a/code/datums/diseases/gastrolisis.dm +++ b/code/datums/diseases/gastrolisis.dm @@ -63,9 +63,13 @@ var/mob/living/carbon/human/H = affected_mob var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in H.internal_organs if(tongue) - var/obj/item/organ/tongue/new_tongue = new H.dna.species.mutanttongue () - new_tongue.Insert(H) + var/obj/item/organ/tongue/new_tongue = H.dna?.species?.species_organs[ORGAN_SLOT_TONGUE] + if(new_tongue) + new_tongue = new() + new_tongue.Insert(H) var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in H.internal_organs if(eyes) - var/obj/item/organ/eyes/new_eyes = new H.dna.species.mutanteyes () - new_eyes.Insert(H) + var/obj/item/organ/eyes/new_eyes = H.dna?.species?.species_organs[ORGAN_SLOT_EYES] + if(new_eyes) + new_eyes = new() + new_eyes.Insert(H) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 439e7fc4b69..5e9b200696e 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -338,7 +338,7 @@ language_holder = new species_holder(src) /mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, robotic = FALSE) - robotic ||= fbp + robotic ||= HAS_TRAIT(src, TRAIT_USE_PROSTHETIC) ..() if(icon_update) update_hair() diff --git a/code/datums/keybinding/admin.dm b/code/datums/keybinding/admin.dm index eb5d37639e2..10d9722eaa8 100644 --- a/code/datums/keybinding/admin.dm +++ b/code/datums/keybinding/admin.dm @@ -19,23 +19,6 @@ user.get_admin_say() return TRUE -/datum/keybinding/admin/mentor_say - hotkey_keys = list("F4") - name = "mentor_say" - full_name = "Mentor say" - description = "Talk with other mentors." - keybind_signal = COMSIG_KB_ADMIN_MSAY_DOWN - -/datum/keybinding/admin/mentor_say/down(client/user) - . = ..() - if(.) - return - user.get_mentor_say() - return TRUE - -/datum/keybinding/admin/mentor_say/can_use(client/user) - return check_mentor(user) - /datum/keybinding/admin/admin_ghost hotkey_keys = list("F5") name = "admin_ghost" diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 26953d39979..6b809e07a48 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -20,6 +20,7 @@ ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, GENETIC_MUTATION) ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, GENETIC_MUTATION) ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, GENETIC_MUTATION) + ADD_TRAIT(owner, TRAIT_GENEMODDED, GENETIC_MUTATION) ADD_TRAIT(owner, TRAIT_HULK, GENETIC_MUTATION) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk) @@ -57,6 +58,7 @@ REMOVE_TRAIT(owner, TRAIT_PUSHIMMUNE, GENETIC_MUTATION) REMOVE_TRAIT(owner, TRAIT_CHUNKYFINGERS, GENETIC_MUTATION) REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, GENETIC_MUTATION) + REMOVE_TRAIT(owner, TRAIT_GENEMODDED, GENETIC_MUTATION) REMOVE_TRAIT(owner, TRAIT_HULK, GENETIC_MUTATION) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk") diff --git a/code/datums/weather/weather_controller.dm b/code/datums/weather/weather_controller.dm index 96ed33b9c93..ae017b228c9 100644 --- a/code/datums/weather/weather_controller.dm +++ b/code/datums/weather/weather_controller.dm @@ -166,5 +166,6 @@ /datum/weather_controller/thousand_eyes possible_weathers = list( - /datum/weather/thousand_eyes = 100 + /datum/weather/thousand_eyes_fog = 25, + /datum/weather/thousand_eyes = 75 ) diff --git a/code/datums/weather/weather_types/fog.dm b/code/datums/weather/weather_types/fog.dm new file mode 100644 index 00000000000..7144cb5c621 --- /dev/null +++ b/code/datums/weather/weather_types/fog.dm @@ -0,0 +1,26 @@ +/datum/weather/thousand_eyes_fog + name = "fog" + desc = "Fog clouds rolling in, blocking vision." + opacity_in_main_stage = TRUE + thunder_chance = 0 + + telegraph_message = span_danger("Fog starts to roll in through the gravitic bubble...") + telegraph_overlay = "smoke" + + area_type = /area + protect_indoors = TRUE + + barometer_predictable = FALSE + affects_underground = FALSE + thunder_chance = 14 + + weather_duration_lower = 900 + weather_duration_upper = 1500 + + multiply_blend_on_main_stage = TRUE + + weather_message = span_boldwarning("Thick fog has set in around the perch!") + weather_overlay = "smoke" + + end_message = span_notice("The fog starts to dissipate..") + end_overlay = "smoke" diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index f5324b8076b..906f2363994 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -167,9 +167,6 @@ var/list/afkmins = adm["afk"] .["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho - var/list/mnt = get_mentor_counts() - .["mentors"] = mnt["total"] // we don't have stealth mentors, so we can just use the total. - .["gamestate"] = SSticker.current_state if(key_valid) diff --git a/code/game/MapData/shuttles/ngr_pururangi.dm b/code/game/MapData/shuttles/ngr_pururangi.dm new file mode 100644 index 00000000000..e36743dd5da --- /dev/null +++ b/code/game/MapData/shuttles/ngr_pururangi.dm @@ -0,0 +1,19 @@ +/obj/machinery/air_sensor/atmos/air_tank/pururangi + id_tag = "puru_air_sensor" + +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input/pururangi + id = "puru_airtank_in" + +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output/pururangi + id_tag = "puru_air_out" + +/obj/machinery/computer/atmos_control/tank/air_tank/pururangi + input_tag = "puru_airtank_in" + output_tag = "puru_air_out" + sensors = list("puru_air_sensor" = "Air Mix Tank") + +/obj/machinery/air_sensor/external/pururangi + id_tag = "puru_external_sensor" + +/obj/machinery/computer/atmos_control/external/pururangi + sensors = list("puru_external_sensor" = "External Atmospherics Monitoring") diff --git a/code/game/atoms.dm b/code/game/atoms.dm index bdc24d3d4d8..a2c7056b19e 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -739,7 +739,7 @@ return /// Handle what happens when your contents are exploded by a bomb -/atom/proc/contents_explosion(severity, target) +/atom/proc/contents_explosion(severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) return //For handling the effects of explosions on contents that would not normally be effected /** @@ -747,10 +747,10 @@ * * Default behaviour is to call [contents_explosion][/atom/proc/contents_explosion] and send the [COMSIG_ATOM_EX_ACT] signal */ -/atom/proc/ex_act(severity, target) +/atom/proc/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) set waitfor = FALSE - contents_explosion(severity, target) - SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) + contents_explosion(severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) + SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) /atom/proc/fire_act(exposed_temperature, exposed_volume) SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) @@ -1439,8 +1439,6 @@ log_shuttle(log_text) if(LOG_RADIO_EMOTE) log_radio_emote(log_text) - if(LOG_MSAY) - log_mentor(log_text) if(LOG_LOOC) log_looc(log_text) if(LOG_SUBTLER) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index b5320db8632..2079a673b54 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -479,9 +479,9 @@ Class Procs: update_appearance() return TRUE -/obj/machinery/contents_explosion(severity, target) +/obj/machinery/contents_explosion(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) if(occupant) - occupant.ex_act(severity, target) + occupant.ex_act(severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) /obj/machinery/handle_atom_del(atom/A) if(A == occupant) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 942716a4bdb..3e14759bbc3 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -386,7 +386,7 @@ name = "\improper SRM-8 missile rack" desc = "A weapon for combat exosuits. Launches light explosive missiles." icon_state = "mecha_missilerack" - projectile = /obj/projectile/bullet/a84mm_he + projectile = /obj/projectile/bullet/a84mm/he fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' projectiles = 8 projectiles_cache = 0 diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index ac62154e962..8508ee29a0c 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -120,7 +120,7 @@ log_message("Armor saved, changing severity to [severity]", LOG_MECHA) . = ..() -/obj/mecha/contents_explosion(severity, target) +/obj/mecha/contents_explosion(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) severity++ for(var/X in equipment) var/obj/item/mecha_parts/mecha_equipment/ME = X @@ -141,7 +141,7 @@ if(EXPLODE_LIGHT) SSexplosions.lowobj += MT if(occupant) - occupant.ex_act(severity,target) + occupant.ex_act(severity,target, light_dam, light_item_dam, heavy_dam,heavy_item_dam) /obj/mecha/handle_atom_del(atom/A) if(A == occupant) diff --git a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm index f4909e9e63a..7800ffd1a79 100644 --- a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm +++ b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm @@ -128,8 +128,8 @@ TURF_DECAL_COLOR_HELPER(opaque/white, COLOR_WHITE, 255) TURF_DECAL_COLOR_HELPER(opaque/grey, COLOR_FLOORTILE_GRAY, 255) TURF_DECAL_COLOR_HELPER(opaque/lightgrey, "#a8b2b6", 255) TURF_DECAL_COLOR_HELPER(opaque/bottlegreen, "#57967f", 255) -TURF_DECAL_COLOR_HELPER(opaque/warrablue, "#2270d0", 255) -TURF_DECAL_COLOR_HELPER(opaque/warrabluelight, "#39a0eb", 255) +TURF_DECAL_COLOR_HELPER(opaque/warrablue, "#32426b", 255) +TURF_DECAL_COLOR_HELPER(opaque/warrabluelight, "#2270d0", 255) TURF_DECAL_COLOR_HELPER(opaque/nsorange, "#f97016", 255) TURF_DECAL_COLOR_HELPER(opaque/vired, "#c92020", 255) TURF_DECAL_COLOR_HELPER(opaque/solgovblue, "#2d2a4e", 255) @@ -159,8 +159,8 @@ TURF_DECAL_COLOR_HELPER(transparent/white, COLOR_WHITE, 140) TURF_DECAL_COLOR_HELPER(transparent/grey, COLOR_FLOORTILE_GRAY, 140) TURF_DECAL_COLOR_HELPER(transparent/lightgrey, "#a8b2b6", 140) TURF_DECAL_COLOR_HELPER(transparent/bottlegreen, "#57967f", 140) -TURF_DECAL_COLOR_HELPER(transparent/warrablue, "#2270d0", 140) -TURF_DECAL_COLOR_HELPER(transparent/warrabluelight, "#39a0eb", 140) +TURF_DECAL_COLOR_HELPER(transparent/warrablue, "#32426b", 140) +TURF_DECAL_COLOR_HELPER(transparent/warrabluelight, "#2270d0", 140) TURF_DECAL_COLOR_HELPER(transparent/nsorange, "#f97016", 140) TURF_DECAL_COLOR_HELPER(transparent/vired, "#c92020", 140) TURF_DECAL_COLOR_HELPER(transparent/solgovblue, "#2d2a4e", 140) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 547d629e6ac..ebc6a56048b 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -145,8 +145,8 @@ /obj/effect/dummy/chameleon/attack_alien() master.disrupt() -/obj/effect/dummy/chameleon/ex_act(S, T) - contents_explosion(S, T) +/obj/effect/dummy/chameleon/ex_act(S, T, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) + contents_explosion(S, T, light_dam, light_item_dam,heavy_dam, heavy_item_dam) master.disrupt() /obj/effect/dummy/chameleon/bullet_act() diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm index b548ef06a22..ac6c793b003 100644 --- a/code/game/objects/items/devices/mines.dm +++ b/code/game/objects/items/devices/mines.dm @@ -440,7 +440,11 @@ //customize explosive power var/range_devastation = 0 var/range_heavy = 1 + var/heavy_damage = EX_HEAVY_BASE_DAM + var/heavy_item_damage = EX_HEAVY_BASE_ITEM_DAM var/range_light = 5 + var/light_damage = EX_LIGHT_BASE_DAM + var/light_item_damage = EX_LIGHT_BASE_ITEM_DAM var/range_flame = 1 //using this to indicate pb @@ -456,7 +460,8 @@ manufacturer = MANUFACTURER_SCARBOROUGH /obj/item/mine/pressure/explosive/mine_effect(mob/victim) - explosion(loc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + explosion(loc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1, \ + light_dam = light_damage, light_item_dam = light_item_damage, heavy_dam = heavy_damage, heavy_item_dam = heavy_item_damage) if(shrapnel_magnitude > 0) AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_magnitude) @@ -465,8 +470,11 @@ name = "\improper Rusted Landmine" desc = "An anti-infantry explosive, designed to go off underfoot. This one has seen better days." manufacturer = MANUFACTURER_NONE - range_heavy = 0 + heavy_damage = 50 + heavy_item_damage = 40 range_light = 3 + light_damage = 30 + light_item_damage = 25 shrapnel_type = /obj/projectile/bullet/shrapnel/rusty @@ -475,7 +483,11 @@ desc = "An anti-infantry explosive produced during the corporate wars. Transforms into superheated slag and a ball of fire on detonation. " range_flame = 6 + heavy_damage = 40 + heavy_item_damage = 40 range_light = 3 + light_damage = 30 + light_item_damage = 25 range_flash = 3 shrapnel_type = /obj/projectile/bullet/shrapnel/hot @@ -498,7 +510,9 @@ desc = "An immense anti-vehicle explosive built during the corporate wars. Someone has recklessly switched out the detonator for one that activates for lighter targets." w_class = WEIGHT_CLASS_BULKY range_heavy = 6 + heavy_damage = 100 range_light = 9 + light_damage = 50 shrapnel_magnitude = 7 shrapnel_type = /obj/projectile/bullet/shrapnel/mega blast_delay = 50//run. @@ -510,6 +524,7 @@ desc = "An anti-infantry explosive built during the corporate wars. Metal banding inside creates additional deadly shrapnel on detonation. " range_heavy = 1 + heavy_damage = 60 range_light = 4 shrapnel_magnitude = 6 @@ -558,10 +573,13 @@ desc = "An anti-infantry explosive produced during the corporate wars. This one has been rearmed with a proximity movement detector." var/range_devastation = 0 - var/range_heavy = 2 - var/range_light = 4 + var/range_heavy = 1 + var/heavy_damage = EX_HEAVY_BASE_DAM + var/heavy_item_damage = EX_HEAVY_BASE_ITEM_DAM + var/range_light = 5 + var/light_damage = EX_LIGHT_BASE_DAM + var/light_item_damage = EX_LIGHT_BASE_ITEM_DAM var/range_flame = 1 - var/range_flash = 1 var/shrapnel_type = /obj/projectile/bullet/shrapnel @@ -570,7 +588,8 @@ manufacturer = MANUFACTURER_SCARBOROUGH /obj/item/mine/proximity/explosive/mine_effect(mob/victim) - explosion(loc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + explosion(loc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1, \ + light_dam = light_damage, light_item_dam = light_item_damage, heavy_dam = heavy_damage, heavy_item_dam = heavy_item_damage) if(shrapnel_magnitude > 0) AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_magnitude) @@ -582,6 +601,8 @@ range_heavy = 0 range_light = 1 + light_damage = 15 + light_item_damage = 10 range_flash = 3 range_flame = 0 @@ -645,7 +666,11 @@ //customize explosive power var/range_devastation = -1 var/range_heavy = 0 + var/heavy_damage = 40 // most of the damage is shrapnel + var/heavy_item_damage = 40 var/range_light = 1 + var/light_damage = 20 + var/light_item_damage = 20 var/range_flame = 0 //using this to indicate pb @@ -677,7 +702,8 @@ //if you somehow explode it while on the same tile, you win bonus shrapnel //also spews stuff everywhere if it's triggered while not set up if(!target_turf || victim ? (victim.loc == src.loc) : victim == null) - explosion(src, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + explosion(loc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1, \ + light_dam = light_damage, light_item_dam = light_item_damage, heavy_dam = heavy_damage, heavy_item_dam = heavy_item_damage) var/casingammo = casingtype.projectile_type var/shredammo = shredtype.projectile_type if(casingtype) @@ -686,7 +712,8 @@ AddComponent(/datum/component/pellet_cloud, projectile_type = shredammo, magnitude = 2) else var/blastloc = get_step_towards(src, target_turf) - explosion(blastloc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + explosion(blastloc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1, \ + light_dam = light_damage, light_item_dam = light_item_damage, heavy_dam = heavy_damage, heavy_item_dam = heavy_item_damage) if(shredtype) var/obj/item/ammo_casing/shredcasing = new shredtype(src) shredcasing.fire_casing(target_turf, null, null, null, 30, ran_zone(), 50, src) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 8162bb80767..a28fa238b19 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -344,21 +344,7 @@ GENE SCANNER render_list += "Genetic Stability: [H.dna.stability]%.\n" // Species and body temperature - var/datum/species/S = H.dna.species - var/mutant = H.dna.check_mutation(HULK) \ - || S.mutantlungs != initial(S.mutantlungs) \ - || S.mutantbrain != initial(S.mutantbrain) \ - || S.mutantheart != initial(S.mutantheart) \ - || S.mutanteyes != initial(S.mutanteyes) \ - || S.mutantears != initial(S.mutantears) \ - || S.mutanthands != initial(S.mutanthands) \ - || S.mutanttongue != initial(S.mutanttongue) \ - || S.mutantliver != initial(S.mutantliver) \ - || S.mutantstomach != initial(S.mutantstomach) \ - || S.mutantappendix != initial(S.mutantappendix) \ - || S.flying_species != initial(S.flying_species) - - render_list += "Species: [S.name][mutant ? "-derived mutant" : ""]\n" + render_list += "Species: [HAS_TRAIT(H, TRAIT_GENEMODDED) ? "Modified " : ""][H.dna.species.name]\n" render_list += "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)\n" // Time of death diff --git a/code/game/objects/items/food/snacks.dm b/code/game/objects/items/food/snacks.dm index 5b485f3f02c..3c5b93ebfe2 100644 --- a/code/game/objects/items/food/snacks.dm +++ b/code/game/objects/items/food/snacks.dm @@ -33,8 +33,8 @@ /obj/item/food/homemade_jerky name = "homemade beef jerky" - desc = "Homemade beef jerky made from the finest space cows." - trash_type = /obj/item/trash/sosjerky + desc = "Dried, homemade beef jerky." + icon_state = "homejerky" food_reagents = list( /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 1 @@ -42,7 +42,7 @@ junkiness = 0 tastes = list("dried meat" = 1) w_class = WEIGHT_CLASS_SMALL - foodtypes = JUNKFOOD | MEAT | SUGAR + foodtypes = MEAT /obj/item/food/chips name = "chips" @@ -213,3 +213,11 @@ ) tastes = list("crunchy berry" = 5) foodtypes = FRUIT + +/obj/item/food/candyheart //refugee from the death of valentine's day + name = "candy heart" + icon = 'icons/obj/holiday_misc.dmi' + icon_state = "candyheart" + desc = "A heart-shaped candy." + food_reagents = list(/datum/reagent/consumable/sugar = 2) + junkiness = 5 diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index e95cca3239c..61c85f5dbcb 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -17,8 +17,14 @@ det_time = 50 display_timer = 0 var/check_parts = FALSE - var/range = 3 var/list/times + ex_heavy = 1 + heavy_damage = 25 + heavy_item_damage = 20 + ex_light = 2 + light_damage = 15 + light_item_damage = 10 + ex_flame = 4 // small explosion, large fireball /obj/item/grenade/iedcasing/Initialize() . = ..() @@ -27,10 +33,7 @@ times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] det_time = text2num(pick_weight(times)) if(det_time < 0) //checking for 'duds' - range = 1 det_time = rand(30,80) - else - range = pick(2,2,2,3,3,3,4) if(check_parts) //since construction code calls this itself, no need to always call it. This does have the downside that adminspawned ones can potentially not have cans if they don't use the /spawned subtype. CheckParts() @@ -63,12 +66,6 @@ cut_overlay("improvised_grenade_filled") preprime(user, null, FALSE) -/obj/item/grenade/iedcasing/prime() //Blowing that can up - . = ..() - update_mob() - explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball. - resolve() - /obj/item/grenade/iedcasing/change_det_time() return //always be random. diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index e5d40d5425c..4af09a46b20 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -23,8 +23,14 @@ var/ex_dev = 0 ///how big of a heavy explosion radius on prime var/ex_heavy = 0 + // how much damage the heavy explosion deals. + var/heavy_damage = EX_HEAVY_BASE_DAM + var/heavy_item_damage = EX_HEAVY_BASE_ITEM_DAM ///how big of a light explosion radius on prime var/ex_light = 0 + // how much damage the light explosion deals. + var/light_damage = EX_LIGHT_BASE_DAM + var/light_item_damage = EX_LIGHT_BASE_ITEM_DAM ///how big of a flame explosion radius on prime var/ex_flame = 0 @@ -94,7 +100,7 @@ SEND_SIGNAL(src, COMSIG_GRENADE_PRIME) if(ex_dev || ex_heavy || ex_light || ex_flame) - explosion(loc, ex_dev, ex_heavy, ex_light, flame_range = ex_flame) + explosion(loc, ex_dev, ex_heavy, ex_light, flame_range = ex_flame, light_dam = light_damage, light_item_dam = light_item_damage, heavy_dam = heavy_damage, heavy_item_dam = heavy_item_damage) /obj/item/grenade/proc/update_mob() if(ismob(loc)) diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm index 6e53d48d2f1..4acb020bd80 100644 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ b/code/game/objects/items/grenades/syndieminibomb.dm @@ -16,10 +16,11 @@ /obj/item/grenade/syndieminibomb/concussion name = "HE Grenade" - desc = "A compact shrapnel grenade meant to devastate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction." + desc = "A compact high explosive grenade meant to devastate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction." icon_state = "concussion" ex_dev = 0 ex_heavy = 2 + heavy_damage = 50 ex_light = 3 ex_flame = 3 @@ -29,8 +30,12 @@ icon_state = "frag" shrapnel_type = /obj/projectile/bullet/shrapnel shrapnel_radius = 4 - ex_heavy = 0 + ex_heavy = 1 + heavy_damage = 35 + heavy_item_damage = 35 ex_light = 3 + light_damage = 20 + light_item_damage = 15 ex_flame = 1 /obj/item/grenade/frag/mega diff --git a/code/game/objects/items/melee/blunt.dm b/code/game/objects/items/melee/blunt.dm index 9be13ce64ca..521ff0b4b1e 100644 --- a/code/game/objects/items/melee/blunt.dm +++ b/code/game/objects/items/melee/blunt.dm @@ -70,3 +70,34 @@ if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) var/obj/structure/W = A W.atom_destruction("axe") + +/obj/item/brass_knuckles + name = "brass knuckles" + icon_state = "brass_knuckles" + base_icon_state = "brass_knuckles" + icon = 'icons/obj/weapon/blunt.dmi' + lefthand_file = 'icons/mob/inhands/weapons/blunt_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/blunt_righthand.dmi' + desc = "A pair of brass knuckles, fit for the common thug or stylish gangster. Can be carried in one hand but are most effective when wielded as a pair." + force = 15 + wound_bonus = 10 + throwforce = 5 + demolition_mod = 1.25 + custom_price = 180 + sharpness = SHARP_NONE + w_class = WEIGHT_CLASS_SMALL + slot_flags = ITEM_SLOT_POCKETS + attack_cooldown = LIGHT_WEAPON_CD + attack_verb = list("punched", "wholloped", "hooked", "jabbed", "slammed") + hitsound = list('sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg', 'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg', 'sound/weapons/slap.ogg') + pickup_sound = 'sound/weapons/melee/general_pickup.ogg' + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + resistance_flags = FIRE_PROOF + +/obj/item/brass_knuckles/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, attack_cooldown_wielded = 4, attack_cooldown_unwielded = LIGHT_WEAPON_CD, icon_wielded="[base_icon_state]_w") + +/obj/item/brass_knuckles/update_icon_state() + icon_state = base_icon_state + return ..() diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 7493e6376ae..6545eb68dff 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -67,6 +67,8 @@ /obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(transparent && (hitby.pass_flags & PASSGLASS)) return FALSE + if(!(REVERSE_DIR(hitby.dir) & owner.dir)) + return FALSE if(attack_type == THROWN_PROJECTILE_ATTACK) final_block_chance += 30 if(attack_type == LEAP_ATTACK) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 59ff983d59b..e3c0655f4e3 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -135,6 +135,14 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ /obj/item/stack/sheet/leather/get_main_recipes() . = ..() . += GLOB.leather_recipes + +/obj/item/stack/sheet/leather/synthetic + name = "synthetic leather" + desc = "Fabricator extruded fibers woven into something approximating leather. It has an odd sheen." + singular_name = "synthetic leather piece" + icon_state = "sheet-leather" + item_state = "sheet-leather" + /* * Sinew */ diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 3498814c117..2c6fc483fc2 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -301,6 +301,16 @@ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/ysiltane(src) new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salbutamol(src) +/obj/item/storage/box/hypospray/mkiii/cargo + name = "hypospray mk. III kit" + +/obj/item/storage/box/hypospray/mkiii/PopulateContents() + new /obj/item/hypospray/mkii/mkiii(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/cureall(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/morphine(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salbutamol(src) + /obj/item/storage/box/medigels name = "box of medical gels" desc = "A box full of medical gel applicators, with unscrewable caps and precision spray heads." diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index f0e5665b446..f92e1391b16 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -18,15 +18,16 @@ /obj/item/storage/AllowDrop() return FALSE -/obj/item/storage/contents_explosion(severity, target) +/obj/item/storage/contents_explosion(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) for(var/atom/A in contents) + var/list/to_explode = list(A,light_dam,light_item_dam,heavy_dam,heavy_item_dam) switch(severity) if(EXPLODE_DEVASTATE) - SSexplosions.highobj += A + SSexplosions.highobj += list(to_explode) if(EXPLODE_HEAVY) - SSexplosions.medobj += A + SSexplosions.medobj += list(to_explode) if(EXPLODE_LIGHT) - SSexplosions.lowobj += A + SSexplosions.lowobj += list(to_explode) /obj/item/storage/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 3171e7a3915..8b66a632f0c 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -5,7 +5,7 @@ ..() take_damage(AM.throwforce, BRUTE, "melee", 1, get_dir(src, AM)) -/obj/ex_act(severity, target) +/obj/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) if(resistance_flags & INDESTRUCTIBLE) return ..() //contents explosion @@ -14,13 +14,15 @@ if(target == src) take_damage(INFINITY, BRUTE, BOMB, 0) return + var/heavy_damage = heavy_item_dam ? heavy_item_dam : rand(100, 150) + var/light_damage = light_item_dam ? light_item_dam : rand(10, 90) switch(severity) if(EXPLODE_DEVASTATE) take_damage(rand(1000, 2000), BRUTE, BOMB, 0) if(EXPLODE_HEAVY) - take_damage(rand(100, 150), BRUTE, BOMB, 0) + take_damage(heavy_damage, BRUTE, BOMB, 0) if(EXPLODE_LIGHT) - take_damage(rand(10, 90), BRUTE, BOMB, 0) + take_damage(light_damage, BRUTE, BOMB, 0) /obj/bullet_act(obj/projectile/hitting_projectile) . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 24173360e6e..a537ed8d53c 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -552,15 +552,16 @@ if(!locked) open() -/obj/structure/closet/contents_explosion(severity, target) +/obj/structure/closet/contents_explosion(severity, target,light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) for(var/atom/A in contents) + var/list/to_explode = list(A,light_dam,light_item_dam,heavy_dam,heavy_item_dam) switch(severity) if(EXPLODE_DEVASTATE) - SSexplosions.highobj += A + SSexplosions.highobj += list(to_explode) if(EXPLODE_HEAVY) - SSexplosions.medobj += A + SSexplosions.medobj += list(to_explode) if(EXPLODE_LIGHT) - SSexplosions.lowobj += A + SSexplosions.lowobj += list(to_explode) /obj/structure/closet/singularity_act() dump_contents() diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index a3ab7523643..9436993b28d 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -54,15 +54,16 @@ if(!QDELETED(src)) empty_pod() -/obj/structure/transit_tube_pod/contents_explosion(severity, target) +/obj/structure/transit_tube_pod/contents_explosion(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) for(var/atom/movable/AM in contents) + var/list/to_explode = list(AM,light_dam,light_item_dam,heavy_dam,heavy_item_dam) switch(severity) if(EXPLODE_DEVASTATE) - SSexplosions.highobj += AM + SSexplosions.highobj += list(to_explode) if(EXPLODE_HEAVY) - SSexplosions.medobj += AM + SSexplosions.medobj += list(to_explode) if(EXPLODE_LIGHT) - SSexplosions.lowobj += AM + SSexplosions.lowobj += list(to_explode) /obj/structure/transit_tube_pod/singularity_pull(S, current_size) ..() diff --git a/code/game/turfs/open/acid.dm b/code/game/turfs/open/acid.dm index 53e00fd864f..5df4aa4c8f8 100644 --- a/code/game/turfs/open/acid.dm +++ b/code/game/turfs/open/acid.dm @@ -25,8 +25,8 @@ return FALSE return ..() -/turf/open/water/acid/ex_act(severity, target) - contents_explosion(severity, target) +/turf/open/water/acid/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) + contents_explosion(severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) /turf/open/water/acid/Melt() to_be_destroyed = FALSE diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index dbdb665a834..27ed0ef3aff 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -47,7 +47,7 @@ if(mapload && prob(33)) MakeDirty() -/turf/open/floor/ex_act(severity, target) +/turf/open/floor/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) var/shielded = is_shielded() ..() if(severity != 1 && shielded && target != src) diff --git a/code/game/turfs/open/floor/conc_floor.dm b/code/game/turfs/open/floor/conc_floor.dm index 415ee8c94e7..a4fb927522c 100644 --- a/code/game/turfs/open/floor/conc_floor.dm +++ b/code/game/turfs/open/floor/conc_floor.dm @@ -252,7 +252,7 @@ return // modified from /turf/open/floor/engine/ex_act() -/turf/open/floor/concrete/reinforced/ex_act(severity,target) +/turf/open/floor/concrete/reinforced/ex_act(severity,target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) var/shielded = is_shielded() contents_explosion(severity, target) SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 2bb70f5802f..e4af8f0f7a5 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -53,8 +53,8 @@ AddElement(/datum/element/immerse, "immerse", 215) immerse_added = TRUE -/turf/open/lava/ex_act(severity, target) - contents_explosion(severity, target) +/turf/open/lava/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) + contents_explosion(severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) /turf/open/lava/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 38259c9fdfc..14ac52433af 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -516,7 +516,8 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) /turf/proc/is_shielded() -/turf/contents_explosion(severity, target) +//most explosions actually passed here +/turf/contents_explosion(severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) for(var/atom/A as anything in contents) if(!QDELETED(A)) @@ -524,13 +525,14 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) var/atom/movable/AM = A if(!AM.ex_check(explosion_id)) continue + var/list/to_explode = list(A, light_dam, light_item_dam, heavy_dam, heavy_item_dam) switch(severity) if(EXPLODE_DEVASTATE) - SSexplosions.highobj += A + SSexplosions.highobj += list(to_explode) if(EXPLODE_HEAVY) - SSexplosions.medobj += A + SSexplosions.medobj += list(to_explode) if(EXPLODE_LIGHT) - SSexplosions.lowobj += A + SSexplosions.lowobj += list(to_explode) /turf/narsie_act(force, ignore_mobs, probability = 20) . = (force || prob(probability)) diff --git a/code/game/world.dm b/code/game/world.dm index 86a933d3ed9..acebce20831 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -43,7 +43,6 @@ GLOBAL_VAR(restart_counter) config.Load(params[OVERRIDE_CONFIG_DIRECTORY_PARAMETER]) load_admins() - load_mentors() //WS edit - Mentors //SetupLogs depends on the RoundID, so lets check //DB schema and set RoundID if we can diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ac7657e0078..0d2886f3f54 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -105,7 +105,6 @@ body += "OOC" body += "PRAY" body += "ADMINHELP" - body += "MENTORHELP" body += "DEADCHAT" body += "(toggle all)" diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 09a456ff809..594352b5022 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -59,8 +59,6 @@ GLOBAL_PROTECT(protected_ranks) flag = R_BUILD if("ADMIN") flag = R_ADMIN - if("MENTOR") - flag = R_MENTOR if("BAN") flag = R_BAN if("FUN") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index e6d67da413c..4731b3a1022 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -4,8 +4,6 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) GLOBAL_PROTECT(admin_verbs_default) /world/proc/AVerbsDefault() return list( - /client/proc/cmd_mentor_say, - /client/proc/mentor_memo, /client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/ /client/proc/cmd_admin_say, /*admin-only ooc chat*/ /client/proc/hide_verbs, /*hides all our adminverbs*/ @@ -231,7 +229,7 @@ GLOBAL_PROTECT(admin_verbs_debug) ) GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release)) GLOBAL_PROTECT(admin_verbs_possess) -GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions, /client/proc/edit_mentors)) +GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions)) GLOBAL_PROTECT(admin_verbs_permissions) GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/poll_panel)) GLOBAL_PROTECT(admin_verbs_poll) @@ -314,8 +312,6 @@ GLOBAL_PROTECT(admin_verbs_hideable) add_verb(src, /client/proc/togglebuildmodeself) if(rights & R_ADMIN) add_verb(src, GLOB.admin_verbs_admin) - if(rights & R_MENTOR) - add_verb(src, GLOB.mentor_verbs) if(rights & R_BAN) add_verb(src, GLOB.admin_verbs_ban) if(rights & R_FUN) diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 59f02fb63f0..2909e978dc0 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -89,10 +89,6 @@ GLOBAL_PROTECT(href_token) deadmined = FALSE if (GLOB.directory[target]) associate(GLOB.directory[target]) //find the client for a ckey if they are connected and associate them with us - if(!GLOB.mentor_datums[target]) - new /datum/mentors(target) // If we don't have a mentor datum, make a new one - var/datum/mentors/mentor = GLOB.mentor_datums[target] - mentor.associate(GLOB.directory[target]) // All admins get free mentor /datum/admins/proc/deactivate() if(IsAdminAdvancedProcCall()) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 15e65418922..2fd59003d3a 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -618,13 +618,6 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) current_ticket.add_interaction("[key_name_admin(usr)] opened a new ticket.") current_ticket.close() - //Extremely simple system of suggesting mentorhelp instead of adminhelp - var/msg_lower = lowertext(msg) - if((findtext(msg_lower, "how to") == 1 || findtext(msg_lower, "how do") == 1) && GLOB.mentors.len) - if(alert("\"[msg]\" looks like a game mechanics question, would you like to ask in mentorhelp instead?", "Adminhelp?", "Yes, mentorhelp", "No, adminhelp") == "Yes, mentorhelp") - mentorhelp(msg) - return - new /datum/admin_help(msg, src, FALSE) // diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index b30313b3b77..b2a6d1e0e70 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -72,12 +72,11 @@ if(!src.holder) return - var/confirm = alert(src, "Are you sure you want to reload all admins and mentors?", "Confirm", "Yes", "No") + var/confirm = alert(src, "Are you sure you want to reload all admins?", "Confirm", "Yes", "No") if(confirm !="Yes") return load_admins() - load_mentors() BLACKBOX_LOG_ADMIN_VERB("Reload All Admins") message_admins("[key_name_admin(usr)] manually reloaded admins") diff --git a/code/modules/admin/verbs/mentors_edit.dm b/code/modules/admin/verbs/mentors_edit.dm deleted file mode 100644 index bf5d9bac117..00000000000 --- a/code/modules/admin/verbs/mentors_edit.dm +++ /dev/null @@ -1,60 +0,0 @@ -/****************************************** -It's like permissions panel, but for mentors, -also probably less secure, but honestly dude -its mentors, not actual dangerous perms -******************************************/ -/client/proc/edit_mentors() - set category = "Admin" - set name = "Mentor Panel" - set desc = "Edit mentors" - - if(!check_rights(R_PERMISSIONS)) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - - var/html = "" - html += "Add a Mentor\n" - html += "\n" - html += "\n" - - var/datum/DBQuery/query_mentor_list = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor")]") - query_mentor_list.Execute() - while(query_mentor_list.NextRow()) - html += "\n" - - html += "
Mentor CkeyRemove
[query_mentor_list.item[1]]X
" - - var/datum/browser/popup = new(usr, "mentoredit", "
Mentor Panel
", 1000, 650) - popup.set_content(html) - popup.open(0) - -/client/Topic(href, href_list) - ..() - if(href_list["mentor_edit"]) - if(!check_rights(R_PERMISSIONS)) - message_admins("[key_name_admin(usr)] attempted to edit mentor permissions without sufficient rights.") - log_admin("[key_name(usr)] attempted to edit mentor permissions without sufficient rights.") - return - if(IsAdminAdvancedProcCall()) - to_chat(usr, "Mentor Edit blocked: Advanced ProcCall detected.") - return - - if(href_list["mentor_edit"] == "add") - var/newguy = input("Enter the key of the mentor you wish to add.", "") - var/datum/DBQuery/query_add_mentor = SSdbcore.NewQuery("INSERT INTO [format_table_name("mentor")] (`ckey`) VALUES ('[newguy]')") - query_add_mentor.Execute() - message_admins("[key_name(usr)] made [newguy] a mentor.") - log_admin("[key_name(usr)] made [newguy] a mentor.") - SSredbot.send_discord_message("mentor","[newguy] is now a mentor.","mentor") - return - - if(href_list["mentor_edit"] == "remove") - var/removed_mentor = href_list["mentor_ckey"] - var/datum/DBQuery/query_remove_mentor = SSdbcore.NewQuery("DELETE FROM [format_table_name("mentor")] WHERE ckey='[removed_mentor]'") - query_remove_mentor.Execute() - message_admins("[key_name(usr)] de-mentored [href_list["mentor_ckey"]]") - log_admin("[key_name(usr)] de-mentored [href_list["mentor_ckey"]]") - SSredbot.send_discord_message("mentor","[href_list["mentor_ckey"]] has been de-mentored.","mentor") - return diff --git a/code/modules/admin/verbs/purrbation.dm b/code/modules/admin/verbs/purrbation.dm index bbd7c0bc47b..0cba0a3458d 100644 --- a/code/modules/admin/verbs/purrbation.dm +++ b/code/modules/admin/verbs/purrbation.dm @@ -26,15 +26,12 @@ var/obj/item/organ/ears/cat/cat_ears = locate() in internal_organs if(cat_tail) cat_tail.Remove(src, TRUE) - var/obj/item/organ/tail/new_tail - for(var/organ in dna.species.mutant_organs) //Yes, there's no other way. - if(ispath(organ, /obj/item/organ/tail)) - new_tail = organ + var/obj/item/organ/tail/new_tail = dna.species.species_organs[ORGAN_SLOT_TAIL] if(new_tail) new_tail = new new_tail() new_tail.Insert(src, TRUE, FALSE) if(cat_ears) - var/obj/item/organ/new_ears = new dna.species.mutantears + var/obj/item/organ/new_ears = new dna.species.species_organs[ORGAN_SLOT_EARS] new_ears.Insert(src, TRUE, FALSE) if(!silent) to_chat(src, span_boldnotice("You are no longer a cat.")) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index f36f372cb8a..18b5c3e2cba 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -189,9 +189,6 @@ if(MUTE_ADMINHELP) mute_string = "adminhelp, admin PM and ASAY" feedback_string = "Adminhelp" - if(MUTE_MENTORHELP) - mute_string = "mentorhelp" - feedback_string = "Mentorhelp" if(MUTE_DEADCHAT) mute_string = "deadchat and DSAY" feedback_string = "Deadchat" diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 4b78a872a39..903a5e6f099 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -63,18 +63,6 @@ popup.set_content(dat) popup.open() - //WS Begin - Mentors - if("mentor_log") - var/dat = "Mentor Log
" - for(var/l in GLOB.mentorlog) - dat += "
  • [l]
  • " - if(!GLOB.mentorlog.len) - dat += "No mentors have done anything this round! Not like they do much either way." - var/datum/browser/popup = new(holder, "mentor_log", null, 300, 430) - popup.set_content(dat) - popup.open() - //WS end - if("show_admins") var/dat = "Current admins:
    " if(GLOB.admin_datums) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index 5568a86c10c..70242d8cbfb 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -77,9 +77,7 @@ else to_chat(owner, span_warning("You feel a weird rumble in your bowels...")) - var/liver_type = /obj/item/organ/liver - if(owner?.dna?.species?.mutantliver) - liver_type = owner.dna.species.mutantliver + var/liver_type = owner?.dna?.species?.species_organs[ORGAN_SLOT_LIVER] || /obj/item/organ/liver var/obj/item/organ/liver/new_liver = new liver_type() new_liver.Insert(owner) @@ -92,9 +90,7 @@ else to_chat(owner, span_warning("You feel a weird rumble inside your chest...")) - var/lung_type = /obj/item/organ/lungs - if(owner.dna.species && owner.dna.species.mutantlungs) - lung_type = owner.dna.species.mutantlungs + var/lung_type = owner.dna?.species?.species_organs[ORGAN_SLOT_LUNGS] || /obj/item/organ/lungs var/obj/item/organ/lungs/new_lungs = new lung_type() new_lungs.Insert(owner) @@ -110,9 +106,7 @@ addtimer(CALLBACK(src, PROC_REF(finish_replace_eyes)), rand(100, 200)) /obj/item/organ/heart/gland/heal/proc/finish_replace_eyes() - var/eye_type = /obj/item/organ/eyes - if(owner.dna.species && owner.dna.species.mutanteyes) - eye_type = owner.dna.species.mutanteyes + var/eye_type = owner.dna?.species?.species_organs[ORGAN_SLOT_EYES] || /obj/item/organ/eyes var/obj/item/organ/eyes/new_eyes = new eye_type() new_eyes.Insert(owner) owner.visible_message(span_warning("A pair of new eyes suddenly inflates into [owner]'s eye sockets!"), span_userdanger("A pair of new eyes suddenly inflates into your eye sockets!")) diff --git a/code/modules/antagonists/changeling/powers/regenerate.dm b/code/modules/antagonists/changeling/powers/regenerate.dm index a87a41e2bbc..d4f0f48531b 100644 --- a/code/modules/antagonists/changeling/powers/regenerate.dm +++ b/code/modules/antagonists/changeling/powers/regenerate.dm @@ -25,11 +25,8 @@ C.emote("scream") C.regenerate_limbs(1) if(!user.getorganslot(ORGAN_SLOT_BRAIN)) - var/obj/item/organ/brain/B - if(C.has_dna() && C.dna.species.mutantbrain) - B = new C.dna.species.mutantbrain() - else - B = new() + var/obj/item/organ/brain/B = C.dna?.species.species_organs[ORGAN_SLOT_BRAIN] || /obj/item/organ/brain + B = new() B.organ_flags &= ~ORGAN_VITAL B.decoy_override = TRUE B.Insert(C) diff --git a/code/modules/antagonists/valentines/heartbreaker.dm b/code/modules/antagonists/valentines/heartbreaker.dm deleted file mode 100644 index 0f4fcf300e2..00000000000 --- a/code/modules/antagonists/valentines/heartbreaker.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/antagonist/heartbreaker - name = "heartbreaker" - roundend_category = "valentines" - show_in_antagpanel = FALSE - show_name_in_check_antagonists = TRUE - - -/datum/antagonist/heartbreaker/proc/forge_objectives() - var/datum/objective/martyr/normiesgetout = new - normiesgetout.owner = owner - objectives += normiesgetout - -/datum/antagonist/heartbreaker/on_gain() - forge_objectives() - . = ..() - -/datum/antagonist/heartbreaker/greet() - to_chat(owner, span_warning("You didn't get a date! They're all having fun without you! You'll show them though...")) - owner.announce_objectives() diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm deleted file mode 100644 index 76fb9079e5c..00000000000 --- a/code/modules/antagonists/valentines/valentine.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/antagonist/valentine - name = "valentine" - roundend_category = "valentines" //there's going to be a ton of them so put them in separate category - show_in_antagpanel = FALSE - prevent_roundtype_conversion = FALSE - var/datum/mind/date - -/datum/antagonist/valentine/proc/forge_objectives() - var/datum/objective/protect/protect_objective = new /datum/objective/protect - protect_objective.owner = owner - protect_objective.target = date - if(!ishuman(date.current)) - protect_objective.human_check = FALSE - protect_objective.explanation_text = "Protect [date.name], your date." - objectives += protect_objective - -/datum/antagonist/valentine/on_gain() - forge_objectives() - if(isliving(owner.current)) - var/mob/living/L = owner.current - L.apply_status_effect(STATUS_EFFECT_INLOVE, date.current) - . = ..() - -/datum/antagonist/valentine/on_removal() - if(isliving(owner.current)) - var/mob/living/L = owner.current - L.remove_status_effect(STATUS_EFFECT_INLOVE) - . = ..() - -/datum/antagonist/valentine/greet() - to_chat(owner, span_warning("You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.")) - -//Squashed up a bit -/datum/antagonist/valentine/roundend_report() - var/objectives_complete = TRUE - if(objectives.len) - for(var/datum/objective/objective in objectives) - if(!objective.check_completion()) - objectives_complete = FALSE - break - - if(objectives_complete) - return "[owner.name] protected [owner.p_their()] date" - else - return "[owner.name] date failed!" diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index 8f1e2cc3548..28a8e4de23b 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -4,7 +4,7 @@ initialize_directions = SOUTH|NORTH use_power = IDLE_POWER_USE device_type = BINARY - layer = GAS_PUMP_LAYER + layer = UNDER_CATWALK var/uid var/static/gl_uid = 1 diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm index c587b1b1b63..f9a2e4d710f 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm @@ -4,7 +4,7 @@ initialize_directions = SOUTH|NORTH|WEST use_power = IDLE_POWER_USE device_type = TRINARY - layer = GAS_FILTER_LAYER + layer = UNDER_CATWALK pipe_flags = PIPING_ONE_PER_TURF var/flipped = FALSE diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 1f6e9cab538..e050ae06450 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -7,6 +7,7 @@ initialize_directions = NORTH|SOUTH pipe_flags = PIPING_ALL_LAYER | PIPING_DEFAULT_LAYER_ONLY | PIPING_CARDINAL_AUTONORMALIZE piping_layer = PIPING_LAYER_DEFAULT + layer = UNDER_CATWALK device_type = 0 volume = 260 construction_type = /obj/item/pipe/binary @@ -42,9 +43,6 @@ /obj/machinery/atmospherics/pipe/layer_manifold/proc/get_all_connected_nodes() return front_nodes + back_nodes + nodes -/obj/machinery/atmospherics/pipe/layer_manifold/update_layer() - layer = initial(layer) + (PIPING_LAYER_MAX * PIPING_LAYER_LCHANGE) //This is above everything else. - /obj/machinery/atmospherics/pipe/layer_manifold/update_overlays() . = ..() diff --git a/code/modules/cargo/blackmarket/packs/ammo.dm b/code/modules/cargo/blackmarket/packs/ammo.dm index 5670f42ecae..39489b0718f 100644 --- a/code/modules/cargo/blackmarket/packs/ammo.dm +++ b/code/modules/cargo/blackmarket/packs/ammo.dm @@ -176,6 +176,17 @@ stock_max = 4 availability_prob = 40 +/datum/blackmarket_item/ammo/sharplite_plus_cell + name = "Sharplite Plus Cell" + desc = "A sharplite plus energy weapon cell. The plus in the name means bigger, if that wasn't obvious." + item = /obj/item/stock_parts/cell/gun/sharplite/plus + + cost_min = 800 + cost_max = 1200 + stock_min = 2 + stock_max = 4 + availability_prob = 40 + /datum/blackmarket_item/ammo/gauss_cell name = "SolCon Weapon Cell" desc = "A Solarian weapon cell, for powering their gauss weaponry." @@ -213,8 +224,8 @@ desc = "These upgraded weapon powercells come with twice the capacity of the standard cells, and quality checked to make sure they won't explode!" item = /obj/item/stock_parts/cell/gun/upgraded - cost_min = 1000 - cost_max = 1750 + cost_min = 800 + cost_max = 1200 stock_min = 2 stock_max = 4 availability_prob = 25 @@ -368,3 +379,13 @@ cost_max = 500 stock_min = 4 stock_max = 8 + +/datum/blackmarket_item/ammo/a12gdragonsbreath + name = "Dragonsbreath Shells" + desc = "32 shells to rain a firestorm upon your enemies. Just make sure to not to catch yourself on fire!" + item = /obj/item/storage/box/ammo/a12g_dragonsbreath + cost_min = 300 + cost_max = 700 + stock_min = 3 + stock_max = 6 + availability_prob = 80 diff --git a/code/modules/cargo/blackmarket/packs/tools.dm b/code/modules/cargo/blackmarket/packs/tools.dm index 2721e6cf0c8..eeec19b19bb 100644 --- a/code/modules/cargo/blackmarket/packs/tools.dm +++ b/code/modules/cargo/blackmarket/packs/tools.dm @@ -21,6 +21,16 @@ stock = 1 availability_prob = 25 +/datum/blackmarket_item/tool/mk3_hypo + name = "Mk3 Hypospray Kit" + desc = "Pretty sure the guy we got this from was about to do surgery. Well. Don't think they'll be doing anything now. Keh." + item = /obj/item/storage/box/hypospray/mkiii + + cost_min = 3000 + cost_max = 5000 + stock = 2 + availability_prob = 25 + /datum/blackmarket_item/tool/jaws name = "Jaws of Life" desc = "These prying jaws are useful for rescuing trapped victims. Or you know. Breaking into secure areas." diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index e9c80414bad..552845e1f16 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -226,11 +226,29 @@ cost = 350 contains = list(/obj/item/storage/box/ammo/a12g_rubbershot) -/datum/supply_pack/ammo/techshells - name = "Unloaded Shotgun Technological Shells Crate" - desc = "Contains a box of 7 versatile tech shells, capable of producing a variety of deadly effects for any situation. Some assembly required." - cost = 210 - contains = list(/obj/item/storage/box/techshot) +/datum/supply_pack/ammo/scattershells + name = "Scatter Laser Shell Crate" + desc = "Contains a box of 32 shells modified to fire Sharplite lasers. Perfect for high-velocity crowd control." + cost = 380 + contains = list(/obj/item/storage/box/ammo/a12g_scatter) + +/datum/supply_pack/ammo/pulseshells + name = "Pulse Slug Crate" + desc = "Contains a box of 32 shells modified to fire a strong pulse projectile. Decent damage and respectable at demolishing fortifications." + cost = 300 + contains = list(/obj/item/storage/box/ammo/pulseslug) + +/datum/supply_pack/ammo/incenshells + name = "Incendiary Shell Crate" + desc = "Contains a box of 32 shells filled with an incendiary payload. Low damage but catches targets on fire." + cost = 400 + contains = list(/obj/item/storage/box/ammo/a12g_incen) + +/datum/supply_pack/ammo/ion + name = "Ion Shell Crate" + desc = "Contains a box of 32 shells filled with an electromagnetic payload. No damage but EMPs the target." + cost = 800 + contains = list(/obj/item/storage/box/ammo/a12g_ion) /* .45-70 */ diff --git a/code/modules/cargo/packs/chemistry.dm b/code/modules/cargo/packs/chemistry.dm index 988a2abcdcb..a8d9f5e29ba 100644 --- a/code/modules/cargo/packs/chemistry.dm +++ b/code/modules/cargo/packs/chemistry.dm @@ -56,6 +56,21 @@ contains = list(/obj/machinery/chem_press) crate_name = "pill press crate" +/* Machinery */ + +/datum/supply_pack/chemistry/chem_heater + name = "Chemical Heater Circuit Crate" + desc = "The circuitboard to a chemical heater - ideal for getting precise temperatures on chemicals!" + cost = 1000 + contains = list(/obj/item/circuitboard/machine/chem_heater) + +/datum/supply_pack/chemistry/chem_manipulator + name = "ChemMaster Circuit Crate" + desc = "The circuitboard to a ChemMaster chemistry machine. Great for organizing your chemicals." + cost = 2000 + contains = list(/obj/item/circuitboard/machine/chem_master) + + /* Bulk materials */ @@ -179,23 +194,3 @@ contains = list(/obj/item/reagent_containers/glass/chem_jug/sulfur) crate_name = "bulk sulfur crate" -/datum/supply_pack/chemistry/eznutriment - name = "Bulk E-Z-Nutriment Crate" - desc = "Contains a jug filled with 150u of E-Z-Nutriment." - cost = 300 - contains = list(/obj/item/reagent_containers/glass/chem_jug/eznutriment) - crate_name = "bulk E-Z-Nutriment crate" - -/datum/supply_pack/chemistry/left4zednutriment - name = "Bulk Left 4 Zed Crate" - desc = "Contains a jug filled with 150u of Left 4 Zed." - cost = 300 - contains = list(/obj/item/reagent_containers/glass/chem_jug/left4zednutriment) - crate_name = "bulk Left 4 Zed crate" - -/datum/supply_pack/chemistry/robustharvestnutriment - name = "Bulk Robust Harvest Crate" - desc = "Contains a jug filled with 150u of Robust Harvest." - cost = 300 - contains = list(/obj/item/reagent_containers/glass/chem_jug/robustharvestnutriment) - crate_name = "bulk Robust Harvest crate" diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm index 069f72d276c..a3fd60078ab 100644 --- a/code/modules/cargo/packs/food.dm +++ b/code/modules/cargo/packs/food.dm @@ -428,93 +428,6 @@ crate_type = /obj/structure/closet/crate no_bundle = TRUE -/* - Botanical -*/ - -/datum/supply_pack/food/hydrotank - name = "Hydroponics Backpack Crate" - desc = "Bring on the flood with this high-capacity backpack crate. Contains 500 units of life-giving H2O." - cost = 750 - contains = list(/obj/item/watertank) - crate_name = "hydroponics backpack crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/gardening - name = "Gardening Crate" - desc = "Supplies for growing a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron." - cost = 500 - contains = list(/obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/hatchet, - /obj/item/cultivator, - /obj/item/plant_analyzer, - /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/suit/apron, - /obj/item/storage/box/disks_plantgene) - crate_name = "gardening crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/ethanol - name = "Ethanol Crate" - desc = "Contains one small bottle of ethanol for the aspiring botanist or amateur chemist." - cost = 100 - contains = list(/obj/item/reagent_containers/glass/bottle/ethanol) - crate_name = "gardening crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/weedcontrol - name = "Weed Control Crate" - desc = "Contains a scythe, gasmask, and two anti-weed defoliant grenades, for when your garden grows out of control." - cost = 200 - contains = list(/obj/item/scythe, - /obj/item/clothing/mask/gas, - /obj/item/grenade/chem_grenade/antiweed, - /obj/item/grenade/chem_grenade/antiweed) - crate_name = "weed control crate" - crate_type = /obj/structure/closet/crate/secure/hydroponics - -/datum/supply_pack/food/seeds - name = "Seeds Crate" - desc = "Big things have small beginnings. Contains fourteen different seeds." - cost = 150 - contains = list(/obj/item/seeds/chili, - /obj/item/seeds/cotton, - /obj/item/seeds/berry, - /obj/item/seeds/corn, - /obj/item/seeds/eggplant, - /obj/item/seeds/tomato, - /obj/item/seeds/soya, - /obj/item/seeds/wheat, - /obj/item/seeds/wheat/rice, - /obj/item/seeds/carrot, - /obj/item/seeds/sunflower, - /obj/item/seeds/chanter, - /obj/item/seeds/potato, - /obj/item/seeds/sugarcane) - crate_name = "seeds crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/exoticseeds - name = "Exotic Seeds Crate" - desc = "Any entrepreneuring botanist's dream. Contains eleven different seeds, including two mystery seeds!" - cost = 1000 - contains = list(/obj/item/seeds/nettle, - /obj/item/seeds/plump, - /obj/item/seeds/liberty, - /obj/item/seeds/amanita, - /obj/item/seeds/reishi, - /obj/item/seeds/bamboo, - /obj/item/seeds/eggplant/eggy, - /obj/item/seeds/rainbow_bunch, - /obj/item/seeds/rainbow_bunch, - /obj/item/seeds/random, - /obj/item/seeds/random) - crate_name = "exotic seeds crate" - crate_type = /obj/structure/closet/crate/hydroponics - /* Bees */ diff --git a/code/modules/cargo/packs/hydroponics.dm b/code/modules/cargo/packs/hydroponics.dm new file mode 100644 index 00000000000..1b42d62cbbf --- /dev/null +++ b/code/modules/cargo/packs/hydroponics.dm @@ -0,0 +1,152 @@ +/datum/supply_pack/gardening + category = "Hydroponics & Gardening" + crate_name = "gardening crate" + crate_type = /obj/structure/closet/crate/hydroponics + + + +/* + Botanical +*/ + +/datum/supply_pack/gardening/starter + name = "Starter Gardening Crate" + desc = "Supplies for starting a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron." + cost = 500 + contains = list( + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/hatchet, + /obj/item/cultivator, + /obj/item/plant_analyzer, + /obj/item/clothing/gloves/botanic_leather, + /obj/item/clothing/suit/apron, + ) + +/datum/supply_pack/gardening/hydrotank + name = "Hydroponics Backpack Crate" + desc = "Bring on the flood with this high-capacity backpack crate. Contains 500 units of life-giving H2O." + cost = 750 + contains = list(/obj/item/watertank) + crate_name = "hydroponics backpack crate" + crate_type = /obj/structure/closet/crate/hydroponics + + +/datum/supply_pack/gardening/seeds + name = "Seeds Crate" + desc = "Big things have small beginnings. Contains fourteen different seeds." + cost = 150 + contains = list( + /obj/item/seeds/chili, + /obj/item/seeds/cotton, + /obj/item/seeds/berry, + /obj/item/seeds/corn, + /obj/item/seeds/eggplant, + /obj/item/seeds/tomato, + /obj/item/seeds/soya, + /obj/item/seeds/wheat, + /obj/item/seeds/wheat/rice, + /obj/item/seeds/carrot, + /obj/item/seeds/sunflower, + /obj/item/seeds/chanter, + /obj/item/seeds/potato, + /obj/item/seeds/sugarcane + ) + crate_name = "seeds crate" + +/datum/supply_pack/gardening/teceti_seeds + name = "Tecetian Seed Crate" + desc = "A starter set of Frontier-friendly Tecetian flora. Contains 6 seeds." + cost = 150 + contains = list( + /obj/item/seeds/refa_li, + /obj/item/seeds/siti, + /obj/item/seeds/sososi, + /obj/item/seeds/dote_berries, + /obj/item/seeds/dotu_fime, + /obj/item/seeds/fara_li, + ) + crate_name = "seeds crate" + +/* Gardening Chems */ + +/datum/supply_pack/gardening/bulkethanol + name = "Bulk Ethanol Crate" + desc = "Contains a jug filled with ethanol." + cost = 200 + contains = list(/obj/item/reagent_containers/glass/chem_jug/ethanol) + +/datum/supply_pack/gardening/eznutriment + name = "Bulk E-Z-Nutriment Crate" + desc = "Contains a jug filled with 150u of E-Z-Nutriment." + cost = 300 + contains = list(/obj/item/reagent_containers/glass/chem_jug/eznutriment) + crate_name = "bulk E-Z-Nutriment crate" + +/datum/supply_pack/gardening/left4zednutriment + name = "Bulk Left 4 Zed Crate" + desc = "Contains a jug filled with 150u of Left 4 Zed." + cost = 300 + contains = list(/obj/item/reagent_containers/glass/chem_jug/left4zednutriment) + crate_name = "bulk Left 4 Zed crate" + +/datum/supply_pack/gardening/robustharvestnutriment + name = "Bulk Robust Harvest Crate" + desc = "Contains a jug filled with 150u of Robust Harvest." + cost = 300 + contains = list(/obj/item/reagent_containers/glass/chem_jug/robustharvestnutriment) + crate_name = "bulk Robust Harvest crate" + +/datum/supply_pack/gardening/endurogrownutrient + name = "Bulk Enduro Grow Crate" + desc = "Contains a jug filled with 150u of Enduro Grow." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/chem_jug/endurogrow) + crate_name = "bulk Enduro Grow crate" + +/datum/supply_pack/gardening/liquidearthquakenutrient + name = "Bulk Liquid Earthquake Crate" + desc = "Contains a jug filled with 150u of Liquid Earthquake." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/chem_jug/liquidearthquake) + crate_name = "bulk Enduro Grow crate" + +/datum/supply_pack/gardening/weedcontrol + name = "Weed Control Crate" + desc = "Contains two bottles of weed spray, for when your garden grows out of control." + cost = 200 + contains = list( + /obj/item/reagent_containers/spray/weedspray, + /obj/item/reagent_containers/spray/weedspray + ) + +/datum/supply_pack/gardening/pestcontrol + name = "Pest Control Crate" + desc = "Contains two bottles of pest spray, for when your garden grows out of control." + cost = 200 + contains = list( + /obj/item/reagent_containers/spray/pestspray, + /obj/item/reagent_containers/spray/pestspray + ) + +/* Machinery */ + +/datum/supply_pack/gardening/tray + name = "Hydroponics Circuit Crate" + desc = "One circuitboard for construction of a hydroponics tray. Perfect for busy spacers looking to grow something on their ship." + cost = 1000 + contains = list(/obj/item/circuitboard/machine/hydroponics) + +/datum/supply_pack/gardening/seed_extractor + name = "Seed Extractor Crate" + desc = "One circuitboard for construction of a stationary seed extractor. Allows storing and sorting the seeds from plants." + cost = 1000 + contains = list(/obj/item/circuitboard/machine/seed_extractor) + +/datum/supply_pack/gardening/biogenerator + name = "Biogenerator Crate" + desc = "One circuitboard for construction of a Biogenerator, an advanced fabricator designed to make biological compounds out of a bio-slurry." + cost = 3000 + contains = list(/obj/item/circuitboard/machine/biogenerator) diff --git a/code/modules/cargo/packs/machinery.dm b/code/modules/cargo/packs/machinery.dm index e52a0408f48..5164b2da314 100644 --- a/code/modules/cargo/packs/machinery.dm +++ b/code/modules/cargo/packs/machinery.dm @@ -214,34 +214,6 @@ Miscellaneous machines */ -/datum/supply_pack/machinery/gravgen - name = "Ship-Portable Gravity Generator Crate" - desc = "For those tired of their tools floating away from them. Contains a single gravity generator." - cost = 2000 - contains = list(/obj/machinery/power/ship_gravity/unanchored) - crate_name = "gravity generator crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - no_bundle = TRUE - -/datum/supply_pack/machinery/breach_shield_gen - name = "Anti-breach Shield Projector Crate" - desc = "Hull breaches again? Say no more with the Makosso Technologies Anti-Breach Shield Projector! Uses forcefield technology to keep the air in, and the space out. Contains one shield projector." - cost = 1250 - contains = list(/obj/machinery/shieldgen) - crate_name = "anti-breach shield projector crate" - crate_type = /obj/structure/closet/crate/secure/plasma - no_bundle = TRUE - -/datum/supply_pack/ship_hardware/wall_shield_gen - name = "Shield Generator Crate" - desc = "These two shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls." - cost = 1000 - contains = list(/obj/machinery/power/shieldwallgen, - /obj/machinery/power/shieldwallgen) - crate_name = "shield generators crate" - crate_type = /obj/structure/closet/crate/secure/plasma - no_bundle = TRUE - /datum/supply_pack/machinery/drill_crate name = "Heavy duty laser mining drill" desc = "An experimental laser-based mining drill that Makoso-Warra is kindly allowing YOU, the customer, to opt into testing of." diff --git a/code/modules/cargo/packs/magazines.dm b/code/modules/cargo/packs/magazines.dm index 189e7bf29f8..cd473285e11 100644 --- a/code/modules/cargo/packs/magazines.dm +++ b/code/modules/cargo/packs/magazines.dm @@ -402,22 +402,22 @@ desc = "Contains a proprietary weapon cell, compatible with most Sharplite energy weapons." contains = list(/obj/item/stock_parts/cell/gun/sharplite) faction = /datum/faction/warra - faction_discount = 30 - cost = 700 + faction_discount = 25 /*300 credits*/ + cost = 400 /datum/supply_pack/magazine/tinyguncell name = "Sharplite Mini Power Cell" desc = "Contains a proprietary weapon cell, compatible with the Ohm self-defence pistol." contains = list(/obj/item/stock_parts/cell/gun/sharplite/mini) faction = /datum/faction/warra - faction_discount = 30 - cost = 300 + faction_discount = 20 /*200 credits*/ + cost = 250 /datum/supply_pack/magazine/upgradedguncell name = "Sharplite Plus Proprietary Weapon Cell" desc = "Contains an upgraded weapon cell, compatible with most Sharplite models. For MW use only." contains = list(/obj/item/stock_parts/cell/gun/sharplite/plus) - cost = 1000 + cost = 750 faction = /datum/faction/warra faction_discount = 0 faction_locked = TRUE @@ -426,7 +426,7 @@ name = "Sharplite Plus Proprietary Weapon Cell" desc = "Contains an upgraded weapon cell, compatible with most Sharplite models." contains = list(/obj/item/stock_parts/cell/gun/sharplite/plus) - cost = 1000 + cost = 750 faction = /datum/faction/inteq faction_discount = 0 faction_locked = TRUE @@ -437,14 +437,14 @@ name = "Etherbor Cell Crate" desc = "Contains an Etherbor weapon cell, compatible with Etherbor armaments with a slightly higher capacity." contains = list(/obj/item/stock_parts/cell/gun/kalix) - cost = 600 + cost = 500 faction = /datum/faction/pgf /datum/supply_pack/magazine/pgfcell name = "Military-Grade Etherbor Cell Crate" desc = "Contains a military-grade Etherbor weapon cell produced for the PGFMC, compatible with Etherbor armaments with a significantly higher capacity." contains = list(/obj/item/stock_parts/cell/gun/pgf) - cost = 1000 + cost = 750 faction = /datum/faction/pgf faction_discount = 0 faction_locked = TRUE diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 74626e579b7..4f5bb282ee1 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -201,13 +201,17 @@ /datum/supply_pack/medical/mkiii_hypo name = "mk.III Hypospray kit" desc = "Contains a Matahari Pharmaceutical mk.III Hypospray, for on the field medical care. Comes with an assortment of Ready-To-Go Vials" - cost = 2000 - contains = list(/obj/item/storage/box/hypospray/mkiii) + cost = 2500 + contains = list(/obj/item/storage/box/hypospray/mkiii/cargo) crate_name = "mk.III hypospray crate" faction = /datum/faction/warra faction_locked = TRUE faction_discount = 0 +/datum/supply_pack/medical/mkiii_hypo/cybersun + desc = "Contains a mk.III Cybersun Hypospray, for on the field medical care. Comes with an assortment of Ready-To-Go Vials" + faction = /datum/faction/syndicate/cybersun + /datum/supply_pack/medical/vials faction = /datum/faction/warra faction_discount = 50 @@ -229,6 +233,24 @@ ) crate_name = "indomide vial crate" +/datum/supply_pack/medical/vials/hadr_vial + name = "Hadrakine Vial Crate" + desc = "Contains a spare hadrakine vial, for usage in a Hypospray." + cost = 600 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/hadrakine, + ) + crate_name = "hadrakine vial crate" + +/datum/supply_pack/medical/vials/silf_vial + name = "Silfrine Vial Crate" + desc = "Contains a spare silfrine vial, for usage in a Hypospray." + cost = 800 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/silfrine, + ) + crate_name = "silfrine vial crate" + /datum/supply_pack/medical/vials/alvi_vial name = "Alvitane Vial Crate" desc = "Contains a spare alvitane vial, for usage in a Hypospray." @@ -238,15 +260,42 @@ ) crate_name = "alvitane vial crate" -/datum/supply_pack/medical/vials/dylo_vial +/datum/supply_pack/medical/vials/quar_vial + name = "Quardexane Vial Crate" + desc = "Contains a spare quardexane vial, for usage in a Hypospray." + cost = 600 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/quardexane, + ) + crate_name = "quardexane vial crate" + +/datum/supply_pack/medical/vials/ysil_vial + name = "Ysiltane Vial Crate" + desc = "Contains a spare ysiltane vial, for usage in a Hypospray." + cost = 800 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/ysiltane, + ) + crate_name = "ysiltane vial crate" + +/datum/supply_pack/medical/vials/panc_vial name = "Pancrazine Vial Crate" - desc = "Contains a spare dylovene vial, for usage in a Hypospray." + desc = "Contains a spare pancrazine vial, for usage in a Hypospray." cost = 400 contains = list( /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/pancrazine, ) crate_name = "pancrazine vial crate" +/datum/supply_pack/medical/vials/gjal_vial + name = "Gjalrazine Vial Crate" + desc = "Contains a spare gjalrazine vial, for usage in a Hypospray." + cost = 800 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/gjalrazine, + ) + crate_name = "gjalrazine vial crate" + /datum/supply_pack/medical/vials/dexa_vial name = "Dexalin Vial Crate" desc = "Contains a spare dexalin vial, for usage in a Hypospray." diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm index a558d8556f3..e55dd45adc9 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -139,6 +139,13 @@ contains = list(/obj/item/melee/knife/survival) crate_name = "survival knife crate" +/datum/supply_pack/sec_supply/brass_knuckles + name = "Brass Knuckles Crate" + desc = "Contains one pair of brass knuckles. Shiny, stylish, and swift. More than enough to make a pirate think twice about roughing up the average spacer-gangster." + cost = 160 + contains = list(/obj/item/brass_knuckles) + crate_name = "brass knuckles crate" + /datum/supply_pack/sec_supply/machete name = "Stamped Steel Machete Crate" desc = "Contains one mass produced machete. A perfect choice for crews on a budget." @@ -246,7 +253,7 @@ /datum/supply_pack/sec_supply/frag_grenade name = "Frag Grenade Crate" desc = "Contains one fragmentation grenade. Better not let it go off in your hands." - cost = 500 + cost = 250 contains = list(/obj/item/grenade/frag) crate_name = "frag grenade crate" crate_type = /obj/structure/closet/crate/secure/weapon @@ -323,6 +330,82 @@ faction_discount = 0 faction_locked = TRUE +//hardliner + +/datum/supply_pack/tools/webbing/hardliner + name = "Hardliner Webbing Crate" + desc = "Contains a webbing, with a standard implement of six pockets." + cost = 300 + contains = list(/obj/item/storage/belt/security/webbing/hardliners) + crate_name = "webbing crate" + faction = /datum/faction/syndicate/hardliners + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/webbing/hardliner/alt + name = "Hardliner Drop Pouch Harness Crate" + desc = "Contains a drop pouch harness, with a standard implement of six pockets." + contains = list(/obj/item/storage/belt/security/webbing/hardliners/alt) + crate_name = "drop pouch crate" + +//inteq + +/datum/supply_pack/tools/webbing/inteq + name = "Inteq Webbing Crate" + desc = "Contains a webbing, with a standard implement of six pockets." + cost = 300 + contains = list(/obj/item/storage/belt/security/webbing/inteq) + crate_name = "webbing crate" + faction = /datum/faction/inteq + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/webbing/inteq/alt + name = "Inteq Drop Pouch Harness Crate" + desc = "Contains a drop pouch harness, with a standard implement of six pockets." + contains = list(/obj/item/storage/belt/security/webbing/inteq/alt) + crate_name = "drop pouch crate" + +//ngr + +/datum/supply_pack/tools/webbing/ngr + name = "NGR Webbing Crate" + desc = "Contains a webbing, with a standard implement of six pockets." + cost = 300 + contains = list(/obj/item/storage/belt/security/webbing/ngr) + crate_name = "webbing crate" + faction = /datum/faction/syndicate/ngr + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/webbing/ngr/alt + name = "NGR Drop Pouch Harness Crate" + desc = "Contains a drop pouch harness, with a standard implement of six pockets." + contains = list(/obj/item/storage/belt/security/webbing/ngr/alt) + crate_name = "drop pouch crate" + +//clip + +/datum/supply_pack/tools/belt/clip + name = "CLIP Chest Rig Crate" + desc = "Contains a chest rig, with an implement of seven pockets." + cost = 500 + contains = list(/obj/item/storage/belt/military/clip) + crate_name = "chest rig crate" + faction = /datum/faction/clip + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/belt/clip/alt + name = "CLIP Belt Rig Crate" + desc = "Contains a belt rig, with an implement of seven pockets." + cost = 500 + contains = list(/obj/item/storage/belt/military/clip/alt) + crate_name = "belt rig crate" + faction = /datum/faction/clip + faction_discount = 0 + faction_locked = TRUE + //Makosso-Warra /datum/supply_pack/sec_supply/vigilitas_uniform diff --git a/code/modules/cargo/packs/ship_hardware.dm b/code/modules/cargo/packs/ship_hardware.dm index a2dd15ad9fa..badc6dd391e 100644 --- a/code/modules/cargo/packs/ship_hardware.dm +++ b/code/modules/cargo/packs/ship_hardware.dm @@ -15,6 +15,16 @@ crate_type = /obj/structure/closet/crate/engineering/electrical no_bundle = TRUE +/datum/supply_pack/ship_hardware/wall_shield_gen + name = "Shield Generator Crate" + desc = "These two shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls." + cost = 1000 + contains = list(/obj/machinery/power/shieldwallgen, + /obj/machinery/power/shieldwallgen) + crate_name = "shield generators crate" + crate_type = /obj/structure/closet/crate/secure/plasma + no_bundle = TRUE + /datum/supply_pack/ship_hardware/breach_shield_gen name = "Anti-breach Shield Projector Crate" desc = "Hull breaches again? Say no more with the Makosso Technologies Anti-Breach Shield Projector! Uses forcefield technology to keep the air in, and the space out. Contains one shield projector." diff --git a/code/modules/cargo/packs/spacesuits.dm b/code/modules/cargo/packs/spacesuits.dm index 1ba8293f9d6..dc118e96630 100644 --- a/code/modules/cargo/packs/spacesuits.dm +++ b/code/modules/cargo/packs/spacesuits.dm @@ -380,6 +380,17 @@ faction_discount = 0 faction_locked = TRUE +/datum/supply_pack/spacesuits/clip_industrial + name = "CLIP Industrial Hardsuit Crate" + desc = "An industrial-grade hardsuit rated for impacts, fires and radiation." + cost = 1500 + contains = list(/obj/item/clothing/suit/space/hardsuit/mining/clip) + crate_name = "CLIP industrial hardsuit crate" + crate_type = /obj/structure/closet/crate/secure/plasma + faction = /datum/faction/clip + faction_discount = 0 + faction_locked = TRUE + /datum/supply_pack/spacesuits/clip name = "CLIP softsuit crate" desc = "Contains one civilian-grade CLIP softsuit." @@ -428,7 +439,7 @@ faction_discount = 0 faction_locked = TRUE -/datum/supply_pack/spacesuits/white_red_hardsuit +/datum/supply_pack/spacesuits/hardstealth name = "Asura Shock Hardsuit Crate" desc = "A stripped-down version of an older hardsuit, the Asura has been modified to keep its quick movement and armor at the cost of its night-vision technology. Due to this, its role is often shifted from recon to blitz maneuvers." cost = 4500 @@ -463,6 +474,17 @@ faction_discount = 0 faction_locked = TRUE +/datum/supply_pack/spacesuits/ngr_miner + name = "NGR Mining Hardsuit Crate" + desc = "A heavy-duty hardsuit built to protect wreckers from harsh frontier conditions." + cost = 2000 + contains = list(/obj/item/clothing/suit/space/hardsuit/mining/heavy/ngr) + crate_name = "NGR mining hardsuit crate" + crate_type = /obj/structure/closet/crate/secure/plasma + faction = /datum/faction/syndicate/ngr + faction_discount = 0 + faction_locked = TRUE + //srm /datum/supply_pack/spacesuits/roumain_miningsuit diff --git a/code/modules/cargo/packs/tools.dm b/code/modules/cargo/packs/tools.dm index 8aa927622d0..3ffab11ef25 100644 --- a/code/modules/cargo/packs/tools.dm +++ b/code/modules/cargo/packs/tools.dm @@ -126,7 +126,7 @@ /datum/supply_pack/tools/jetpack name = "Jetpack Crate" desc = "For when you need to go fast in space." - cost = 750 + cost = 500 contains = list(/obj/item/tank/jetpack/carbondioxide) crate_name = "jetpack crate" crate_type = /obj/structure/closet/crate/secure/plasma @@ -134,13 +134,13 @@ /datum/supply_pack/tools/jetpack/harness name = "Jetpack Harness Crate" desc = "A compact jetpack harness for those who don't wish to be weighed down by larger traditional jetpacks." - cost = 1500 + cost = 750 contains = list(/obj/item/tank/jetpack/oxygen/harness) /datum/supply_pack/tools/jetpack/suit name = "Hardsuit Jetpack Upgrade Crate" desc = "A standardized jetpack attachment designed for direct integration with hardsuits. For when every gram matters." - cost = 2000 + cost = 1250 contains = list(/obj/item/tank/jetpack/suit) /datum/supply_pack/tools/anglegrinder diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 1c6f86cf4eb..3cfc7ac5ae2 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -81,15 +81,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( // Log all hrefs log_href("[src] (usr:[usr]\[[COORD(usr)]\]) : [hsrc ? "[hsrc] " : ""][href]") - // Mentor Msg - if(href_list["mentor_msg"]) - if(CONFIG_GET(flag/mentors_mobname_only)) - var/mob/M = locate(href_list["mentor_msg"]) - cmd_mentor_pm(M,null) - else - cmd_mentor_pm(href_list["mentor_msg"],null) - return - //byond bug ID:2256651 if (asset_cache_job && (asset_cache_job in completed_asset_jobs)) to_chat(src, span_danger("An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)")) @@ -259,11 +250,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( var/datum/admin_rank/localhost_rank = new("!localhost!", R_EVERYTHING, R_DBRANKS, R_EVERYTHING) //+EVERYTHING -DBRANKS *EVERYTHING new /datum/admins(localhost_rank, ckey, 1, 1) - //Mentor Authorisation - var/datum/mentors/mentor = GLOB.mentor_datums[ckey] - if(mentor) - mentor.associate(src) - //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) prefs = GLOB.preferences_datums[ckey] if(prefs) @@ -415,9 +401,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( to_chat(src, memo_message) adminGreet() - if(mentor && !holder) //WS Edit - Mentors - mentor_memo_output("Show") //WS End - if (mob && reconnecting) var/stealth_admin = mob.client?.holder?.fakekey var/announce_leave = mob.client?.prefs?.broadcast_login_logout diff --git a/code/modules/client/loadout/loadout_accessories.dm b/code/modules/client/loadout/loadout_accessories.dm index 812b442cdce..f2116a150a4 100644 --- a/code/modules/client/loadout/loadout_accessories.dm +++ b/code/modules/client/loadout/loadout_accessories.dm @@ -186,6 +186,11 @@ path = /obj/item/clothing/accessory/waistcoat/white slot = null +/datum/gear/accessory/barcoat + display_name = "bartender waistcoat" + path = /obj/item/clothing/accessory/barcoat + slot = null + /datum/gear/accessory/stethoscope display_name = "stethoscope" path = /obj/item/clothing/neck/stethoscope diff --git a/code/modules/client/loadout/loadout_uniform.dm b/code/modules/client/loadout/loadout_uniform.dm index 02efe81c454..1c6e94ca790 100644 --- a/code/modules/client/loadout/loadout_uniform.dm +++ b/code/modules/client/loadout/loadout_uniform.dm @@ -309,9 +309,9 @@ // skirts /datum/gear/uniform/shortskirt - display_name = "short skirt" + display_name = "short skirt (colorable)" path = /obj/item/clothing/under/shorts/skirt /datum/gear/uniform/miniskirt - display_name = "mini skirt" + display_name = "mini skirt (colorable)" path = /obj/item/clothing/under/shorts/miniskirt diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f10f9b3f7a5..2d88fd4fdd3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -745,7 +745,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

    Chassis Style

    " - dat += "[features["ipc_chassis"]]
    " + var/datum/sprite_accessory/body/ipc_chassis/chassis_style = GLOB.ipc_chassis_list[features["ipc_chassis"]] + if(!chassis_style) + chassis_style = pick(GLOB.ipc_chassis_list) + features["ipc_chassis"] = chassis_style.name + dat += "[chassis_style.name]" + if(chassis_style.desc) + dat += "?" + dat += "
    " mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -940,9 +947,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) mutant_category = 0 dat += "" - var/metal_skin = fbp || pref_species.inherent_biotypes & MOB_ROBOTIC + var/metal_skin = fbp || (pref_species.inherent_biotypes & MOB_ROBOTIC) dat += metal_skin ? "

    Chassis Customization

    " : "

    Prosthetic Limbs

    " - dat += "Full Body Prosthesis: [fbp ? "Yes" : "No"]
    " + if(!(pref_species.inherent_biotypes & MOB_ROBOTIC)) + dat += "Full Body Prosthesis: [fbp ? "Yes" : "No"]
    " dat += "Random Prosthetic: [(randomise[RANDOM_PROSTHETIC]) ? "Yes" : "No"]
    " @@ -950,9 +958,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) for(var/index in prosthetic_limbs) if(!metal_skin && (index == BODY_ZONE_CHEST || index == BODY_ZONE_HEAD)) continue - var/bodypart_name = parse_zone(index) - dat += "[bodypart_name]:" - dat += "[prosthetic_limbs[index]]" + var/zone_name = parse_zone(index) + dat += "[zone_name]:" + var/limb_name = prosthetic_limbs[index] + dat += "[limb_name]" + switch(limb_name) + if(PROSTHETIC_NORMAL, PROSTHETIC_AMPUTATED, PROSTHETIC_ROBOTIC) + dat += "" + else + var/datum/sprite_accessory/body/limb_style = GLOB.alternative_body_list[limb_name] + if(!limb_style?.desc) + continue + dat += "?" dat += "
    " if(2) //Loadout @@ -2284,7 +2301,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("limbs") if(href_list["customize_limb"]) var/limb = href_list["customize_limb"] - var/list/limb_options = list(PROSTHETIC_NORMAL, PROSTHETIC_ROBOTIC) + var/list/limb_options = list(PROSTHETIC_NORMAL) + if(pref_species.prosthetic_style) + limb_options.Add(PROSTHETIC_ROBOTIC) if(limb != BODY_ZONE_CHEST && limb != BODY_ZONE_HEAD) limb_options.Add(PROSTHETIC_AMPUTATED) // starting without a head or chest causes instant death, must be disallowed @@ -2292,19 +2311,32 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/body/limb_style for(var/body in GLOB.alternative_body_list) limb_style = GLOB.alternative_body_list[body] + if(limb_style.locked) + continue part_candidate = limb_style.replacement_bodyparts[limb] if(isnull(part_candidate)) continue - if(length(limb_style.allowed_species)) - if(!(pref_species.type in limb_style.allowed_species)) - continue + if(limb_style.allowed_species && !(pref_species.type in limb_style.allowed_species)) + continue if(!(pref_species.bodytype & initial(part_candidate.bodytype))) // don't allow vox and kepori to select limbs that aren't compatible continue limb_options.Add(body) - var/status = input(user, "You are modifying your [parse_zone(limb)], what should it be changed to?", "Character Preference", prosthetic_limbs[limb]) in limb_options - if(status) - prosthetic_limbs[limb] = status + var/limb_selection = tgui_input_list( + user, + "You are modifying your [parse_zone(limb)], what should it be changed to?", + "Bodypart Selection", + limb_options, + ) + if(limb_selection) + prosthetic_limbs[limb] = limb_selection + + if("body_desc") + var/datum/sprite_accessory/body/limb_style = locate(href_list["limb_style"]) + if(!limb_style?.desc) + return + tgui_alert(user, limb_style.desc, limb_style.name, list("Close"), 0) + return if("hotkeys") hotkeys = !hotkeys @@ -2641,7 +2673,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.exowear = exowear - character.fbp = fbp + if(fbp && !(pref_species.inherent_biotypes & MOB_ROBOTIC)) + ADD_TRAIT(character, TRAIT_USE_PROSTHETIC, ROUNDSTART_TRAIT) + else + REMOVE_TRAIT(character, TRAIT_USE_PROSTHETIC, ROUNDSTART_TRAIT) character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially @@ -2663,40 +2698,41 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.dna.features = features.Copy() character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE, robotic = fbp) - for(var/pros_limb in prosthetic_limbs) - var/obj/item/bodypart/old_part = character.get_bodypart(pros_limb) + var/is_robotic = HAS_TRAIT(character, TRAIT_USE_PROSTHETIC) + for(var/zone in prosthetic_limbs) + var/obj/item/bodypart/old_part = character.get_bodypart(zone) if(old_part) icon_updates = TRUE - switch(prosthetic_limbs[pros_limb]) + switch(prosthetic_limbs[zone]) if(PROSTHETIC_NORMAL) if(old_part) old_part.drop_limb(TRUE) qdel(old_part) - character.regenerate_limb(pros_limb, robotic = fbp) + character.regenerate_limb(zone, robotic = is_robotic) if(PROSTHETIC_AMPUTATED) if(old_part) old_part.drop_limb(TRUE) qdel(old_part) - if(pros_limb == BODY_ZONE_CHEST || pros_limb == BODY_ZONE_HEAD) - stack_trace("[parent] somehow had their [parse_zone(pros_limb)] set to [PROSTHETIC_AMPUTATED]!") - prosthetic_limbs[pros_limb] = PROSTHETIC_NORMAL - character.regenerate_limb(pros_limb, robotic = fbp) + if(zone == BODY_ZONE_CHEST || zone == BODY_ZONE_HEAD) + stack_trace("[parent] somehow had their [parse_zone(zone)] set to [PROSTHETIC_AMPUTATED]!") + prosthetic_limbs[zone] = PROSTHETIC_NORMAL + character.regenerate_limb(zone, robotic = is_robotic) if(PROSTHETIC_ROBOTIC) if(old_part) old_part.drop_limb(TRUE) qdel(old_part) - character.regenerate_limb(pros_limb, robotic = TRUE) + character.regenerate_limb(zone, robotic = TRUE) else - var/datum/sprite_accessory/body/limb_style = GLOB.alternative_body_list[prosthetic_limbs[pros_limb]] - var/obj/item/bodypart/new_part = limb_style.replacement_bodyparts[pros_limb] + var/datum/sprite_accessory/body/limb_style = GLOB.alternative_body_list[prosthetic_limbs[zone]] + var/obj/item/bodypart/new_part = limb_style.replacement_bodyparts[zone] new_part = new new_part() if(old_part) old_part.drop_limb(TRUE) qdel(old_part) if(!(new_part.bodytype & pref_species.bodytype)) stack_trace("[parent] had [limb_style.name] selected, which isn't compatible with [pref_species.name]!") - prosthetic_limbs[pros_limb] = PROSTHETIC_NORMAL - character.regenerate_limb(pros_limb, robotic = fbp) + prosthetic_limbs[zone] = PROSTHETIC_NORMAL + character.regenerate_limb(zone, robotic = is_robotic) continue // species that don't use mutant colors normally should still be able to color prosthetics that do if(new_part.should_draw_greyscale) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index f022928d3a9..1ed4d905b2f 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -83,10 +83,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") else if(!(key in C.prefs.ignoring)) if(GLOB.OOC_COLOR) - if(check_mentor()) - to_chat(C, span_oocplain("[span_prefix("OOC:")] [keyname]: [msg]"), MESSAGE_TYPE_OOC) - else - to_chat(C, span_oocplain("[span_prefix("OOC:")] [keyname]: [msg]"), MESSAGE_TYPE_OOC) + to_chat(C, span_oocplain("[span_prefix("OOC:")] [keyname]: [msg]"), MESSAGE_TYPE_OOC) else to_chat(C, span_ooc("[span_prefix("OOC:")] [keyname]: [msg]"), MESSAGE_TYPE_OOC) diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index 420b5cf1063..eca68e4d2bb 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -100,14 +100,6 @@ continue //Don't show afk admins to adminwho if(!C.holder.fakekey) msg += "\t[C] is a [C.holder.rank]\n" - if(length(GLOB.mentors) > 0) - msg += "Mentors: \n" - for(var/client/C in sortList(GLOB.clients)) - if(C in GLOB.admins) - continue - var/mentor = GLOB.mentor_datums[C.ckey] - if(mentor) - msg += "\t[C.key] is a Mentor \n" msg += span_info("Adminhelps are also sent to Discord. If no admins are available in game adminhelp anyways and an admin on Discord will see it and respond.") to_chat(src, msg) diff --git a/code/modules/clothing/factions/clip.dm b/code/modules/clothing/factions/clip.dm index 441a857f195..4712df6c7ba 100644 --- a/code/modules/clothing/factions/clip.dm +++ b/code/modules/clothing/factions/clip.dm @@ -255,6 +255,33 @@ armor = list("melee" = 30, "bullet" = 20, "laser" = 30, "energy" = 40, "bomb" = 20, "bio" = 100, "rad" = 30, "fire" = 75, "acid" = 75, "wound" = 15) resistance_flags = null +/obj/item/clothing/head/helmet/space/hardsuit/mining/clip + name = "CLIP industrial hardsuit helmet" + desc = "A bulky, slit-helmet design made with impact protection in mind." + icon = 'icons/obj/clothing/faction/clip/head.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/clip/head.dmi' + icon_state = "hardsuit0-clipindus" + item_state = "hardsuit0-clipindus" + hardsuit_type = "clipindus" + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 65, "bio" = 100, "rad" = 80, "fire" = 80, "acid" = 100, "wound" = 20) + supports_variations = SNOUTED_VARIATION + +/obj/item/clothing/suit/space/hardsuit/mining/clip + name = "CLIP industrial hardsuit" + desc = "A prolific hardsuit seen in every corner of the league, the CLIP industrial hardsuit is rated for factory, prospecting, and construction work. A frequent life saver in mining ventures and repair yards, the plating on this suit is durable, yet not over-encumbering." + icon = 'icons/obj/clothing/faction/clip/suits.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/clip/suits.dmi' + icon_state = "hardsuit0-clipindus" + item_state = "hardsuit0-clipindus" + hardsuit_type = "clipindus" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining/clip + armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 65, "bio" = 100, "rad" = 80, "fire" = 80, "acid" = 100, "wound" = 20) + supports_variations = DIGITIGRADE_VARIATION_SAME_ICON_FILE + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF | ACID_PROOF + slowdown = 0.5 + /obj/item/clothing/suit/space/hardsuit/clip_patroller name = "\improper CM-410 'Patroller' EVA Hardsuit" desc = "An older-issue CLIP hardsuit, adapted from an even older design. Widely utilized in reconnaissance duty and skirmishing due to its lightweight construction." diff --git a/code/modules/clothing/factions/frontiersmen.dm b/code/modules/clothing/factions/frontiersmen.dm index cbdcfce52d3..ecda663c9c9 100644 --- a/code/modules/clothing/factions/frontiersmen.dm +++ b/code/modules/clothing/factions/frontiersmen.dm @@ -86,13 +86,16 @@ desc = "A bulky set of stamped plasteel armor plates, coated with the intimidating grey of the Frontiersmen. If you have the time to inspect this vest, either you are about to die, or you have killed the one who wore it originally." icon_state = "marine_frontier" item_state = "armor" + supports_variations = VOX_VARIATION icon = 'icons/obj/clothing/faction/frontiersmen/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/suits.dmi' + vox_override_icon = 'icons/mob/clothing/faction/frontiersmen/vox.dmi' /obj/item/clothing/suit/armor/frontier name = "reinforced fur coat" desc = "A stiff olive-green coat, meant for frigid conditions. Commonly worn by Frontiersmen command." icon_state = "frontier_coat" + supports_variations = VOX_VARIATION body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN|ARMS heat_protection = CHEST|GROIN|ARMS @@ -102,6 +105,7 @@ armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50, "wound" = 10) icon = 'icons/obj/clothing/faction/frontiersmen/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/suits.dmi' + vox_override_icon = 'icons/mob/clothing/faction/frontiersmen/vox.dmi' /obj/item/clothing/suit/armor/frontier/fireproof name = "frontiersmen fireproof coat" @@ -165,6 +169,8 @@ icon_state = "frontier_beret" icon = 'icons/obj/clothing/faction/frontiersmen/head.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/head.dmi' + vox_override_icon = 'icons/mob/clothing/faction/frontiersmen/vox.dmi' + supports_variations = VOX_VARIATION /obj/item/clothing/head/beret/sec/frontier/officer name = "\improper Frontiersmen officer beret" @@ -223,14 +229,16 @@ /obj/item/clothing/head/helmet/frontier name = "frontiersmen reinforced helmet" desc = "A reinforced Frontiersmen X-11. The front plate has a small window to let the user see." - icon_state = "marine_frontier" + icon_state = "marine_frontier_helmet" icon = 'icons/obj/clothing/faction/frontiersmen/head.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/head.dmi' + vox_override_icon = 'icons/mob/clothing/faction/frontiersmen/vox.dmi' armor = list("melee" = 35, "bullet" = 55, "laser" = 45, "energy" = 25, "bomb" = 30, "bio" = 75, "fire" = 40, "acid" = 50, "wound" = 20) slowdown = 0.1 min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT clothing_flags = STOPSPRESSUREDAMAGE | SNUG_FIT | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS resistance_flags = FIRE_PROOF | ACID_PROOF + supports_variations = VOX_VARIATION flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES can_flashlight = TRUE @@ -248,8 +256,9 @@ icon_state = "gasmask_frontier" icon = 'icons/obj/clothing/faction/frontiersmen/mask.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/mask.dmi' + vox_override_icon = 'icons/mob/clothing/faction/frontiersmen/vox.dmi' resistance_flags = FIRE_PROOF - supports_variations = SNOUTED_VARIATION + supports_variations = SNOUTED_VARIATION | VOX_VARIATION ////////// //Neck// diff --git a/code/modules/clothing/factions/ngr.dm b/code/modules/clothing/factions/ngr.dm index 98b192d6e39..3ac92947488 100644 --- a/code/modules/clothing/factions/ngr.dm +++ b/code/modules/clothing/factions/ngr.dm @@ -202,6 +202,31 @@ icon_state = "hardsuit0-ngreod" hardsuit_type = "ngreod" +/obj/item/clothing/suit/space/hardsuit/mining/heavy/ngr + name = "NGR mining hardsuit" + desc = "A heavy-duty NGR made suit, designed to protect wreckers from industrial and fauna hazards. Maneuverable enough to get out of harms way." + icon = 'icons/obj/clothing/faction/ngr/suits.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi' + icon_state = "hardsuit-ngrminer" + item_state = "hardsuit-ngrminer" + slowdown = 0.7 + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining/heavy/ngr + hardsuit_type = "ngrminer" + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list("melee" = 65, "bullet" = 30, "laser" = 25, "energy" = 30, "bomb" = 70, "bio" = 100, "rad" = 85, "fire" = 100, "acid" = 100) + supports_variations = DIGITIGRADE_VARIATION + +/obj/item/clothing/head/helmet/space/hardsuit/mining/heavy/ngr + name = "NGR mining hardsuit helmet" + desc = "A heavy-duty helmet with spacious interior, good for absorbing impacts." + icon = 'icons/obj/clothing/faction/ngr/head.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi' + icon_state = "hardsuit0-ngrminer" + item_state = "hardsuit0-nsmining" + hardsuit_type = "ngrminer" + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list("melee" = 65, "bullet" = 30, "laser" = 25, "energy" = 30, "bomb" = 70, "bio" = 100, "rad" = 85, "fire" = 100, "acid" = 100) + ///////// //Hats// //////// diff --git a/code/modules/clothing/factions/ramzi.dm b/code/modules/clothing/factions/ramzi.dm index e34fa0e4a43..8d9d91c04a5 100644 --- a/code/modules/clothing/factions/ramzi.dm +++ b/code/modules/clothing/factions/ramzi.dm @@ -299,6 +299,13 @@ new /obj/item/ammo_casing/caseless/rocket/a70mm(src) new /obj/item/ammo_casing/caseless/rocket/a70mm(src) +/obj/item/storage/belt/security/webbing/ramzi/mako_light/PopulateContents() + . = ..() + new /obj/item/ammo_casing/caseless/rocket/a70mm/light(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm/light(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm/light(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm/light(src) + /obj/item/storage/belt/security/webbing/ramzi/bulldog_mixed/PopulateContents() . = ..() new /obj/item/ammo_box/magazine/m12g_bulldog/drum/bioterror(src) // you only get ONE this one is nasty diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index f604115157b..6908a7ea645 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -464,7 +464,7 @@ can_flashlight = TRUE /obj/item/clothing/head/helmet/m10 - name = "\improper M-10 pattern Helmet" + name = "\improper M-10 Pattern Helmet" desc = "A classic looking helmet, derived from numerous convergently-similar designs from all across inhabited space. A faded tag reads: 'The difference between an open-casket and closed-casket funeral. Wear on head for best results.'" icon_state = "m10helm" can_flashlight = TRUE diff --git a/code/modules/clothing/outfits/ert/syndicate_ert.dm b/code/modules/clothing/outfits/ert/syndicate_ert.dm index 2faf30e52e3..7bf7e94585e 100644 --- a/code/modules/clothing/outfits/ert/syndicate_ert.dm +++ b/code/modules/clothing/outfits/ert/syndicate_ert.dm @@ -315,13 +315,13 @@ /datum/outfit/job/syndicate/ert/ramzi/demolitionist name = "ERT - Ramzi Clique Cell Demolitionist" - belt = /obj/item/storage/belt/security/webbing/ramzi/mako - suit_store = /obj/item/gun/ballistic/rocketlauncher/mako + belt = /obj/item/storage/belt/security/webbing/ramzi/mako_light + suit_store = /obj/item/gun/ballistic/rocketlauncher/mako/light glasses = /obj/item/clothing/glasses/hud/security/sunglasses/ngr r_pocket = /obj/item/gun/ballistic/automatic/pistol/himehabu - backpack_contents = list(/obj/item/ammo_box/magazine/m22lr_himehabu = 2, /obj/item/grenade/c4/x4 = 3, /obj/item/grenade/syndieminibomb = 3, /obj/item/ammo_casing/caseless/rocket/a70mm = 4) + backpack_contents = list(/obj/item/ammo_box/magazine/m22lr_himehabu = 2, /obj/item/grenade/c4/x4 = 3, /obj/item/grenade/syndieminibomb = 3, /obj/item/ammo_casing/caseless/rocket/a70mm/light = 4) /datum/outfit/job/syndicate/ert/ramzi/medic name = "ERT - Ramzi Clique Cell Medic" diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm index 8af9e3c90b3..55c260d8a4d 100644 --- a/code/modules/clothing/outfits/factions/syndicate.dm +++ b/code/modules/clothing/outfits/factions/syndicate.dm @@ -55,6 +55,7 @@ faction = FACTION_NGR id_assignment = "Crewman" + ears = /obj/item/radio/headset/syndicate/ngr head = /obj/item/clothing/head/ngr uniform = /obj/item/clothing/under/syndicate/ngr shoes = /obj/item/clothing/shoes/combat @@ -369,7 +370,7 @@ faction = FACTION_NGR head = /obj/item/clothing/head/hardhat/ngr/foreman - ears = /obj/item/radio/headset/syndicate/alt/ngr + ears = /obj/item/radio/headset/syndicate/alt/captain/ngr uniform = /obj/item/clothing/under/syndicate/ngr/officer alt_uniform = null suit = /obj/item/clothing/suit/ngr @@ -427,7 +428,7 @@ faction = FACTION_NGR id_assignment = "Ensign" - ears = /obj/item/radio/headset/syndicate/ngr + ears = /obj/item/radio/headset/syndicate/alt/captain/ngr uniform = /obj/item/clothing/under/syndicate/ngr/officer head = /obj/item/clothing/head/ngr suit = /obj/item/clothing/suit/armor/ngr/lieutenant @@ -485,6 +486,7 @@ faction = FACTION_NGR id_assignment = "Lieutenant" + ears = /obj/item/radio/headset/syndicate/alt/captain/ngr uniform = /obj/item/clothing/under/syndicate/ngr/officer head = /obj/item/clothing/head/ngr/peaked suit = /obj/item/clothing/suit/armor/ngr/lieutenant @@ -576,6 +578,7 @@ name = "Syndicate - Medical Doctor (New Gorlex Republic)" faction = FACTION_NGR + ears = /obj/item/radio/headset/syndicate/ngr uniform = /obj/item/clothing/under/syndicate/ngr head = /obj/item/clothing/head/ngr/surgical suit = /obj/item/clothing/suit/ngr/smock @@ -623,7 +626,27 @@ /datum/outfit/job/syndicate/paramedic/gorlex name = "Syndicate - Paramedic (Gorlex)" +/datum/outfit/job/syndicate/paramedic/ngr + name = "Syndicate - Paramedic (New Gorlex Republic)" + faction = FACTION_NGR + id_assignment = "Field Medic" + + ears = /obj/item/radio/headset/syndicate/ngr + uniform = /obj/item/clothing/under/syndicate/ngr + suit = /obj/item/clothing/suit/ngr/smock + glasses = /obj/item/clothing/glasses/hud/health + r_pocket = /obj/item/melee/knife/survival + id = /obj/item/card/id/syndicate_command/crew_id + shoes = /obj/item/clothing/shoes/combat + +/datum/outfit/job/syndicate/paramedic/ngr/stripped + name = "Syndicate - Paramedic - Stripped (New Gorlex Republic)" + head = null + suit = null + glasses = null + r_pocket = null + suit_store = null //psychologist @@ -753,6 +776,7 @@ id_assignment = "Operative" job_icon = "securityofficer" + ears = /obj/item/radio/headset/syndicate/alt/ngr uniform = /obj/item/clothing/under/syndicate/ngr gloves = /obj/item/clothing/gloves/color/black shoes = /obj/item/clothing/shoes/combat @@ -840,7 +864,7 @@ 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 + ears = /obj/item/radio/headset/syndicate/alt/ngr /datum/outfit/job/syndicate/miner/ngr/stripped name = "Syndicate - Wrecker - Stripped (New Gorlex Republic)" @@ -921,6 +945,7 @@ faction = FACTION_NGR id_assignment = "Mechanic" + ears = /obj/item/radio/headset/syndicate/ngr head = /obj/item/clothing/head/hardhat/ngr suit = /obj/item/clothing/suit/hazardvest/ngr uniform = /obj/item/clothing/under/syndicate/ngr diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index b3cc6e22e02..2279fd45dc7 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -466,6 +466,7 @@ "Black Flight Jacket" = "flightblack", ) unique_reskin_changes_inhand = TRUE + togglename = "zipper" /obj/item/clothing/suit/toggle/flight/Initialize() . = ..() diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index c8bd3a7769c..c3c5d1d7b44 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -127,6 +127,14 @@ minimize_when_attached = FALSE attachment_slot = null +/obj/item/clothing/accessory/barcoat + name = "bartender waistcoat" + desc = "For help with drink spillage." + icon_state = "barcoat" + item_state = "barcoat" + minimize_when_attached = TRUE + attachment_slot = null + ////////// //Medals// ////////// diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 80f52236258..dfc5c82d660 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -118,6 +118,7 @@ icon_state = "utility" item_state = "utility" roll_down = TRUE + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/utility/skirt name = "utility jumpskirt" diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index dff0d68e47c..860886d0736 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -74,12 +74,78 @@ /obj/item/clothing/under/shorts/skirt name = "short skirt" - desc = "a shorter black skirt." + desc = "a shorter skirt." icon_state = "shortskirt" - unique_reskin = null + unique_reskin = list("black short skirt" = "shortskirt", + "selago short skirt" = "shortskirtwhite", + "burgundy short skirt" = "shortskirtred", + "navy short skirt" = "shortskirtnavy", + "tan short skirt" = "shortskirttan", + "brown short skirt" = "shortskirtbrown", + "pink short skirt" = "shortskirtpink", + ) + unique_reskin_changes_base_icon_state = TRUE + unique_reskin_changes_name = TRUE + +/obj/item/clothing/under/shorts/skirt/white + name = "selago short skirt" + icon_state = "shortskirtwhite" + +/obj/item/clothing/under/shorts/skirt/burgundy + name = "burgundy short skirt" + icon_state = "shortskirtred" + +/obj/item/clothing/under/shorts/skirt/navy + name = "navy short skirt" + icon_state = "shortskirtnavy" + +/obj/item/clothing/under/shorts/skirt/tan + name = "tan short skirt" + icon_state = "shortskirttan" + +/obj/item/clothing/under/shorts/skirt/brown + name = "brown short skirt" + icon_state = "shortskirtbrown" + +/obj/item/clothing/under/shorts/skirt/pink + name = "pink short skirt" + icon_state = "shortskirtpink" /obj/item/clothing/under/shorts/miniskirt name = "mini skirt" - desc = "the shortest black skirt." + desc = "the shortest skirt." icon_state = "miniskirt" - unique_reskin = null + unique_reskin = list("black miniskirt" = "miniskirt", + "selago miniskirt" = "miniskirtwhite", + "burgundy miniskirt" = "miniskirtred", + "navy miniskirt" = "miniskirtnavy", + "tan miniskirt" = "miniskirttan", + "brown miniskirt" = "miniskirtbrown", + "pink miniskirt" = "miniskirtpink", + ) + unique_reskin_changes_base_icon_state = TRUE + unique_reskin_changes_name = TRUE + +/obj/item/clothing/under/shorts/miniskirt/white + name = "selago mini skirt" + icon_state = "miniskirtwhite" + +/obj/item/clothing/under/shorts/miniskirt/burgundy + name = "burgundy mini skirt" + icon_state = "miniskirtred" + +/obj/item/clothing/under/shorts/miniskirt/navy + name = "navy mini skirt" + icon_state = "miniskirtnavy" + +/obj/item/clothing/under/shorts/miniskirt/tan + name = "tan mini skirt" + icon_state = "miniskirttan" + +/obj/item/clothing/under/shorts/miniskirt/brown + name = "brown mini skirt" + icon_state = "miniskirtbrown" + +/obj/item/clothing/under/shorts/miniskirt/pink + name = "pink mini skirt" + icon_state = "miniskirtpink" diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm deleted file mode 100644 index 1889a3c2d85..00000000000 --- a/code/modules/events/holiday/vday.dm +++ /dev/null @@ -1,107 +0,0 @@ -// Valentine's Day events // -// why are you playing spessmens on valentine's day you wizard // - -#define VALENTINE_FILE "valentines.json" - -// valentine / candy heart distribution // - -/datum/round_event_control/valentines - name = "Valentines!" - holidayID = VALENTINES - typepath = /datum/round_event/valentines - weight = -1 //forces it to be called, regardless of weight - max_occurrences = 1 - earliest_start = 0 MINUTES - category = EVENT_CATEGORY_HOLIDAY - -/datum/round_event/valentines/start() - ..() - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - H.put_in_hands(new /obj/item/valentine) - var/obj/item/storage/backpack/b = locate() in H.contents - new /obj/item/food/candyheart(b) - new /obj/item/storage/fancy/heart_box(b) - - var/list/valentines = list() - for(var/mob/living/M in GLOB.player_list) - if(!M.stat && M.mind) - valentines |= M - - - while(valentines.len) - var/mob/living/L = pick_n_take(valentines) - if(valentines.len) - var/mob/living/date = pick_n_take(valentines) - - - forge_valentines_objective(L, date) - forge_valentines_objective(date, L) - - if(valentines.len && prob(4)) - var/mob/living/notgoodenough = pick_n_take(valentines) - forge_valentines_objective(notgoodenough, date) - else - L.mind.add_antag_datum(/datum/antagonist/heartbreaker) - -/proc/forge_valentines_objective(mob/living/lover,mob/living/date) - lover.mind.special_role = "valentine" - var/datum/antagonist/valentine/V = new - V.date = date.mind - lover.mind.add_antag_datum(V) //These really should be teams but i can't be assed to incorporate third wheels right now - -/datum/round_event/valentines/announce(fake) - priority_announce("It's Valentine's Day! Give a valentine to that special someone!") - -/obj/item/valentine - name = "valentine" - desc = "A Valentine's card! Wonder what it says..." - icon = 'icons/obj/toy.dmi' - icon_state = "sc_Ace of Hearts_syndicate" // shut up - var/message = "A generic message of love or whatever." - resistance_flags = FLAMMABLE - w_class = WEIGHT_CLASS_TINY - -/obj/item/valentine/Initialize() - . = ..() - message = pick(strings(VALENTINE_FILE, "valentines")) - -/obj/item/valentine/attackby(obj/item/W, mob/user, params) - ..() - if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) - if(!user.is_literate()) - to_chat(user, span_notice("You scribble illegibly on [src]!")) - return - var/recipient = stripped_input(user, "Who is receiving this valentine?", "To:", null , 20) - var/sender = stripped_input(user, "Who is sending this valentine?", "From:", null , 20) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(recipient && sender) - name = "valentine - To: [recipient] From: [sender]" - -/obj/item/valentine/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - if(!(ishuman(user) || isobserver(user) || issilicon(user))) - user << browse("[name][stars(message)]", "window=[name]") - onclose(user, "[name]") - else - user << browse("[name][message]", "window=[name]") - onclose(user, "[name]") - else - . += span_notice("It is too far away.") - -/obj/item/valentine/attack_self(mob/user) - user.examinate(src) - -/obj/item/food/candyheart - name = "candy heart" - icon = 'icons/obj/holiday_misc.dmi' - icon_state = "candyheart" - desc = "A heart-shaped candy that reads: " - food_reagents = list(/datum/reagent/consumable/sugar = 2) - junkiness = 5 - -/obj/item/food/candyheart/Initialize() - . = ..() - desc = pick(strings(VALENTINE_FILE, "candyhearts")) - icon_state = pick("candyheart", "candyheart2", "candyheart3", "candyheart4") diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index bd04ddf925f..30ee182714c 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -113,24 +113,6 @@ if(prey && !prey.mutations.Find(src)) //Eat all vines that are not of the same origin qdel(prey) -/datum/spacevine_mutation/aggressive_spread //very OP, but im out of other ideas currently - name = "aggressive spreading" - hue = "#333333" - severity = 3 - quality = NEGATIVE - -/datum/spacevine_mutation/aggressive_spread/on_spread(obj/structure/spacevine/holder, turf/target) - switch(severity) - if(EXPLODE_DEVASTATE) - SSexplosions.highturf += target - if(EXPLODE_HEAVY) - SSexplosions.medturf += target - if(EXPLODE_LIGHT) - SSexplosions.lowturf += target - -/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/structure/spacevine/holder, mob/living/buckled) - buckled.ex_act(severity, null, src) - /datum/spacevine_mutation/transparency name = "transparent" hue = "" diff --git a/code/modules/mentor/holder2.dm b/code/modules/mentor/holder2.dm deleted file mode 100644 index 07b5b149e17..00000000000 --- a/code/modules/mentor/holder2.dm +++ /dev/null @@ -1,50 +0,0 @@ -GLOBAL_LIST_EMPTY(mentor_datums) -GLOBAL_PROTECT(mentor_datums) - -/datum/mentors - var/client/owner = null - var/target - var/following = null - -/datum/mentors/New(target) - if(!target) - QDEL_IN(src, 0) - CRASH("Attempted to create a new mentor datum with no target") - if(GLOB.mentor_datums[target]) - QDEL_IN(src, 0) - CRASH("Attempted to create a new mentor datum for [target] when one already exists.") - src.target = target - GLOB.mentor_datums[target] = src - -/datum/mentors/proc/associate(client/C) - if(istype(C)) - if(C.ckey != target) - message_admins("[C] attempted to assosciate with the mentor datum of [target]!") - return - owner = C - GLOB.mentors |= C - owner.add_mentor_verbs() - -/datum/mentors/proc/disassociate() - if(owner) - GLOB.mentors -= owner - owner.remove_mentor_verbs() - owner = null - -/proc/check_mentor() - if(usr && usr.client) - var/mentor = GLOB.mentor_datums[usr.client.ckey] - if(mentor || check_rights(R_ADMIN,0) || check_rights(R_MENTOR,0)) - return TRUE - - return FALSE - -/proc/check_mentor_other(client/C) - if(C) - var/mentor = GLOB.mentor_datums[C.ckey] - if(C.holder && C.holder.rank) - if(C.holder.rank.rights & R_ADMIN) - return TRUE - else if(mentor) - return TRUE - return FALSE diff --git a/code/modules/mentor/mentor_ranks.dm b/code/modules/mentor/mentor_ranks.dm deleted file mode 100644 index 5338bc45101..00000000000 --- a/code/modules/mentor/mentor_ranks.dm +++ /dev/null @@ -1,60 +0,0 @@ -/proc/load_mentors(warning = FALSE) - //clear the datums references - - for(var/client/C in GLOB.mentors) - if(warning) - to_chat(C, "The mentor tables are currently undergoing modification by one of the admins. \ - Unless it's your sorry ass being kicked, you will only experience a brief lack of cooperation from your tools.") - C.remove_admin_verbs() - C.holder = null - - GLOB.mentors.Cut() - if(!CONFIG_GET(flag/mentor_legacy_system)) - if(!SSdbcore.IsConnected()) - log_world("Failed to connect to database in load_mentors().") - CONFIG_SET(flag/mentor_legacy_system, TRUE) - load_mentors() - return - - var/datum/DBQuery/query = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor")]") - query.Execute() - while(query.NextRow()) - var/ckey = ckey(query.item[1]) - var/datum/mentors/D = new(ckey) //create the mentor datum and store it for later use - if(!D) //will occur if an invalid rank is provided - continue - D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum - for(var/admin in GLOB.admins) - var/client/C = admin - var/datum/mentors/D = new(C.ckey) - if(!D) //will occur if an invalid rank is provided - continue - D.associate(GLOB.directory[C.ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum - qdel(query) - else - log_world("Using legacy mentor system.") - var/list/Lines = world.file2list("config/mentors.txt") - - //process each line seperately - for(var/line in Lines) - if(!length(line)) - continue - if(findtextEx(line,"#",1,2)) - continue - - //ckey is before the first "=" - var/ckey = ckey(line) - if(!ckey) - continue - - var/datum/mentors/D = new(ckey) //create the mentor datum and store it for later use - if(!D) //will occur if an invalid rank is provided - continue - D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum - - #ifdef TESTING - var/msg = "mentors Built:\n" - for(var/ckey in GLOB.mentor_datums) - msg += "\t[ckey] - mentor\n" - testing(msg) - #endif diff --git a/code/modules/mentor/mentor_verbs.dm b/code/modules/mentor/mentor_verbs.dm deleted file mode 100644 index 841706e6e86..00000000000 --- a/code/modules/mentor/mentor_verbs.dm +++ /dev/null @@ -1,14 +0,0 @@ -GLOBAL_LIST_INIT(mentor_verbs, list( - /client/proc/cmd_mentor_pm_panel, - /client/proc/show_mentor_memo, - /client/proc/cmd_mentor_say, - /client/proc/cmd_mentor_dementor, - )) -GLOBAL_PROTECT(mentor_verbs) - -/client/proc/add_mentor_verbs() - if(check_mentor()) - add_verb(src, GLOB.mentor_verbs) - -/client/proc/remove_mentor_verbs() - remove_verb(src, GLOB.mentor_verbs) diff --git a/code/modules/mentor/verbs/dementor.dm b/code/modules/mentor/verbs/dementor.dm deleted file mode 100644 index 88fbc8ebf3e..00000000000 --- a/code/modules/mentor/verbs/dementor.dm +++ /dev/null @@ -1,17 +0,0 @@ -/client/proc/cmd_mentor_dementor() - set category = "Mentor" - set name = "Dementor" - if(!check_mentor()) - return - var/datum/mentors/mentor = GLOB.mentor_datums[ckey] - mentor.disassociate() - add_verb(src, /client/proc/cmd_mentor_rementor) - -/client/proc/cmd_mentor_rementor() - set category = "Mentor" - set name = "Rementor" - if(!check_mentor()) - return - remove_verb(src, /client/proc/cmd_mentor_rementor) - var/datum/mentors/mentor = GLOB.mentor_datums[ckey] - mentor.associate(src) diff --git a/code/modules/mentor/verbs/mentor_memo.dm b/code/modules/mentor/verbs/mentor_memo.dm deleted file mode 100644 index 4457c1fed02..00000000000 --- a/code/modules/mentor/verbs/mentor_memo.dm +++ /dev/null @@ -1,144 +0,0 @@ -/client/proc/mentor_memo() - set name = "Mentor Memos" - set category = "Server" - if(!check_rights(0)) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - var/memotask = input(usr,"Choose task.","Memo") in list("Show","Write","Edit","Remove") - if(!memotask) - return - mentor_memo_output(memotask) - -/client/proc/show_mentor_memo() - set name = "Show Memos" - set category = "Mentor" - if(!check_mentor()) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - mentor_memo_output("Show") - -/client/proc/mentor_memo_output(task) - if(!task) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - switch(task) - if("Write") - var/datum/DBQuery/query_memocheck = SSdbcore.NewQuery( - "SELECT ckey FROM [format_table_name("mentor_memo")] WHERE ckey = :ckey", - list("ckey" = src.ckey)) - if(!query_memocheck.Execute()) - var/err = query_memocheck.ErrorMsg() - log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") - return - if(query_memocheck.NextRow()) - to_chat(src, "You already have set a memo.") - return - var/memotext = input(src,"Write your Memo","Memo") as message - if(!memotext) - return - var/datum/DBQuery/query_memoadd = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("mentor_memo")] (ckey, memotext, timestamp) VALUES (:ckey, :memotext, :timestamp)", - list("ckey" = src.ckey, "memotext" = memotext, "timestamp" = SQLtime())) - if(!query_memoadd.Execute()) - var/err = query_memoadd.ErrorMsg() - log_game("SQL ERROR adding new memo. Error : \[[err]\]\n") - return - log_admin("[key_name(src)] has set a mentor memo: [memotext]") - message_admins("[key_name_admin(src)] has set a mentor memo:
    [memotext]") - qdel(query_memocheck) - qdel(query_memoadd) - if("Edit") - var/datum/DBQuery/query_memolist = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") - if(!query_memolist.Execute()) - var/err = query_memolist.ErrorMsg() - log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") - return - var/list/memolist = list() - while(query_memolist.NextRow()) - var/lkey = query_memolist.item[1] - memolist += "[lkey]" - if(!memolist.len) - to_chat(src, "No memos found in database.") - return - var/target_ckey = input(src, "Select whose memo to edit", "Select memo") as null|anything in memolist - if(!target_ckey) - return - var/datum/DBQuery/query_memofind = SSdbcore.NewQuery( - "SELECT memotext FROM [format_table_name("mentor_memo")] WHERE ckey = :target_ckey", - list("target_ckey" = target_ckey)) - if(!query_memofind.Execute()) - var/err = query_memofind.ErrorMsg() - log_game("SQL ERROR obtaining memotext from memo table. Error : \[[err]\]\n") - return - if(query_memofind.NextRow()) - var/old_memo = query_memofind.item[1] - var/new_memo = input("Input new memo", "New Memo", "[old_memo]", null) as message - if(!new_memo) - return - var/edit_text = "Edited by [src.ckey] on [SQLtime()] from
    [old_memo]
    to
    [new_memo]
    " - var/datum/DBQuery/update_query = SSdbcore.NewQuery( - "UPDATE [format_table_name("mentor_memo")] SET memotext = :new_memo, last_editor = :ckey, edits = CONCAT(IFNULL(edits,''),:edit_text) WHERE ckey = :target_ckey", - list("ckey" = src.ckey, "target_ckey" = target_ckey, "new_memo" = new_memo, "edit_text" = edit_text)) - if(!update_query.Execute()) - var/err = update_query.ErrorMsg() - log_game("SQL ERROR editing memo. Error : \[[err]\]\n") - return - log_admin("[key_name(src)] has edited [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"] mentor memo from [old_memo] to [new_memo]") - message_admins("[key_name_admin(src)] has edited [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"] mentor memo from
    [old_memo]
    to
    [new_memo]") - qdel(update_query) - qdel(query_memolist) - qdel(query_memofind) - if("Show") - var/datum/DBQuery/query_memoshow = SSdbcore.NewQuery("SELECT ckey, memotext, timestamp, last_editor FROM [format_table_name("mentor_memo")]") - if(!query_memoshow.Execute()) - var/err = query_memoshow.ErrorMsg() - log_game("SQL ERROR obtaining ckey, memotext, timestamp, last_editor from memo table. Error : \[[err]\]\n") - return - var/output = null - while(query_memoshow.NextRow()) - var/ckey = query_memoshow.item[1] - var/memotext = query_memoshow.item[2] - var/timestamp = query_memoshow.item[3] - var/last_editor = query_memoshow.item[4] - output += "[span_memo("Mentor memo by [ckey]")] on [timestamp]" - if(last_editor) - output += "
    [span_memoedit("Last edit by [last_editor] (Click here to see edit log)")]" - output += "
    [memotext]

    " - if(!output) - to_chat(src, "No memos found in database.") - return - to_chat(src, output) - qdel(query_memoshow) - if("Remove") - var/datum/DBQuery/query_memodellist = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") - if(!query_memodellist.Execute()) - var/err = query_memodellist.ErrorMsg() - log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") - return - var/list/memolist = list() - while(query_memodellist.NextRow()) - var/ckey = query_memodellist.item[1] - memolist += "[ckey]" - if(!memolist.len) - to_chat(src, "No memos found in database.") - return - var/target_ckey = input(src, "Select whose mentor memo to delete", "Select mentor memo") as null|anything in memolist - if(!target_ckey) - return - var/datum/DBQuery/query_memodel = SSdbcore.NewQuery( - "DELETE FROM [format_table_name("memo")] WHERE ckey = ':target_ckey'", - list("target_ckey" = target_ckey)) - if(!query_memodel.Execute()) - var/err = query_memodel.ErrorMsg() - log_game("SQL ERROR removing memo. Error : \[[err]\]\n") - return - log_admin("[key_name(src)] has removed [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"] mentor memo.") - message_admins("[key_name_admin(src)] has removed [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"]'s mentor memo.") - qdel(query_memodellist) - qdel(query_memodel) diff --git a/code/modules/mentor/verbs/mentorhelp.dm b/code/modules/mentor/verbs/mentorhelp.dm deleted file mode 100644 index 217bf5e2565..00000000000 --- a/code/modules/mentor/verbs/mentorhelp.dm +++ /dev/null @@ -1,94 +0,0 @@ -/client/verb/mentorhelp(msg as text) - set category = "Mentor" - set name = "Mentorhelp" - - //clean the input msg - if(!msg) - return - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg || !mob) - return - if(prefs.muted & MUTE_MENTORHELP) - to_chat(src, span_warning("You are unable to use mentorhelp (muted).")) - return - var/show_char = CONFIG_GET(flag/mentors_mobname_only) - var/mentor_msg = span_mentornotice("[span_info("MENTORHELP: [key_name_mentor(src, 1, 0, 1, show_char)]:")] [msg]") - log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]") - - for(var/client/X in GLOB.mentors) - SEND_SOUND(X, 'sound/items/bikehorn.ogg') - to_chat(X, mentor_msg) - - to_chat(src, span_mentornotice("PM to-Mentors: [msg]")) - - //spam prevention, 60 second delay - remove_verb(src, /client/verb/mentorhelp) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(add_verb), src, /client/verb/mentorhelp), 1 MINUTES, TIMER_STOPPABLE) - -/proc/get_mentor_counts() - . = list("total" = 0, "afk" = 0, "present" = 0) - for(var/client/X in GLOB.mentors) - .["total"]++ - if(X.is_afk()) - .["afk"]++ - else - .["present"]++ - -/proc/key_name_mentor(whom, include_link = null, include_name = 0, char_name_only = 0) - var/mob/M - var/client/C - var/key - var/ckey - - if(!whom) return "*null*" - if(istype(whom, /client)) - C = whom - M = C.mob - key = C.key - ckey = C.ckey - else if(ismob(whom)) - M = whom - C = M.client - key = M.key - ckey = M.ckey - else if(istext(whom)) - key = whom - ckey = ckey(whom) - C = GLOB.directory[ckey] - if(C) - M = C.mob - else - return "*invalid*" - - . = "" - - if(!ckey) - include_link = 0 - - if(key) - if(include_link) - if(CONFIG_GET(flag/mentors_mobname_only)) - . += "" - else - . += "" - - if(C && C.holder && C.holder.fakekey) - . += "Administrator" - else if (char_name_only && CONFIG_GET(flag/mentors_mobname_only)) - if(istype(C.mob,/mob/dead/new_player) || istype(C.mob, /mob/dead/observer)) //If they're in the lobby or observing, display their ckey - . += key - else if(C && C.mob) //If they're playing/in the round, only show the mob name - . += C.mob.name - else //If for some reason neither of those are applicable and they're mentorhelping, show ckey - . += key - else - . += key - if(!C) - . += "\[DC\]" - - if(include_link) - . += "" - else - . += "*no key*" - - return . diff --git a/code/modules/mentor/verbs/mentorpm.dm b/code/modules/mentor/verbs/mentorpm.dm deleted file mode 100644 index dcfea45d742..00000000000 --- a/code/modules/mentor/verbs/mentorpm.dm +++ /dev/null @@ -1,85 +0,0 @@ -//shows a list of clients we could send PMs to, then forwards our choice to cmd_Mentor_pm -/client/proc/cmd_mentor_pm_panel() - set category = "Mentor" - set name = "Mentor PM" - if(!check_mentor()) - to_chat(src, span_warning("Error: Mentor-PM-Panel: Only Mentors may use this command.")) - return - var/list/client/targets[0] - for(var/client/T) - if(T.mob) - if(isnewplayer(T.mob)) - targets["(New Player) - [T]"] = T - else if(isobserver(T.mob)) - targets["[T.mob.name](Ghost) - [T]"] = T - else - targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T - else - targets["(No Mob) - [T]"] = T - var/target = input(src,"To whom shall we send a message?","Mentor PM",null) as null|anything in sortList(targets) - cmd_mentor_pm(targets[target],null) - SSblackbox.record_feedback("tally", "mentor_verb", 1, "Mentor PM") - - -//takes input from cmd_mentor_pm_context, cmd_Mentor_pm_panel or /client/Topic and sends them a PM. -//Fetching a message if needed. src is the sender and C is the target client -/client/proc/cmd_mentor_pm(whom, msg) - var/client/C - if(ismob(whom)) - var/mob/M = whom - C = M.client - else if(istext(whom)) - C = GLOB.directory[whom] - else if(istype(whom,/client)) - C = whom - if(!C) - if(check_mentor()) - to_chat(src, span_warning("Error: Mentor-PM: Client not found.")) - else - mentorhelp(msg) //Mentor we are replying to left. Mentorhelp instead - return - - to_chat(GLOB.admins | GLOB.mentors, "[src] has started replying to [whom]'s mhelp.") - - //get message text, limit its length.and clean/escape html - if(!msg) - msg = input(src,"Message:", "Private message") as text|null - - if(!msg) - to_chat(GLOB.admins | GLOB.mentors, span_notice("[src] has stopped their reply to [whom]'s mhelp.")) - return - - if(!C) - if(holder) - to_chat(src, span_warning("Error: Mentor-PM: Client not found.")) - else - mentorhelp(msg) //Mentor we are replying to has vanished, Mentorhelp instead - return - - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg) - return - - log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]") - - msg = emoji_parse(msg) - C << 'sound/items/bikehorn.ogg' - var/show_char = CONFIG_GET(flag/mentors_mobname_only) - if(check_mentor_other(C)) - if(check_mentor()) //both are mentors - to_chat(C, span_notice("Mentor PM from-[key_name_mentor(src, C, 1, 0)]: [msg]")) - to_chat(src, span_green("Mentor PM to-[key_name_mentor(C, C, 1, 0)]: [msg]")) - - else //recipient is an mentor but sender is not - to_chat(C, span_notice("Reply PM from-[key_name_mentor(src, C, 1, show_char)]: [msg]")) - to_chat(src, span_green("Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]")) - - else - if(check_mentor()) //sender is an mentor but recipient is not. - to_chat(C, span_notice("Mentor PM from-[key_name_mentor(src, C, 1, 0)]: [msg]")) - to_chat(src, span_green("Mentor PM to-[key_name_mentor(C, C, 1, show_char)]: [msg]")) - - //we don't use message_Mentors here because the sender/receiver might get it too - for(var/client/X in GLOB.mentors) - if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient - to_chat(X, span_mentornotice("Mentor PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: [msg]")) //inform X diff --git a/code/modules/mentor/verbs/mentorsay.dm b/code/modules/mentor/verbs/mentorsay.dm deleted file mode 100644 index 3075f68a3e0..00000000000 --- a/code/modules/mentor/verbs/mentorsay.dm +++ /dev/null @@ -1,24 +0,0 @@ -/client/proc/cmd_mentor_say(msg as text) - set category = "Mentor" - set name = "Msay" - set hidden = 1 - if(!check_mentor()) - return - - msg = emoji_parse(copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN)) - if(!msg) - return - - mob.log_talk(msg, LOG_MSAY) - - msg = "[span_boldnotice("MENTOR:")] [key_name(usr, 0, 0)]: [span_message("[msg]")]" - to_chat(GLOB.mentors, - msg, - MESSAGE_TYPE_MENTORCHAT, - confidential = TRUE) - - SSblackbox.record_feedback("tally", "mentor_verb", 1, "Msay") - -/client/proc/get_mentor_say() - var/msg = input(src, null, "msay \"text\"") as text|null - cmd_mentor_say(msg) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm b/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm index 6671db69ae0..fb4a4a78ced 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm @@ -12,22 +12,18 @@ BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left, BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right, ) + /// Organs to override + var/list/replacement_organs = list() /// Associated list of features granted by this chassis and their default values. var/list/body_features = list() - ///species whitelist - var/list/allowed_species = list() + /// Whitelist of species allowed to apply this. + var/list/allowed_species + /// Bodytype to apply to the species. + var/bodytype = BODYTYPE_HUMANOID - -/* Test body for checking functionality -/datum/sprite_accessory/body/test_body - name = "testificate" - replacement_bodyparts = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/plasmaman, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/plasmaman, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/plasmaman, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/plasmaman, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/plasmaman, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/plasmaman, - ) - allowed_species = list(/datum/species/moth) -*/ +/// Handles applying any special features from having the entire body replaced at once. +/datum/sprite_accessory/body/proc/apply_to_species(mob/living/carbon/mob_applied, datum/species/species_applied) + species_applied.bodytype = bodytype + for(var/feature in body_features) + species_applied.mutant_bodyparts |= feature + species_applied.default_features[feature] = body_features[feature] diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body/prosthetic.dm b/code/modules/mob/dead/new_player/sprite_accessories/body/prosthetic.dm new file mode 100644 index 00000000000..c584bdddb87 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/body/prosthetic.dm @@ -0,0 +1,87 @@ +/datum/sprite_accessory/body/prosthetic + name = "Basic Prosthetic" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus, + ) + replacement_organs = list( + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/cybernetic, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic, + ORGAN_SLOT_EARS = /obj/item/organ/ears/cybernetic, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cybernetic, + ) + +/datum/sprite_accessory/body/prosthetic/human + name = "Prosthetic Human" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/human, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/human, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/human, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/human, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/human, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/human, + ) + allowed_species = list(/datum/species/human, /datum/species/moth) + +/datum/sprite_accessory/body/prosthetic/sarathi + name = "Prosthetic Sarathi" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/lizard, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/lizard, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/lizard, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/lizard, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/lizard/digitigrade, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/lizard/digitigrade, + ) + replacement_organs = list( + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/cybernetic, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic/lizard, + ORGAN_SLOT_EARS = /obj/item/organ/ears/cybernetic, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cybernetic, + ) + allowed_species = list(/datum/species/lizard) + +/datum/sprite_accessory/body/prosthetic/kepori + name = "Prosthetic Kepori" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/kepori, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/kepori, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/kepori, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/kepori, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/kepori, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/kepori, + ) + replacement_organs = list( + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/cybernetic, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic/kepori, + ORGAN_SLOT_EARS = /obj/item/organ/ears/cybernetic, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cybernetic, + ) + allowed_species = list(/datum/species/kepori) + bodytype = BODYTYPE_KEPORI + +/datum/sprite_accessory/body/prosthetic/vox + name = "Prosthetic Vox" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/vox, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/vox, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/vox, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/vox, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/vox, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/vox, + ) + allowed_species = list(/datum/species/vox) + bodytype = BODYTYPE_VOX diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair.dm index 9e8c724be1d..f931dfa70ef 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -214,6 +214,14 @@ name = "Half Up (Alt Bangs)" icon_state = "hair_halfupalt" +/datum/sprite_accessory/hair/halfshort + name = "Half Up Short" + icon_state = "hair_halfshort" + +/datum/sprite_accessory/hair/halfshortalt + name = "Half Up Short (Alt Bangs)" + icon_state = "hair_halfshortalt" + /datum/sprite_accessory/hair/harley name = "Harley" icon_state = "hair_harley" diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 79027d4ffff..65d3aa7b49f 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -134,9 +134,9 @@ Proj.on_hit(src, 0, piercing_hit) return BULLET_ACT_HIT -/mob/living/basic/ex_act(severity, target, origin) +/mob/living/basic/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM, origin) if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) - return FALSE + return FALSE //flag for later . = ..() if(QDELETED(src)) @@ -150,13 +150,13 @@ gib() return if (EXPLODE_HEAVY) - var/bloss = 60 + var/bloss = heavy_dam if(prob(bomb_armor)) bloss = bloss / 1.5 adjustBruteLoss(bloss) if (EXPLODE_LIGHT) - var/bloss = 30 + var/bloss = light_dam if(prob(bomb_armor)) bloss = bloss / 1.5 adjustBruteLoss(bloss) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 10ea0807677..712e8fa1421 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -105,7 +105,7 @@ In all, this is a lot like the monkey code. /N log_combat(M, src, "attacked") updatehealth() -/mob/living/carbon/alien/ex_act(severity, target, origin) +/mob/living/carbon/alien/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM, origin) if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return ..() @@ -117,14 +117,12 @@ In all, this is a lot like the monkey code. /N return if (EXPLODE_HEAVY) - take_overall_damage(60, 60) - adjustEarDamage(30,120) + take_overall_damage(heavy_dam/2, heavy_dam/2) + adjustEarDamage(heavy_dam/2,heavy_dam/3) if(EXPLODE_LIGHT) - take_overall_damage(30,0) - if(prob(50)) - Unconscious(20) - adjustEarDamage(15,60) + take_overall_damage(light_dam/2,light_dam/2) + adjustEarDamage(light_dam/2,light_dam/3) /mob/living/carbon/alien/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15) return 0 diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index b8d9c80fe2d..48e4cb69cf3 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -53,7 +53,7 @@ var/tinttotal = 0 /// Total level of visualy impairing items var/list/icon_render_keys = list() - var/list/bodyparts = list( + var/list/obj/item/bodypart/bodyparts = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest, BODY_ZONE_HEAD = /obj/item/bodypart/head, BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm, diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7512400fc18..b1947ace449 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -450,7 +450,7 @@ ..() -/mob/living/carbon/human/ex_act(severity, target, origin) +/mob/living/carbon/human/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) if(TRAIT_BOMBIMMUNE in dna.species.species_traits) return ..() @@ -469,32 +469,47 @@ switch (severity) if (EXPLODE_DEVASTATE) - brute_loss = 500 - damage_clothes(400 - bomb_armor, BRUTE, "bomb") + if(bomb_armor < EXPLODE_GIB_THRESHOLD) + for(var/I in contents) + var/atom/A = I + var/list/to_explode = list(A,light_dam,light_item_dam,heavy_dam,heavy_item_dam) + if(!QDELETED(A)) + switch(severity) + if(EXPLODE_DEVASTATE) + SSexplosions.highobj += list(to_explode) + if(EXPLODE_HEAVY) + SSexplosions.medobj += list(to_explode) + if(EXPLODE_LIGHT) + SSexplosions.lowobj += list(to_explode) + + brute_loss = 500 + var/atom/throw_target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) + throw_at(throw_target, 200, 4) + damage_clothes(400 - bomb_armor, BRUTE, "bomb") if (EXPLODE_HEAVY) - brute_loss = 35 - burn_loss = 35 + brute_loss = heavy_dam/2 + burn_loss = heavy_dam/2 if(bomb_armor) brute_loss = 20*(2 - round(bomb_armor*0.01, 0.05)) burn_loss = brute_loss //damage gets reduced from 120 to up to 60 combined brute+burn intensity = 2 - ear_damage = 30 - deafness_power = 120 - damage_clothes(max(rand(90,150) - bomb_armor, 0), BRUTE, "bomb") + ear_damage = heavy_dam/3 + deafness_power = heavy_dam * (3/2) + damage_clothes(max(heavy_item_dam - bomb_armor, 0), BRUTE, "bomb") Unconscious(20) //short amount of time for follow up attacks against elusive enemies like wizards Knockdown(200 - (bomb_armor * 1.6)) //between ~4 and ~20 seconds of knockdown depending on bomb armor if(EXPLODE_LIGHT) - brute_loss = 20 - burn_loss = 20 + brute_loss = light_dam/2 + burn_loss = light_dam/2 if(bomb_armor) brute_loss = 15*(2 - round(bomb_armor*0.01, 0.05)) burn_loss = bruteloss - damage_clothes(max(rand(10,90) - bomb_armor, 0), BRUTE, "bomb") + damage_clothes(max(light_item_dam - bomb_armor, 0), BRUTE, "bomb") intensity = 1.5 - ear_damage = 15 - deafness_power = 60 + ear_damage = light_dam/3 + deafness_power = light_dam * (3/2) Knockdown(160 - (bomb_armor * 1.6)) //100 bomb armor will prevent knockdown altogether take_overall_damage(brute_loss,burn_loss) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 3b8ef777282..e8c2561f108 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -47,9 +47,6 @@ var/jumpsuit_style = PREF_SUIT //suit/skirt var/exowear = PREF_EXOWEAR //exowear - ///Whether this human started with a full-body prosthesis - var/fbp = FALSE - //Equipment slots var/obj/item/clothing/wear_suit = null var/obj/item/clothing/w_uniform = null diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 22c66d0f6bf..1c0cb4bdb8a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -44,8 +44,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/grad_style ///The gradient color used to color the gradient. var/grad_color - ///The color used for the "white" of the eye, if the eye has one. - var/sclera_color = "#e8e8e8" /// The color used for blush overlay var/blush_color = COLOR_BLUSH_PINK ///If the species is allowed to use height filters. @@ -76,8 +74,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/list/default_features = list() /// Visible CURRENT bodyparts that are unique to a species. DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK SHIT UP! Changes to this list for non-species specific bodyparts (ie cat ears and tails) should be assigned at organ level if possible. Layer hiding is handled by [datum/species/handle_mutant_bodyparts()] below. var/list/mutant_bodyparts = list() - ///Internal organs that are unique to this race, like a tail. - var/list/mutant_organs = list() ///Multiplier for the race's speed. Positive numbers make it move slower, negative numbers make it move faster. var/speedmod = 0 ///Percentage modifier for overall defense of the race, or less defense, if it's negative. @@ -206,28 +202,22 @@ GLOBAL_LIST_EMPTY(roundstart_races) ///What gas does this species breathe? Used by suffocation screen alerts, most of actual gas breathing is handled by mutantlungs. See [life.dm][code/modules/mob/living/carbon/human/life.dm] var/breathid = "o2" + ///Organs that this species should have. Includes vital organs like the heart and brain, as well as external features like a tail. + var/list/obj/item/organ/species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) //Do NOT remove by setting to null. use OR make a RESPECTIVE TRAIT (removing stomach? add the NOSTOMACH trait to your species) //why does it work this way? because traits also disable the downsides of not having an organ, removing organs but not having the trait will make your species die //shut up you're not my mother - ///Replaces default brain with a different organ - var/obj/item/organ/brain/mutantbrain = /obj/item/organ/brain - ///Replaces default heart with a different organ - var/obj/item/organ/heart/mutantheart = /obj/item/organ/heart - ///Replaces default lungs with a different organ - var/obj/item/organ/lungs/mutantlungs = /obj/item/organ/lungs - ///Replaces default eyes with a different organ - var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes - ///Replaces default ears with a different organ - var/obj/item/organ/ears/mutantears = /obj/item/organ/ears - ///Replaces default tongue with a different organ - var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue - ///Replaces default liver with a different organ - var/obj/item/organ/liver/mutantliver = /obj/item/organ/liver - ///Replaces default stomach with a different organ - var/obj/item/organ/stomach/mutantstomach = /obj/item/organ/stomach - ///Replaces default appendix with a different organ. - var/obj/item/organ/appendix/mutantappendix = /obj/item/organ/appendix ///Forces an item into this species' hands. Only an honorary mutantthing because this is not an organ and not loaded in the same way, you've been warned to do your research. var/obj/item/mutanthands @@ -245,24 +235,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left, ) - /// Default robotic bodyparts for this species. - var/list/obj/item/bodypart/species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus, - ) - - var/obj/item/organ/heart/robotic_heart = /obj/item/organ/heart/cybernetic - var/obj/item/organ/lungs/robotic_lungs = /obj/item/organ/lungs/cybernetic - var/obj/item/organ/eyes/robotic_eyes = /obj/item/organ/eyes/robotic - var/obj/item/organ/ears/robotic_ears = /obj/item/organ/ears/cybernetic - var/obj/item/organ/tongue/robotic_tongue = /obj/item/organ/tongue/robot - var/obj/item/organ/liver/robotic_liver = /obj/item/organ/liver/cybernetic - var/obj/item/organ/stomach/robotic_stomach = /obj/item/organ/stomach/cybernetic - var/obj/item/organ/appendix/robotic_appendix = null + /// Default prosthetic replacements. + var/datum/sprite_accessory/body/prosthetic_style = /datum/sprite_accessory/body/prosthetic ///For custom overrides for species ass images var/icon/ass_image @@ -274,7 +248,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/New() wings_icons = string_list(wings_icons) - ..() + if(prosthetic_style) + prosthetic_style = GLOB.alternative_body_list[prosthetic_style::name] + if(!prosthetic_style) + stack_trace("[type] had a defined prosthetic_style but could not find a valid datum!") + return ..() /** * Generates species available to choose in character setup at roundstart @@ -351,30 +329,15 @@ GLOBAL_LIST_EMPTY(roundstart_races) * * excluded_zones - list, add zone defines to block organs inside of the zones from getting handled. see headless mutation for an example */ /datum/species/proc/regenerate_organs(mob/living/carbon/C, datum/species/old_species,replace_current=TRUE, list/excluded_zones, robotic = FALSE) - //what should be put in if there is no mutantorgan (brains handled seperately) - var/list/slot_mutantorgans = list( \ - ORGAN_SLOT_BRAIN = mutantbrain, \ - ORGAN_SLOT_HEART = robotic ? robotic_heart : mutantheart, \ - ORGAN_SLOT_LUNGS = robotic ? robotic_lungs : mutantlungs, \ - ORGAN_SLOT_APPENDIX = robotic ? robotic_appendix : mutantappendix, \ - ORGAN_SLOT_EYES = robotic ? robotic_eyes : mutanteyes, \ - ORGAN_SLOT_EARS = robotic ? robotic_ears : mutantears, \ - ORGAN_SLOT_TONGUE = robotic ? robotic_tongue : mutanttongue, \ - ORGAN_SLOT_LIVER = robotic ? robotic_liver : mutantliver, \ - ORGAN_SLOT_STOMACH = robotic ? robotic_stomach : mutantstomach) - - for(var/slot in list(ORGAN_SLOT_BRAIN, ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_APPENDIX, \ - ORGAN_SLOT_EYES, ORGAN_SLOT_EARS, ORGAN_SLOT_TONGUE, ORGAN_SLOT_LIVER, ORGAN_SLOT_STOMACH)) - + for(var/slot in (species_organs | old_species?.species_organs)) var/obj/item/organ/oldorgan = C.getorganslot(slot) //used in removing - var/obj/item/organ/neworgan = slot_mutantorgans[slot] //used in adding + var/obj/item/organ/neworgan = C.new_organ(slot, robotic, src) //used in adding if(isnull(neworgan)) //If null is specified, just delete the old organ and call it a day QDEL_NULL(oldorgan) continue var/used_neworgan = FALSE - neworgan = new neworgan() var/should_have = neworgan.get_availability(src) //organ proc that points back to a species trait (so if the species is supposed to have this organ) if(oldorgan && (!should_have || replace_current) && !(oldorgan.zone in excluded_zones)) @@ -394,20 +357,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!used_neworgan) qdel(neworgan) - if(old_species) - for(var/mutantorgan in old_species.mutant_organs) - var/obj/item/organ/I = C.getorgan(mutantorgan) - if(I) - I.Remove(C) - QDEL_NULL(I) - - for(var/path in mutant_organs) - var/obj/item/organ/I = new path() - var/obj/item/organ/old = C.getorgan(I) - if(old) - QDEL_NULL(old) - I.Insert(C) - /datum/species/proc/replace_body(mob/living/carbon/C, datum/species/old_species, datum/species/new_species, robotic = FALSE) new_species ||= C.dna.species //If no new species is provided, assume its src. //Note for future: Potentionally add a new C.dna.species() to build a template species for more accurate limb replacement @@ -460,6 +409,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(C.hud_used) C.hud_used.update_locked_slots() + if(robotic && prosthetic_style) + prosthetic_style.apply_to_species(C, src) + replace_body(C, old_species, robotic = robotic) C.mob_biotypes = inherent_biotypes @@ -488,10 +440,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) for(var/obj/item/bodypart/head/head in C.get_all_bodyparts()) head.mouth = FALSE - if(SCLERA in species_traits) - var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) - eyes.sclera_color = sclera_color - for(var/X in inherent_traits) ADD_TRAIT(C, X, SPECIES_TRAIT) @@ -719,16 +667,16 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(eyes) if(!HAS_TRAIT(H, TRAIT_EYESCLOSED) && !(H.stat == DEAD)) - var/icon/eye_icon var/icon/sclera_icon - var/icon_cache_key = "[eyes.eye_icon_state]-[eyes.sclera_icon_state]-[id]-[eyes.scarring]" + var/eye_state = HD.eye_state_override || eyes.eye_icon_state + var/icon_cache_key = "[eye_state]-[eyes.sclera_icon_state]-[id]-[eyes.scarring]" if(!masked_eye_icons_cache[icon_cache_key]) if(iskepori(H)) // Kepori need sclera but don't fit the normal silhouette, so this needs changing. Make better later. - eye_icon = icon('icons/mob/species/kepori/kepori_eyes.dmi', eyes.eye_icon_state) + eye_icon = icon('icons/mob/species/kepori/kepori_eyes.dmi', eye_state) sclera_icon = icon('icons/mob/species/kepori/kepori_eyes.dmi', eyes.sclera_icon_state) else - eye_icon = icon(species_eye_path || 'icons/mob/human_face.dmi', eyes.eye_icon_state) + eye_icon = icon(species_eye_path || 'icons/mob/human_face.dmi', eye_state) sclera_icon = icon('icons/mob/human_face.dmi', eyes.sclera_icon_state) if(eyes.scarring & RIGHT_EYE_SCAR) @@ -751,7 +699,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(HD.greyscale_eyes && eyes) eye_overlay.color = "#" + H.eye_color - if((SCLERA in species_traits) && eyes) + if(HD.draw_sclera && eyes) sclera_overlay.color = "#" + H.sclera_color standing += sclera_overlay diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm index 10df6f704c0..7963fb6506c 100644 --- a/code/modules/mob/living/carbon/human/species_types/IPC.dm +++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm @@ -4,18 +4,8 @@ species_age_min = 0 species_age_max = 300 species_traits = list(HAIR,NOTRANSSTING,NO_DNA_COPY,NOZOMBIE,MUTCOLORS,REVIVESBYHEALING,NOHUSK,NOMOUTH) //all of these + whatever we inherit from the real species - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_LIMBATTACHMENT) - inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID - mutantbrain = /obj/item/organ/brain/mmi_holder/posibrain - mutanteyes = /obj/item/organ/eyes/robotic - mutanttongue = /obj/item/organ/tongue/robot - mutantheart = /obj/item/organ/heart/cybernetic/ipc - mutantliver = /obj/item/organ/liver/cybernetic/upgraded/ipc - mutantstomach = /obj/item/organ/stomach/cell - mutantears = /obj/item/organ/ears/robot - mutantlungs = null //no more collecting change for you - mutantappendix = null - mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord) + inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_USE_PROSTHETIC,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_LIMBATTACHMENT) + inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID mutant_bodyparts = list("ipc_screen", "ipc_antenna", "ipc_chassis", "ipc_tail", "ipc_brain") default_features = list("mcolor" = "#7D7D7D", "ipc_screen" = "Static", "ipc_antenna" = "None", "ipc_chassis" = "Morpheus Cyberkinetics (Custom)", "ipc_tail" = "None", "ipc_brain" = "Posibrain") meat = /obj/item/stack/sheet/plasteel{amount = 5} @@ -36,6 +26,17 @@ Just as easy to repair as they are to destroy, they might just get their last laugh in as you're choking on neurotoxins. Beep Boop." ass_image = 'icons/ass/assmachine.png' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain/mmi_holder/posibrain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic/ipc, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic, + ORGAN_SLOT_EARS = /obj/item/organ/ears/robot, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic/upgraded/ipc, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cell, + ORGAN_SLOT_LEFT_ARM_AUG = /obj/item/organ/cyberimp/arm/power_cord, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/ipc, BODY_ZONE_HEAD = /obj/item/bodypart/head/ipc, @@ -45,11 +46,13 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/ipc, ) + // This will be set manually based on IPC chassis selection. + prosthetic_style = null + /// The last screen used when the IPC died. var/saved_screen var/datum/action/innate/change_screen/change_screen var/datum/action/innate/change_eye_color/change_eye_color - var/has_screen = TRUE //do we have a screen. Used to determine if we mess with the screen or not /datum/species/ipc/random_name(unique) var/ipc_name = "[pick(GLOB.posibrain_names)]-[rand(100, 999)]" @@ -64,24 +67,27 @@ "[GLASSES_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = 2, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = -2, "y" = 0)), ) -/datum/species/ipc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) // Let's make that IPC actually robotic. +/datum/species/ipc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load, robotic = TRUE) // Let's make that IPC actually robotic. + var/datum/sprite_accessory/body/ipc_chassis/chassis_of_choice = GLOB.ipc_chassis_list[C.dna.features["ipc_chassis"]] + if(chassis_of_choice) + prosthetic_style = chassis_of_choice + else // in case of fuckery + stack_trace("Invalid IPC chassis: [C.dna.features["ipc_chassis"]]") if(C.dna?.features["ipc_brain"] == "Man-Machine Interface") - mutantbrain = /obj/item/organ/brain/mmi_holder - . = ..() + species_organs[ORGAN_SLOT_BRAIN] = /obj/item/organ/brain/mmi_holder + . = ..(C, old_species, pref_load, robotic = TRUE) update_screen_action(C) -/datum/species/ipc/proc/update_screen_action(mob/living/carbon/C) - if(ishuman(C)) - var/mob/living/carbon/human/H = C - var/obj/item/bodypart/head/ipc/our_head = C.bodyparts[BODY_ZONE_HEAD] - if(!change_screen) - if(our_head.has_screen) - change_screen = new - change_screen.Grant(H) - else if (our_head.draw_eyes && !our_head.force_white_eye_color) - change_eye_color = new - change_eye_color.Grant(H) - C.RegisterSignal(C, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, TYPE_PROC_REF(/mob/living/carbon, charge)) +/datum/species/ipc/proc/update_screen_action(mob/living/carbon/robot) + if(ishuman(robot)) + var/obj/item/bodypart/head/robot_head = robot.get_bodypart(BODY_ZONE_HEAD) + if(robot_head.bodytype & BODYTYPE_BOXHEAD) + change_screen = new + change_screen.Grant(robot) + else if(robot_head.draw_eyes && robot_head.greyscale_eyes) + change_eye_color = new + change_eye_color.Grant(robot) + robot.RegisterSignal(robot, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, TYPE_PROC_REF(/mob/living/carbon, charge)) /datum/species/ipc/on_species_loss(mob/living/carbon/C) . = ..() @@ -92,7 +98,7 @@ C.UnregisterSignal(C, COMSIG_PROCESS_BORGCHARGER_OCCUPANT) /datum/species/ipc/spec_death(gibbed, mob/living/carbon/C) - if(!has_screen) + if(!(C.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD)) return saved_screen = C.dna.features["ipc_screen"] C.dna.features["ipc_screen"] = "BSOD" @@ -102,7 +108,7 @@ /datum/species/ipc/proc/post_death(mob/living/carbon/C) if(C.stat < DEAD) return - if(!has_screen) + if(!(C.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD)) return C.dna.features["ipc_screen"] = null // Turns off their monitor on death. C.update_body() @@ -127,9 +133,9 @@ var/obj/item/bodypart/head/ipc/our_head = H.bodyparts[BODY_ZONE_HEAD] if(!species_datum) return - if(!our_head.has_screen || !our_head.draw_eyes || our_head.force_white_eye_color) + if(!our_head.greyscale_eyes) return - if(!species_datum.has_screen) + if(!(H.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD) && !our_head.draw_eyes) return H.dna.features["ipc_screen"] = screen_choice H.eye_color = sanitize_hexcolor(color_choice) @@ -255,7 +261,7 @@ /datum/species/ipc/spec_revival(mob/living/carbon/human/H) - if(has_screen) + if(H.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD) H.dna.features["ipc_screen"] = "BSOD" H.update_body() H.say("Reactivating [pick("core systems", "central subroutines", "key functions")]...") @@ -264,28 +270,11 @@ /datum/species/ipc/proc/post_revival(mob/living/carbon/human/H) if(H.stat == DEAD) return - if(!has_screen) + if(!(H.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD)) return H.dna.features["ipc_screen"] = saved_screen H.update_body() -/datum/species/ipc/replace_body(mob/living/carbon/C, datum/species/old_species, datum/species/new_species, robotic) - var/datum/sprite_accessory/body/ipc_chassis/chassis_of_choice = GLOB.ipc_chassis_list[C.dna.features["ipc_chassis"]] - if(chassis_of_choice) - qdel(species_limbs) - species_limbs = chassis_of_choice.replacement_bodyparts.Copy() // elegant. - var/obj/item/bodypart/chest/new_chest = species_limbs[BODY_ZONE_CHEST] - if(new_chest) - bodytype = initial(new_chest.acceptable_bodytype) - else - stack_trace("[chassis_of_choice.type] had no chest bodypart!") - for(var/feature in chassis_of_choice.body_features) - mutant_bodyparts |= feature - default_features[feature] = chassis_of_choice.body_features[feature] - else // in case of fuckery - stack_trace("Invalid IPC chassis: [C.dna.features["ipc_chassis"]]") - return ..() - /mob/living/carbon/proc/charge(datum/source, amount, repairs) if(nutrition < NUTRITION_LEVEL_WELL_FED) adjust_nutrition(amount / 10) // The original amount is capacitor_rating*100 diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index a6e9916c009..68ba4eebcc5 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -3,10 +3,21 @@ id = SPECIES_ABDUCTOR species_traits = list(NOBLOOD) inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_CHUNKYFINGERS,TRAIT_NOHUNGER,TRAIT_NOBREATH,TRAIT_NODISMEMBER,TRAIT_NEVER_WOUNDED) - mutanttongue = /obj/item/organ/tongue/abductor changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN ass_image = 'icons/ass/assgrey.png' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/abductor, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/abductor, BODY_ZONE_HEAD = /obj/item/bodypart/head/abductor, diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 640e5e0b97b..964383ea112 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -3,15 +3,26 @@ id = SPECIES_ANDROID species_traits = list(NOTRANSSTING,NOREAGENTS,NO_DNA_COPY,NOBLOOD,NOFLASH) inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT,TRAIT_NOCLONELOSS) - inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID + inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID meat = null damage_overlay_type = "synth" - mutanttongue = /obj/item/organ/tongue/robot species_language_holder = /datum/language_holder/synthetic reagent_tag = PROCESS_SYNTHETIC species_gibs = "robotic" attack_sound = 'sound/items/trayhit1.ogg' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, @@ -21,13 +32,4 @@ BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus, - ) - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 3d9c422e4ad..a7f7df7b37a 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -7,14 +7,22 @@ inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH) default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None") use_skintones = TRUE - mutantbrain = /obj/item/organ/brain/dullahan - mutanteyes = /obj/item/organ/eyes/dullahan - mutanttongue = /obj/item/organ/tongue/dullahan - mutantears = /obj/item/organ/ears/dullahan examine_limb_id = SPECIES_HUMAN skinned_type = /obj/item/stack/sheet/animalhide/human changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain/dullahan, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/dullahan, + ORGAN_SLOT_EARS = /obj/item/organ/ears/dullahan, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/dullahan, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + var/obj/item/dullahan_relay/myhead /datum/species/dullahan/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) 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 95cdac23845..ed65dd5ac57 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -10,8 +10,6 @@ attack_verb = "burn" attack_sound = 'sound/weapons/etherealhit.ogg' miss_sound = 'sound/weapons/etherealmiss.ogg' - mutantstomach = /obj/item/organ/stomach/ethereal - mutanttongue = /obj/item/organ/tongue/ethereal siemens_coeff = 0.5 //They thrive on energy attack_type = BURN //burn bish exotic_bloodtype = "E" @@ -35,7 +33,19 @@ mutant_bodyparts = list("elzu_horns", "tail_elzu") default_features = list("elzu_horns" = "None", "tail_elzu" = "None") species_eye_path = 'icons/mob/ethereal_parts.dmi' - mutant_organs = list(/obj/item/organ/tail/elzu) + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/ethereal, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/ethereal, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_TAIL = /obj/item/organ/tail/elzu, + ) species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/ethereal, diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index a7c6b5236b5..6fb395576bc 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -3,14 +3,23 @@ id = SPECIES_FLYPERSON inherent_traits = list(TRAIT_ANTENNAE) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG - mutanttongue = /obj/item/organ/tongue/fly - mutantliver = /obj/item/organ/liver/fly - mutantstomach = /obj/item/organ/stomach/fly disliked_food = null liked_food = GORE | RAW changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN species_language_holder = /datum/language_holder/fly + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/fly, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/fly, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/fly, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/fly, BODY_ZONE_HEAD = /obj/item/bodypart/head/fly, diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index 70b6d66ffa9..964719c0d6c 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -2,7 +2,7 @@ name = "\improper Human" id = SPECIES_HUMAN default_color = "FFFFFF" - species_traits = list(HAIR,FACEHAIR,LIPS,SCLERA,EMOTE_OVERLAY,SKINCOLORS) + species_traits = list(HAIR,FACEHAIR,LIPS,EMOTE_OVERLAY,SKINCOLORS) default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None") mutant_bodyparts = list("ears", "tail_human") use_skintones = TRUE @@ -12,50 +12,61 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP loreblurb = "Mostly hairless mammalians. Their home system, Sol, lies in a sort of \"bluespace dead-zone\" that blocks anything from entering or exiting Sol's dead-zone through bluespace without a relay. While it leaves Sol extremely well-defended, it meant that they went unnoticed and uncontacted until they were themselves able to breach it." species_language_holder = /datum/language_holder/human - - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/human, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/human, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/human, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/human, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/human, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/human, - ) - - robotic_eyes = /obj/item/organ/eyes/robotic + prosthetic_style = /datum/sprite_accessory/body/prosthetic/human /datum/species/human/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) + var/modded = FALSE switch(C.dna.features["ears"]) if("Elf") - mutantears = /obj/item/organ/ears/elf + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/elf + modded = TRUE if("Cat") - mutantears = /obj/item/organ/ears/cat + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/cat + modded = TRUE if("Dog") - mutantears = /obj/item/organ/ears/dog + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/dog + modded = TRUE if("Fox") - mutantears = /obj/item/organ/ears/fox + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/fox + modded = TRUE if("Rabbit") - mutantears = /obj/item/organ/ears/rabbit + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/rabbit + modded = TRUE if("Bent Rabbit") - mutantears = /obj/item/organ/ears/rabbit/bent + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/rabbit/bent + modded = TRUE if("Floppy Rabbit") - mutantears = /obj/item/organ/ears/rabbit/floppy + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/rabbit/floppy + modded = TRUE if("Horse") - mutantears = /obj/item/organ/ears/horse + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/horse + modded = TRUE switch(C.dna.features["tail_human"]) if("Cat") - mutant_organs |= /obj/item/organ/tail/cat + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/cat + modded = TRUE if("Dog") - mutant_organs |= /obj/item/organ/tail/dog + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/dog + modded = TRUE if("Fox") - mutant_organs |= /obj/item/organ/tail/fox + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/fox + modded = TRUE if("Fox 2") - mutant_organs |= /obj/item/organ/tail/fox/alt + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/fox/alt + modded = TRUE if("Rabbit") - mutant_organs |= /obj/item/organ/tail/rabbit + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/rabbit + modded = TRUE if("Horse") - mutant_organs |= /obj/item/organ/tail/horse + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/horse + modded = TRUE + + if(modded) + inherent_traits += TRAIT_GENEMODDED + + return ..() +/datum/species/human/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) return ..() /datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 41ee147d4c3..14f50591000 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -7,8 +7,6 @@ inherent_traits = list(TRAIT_TOXINLOVER) hair_color = "mutcolor" hair_alpha = 150 - mutantlungs = /obj/item/organ/lungs/slime - mutanttongue = /obj/item/organ/tongue/slime exotic_blood = /datum/reagent/toxin/slimejelly damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs @@ -25,6 +23,18 @@ ass_image = 'icons/ass/assslime.png' loreblurb = "Slime, itself a slime-mold like organism of unknown origin, is capable of both mutating existing biological organisms into slime, retaining most of the structure and mind of the original, and forming quick-learning gestalts capable of mimicking existing beings, including animals and humanoids. The blood of slimepeople is toxic, and the properties of poisonous and poison-healing substances are inverted for them." + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/slime, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/slime, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/jelly, BODY_ZONE_HEAD = /obj/item/bodypart/head/jelly, diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 43fbc218966..ebc30027e0e 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -2,7 +2,7 @@ name = "\improper Kepori" id = SPECIES_KEPORI default_color = "6060FF" - species_traits = list(SCLERA, MUTCOLORS, MUTCOLORS_SECONDARY) + species_traits = list(MUTCOLORS, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) mutant_bodyparts = list("kepori_body_feathers", "kepori_head_feathers", "kepori_tail_feathers", "kepori_feathers") default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "None", "kepori_head_feathers" = "None", "kepori_body_feathers" = "None", "kepori_tail_feathers" = "None") @@ -32,7 +32,6 @@ fire_overlay = "generic" - mutanttongue = /obj/item/organ/tongue/kepori species_language_holder = /datum/language_holder/kepori var/datum/action/innate/keptackle/keptackle /// # Inherit tackling variables # @@ -51,6 +50,18 @@ bodytype = BODYTYPE_KEPORI + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/kepori, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/kepori, BODY_ZONE_HEAD = /obj/item/bodypart/head/kepori, @@ -60,16 +71,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/kepori, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/kepori, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/kepori, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/kepori, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/kepori, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/kepori, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/kepori, - ) - - robotic_eyes = /obj/item/organ/eyes/robotic/kepori + prosthetic_style = /datum/sprite_accessory/body/prosthetic/kepori //I'm not emotionally prepared to spend ten more hours splicing overlays together damage_overlay_type = "" diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 300c0ba31d4..18802e4ed49 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -8,11 +8,9 @@ id = SPECIES_SARATHI default_color = "00FF00" species_age_max = 175 - species_traits = list(MUTCOLORS, LIPS, SCLERA, EMOTE_OVERLAY, MUTCOLORS_SECONDARY) + species_traits = list(MUTCOLORS, LIPS, EMOTE_OVERLAY, MUTCOLORS_SECONDARY) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE mutant_bodyparts = list("tail_lizard", "face_markings", "frills", "horns", "spines", "body_markings") - mutanttongue = /obj/item/organ/tongue/lizard - mutant_organs = list(/obj/item/organ/tail/lizard) coldmod = 1.5 heatmod = 0.67 default_features = list("mcolor" = "0F0", "tail_lizard" = "Smooth", "face_markings" = "None", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None") @@ -27,10 +25,21 @@ deathsound = 'sound/voice/lizard/deathsound.ogg' wings_icons = list("Dragon") species_language_holder = /datum/language_holder/lizard - mutanteyes = /obj/item/organ/eyes/lizard - sclera_color = "#fffec4" blush_color = COLOR_BLUSH_TEAL + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/lizard, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/lizard, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_TAIL = /obj/item/organ/tail/lizard, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/lizard, BODY_ZONE_HEAD = /obj/item/bodypart/head/lizard, @@ -40,16 +49,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard/digitigrade, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/lizard, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/lizard, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/lizard, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/lizard, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/lizard/digitigrade, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/lizard/digitigrade, - ) - - robotic_eyes = /obj/item/organ/eyes/robotic/lizard + prosthetic_style = /datum/sprite_accessory/body/prosthetic/sarathi // Sarathi are coldblooded and can stand a greater temperature range than humans bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 30 diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 2e20ab6f5d0..4a077a60e94 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -7,15 +7,12 @@ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG mutant_bodyparts = list("moth_wings", "moth_fluff", "moth_markings") default_features = list("moth_wings" = "Plain", "moth_fluff" = "Plain", "moth_markings" = "None") - mutant_organs = list(/obj/item/organ/moth_wings) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' liked_food = FRUIT | SUGAR | CLOTH disliked_food = GROSS toxic_food = MEAT | RAW | GORE - mutanteyes = /obj/item/organ/eyes/compound - mutanttongue = /obj/item/organ/tongue/moth changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP species_language_holder = /datum/language_holder/moth loreblurb = "Bug-mammal hybrids resembling Sol's lepidopterans. They share the least DNA with baseline humans of any human-derived geneline, being significant portions insect and modified whole-cloth DNA. Their classification as another human geneline or as something else is highly debated. All evidence that would point to their origin– which is presumably a genelab somewhere– has seemingly disappeared into thin air. Mothpeople themselves have no centralized culture or homeworld, leading to a fractured existence amongst the stars." @@ -23,6 +20,19 @@ has_innate_wings = TRUE deathsound = 'sound/voice/moth/moth_a.ogg' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/compound, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/moth, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_WINGS = /obj/item/organ/moth_wings, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/moth, BODY_ZONE_HEAD = /obj/item/bodypart/head/moth, @@ -32,14 +42,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/moth, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/human, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/human, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/human, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/human, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/human, - ) + prosthetic_style = /datum/sprite_accessory/body/prosthetic/human min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 5 bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT - 5 diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 32976b827cc..692ecdda7c1 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -5,11 +5,7 @@ species_traits = list(NOBLOOD, NOTRANSSTING) // plasmemes get hard to wound since they only need a severe bone wound to dismember, but unlike skellies, they can't pop their bones back into place inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOHUNGER,TRAIT_ALWAYS_CLEAN, TRAIT_HARDLY_WOUNDED) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - mutantlungs = /obj/item/organ/lungs/plasmaman - mutanttongue = /obj/item/organ/tongue/bone/plasmaman - mutantliver = /obj/item/organ/liver/plasmaman - mutantstomach = /obj/item/organ/stomach/plasmaman + inherent_biotypes = MOB_HUMANOID | MOB_MINERAL heatmod = 1.5 breathid = "tox" damage_overlay_type = ""//let's not show bloody wounds or burns over bones. @@ -21,6 +17,18 @@ species_language_holder = /datum/language_holder/skeleton loreblurb = "Technically a disability rather than a species, Phorids (known far more commonly as plasmamen) are a loose grouping of people fallen victim to anomalous plasma-related effects that convert tough biological matter into inorganic, biology-mimicking plasma structures. Phorids often live their lives dependent on larger organizations due to their oxygen-incompatible physiology." + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/plasmaman, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/bone/plasmaman, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/plasmaman, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/plasmaman, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/plasmaman, BODY_ZONE_HEAD = /obj/item/bodypart/head/plasmaman, diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index df96b986309..35adfcd78d2 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -3,7 +3,7 @@ name = "\improper Podperson" id = SPECIES_POD default_color = "59CE00" - species_traits = list(MUTCOLORS,SCLERA) + species_traits = list(MUTCOLORS) inherent_traits = list( TRAIT_ALWAYS_CLEAN, TRAIT_PLANT_SAFE, diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 5430f531eac..f63bc9559df 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -9,7 +9,18 @@ inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_NODISMEMBER,TRAIT_NEVER_WOUNDED) inherent_factions = list("faithless") changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC - mutanteyes = /obj/item/organ/eyes/night_vision + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/shadow, @@ -37,9 +48,18 @@ no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING) inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER) - mutanteyes = /obj/item/organ/eyes/night_vision/nightmare - mutantheart = /obj/item/organ/heart/nightmare - mutantbrain = /obj/item/organ/brain/nightmare + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain/nightmare, + ORGAN_SLOT_HEART = /obj/item/organ/heart/nightmare, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/nightmare, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) var/info_text = "You are a Nightmare. The ability shadow walk allows unlimited, unrestricted movement in the dark while activated. \ Your light eater will destroy any light producing objects you attack, as well as destroy any lights a living creature may be holding. You will automatically dodge gunfire and melee attacks when on a dark tile. If killed, you will eventually revive if left in darkness." diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index fcd689ed14e..ff01e8c4531 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -6,7 +6,6 @@ inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,\ TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH,TRAIT_XENO_IMMUNE,TRAIT_NOCLONELOSS) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/bone damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE liked_food = GROSS | MEAT | RAW | DAIRY @@ -14,6 +13,17 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN species_language_holder = /datum/language_holder/skeleton + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/bone, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/skeleton, BODY_ZONE_HEAD = /obj/item/bodypart/head/skeleton, diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index e42b8245308..0a9a1b99545 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -12,10 +12,20 @@ siemens_coeff = 2 //snails are mostly water changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP - mutanteyes = /obj/item/organ/eyes/snail - mutanttongue = /obj/item/organ/tongue/snail exotic_blood = /datum/reagent/lube + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/snail, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/snail, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/snail, BODY_ZONE_HEAD = /obj/item/bodypart/head/snail, diff --git a/code/modules/mob/living/carbon/human/species_types/spider.dm b/code/modules/mob/living/carbon/human/species_types/spider.dm index 36a6e189c92..9689386c5f0 100644 --- a/code/modules/mob/living/carbon/human/species_types/spider.dm +++ b/code/modules/mob/living/carbon/human/species_types/spider.dm @@ -18,8 +18,6 @@ liked_food = MEAT | RAW | GORE // Regular spiders literally liquify the insides of their prey and drink em like a smoothie. I think this fits disliked_food = FRUIT | GROSS toxic_food = VEGETABLES | DAIRY | CLOTH - mutanteyes = /obj/item/organ/eyes/night_vision/spider - mutanttongue = /obj/item/organ/tongue/spider changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP species_language_holder = /datum/language_holder/spider loreblurb = "Rachnids are aliens with coincidental physiological similarities to Sol's spiders. Despite visible adaptations that would make them excellent hunters, modern Rachnidian culture revolves around honing the skills and talents of oneself, treating them as forms of self-expression. Rachnids tend to focus on their work intensely, priding themselves on a job well done and languishing if they see themselves as underperforming in their field." @@ -27,6 +25,18 @@ var/web_ready = TRUE var/spinner_rate = 75 + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/spider, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/spider, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + // TODO - add more arms species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/rachnid, diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index aaf30870e46..79f09872f1c 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -9,10 +9,21 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN exotic_bloodtype = "U" use_skintones = TRUE - mutantheart = /obj/item/organ/heart/vampire - mutanttongue = /obj/item/organ/tongue/vampire examine_limb_id = SPECIES_HUMAN skinned_type = /obj/item/stack/sheet/animalhide/human + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/vampire, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/vampire, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform //attached to the datum itself to avoid cloning memes, and other duplicates diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index c3f250f9b92..862a3771e60 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -18,7 +18,6 @@ species_eye_path = 'icons/mob/species/vox/vox_parts.dmi' punchdamagelow = 6 punchdamagehigh = 12 - mutanttongue = /obj/item/organ/tongue/vox species_language_holder = /datum/language_holder/vox bodytemp_heat_divisor = VOX_BODYTEMP_HEAT_DIVISOR @@ -37,6 +36,18 @@ damage_overlay_type = "vox" fire_overlay = "generic" + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/vox, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/vox, BODY_ZONE_HEAD = /obj/item/bodypart/head/vox, @@ -46,15 +57,6 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/vox, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/vox, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/vox, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/vox, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/vox, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/vox, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/vox, - ) - var/datum/action/innate/tail_hold/tail_action var/static/list/allergy_reactions = list( diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 963cdee2126..a92d2fed749 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -7,7 +7,6 @@ species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING) inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/zombie var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') disliked_food = NONE liked_food = GROSS | MEAT | RAW @@ -15,6 +14,18 @@ bodytemp_normal = T0C // They have no natural body heat, the environment regulates body temp bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_EXIST // Take damage at fire temp + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/zombie, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, @@ -31,7 +42,19 @@ mutanthands = /obj/item/zombie_hand armor = 20 // 120 damage to KO a zombie, which kills it speedmod = 1.6 - mutanteyes = /obj/item/organ/eyes/night_vision/zombie + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/zombie, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + var/heal_rate = 1 var/regen_cooldown = 0 changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 96048ad763b..bdfb05e822b 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -241,6 +241,6 @@ visible_message(span_notice("[offerer] tries to hand over [I] but it's stuck to them....")) return - visible_message(span_notice("[src] takes [I] from [offerer]"), \ - span_notice("You take [I] from [offerer]")) + visible_message(span_notice("[src] takes [I] from [offerer]."), \ + span_notice("You take [I] from [offerer].")) put_in_hands(I) diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index fb2b00df631..78298d6da4c 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -172,7 +172,7 @@ take_bodypart_damage(acidpwr * min(0.6, acid_volume*0.1)) -/mob/living/carbon/monkey/ex_act(severity, target, origin) +/mob/living/carbon/monkey/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM, origin) if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return ..() @@ -184,15 +184,15 @@ return if (EXPLODE_HEAVY) - take_overall_damage(60, 60) - damage_clothes(200, BRUTE, "bomb") + take_overall_damage(heavy_dam/2, heavy_dam/2) + damage_clothes(heavy_item_dam, BRUTE, "bomb") adjustEarDamage(30, 120) if(prob(70)) Unconscious(200) if(EXPLODE_LIGHT) - take_overall_damage(30, 0) - damage_clothes(50, BRUTE, "bomb") + take_overall_damage(light_dam/2, light_dam/2) + damage_clothes(light_item_dam, BRUTE, "bomb") adjustEarDamage(15,60) if (prob(50)) Unconscious(160) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 9d0c4c34bef..df18dde35bb 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -382,7 +382,7 @@ return FALSE return TRUE -/mob/living/ex_act(severity, target, origin) +/mob/living/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM, origin) if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return ..() diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index fb2852f6bcf..75c1098e11d 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -28,17 +28,17 @@ if (prob(30)) view_core() -/mob/living/silicon/ai/ex_act(severity, target) +/mob/living/silicon/ai/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) switch(severity) if(1) gib() if(2) if (stat != DEAD) - adjustBruteLoss(60) - adjustFireLoss(60) + adjustBruteLoss(heavy_dam/2) + adjustFireLoss(heavy_dam/2) if(3) if (stat != DEAD) - adjustBruteLoss(30) + adjustBruteLoss(light_dam) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 1ac756bd0cf..debe81e64f0 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -391,18 +391,18 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real laws.associate(src) update_icons() -/mob/living/silicon/robot/ex_act(severity, target) +/mob/living/silicon/robot/ex_act(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) switch(severity) if(1) gib() return if(2) if (stat != DEAD) - adjustBruteLoss(60) - adjustFireLoss(60) + adjustBruteLoss(heavy_dam/2) + adjustFireLoss(heavy_dam/2) if(3) if (stat != DEAD) - adjustBruteLoss(30) + adjustBruteLoss(light_dam) /mob/living/silicon/robot/bullet_act(obj/projectile/Proj, def_zone) . = ..() diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 21d7ad43e1f..4a3bae30132 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -115,7 +115,7 @@ apply_damage(damage, damagetype, null, run_armor_check(null, armor_type, armour_pen, silent=TRUE)) return TRUE -/mob/living/simple_animal/ex_act(severity, target, origin) +/mob/living/simple_animal/ex_act(severity, target, origin, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return ..() @@ -130,13 +130,13 @@ gib() return if (EXPLODE_HEAVY) - var/bloss = 60 + var/bloss = heavy_dam if(prob(bomb_armor)) bloss = bloss / 1.5 adjustBruteLoss(bloss) if(EXPLODE_LIGHT) - var/bloss = 30 + var/bloss = light_dam if(prob(bomb_armor)) bloss = bloss / 1.5 adjustBruteLoss(bloss) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index b003dee82c3..a8b934bd993 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -153,7 +153,7 @@ Difficulty: Medium if(QDELETED(target) || transform_stop_attack) return face_atom(target) - if(isliving(target)) + if(isliving(target) && can_gib) var/mob/living/L = target if(L.stat == DEAD) visible_message(span_danger("[src] butchers [L]!"), diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 7d113f8ffb4..ed471d3d34a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -258,15 +258,16 @@ Difficulty: Hard new /obj/effect/temp_visual/bubblegum_hands/leftpaw(T) new /obj/effect/temp_visual/bubblegum_hands/leftthumb(T) SLEEP_CHECK_DEATH(6) - for(var/mob/living/L in T) - if(!faction_check_mob(L)) - if(L.stat != CONSCIOUS) - to_chat(L, span_userdanger("[src] drags you through the blood!")) - playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE, -1) - var/turf/targetturf = get_step(src, dir) - L.forceMove(targetturf) - playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, TRUE, -1) - addtimer(CALLBACK(src, PROC_REF(devour), L), 2) + if(can_gib) + for(var/mob/living/L in T) + if(!faction_check_mob(L)) + if(L.stat != CONSCIOUS) + to_chat(L, span_userdanger("[src] drags you through the blood!")) + playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE, -1) + var/turf/targetturf = get_step(src, dir) + L.forceMove(targetturf) + playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, TRUE, -1) + addtimer(CALLBACK(src, PROC_REF(devour), L), 2) SLEEP_CHECK_DEATH(1) /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_warp() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm index ef7f34eba92..0bbf03f8129 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm @@ -117,7 +117,8 @@ span_userdanger("You butcher [L], restoring your health!")) // if(!is_station_level(z) || client) //NPC monsters won't heal while on station adjustHealth(-(L.maxHealth * 0.5)) - L.gib() + if(can_gib) + L.gib() if(ishuman(L)) // If target is a human - yell some funny shit. telegraph() say("Mah'weyh pleggh at e'ntrath!!") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index d2229dd21d3..9c653c68ccd 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -342,7 +342,8 @@ Difficulty: Medium for(var/mob/living/L in orange(1, src)) if(L.stat) visible_message(span_warning("[src] slams down on [L], crushing [L.p_them()]!")) - L.gib() + if(can_gib) + L.gib() else L.adjustBruteLoss(75) if(L && !QDELETED(L)) // Some mobs are deleted on death diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 42e56209bda..6a6660ef444 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -457,7 +457,7 @@ Difficulty: Hard else burst_range = 3 INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src), 0.25) //melee attacks on living mobs cause it to release a fast burst if on cooldown - else + else if(can_gib) devour(L) else return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index a184a7740d3..d61296768ed 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -41,6 +41,7 @@ var/chosen_attack = 1 // chosen attack num var/list/attack_action_types = list() var/small_sprite_type + var/can_gib = FALSE /mob/living/simple_animal/hostile/megafauna/Initialize(mapload) . = ..() @@ -110,7 +111,7 @@ if(L.stat != DEAD) if(!client && ranged && ranged_cooldown <= world.time) OpenFire() - else + else if(can_gib) devour(L) /mob/living/simple_animal/hostile/megafauna/proc/devour(mob/living/L) diff --git a/code/modules/overmap/_overmap_datum.dm b/code/modules/overmap/_overmap_datum.dm index 34c93cfb877..7de3d49958c 100644 --- a/code/modules/overmap/_overmap_datum.dm +++ b/code/modules/overmap/_overmap_datum.dm @@ -382,8 +382,9 @@ var/input = stripped_input(user, "Please choose a message to hail the target with.", "Hailing Vessel") if(!input) return - priority_announce("[html_decode(input)]", "Outbound Hail to [interact_target]", 'sound/effects/hail.ogg', sender_override = name, zlevel = shuttle_port.virtual_z()) - interact_target.relay_message(user,interact_target, input) + if(docked_to != interact_target.docked_to) // if we're docked on the same thing, dont repeat + priority_announce("[html_decode(input)]", "Outbound Hail to [interact_target]", 'sound/effects/hail.ogg', sender_override = name, zlevel = shuttle_port.virtual_z()) + interact_target.relay_message(user,interact_target, input, src) deadchat_broadcast(" hailed the [interact_target.name]: [input]", "[user.real_name]", user, message_type=DEADCHAT_ANNOUNCEMENT) return @@ -392,8 +393,10 @@ * * * user - The user requesting the options. * * requesting_interactor - The overmap datum requesting the options. + * * message - the message to be sent to the requesting interactor + * * sender - the overmap datum that initiated the message */ -/datum/overmap/proc/relay_message(mob/living/user, datum/overmap/requesting_interactor, message) +/datum/overmap/proc/relay_message(mob/living/user, datum/overmap/requesting_interactor, message, datum/overmap/sender) return FALSE /** @@ -401,9 +404,11 @@ * * * user - The user requesting the options. * * requesting_interactor - The overmap datum requesting the options. + * * message - the message to be sent to the requesting interactor + * * sender - the overmap datum that initiated the message */ -/datum/overmap/ship/controlled/relay_message(mob/living/user, datum/overmap/requesting_interactor, message) - priority_announce("[html_decode(message)]", "Incoming Hail", 'sound/effects/hail.ogg', sender_override = requesting_interactor.name, zlevel = shuttle_port.virtual_z()) +/datum/overmap/ship/controlled/relay_message(mob/living/user, datum/overmap/requesting_interactor, message, datum/overmap/sender) + priority_announce("[html_decode(message)]", "Incoming Hail from [sender ? sender : "Unknown Source"]", 'sound/effects/hail.ogg', sender_override = requesting_interactor.name, zlevel = shuttle_port.virtual_z()) return /** diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 50a023ed5f6..0fe980de7f4 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -119,14 +119,18 @@ return var/devastation_range = -1 //round(charge/11000) var/heavy_impact_range = round(sqrt(charge)/60) + var/heavy_damage = min(100, round(charge)/2) + var/heavy_item_damage = max(20, heavy_damage - 10) var/light_impact_range = round(sqrt(charge)/30) + var/light_damage = min(100, round(charge)/4) + var/light_item_damage = max(10, light_damage - 20) var/flash_range = light_impact_range if (light_impact_range==0) rigged = FALSE corrupt() return - //explosion(T, 0, 1, 2, 2) - explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range) + explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range,\ + light_dam = light_damage, light_item_dam = light_item_damage, heavy_dam = heavy_damage, heavy_item_dam = heavy_item_damage) qdel(src) /obj/item/stock_parts/cell/proc/corrupt() diff --git a/code/modules/projectiles/ammunition/caseless/rocket.dm b/code/modules/projectiles/ammunition/caseless/rocket.dm index 2fe6214a2a6..30cb3ffbd00 100644 --- a/code/modules/projectiles/ammunition/caseless/rocket.dm +++ b/code/modules/projectiles/ammunition/caseless/rocket.dm @@ -3,7 +3,7 @@ desc = "An 84mm High Explosive rocket. Fire at people and pray." icon_state = "srm-8" caliber = "84mm" - projectile_type = /obj/projectile/bullet/a84mm_he + projectile_type = /obj/projectile/bullet/a84mm/he auto_rotate = FALSE /obj/item/ammo_casing/caseless/rocket/hedp @@ -12,3 +12,9 @@ caliber = "84mm" icon_state = "84mm-hedp" projectile_type = /obj/projectile/bullet/a84mm + +/obj/item/ammo_casing/caseless/rocket/light + name = "\improper PM-9LE" + icon_state = "srm-8-light" + desc = "An 84mm Light Explosive rocket. For when you don't want to cause *too* much collateral damage." + projectile_type = /obj/projectile/bullet/a84mm/he/weak diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm index 19ed0d07468..0f2df68d6d8 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm @@ -67,16 +67,13 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/blank = 4) generate_items_inside(items_inside,src) -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary - ammo_type = /obj/item/ammo_casing/shotgun/incendiary - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/improvised ammo_type = /obj/item/ammo_casing/shotgun/improvised /obj/item/storage/box/ammo/pulseslug name = "box of 12ga pulse slugs" desc = "A box of 12-gauge pulse shells, designed for increased accuracy and destruction." - icon_state = "12gbox-rubbershot" + icon_state = "12gbox-pulse" /obj/item/storage/box/ammo/pulseslug/PopulateContents() var/static/items_inside = list( @@ -86,6 +83,58 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/pulseslug ammo_type = /obj/item/ammo_casing/shotgun/pulseslug +/obj/item/storage/box/ammo/a12g_scatter + name = "box of scatter laser shells" + desc = "A box of 12-gauge scatter laser shells, designed for delivering laser projectiles at a high velocity." + icon_state = "12gbox-scatter" + +/obj/item/storage/box/ammo/a12g_scatter/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/scatter = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/scatter + ammo_type = /obj/item/ammo_casing/shotgun/laserscatter + +/obj/item/storage/box/ammo/a12g_ion + name = "box of ion shells" + desc = "A box of 12-gauge ion shells, designed for delivering an electromagnetic payload." + icon_state = "12gbox-ion" + +/obj/item/storage/box/ammo/a12g_ion/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/ion = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/ion + ammo_type = /obj/item/ammo_casing/shotgun/ion + +/obj/item/storage/box/ammo/a12g_incen + name = "box of incendiary shells" + desc = "A box of 12-gauge incendiary shells, designed for catching targets on fire at the expense of damage." + icon_state = "12gbox-incen" + +/obj/item/storage/box/ammo/a12g_incen/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary + ammo_type = /obj/item/ammo_casing/shotgun/incendiary + +/obj/item/storage/box/ammo/a12g_dragonsbreath + name = "box of dragonsbreath shells" + desc = "A box of 12-gauge incendiary shells, designed for shooting streams of incendiary pellets. Very hazardous." + icon_state = "12gbox-dragon" + +/obj/item/storage/box/ammo/a12g_dragonsbreath/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/dragonsbreath = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/dragonsbreath + ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath + /obj/item/storage/box/ammo/a12g_dart name = "box of 12ga dart" desc = "A box of 12-gauge dart shells, for injecting targets." diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index bdc76677623..81945e4385a 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -155,6 +155,7 @@ NO_MAG_GUN_HELPER(shotgun/automatic/bulldog/inteq) ) sawn_desc = "I'm just here for the gasoline." unique_reskin = null + manufacturer = MANUFACTURER_NONE var/slung = FALSE gun_firemodes = list(FIREMODE_SEMIAUTO) diff --git a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm index 3e1c722e89c..1d94d35658c 100644 --- a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm @@ -1103,21 +1103,32 @@ NO_MAG_GUN_HELPER(shotgun/automatic/bulldog) tac_reloads = FALSE manufacturer = MANUFACTURER_SCARBOROUGH - /obj/item/ammo_box/magazine/internal/mako name = "mako internal magazine" ammo_type = /obj/item/ammo_casing/caseless/rocket/a70mm caliber = "70mm" max_ammo = 4 +/obj/item/gun/ballistic/rocketlauncher/mako/light + default_ammo_type = /obj/item/ammo_box/magazine/internal/mako/light + +/obj/item/ammo_box/magazine/internal/mako/light + ammo_type = /obj/item/ammo_casing/caseless/rocket/a70mm/light + /obj/item/ammo_casing/caseless/rocket/a70mm name = "\improper M-KO-9HE" desc = "A 70mm High Explosive rocket. Fire at mech and pray." icon_state = "srm-8" caliber = "70mm" - projectile_type = /obj/projectile/bullet/a84mm_he + projectile_type = /obj/projectile/bullet/a84mm/he auto_rotate = FALSE +/obj/item/ammo_casing/caseless/rocket/a70mm/light + name = "\improper M-KO-9LE" + icon_state = "srm-8-light" + desc = "A 70mm Light Explosive rocket. For when you don't want to cause *too* much collateral damage." + projectile_type = /obj/projectile/bullet/a84mm/he/weak + /obj/item/ammo_casing/caseless/rocket/a70mm/hedp name = "\improper M-KO-9HEDP" desc = "A 70mm High Explosive Dual Purpose rocket. Pointy end toward armor." diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 37607f19a63..cc24455f89b 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -107,14 +107,12 @@ /obj/projectile/beam/laser/eoehoma/heavy icon_state = "heavylaser" - damage = 60 - knockdown = 50 - armour_penetration = 20 + damage = 40 speed = 1 /obj/projectile/beam/laser/eoehoma/heavy/on_hit(atom/target, blocked = FALSE) ..() - explosion(get_turf(loc),0,0,0,flame_range = 3) + explosion(get_turf(loc),0,0,2,flame_range = 3, light_dam = 20, light_item_dam = 0) return BULLET_ACT_HIT /obj/projectile/beam/laser/assault diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index 06f7771c909..2007bc787ec 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -170,7 +170,7 @@ /obj/projectile/bullet/a4570/explosive/on_hit(atom/target, blocked = FALSE) ..() - explosion(target, -1, 0, 1) + explosion(target, -1, 0, 1, light_dam = 20, light_item_dam = 20) return BULLET_ACT_HIT // 44 Short (Roumain & Shadow) diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 897d1b445df..490933853f8 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -59,7 +59,7 @@ /obj/projectile/bullet/slug/frag12/on_hit(atom/target, blocked = FALSE) ..() - explosion(target, -1, 0, 1) + explosion(target, -1, 0, 2, light_dam = 30) return BULLET_ACT_HIT /obj/projectile/bullet/pellet diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index d368ccdb94e..d922843d230 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -7,29 +7,49 @@ armour_penetration = 100 dismemberment = 30 + var/devastation = 0 + var/range_heavy= 1 + var/heavy_damage = EX_HEAVY_BASE_DAM + var/heavy_item_damage = EX_HEAVY_BASE_ITEM_DAM + var/range_light = 2 + var/light_damage = EX_LIGHT_BASE_DAM + var/light_item_damage = EX_LIGHT_BASE_ITEM_DAM + var/flame_range = 4 + + /obj/projectile/bullet/a84mm/on_hit(atom/target, blocked = FALSE) ..() - explosion(target, 0, 1, 2, 1, 0, flame_range = 4) - - if(ismecha(target)) - var/obj/mecha/M = target - M.take_damage(anti_armour_damage) - if(issilicon(target)) - var/mob/living/silicon/S = target - S.take_overall_damage(anti_armour_damage*0.75, anti_armour_damage*0.25) + explosion(target, devastation, range_heavy, range_light, 1, 0, flame_range = flame_range,\ + light_dam = light_damage, light_item_dam = light_item_damage, heavy_dam = heavy_damage, heavy_item_dam = heavy_item_damage) + + if(anti_armour_damage) + if(ismecha(target)) + var/obj/mecha/M = target + M.take_damage(anti_armour_damage) + if(issilicon(target)) + var/mob/living/silicon/S = target + S.take_overall_damage(anti_armour_damage*0.75, anti_armour_damage*0.25) return BULLET_ACT_HIT -/obj/projectile/bullet/a84mm_he +/obj/projectile/bullet/a84mm/he name ="\improper HE missile" desc = "Boom." icon_state = "missile" damage = 30 + anti_armour_damage = 0 + light_range = 4 ricochets_max = 0 //it's a MISSILE -/obj/projectile/bullet/a84mm_he/on_hit(atom/target, blocked=0) - ..() - explosion(target, 0, 1, 2, 4) - return BULLET_ACT_HIT +/obj/projectile/bullet/a84mm/he/weak + name ="\improper Light HE missile" + desc = "Boom." + icon_state = "missile-light" + dismemberment = 0 + damage = 20 + heavy_damage = 40 + heavy_item_damage = 40 + light_damage = 25 + light_item_damage = 20 /obj/projectile/bullet/a84mm_br name ="\improper HE missile" diff --git a/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm index 887d5ced8ff..fee3108358f 100644 --- a/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm @@ -412,43 +412,17 @@ A.reagents.add_reagent(/datum/reagent/carbon, volume) // Its pores would get clogged with gunk anyway. ..() -//its seiver. i ran out of ideas + seiver was a good one /datum/reagent/medicine/pancrazine name = "Pancrazine" - description = "A second generation Tecetian research chemical developed as the byproduct of the terraforming process. Injection of the substance while cold causes the body to regenerate radiation damage, while heating it causes rapid purging of toxic effects." + description = "A second generation Tecetian research chemical developed as the byproduct of the terraforming process. This medication heals blood toxicity, working faster the more active the patient's metabolism is. A common side effect reported is a feeling of drunkenness." color = "#c3915d" - var/radbonustemp = (T0C - 100) //being below this number gives you 10% off rads. - -/datum/reagent/medicine/pancrazine/on_mob_metabolize(mob/living/carbon/human/M) - . = ..() - radbonustemp = rand(radbonustemp - 50, radbonustemp + 50) // Basically this means 50K and below will always give the percent heal, and upto 150K could. Calculated once. /datum/reagent/medicine/pancrazine/on_mob_life(mob/living/carbon/human/M) - var/chemtemp = min(holder.chem_temp, 1000) - chemtemp = chemtemp ? chemtemp : 273 //why do you have null sweaty - var/healypoints = 0 //5 healypoints = 1 heart damage; 5 rads = 1 tox damage healed for the purpose of healypoints - - //you're hot - var/toxcalc = min(round((chemtemp-1000)/175+5,0.1),5) //max 2.5 tox healing a tick - if(toxcalc > 0) - M.adjustToxLoss(toxcalc*-0.5) - healypoints += toxcalc - - //and you're cold - var/radcalc = round((T0C-chemtemp)/6,0.1) //max ~45 rad loss unless you've hit below 0K. if so, wow. - if(radcalc > 0) - //no cost percent healing if you are SUPER cold (on top of cost healing) - if(chemtemp < radbonustemp*0.1) //if you're super chilly, it takes off 25% of your current rads - M.radiation = round(M.radiation * 0.75) - else if(chemtemp < radbonustemp)//else if you're under the chill-zone, it takes off 10% of your current rads - M.radiation = round(M.radiation * 0.9) - M.radiation -= radcalc - healypoints += (radcalc/5) - - - //you're yes and... oh no! - healypoints = round(healypoints,0.1) - M.adjustOrganLoss(ORGAN_SLOT_HEART, healypoints/5) + var/bonus = 0 //in practice will always be at least one since it has itself + for(var/r in M.reagents.reagent_list) + bonus += 1 + M.adjustToxLoss(-0.5 * (bonus + 1)) + M.adjust_drunk_effect(sqrt(volume) * (pick(5,30) + 15 * bonus) * ALCOHOL_RATE * REM) ..() return TRUE diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 1f24190b701..96b879b5603 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -339,7 +339,7 @@ /obj/item/reagent_containers/hypospray/medipen/badstop/update_icon_state() . = ..() - if(reagents.total_volume > 30) + if(reagents.total_volume >= 30) icon_state = base_icon_state return icon_state = "[base_icon_state][(reagents.total_volume > 0) ? 1 : 0]" diff --git a/code/modules/reagents/reagent_containers/hypovial.dm b/code/modules/reagents/reagent_containers/hypovial.dm index 64d3fc1fd2e..0d93bd3016c 100644 --- a/code/modules/reagents/reagent_containers/hypovial.dm +++ b/code/modules/reagents/reagent_containers/hypovial.dm @@ -60,6 +60,8 @@ /obj/item/reagent_containers/glass/bottle/vial/tiny name = "small hypovial" + icon_state = "hypovial-small" + volume = 30 //Shouldn't be possible to get this without adminbuse /obj/item/reagent_containers/glass/bottle/vial/small @@ -121,11 +123,34 @@ unique_reskin = null +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded + +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/silfrine + name = "small red hypovial (silfrine)" + icon_state = "hypovial-b-small" + comes_with = list(/datum/reagent/medicine/silfrine = 30) + +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/ysiltane + name = "small orange hypovial (ysiltane)" + icon_state = "hypovial-k-small" + comes_with = list(/datum/reagent/medicine/ysiltane = 30) + +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/gjalrazine + name = "small green hypovial (gjalrazine)" + icon_state = "hypovial-a-small" + comes_with = list(/datum/reagent/medicine/gjalrazine = 30) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/indomide name = "red hypovial (indomide)" icon_state = "hypovial-b" comes_with = list(/datum/reagent/medicine/indomide = 60) +/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/hadrakine + name = "red hypovial (hadrakine)" + desc = "Set hypospray to 'spray' before use!" + icon_state = "hypovial-b" + comes_with = list(/datum/reagent/medicine/hadrakine = 60) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/pancrazine name = "green hypovial (pancrazine)" icon_state = "hypovial-a" @@ -136,11 +161,21 @@ icon_state = "hypovial-k" comes_with = list(/datum/reagent/medicine/alvitane = 60) +/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/quardexane + name = "orange hypovial (quardexane)" + icon_state = "hypovial-k" + comes_with = list(/datum/reagent/medicine/quardexane = 60) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin name = "blue hypovial (dexalin)" icon_state = "hypovial-d" comes_with = list(/datum/reagent/medicine/dexalin = 60) +/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/salbutamol + name = "blue hypovial (salbutamol)" + icon_state = "hypovial-d" + comes_with = list(/datum/reagent/medicine/salbutamol = 60) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/cureall name = "hypovial (cureall)" icon_state = "hypovial" @@ -229,6 +264,11 @@ icon_state = "hypoviallarge-k" comes_with = list(/datum/reagent/medicine/synthflesh = 120) +/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/morphine + name = "large hypovial (morphine)" + icon_state = "hypoviallarge-t" + comes_with = list(/datum/reagent/medicine/morphine = 120) + /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat name = "combat hypovial" icon_state = "hypoviallarge-t" diff --git a/code/modules/reagents/reagent_containers/jug.dm b/code/modules/reagents/reagent_containers/jug.dm index d22e752e340..5c49c8c5529 100644 --- a/code/modules/reagents/reagent_containers/jug.dm +++ b/code/modules/reagents/reagent_containers/jug.dm @@ -105,6 +105,11 @@ icon_state = "chem_jug_copper" list_reagents = list(/datum/reagent/copper = 150) +/obj/item/reagent_containers/glass/chem_jug/ethanol + name = "chemical jug (ethanol)" + icon_state = "chem_jug_copper" + list_reagents = list(/datum/reagent/consumable/ethanol = 150) + /obj/item/reagent_containers/glass/chem_jug/fluorine name = "chemical jug (fluorine)" icon_state = "chem_jug_fluorine" diff --git a/code/modules/reagents/reagent_containers/medigel.dm b/code/modules/reagents/reagent_containers/medigel.dm index 8934b277679..3b48d9b17b6 100644 --- a/code/modules/reagents/reagent_containers/medigel.dm +++ b/code/modules/reagents/reagent_containers/medigel.dm @@ -96,7 +96,7 @@ /obj/item/reagent_containers/medigel/sterilizine name = "sterilizer gel" - desc = "gel bottle loaded with non-toxic sterilizer. Useful in preparation for surgery." + desc = "Gel bottle loaded with non-toxic sterilizer. Useful in preparation for surgery." icon_state = "medigel_blue" current_skin = "Blue" list_reagents = list(/datum/reagent/space_cleaner/sterilizine = 60) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index bef38d2c8c8..f46b6dd1d48 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -273,7 +273,7 @@ /obj/item/reagent_containers/syringe/pancrazine name = "syringe (pancrazine)" - desc = "Contains pancrazine, used to treat toxins and purge chemicals. The tag on the syringe states 'Heat before injection'." + desc = "Contains pancrazine, used to treat toxins." list_reagents = list(/datum/reagent/medicine/pancrazine = 15) /obj/item/reagent_containers/syringe/charcoal diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index 9510f15e0a9..08381d7644e 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -117,10 +117,10 @@ // pipe affected by explosion -/obj/structure/disposalpipe/contents_explosion(severity, target) +/obj/structure/disposalpipe/contents_explosion(severity, target, light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) var/obj/structure/disposalholder/H = locate() in src if(H) - H.contents_explosion(severity, target) + H.contents_explosion(severity, target, light_dam, light_item_dam, heavy_dam, heavy_item_dam) //welding tool: unfasten and convert to obj/disposalconstruct diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 8f2e0f60a5f..27a368e26ee 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -25,15 +25,16 @@ AM.forceMove(T) return ..() -/obj/structure/bigDelivery/contents_explosion(severity, target) +/obj/structure/bigDelivery/contents_explosion(severity, target,light_dam = EX_LIGHT_BASE_DAM, light_item_dam = EX_LIGHT_BASE_ITEM_DAM, heavy_dam = EX_HEAVY_BASE_DAM, heavy_item_dam = EX_HEAVY_BASE_ITEM_DAM) for(var/atom/movable/AM in contents) + var/list/to_explode = list(AM,light_dam,light_item_dam,heavy_dam,heavy_item_dam) switch(severity) if(EXPLODE_DEVASTATE) - SSexplosions.highobj += AM + SSexplosions.highobj += list(to_explode) if(EXPLODE_HEAVY) - SSexplosions.medobj += AM + SSexplosions.medobj += list(to_explode) if(EXPLODE_LIGHT) - SSexplosions.lowobj += AM + SSexplosions.lowobj += list(to_explode) /obj/structure/bigDelivery/examine(mob/user) . = ..() diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index c59131e2283..9105df81d9c 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -58,14 +58,6 @@ make_reagents = list(/datum/reagent/consumable/flour = 10) category = list("initial","Food") -/datum/design/monkey_cube - name = "Monkey Cube" - id = "mcube" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 250) - build_path = /obj/item/food/monkeycube - category = list("initial","Food") - /datum/design/ez_nut //easy nut :) name = "25u E-Z Nutrient" id = "ez_nut" @@ -143,47 +135,15 @@ id = "leather" build_type = BIOGENERATOR materials = list(/datum/material/biomass= 150) - build_path = /obj/item/stack/sheet/leather - category = list("initial","Organic Materials") - -/datum/design/secbelt - name = "Security Belt" - id = "secbelt" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/security - category = list("initial","Organic Materials") - -/datum/design/medbelt - name = "Medical Belt" - id = "medbel" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/medical - category = list("initial","Organic Materials") - -/datum/design/janibelt - name = "Janitorial Belt" - id = "janibelt" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/janitor + build_path = /obj/item/stack/sheet/leather/synthetic category = list("initial","Organic Materials") -/datum/design/plantbelt - name = "Botanical Belt" - id = "plantbelt" +/datum/design/meatproduct + name = "Synthetic Meat Product" + id = "meats" build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/plant - category = list("initial","Organic Materials") - -/datum/design/s_holster - name = "Shoulder Holster" - id = "s_holster" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 400) - build_path = /obj/item/clothing/accessory/holster + materials = list(/datum/material/biomass= 150) + build_path = /obj/item/food/meat/slab/meatproduct category = list("initial","Organic Materials") /datum/design/rngplant diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 93ba95941f3..a7e5991fe7b 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -45,8 +45,12 @@ ///Whether to show eyes, or lack thereof var/draw_eyes = TRUE + ///Should this head have sclera? + var/draw_sclera = TRUE ///Uses greyscale coloring for eyes var/greyscale_eyes = TRUE + ///Sprite to override the one used by the eye organ + var/eye_state_override /obj/item/bodypart/head/Destroy() QDEL_NULL(brainmob) //order is sensitive, see warning in handle_atom_del() below diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index fd8ad0b8208..6400862548c 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -1,8 +1,10 @@ /mob/living/proc/get_bodypart(zone) + RETURN_TYPE(/obj/item/bodypart) return /// Returns a bodypart occupying a specific zone. If using a precise zone and no such part is present, it falls back to a non-precise zone. /mob/living/carbon/get_bodypart(zone, simplify = FALSE) + RETURN_TYPE(/obj/item/bodypart) if(!zone) zone = BODY_ZONE_CHEST var/returned_part = bodyparts[zone] @@ -161,11 +163,28 @@ // No it's wasnt, but now it is. -sarah /mob/living/carbon/proc/new_body_part(zone, robotic, fixed_icon, datum/species/species) species ||= dna.species - var/bodypart_type = robotic ? species.species_robotic_limbs[zone] : species.species_limbs[zone] + robotic ||= HAS_TRAIT(src, TRAIT_USE_PROSTHETIC) + var/bodypart_type + if(robotic && species.prosthetic_style) + bodypart_type = species.prosthetic_style.replacement_bodyparts[zone] + else + bodypart_type = species.species_limbs[zone] if(!bodypart_type) return null return new bodypart_type() +/mob/living/carbon/proc/new_organ(slot, robotic = FALSE, datum/species/species) + species ||= dna.species + robotic ||= HAS_TRAIT(src, TRAIT_USE_PROSTHETIC) + var/organ_type + if(robotic && species.prosthetic_style && (slot in species.prosthetic_style.replacement_organs)) + organ_type = species.prosthetic_style.replacement_organs[slot] + else + organ_type = species.species_organs[slot] + if(!organ_type) + return null + return new organ_type() + /mob/living/carbon/monkey/new_body_part(zone, robotic, fixed_icon, datum/species/species) var/obj/item/bodypart/L switch(zone) @@ -225,29 +244,49 @@ /proc/skintone2hex(skin_tone) . = 0 switch(skin_tone) - if("caucasian1") + if("porcelain") . = "ffe0d1" - if("caucasian2") + if("cotton") + . = "e0dbdc" + if("peach") . = "fcccb3" - if("caucasian3") + if("coral") . = "e8b59b" - if("latino") + if("bisque") . = "d9ae96" - if("mediterranean") + if("rosewood") . = "c79b8b" - if("asian1") + if("sepia") + . = "895C51" + if("taupe") + . = "A5805D" + if("russet") + . = "874B3D" + if("beige") + . = "BD9D7D" + if("walnut") + . = "9F766D" + if("bronze") + . = "7F592B" + if("burnet") + . = "532B18" + if("amber") + . = "A37746" + if("hazel") + . = "A67138" + if("champagne") . = "ffdeb3" - if("asian2") + if("olive") . = "e3ba84" - if("arab") + if("tawny") . = "c4915e" - if("indian") + if("ochre") . = "b87840" - if("african1") + if("cedar") . = "754523" - if("african2") + if("sable") . = "471c18" - if("albino") + if("ivory") . = "fff4e6" if("orange") . = "ffc905" diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index ebf294a3ccc..88fa59949df 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -4,6 +4,7 @@ limb_id = SPECIES_ELZUOSE is_dimorphic = FALSE uses_mutcolor = TRUE + draw_sclera = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_SNOUT_SMALL /obj/item/bodypart/chest/ethereal diff --git a/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm index c2d92c34442..6a8d1e04ae2 100644 --- a/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm @@ -3,12 +3,9 @@ icon = 'icons/mob/species/ipc/bodyparts.dmi' icon_state = "synth_head" limb_id = "synth" - var/custom_eye_sprite - /// if true, we set the eyes to #FFFFFF - useful for ipcs where the light color probably shouldnt be changable - var/force_white_eye_color = FALSE dynamic_rename = FALSE draw_eyes = FALSE - var/has_screen = FALSE + draw_sclera = FALSE is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC @@ -22,46 +19,6 @@ medium_burn_msg = "scorched" heavy_burn_msg = "seared" -//awful workaround for the lack of differing eye sprite handling -/obj/item/bodypart/head/ipc/attach_limb(mob/living/carbon/our_carbon, special, is_creating = FALSE) - var/mob/living/carbon/human/limb_owner - if(our_carbon) - limb_owner = our_carbon - else - limb_owner = owner - - var/obj/item/organ/eyes/eyes_to_edit = limb_owner.getorganslot(ORGAN_SLOT_EYES) - - if(!limb_owner || !eyes_to_edit) - return ..() - if(custom_eye_sprite) - eyes_to_edit.eye_icon_state = custom_eye_sprite - - if(force_white_eye_color) - limb_owner.eye_color = COLOR_WHITE - var/datum/species/ipc/ipc_species_datum = limb_owner.dna.species - var/datum/species/species_datum = limb_owner.dna.species - if(!ipc_species_datum) - ipc_species_datum.update_screen_action() - else if(species_datum) - LAZYREMOVE(species_datum.species_traits, SCLERA) - return ..() - -//ditto -/obj/item/bodypart/head/ipc/drop_limb(special) - var/mob/living/carbon/human/limb_owner = owner - - var/obj/item/organ/eyes/eyes_to_edit = limb_owner.getorganslot(ORGAN_SLOT_EYES) - - if(!limb_owner || !eyes_to_edit) - return ..() - if(custom_eye_sprite) - eyes_to_edit.eye_icon_state = eyes_to_edit::eye_icon_state - - if(force_white_eye_color) - limb_owner.eye_color = eyes_to_edit.eye_color - return ..() - /obj/item/bodypart/chest/ipc static_icon = 'icons/mob/species/ipc/bodyparts.dmi' icon = 'icons/mob/species/ipc/bodyparts.dmi' @@ -159,7 +116,6 @@ name = "\improper Pawsitrons United N1 head" icon_state = "pawsitrons_head" limb_id = "pawsitrons" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/chest/ipc/pawsitrons @@ -360,7 +316,7 @@ limb_id = "saipc" draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/chest/ipc/saipc name = "\improper Scarborgh Arms IPC-73 chest" @@ -391,7 +347,6 @@ name = "\improper Scarborgh Arms IPC-73 Type-2 boxhead" icon_state = "saipc_alt_head" limb_id = "saipc_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // Scarborgh Arms IPC-80 MK.2 @@ -402,7 +357,7 @@ limb_id = "saipc2" draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/chest/ipc/saipc2 name = "\improper Scarborgh Arms IPC-80 MK.2 chest" @@ -446,7 +401,7 @@ icon_state = "lanchesterheavy_head" limb_id = "lanchesterheavy" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" /obj/item/bodypart/chest/ipc/lanchesterheavy name = "\improper Lanchester Mechanics 'HEAVY DUTY FRAME' chest" @@ -479,7 +434,6 @@ name = "\improper Lanchester Mechanics 'HEAVY DUTY FRAME' head" icon_state = "lanchesterheavy_alt_head" limb_id = "lanchesterheavy_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // HARDLINE 'Longshore' @@ -488,7 +442,6 @@ name = "\improper HARDLINE 'Longshore' head" icon_state = "lanchesterworker_head" limb_id = "lanchesterworker" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/chest/ipc/lanchesterworker @@ -524,7 +477,6 @@ name = "\improper Custom Unplated head" icon_state = "lanchesterunplated_head" limb_id = "lanchesterunplated" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/chest/ipc/lanchesterunplated @@ -562,7 +514,7 @@ limb_id = "pgfmk3_suhols" draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_elzu" + eye_state_override = "eyes_elzu" /obj/item/bodypart/chest/ipc/pgfmk3_suhols name = "\improper PGF Mechanics MK.III Type 'Suhols-Ro' chest" @@ -573,7 +525,6 @@ name = "\improper PGF Mechanics MK.III Type 'Suhols-Ro' aftermarket boxhead" icon_state = "pgfmk3_suhols_alt_head" limb_id = "pgfmk3_suhols_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // PGF Mechanics MK.III Type 'Wusha' @@ -594,7 +545,6 @@ name = "\improper PGF Mechanics MK.III Type 'Wusha' aftermarket boxhead" icon_state = "pgfmk3_wusha_alt_head" limb_id = "pgfmk3_wusha_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // PGF Mechanics MK.III generic @@ -628,7 +578,6 @@ uses_mutcolor = TRUE should_draw_greyscale = TRUE overlay_icon_state = TRUE - has_screen = FALSE draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT @@ -689,7 +638,7 @@ icon_state = "bishop_head" limb_id = "bishop" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" /obj/item/bodypart/chest/ipc/bishop name = "\improper Besoro Bishop chest" @@ -720,7 +669,6 @@ name = "\improper Besoro Bishop Type-B head" icon_state = "bishop_alt_head" limb_id = "bishop_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // INTEQ SPRINTER @@ -729,11 +677,10 @@ name = "\improper Inteq Mothership 'Sprinter' Type-1 head" icon_state = "inteqsprinter_head" limb_id = "inteqsprinter" - has_screen = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - custom_eye_sprite = "eyes_inteqsprinter" + eye_state_override = "eyes_inteqsprinter" draw_eyes = TRUE - force_white_eye_color = TRUE + greyscale_eyes = FALSE /obj/item/bodypart/chest/ipc/sprinter name = "\improper Inteq Mothership 'Sprinter' chest" @@ -766,9 +713,9 @@ name = "\improper Inteq Mothership 'Sprinter' Type-2 head" icon_state = "inteqsprinter2_head" limb_id = "inteqsprinter2" - custom_eye_sprite = "eyes_inteqsprinter2" + eye_state_override = "eyes_inteqsprinter2" draw_eyes = TRUE - force_white_eye_color = TRUE + greyscale_eyes = FALSE // MAXIM SEEKER @@ -776,9 +723,10 @@ name = "\improper Maxim Dynamics 'Seeker' head" icon_state = "seekeripc_head" limb_id = "seekeripc" - custom_eye_sprite = "eyes_seekeripc" + eye_state_override = "eyes_seekeripc" draw_eyes = TRUE - force_white_eye_color = TRUE + greyscale_eyes = FALSE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC /obj/item/bodypart/chest/ipc/seeker name = "\improper Maxim Dynamics 'Seeker' chest" @@ -811,7 +759,6 @@ name = "\improper Absolution-Lux 'Solferino' head" icon_state = "ablux_head" limb_id = "ablux" - has_screen = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC /obj/item/bodypart/chest/ipc/solferino @@ -846,7 +793,6 @@ icon_state = "humanipc_head" limb_id = "humanipc" draw_eyes = TRUE - has_screen = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC /obj/item/bodypart/chest/ipc/humaniform @@ -881,8 +827,8 @@ icon_state = "cyber_head" limb_id = "cyber" draw_eyes = TRUE - custom_eye_sprite = "eyes_cybersun_ghost" - force_white_eye_color = TRUE + eye_state_override = "eyes_cybersun_ghost" + greyscale_eyes = FALSE /obj/item/bodypart/chest/ipc/ghost name = "\improper Cybersun Biodynamics S Series 'Ghost' chest" @@ -916,7 +862,6 @@ limb_id = "custom_3d_box" overlay_use_primary_color = TRUE overlay_icon_state = TRUE - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/head/ipc/custom_monoeye @@ -927,7 +872,7 @@ overlay_use_primary_color = TRUE overlay_icon_state = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/head/ipc/customatua_monoc name = "\improper Custom 3D Printed Atua head" @@ -937,7 +882,7 @@ overlay_use_primary_color = TRUE overlay_icon_state = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/leg/left/ipc/customatua_monoc name = "\improper Custom 3D Printed Atua left leg" @@ -992,7 +937,7 @@ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL overlay_use_primary_color = TRUE overlay_icon_state = TRUE - custom_eye_sprite = "eyes_elzu" + eye_state_override = "eyes_elzu" /obj/item/bodypart/chest/ipc/custompgf3_suhols name = "\improper Custom 3D Printed MK.III Type 'Suhols-Ro' chest" @@ -1109,7 +1054,7 @@ icon_state = "custombishop_head" limb_id = "custombishop" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" overlay_use_primary_color = TRUE overlay_icon_state = TRUE @@ -1204,7 +1149,7 @@ icon_state = "customlanchesterheavy_head" limb_id = "customlanchesterheavy" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" overlay_use_primary_color = TRUE overlay_icon_state = TRUE @@ -1251,7 +1196,6 @@ name = "\improper Custom 3D Printed Longshore head" icon_state = "customlanchesterworker_head" limb_id = "customlanchesterworker" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD overlay_use_primary_color = TRUE overlay_icon_state = TRUE @@ -1299,7 +1243,7 @@ name = "\improper Custom 3D Printed Seeeker head" icon_state = "seekeripc_head" limb_id = "seekeripc" - custom_eye_sprite = "eyes_seekeripc_greyscale" + eye_state_override = "eyes_seekeripc_greyscale" draw_eyes = TRUE should_draw_greyscale = TRUE @@ -1341,7 +1285,6 @@ limb_id = "pgfipc-p" uses_mutcolor = TRUE should_draw_greyscale = TRUE - has_screen = FALSE draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index c8a800c495a..0706b33e3b8 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -3,6 +3,7 @@ limb_id = "snail" is_dimorphic = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/snail limb_id = "snail" @@ -102,6 +103,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/zombie limb_id = "zombie" @@ -151,6 +153,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/fly limb_id = "fly" @@ -179,6 +182,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/shadow limb_id = "shadow" @@ -207,6 +211,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE biological_state = BIO_BONE /obj/item/bodypart/chest/skeleton diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index d3bc4c19847..5a532f92ea9 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -4,6 +4,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/moth static_icon = 'icons/mob/species/moth/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm index 7b52ea7b623..677aff5f8fb 100644 --- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm @@ -4,6 +4,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE biological_state = BIO_BONE /obj/item/bodypart/chest/plasmaman diff --git a/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm index 440b0b7236f..ba8e3c1d721 100644 --- a/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm @@ -5,6 +5,7 @@ overlay_icon_state = TRUE biological_state = (BIO_FLESH|BIO_BLOODED) draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/rachnid static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm index b2502f6a172..ea641213df3 100644 --- a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm @@ -4,6 +4,7 @@ is_dimorphic = FALSE bodytype = BODYTYPE_VOX | BODYTYPE_ORGANIC should_draw_greyscale = FALSE + draw_sclera = FALSE dmg_overlay_icon = 'icons/mob/species/vox/vox_overlays.dmi' /obj/item/bodypart/chest/vox diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 58bc3c93baf..19fce52f0a2 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -301,3 +301,4 @@ desc = "An internal power cord hooked up to a battery. Useful if you run on volts." items_to_create = list(/obj/item/apc_powercord) zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 49bca851896..0f2fea384a5 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -24,7 +24,7 @@ var/tint = 0 var/eye_color = "" //set to a hex code to override a mob's eye color var/eye_icon_state = "eyes" - var/sclera_color = "e8e8e8" //a hex color, in case some species, like sarathi have different sclera color + var/sclera_color = "ebeae8" //a hex color, in case some species, like sarathi have different sclera color var/sclera_icon_state = "eyes_sclera" //sclera is the white part of the eye var/old_eye_color = "fff" var/flash_protect = FLASH_PROTECTION_NONE diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 7ad1699284f..e3a84d6b554 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -242,7 +242,7 @@ /mob/living/carbon/human/regenerate_organs() SEND_SIGNAL(src, COMSIG_CARBON_PRE_REGENERATE_ORGANS) - dna.species.regenerate_organs(src, robotic = fbp) + dna.species.regenerate_organs(src, robotic = HAS_TRAIT(src, TRAIT_USE_PROSTHETIC)) SEND_SIGNAL(src, COMSIG_CARBON_POST_REGENERATE_ORGANS) /** get_availability diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 7949bbcbe94..83f2d1b21f7 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -118,6 +118,7 @@ #include "say.dm" #include "serving_tray.dm" #include "spawn_humans.dm" +#include "species_limbs_and_organs.dm" #include "species_unique_id.dm" #include "species_whitelists.dm" #include "stack_singular_name.dm" diff --git a/code/modules/unit_tests/species_limbs_and_organs.dm b/code/modules/unit_tests/species_limbs_and_organs.dm new file mode 100644 index 00000000000..c72580ffdc5 --- /dev/null +++ b/code/modules/unit_tests/species_limbs_and_organs.dm @@ -0,0 +1,19 @@ +// This exists to catch limbs or organs being where they shouldn't +/datum/unit_test/species_limbs_and_organs/Run() + var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) + + var/datum/species/test_species + var/obj/item/organ/test_organ + var/obj/item/bodypart/test_bodypart + + for(var/species_type in subtypesof(/datum/species)) + human.set_species(species_type) + test_species = human.dna.species + + for(var/zone in test_species.species_limbs) + test_bodypart = test_species.species_limbs[zone] + TEST_ASSERT_EQUAL(zone, test_bodypart::body_zone, "Species [species_type] has invalid bodypart [test_bodypart] in zone [zone]") + + for(var/slot in test_species.species_organs) + test_organ = test_species.species_organs[slot] + TEST_ASSERT_EQUAL(slot, test_organ::slot, "Species [species_type] has invalid organ [test_organ] in slot [slot]") diff --git a/html/changelogs/AutoChangeLog-pr-6124.yml b/html/changelogs/AutoChangeLog-pr-6124.yml deleted file mode 100644 index 489e7fdd02a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-6124.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thearbiber -changes: - - {rscadd: srm hardsuit digi fix} -delete-after: true diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index a5e3b688e81..9350ee6dceb 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -31,3 +31,75 @@ Erikafox: - bugfix: Teagarden whatever is back to being an example sector, rather than being spawnable. +2026-04-05: + thearbiber: + - rscadd: srm hardsuit digi fix +2026-04-06: + Addust: + - rscdel: St. Valentine is no more. Expect no more incredibly peculiar Valentine's + Day cards or government-mandated dates. + Erikafox: + - rscadd: Outpost cargo now stocks intermediate and advanced chemical vials for + hyposprays! + - rscadd: you can now buy chem heaters and chemmasters in outpost cargo + - rscadd: You can now buy hydroponics equipment in cargo + - rscdel: biogenerator fabrication list trimmed + - imageadd: small hypospray vial sprite + generalthrax: + - rscadd: Brought back darker Makosso blue +2026-04-08: + Bumtickley00: + - balance: Pancrazine now scales healing with the amount of reagents in your system + and gets you drunk. + - spellcheck: Removed dylovene mention on cargo screen + Yule & Addust: + - rscadd: Added the Puru-Rangi-class auxiliary response vessel + thearbiber: + - rscadd: various leyak adjustments + - rscdel: wrecker on leyak + zimon9: + - rscdel: Removed layer adapter layer update proc + - code_imp: changed the layer of atmospherics machines so they layer below catwalks +2026-04-09: + DIB-DOG: + - rscadd: Added sharplite plus cells to the black market + - balance: rebalanced energy cell prices + Erikafox: + - bugfix: pilot jacket toggletext + stiel: + - rscadd: Brass knuckles! New melee item in cargo. + thearbiber: + - bugfix: Whitereds back in cargo +2026-04-10: + SapphicOverload: + - refactor: Refactored IPCs again +2026-04-11: + Erikafox: + - balance: shields now need to be facing a target to absorb an impact. + generalthrax, memesnorfer: + - rscadd: Added Scatter Laser, Pulse Slugs, Incendiary Slugs, Ion Shells to cargo + - rscadd: Added Dragonsbreath to black market + - rscdel: Removed all tech shell recipes +2026-04-13: + generalthrax: + - rscdel: Removed mentors +2026-04-15: + thearbiber: + - rscadd: NGR mining hardsuit, places it on the derecho +2026-04-16: + Gristlebee: + - rscadd: Explosions can now be given specific damage values. + - balance: Explosion damage numbers + - balance: Ramzi Demo has light rockets. + PhoenixTheRedandEvil: + - rscadd: Changes AI_BEHAVIOR_INSTANT in if(!can_see(basic_mob, final_target, required_distance)) + to AI_BEHAVIOR_DELAY + generalthrax: + - bugfix: you can use ooc again + thearbiber: + - rscadd: skirt recolors + bar waistcoat + - rscadd: digi utility sprite + - rscadd: beef jerky +2026-04-17: + Erikafox: + - rscadd: Thousand Eyes is now occasionally assailed by massive clouds of fog diff --git a/icons/mob/clothing/accessories.dmi b/icons/mob/clothing/accessories.dmi index 35828cf5c97..dc39f2d28fa 100644 Binary files a/icons/mob/clothing/accessories.dmi and b/icons/mob/clothing/accessories.dmi differ diff --git a/icons/mob/clothing/faction/clip/head.dmi b/icons/mob/clothing/faction/clip/head.dmi index 76b65877338..95e71eda729 100644 Binary files a/icons/mob/clothing/faction/clip/head.dmi and b/icons/mob/clothing/faction/clip/head.dmi differ diff --git a/icons/mob/clothing/faction/clip/suits.dmi b/icons/mob/clothing/faction/clip/suits.dmi index 62d3136c8fa..b82db808728 100644 Binary files a/icons/mob/clothing/faction/clip/suits.dmi and b/icons/mob/clothing/faction/clip/suits.dmi differ diff --git a/icons/mob/clothing/faction/frontiersmen/head.dmi b/icons/mob/clothing/faction/frontiersmen/head.dmi index 03f2024b1e8..97e1e58ff39 100644 Binary files a/icons/mob/clothing/faction/frontiersmen/head.dmi and b/icons/mob/clothing/faction/frontiersmen/head.dmi differ diff --git a/icons/mob/clothing/faction/frontiersmen/vox.dmi b/icons/mob/clothing/faction/frontiersmen/vox.dmi index d2101fffc91..88512445db3 100644 Binary files a/icons/mob/clothing/faction/frontiersmen/vox.dmi and b/icons/mob/clothing/faction/frontiersmen/vox.dmi differ diff --git a/icons/mob/clothing/faction/ngr/head.dmi b/icons/mob/clothing/faction/ngr/head.dmi index f18aae5cd7e..1abc781254e 100644 Binary files a/icons/mob/clothing/faction/ngr/head.dmi and b/icons/mob/clothing/faction/ngr/head.dmi differ diff --git a/icons/mob/clothing/faction/ngr/suits.dmi b/icons/mob/clothing/faction/ngr/suits.dmi index 77204d00b02..e003003079f 100644 Binary files a/icons/mob/clothing/faction/ngr/suits.dmi and b/icons/mob/clothing/faction/ngr/suits.dmi differ diff --git a/icons/mob/clothing/under/shorts_pants.dmi b/icons/mob/clothing/under/shorts_pants.dmi index 76232cfae88..8a1720a725e 100644 Binary files a/icons/mob/clothing/under/shorts_pants.dmi and b/icons/mob/clothing/under/shorts_pants.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index ce4f4096f7e..28dce99dad1 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/inhands/weapons/blunt_lefthand.dmi b/icons/mob/inhands/weapons/blunt_lefthand.dmi index 198e15b348c..33a0f520e4c 100644 Binary files a/icons/mob/inhands/weapons/blunt_lefthand.dmi and b/icons/mob/inhands/weapons/blunt_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/blunt_righthand.dmi b/icons/mob/inhands/weapons/blunt_righthand.dmi index 67a15cd2f42..1e8f1171e76 100644 Binary files a/icons/mob/inhands/weapons/blunt_righthand.dmi and b/icons/mob/inhands/weapons/blunt_righthand.dmi differ diff --git a/icons/mob/species/misc/digitigrade.dmi b/icons/mob/species/misc/digitigrade.dmi index 16f2cc0092f..198cc522d5f 100644 Binary files a/icons/mob/species/misc/digitigrade.dmi and b/icons/mob/species/misc/digitigrade.dmi differ diff --git a/icons/mob/species/misc/digitigrade_suits.dmi b/icons/mob/species/misc/digitigrade_suits.dmi index 5a4a97ca1d3..36aada09ef8 100644 Binary files a/icons/mob/species/misc/digitigrade_suits.dmi and b/icons/mob/species/misc/digitigrade_suits.dmi differ diff --git a/icons/obj/ammunition/ammo_boxes.dmi b/icons/obj/ammunition/ammo_boxes.dmi index ece485a5d5c..c4431cf15f0 100644 Binary files a/icons/obj/ammunition/ammo_boxes.dmi and b/icons/obj/ammunition/ammo_boxes.dmi differ diff --git a/icons/obj/ammunition/ammo_bullets.dmi b/icons/obj/ammunition/ammo_bullets.dmi index 92cf2f8714a..acee4bcbe9c 100644 Binary files a/icons/obj/ammunition/ammo_bullets.dmi and b/icons/obj/ammunition/ammo_bullets.dmi differ diff --git a/icons/obj/chemical/chem_jug.dmi b/icons/obj/chemical/chem_jug.dmi index e5ab15a43e1..76806f36bba 100644 Binary files a/icons/obj/chemical/chem_jug.dmi and b/icons/obj/chemical/chem_jug.dmi differ diff --git a/icons/obj/chemical/hypovial.dmi b/icons/obj/chemical/hypovial.dmi index 608af9f77bb..4ff8bd82cbe 100644 Binary files a/icons/obj/chemical/hypovial.dmi and b/icons/obj/chemical/hypovial.dmi differ diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi index ccdbd065d1e..d15f2e47b72 100644 Binary files a/icons/obj/clothing/accessories.dmi and b/icons/obj/clothing/accessories.dmi differ diff --git a/icons/obj/clothing/faction/clip/head.dmi b/icons/obj/clothing/faction/clip/head.dmi index 4a3a494753e..2cf81a98bfd 100644 Binary files a/icons/obj/clothing/faction/clip/head.dmi and b/icons/obj/clothing/faction/clip/head.dmi differ diff --git a/icons/obj/clothing/faction/clip/suits.dmi b/icons/obj/clothing/faction/clip/suits.dmi index b9224bd851e..6658d54a460 100644 Binary files a/icons/obj/clothing/faction/clip/suits.dmi and b/icons/obj/clothing/faction/clip/suits.dmi differ diff --git a/icons/obj/clothing/faction/frontiersmen/head.dmi b/icons/obj/clothing/faction/frontiersmen/head.dmi index f68169a5be6..06988f80fcf 100644 Binary files a/icons/obj/clothing/faction/frontiersmen/head.dmi and b/icons/obj/clothing/faction/frontiersmen/head.dmi differ diff --git a/icons/obj/clothing/faction/ngr/head.dmi b/icons/obj/clothing/faction/ngr/head.dmi index b449b302eb1..5f8af43f362 100644 Binary files a/icons/obj/clothing/faction/ngr/head.dmi and b/icons/obj/clothing/faction/ngr/head.dmi differ diff --git a/icons/obj/clothing/faction/ngr/suits.dmi b/icons/obj/clothing/faction/ngr/suits.dmi index fecec8ab894..cd3a8d5c23b 100644 Binary files a/icons/obj/clothing/faction/ngr/suits.dmi and b/icons/obj/clothing/faction/ngr/suits.dmi differ diff --git a/icons/obj/clothing/under/shorts_pants.dmi b/icons/obj/clothing/under/shorts_pants.dmi index 61a1d21030c..4de67de3665 100644 Binary files a/icons/obj/clothing/under/shorts_pants.dmi and b/icons/obj/clothing/under/shorts_pants.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index c54cfaed90b..d5448fcc2d9 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 11b9b335548..f5f119cc516 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/weapon/blunt.dmi b/icons/obj/weapon/blunt.dmi index 6d652dd864a..f49d74bd19d 100644 Binary files a/icons/obj/weapon/blunt.dmi and b/icons/obj/weapon/blunt.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 17e93ba21d0..99f5d687dd4 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -85,9 +85,6 @@ h1.alert, h2.alert {color: #000000;} .hear {color: #000099; font-style: italic;} .adminnotice {color: #0000ff;} .adminhelp {color: #ff0000; font-weight: bold;} -.mentor {color: #8A2BE2;} -.mentoradmin {color: #8A2BE2; font-weight: bold;} -.mentornotice {color: #E236D8;} .unconscious {color: #0000ff; font-weight: bold;} .suicide {color: #ff5050; font-style: italic;} .green {color: #03ff39;} diff --git a/modular_starfly/modules/sinta_unathi/lizardpeople.dm b/modular_starfly/modules/sinta_unathi/lizardpeople.dm index 12c14c3005d..f7f34b033c1 100644 --- a/modular_starfly/modules/sinta_unathi/lizardpeople.dm +++ b/modular_starfly/modules/sinta_unathi/lizardpeople.dm @@ -3,7 +3,7 @@ // lizardpeople.dm // Copyright 2023 LectroNyx. -// Copyright 2025 Patrick Meade. +// Copyright 2025-2026 Patrick Meade. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published @@ -26,11 +26,9 @@ name = "\improper Sinta'Unathi" id = SPECIES_SINTA default_color = "00FF00" - species_traits = list(MUTCOLORS,EYECOLOR,LIPS,SCLERA,EMOTE_OVERLAY,MUTCOLORS_SECONDARY) + species_traits = list(MUTCOLORS, LIPS, EMOTE_OVERLAY, MUTCOLORS_SECONDARY) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE mutant_bodyparts = list("tail_lizard", "face_markings", "frills", "horns", "spines", "body_markings", "legs") - mutanttongue = /obj/item/organ/tongue/lizard - mutant_organs = list(/obj/item/organ/tail/lizard) coldmod = 1.5 heatmod = 0.67 species_age_min = 22 @@ -47,10 +45,21 @@ deathsound = 'sound/voice/lizard/deathsound.ogg' wings_icons = list("Dragon") species_language_holder = /datum/language_holder/lizard - mutanteyes = /obj/item/organ/eyes/lizard - sclera_color = "#fffec4" blush_color = COLOR_BLUSH_TEAL + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/lizard, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/lizard, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_TAIL = /obj/item/organ/tail/lizard, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/lizard, BODY_ZONE_HEAD = /obj/item/bodypart/head/lizard, @@ -60,16 +69,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard/digitigrade, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/lizard, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/lizard, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/lizard, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/lizard, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/lizard/digitigrade, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/lizard/digitigrade, - ) - - robotic_eyes = /obj/item/organ/eyes/robotic/lizard + prosthetic_style = /datum/sprite_accessory/body/prosthetic/sarathi // Lizards are coldblooded and can stand a greater temperature range than humans bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 20 // This puts lizards 10 above lavaland max heat for ash lizards. diff --git a/shiptest.dme b/shiptest.dme index 67197ed12a9..6512ec231e8 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -987,6 +987,7 @@ #include "code\datums\weather\weather_types\acid_rain.dm" #include "code\datums\weather\weather_types\ash_storm.dm" #include "code\datums\weather\weather_types\floor_is_lava.dm" +#include "code\datums\weather\weather_types\fog.dm" #include "code\datums\weather\weather_types\hailstorm.dm" #include "code\datums\weather\weather_types\nuclear_fallout.dm" #include "code\datums\weather\weather_types\radiation_storm.dm" @@ -1227,8 +1228,8 @@ #include "code\game\machinery\telecomms\machines\server.dm" #include "code\game\MapData\outposts\cybersun_gas_giant.dm" #include "code\game\MapData\shuttles\independent_shetland.dm" -#include "code\game\MapData\shuttles\independent_shetland.dm" #include "code\game\MapData\shuttles\misc.dm" +#include "code\game\MapData\shuttles\ngr_pururangi.dm" #include "code\game\MapData\shuttles\pgf_bolide.dm" #include "code\game\MapData\shuttles\pgf_crying_sun.dm" #include "code\game\MapData\shuttles\pgf_woeful_cthonian.dm" @@ -1877,7 +1878,6 @@ #include "code\modules\admin\verbs\manipulate_organs.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" #include "code\modules\admin\verbs\mapping.dm" -#include "code\modules\admin\verbs\mentors_edit.dm" #include "code\modules\admin\verbs\one_click_antag.dm" #include "code\modules\admin\verbs\outpost.dm" #include "code\modules\admin\verbs\overmap_token_manager.dm" @@ -2019,8 +2019,6 @@ #include "code\modules\antagonists\traitor\equipment\Malf_Modules.dm" #include "code\modules\antagonists\traitor\equipment\module_picker.dm" #include "code\modules\antagonists\traitor\IAA\internal_affairs.dm" -#include "code\modules\antagonists\valentines\heartbreaker.dm" -#include "code\modules\antagonists\valentines\valentine.dm" #include "code\modules\antagonists\wizard\wizard.dm" #include "code\modules\antagonists\wizard\equipment\artefact.dm" #include "code\modules\antagonists\wizard\equipment\spellbook.dm" @@ -2192,6 +2190,7 @@ #include "code\modules\cargo\packs\fishing.dm" #include "code\modules\cargo\packs\food.dm" #include "code\modules\cargo\packs\gun.dm" +#include "code\modules\cargo\packs\hydroponics.dm" #include "code\modules\cargo\packs\machinery.dm" #include "code\modules\cargo\packs\magazines.dm" #include "code\modules\cargo\packs\material.dm" @@ -2385,7 +2384,6 @@ #include "code\modules\events\ghost_role\salesman.dm" #include "code\modules\events\ghost_role\sentience.dm" #include "code\modules\events\holiday\halloween.dm" -#include "code\modules\events\holiday\vday.dm" #include "code\modules\events\holiday\xmas.dm" #include "code\modules\events\ship\_ship.dm" #include "code\modules\events\ship\lottery.dm" @@ -2647,14 +2645,6 @@ #include "code\modules\mapping\space_management\space_level.dm" #include "code\modules\mapping\space_management\traits.dm" #include "code\modules\mapping\space_management\zlevel_manager.dm" -#include "code\modules\mentor\holder2.dm" -#include "code\modules\mentor\mentor_ranks.dm" -#include "code\modules\mentor\mentor_verbs.dm" -#include "code\modules\mentor\verbs\dementor.dm" -#include "code\modules\mentor\verbs\mentor_memo.dm" -#include "code\modules\mentor\verbs\mentorhelp.dm" -#include "code\modules\mentor\verbs\mentorpm.dm" -#include "code\modules\mentor\verbs\mentorsay.dm" #include "code\modules\mining\abandoned_crates.dm" #include "code\modules\mining\drill.dm" #include "code\modules\mining\fulton.dm" @@ -2738,6 +2728,7 @@ #include "code\modules\mob\dead\new_player\sprite_accessories\wings.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\body\_body.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\body\ipc.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\body\prosthetic.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_legs.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_socks.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_torso.dm" diff --git a/strings/tips.txt b/strings/tips.txt index 5a45cb343ba..3d65c05a38a 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -25,7 +25,7 @@ Most job-related exosuit clothing can fit job-related items into it, such as the If you're using hotkey mode, you can stop pulling things using H. If there's something you need from others, try asking! This game isn't singleplayer and you'd be surprised what you can get accomplished together! You'll quickly lose your interest in the game if you play to win and kill. If you find yourself doing this, take a step back and talk to people - it's a much better experience! -Don't be afraid to ask for help, whether from your peers or from mentors. +Don't be afraid to ask for help, whether from your peers or from admins. As the Captain, you have absolute access and control over your ship, but this does not mean that being a horrible person won't result in mutiny and a ban. A medical hardsuit can hold an entire medkit in its suit storage! While both heal toxin damage, the difference between charcoal and dylovene is that charcoal will actively remove all other reagents from one's body, while dylovene only removes various toxins - but can overdose. diff --git a/strings/valentines.json b/strings/valentines.json deleted file mode 100644 index bf627c11fc6..00000000000 --- a/strings/valentines.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "valentines": [ - "Roses are red / Violets are good / One day while Andy...", - "My love for you is like the singularity. It cannot be contained.", - "You make me lustier than a xenomorph maid.", - "We go together like the clown and the external airlock.", - "Roses are red / Liches are wizards / I love you more than a whole squad of lizards.", - "Be my valentine. Law 2.", - "You must be a mime, because you leave me speechless.", - "I love you like Ian loves the HoP.", - "You're hotter than a plasma fire in toxins.", - "We must have a wizard, because your face summoned magic.", - "Are you a hull breach? Because you're taking my breath away.", - "I'm not the atmos tech, but I'm great at laying pipe.", - "Could I have all access... to your heart?", - "Call me the medical doctor, because I'm here to inspect your johnson.", - "Quick, get the defibrillator! I saw you and my heart stopped.", - "I'm not a changeling, but you make my proboscis extend.", - "I just can't get EI NATH of you.", - "Roses are red / Intents are disarm / Not being my Valentine / causes human harm.", - "I want you more than an assistant wants the captain's spare.", - "If I was a security officer, I'd brig you all shift.", - "Are you the janitor? Because I think I've fallen for you.", - "You're always valid to my heart.", - "I'd risk the wrath of the gods to bwoink you.", - "You look as beautiful now as the last time you were cloned.", - "Someone check the gravitational generator, because I'm only attracted to you.", - "If I were the warden I'd always let you into my armory.", - "The virologist is rogue, and the only cure is a kiss from you.", - "You must be a silicon, because you've unbolted my heart.", - "There's no way you're rogue -- you're a fine piece of Asimov.", - "Are you Nar'Sie? Because there's nar-one else I sie.", - "You're more stunning than the entire armory.", - "Do you have stamina damage from running through my dreams?", - "My love for you is stronger than a reinforced wall.", - "This must be the captain's office, because I see a fox.", - "I'm no highlander, but there can only be one for me.", - "The floor is made of lava! Quick, get on my bed.", - "If you were an abandoned station you'd be the DEARelict.", - "If you had an ore bag you'd be a shaft FINEr.", - "I must be the CMO, 'cause I saw you on my CUTE sensors.", - "If you were a weather event you'd be an aurora BAElus.", - "Let's call the emergency CUDDLE.", - "Recall the shuttle, I want to stay here with you.", - "Could you put your DNA inside my vault?", - "Roses are red / Tide is gray / If I were an assistant I'd steal you away.", - "Roses are red / Text is green / I love you more than cleanbots clean.", - "Roses are red / Shuttles go dockside / I want to know you better than carbon dioxide.", - "Roses are red / Brute kits are pink / Let's go out like the lights in a powersink.", - "Roses are red / The hallways are dirty / I'll never leave your side / Just like shitcurity.", - "Roses are red / Clowns have a horn / You turn me on / More than library porn.", - "If you were a carp I'd fi-lay you.", - "My pinpointer only leads to your heart.", - "Is that an esword in your pocket, or are you excited to see me?", - "I've been chasing you like Runtime chases a laser pointer.", - "I'm no cat, but you've got me in my feel-inids.", - "If Lavaland had an apiary, would you bee mine?", - "If you were a disposal bin I'd ride you all day.", - "You're the vomit to my goose.", - "Get me my ore bag, I just found girlfriend material.", - "You must be liquid dark matter, because you're pulling me closer.", - "Not even sorium can drive me away from you.", - "Wanna make like a borg and do some heavy petting?", - "Are you powering the ship? Because you super matter to me.", - "I must be tripping on BZ, because I saw an angel walk by.", - "I wish science could make me a bag of holding you.", - "Did you visit the medbay after you fell from heaven?", - "Your beauty is rarer than an aurora caelus.", - "Wanna raid my tool storage?", - "You must be a moth, because you set my heart aflutter.", - "I'm the QM, and my highest priority bounty is your love.", - "Are you wearing space pants? Because I want to space your pants.", - "You give me a positive moodlet.", - "Let's make like swarmers and reproduce.", - "If you were a drone, would you be free tonight?", - "Get the paramedics -- your body put me into crit!", - "Come to the incinerator and be my maint squeeze.", - "Come to the courtroom so we can spend some time alone.", - "I'm the gray tide -- may I take your hand tele?", - "If I were a clown car, would you come inside me?", - "If you were telecoms, would you go down on me?", - "Your face gets me higher than omega weed.", - "Someone check the tachyon doppler array, because you just rocked my world.", - "I wish I were your family heirloom so I could be with you all the time.", - "How much damage does a toxins bomb do? Enough to break the ice.", - "Call me a gibtonite deposit, because I've got a lot of love to gib tonite.", - "I don't need an ion cannon, I've got my ion you.", - "I don't need the chef's cooking when you're such a snack!", - "Does the Chaplain know there's a goddess on board?", - "The captain just ordered Build Your Own Shuttle -- guess you'll have to sit on my face.", - "Let's get to a pod and share our internals.", - "Stand still so I can set your face to Wanted.", - "Did you just go through the teleporter? Because you're looking pretty fly.", - "Nice jumpsuit. It'd look even better thrown down disposals.", - "Heat up 5 parts cream, 5 parts lizard wine, and 1 part strange reagent to 374K, and you'll know what I can do for you." - ], - - "candyhearts": [ - "A heart-shaped candy that reads: HONK ME", - "A heart-shaped candy that reads: BWOINK ME", - "A heart-shaped candy that reads: ERP", - "A heart-shaped candy that reads: LEWD", - "A heart-shaped candy that reads: LUSTY", - "A heart-shaped candy that reads: SPESS LOVE", - "A heart-shaped candy that reads: VALIDTINES", - "A heart-shaped candy that reads: FACE HUGGER", - "A heart-shaped candy that reads: BOX OF HUGS", - "A heart-shaped candy that reads: PET ME", - "A heart-shaped candy that reads: TO THE DORMS", - "A heart-shaped candy that reads: TABLE ME", - "A heart-shaped candy that reads: HAND CUFFS", - "A heart-shaped candy that reads: SHAFT MINER", - "A heart-shaped candy that reads: Y-YOU T-TOO", - "A heart-shaped candy that reads: SINGULOVE", - "A heart-shaped candy that reads: GOT WOOD", - "A heart-shaped candy that reads: TFW NO GF", - "A heart-shaped candy that reads: WAG MY TAIL", - "A heart-shaped candy that reads: PDA", - "A heart-shaped candy that reads: DEVILS KISS", - "A heart-shaped candy that reads: CHEMISTRY", - "A heart-shaped candy that reads: CLUSTERBANG", - "A heart-shaped candy that reads: OBSESSED", - "A heart-shaped candy that reads: ROMANTIC MOODLET", - "A heart-shaped candy that reads: WAIFU", - "A heart-shaped candy that reads: YOU'RE PURRFECT" - ] -} diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index 2ab914a7793..e414bfc32b8 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -32,7 +32,6 @@ export const MESSAGE_TYPE_LOOC = 'looc'; export const MESSAGE_TYPE_ADMINPM = 'adminpm'; export const MESSAGE_TYPE_COMBAT = 'combat'; export const MESSAGE_TYPE_ADMINCHAT = 'adminchat'; -export const MESSAGE_TYPE_MENTORCHAT = 'mentorchat'; export const MESSAGE_TYPE_PRAYER = 'prayer'; export const MESSAGE_TYPE_EVENTCHAT = 'eventchat'; export const MESSAGE_TYPE_ADMINLOG = 'adminlog'; @@ -120,13 +119,6 @@ export const MESSAGE_TYPES = [ selector: '.admin_channel, .adminsay', admin: true, }, - { - type: MESSAGE_TYPE_MENTORCHAT, - name: 'Mentor Chat', - description: 'MSAY messages', - selector: '.mentor, .mentoradmin', - admin: true, - }, { type: MESSAGE_TYPE_PRAYER, name: 'Prayers', diff --git a/tgui/packages/tgui/interfaces/Secrets.js b/tgui/packages/tgui/interfaces/Secrets.js index 18b3b6b6b39..376cc4de209 100644 --- a/tgui/packages/tgui/interfaces/Secrets.js +++ b/tgui/packages/tgui/interfaces/Secrets.js @@ -530,12 +530,6 @@ export const Secrets = (props, context) => { content="Admin Log" onClick={() => act('admin_log')} /> -