Merge pull request #7 from quotefox/master

a
This commit is contained in:
shellspeed1
2019-11-26 21:42:11 -08:00
committed by GitHub
105 changed files with 2288 additions and 233 deletions
+24 -21
View File
@@ -697,7 +697,7 @@
"anu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on,/turf/open/floor/plasteel,/area/hallway/primary/fore)
"anv" = (/obj/machinery/holopad,/turf/open/floor/plasteel,/area/hallway/primary/fore)
"anw" = (/obj/machinery/atmospherics/components/unary/vent_pump/on,/turf/open/floor/plasteel,/area/hallway/primary/fore)
"anx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Courtroom"},/turf/open/floor/plasteel/dark,/area/security/courtroom)
"anx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Courtroom"},/turf/open/floor/plasteel/dark,/area/security/courtroom)
"any" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 1},/turf/open/floor/plasteel/dark,/area/security/courtroom)
"anz" = (/obj/machinery/light/small,/turf/open/floor/plasteel/dark,/area/security/courtroom)
"anA" = (/obj/machinery/airalarm{dir = 1; pixel_y = -22},/turf/open/floor/plasteel/dark,/area/security/courtroom)
@@ -1016,8 +1016,8 @@
"atB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 4},/turf/open/floor/plasteel/dark,/area/crew_quarters/fitness)
"atC" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atD" = (/obj/effect/turf_decal/tile/red,/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atE" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Holodeck Door"},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atF" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atE" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Holodeck Door"},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atF" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atG" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atH" = (/obj/machinery/camera{c_tag = "Holodeck"},/obj/machinery/airalarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"atI" = (/obj/effect/spawner/structure/window/reinforced,/turf/open/floor/plating,/area/crew_quarters/fitness)
@@ -1123,7 +1123,7 @@
"avE" = (/obj/structure/chair/stool{pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/crew_quarters/dorms)
"avF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel,/area/crew_quarters/dorms)
"avG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/open/floor/plasteel,/area/crew_quarters/dorms)
"avH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Fitness"},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"avH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Fitness"},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"avI" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"avJ" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"avK" = (/obj/effect/landmark/event_spawn,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/crew_quarters/fitness)
@@ -1194,14 +1194,14 @@
"awX" = (/obj/structure/chair/stool{pixel_y = 8},/obj/effect/landmark/start/assistant,/turf/open/floor/plasteel,/area/crew_quarters/dorms)
"awY" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/turf/open/floor/plasteel,/area/crew_quarters/dorms)
"awZ" = (/obj/structure/cable{icon_state = "2-4"},/turf/open/floor/plasteel,/area/crew_quarters/dorms)
"axa" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Fitness"},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axa" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Fitness"},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axb" = (/obj/structure/cable{icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axc" = (/obj/structure/cable{icon_state = "1-2"},/obj/structure/cable{icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axd" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/turf/open/floor/plasteel/dark,/area/crew_quarters/fitness)
"axe" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/dark,/area/crew_quarters/fitness)
"axf" = (/obj/machinery/door/window/eastright{base_state = "left"; icon_state = "left"; name = "Fitness Ring"},/obj/structure/window/reinforced,/turf/open/floor/plasteel/dark,/area/crew_quarters/fitness)
"axg" = (/obj/effect/turf_decal/tile/green,/obj/effect/turf_decal/tile/green{dir = 4},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axj" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/turf/open/floor/plasteel,/area/crew_quarters/fitness)
"axk" = (/obj/machinery/door/airlock/maintenance{dir = 4; req_access_txt = "12"},/turf/open/floor/plating,/area/crew_quarters/fitness)
@@ -2022,7 +2022,7 @@
"aMT" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel,/area/hallway/primary/port)
"aMU" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/open/floor/plasteel,/area/hallway/primary/port)
"aMV" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/port)
"aMW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Central Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aMW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Central Access"},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aMX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aMY" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/open/floor/plasteel,/area/hallway/primary/central)
"aMZ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/turf/open/floor/plasteel,/area/hallway/primary/central)
@@ -2091,7 +2091,7 @@
"aOk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/port)
"aOl" = (/obj/structure/sign/directions/security{dir = 4; pixel_x = 32; pixel_y = -24},/obj/structure/sign/directions/evac{dir = 4; pixel_x = 32; pixel_y = -32},/obj/structure/sign/directions/engineering{pixel_x = 32; pixel_y = -40},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/port)
"aOm" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/port)
"aOn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Central Access"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aOn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Central Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aOo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aOp" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=QM"; location = "CHW"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aOq" = (/obj/effect/turf_decal/tile/blue{dir = 8},/obj/effect/turf_decal/loading_area{dir = 2; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/central)
@@ -2540,11 +2540,11 @@
"aWR" = (/obj/structure/disposalpipe/segment{dir = 9},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/library)
"aWS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/library)
"aWT" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/turf/open/floor/carpet,/area/library)
"aWU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Chapel"},/turf/open/floor/carpet,/area/chapel/main)
"aWU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Central Access"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/central)
"aWV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/open/floor/carpet,/area/chapel/main)
"aWW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/carpet,/area/chapel/main)
"aWX" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/open/floor/carpet,/area/chapel/main)
"aWY" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Chapel"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/chapel/main)
"aWY" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Chapel"},/turf/open/floor/carpet,/area/chapel/main)
"aWZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel/white/corner{dir = 1},/area/hallway/secondary/exit)
"aXa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/secondary/exit)
"aXb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/landmark/event_spawn,/turf/open/floor/plasteel,/area/hallway/secondary/exit)
@@ -2632,7 +2632,7 @@
"aYF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/carpet,/area/chapel/main)
"aYG" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/open/floor/carpet,/area/chapel/main)
"aYH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/carpet,/area/chapel/main)
"aYI" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Chapel"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/carpet,/area/chapel/main)
"aYI" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Chapel"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/chapel/main)
"aYJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel/white/corner{dir = 1},/area/hallway/secondary/exit)
"aYK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/secondary/exit)
"aYL" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/secondary/exit)
@@ -2916,7 +2916,7 @@
"bed" = (/obj/effect/turf_decal/loading_area{dir = 2; icon_state = "drain"; name = "drain"},/obj/machinery/light,/turf/open/floor/plasteel,/area/hallway/primary/central)
"bee" = (/obj/effect/turf_decal/tile/blue,/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bef" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/turf_decal/tile/blue,/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"beg" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Central Access"},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"beg" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Chapel"},/turf/open/floor/carpet,/area/chapel/main)
"beh" = (/obj/machinery/door/firedoor,/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bei" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway"; dir = 2},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bej" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel/white/side{dir = 2},/area/hallway/primary/starboard)
@@ -3188,7 +3188,7 @@
"bjp" = (/obj/machinery/vending/snack/random,/turf/open/floor/plasteel,/area/crew_quarters/bar)
"bjq" = (/obj/machinery/door/airlock/maintenance{dir = 4; name = "Detective Maintenance"; req_access_txt = "4"},/turf/open/floor/plating,/area/maintenance/port)
"bjr" = (/obj/machinery/camera{c_tag = "Central Hallway East"; dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/status_display{pixel_x = -32},/obj/effect/turf_decal/tile/blue{dir = 8},/obj/effect/turf_decal/loading_area{dir = 8; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/central)
"bjs" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Central Access"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bjs" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Chapel"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/carpet,/area/chapel/main)
"bjt" = (/obj/machinery/door/firedoor,/obj/effect/turf_decal/loading_area{dir = 2; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bju" = (/obj/machinery/light,/obj/effect/turf_decal/tile/blue{dir = 8},/obj/effect/turf_decal/loading_area{dir = 2; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bjv" = (/obj/effect/landmark/event_spawn,/obj/effect/turf_decal/loading_area{dir = 2; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
@@ -4376,6 +4376,7 @@
"bGh" = (/obj/machinery/computer/card/minor/cmo{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/turf_decal/tile/blue{dir = 4},/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel/cafeteria,/area/crew_quarters/heads/cmo)
"bGi" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/obj/machinery/computer/security/telescreen/cmo{dir = 1; pixel_y = -24},/obj/effect/turf_decal/tile/blue{dir = 4},/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel/cafeteria,/area/crew_quarters/heads/cmo)
"bGj" = (/obj/structure/closet/secure_closet/CMO,/obj/machinery/light{dir = 4},/obj/effect/turf_decal/tile/blue{dir = 4},/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel/cafeteria,/area/crew_quarters/heads/cmo)
"bGk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Central Access"},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bGl" = (/turf/open/floor/engine,/area/science/xenobiology)
"bGm" = (/obj/machinery/camera{c_tag = "Xenobiology Test Chamber"; dir = 2; network = list("xeno","rd")},/obj/machinery/light{dir = 1; pixel_y = 16},/turf/open/floor/engine,/area/science/xenobiology)
"bGn" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel,/area/science/storage)
@@ -4449,6 +4450,8 @@
"bHD" = (/obj/structure/table,/obj/item/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/storage/box/syringes,/obj/item/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/reagent_containers/glass/bottle/morphine{pixel_x = 8; pixel_y = -3},/obj/item/reagent_containers/syringe{pixel_x = 6; pixel_y = -3},/obj/item/radio/intercom{freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 30},/turf/open/floor/plasteel/white,/area/medical/sleeper)
"bHE" = (/obj/item/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = -30},/obj/machinery/camera{c_tag = "Medbay South"; network = list("ss13","medbay"); dir = 4},/turf/open/floor/plasteel/white,/area/medical/medbay/central)
"bHF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/unary/vent_scrubber/on,/turf/open/floor/plasteel/white,/area/medical/medbay/central)
"bHG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Central Access"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bHH" = (/obj/machinery/door/airlock/public/glass{dir = 4; name = "Central Access"},/turf/open/floor/plasteel,/area/hallway/primary/starboard)
"bHJ" = (/obj/machinery/airalarm{dir = 4; pixel_x = -22},/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/science/storage)
"bHK" = (/turf/open/floor/plasteel,/area/science/storage)
"bHL" = (/obj/effect/decal/cleanable/oil,/obj/item/cigbutt,/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 4},/turf/open/floor/plasteel,/area/science/storage)
@@ -7061,21 +7064,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGQayUayWaGRaBeaBeaGSaGTaGUaGTaBeazcazcazcazcaGVaCFaGWaGXazcaGYaCIaElaElaElaGZaElaElaCPaHaaBqaaaaAxaAxaHbaHcaHbaAxaAxaaaaxYaxZayaaHdaHeaHfaHgaHhayaaqsaHiayqaHjayoaHkaFLaHlayoaHmayqaAQaAQayqaHnayqaHoaHpaHqahfanDaASaASaASaASaASaHraHsazFaHtaHuazFaHvazFaHxazFaGdaGhaHJaGhaHAaHGbiBbiCaHEaHFaHIaHIaIYaIZaJcaKmaHIaHKaHLaHMaxpaxpaxpaHNaHOaHPaHQaHRamIaHSaHSaHSaHTaHUaFbaHVaHWaHXaHYaHZaIaaFcaIbaIcaFcaIdaIeaIfaIgaGIaIhaFfaFgaDYaIiaIjaGPaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUayWaxBaIkaIlaImaIlaInaxBaIoaIpaIqaIrazcaIsaCFaCFaItazcaIuaCIaElaIvaIwaIxaIyaIzaIAaIBaBqaaaaadaaaaICaIDaICaaaaadaaaaxYaxZayaaIEaIFaIGaFGaIHayaaqsapyayqaIIayoaFLaFLaFLaIJaIKayqaaaaaaaILaIMaINaIOaIPaIQaIRaISaILaaaaaaaITaIUaIVaIWazFaIXaHuaHuaHuaHuaHuazFaJaaJbaJdaJeaJdaJdaNtaPQbiDaBTaBTaJfaKhaKiaKjaKkaJiaJiaJjaJkaJlaJiaJmaHSaHSaJnaHTaHSaHSaHSaJoaJpaHTaHUaFbaJqaJraJsaJtaJuaJvaFcaJwaJxaJyaJzaJAaJBaJCaJDaIhaFfaJEaDYaGNaJFaGPaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUayWaxBaJGaJHaJIaJHaJJaJHaJHaJHaJKaxBazcaJLaJMaJLazcazcaJNaJOaJNaBnaBnaBnaBnaJNaJPaJQaBqaJRaJSaJSaJTaJUaJVaJSaJSaJWaxYaJXayaaJYayaaJZaKaaKbayaarjaoJayqayqayqaAQaKcaAQayqayqayqaILaILaILaKdaIPaIPaIPaIPaIPaKeaILaILaILaITaKfaIVaKgazFaLMazFazFazFazFazFaJdaGaaKsbiEaKtbgUaKoaMcaLQaLcaLTaBTaKpaKraKraKjaLSaJiaLUaKuaKvaKwaJiaKxaKyaKzaKAaKBaKCaKDaKEaKFaKGaHTaHUaFbaKHaKIaKJaJtaJuaKKaFcaKLaKMaKNaKOaKPaKQaKRaFcaFcaKSaFgaDYaIiaIjaGPaaaaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauSaKTaxBaKUaKVaKWaKXaKYaKZaweaLaaLbaxBaLjaLdaLeaLeaLfaLeaLeaLgaLeaLeaLeaLeaLeaLeaLhaLiaLqaLkaLlaLmaLmaLnaLmaLmaLmaLmaLoaLpaLxaLraLmaLsaLmaLtaHpaLuaLvaLwaLRalSaIRaIRaIRaLNaLPaLPbiFaLPaLPaLAaLBaLCaLDaLEaLFaLGaLPaLPbiFaLHaLIaLJaLKaPJbcXaNKbiGaLPbiHbiIaOCaLVaKsaLWaWHaLXaLYaOvaNjaNlaNnaBTaLZaMaaMbaNkaNmaJiaMdaKuaMeaMfaJiaJiaMgaMhaMiaMjaMkaMlaMmaMnaMoaHTaHUaFbaMpaMpaMqaMraMpaMpaFcaMsaMtaFcaMuaKRaKRaKRaFcaMvaMwaMxaDYaCwaCwaCwaMyaMyaMyaMzaMzaMzaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUayVayUayUayUayUayUayUayVayUaaaauSaBdaMAaKUaMBaMCaMDaMEaMFaweaMGaLbaMHaIkaLdaMIaMJaMKaMLaMLaMMaLeaLeaLeaLeaLeaLeaLeaLiaLeaLdaMNaLeaLeaMOaMPaMQaMQaMQaMRaMSaMQaMTaMQaMUaMQaMVaMWaMXaMYaMZaIPaKlaIPaIPaIPaIPaIPaIPaLzaIPaIPaNaaNbaNcaNdaNeaNfaNgaIPaIPaLzaIPaNhaIPaIPaIPaIPaIPaIPaIPaNiaIPaOCaNoaNpaNqaNraStaNsbiJaOwaOxaOyaBTaNuaOuaOuaHBaOzaJiaNvaKuaNwaNxaNyaJiaHSaHSaNzaHSaHSaHSaNAaNBaNAaHTaHUaFbaNCaMpaMpaNDaMpaNEaFcaFcaFcaFcaFcaFcaFcaNFaFcaFfaFfaFgaDYaNGaNHaCwaNIaNJaRkaNLaNMaMzaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauSaAaauSayUaxyayUaNNaNOaNPaNQayUaxyayUayUauSayWaxBaKUaNRaNSaMDaMEaMFaweaNTaLbaxBaIkaLdaLeaNUaNVaNVaNVaNWaNXaNYaNVaNZaNVaNVaNVaOaaNVaObaNVaNVaNVaOcaOdaOeaOfaOfaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaIPaOqaOqaOqaOraOqaOqaOqaOqaOsaOqaOqaOqaOqaOqaOqaOtaOqaOqaOqaOqaPPaOqaOqaOqaOqaOqaOqaOtaOqaIPaIPaIPaJdaPLaStaStaStaStaRiaMcaLQaPOaNnaBTaBTaPKaBTaBTaBTaJiaOAaOBaODaWFaOEaJiaHSaOFaOGaOHaOIaOHaOHaOJaOKaHTaHUaFbaOLaOLaOMaONaOOaOOaOPaFbaOQaORaOSaCwaFfaGNaOTaFfaFfaOUaOVaCwaOWaCwaOXaOYaOZaPaaPbaMzaMzaMzaMzaMzaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauSaKTaxBaKUaKVaKWaKXaKYaKZaweaLaaLbaxBaLjaLdaLeaLeaLfaLeaLeaLgaLeaLeaLeaLeaLeaLeaLhaLiaLqaLkaLlaLmaLmaLnaLmaLmaLmaLmaLoaLpaLxaLraLmaLsaLmaLtaMWaLuaLvaLwaLRalSaIRaIRaIRaLNaLPaLPbiFaLPaLPaLAaLBaLCaLDaLEaLFaLGaLPaLPbiFaLHaLIaLJaLKaPJbcXaNKbiGaLPbiHbiIaOCaLVaKsaLWaWHaLXaLYaOvaNjaNlaNnaBTaLZaMaaMbaNkaNmaJiaMdaKuaMeaMfaJiaJiaMgaMhaMiaMjaMkaMlaMmaMnaMoaHTaHUaFbaMpaMpaMqaMraMpaMpaFcaMsaMtaFcaMuaKRaKRaKRaFcaMvaMwaMxaDYaCwaCwaCwaMyaMyaMyaMzaMzaMzaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUayVayUayUayUayUayUayUayVayUaaaauSaBdaMAaKUaMBaMCaMDaMEaMFaweaMGaLbaMHaIkaLdaMIaMJaMKaMLaMLaMMaLeaLeaLeaLeaLeaLeaLeaLiaLeaLdaMNaLeaLeaMOaMPaMQaMQaMQaMRaMSaMQaMTaMQaMUaMQaMVaOnaMXaMYaMZaIPaKlaIPaIPaIPaIPaIPaIPaLzaIPaIPaNaaNbaNcaNdaNeaNfaNgaIPaIPaLzaIPaNhaIPaIPaIPaIPaIPaIPaIPaNiaIPaOCaNoaNpaNqaNraStaNsbiJaOwaOxaOyaBTaNuaOuaOuaHBaOzaJiaNvaKuaNwaNxaNyaJiaHSaHSaNzaHSaHSaHSaNAaNBaNAaHTaHUaFbaNCaMpaMpaNDaMpaNEaFcaFcaFcaFcaFcaFcaFcaNFaFcaFfaFfaFgaDYaNGaNHaCwaNIaNJaRkaNLaNMaMzaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauSaAaauSayUaxyayUaNNaNOaNPaNQayUaxyayUayUauSayWaxBaKUaNRaNSaMDaMEaMFaweaNTaLbaxBaIkaLdaLeaNUaNVaNVaNVaNWaNXaNYaNVaNZaNVaNVaNVaOaaNVaObaNVaNVaNVaOcaOdaOeaOfaOfaOfaOgaOhaOiaOjaOkaOlaOmaWUaOoaOpaIPaOqaOqaOqaOraOqaOqaOqaOqaOsaOqaOqaOqaOqaOqaOqaOtaOqaOqaOqaOqaPPaOqaOqaOqaOqaOqaOqaOtaOqaIPaIPaIPaJdaPLaStaStaStaStaRiaMcaLQaPOaNnaBTaBTaPKaBTaBTaBTaJiaOAaOBaODaWFaOEaJiaHSaOFaOGaOHaOIaOHaOHaOJaOKaHTaHUaFbaOLaOLaOMaONaOOaOOaOPaFbaOQaORaOSaCwaFfaGNaOTaFfaFfaOUaOVaCwaOWaCwaOXaOYaOZaPaaPbaMzaMzaMzaMzaMzaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaweawfaweayUaBcayUayWaxBaxBayXayUaBcayUaPcaPdaPeaxBaKUaPfaPgaKXaPhaKZaweaPiaLbaxBaPjaPjaPjaPkaPlaPlaPlaPlaPlaPlaPmaPnaPlaPoaPlaPlaPlaPpaPqaPraPqaPsaPtaPuaLeaLeaPvaPwaPxaLeaPyaPzaLeaPAaPAaPMaRgaRmaILaILaILaILaILaILaILaILaPCaPDaPEaPFaPEaPEaPEaPGaPEaPHaPEaPIaPCaILaILaILaILaILaILaILaILaPMaTSaUTaJdaVjaRiaRiaRiaRiaKsaMcaLQaRjaKsaRsaKsaKsaVnaJiaRnaJiaJiaPRaJkaJiaJiaJiaJiaOHaPSaPTaPTaPTaPTaPUaOHaHTaHUaFbaPVaMpaOMaONaMpaMpaPWaFbaPXaPYaPZaCwaFfaIiaQaaQbaQbaQcaQdaQeaQfaCwaQgaQhaQiaQjaQjaQkaQlaQlaQmaQlaQnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQoaaaaaaaaaaxwaXfaxyaxzaQpaxBaQqaPeaxBaxBaQraQqaxBaQpaPeaxBaxBaxBaQsaQtaQuaQvaQwaQxaQxaQyaQzaxBaPjaQAaPjaQBaPlaQCbiKaQEaQFaQGaQDaQHaQIaQJaQKaQLaQMaPpaQNaQOaQPaPsaQQaPuaPuaQRaPuaPuaPAaPAaQSaQTaPAaPAaPAaQUbiLbbeaILaaaaaaaaaaaaaaaaaaaaaaPCaKnaQVaQWaQXaQYaQZaRaaRbaRcaRdaReaPCaaaaaaaaaaaaaaaaaaaaaaILaIOaIPaIPbiMaKsaKsaKsaRlaKsaKsaRfaSfaRjaKsaSraKsaKsaKsbaEaSBaRoaRpaRqaRraRtaRuaSuaJiaOHaRvaVsbiNbiNbiOaRxaOHaHTaRyaFbaRzaRzaOMaONaRAaRAaRBaFbaFbaRCaFbaCwaRDaGNaOTaREaRFaOUaOVaCwaCwaCwaMzaRGaRHaMzaMzaMzaMzaMzaMzaMzaRIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaweaRJawgaRKaRLaRLaRLaRLaRLaRLaRLaRLaRKaRLaRMaxBaxBaIkaxBaRNaROaxBaRPaxBaRQaRRaRSaPjaRTaPjaQBaPlaRUaQDaQDaQDaQDaQDaQHaQDaQDaQDaQDaQMaPpaRVaQOaQOaPsaQQaPuaRWaRXaRXaRYaPAaRZaSaaSbaScaSdaSeaIPbiLbbeaILaaaaaaaaaaaaaPCaPCaPCaPCaSgaShaSiaSjaSkaSlaSmaSnaSoaSpaSvaPCaPCaPCaPCaaaaaaaaaaaaaILaIOaIPaIPaSqaKsaKsaSsaStaSwbiPaSzaSAaRjaSsaTTaSwaKsaTUaJiaWKaSCaSDaSEaSFaSGaSHaSBaSIaSJaSKbiQaSLaSMbiRaSNaOHaHTaHUaFbaMpaMpaOMaONaRAaRAaMpaSOaSPaMpaSQaCwaKSaSRaSSaREaREaSTaSUaSVaCwaSWaSXaQhaQiaQjaQjaSYaQlaQlaQlaQlaSZaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauSauSauSauSayUayUayUayUayUayUayUayUauSauSaweaIkaTbaTcaTcaTdaTcaTcaTcaTcaTeaTcaTcaPjaRTaTfaTgaPlaThaQDaTiaTjaTkaTlaTmaTnaToaQDaQDaTpaPpaTqaTraTsaPsaQQaPuaTtaTuaTvaTwaPAaTxaTyaSbaTzaTAaSeaIPaPBbbeaILaILaTBaPCaPCaPCaTCaTDaTEaTFaTGaTHaTIaTJaTHaTKaTHaTLaTMaTNaTOaTPaTQaPCaPCaPCaTBaILaILaLzaLzbbfaJdaKsaKsaSsaVmaSwbiSaWIaTVaKqaSsbiTaSwaKsaKsaVoaSBaSBaWJaTXaTYaTZaUaaSBaUbaUcaUdbiQaUeaUfbiRaUgaUhaHTaHUaFbaUiaUiaOMaONaUjaMpaMpaUkaMpaUlaUmaCwaUnaUoaUpaREaREaUqaUraFfaCwaUsaQjaQhaQiaQjaPbaMzaMzaMzaMzaMzaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUaAcazaaUtaTcaUuaUvaUwaUxaUwaUyaUzaUwaTcaRTaRTaUAaUBaPlaUCaUDaUEaUFaUGaUHaUIaUJaUKaULaUMaQMaPpaPpaPpaPpaPsaQQaPuaPuaPuaPuaPuaPAaUNaUOaUPaTzaUQaSeaIPaIPaLyaIRaIRaURaUSaZQaPCaUUaUVaUWaUXaUYaUXaUZaVaaVbaVcaVdaVeaVfaVdaVgaVhaViaPCaZRaUSaVkaVlaIRaIOaIPaxxaJdaSyaKsaSsbiUaSwaKsaZMaZMaKsaSsaStaSwaKsaKsaVoaSBaSBbgZbiVaVpaVpaUaaWLaJiaVraUdbiWbiXbiXbiYaUgaVtaHTaVuaFbaFbaFbaOMaONaVvaVwaMpaVxaVyaKJaVzaCwaFfaSRaSSaREaREaVAaSUaVBaCwaVCaQjaQhaQiaQjaPbaMzaZNaZOaZPaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVDayUayUayWaxBaTcaVEaVFaVGaUuaVHaVIaUzaUwaTcaVJaVKaVLaPjaPlaVMaVNaVOaVPaVQaVQaVRaVQaVQaVQaVSaVTaPlaVUaVVaVWaVXaVYaVZaWaaWbaWcaWdaWdaWdaWdaWdaWdaWdaWdbbVaIPaIPaIPaIPaWeaWfaWgaWhaWiaWjaWkaWlaWmaWnaWoaWpaWqaWraWsaWtaWuaWvaWkaWwaWxaWyaWzaWAaWBaWCaWDaWEaIPaIPbbXbiZaKsaKsaKsaKsbjaaZMaZMaKsaSsaStaSwaKsaKsaVoaSBaSBaSBaSBaSBaSBaUaaYoaJiaOHaUdaRwaRwaRwaRwaUgaOHaHTaWMaWNaWOaWPaWQaWRaWSaWSaWTaOMaOMaOMaOMaWUaREaREaREaREaREaWVaWWaWXaWYaWZaXaaXbaXcaPaaXdaMzaZPaZOaZOaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXeaXgaxybhaaxBaxBaTcaXhaXiaXjaXkaXkaXlaXmaXnaTcaXoaRTaVLaXpaXpaXpaXqaXraXpaXsaXtaXuaXvaXwaXwaXxaXyaPlaXzaXAaXBaXCaXDaXEaXBaXFaXGaXGaXHaXIaXJaXKaXLaXMaWdbbVaIPaXNaXOaXPaXQaXRaXSaPCaXTaXUaXVaXWaXXaXYaXYaXZaYaaYbaYcaYdaYeaYfaXVaYgaXTaPCaXSaXRaYhaYiaXOaYjaIPaIPbebbbXbiZaKsaKsaKsaKsaKsaKsaKsaRlbjbaKsaKsaKsaJiaYpaYqaSBaSBaYraSBaYXbhyaJiaYsaYtaRwaYuaYuaYvaYtaYwaYxaYyaYzaYzaYAaYBaYCaOMaOMaYDaOMaOMaOMaOMaWUaYEaYFaYFaYFaYFaYFaYGaYHaYIaYJaYKaYLaYMaQjaYNaMzbjhaZOaZNaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVDayUayUayWaxBaTcaVEaVFaVGaUuaVHaVIaUzaUwaTcaVJaVKaVLaPjaPlaVMaVNaVOaVPaVQaVQaVRaVQaVQaVQaVSaVTaPlaVUaVVaVWaVXaVYaVZaWaaWbaWcaWdaWdaWdaWdaWdaWdaWdaWdbbVaIPaIPaIPaIPaWeaWfaWgaWhaWiaWjaWkaWlaWmaWnaWoaWpaWqaWraWsaWtaWuaWvaWkaWwaWxaWyaWzaWAaWBaWCaWDaWEaIPaIPbbXbiZaKsaKsaKsaKsbjaaZMaZMaKsaSsaStaSwaKsaKsaVoaSBaSBaSBaSBaSBaSBaUaaYoaJiaOHaUdaRwaRwaRwaRwaUgaOHaHTaWMaWNaWOaWPaWQaWRaWSaWSaWTaOMaOMaOMaOMaWYaREaREaREaREaREaWVaWWaWXaYIaWZaXaaXbaXcaPaaXdaMzaZPaZOaZOaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXeaXgaxybhaaxBaxBaTcaXhaXiaXjaXkaXkaXlaXmaXnaTcaXoaRTaVLaXpaXpaXpaXqaXraXpaXsaXtaXuaXvaXwaXwaXxaXyaPlaXzaXAaXBaXCaXDaXEaXBaXFaXGaXGaXHaXIaXJaXKaXLaXMaWdbbVaIPaXNaXOaXPaXQaXRaXSaPCaXTaXUaXVaXWaXXaXYaXYaXZaYaaYbaYcaYdaYeaYfaXVaYgaXTaPCaXSaXRaYhaYiaXOaYjaIPaIPbebbbXbiZaKsaKsaKsaKsaKsaKsaKsaRlbjbaKsaKsaKsaJiaYpaYqaSBaSBaYraSBaYXbhyaJiaYsaYtaRwaYuaYuaYvaYtaYwaYxaYyaYzaYzaYAaYBaYCaOMaOMaYDaOMaOMaOMaOMbegaYEaYFaYFaYFaYFaYFaYGaYHbjsaYJaYKaYLaYMaQjaYNaMzbjhaZOaZNaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUayUayUayWaYOaYPaYQaYRaYSaYSaYSaYSaYTaUuaTcaYUaYVaVLaXpaYWbaKaYYaYZaXpaZaaZbaZcaPlaZdaZeaZfaZgaPlaZhaZiaZjaZkaZjaZlaZmaZnaWdaZoaZpaZpaZqaZraZsaZtaWdbbYaLzaZuaZvaZvaZvaZvaZvaZvaZwaZxaZyaXXaXZaZzaZAaZAaZBaZAaZAaZCaYbaYeaZDaZEaZFaZDaZDaZDaZDaZDaZDbjiaIPaIPbgTbjjbbXbiZbjkaSwbjlaKsaKsaKsaWGaKsaKsbjmaYkaJibjnaJiaZSaYlaZTaZTaJiaJiaJiaZUaRwaRwaZVaZWaZXaZYaZWaHTaZZbaababaFbbacbadbaeaVwaMpbafaUkaVwbagaCwbahaFfbaiaREaREbaiaFfbajaCwbakbalbamaQiaQjaPbaMzaMzaMzaMzaMzaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUbanaPebaoaTcaUwaVFaUwaUubapaUwbaqaUwaTcbarbasbataXpaXpaXpbaubavaXpaZbbawaZbaPlaZdaZeaZfaZgaPlaZhaZibaxbayaZjbazaZmaZnaWdbaAaZpaZpaZGbaBaZpbaDbbxaIPaIPbbZaZvbaFbaGbaHbaIbaJbcebaLbaMbaNbaOaZAaZAbaPbaQbaPaZAaZAbaRbaSbaCbaTbaUbaXbaYbbzbaVbaWaZDbjoaIPaIPbgTbgTbjpbbXaJdaJdaJdbbbaSqbbbaJdbbcaJdaJdaJdaJibcbbdZbbdbbdbbdbbdbcfbdHaJiaZWbbgbbgaZWbaabaabaabaaaHTaZZbaababaFbaFbaFbbbhaFbbbhaFbbbhaFbaFbaCwaCwbbibbibbibbibbibbiaCwaCwbbjaQjbbkaQiaQjaQjbblaQlaQlaQlaQlaSZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadauSauSayUayUayUayUayUayUayUayUauSauSaweaxBaxBaTcaTcaTdaTcaTcaTcaTcaTeaTcaTcbbmbbnbboaXpaYWbbpbaubbqaXpbbrbbsbbraPlaZdaZeaZfaZgaPlbbtaZiaZjbbubbvbbwaZmaZnbjqaZsbbybaZbbabbAaZpbaDbbCaIPaIPaXNbbDbbEbaJbbFbbGbbGbbHbbIbbJbaNbbKaZAaZAbaPbbLbaPaZAaZAbbMbaSbbBbbNbpdbbRbbSbcWbaWbbOaZDbjobbUaIPaIPbaabaabaabecbegbehbaabaabaabeibembembembembeobaabaabaabaabaabaabaabaabehbaabaabaabaabaabaabaabcabepbccbcdbaabesbembembaabembaabembaabembekbeobfObaabaabaabaabaabaabbWbcgaSXaQjbchbcibcjbckaMzaMzaMzaMzaMzaRIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUawhawiawiawiawiawiawiawiawiawhawibclaxDaxDbcmbcnbcobcpbcpbcpbcqbcrbcsaPjbctbcubcvaXpaXpaXpbcwbcxaXpaPlaPlaPlaPlaZdaZebcybczaPlaZhaZiaZjbcAbcBbcCbcDbcEbcFbcGbcGbcGbcHbcIaZsbcJaWdaQUaNhaXNbcKbcLbaJbcMbcNbcObcPbcQbcRbaNbcSbaPaZAbcTbcUbcTaZAbaPaZCbaSbbPbbNbpdbbRbdVbcWbaWbaWaZDbjraIPaIPaIPbaabaabaabaabjsbbWbaabaabaabaabcYbaabaabaabaabaabcZaYzaYzaYzaYzbdabaabbWbaabaabaabaabaabaabdbbdcbddbdebdfbdfbdfbdgbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdhbdibdjbdkbdkbdlaQibdmaQjbdnaQlaQlbdoaQlbdpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadayUaxAaxBaxAazaaxBaxBbdqaxAaxBaxAazaaxBaxBaxBbdrbdsbdrbdrbdrbdrbdtbduaPjaPjaPjbdvaVLaXpaYWbdwbdxbbqaXpbdybdzbdyaPlaPlaPlbdAbdBaPlaZhaZibdCbdDbdEbdFaZmaPjaWdaWdaWdaWdaWdaWdaWdbdGaWdbfPaIPaXNbcKbdIbaJbcMbdJbdKbcPbcQbaJbaNbdLbdMaZAbdNbdObdPaZAbdQbdRbaSbbQbbTbcVbdWbdXbjdbaWbdSaZDbjobeaaIPbedbgBbgBbgBbiibjsbjtbeebeebeebfAbefbeebeebjubgBbgBbgBbgBbgBbjvbjwbejbjxbjtbgBbgBbaabaabaabelbjybenbjzbjAbeqbeqbeqbaabgBbgDbjBbgBbgBbaabaabaabaabaabaabaabaabaabaabaabbWbetbeubevbewaQiaQjaPbaMzaMzaMzaMzaMzaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadauSauSayUayUayUayUayUayUayUayUauSauSaweaxBaxBaTcaTcaTdaTcaTcaTcaTcaTeaTcaTcbbmbbnbboaXpaYWbbpbaubbqaXpbbrbbsbbraPlaZdaZeaZfaZgaPlbbtaZiaZjbbubbvbbwaZmaZnbjqaZsbbybaZbbabbAaZpbaDbbCaIPaIPaXNbbDbbEbaJbbFbbGbbGbbHbbIbbJbaNbbKaZAaZAbaPbbLbaPaZAaZAbbMbaSbbBbbNbpdbbRbbSbcWbaWbbOaZDbjobbUaIPaIPbaabaabaabecbGkbehbaabaabaabeibembembembembeobaabaabaabaabaabaabaabaabehbaabaabaabaabaabaabaabcabepbccbcdbaabesbembembaabembaabembaabembekbeobfObaabaabaabaabaabaabbWbcgaSXaQjbchbcibcjbckaMzaMzaMzaMzaMzaRIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayUawhawiawiawiawiawiawiawiawiawhawibclaxDaxDbcmbcnbcobcpbcpbcpbcqbcrbcsaPjbctbcubcvaXpaXpaXpbcwbcxaXpaPlaPlaPlaPlaZdaZebcybczaPlaZhaZiaZjbcAbcBbcCbcDbcEbcFbcGbcGbcGbcHbcIaZsbcJaWdaQUaNhaXNbcKbcLbaJbcMbcNbcObcPbcQbcRbaNbcSbaPaZAbcTbcUbcTaZAbaPaZCbaSbbPbbNbpdbbRbdVbcWbaWbaWaZDbjraIPaIPaIPbaabaabaabaabHGbbWbaabaabaabaabcYbaabaabaabaabaabcZaYzaYzaYzaYzbdabaabbWbaabaabaabaabaabaabdbbdcbddbdebdfbdfbdfbdgbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdfbdhbdibdjbdkbdkbdlaQibdmaQjbdnaQlaQlbdoaQlbdpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadayUaxAaxBaxAazaaxBaxBbdqaxAaxBaxAazaaxBaxBaxBbdrbdsbdrbdrbdrbdrbdtbduaPjaPjaPjbdvaVLaXpaYWbdwbdxbbqaXpbdybdzbdyaPlaPlaPlbdAbdBaPlaZhaZibdCbdDbdEbdFaZmaPjaWdaWdaWdaWdaWdaWdaWdbdGaWdbfPaIPaXNbcKbdIbaJbcMbdJbdKbcPbcQbaJbaNbdLbdMaZAbdNbdObdPaZAbdQbdRbaSbbQbbTbcVbdWbdXbjdbaWbdSaZDbjobeaaIPbedbgBbgBbgBbiibHHbjtbeebeebeebfAbefbeebeebjubgBbgBbgBbgBbgBbjvbjwbejbjxbjtbgBbgBbaabaabaabelbjybenbjzbjAbeqbeqbeqbaabgBbgDbjBbgBbgBbaabaabaabaabaabaabaabaabaabaabaabbWbetbeubevbewaQiaQjaPbaMzaMzaMzaMzaMzaMzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaweayUbexayUayWaxBaxBayXayUbeyayUayYbezbeAbeAbdrbeBbeCbeDbeEbeFbdtbeGbeHbeIbeIbeJbeKaXpaXpaXpbeLbeMaXpaPjaPjaPjaPjbeNbeObePbeQbeObeRaZibeSbeTaZjaZlaZmbeUbeVbeWbeXbeXbeXbeXbeYbeZbeVbjCaIPbbZaZvbaJbfbbfcbfdbfebffbcQbfgbfhaXYbfibfjbfkbfkbfkbflbfmaYdbfnbdTbdUbdYbpxbfobjdbaWbfpaZDbjoaIPbjDbfvbfvbfvbfvbfvbfvbfvbfwbfxbfxbfxbfybfzbfzbfwbjEbjEbjEberberberberberbfBbfBbfBbfCbfBbfBbfBbfBbfBbfGbfHbfIbfJbfJbfJbfKbfLbfLbfLbfLbfLbfMbfNbfNbjFbjGbfNbjHbjIbfNbfNbfRbfSbfSbfSbfSbfTbfUbfVbfWaMzaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaAaauSaAbaxyayUaAcaAdbfXbfYayUaxyaAbayUauSaAaawebdrbfZbgabgabgabgbbgcbgdbgebeObeObgfbggaXpaYWbghbeLbgiaXpbgjbgjaRTbgkbglbgmbgnbgmbgmbgobgpbgqaZkbgrbgsaZmaRTbgtbgubeVbgvbgwbgxbgyaPNbgAbjJbgCbjKaZvbgEaZybgFbgGbgHbgIbcQbgJaZvaadbgKbjLbjMbjMbjMbjNbgMaadaZDbfqbfrbfsbftbaWbfubaWbgNaZDbjoaIPbjObfvbjPbgVbgWbgXbgYbfvbhfbjQbjQbjQbhbbhcbhcbhdbhebjRbhgbfDbfEbfFbhhberbhlbhibhjbhkbhibhmbhnbfBbfBbhobhpbhqbhrbhsbhtbhubhvbhwbhxbjSbfLbhzbhAbhzbfLbhBbhCbhBbfSbhDbhEbhDbfSbhFbhGbfSbhHbhIaMzaMzaMzaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaadaadaadaadayUbhJayUayUayUayUayUayUbhKayUaadaadaadaaabdrbhLbdrbhMbgabhNbhObdraRTaTfbhPbhQbhRbhSbhSbhSbhSbhSbhSbhTbhUbhVbhWbhXbhYbhYbhYbhYbhYbhYaZmbhZaZiaZmbhYbhYbiabibbicbidbiebifbiebigbihbfaaIPbjTaZvbijaZyaZyaZyaZybgIbcQbikaZvaadbgKbjUbilbimbinbjVbgMaadaZDbgObbNbgPbgQbaWbjdbaWbaWaZDbjoaIPbjDbfvbirbisbitbitbiubivbhcbiwbhcbhcbhbbjWbhcbhcbhcbhcbixbfDbjXbjYbjZberbkabhibhibkbbkabkcbhibfBbkdbkebfHbkfbkgbkhbkibkjbkkbklbkmbknbkobkpbkqbkrbfLbksbktbkubfSbgRbgSbgRbiobgRbgRbfSbkzbhIaaaaadaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+598
View File
@@ -0,0 +1,598 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/obj/structure/shuttle/engine/propulsion{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"c" = (
/turf/closed/wall/mineral/plastitanium,
/area/shuttle/escape)
"d" = (
/obj/structure/window/reinforced,
/obj/structure/shuttle/engine/heater{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"e" = (
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/escape)
"f" = (
/turf/open/floor/plating,
/area/shuttle/escape)
"g" = (
/obj/machinery/door/airlock/titanium{
name = "Emergency Shuttle Airlock"
},
/turf/open/floor/plating,
/area/shuttle/escape)
"h" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/escape)
"i" = (
/obj/machinery/door/airlock/titanium{
name = "Emergency Shuttle Airlock"
},
/obj/docking_port/mobile/emergency/shuttle_build{
dwidth = 9;
height = 15;
name = "Shuttle Under Construction";
port_direction = 4;
preferred_direction = 2;
width = 26
},
/turf/open/floor/plating,
/area/shuttle/escape)
"j" = (
/obj/structure/table,
/obj/item/storage/toolbox/mechanical{
pixel_x = 3;
pixel_y = 10
},
/obj/item/storage/toolbox/mechanical{
pixel_y = 4
},
/obj/item/storage/toolbox/mechanical{
pixel_x = -3;
pixel_y = -2
},
/obj/item/airlock_painter,
/turf/open/floor/plating,
/area/shuttle/escape)
"k" = (
/obj/structure/table,
/obj/item/storage/toolbox/electrical,
/obj/item/clothing/gloves/color/yellow{
pixel_y = 8
},
/obj/item/storage/toolbox/electrical,
/obj/item/multitool{
pixel_x = 2;
pixel_y = -4
},
/turf/open/floor/plating,
/area/shuttle/escape)
"l" = (
/obj/structure/table,
/obj/item/storage/box/lights/mixed{
pixel_x = -4;
pixel_y = 8
},
/obj/item/electronics/airalarm{
pixel_x = 8
},
/obj/item/electronics/airalarm{
pixel_x = 8
},
/obj/item/electronics/airalarm{
pixel_x = 8
},
/obj/item/electronics/airalarm{
pixel_x = 8
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/obj/item/electronics/airlock{
pixel_x = -6;
pixel_y = -6
},
/turf/open/floor/plating,
/area/shuttle/escape)
"m" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty{
pixel_x = 3;
pixel_y = 3
},
/obj/item/stack/sheet/metal/fifty{
pixel_x = -2;
pixel_y = -2
},
/obj/item/stack/rods/fifty,
/turf/open/floor/plating,
/area/shuttle/escape)
"n" = (
/obj/structure/table,
/obj/item/stack/sheet/mineral/titanium/fifty{
pixel_x = 3;
pixel_y = 3
},
/obj/item/stack/sheet/mineral/titanium/fifty{
pixel_x = -2;
pixel_y = -2
},
/turf/open/floor/plating,
/area/shuttle/escape)
"o" = (
/obj/structure/table,
/obj/item/stack/sheet/glass/fifty{
pixel_x = 3;
pixel_y = 3
},
/obj/item/stack/sheet/titaniumglass{
pixel_x = -2;
pixel_y = -2
},
/turf/open/floor/plating,
/area/shuttle/escape)
"p" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/escape)
(1,1,1) = {"
a
c
e
e
h
e
e
g
e
i
e
e
h
e
e
g
e
g
e
p
a
a
a
a
a
a
"}
(2,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
e
p
a
a
a
a
a
"}
(3,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
e
a
a
a
a
a
"}
(4,1,1) = {"
c
c
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
e
e
h
h
h
a
"}
(5,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
h
h
"}
(6,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
h
"}
(7,1,1) = {"
b
d
f
f
f
f
f
f
f
f
j
m
f
f
f
f
f
f
f
f
f
f
f
f
f
h
"}
(8,1,1) = {"
c
c
f
f
f
f
f
f
f
f
k
n
f
f
f
f
f
f
f
f
f
f
f
f
f
h
"}
(9,1,1) = {"
b
d
f
f
f
f
f
f
f
f
l
o
f
f
f
f
f
f
f
f
f
f
f
f
f
h
"}
(10,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
h
"}
(11,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
h
h
"}
(12,1,1) = {"
c
c
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
e
e
h
h
h
a
"}
(13,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
e
a
a
a
a
a
"}
(14,1,1) = {"
b
d
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
e
p
a
a
a
a
a
"}
(15,1,1) = {"
a
c
e
e
h
e
e
e
h
e
e
e
h
e
e
e
h
e
e
p
a
a
a
a
a
a
"}
+5
View File
@@ -44,6 +44,10 @@
#define EXAMINE_POSITION_BEFORE 2
//End positions
#define COMPONENT_EXNAME_CHANGED 1
#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon"
#define COMSIG_ATOM_NO_UPDATE_ICON_STATE 1
#define COMSIG_ATOM_NO_UPDATE_OVERLAYS 2 //from base of atom/update_icon(): ()
#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" //from base of atom/update_overlays(): (list/new_overlays)
#define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom)
#define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc)
#define COMPONENT_ATOM_BLOCK_EXIT 1
@@ -150,6 +154,7 @@
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
#define COMSIG_BORG_SAFE_DECONSTRUCT "borg_safe_decon" //sent from borg mobs to itself, for tools to catch an upcoming destroy() due to safe decon (rather than detonation)
// /mob/living/carbon signals
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
+2
View File
@@ -31,3 +31,5 @@
#define MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD "PAI_SPACEWALK_MODIFIER"
#define MOVESPEED_ID_SANITY "MOOD_SANITY"
#define MOVESPEED_ID_TASED_STATUS "TASED"
+1
View File
@@ -30,6 +30,7 @@
#define CHAT_GHOSTPDA (1<<8)
#define CHAT_GHOSTRADIO (1<<9)
#define CHAT_LOOC (1<<10)
#define SHOW_TYPING (1<<11)
#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_LOOC)
+2 -1
View File
@@ -40,4 +40,5 @@
#define PARTICLE_CHANCE_CONSTANT (-20000000)
#define FUSION_RAD_MAX 2000
#define FUSION_RAD_COEFFICIENT (-1000)
#define FUSION_INSTABILITY_ENDOTHERMALITY 2
#define FUSION_INSTABILITY_ENDOTHERMALITY 2
#define FUSION_MAXIMUM_TEMPERATURE 1e8
+6 -6
View File
@@ -3,12 +3,12 @@
#define CHANNEL_ADMIN 1023
#define CHANNEL_VOX 1022
#define CHANNEL_JUKEBOX 1021
#define CHANNEL_JUKEBOX_START 1020
#define CHANNEL_JUSTICAR_ARK 1019
#define CHANNEL_HEARTBEAT 1018 //sound channel for heartbeats
#define CHANNEL_AMBIENCE 1017
#define CHANNEL_BUZZ 1016
#define CHANNEL_BICYCLE 1015
#define CHANNEL_JUKEBOX_START 1016 //The gap between this and CHANNEL_JUKEBOX determines the amount of free jukebox channels. This currently allows 6 jukebox channels to exist.
#define CHANNEL_JUSTICAR_ARK 1015
#define CHANNEL_HEARTBEAT 1014 //sound channel for heartbeats
#define CHANNEL_AMBIENCE 1013
#define CHANNEL_BUZZ 1012
#define CHANNEL_BICYCLE 1011
//CIT CHANNELS - TRY NOT TO REGRESS
#define CHANNEL_PRED 1010
+13
View File
@@ -0,0 +1,13 @@
// Interfaces for the SpacemanDMM linter, define'd to nothing when the linter
// is not in use.
// The SPACEMAN_DMM define is set by the linter and other tooling when it runs.
#ifdef SPACEMAN_DMM
#define RETURN_TYPE(X) set SpacemanDMM_return_type = X
#define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
#define UNLINT(X) SpacemanDMM_unlint(X)
#else
#define RETURN_TYPE(X)
#define SHOULD_CALL_PARENT(X)
#define UNLINT(X) X
#endif
+2
View File
@@ -44,6 +44,8 @@
#define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep
#define STATUS_EFFECT_TASED /datum/status_effect/electrode //the affected has been tased, preventing fine muscle control
#define STATUS_EFFECT_PACIFY /datum/status_effect/pacify //the affected is pacified, preventing direct hostile actions
#define STATUS_EFFECT_BELLIGERENT /datum/status_effect/belligerent //forces the affected to walk, doing damage if they try to run
+6
View File
@@ -396,6 +396,12 @@ GLOBAL_LIST_EMPTY(species_list)
. = 0
break
if(isliving(user))
var/mob/living/L = user
if(L.recoveringstam)
. = 0
break
if(!QDELETED(Tloc) && (QDELETED(target) || Tloc != target.loc))
if((Uloc != Tloc || Tloc != user) && !drifting)
. = 0
+1
View File
@@ -101,6 +101,7 @@
else
return trim(html_encode(name), max_length)
//Filters out undesirable characters from names
/proc/reject_bad_name(t_in, allow_numbers=0, max_length=MAX_NAME_LEN)
if(!t_in || length(t_in) > max_length)
+28 -8
View File
@@ -3,6 +3,7 @@ SUBSYSTEM_DEF(jukeboxes)
wait = 5
var/list/songs = list()
var/list/activejukeboxes = list()
var/list/freejukeboxchannels = list()
/datum/track
var/song_name = "generic"
@@ -21,23 +22,39 @@ SUBSYSTEM_DEF(jukeboxes)
/datum/controller/subsystem/jukeboxes/proc/addjukebox(obj/jukebox, datum/track/T, jukefalloff = 1)
if(!istype(T))
CRASH("[src] tried to play a song with a nonexistant track")
var/channeltoreserve = CHANNEL_JUKEBOX_START + activejukeboxes.len - 1
if(channeltoreserve > CHANNEL_JUKEBOX)
var/channeltoreserve = pick(freejukeboxchannels)
if(!channeltoreserve)
return FALSE
freejukeboxchannels -= channeltoreserve
var/list/youvegotafreejukebox = list(T, channeltoreserve, jukebox, jukefalloff)
activejukeboxes.len++
activejukeboxes[activejukeboxes.len] = list(T, channeltoreserve, jukebox, jukefalloff)
activejukeboxes[activejukeboxes.len] = youvegotafreejukebox
//Due to changes in later versions of 512, SOUND_UPDATE no longer properly plays audio when a file is defined in the sound datum. As such, we are now required to init the audio before we can actually do anything with it.
//Downsides to this? This means that you can *only* hear the jukebox audio if you were present on the server when it started playing, and it means that it's now impossible to add loops to the jukebox track list.
var/sound/song_to_init = sound(T.song_path)
song_to_init.status = SOUND_MUTE
for(var/mob/M in GLOB.player_list)
if(!M.client)
continue
if(!(M.client.prefs.toggles & SOUND_INSTRUMENTS))
continue
M.playsound_local(M, null, 100, channel = youvegotafreejukebox[2], S = song_to_init)
return activejukeboxes.len
/datum/controller/subsystem/jukeboxes/proc/removejukebox(IDtoremove)
if(islist(activejukeboxes[IDtoremove]))
var/jukechannel = activejukeboxes[IDtoremove][2]
for(var/mob/M in GLOB.player_list)
if(!M.client)
continue
M.stop_sound_channel(activejukeboxes[IDtoremove][2])
M.stop_sound_channel(jukechannel)
freejukeboxchannels |= jukechannel
activejukeboxes.Cut(IDtoremove, IDtoremove+1)
return TRUE
else
to_chat(world, "<span class='warning'>If you see this, screenshot it and send it to a dev. Tried to remove jukebox with invalid ID</span>")
CRASH("Tried to remove jukebox with invalid ID")
/datum/controller/subsystem/jukeboxes/proc/findjukeboxindex(obj/jukebox)
if(activejukeboxes.len)
@@ -57,6 +74,8 @@ SUBSYSTEM_DEF(jukeboxes)
T.song_beat = text2num(L[3])
T.song_associated_id = L[4]
songs |= T
for(var/i in CHANNEL_JUKEBOX_START to CHANNEL_JUKEBOX)
freejukeboxchannels |= i
return ..()
/datum/controller/subsystem/jukeboxes/fire()
@@ -64,14 +83,15 @@ SUBSYSTEM_DEF(jukeboxes)
return
for(var/list/jukeinfo in activejukeboxes)
if(!jukeinfo.len)
to_chat(world, "<span class='warning'>If you see this, screenshot it and send it to a dev. Active jukebox without any associated metadata</span>")
EXCEPTION("Active jukebox without any associated metadata.")
continue
var/datum/track/juketrack = jukeinfo[1]
if(!istype(juketrack))
to_chat(world, "<span class='warning'>If you see this, screenshot it and send it to a dev. After jukebox track grabbing</span>")
EXCEPTION("Invalid jukebox track datum.")
continue
var/obj/jukebox = jukeinfo[3]
if(!istype(jukebox))
to_chat(world, "<span class='warning'>If you see this, screenshot it and send it to a dev. Nonexistant or invalid jukebox in active jukebox list")
EXCEPTION("Nonexistant or invalid object associated with jukebox.")
continue
var/sound/song_played = sound(juketrack.song_path)
var/area/currentarea = get_area(jukebox)
+8
View File
@@ -245,6 +245,14 @@
/datum/action/item_action/toggle_helmet_light
name = "Toggle Helmet Light"
/datum/action/item_action/toggle_welding_screen/plasmaman
name = "Toggle Welding Screen"
/datum/action/item_action/toggle_welding_screen/plasmaman/Trigger()
var/obj/item/clothing/head/helmet/space/plasmaman/H = target
if(istype(H))
H.toggle_welding_screen(owner)
/datum/action/item_action/toggle_headphones
name = "Toggle Headphones"
desc = "UNTZ UNTZ UNTZ"
@@ -19,7 +19,7 @@
qdel(W)
playsound(loccheck,'sound/effects/supermatter.ogg', 200, 1)
user.gib(TRUE, TRUE, TRUE)
for(var/turf/T in range(6,loccheck))
for(var/turf/T in range(2,loccheck))
if(istype(T, /turf/open/space/transit))
continue
for(var/mob/living/M in T)
+7 -7
View File
@@ -174,16 +174,16 @@
name = "Backup Shuttle"
can_be_bought = FALSE
/datum/map_template/shuttle/emergency/airless
suffix = "airless"
/datum/map_template/shuttle/emergency/construction
suffix = "construction"
name = "Build your own shuttle kit"
description = "Save money by building your own shuttle! The chassis will dock upon purchase, but launch will have to be authorized as usual via shuttle call. Interior and atmosphere not included."
admin_notes = "No brig, no medical facilities, no air."
credit_cost = -7500
description = "For the enterprising shuttle engineer! The chassis will dock upon purchase, but launch will have to be authorized as usual via shuttle call. Comes stocked with construction materials."
admin_notes = "No brig, no medical facilities, no shuttle console."
credit_cost = 2500
/datum/map_template/shuttle/emergency/airless/prerequisites_met()
// first 10 minutes only
return world.time - SSticker.round_start_time < 6000
// first 30 minutes only
return world.time - SSticker.round_start_time < 18000
/datum/map_template/shuttle/emergency/airless/on_bought()
//enable buying engines from cargo
+30
View File
@@ -80,6 +80,36 @@
desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are."
icon_state = "asleep"
//TASER
/datum/status_effect/electrode
id = "tased"
blocks_combatmode = TRUE
status_type = STATUS_EFFECT_REPLACE
alert_type = null
/datum/status_effect/electrode/on_creation(mob/living/new_owner, set_duration)
if(isnum(set_duration))
duration = set_duration
. = ..()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
if(C.combatmode)
C.toggle_combat_mode(TRUE)
C.add_movespeed_modifier(MOVESPEED_ID_TASED_STATUS, TRUE, override = TRUE, multiplicative_slowdown = 8)
/datum/status_effect/electrode/on_remove()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
C.remove_movespeed_modifier(MOVESPEED_ID_TASED_STATUS)
. = ..()
/datum/status_effect/electrode/tick()
if(owner)
owner.adjustStaminaLoss(5) //if you really want to try to stamcrit someone with a taser alone, you can, but it'll take time and good timing.
/datum/status_effect/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y
return 2
//STASIS
/datum/status_effect/incapacitating/stasis
id = "stasis"
@@ -11,6 +11,7 @@
var/on_remove_on_mob_delete = FALSE //if we call on_remove() when the mob is deleted
var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves
var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description
var/blocks_combatmode //Does this status effect prevent the user from toggling combat mode?
var/obj/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists
/datum/status_effect/New(list/arguments)
@@ -18,7 +18,7 @@
area_type = /area
protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer,
/area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle)
/area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle, /area/survivalpod)
target_trait = ZTRAIT_STATION
immunity_type = "rad"
@@ -63,4 +63,4 @@
signal.data["command"] = "shuttle"
var/atom/movable/virtualspeaker/virt = new(null)
frequency.post_signal(virt, signal)
frequency.post_signal(virt, signal)
+24 -2
View File
@@ -24,7 +24,7 @@
var/list/add_overlays // a very temporary list of overlays to add
var/list/managed_vis_overlays //vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays
var/list/managed_overlays
var/datum/proximity_monitor/proximity_monitor
var/buckle_message_cooldown = 0
var/fingerprintslast
@@ -255,6 +255,28 @@
/atom/proc/get_examine_string(mob/user, thats = FALSE)
. = "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]"
/atom/proc/update_icon_state()
/atom/proc/update_overlaysb()
SHOULD_CALL_PARENT(1)
. = list()
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .)
/atom/proc/update_iconb()
var/signalOut = SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON)
if(!(signalOut & COMSIG_ATOM_NO_UPDATE_ICON_STATE))
update_icon_state()
if(!(signalOut & COMSIG_ATOM_NO_UPDATE_OVERLAYS))
var/list/new_overlays = update_overlaysb()
if(managed_overlays)
cut_overlay(managed_overlays)
managed_overlays = null
if(length(new_overlays))
managed_overlays = new_overlays
add_overlay(new_overlays)
/atom/proc/examine(mob/user)
to_chat(user, get_examine_string(user, TRUE))
@@ -709,4 +731,4 @@ Proc for attack log creation, because really why not
if(filter_data[name])
filter_data -= name
update_filters()
return TRUE
return TRUE
@@ -40,6 +40,8 @@
var/stun_projectile = null //stun mode projectile type
var/stun_projectile_sound
var/nonlethal_projectile //projectile to use in stun mode when the target is resting, if any
var/nonlethal_projectile_sound
var/lethal_projectile = null //lethal mode projectile type
var/lethal_projectile_sound
@@ -533,13 +535,21 @@
T = closer
break
var/mob/living/carbon/C
if(iscarbon(target))
C = target
update_icon()
var/obj/item/projectile/A
//any emagged turrets drains 2x power and uses a different projectile?
if(mode == TURRET_STUN)
use_power(reqpower)
A = new stun_projectile(T)
playsound(loc, stun_projectile_sound, 75, 1)
if(nonlethal_projectile && C && C.resting)
use_power(reqpower*0.5)
A = new nonlethal_projectile(T)
playsound(loc, nonlethal_projectile_sound, 75, 1)
else
use_power(reqpower)
A = new stun_projectile(T)
playsound(loc, stun_projectile_sound, 75, 1)
else
use_power(reqpower * 2)
A = new lethal_projectile(T)
@@ -651,6 +661,8 @@
base_icon_state = "standard"
stun_projectile = /obj/item/projectile/energy/electrode
stun_projectile_sound = 'sound/weapons/taser.ogg'
nonlethal_projectile = /obj/item/projectile/beam/disabler
nonlethal_projectile_sound = 'sound/weapons/taser2.ogg'
lethal_projectile = /obj/item/projectile/beam/laser
lethal_projectile_sound = 'sound/weapons/laser.ogg'
desc = "An energy blaster auto-turret."
@@ -660,6 +672,8 @@
base_icon_state = "standard"
stun_projectile = /obj/item/projectile/energy/electrode
stun_projectile_sound = 'sound/weapons/taser.ogg'
nonlethal_projectile = /obj/item/projectile/beam/disabler
nonlethal_projectile_sound = 'sound/weapons/taser2.ogg'
lethal_projectile = /obj/item/projectile/beam/laser/heavylaser
lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg'
desc = "An energy blaster auto-turret."
@@ -679,6 +693,8 @@
/obj/machinery/porta_turret/ai
faction = list("silicon")
nonlethal_projectile = /obj/item/projectile/beam/disabler
nonlethal_projectile_sound = 'sound/weapons/taser2.ogg'
/obj/machinery/porta_turret/ai/assess_perp(mob/living/carbon/human/perp)
return 10 //AI turrets shoot at everything not in their faction
+10 -15
View File
@@ -1746,7 +1746,6 @@
"back_key" = TOOL_CROWBAR,
"desc" = "Peripherals control module is installed."
),
//9
list(
"key" = /obj/item/stock_parts/scanning_module,
@@ -1784,40 +1783,37 @@
"back_key" = TOOL_SCREWDRIVER,
"desc" = "Capacitor is secured."
),
//14
//11
list(
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_CROWBAR,
"desc" = "The power cell is installed."
//15
),
//12
list(
"key" = /obj/item/stack/sheet/metal,
"amount" = 5,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "The power cell is secured."
),
//16
list(
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_CROWBAR,
"desc" = "The power cell is installed."
),
//17
//13
list(
"key" = TOOL_WRENCH,
"back_key" = TOOL_CROWBAR,
"desc" = "Internal armor is installed."
),
//18
//14
list(
"key" = TOOL_WELDER,
"back_key" = TOOL_WRENCH,
"desc" = "Internal armor is wrenched."
),
//19
//15
list(
"key" = /obj/item/stack/sheet/plasteel,
"amount" = 5,
@@ -1825,21 +1821,20 @@
"desc" = "Internal armor is welded."
),
//20
//16
list(
"key" = TOOL_WRENCH,
"back_key" = TOOL_CROWBAR,
"desc" = "External armor is installed."
),
//21
//17
list(
"key" = TOOL_WELDER,
"back_key" = TOOL_WRENCH,
"desc" = "External armor is wrenched."
),
)
/datum/component/construction/mecha/odysseus/custom_action(obj/item/I, mob/living/user, diff)
if(!..())
return FALSE
@@ -304,6 +304,15 @@ GENE SCANNER
for(var/obj/item/bodypart/org in damaged)
msg += "\t\t<span class='info'>[capitalize(org.name)]: [(org.brute_dam > 0) ? "<font color='red'>[org.brute_dam]</font></span>" : "<font color='red'>0</font>"]-[(org.burn_dam > 0) ? "<font color='#FF8000'>[org.burn_dam]</font>" : "<font color='#FF8000'>0</font>"]\n"
//Bones broken report! Hyperstation 13
if(iscarbon(M) && mode == 1)
var/mob/living/carbon/C = M
for(var/X in C.bodyparts)
var/obj/item/bodypart/LB = X
var/broken = LB.broken
if(broken == 1)
msg += "\t<span class='alert'><font color='red'>Subjects [LB.name] is fractured!</font></span>\n"
//Organ damages report
if(ishuman(M))
var/mob/living/carbon/human/H = M
+11 -1
View File
@@ -926,6 +926,16 @@
item_state = "marie"
attack_verb = list("awoo'd", "shoved", "bonked")
/obj/item/toy/plush/mammal/marisol
desc = "An adorable stuffed toy resembling a demi-wolf security officer. That a baton, or is she happy to see you..?"
icon_state = "marisol"
item_state = "marisol"
/obj/item/toy/plush/mammal/marilyn
desc = "A cute stuffed fox toy. Now, about that sponge bath..."
icon_state = "marilyn"
item_state = "marilyn"
/obj/item/toy/plush/catgirl
name = "feline plushie"
desc = "An adorable stuffed toy that resembles a feline."
@@ -940,7 +950,7 @@
item_state = "mikeel"
/obj/item/toy/plush/catgirl/skylar
desc = "An adorable stuffed toy that resembles a degenerate."
desc = "An adorable stuffed toy that resembles a pure and good cat boy."
icon_state = "skylar"
item_state = "skylar"
attack_verb = list("powergamed", "merged", "tabled")
@@ -744,3 +744,204 @@
..()
hud = new /obj/item/clothing/glasses/hud/security(src)
return
/**********************************************************************
Borg apparatus
***********************************************************************/
//These are tools that can hold only specific items. For example, the mediborg gets one that can only hold beakers and bottles.
/obj/item/borg/apparatus/
name = "unknown storage apparatus"
desc = "This device seems nonfunctional."
icon = 'icons/mob/robot_items.dmi'
icon_state = "hugmodule"
var/obj/item/stored
var/list/storable = list()
/obj/item/borg/apparatus/Initialize()
. = ..()
RegisterSignal(loc.loc, COMSIG_BORG_SAFE_DECONSTRUCT, .proc/safedecon)
/obj/item/borg/apparatus/Destroy()
if(stored)
qdel(stored)
. = ..()
///If we're safely deconstructed, we put the item neatly onto the ground, rather than deleting it.
/obj/item/borg/apparatus/proc/safedecon()
if(stored)
stored.forceMove(get_turf(src))
stored = null
/obj/item/borg/apparatus/Exited(atom/A)
if(A == stored) //sanity check
UnregisterSignal(stored, COMSIG_ATOM_UPDATE_ICON)
stored = null
update_icon()
. = ..()
///A right-click verb, for those not using hotkey mode.
/obj/item/borg/apparatus/verb/verb_dropHeld()
set category = "Object"
set name = "Drop"
if(usr != loc || !stored)
return
stored.forceMove(get_turf(usr))
return
/obj/item/borg/apparatus/attack_self(mob/living/silicon/robot/user)
if(!stored)
return ..()
if(user.client?.keys_held["Alt"])
stored.forceMove(get_turf(user))
return
stored.attack_self(user)
/obj/item/borg/apparatus/pre_attack(atom/A, mob/living/user, params)
if(!stored)
var/itemcheck = FALSE
for(var/i in storable)
if(istype(A, i))
itemcheck = TRUE
break
if(itemcheck)
var/obj/item/O = A
O.forceMove(src)
stored = O
RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, /atom/.proc/update_iconb)
update_icon()
return
else
stored.melee_attack_chain(user, A, params)
return
. = ..()
/obj/item/borg/apparatus/attackby(obj/item/W, mob/user, params)
if(stored)
W.melee_attack_chain(user, stored, params)
return
. = ..()
/////////////////
//beaker holder//
/////////////////
/obj/item/borg/apparatus/beaker
name = "beaker storage apparatus"
desc = "A special apparatus for carrying beakers without spilling the contents. Alt-Z or right-click to drop the beaker."
icon_state = "borg_beaker_apparatus"
storable = list(/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/bottle)
/obj/item/borg/apparatus/beaker/Initialize()
. = ..()
stored = new /obj/item/reagent_containers/glass/beaker/large(src)
RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, /atom/.proc/update_iconb)
update_icon()
/obj/item/borg/apparatus/beaker/Destroy()
if(stored)
var/obj/item/reagent_containers/C = stored
C.SplashReagents(get_turf(src))
qdel(stored)
. = ..()
/obj/item/borg/apparatus/beaker/examine()
. = ..()
if(stored)
var/obj/item/reagent_containers/C = stored
. += "The apparatus currently has [C] secured, which contains:"
if(length(C.reagents.reagent_list))
for(var/datum/reagent/R in C.reagents.reagent_list)
. += "[R.volume] units of [R.name]"
else
. += "Nothing."
/obj/item/borg/apparatus/beaker/update_icon()
cut_overlays()
if(stored)
COMPILE_OVERLAYS(stored)
stored.pixel_x = 0
stored.pixel_y = 0
var/image/img = image("icon"=stored, "layer"=FLOAT_LAYER)
var/image/arm = image("icon"="borg_beaker_apparatus_arm", "layer"=FLOAT_LAYER)
if(istype(stored, /obj/item/reagent_containers/glass/beaker))
arm.pixel_y = arm.pixel_y - 3
img.plane = FLOAT_PLANE
add_overlay(img)
add_overlay(arm)
else
var/image/arm = image("icon"="borg_beaker_apparatus_arm", "layer"=FLOAT_LAYER)
arm.pixel_y = arm.pixel_y - 5
add_overlay(arm)
/obj/item/borg/apparatus/beaker/attack_self(mob/living/silicon/robot/user)
if(stored && !user.client?.keys_held["Alt"] && user.a_intent != "help")
var/obj/item/reagent_containers/C = stored
C.SplashReagents(get_turf(user))
loc.visible_message("<span class='notice'>[user] spills the contents of the [C] all over the floor.</span>")
return
. = ..()
/obj/item/borg/apparatus/beaker/extra
name = "secondary beaker storage apparatus"
desc = "A supplementary beaker storage apparatus."
/obj/item/borg/apparatus/beaker/service
name = "beverage storage apparatus"
desc = "A special apparatus for carrying drinks without spilling the contents. Alt-Z or right-click to drop the beaker."
icon_state = "borg_beaker_apparatus"
storable = list(/obj/item/reagent_containers/food/drinks/,
/obj/item/reagent_containers/food/condiment)
/obj/item/borg/apparatus/beaker/service/Initialize()
. = ..()
stored = new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, /atom/.proc/update_iconb)
update_icon()
////////////////////
//engi part holder//
////////////////////
/obj/item/borg/apparatus/circuit
name = "circuit manipulation apparatus"
desc = "A special apparatus for carrying and manipulating circuit boards. Alt-Z or right-click to drop the stored object."
icon_state = "borg_hardware_apparatus"
storable = list(/obj/item/circuitboard,
/obj/item/electronics)
/obj/item/borg/apparatus/circuit/Initialize()
. = ..()
update_icon()
/obj/item/borg/apparatus/circuit/update_icon()
cut_overlays()
if(stored)
COMPILE_OVERLAYS(stored)
stored.pixel_x = -3
stored.pixel_y = 0
var/image/arm
if(istype(stored, /obj/item/circuitboard))
arm = image("icon"="borg_hardware_apparatus_arm1", "layer"=FLOAT_LAYER)
else
arm = image("icon"="borg_hardware_apparatus_arm2", "layer"=FLOAT_LAYER)
var/image/img = image("icon"=stored, "layer"=FLOAT_LAYER)
img.plane = FLOAT_PLANE
add_overlay(arm)
add_overlay(img)
else
var/image/arm = image("icon"="borg_hardware_apparatus_arm1", "layer"=FLOAT_LAYER)
add_overlay(arm)
/obj/item/borg/apparatus/circuit/examine()
. = ..()
if(stored)
. += "The apparatus currently has [stored] secured."
/obj/item/borg/apparatus/circuit/pre_attack(atom/A, mob/living/user, params)
. = ..()
if(istype(A, /obj/item/aiModule) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails
to_chat(user, "<span class='warning'>This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up.</span>")
@@ -514,7 +514,7 @@
/obj/item/robot_module/medical,
/obj/item/robot_module/syndicate_medical,
/obj/item/robot_module/medihound,
/obj/item/robot_module/borgi)
/obj/item/robot_module/borgi)
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -620,6 +620,32 @@
if (RPED)
R.module.remove_module(RPED, TRUE)
/obj/item/borg/upgrade/circuit_app
name = "circuit manipulation apparatus"
desc = "An engineering cyborg upgrade allowing for manipulation of circuit boards."
icon_state = "cyborg_upgrade3"
require_module = TRUE
module_type = list(/obj/item/robot_module/engineering)
/obj/item/borg/upgrade/circuit_app/action(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
var/obj/item/borg/apparatus/circuit/C = locate() in R.module.modules
if(C)
to_chat(user, "<span class='warning'>This unit is already equipped with a circuit apparatus!</span>")
return FALSE
C = new(R.module)
R.module.basic_modules += C
R.module.add_module(C, FALSE, TRUE)
/obj/item/borg/upgrade/circuit_app/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
var/obj/item/borg/apparatus/circuit/C = locate() in R.module.modules
if (C)
R.module.remove_module(C, TRUE)
/obj/item/borg/upgrade/pinpointer
name = "medical cyborg crew pinpointer"
desc = "A crew pinpointer module for the medical cyborg."
+16
View File
@@ -15,6 +15,7 @@
var/heal_burn = 0
var/stop_bleeding = 0
var/self_delay = 50
var/fix_bone= 0
/obj/item/stack/medical/attack(mob/living/M, mob/user)
@@ -93,6 +94,9 @@
if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
if(affecting.heal_damage(heal_brute, heal_burn))
C.update_damage_overlays()
if (fix_bone) //Fix broken bones on targeted limb
affecting.broken = 0
affecting.disabled = 0
else
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>")
else
@@ -100,7 +104,19 @@
use(1)
/obj/item/stack/medical/plaster_gauze
name = "plaster gauze"
gender = PLURAL
singular_name = "plaster gauze"
desc = "A roll of plaster of paris that is extremely effective at aiding bone fratcutres, but does not heal wounds."
icon_state = "pgauze"
self_delay = 300
max_amount = 10
fix_bone = 1
/obj/item/stack/medical/plaster_gauze/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS)
/obj/item/stack/medical/bruise_pack
name = "bruise pack"
@@ -285,6 +285,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
//Durathread fuck slash-asterisk comments
GLOBAL_LIST_INIT(durathread_recipes, list ( \
new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/durathread, 4, time = 40),
new/datum/stack_recipe("durathread jumpskirt", /obj/item/clothing/under/durathread/skirt, 4, time = 40), \
new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 40), \
new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 40), \
new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 25), \
+2 -1
View File
@@ -30,6 +30,7 @@
/obj/item/storage/firstaid/regular/PopulateContents()
if(empty)
return
new /obj/item/stack/medical/plaster_gauze(src)
new /obj/item/stack/medical/gauze(src)
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/bruise_pack(src)
@@ -337,7 +338,7 @@
/obj/item/storage/pill_bottle/penis_enlargement/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/pill/penis_enlargement(src)
/obj/item/storage/pill_bottle/breast_enlargement
name = "breast enlargement pills"
desc = "Made by Fermichem - They have a woman with breasts larger than she is on them. The warming states not to take more than 10u at a time."
@@ -23,3 +23,4 @@
new /obj/item/circuitboard/machine/techfab/department/cargo(src)
new /obj/item/storage/photo_album/QM(src)
new /obj/item/circuitboard/machine/ore_silo(src)
new /obj/item/clothing/suit/hooded/wintercoat/qm(src)
@@ -33,6 +33,7 @@
new /obj/item/extinguisher/advanced(src)
new /obj/item/storage/photo_album/CE(src)
new /obj/item/storage/lockbox/medal/engineering(src)
new /obj/item/clothing/suit/hooded/wintercoat/ce(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
@@ -81,6 +81,7 @@
new /obj/item/circuitboard/machine/techfab/department/medical(src)
new /obj/item/storage/photo_album/CMO(src)
new /obj/item/storage/lockbox/medal/medical(src)
new /obj/item/clothing/suit/hooded/wintercoat/cmo(src)
/obj/structure/closet/secure_closet/animal
name = "animal control"
@@ -30,3 +30,4 @@
new /obj/item/door_remote/research_director(src)
new /obj/item/circuitboard/machine/techfab/department/science(src)
new /obj/item/storage/photo_album/RD(src)
new /obj/item/clothing/suit/hooded/wintercoat/rd(src)
@@ -61,6 +61,7 @@
new /obj/item/door_remote/civillian(src)
new /obj/item/circuitboard/machine/techfab/department/service(src)
new /obj/item/storage/photo_album/HoP(src)
new /obj/item/clothing/suit/hooded/wintercoat/hop(src)
/obj/structure/closet/secure_closet/hos
name = "\proper head of security's locker"
req_access = list(ACCESS_HOS)
@@ -94,6 +95,7 @@
new /obj/item/pinpointer/nuke(src)
new /obj/item/circuitboard/machine/techfab/department/security(src)
new /obj/item/storage/photo_album/HoS(src)
new /obj/item/clothing/suit/hooded/wintercoat/hos(src)
/obj/structure/closet/secure_closet/warden
name = "\proper warden's locker"
req_access = list(ACCESS_ARMORY)
+1 -1
View File
@@ -30,7 +30,7 @@
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass the whitelist</span>")
else
log_access("Failed Login: [key] - Not on whitelist")
return list("reason"="whitelist", "desc" = "\nReason: You are not on the white list for this server")
return list("reason"="whitelist", "desc" = "\nReason: You are not on the whitelist for this server, apply in the station's discord server.")
//Guest Checking
if(!real_bans_only && IsGuestKey(key))
+2 -2
View File
@@ -138,6 +138,6 @@ GLOBAL_LIST(round_end_notifiees)
GLOB.bunker_passthrough |= ckey(params)
log_admin("[sender.friendly_name] has added [params] to the current round's bunker bypass list.")
message_admins("[sender.friendly_name] has added [params] to the current round's bunker bypass list.")
log_admin("[sender.friendly_name] has added [params] to the bunker bypass list.")
message_admins("[sender.friendly_name] has added [params] to the bunker bypass list.")
return "[params] has been added to the current round's bunker bypass list."
+22 -5
View File
@@ -15,18 +15,35 @@
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
send2irc("Panic Bunker", "[key_name(usr)] has toggled the Panic Bunker, it is now [new_pb ? "enabled" : "disabled"].")
/client/proc/addbunkerbypass(ckeytobypass as text)
set category = "Special Verbs"
set name = "Add PB Bypass"
set desc = "Allows a given ckey to connect despite the panic bunker for a given round."
set name = "Whitelist"
set desc = "Adds a given ckey onto the whitelist to bypass the panic bunker."
if(!CONFIG_GET(flag/sql_enabled))
to_chat(usr, "<span class='adminnotice'>The Database is not enabled!</span>")
return
GLOB.bunker_passthrough |= ckey(ckeytobypass)
log_admin("[key_name(usr)] has added [ckeytobypass] to the current round's bunker bypass list.")
message_admins("[key_name_admin(usr)] has added [ckeytobypass] to the current round's bunker bypass list.")
send2irc("Panic Bunker", "[key_name(usr)] has added [ckeytobypass] to the current round's bunker bypass list.")
log_admin("[key_name(usr)] has added [ckeytobypass] to the whitelist.")
message_admins("[key_name_admin(usr)] has added [ckeytobypass] to the whitelist.")
send2irc("Panic Bunker", "[key_name(usr)] has added [ckeytobypass] to the whitelist.")
//Hyperstation13 change Adds to a whitelist on the database table "whitelist", so players can join at a later date!
var/sql_ckey = sanitizeSQL(ckeytobypass)
var/datum/DBQuery/query_client_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("whitelist")] WHERE ckey = '[sql_ckey]'")
if(!query_client_in_db.Execute())
qdel(query_client_in_db)
return
if(!query_client_in_db.NextRow())
//add to database!
var/datum/DBQuery/query_add_player_whitelist = SSdbcore.NewQuery("INSERT INTO [format_table_name("whitelist")] (`ckey`) VALUES ('[sql_ckey]')")
if(!query_add_player_whitelist.Execute())
qdel(query_client_in_db)
qdel(query_add_player_whitelist)
return
/client/proc/revokebunkerbypass(ckeytobypass as text)
set category = "Special Verbs"
@@ -73,6 +73,10 @@
animate(src, color = previouscolor, time = 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/obj/structure/destructible/cult/proc/check_menu(mob/living/user)
if(!user || user.incapacitated() || !iscultist(user) || !anchored || cooldowntime > world.time)
return FALSE
return TRUE
/obj/structure/destructible/cult/talisman
name = "altar"
@@ -80,9 +84,18 @@
icon_state = "talismanaltar"
break_message = "<span class='warning'>The altar shatters, leaving only the wailing of the damned!</span>"
/obj/structure/destructible/cult/talisman/attack_hand(mob/living/user)
var/static/image/radial_whetstone = image(icon = 'icons/obj/kitchen.dmi', icon_state = "cult_sharpener")
var/static/image/radial_shell = image(icon = 'icons/obj/wizard.dmi', icon_state = "construct-cult")
var/static/image/radial_unholy_water = image(icon = 'icons/obj/drinks.dmi', icon_state = "holyflask")
/obj/structure/destructible/cult/talisman/Initialize()
. = ..()
if(.)
radial_unholy_water.color = "#333333"
/obj/structure/destructible/cult/talisman/ui_interact(mob/user)
. = ..()
if(!user.canUseTopic(src, TRUE))
return
if(!iscultist(user))
to_chat(user, "<span class='warning'>You're pretty sure you know exactly what this is used for and you can't seem to touch it.</span>")
@@ -91,22 +104,27 @@
to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with your dagger first.</span>")
return
if(cooldowntime > world.time)
to_chat(user, "<span class='cult italic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
return
var/choice = alert(user,"You study the schematics etched into the altar...",,"Eldritch Whetstone","Construct Shell","Flask of Unholy Water")
var/list/pickedtype = list()
to_chat(user, "<span class='cultitalic'>You study the schematics etched into the altar...</span>")
var/list/options = list("Eldritch Whetstone" = radial_whetstone, "Construct Shell" = radial_shell, "Flask of Unholy Water" = radial_unholy_water)
var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
var/reward
switch(choice)
if("Eldritch Whetstone")
pickedtype += /obj/item/sharpener/cult
reward = /obj/item/sharpener/cult
if("Construct Shell")
pickedtype += /obj/structure/constructshell
reward = /obj/structure/constructshell
if("Flask of Unholy Water")
pickedtype += /obj/item/reagent_containers/glass/beaker/unholywater
if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
reward = /obj/item/reagent_containers/glass/beaker/unholywater
if(!QDELETED(src) && reward && check_menu(user))
cooldowntime = world.time + 2400
for(var/N in pickedtype)
new N(get_turf(src))
to_chat(user, "<span class='cultitalic'>You kneel before the altar and your faith is rewarded with the [choice]!</span>")
new reward(get_turf(src))
to_chat(user, "<span class='cultitalic'>You kneel before the altar and your faith is rewarded with the [choice]!</span>")
/obj/structure/destructible/cult/forge
name = "daemon forge"
@@ -116,9 +134,14 @@
light_color = LIGHT_COLOR_LAVA
break_message = "<span class='warning'>The force breaks apart into shards with a howling scream!</span>"
/obj/structure/destructible/cult/forge/attack_hand(mob/living/user)
var/static/image/radial_flagellant = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cultrobes")
var/static/image/radial_shielded = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cult_armor")
var/static/image/radial_mirror = image(icon = 'icons/obj/items_and_weapons.dmi', icon_state = "mirror_shield")
/obj/structure/destructible/cult/forge/ui_interact(mob/user)
. = ..()
if(.)
if(!user.canUseTopic(src, TRUE))
return
if(!iscultist(user))
to_chat(user, "<span class='warning'>The heat radiating from [src] pushes you back.</span>")
@@ -129,24 +152,26 @@
if(cooldowntime > world.time)
to_chat(user, "<span class='cult italic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
return
var/choice
if(user.mind.has_antag_datum(/datum/antagonist/cult/master))
choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield")
else
choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield")
var/list/pickedtype = list()
to_chat(user, "<span class='cultitalic'>You study the schematics etched into the forge...</span>")
var/list/options = list("Shielded Robe" = radial_shielded, "Flagellant's Robe" = radial_flagellant, "Mirror Shield" = radial_mirror)
var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
var/reward
switch(choice)
if("Shielded Robe")
pickedtype += /obj/item/clothing/suit/hooded/cultrobes/cult_shield
reward = /obj/item/clothing/suit/hooded/cultrobes/cult_shield
if("Flagellant's Robe")
pickedtype += /obj/item/clothing/suit/hooded/cultrobes/berserker
reward = /obj/item/clothing/suit/hooded/cultrobes/berserker
if("Mirror Shield")
pickedtype += /obj/item/shield/mirror
if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
reward = /obj/item/shield/mirror
if(!QDELETED(src) && reward && check_menu(user))
cooldowntime = world.time + 2400
for(var/N in pickedtype)
new N(get_turf(src))
to_chat(user, "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating the [choice]!</span>")
new reward(get_turf(src))
to_chat(user, "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating the [choice]!</span>")
@@ -234,9 +259,14 @@
light_color = LIGHT_COLOR_FIRE
break_message = "<span class='warning'>The books and tomes of the archives burn into ash as the desk shatters!</span>"
/obj/structure/destructible/cult/tome/attack_hand(mob/living/user)
var/static/image/radial_blindfold = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "blindfold")
var/static/image/radial_curse = image(icon = 'icons/obj/cult.dmi', icon_state ="shuttlecurse")
var/static/image/radial_veilwalker = image(icon = 'icons/obj/cult.dmi', icon_state ="shifter")
/obj/structure/destructible/cult/tome/ui_interact(mob/user)
. = ..()
if(.)
if(!user.canUseTopic(src, TRUE))
return
if(!iscultist(user))
to_chat(user, "<span class='warning'>These books won't open and it hurts to even try and read the covers.</span>")
@@ -247,21 +277,27 @@
if(cooldowntime > world.time)
to_chat(user, "<span class='cult italic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
return
var/choice = alert(user,"You flip through the black pages of the archives...",,"Zealot's Blindfold","Shuttle Curse","Veil Walker Set")
var/list/pickedtype = list()
to_chat(user, "<span class='cultitalic'>You flip through the black pages of the archives...</span>")
var/list/options = list("Zealot's Blindfold" = radial_blindfold, "Shuttle Curse" = radial_curse, "Veil Walker Set" = radial_veilwalker)
var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
var/reward
switch(choice)
if("Zealot's Blindfold")
pickedtype += /obj/item/clothing/glasses/hud/health/night/cultblind
reward = /obj/item/clothing/glasses/hud/health/night/cultblind
if("Shuttle Curse")
pickedtype += /obj/item/shuttle_curse
reward = /obj/item/shuttle_curse
if("Veil Walker Set")
pickedtype += /obj/item/cult_shift
pickedtype += /obj/item/flashlight/flare/culttorch
if(src && !QDELETED(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
reward = /obj/effect/spawner/bundle/veil_walker
if(!QDELETED(src) && reward && check_menu(user))
cooldowntime = world.time + 2400
for(var/N in pickedtype)
new N(get_turf(src))
to_chat(user, "<span class='cultitalic'>You summon the [choice] from the archives!</span>")
new reward(get_turf(src))
to_chat(user, "<span class='cultitalic'>You summon the [choice] from the archives!</span>")
/obj/effect/spawner/bundle/veil_walker
items = list(/obj/item/cult_shift, /obj/item/flashlight/flare/culttorch)
/obj/effect/gateway
name = "gateway"
@@ -291,7 +291,7 @@
radiation_pulse(location,rad_power)
var/new_heat_capacity = air.heat_capacity()
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY && (air.temperature <= FUSION_MAXIMUM_TEMPERATURE || reaction_energy <= 0)) //If above FUSION_MAXIMUM_TEMPERATURE, will only adjust temperature for endothermic reactions.
air.temperature = CLAMP(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY)
return REACTING
+19 -13
View File
@@ -500,19 +500,25 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
return
if(!query_client_in_db.NextRow())
if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey] && !(ckey in GLOB.bunker_passthrough))
log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
message_admins("<span class='adminnotice'>Failed Login: [key] - New account attempting to connect during panic bunker</span>")
to_chat(src, "<span class='notice'>You must first join the Discord to verify your account before joining this server.<br>To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: <a href='https://discord.gg/E6SQuhz'>https://discord.gg/E6SQuhz</a></span>") //CIT CHANGE - makes the panic bunker disconnect message point to the discord
var/list/connectiontopic_a = params2list(connectiontopic)
var/list/panic_addr = CONFIG_GET(string/panic_server_address)
if(panic_addr && !connectiontopic_a["redirect"])
var/panic_name = CONFIG_GET(string/panic_server_name)
to_chat(src, "<span class='notice'>Sending you to [panic_name ? panic_name : panic_addr].</span>")
winset(src, null, "command=.options")
src << link("[panic_addr]?redirect=1")
qdel(query_client_in_db)
qdel(src)
return
var/datum/DBQuery/query_client_in_db_whitelist = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("whitelist")] WHERE ckey = '[sql_ckey]'")
if(!query_client_in_db_whitelist.Execute())
qdel(query_client_in_db_whitelist)
return
if(!query_client_in_db_whitelist.NextRow()) //they are not on the whitelist OR have played before! on the database!
log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
message_admins("<span class='adminnotice'>Failed Login: [key] - New account attempting to connect without being whitelisted!</span>")
to_chat(src, "<span class='notice'>You must first join the Discord to verify your account before joining this server.<br>To do so, read the rules here http://hyperstation13.com/rules and post a request in the #whitelist-application under the \"Main server\" category in the Discord server linked here: <a href='https://discordapp.com/invite/PCtX2fH'>https://discordapp.com/invite/PCtX2fH</a></span>") //CIT CHANGE - makes the panic bunker disconnect message point to the discord
var/list/connectiontopic_a = params2list(connectiontopic)
var/list/panic_addr = CONFIG_GET(string/panic_server_address)
if(panic_addr && !connectiontopic_a["redirect"])
var/panic_name = CONFIG_GET(string/panic_server_name)
to_chat(src, "<span class='notice'>Sending you to [panic_name ? panic_name : panic_addr].</span>")
winset(src, null, "command=.options")
src << link("[panic_addr]?redirect=1")
qdel(query_client_in_db)
qdel(src)
return
new_player = 1
account_join_date = sanitizeSQL(findJoinDate())
+9
View File
@@ -13,6 +13,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/client/parent
//doohickeys for savefiles
var/path
var/clientckey
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
var/max_save_slots = 8
@@ -233,6 +234,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(istype(C))
if(!IsGuestKey(C.key))
load_path(C.ckey)
clientckey = C.ckey
unlock_content = C.IsByondMember()
if(unlock_content)
max_save_slots = 16
@@ -1537,12 +1539,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in GLOB.hair_styles_list
if(new_hair_style)
hair_style = new_hair_style
if(new_hair_style == "Tail Hair" && clientckey <> "quotefox")
hair_style = "Bald"
if("next_hair_style")
hair_style = next_list_item(hair_style, GLOB.hair_styles_list)
if(hair_style == "Tail Hair" && clientckey <> "quotefox")
hair_style = "Bald"
if("previous_hair_style")
hair_style = previous_list_item(hair_style, GLOB.hair_styles_list)
if(hair_style == "Tail Hair" && clientckey <> "quotefox")
hair_style = "Bald"
if("facial")
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference","#"+facial_hair_color) as color|null
+3 -3
View File
@@ -412,11 +412,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list)
underwear = sanitize_inlist(underwear, GLOB.underwear_list)
undie_color = sanitize_hexcolor(undie_color, 6, 1, initial(undie_color))
undie_color = sanitize_hexcolor(undie_color, 3, 0, initial(undie_color))
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
shirt_color = sanitize_hexcolor(shirt_color, 6, 1, initial(shirt_color))
shirt_color = sanitize_hexcolor(shirt_color, 3, 0, initial(shirt_color))
socks = sanitize_inlist(socks, GLOB.socks_list)
socks_color = sanitize_hexcolor(socks_color, 6, 1, initial(socks_color))
socks_color = sanitize_hexcolor(socks_color, 3, 0, initial(socks_color))
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
hair_color = sanitize_hexcolor(hair_color, 3, 0)
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
+9
View File
@@ -332,6 +332,15 @@ BLIND // can't see anything
if(visor_vars_to_toggle & VISOR_TINT)
tint ^= initial(tint)
/obj/item/clothing/head/helmet/space/plasmaman/visor_toggling() //handles all the actual toggling of flags
up = !up
clothing_flags ^= visor_flags
flags_inv ^= visor_flags_inv
icon_state = "[initial(icon_state)]"
if(visor_vars_to_toggle & VISOR_FLASHPROTECT)
flash_protect ^= initial(flash_protect)
if(visor_vars_to_toggle & VISOR_TINT)
tint ^= initial(tint)
/obj/item/clothing/proc/can_use(mob/user)
if(user && ismob(user))
+128
View File
@@ -0,0 +1,128 @@
/datum/outfit/plasmaman/bar
name = "Bartender Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/white
uniform = /obj/item/clothing/under/plasmaman/enviroslacks
/datum/outfit/plasmaman/chef
name = "Chef Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/white
uniform = /obj/item/clothing/under/plasmaman/chef
/datum/outfit/plasmaman/botany
name = "Botany Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/botany
uniform = /obj/item/clothing/under/plasmaman/botany
/datum/outfit/plasmaman/curator
name = "Curator Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/curator
uniform = /obj/item/clothing/under/plasmaman/curator
/datum/outfit/plasmaman/chaplain
name = "Chaplain Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/chaplain
uniform = /obj/item/clothing/under/plasmaman/chaplain
/datum/outfit/plasmaman/janitor
name = "Janitor Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/janitor
uniform = /obj/item/clothing/under/plasmaman/janitor
/datum/outfit/plasmaman/security
name = "Security Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/security
uniform = /obj/item/clothing/under/plasmaman/security
/datum/outfit/plasmaman/detective
name = "Detective Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/white
uniform = /obj/item/clothing/under/plasmaman/enviroslacks
ears = /obj/item/radio/headset/headset_sec
/datum/outfit/plasmaman/warden
name = "Warden Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/security/warden
uniform = /obj/item/clothing/under/plasmaman/security/warden
/datum/outfit/plasmaman/cargo
name = "Cargo Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/cargo
uniform = /obj/item/clothing/under/plasmaman/cargo
/datum/outfit/plasmaman/mining
name = "Mining Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/mining
uniform = /obj/item/clothing/under/plasmaman/mining
/datum/outfit/plasmaman/medical
name = "Medical Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/medical
uniform = /obj/item/clothing/under/plasmaman/medical
/datum/outfit/plasmaman/viro
name = "Virology Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/viro
uniform = /obj/item/clothing/under/plasmaman/viro
/datum/outfit/plasmaman/chemist
name = "Chemist Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/chemist
uniform = /obj/item/clothing/under/plasmaman/chemist
/datum/outfit/plasmaman/genetics
name = "Genetics Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/genetics
uniform = /obj/item/clothing/under/plasmaman/genetics
/datum/outfit/plasmaman/science
name = "Science Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/science
uniform = /obj/item/clothing/under/plasmaman/science
/datum/outfit/plasmaman/robotics
name = "Robotics Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/robotics
uniform = /obj/item/clothing/under/plasmaman/robotics
/datum/outfit/plasmaman/engineering
name = "Engineering Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/engineering
uniform = /obj/item/clothing/under/plasmaman/engineering
/datum/outfit/plasmaman/atmospherics
name = "Atmospherics Plasmaman"
head = /obj/item/clothing/head/helmet/space/plasmaman/atmospherics
uniform = /obj/item/clothing/under/plasmaman/atmospherics
/datum/outfit/plasmaman/mime
name = "Plasmamime"
head = /obj/item/clothing/head/helmet/space/plasmaman/mime
uniform = /obj/item/clothing/under/plasmaman/mime
mask = /obj/item/clothing/mask/gas/mime
/datum/outfit/plasmaman/clown
name = "Plasmaclown"
head = /obj/item/clothing/head/helmet/space/plasmaman/clown
uniform = /obj/item/clothing/under/plasmaman/clown
mask = /obj/item/clothing/mask/gas/clown_hat
+210 -3
View File
@@ -15,8 +15,8 @@
/obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user)
..()
to_chat(user, "<span class='notice'>There [extinguishes_left == 1 ? "is" : "are"] [extinguishes_left] extinguisher charge\s left in this suit.</span>")
. = ..()
. += "<span class='notice'>There [extinguishes_left == 1 ? "is" : "are"] [extinguishes_left] extinguisher charge\s left in this suit.</span>"
/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(mob/living/carbon/human/H)
@@ -41,12 +41,92 @@
icon_state = "plasmaman-helm"
item_state = "plasmaman-helm"
strip_delay = 80
flash_protect = 2
tint = 2
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75)
resistance_flags = FIRE_PROOF
var/brightness_on = 4 //luminosity when the light is on
var/on = FALSE
var/smile = FALSE
var/smile_color = "#FF0000"
var/visor_icon = "envisor"
var/smile_state = "envirohelm_smile"
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen/plasmaman)
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES
visor_flags_inv = HIDEEYES|HIDEFACE|HIDEFACIALHAIR
/obj/item/clothing/head/helmet/space/plasmaman/Initialize()
. = ..()
visor_toggling()
update_icon()
cut_overlays()
/obj/item/clothing/head/helmet/space/plasmaman/AltClick(mob/user)
if(user.canUseTopic(src, BE_CLOSE))
toggle_welding_screen(user)
/obj/item/clothing/head/helmet/space/plasmaman/proc/toggle_welding_screen(mob/living/user)
if(weldingvisortoggle(user))
if(on)
to_chat(user, "<span class='notice'>Your helmet's torch can't pass through your welding visor!</span>")
on = FALSE
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing
update_icon()
else
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing
update_icon()
/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(isinhands)
. = ..()
if(!isinhands && !up)
. += mutable_appearance('icons/mob/head.dmi', visor_icon)
else
cut_overlays()
/obj/item/clothing/head/helmet/space/plasmaman/update_icon()
cut_overlays()
add_overlay(visor_icon)
..()
actions_types = list(/datum/action/item_action/toggle_helmet_light)
/obj/item/clothing/head/helmet/space/plasmaman/attackby(obj/item/C, mob/living/user)
. = ..()
if(istype(C, /obj/item/toy/crayon))
if(smile == FALSE)
var/obj/item/toy/crayon/CR = C
to_chat(user, "<span class='notice'>You start drawing a smiley face on the helmet's visor..</span>")
if(do_after(user, 25, target = src))
smile = TRUE
smile_color = CR.paint_color
to_chat(user, "You draw a smiley on the helmet visor.")
update_icon()
return
if(smile == TRUE)
to_chat(user, "<span class='notice'>Seems like someone already drew something on this helmet's visor.</span>")
/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(isinhands)
. = ..()
if(!isinhands && smile)
var/mutable_appearance/M = mutable_appearance('icons/mob/head.dmi', smile_state)
M.color = smile_color
. += M
if(!isinhands && !up)
. += mutable_appearance('icons/mob/head.dmi', visor_icon)
else
cut_overlays()
/obj/item/clothing/head/helmet/space/plasmaman/ComponentInitialize()
. = ..()
RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, .proc/wipe_that_smile_off_your_face)
///gets called when receiving the CLEAN_ACT signal from something, i.e soap or a shower. exists to remove any smiley faces drawn on the helmet.
/obj/item/clothing/head/helmet/space/plasmaman/proc/wipe_that_smile_off_your_face()
if(smile)
smile = FALSE
cut_overlays()
/obj/item/clothing/head/helmet/space/plasmaman/attack_self(mob/user)
on = !on
icon_state = "[initial(icon_state)][on ? "-light":""]"
@@ -54,10 +134,137 @@
user.update_inv_head() //So the mob overlay updates
if(on)
set_light(brightness_on, 0.8, "#FFCC66")
if(!up)
to_chat(user, "<span class='notice'>Your helmet's torch can't pass through your welding visor!</span>")
set_light(0)
else
set_light(brightness_on)
else
set_light(0)
for(var/X in actions)
var/datum/action/A=X
A.UpdateButtonIcon()
/obj/item/clothing/head/helmet/space/plasmaman/security
name = "security plasma envirosuit helmet"
desc = "A plasmaman containment helmet designed for security officers, protecting them from being flashed and burning alive, along-side other undesirables."
icon_state = "security_envirohelm"
item_state = "security_envirohelm"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75)
/obj/item/clothing/head/helmet/space/plasmaman/security/warden
name = "warden's plasma envirosuit helmet"
desc = "A plasmaman containment helmet designed for the warden, a pair of white stripes being added to differeciate them from other members of security."
icon_state = "warden_envirohelm"
item_state = "warden_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/medical
name = "medical's plasma envirosuit helmet"
desc = "An envriohelmet designed for plasmaman medical doctors, having two stripes down it's length to denote as much"
icon_state = "doctor_envirohelm"
item_state = "doctor_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/genetics
name = "geneticist's plasma envirosuit helmet"
desc = "A plasmaman envirohelmet designed for geneticists."
icon_state = "geneticist_envirohelm"
item_state = "geneticist_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/viro
name = "virology plasma envirosuit helmet"
desc = "The helmet worn by the safest people on the station, those who are completely immune to the monstrosities they create."
icon_state = "virologist_envirohelm"
item_state = "virologist_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/chemist
name = "chemistry plasma envirosuit helmet"
desc = "A plasmaman envirosuit designed for chemists, two orange stripes going down it's face."
icon_state = "chemist_envirohelm"
item_state = "chemist_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/science
name = "science plasma envirosuit helmet"
desc = "A plasmaman envirohelmet designed for scientists."
icon_state = "scientist_envirohelm"
item_state = "scientist_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/robotics
name = "robotics plasma envirosuit helmet"
desc = "A plasmaman envirohelmet designed for roboticists."
icon_state = "roboticist_envirohelm"
item_state = "roboticist_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/engineering
name = "engineering plasma envirosuit helmet"
desc = "A space-worthy helmet specially designed for engineer plasmamen, the usual purple stripes being replaced by engineering's orange."
icon_state = "engineer_envirohelm"
item_state = "engineer_envirohelm"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 75)
/obj/item/clothing/head/helmet/space/plasmaman/atmospherics
name = "atmospherics plasma envirosuit helmet"
desc = "A space-worthy helmet specially designed for atmos technician plasmamen, the usual purple stripes being replaced by engineering's blue."
icon_state = "atmos_envirohelm"
item_state = "atmos_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/cargo
name = "cargo plasma envirosuit helmet"
desc = "An plasmaman envirohelmet designed for cargo techs and quartermasters."
icon_state = "cargo_envirohelm"
item_state = "cargo_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/mining
name = "mining plasma envirosuit helmet"
desc = "A khaki helmet given to plasmamen miners operating on lavaland."
icon_state = "explorer_envirohelm"
item_state = "explorer_envirohelm"
visor_icon = "explorer_envisor"
/obj/item/clothing/head/helmet/space/plasmaman/chaplain
name = "chaplain's plasma envirosuit helmet"
desc = "An envirohelmet specially designed for only the most pious of plasmamen."
icon_state = "chap_envirohelm"
item_state = "chap_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/white
name = "white plasma envirosuit helmet"
desc = "A generic white envirohelm."
icon_state = "white_envirohelm"
item_state = "white_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/curator
name = "curator's plasma envirosuit helmet"
desc = "A slight modification on a tradiational voidsuit helmet, this helmet was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Despite their limitations, these helmets still see use by historian and old-styled plasmamen alike."
icon_state = "prototype_envirohelm"
item_state = "prototype_envirohelm"
actions_types = list(/datum/action/item_action/toggle_welding_screen/plasmaman)
smile_state = "prototype_smile"
visor_icon = "prototype_envisor"
/obj/item/clothing/head/helmet/space/plasmaman/botany
name = "botany plasma envirosuit helmet"
desc = "A green and blue envirohelmet designating it's wearer as a botanist. While not specially designed for it, it would protect against minor planet-related injuries."
icon_state = "botany_envirohelm"
item_state = "botany_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/janitor
name = "janitor's plasma envirosuit helmet"
desc = "A grey helmet bearing a pair of purple stripes, designating the wearer as a janitor."
icon_state = "janitor_envirohelm"
item_state = "janitor_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/mime
name = "mime envirosuit helmet"
desc = "The make-up is painted on, it's a miracle it doesn't chip. It's not very colourful."
icon_state = "mime_envirohelm"
item_state = "mime_envirohelm"
visor_icon = "mime_envisor"
/obj/item/clothing/head/helmet/space/plasmaman/clown
name = "clown envirosuit helmet"
desc = "The make-up is painted on, it's a miracle it doesn't chip. <i>'HONK!'</i>"
icon_state = "clown_envirohelm"
item_state = "clown_envirohelm"
visor_icon = "clown_envisor"
smile_state = "clown_smile"
+130 -3
View File
@@ -475,9 +475,7 @@
icon_state = "pharoah"
body_parts_covered = CHEST|GROIN
// WINTER COATS
//WINTER COATS
/obj/item/clothing/suit/hooded/wintercoat
name = "winter coat"
@@ -513,6 +511,16 @@
/obj/item/clothing/head/hooded/winterhood/captain
icon_state = "winterhood_captain"
/obj/item/clothing/suit/hooded/wintercoat/hop
name = "head of personnel's winter coat"
icon_state = "coathop"
item_state = "coathop"
armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 5, "rad" = 0, "fire" = 0, "acid" = 5)
hoodtype = /obj/item/clothing/head/hooded/winterhood/hop
/obj/item/clothing/head/hooded/winterhood/hop
icon_state = "winterhood_hop"
/obj/item/clothing/suit/hooded/wintercoat/security
name = "security winter coat"
icon_state = "coatsecurity"
@@ -527,6 +535,20 @@
/obj/item/clothing/head/hooded/winterhood/security
icon_state = "winterhood_security"
/obj/item/clothing/suit/hooded/wintercoat/hos
name = "head of security's winter coat"
icon_state = "coathos"
item_state = "coathos"
armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 15, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 55)
hoodtype = /obj/item/clothing/head/hooded/winterhood/hos
/obj/item/clothing/suit/hooded/wintercoat/hos/Initialize()
. = ..()
allowed = GLOB.security_wintercoat_allowed
/obj/item/clothing/head/hooded/winterhood/hos
icon_state = "winterhood_hos"
/obj/item/clothing/suit/hooded/wintercoat/medical
name = "medical winter coat"
icon_state = "coatmedical"
@@ -538,6 +560,39 @@
/obj/item/clothing/head/hooded/winterhood/medical
icon_state = "winterhood_medical"
/obj/item/clothing/suit/hooded/wintercoat/cmo
name = "chief medical officer's winter coat"
icon_state = "coatcmo"
item_state = "coatcmo"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/cmo
/obj/item/clothing/head/hooded/winterhood/cmo
icon_state = "winterhood_cmo"
/obj/item/clothing/suit/hooded/wintercoat/chemistry
name = "chemistry winter coat"
icon_state = "coatchemistry"
item_state = "coatchemistry"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 30, "acid" = 45)
hoodtype = /obj/item/clothing/head/hooded/winterhood/chemistry
/obj/item/clothing/head/hooded/winterhood/chemistry
icon_state = "winterhood_chemistry"
/obj/item/clothing/suit/hooded/wintercoat/viro
name = "virology winter coat"
icon_state = "coatviro"
item_state = "coatviro"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/viro
/obj/item/clothing/head/hooded/winterhood/viro
icon_state = "winterhood_viro"
/obj/item/clothing/suit/hooded/wintercoat/science
name = "science winter coat"
icon_state = "coatscience"
@@ -549,6 +604,49 @@
/obj/item/clothing/head/hooded/winterhood/science
icon_state = "winterhood_science"
/obj/item/clothing/suit/hooded/wintercoat/robotics
name = "robotics winter coat"
icon_state = "coatrobotics"
item_state = "coatrobotics"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/screwdriver, /obj/item/crowbar, /obj/item/wrench, /obj/item/stack/cable_coil, /obj/item/weldingtool, /obj/item/multitool)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/robotics
/obj/item/clothing/head/hooded/winterhood/robotics
icon_state = "winterhood_robotics"
/obj/item/clothing/suit/hooded/wintercoat/genetics
name = "genetics winter coat"
icon_state = "coatgenetics"
item_state = "coatgenetics"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
hoodtype = /obj/item/clothing/head/hooded/winterhood/genetics
/obj/item/clothing/head/hooded/winterhood/genetics
icon_state = "winterhood_genetics"
/obj/item/clothing/suit/hooded/wintercoat/rd
name = "research director's winter coat"
icon_state = "coatrd"
item_state = "coatrd"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 5,"energy" = 0, "bomb" = 15, "bio" = 5, "rad" = 5, "fire" = 0, "acid" = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/rd
/obj/item/clothing/head/hooded/winterhood/rd
icon_state = "winterhood_rd"
/obj/item/clothing/suit/hooded/wintercoat/ce
name = "chief engineer's winter coat"
icon_state = "coatce"
item_state = "coatce"
armor = list("melee" = 0, "bullet" = 0, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 30, "fire" = 35, "acid" = 45)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
hoodtype = /obj/item/clothing/head/hooded/winterhood/ce
/obj/item/clothing/head/hooded/winterhood/ce
icon_state = "winterhood_ce"
/obj/item/clothing/suit/hooded/wintercoat/engineering
name = "engineering winter coat"
icon_state = "coatengineer"
@@ -579,6 +677,26 @@
/obj/item/clothing/head/hooded/winterhood/hydro
icon_state = "winterhood_hydro"
/obj/item/clothing/suit/hooded/wintercoat/cosmic
name = "cosmic winter coat"
icon_state = "coatcosmic"
item_state = "coatcosmic"
allowed = list(/obj/item/flashlight)
hoodtype = /obj/item/clothing/head/hooded/winterhood/cosmic
/obj/item/clothing/head/hooded/winterhood/cosmic
icon_state = "winterhood_cosmic"
/obj/item/clothing/suit/hooded/wintercoat/janitor
name = "janitors winter coat"
icon_state = "coatjanitor"
item_state = "coatjanitor"
allowed = list(/obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter,/obj/item/grenade/chem_grenade,/obj/item/lightreplacer,/obj/item/flashlight,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/spray,/obj/item/soap,/obj/item/holosign_creator,/obj/item/key/janitor,/obj/item/melee/flyswatter,/obj/item/paint/paint_remover,/obj/item/storage/bag/trash,/obj/item/reagent_containers/glass/bucket)
hoodtype = /obj/item/clothing/head/hooded/winterhood/janitor
/obj/item/clothing/head/hooded/winterhood/janitor
icon_state = "winterhood_janitor"
/obj/item/clothing/suit/hooded/wintercoat/cargo
name = "cargo winter coat"
icon_state = "coatcargo"
@@ -588,6 +706,15 @@
/obj/item/clothing/head/hooded/winterhood/cargo
icon_state = "winterhood_cargo"
/obj/item/clothing/suit/hooded/wintercoat/qm
name = "quartermaster's winter coat"
icon_state = "coatqm"
item_state = "coatqm"
hoodtype = /obj/item/clothing/head/hooded/winterhood/qm
/obj/item/clothing/head/hooded/winterhood/qm
icon_state = "winterhood_qm"
/obj/item/clothing/suit/hooded/wintercoat/miner
name = "mining winter coat"
icon_state = "coatminer"
@@ -0,0 +1,86 @@
/obj/item/clothing/under/plasmaman/cargo
name = "cargo plasma envirosuit"
desc = "A joint envirosuit used by plasmamen quartermasters and cargo techs alike, due to the logistical problems of differenciating the two with the length of their pant legs."
icon_state = "cargo_envirosuit"
item_state = "cargo_envirosuit"
item_color = "cargo_envirosuit"
/obj/item/clothing/under/plasmaman/mining
name = "mining plasma envirosuit"
desc = "An air-tight khaki suit designed for operations on lavaland by plasmamen."
icon_state = "explorer_envirosuit"
item_state = "explorer_envirosuit"
item_color = "explorer_envirosuit"
/obj/item/clothing/under/plasmaman/chef
name = "chef's plasma envirosuit"
desc = "A white plasmaman envirosuit designed for cullinary practices. One might question why a member of a species that doesn't need to eat would become a chef."
icon_state = "chef_envirosuit"
item_state = "chef_envirosuit"
item_color = "chef_envirosuit"
/obj/item/clothing/under/plasmaman/enviroslacks
name = "enviroslacks"
desc = "The pet project of a particularly posh plasmaman, this custom suit was quickly appropriated by Nano-Trasen for it's detectives, lawyers, and bar-tenders alike."
icon_state = "enviroslacks"
item_state = "enviroslacks"
item_color = "enviroslacks"
/obj/item/clothing/under/plasmaman/chaplain
name = "chaplain's plasma envirosuit"
desc = "An envirosuit specially designed for only the most pious of plasmamen."
icon_state = "chap_envirosuit"
item_state = "chap_envirosuit"
item_color = "chap_envirosuit"
/obj/item/clothing/under/plasmaman/curator
name = "curator's plasma envirosuit"
desc = "Made out of a modified voidsuit, this suit was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Due to the modifications, the suit is no longer space-worthy. Despite their limitations, these suits are still in used by historian and old-styled plasmamen alike."
icon_state = "prototype_envirosuit"
item_state = "prototype_envirosuit"
item_color = "prototype_envirosuit"
/obj/item/clothing/under/plasmaman/janitor
name = "janitor's plasma envirosuit"
desc = "A grey and purple envirosuit designated for plasmamen janitors."
icon_state = "janitor_envirosuit"
item_state = "janitor_envirosuit"
item_color = "janitor_envirosuit"
/obj/item/clothing/under/plasmaman/botany
name = "botany envirosuit"
desc = "A green and blue envirosuit designed to protect plasmamen from minor plant-related injuries."
icon_state = "botany_envirosuit"
item_state = "botany_envirosuit"
item_color = "botany_envirosuit"
/obj/item/clothing/under/plasmaman/mime
name = "mime envirosuit"
desc = "It's not very colourful."
icon_state = "mime_envirosuit"
item_state = "mime_envirosuit"
item_color = "mime_envirosuit"
/obj/item/clothing/under/plasmaman/clown
name = "clown envirosuit"
desc = "<i>'HONK!'</i>"
icon_state = "clown_envirosuit"
item_state = "clown_envirosuit"
item_color = "clown_envirosuit"
/obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H)
if(!istype(H))
return
if(H.on_fire)
if(extinguishes_left)
if(next_extinguish > world.time)
return
next_extinguish = world.time + extinguish_cooldown
extinguishes_left--
H.visible_message("<span class='warning'>[H]'s suit spews out a tonne of space lube!</span>","<span class='warning'>Your suit spews out a tonne of space lube!</span>")
H.ExtinguishMob()
new /obj/effect/particle_effect/foam(loc) //Truely terrifying.
return 0
@@ -0,0 +1,15 @@
/obj/item/clothing/under/plasmaman/engineering
name = "engineering plasma envirosuit"
desc = "An air-tight suit designed to be used by plasmamen exployed as engineers, the usual purple stripes being replaced by engineer's orange. It protects the user from fire and acid damage."
icon_state = "engineer_envirosuit"
item_state = "engineer_envirosuit"
item_color = "engineer_envirosuit"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95)
/obj/item/clothing/under/plasmaman/atmospherics
name = "atmospherics plasma envirosuit"
desc = "An air-tight suit designed to be used by plasmamen exployed as atmos technicians, the usual purple stripes being replaced by atmos's blue."
icon_state = "atmos_envirosuit"
item_state = "atmos_envirosuit"
item_color = "atmos_envirosuit"
@@ -0,0 +1,41 @@
/obj/item/clothing/under/plasmaman/medical
name = "medical plasma envirosuit"
desc = "A suit designed for the station's more plasma-based doctors."
icon_state = "doctor_envirosuit"
item_state = "doctor_envirosuit"
item_color = "doctor_envirosuit"
/obj/item/clothing/under/plasmaman/science
name = "science plasma envirosuit"
desc = "A plasmaman envirosuit designed for scientists."
icon_state = "scientist_envirosuit"
item_state = "scientist_envirosuit"
item_color = "scientist_envirosuit"
/obj/item/clothing/under/plasmaman/robotics
name = "robotics plasma envirosuit"
desc = "A plasmaman envirosuit designed for roboticists."
icon_state = "roboticist_envirosuit"
item_state = "roboticist_envirosuit"
item_color = "roboticist_envirosuit"
/obj/item/clothing/under/plasmaman/viro
name = "virology plasma envirosuit"
desc = "The suit worn by the safest people on the station, those who are completely immune to the monstrosities they create."
icon_state = "virologist_envirosuit"
item_state = "virologist_envirosuit"
item_color = "virologist_envirosuit"
/obj/item/clothing/under/plasmaman/genetics
name = "genetics plasma envirosuit"
desc = "A plasmaman envirosuit designed for geneticists."
icon_state = "geneticist_envirosuit"
item_state = "geneticist_envirosuit"
item_color = "geneticist_envirosuit"
/obj/item/clothing/under/plasmaman/chemist
name = "chemistry plasma envirosuit"
desc = "A plasmaman envirosuit designed for chemists."
icon_state = "chemist_envirosuit"
item_state = "chemist_envirosuit"
item_color = "chemist_envirosuit"
@@ -0,0 +1,14 @@
/obj/item/clothing/under/plasmaman/security
name = "security plasma envirosuit"
desc = "A plasmaman containment suit designed for security officers, offering a limited amount of extra protection."
icon_state = "security_envirosuit"
item_state = "security_envirosuit"
item_color = "security_envirosuit"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
/obj/item/clothing/under/plasmaman/security/warden
name = "warden plasma envirosuit"
desc = "A plasmaman containment suit designed for the warden, white stripes being added to differeciate them from other members of security."
icon_state = "warden_envirosuit"
item_state = "warden_envirosuit"
item_color = "warden_envirosuit"
+8 -2
View File
@@ -709,9 +709,15 @@
icon_state = "durathread"
item_state = "durathread"
item_color = "durathread"
can_adjust = FALSE
armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
/obj/item/clothing/under/durathread/skirt
name = "durathread jumpskirt"
desc = "A jumpskirt made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "duraskirt"
item_state = "duraskirt"
item_color = "duraskirt"
can_adjust = FALSE
/obj/item/clothing/under/gear_harness
name = "gear harness"
desc = "A simple, inconspicuous harness replacement for a jumpsuit."
+27 -8
View File
@@ -912,14 +912,6 @@
time = 30
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_bandolier
name = "Durathread Bandolier"
result = /obj/item/storage/belt/bandolier/durathread
reqs = list(/obj/item/stack/sheet/durathread = 6,
/obj/item/stack/sheet/leather = 2)
time = 50
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_helmet
name = "Makeshift Durathread Helmet"
result = /obj/item/clothing/head/helmet/durathread
@@ -944,3 +936,30 @@
time = 70
category = CAT_CLOTHING
/datum/crafting_recipe/wintercoat_cosmic
name = "Cosmic Winter Coat"
result = /obj/item/clothing/suit/hooded/wintercoat/cosmic
reqs = list(/obj/item/clothing/suit/hooded/wintercoat = 1,
/obj/item/clothing/suit/hooded/wintercoat/captain = 1,
/obj/item/clothing/suit/hooded/wintercoat/hop = 1,
/obj/item/clothing/suit/hooded/wintercoat/hos = 1,
/obj/item/clothing/suit/hooded/wintercoat/rd = 1,
/obj/item/clothing/suit/hooded/wintercoat/ce = 1,
/obj/item/clothing/suit/hooded/wintercoat/cmo = 1,
/obj/item/clothing/suit/hooded/wintercoat/qm = 1,
/obj/item/clothing/suit/hooded/wintercoat/robotics = 1,
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 1,
/obj/item/clothing/suit/hooded/wintercoat/engineering = 1,
/obj/item/clothing/suit/hooded/wintercoat/science = 1,
/obj/item/clothing/suit/hooded/wintercoat/genetics = 1,
/obj/item/clothing/suit/hooded/wintercoat/chemistry = 1,
/obj/item/clothing/suit/hooded/wintercoat/medical = 1,
/obj/item/clothing/suit/hooded/wintercoat/viro = 1,
/obj/item/clothing/suit/hooded/wintercoat/janitor = 1,
/obj/item/clothing/suit/hooded/wintercoat/security = 1,
/obj/item/clothing/suit/hooded/wintercoat/cargo = 1,
/obj/item/clothing/suit/hooded/wintercoat/hydro = 1,
/obj/item/clothing/suit/hooded/wintercoat/miner = 1)
time = 60
always_availible = TRUE
category = CAT_CLOTHING
@@ -180,7 +180,7 @@
/obj/item/reagent_containers/food/snacks/proc/try_break_off(mob/living/M, mob/living/user) //maybe i give you a pizza maybe i break off your arm
var/obj/item/bodypart/l_arm = user.get_bodypart(BODY_ZONE_L_ARM)
var/obj/item/bodypart/r_arm = user.get_bodypart(BODY_ZONE_R_ARM)
if(prob(50) && iscarbon(user) && M == user && (r_arm || l_arm))
if(prob(5) && iscarbon(user) && M == user && (r_arm || l_arm))
user.visible_message("<span class='warning'>\The [src] breaks off [user]'s arm!!</span>", "<span class='warning'>\The [src] breaks off your arm!</span>")
if(l_arm)
l_arm.dismember()
@@ -64,7 +64,7 @@
production = 7
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list()
reagents_add = list(/datum/reagent/consumable/enzyme = 0.1, /datum/reagent/consumable/nutriment = 0.1)
reagents_add = list("enzyme" = 0.1, "nutriment" = 0.1)
growthstages = 4
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "bungotree-grow"
@@ -97,5 +97,5 @@
/obj/item/reagent_containers/food/snacks/grown/bungopit/Initialize()
. =..()
reagents.clear_reagents()
reagents.add_reagent(/datum/reagent/toxin/bungotoxin, seed.potency * 0.10) //More than this will kill at too low potency
reagents.add_reagent(/datum/reagent/consumable/nutriment, seed.potency * 0.04)
reagents.add_reagent("bungotoxin", seed.potency * 0.10) //More than this will kill at too low potency
reagents.add_reagent("nutriment", seed.potency * 0.04)
+2 -2
View File
@@ -68,8 +68,8 @@
icon_grow = "spacemanstrumpet-grow"
icon_dead = "spacemanstrumpet-dead"
mutatelist = list()
genes = list(/datum/plant_gene/reagent/polypyr)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.05)
genes = list( "Polypyrylium Oligomers")
reagents_add = list("nutriment" = 0.05)
rarity = 30
/obj/item/seeds/poppy/lily/trumpet/Initialize()
+1 -1
View File
@@ -81,7 +81,7 @@
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/invasive)
mutatelist = list()
reagents_add = list(/datum/reagent/consumable/nutriment = 0.05, /datum/reagent/medicine/silibinin = 0.1)
reagents_add = list("nutriment" = 0.05, "silibinin" = 0.1)
/obj/item/seeds/galaxythistle/Initialize()
..()
+3 -3
View File
@@ -212,13 +212,13 @@
endurance = 8
yield = 4
growthstages = 2
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/plant_type/carnivory)
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/teslium, /datum/plant_gene/trait/plant_type/carnivory)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
reagents_add = list("nutriment" = 0.1)
/obj/item/seeds/chanterelle/jupitercup/Initialize()
..()
unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE)
unset_mutability(/datum/plant_gene/reagent/teslium, PLANT_GENE_EXTRACTABLE)
unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE)
/obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
+4 -4
View File
@@ -153,12 +153,12 @@
/datum/plant_gene/reagent/polypyr
name = "Polypyrylium Oligomers"
reagent_id = /datum/reagent/medicine/polypyr
reagent_id = "polypyrylium_oligomers"
rate = 0.15
/datum/plant_gene/reagent/liquidelectricity
name = "Liquid Electricity"
reagent_id = "liquidelectricity"
/datum/plant_gene/reagent/teslium
name = "Teslium"
reagent_id = "teslium"
rate = 0.1
// Various traits affecting the product.
+4
View File
@@ -37,6 +37,9 @@
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/suit/hooded/wintercoat/miner(src) //yes, even both mining locker types
new /obj/item/clothing/suit/hooded/wintercoat/miner(src)
new /obj/item/clothing/suit/hooded/wintercoat/miner(src)
/obj/structure/closet/secure_closet/miner
name = "miner's equipment"
@@ -61,6 +64,7 @@
new /obj/item/clothing/glasses/meson(src)
new /obj/item/survivalcapsule(src)
new /obj/item/assault_pod/mining(src)
new /obj/item/clothing/suit/hooded/wintercoat/miner(src) //because you know you want it
/**********************Shuttle Computer**************************/
@@ -461,4 +461,8 @@
/datum/sprite_accessory/hair/longestalt
name = "Very Long with Fringe"
icon_state = "hair_vlongfringe"
icon_state = "hair_vlongfringe"
/datum/sprite_accessory/hair/quotey
name = "Tail Hair"
icon_state = "hair_tailhair"
@@ -112,6 +112,7 @@
return
adjustStaminaLoss(diff, updating, forced)
/** adjustOrganLoss
* inputs: slot (organ slot, like ORGAN_SLOT_HEART), amount (damage to be done), and maximum (currently an arbitrarily large number, can be set so as to limit damage)
* outputs:
@@ -702,7 +702,7 @@
else if(burndamage > 0)
status += LB.light_burn_msg
if(broken == 1)
status = "broken"
status = "fractured"
if(status == "")
status = "OK"
var/no_damage
@@ -5,14 +5,12 @@
sexes = 0
meat = /obj/item/stack/sheet/mineral/plasma
species_traits = list(NOBLOOD,NOTRANSSTING,NOGENITALS)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER,TRAIT_CALCIUM_HEALER)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER)
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
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
dangerous_existence = 1 //So so much
blacklisted = 1 //See above
burnmod = 1.5
heatmod = 1.5
breathid = "tox"
@@ -52,22 +50,80 @@
/datum/species/plasmaman/handle_fire(mob/living/carbon/human/H, no_protection)
if(internal_fire)
no_protection = TRUE
..()
. = ..()
/datum/species/plasmaman/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
var/current_job = J.title
var/datum/outfit/plasmaman/O = new /datum/outfit/plasmaman
switch(current_job)
if("Chaplain")
O = new /datum/outfit/plasmaman/chaplain
if("Curator")
O = new /datum/outfit/plasmaman/curator
if("Janitor")
O = new /datum/outfit/plasmaman/janitor
if("Botanist")
O = new /datum/outfit/plasmaman/botany
if("Bartender", "Lawyer")
O = new /datum/outfit/plasmaman/bar
if("Cook")
O = new /datum/outfit/plasmaman/chef
if("Security Officer")
O = new /datum/outfit/plasmaman/security
if("Detective")
O = new /datum/outfit/plasmaman/detective
if("Warden")
O = new /datum/outfit/plasmaman/warden
if("Cargo Technician", "Quartermaster")
O = new /datum/outfit/plasmaman/cargo
if("Shaft Miner")
O = new /datum/outfit/plasmaman/mining
if("Medical Doctor")
O = new /datum/outfit/plasmaman/medical
if("Chemist")
O = new /datum/outfit/plasmaman/chemist
if("Geneticist")
O = new /datum/outfit/plasmaman/genetics
if("Roboticist")
O = new /datum/outfit/plasmaman/robotics
if("Virologist")
O = new /datum/outfit/plasmaman/viro
if("Scientist")
O = new /datum/outfit/plasmaman/science
if("Station Engineer")
O = new /datum/outfit/plasmaman/engineering
if("Atmospheric Technician")
O = new /datum/outfit/plasmaman/atmospherics
if("Mime")
O = new /datum/outfit/plasmaman/mime
if("Clown")
O = new /datum/outfit/plasmaman/clown
H.equipOutfit(O, visualsOnly)
H.internal = H.get_item_for_held_index(2)
H.update_internals_hud_icon(1)
return 0
/datum/species/plasmaman/qualifies_for_rank(rank, list/features)
if(rank in GLOB.security_positions)
return 0
if(rank == "Clown" || rank == "Mime")//No funny bussiness
return 0
return ..()
/datum/species/plasmaman/random_name(gender,unique,lastname)
if(unique)
return random_unique_plasmaman_name()
@@ -78,3 +134,18 @@
randname += " [lastname]"
return randname
/datum/species/plasmaman/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
. = ..()
if(chem.type == /datum/reagent/consumable/milk)
if(chem.volume >= 6)
H.reagents.remove_reagent(chem.type, chem.volume - 5)
to_chat(H, "<span class='warning'>The excess milk is dripping off your bones!</span>")
H.heal_bodypart_damage(1.5,0, 0)
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
return TRUE
if(chem.type == /datum/reagent/toxin/bonehurtingjuice)
H.adjustBruteLoss(0.5, 0)
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
return TRUE
+4 -4
View File
@@ -79,7 +79,7 @@
/mob/living/proc/apply_effect(effect = 0,effecttype = EFFECT_STUN, blocked = FALSE)
/mob/living/proc/apply_effect(effect = 0,effecttype = EFFECT_STUN, blocked = FALSE, knockdown_stamoverride, knockdown_stammax)
var/hit_percent = (100-blocked)/100
if(!effect || (hit_percent <= 0))
return 0
@@ -87,7 +87,7 @@
if(EFFECT_STUN)
Stun(effect * hit_percent)
if(EFFECT_KNOCKDOWN)
Knockdown(effect * hit_percent)
Knockdown(effect * hit_percent, override_stamdmg = knockdown_stammax ? CLAMP(knockdown_stamoverride, 0, knockdown_stammax-getStaminaLoss()) : knockdown_stamoverride)
if(EFFECT_UNCONSCIOUS)
Unconscious(effect * hit_percent)
if(EFFECT_IRRADIATE)
@@ -107,13 +107,13 @@
return 1
/mob/living/proc/apply_effects(stun = 0, knockdown = 0, unconscious = 0, irradiate = 0, slur = 0, stutter = 0, eyeblur = 0, drowsy = 0, blocked = FALSE, stamina = 0, jitter = 0)
/mob/living/proc/apply_effects(stun = 0, knockdown = 0, unconscious = 0, irradiate = 0, slur = 0, stutter = 0, eyeblur = 0, drowsy = 0, blocked = FALSE, stamina = 0, jitter = 0, kd_stamoverride, kd_stammax)
if(blocked >= 100)
return 0
if(stun)
apply_effect(stun, EFFECT_STUN, blocked)
if(knockdown)
apply_effect(knockdown, EFFECT_KNOCKDOWN, blocked)
apply_effect(knockdown, EFFECT_KNOCKDOWN, blocked, kd_stamoverride, kd_stammax)
if(unconscious)
apply_effect(unconscious, EFFECT_UNCONSCIOUS, blocked)
if(irradiate)
+1 -1
View File
@@ -919,7 +919,7 @@
var/blocked = getarmor(null, "rad")
if(amount > RAD_BURN_THRESHOLD)
apply_damage((amount-RAD_BURN_THRESHOLD)/RAD_BURN_THRESHOLD, BURN, null, blocked)
apply_damage(log(amount)*2, BURN, null, blocked)
apply_effect((amount*RAD_MOB_COEFFICIENT)/max(1, (radiation**2)*RAD_OVERDOSE_REDUCTION), EFFECT_IRRADIATE, blocked)
+1 -1
View File
@@ -49,7 +49,7 @@
else
padloc = "(UNKNOWN)"
src.log_talk(message, LOG_SAY, tag="HOLOPAD in [padloc]")
send_speech(message, 7, T, "robot", language = language)
send_speech(message, 7, T, "robot", message_language = language)
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> <span class='message robot'>\"[message]\"</span></span></i>")
else
to_chat(src, "No holopad connected.")
@@ -237,6 +237,7 @@
R.hud_used.update_robot_modules_display()
SSblackbox.record_feedback("tally", "cyborg_modules", 1, R.module)
/* //Broken
/obj/item/robot_module/standard
name = "Standard"
basic_modules = list(
@@ -250,6 +251,7 @@
/obj/item/stack/rods/cyborg,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/extinguisher,
/obj/item/borg/apparatus/beaker/service,
/obj/item/pickaxe,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/restraints/handcuffs/cable/zipties,
@@ -262,6 +264,7 @@
/obj/item/clockwork/replica_fabricator/cyborg)
moduleselect_icon = "standard"
hat_offset = -3
*/
/obj/item/robot_module/medical
name = "Medical"
@@ -269,6 +272,7 @@
/obj/item/assembly/flash/cyborg,
/obj/item/healthanalyzer,
/obj/item/reagent_containers/borghypo,
/obj/item/borg/apparatus/beaker,
/obj/item/reagent_containers/glass/beaker/large,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
@@ -280,6 +284,8 @@
/obj/item/scalpel,
/obj/item/circular_saw,
/obj/item/extinguisher/mini,
/obj/item/soap/nanotrasen,
/obj/item/crowbar/cyborg,
/obj/item/roller/robo,
/obj/item/borg/cyborghug/medical,
/obj/item/stack/medical/gauze/cyborg,
@@ -311,8 +317,11 @@
/obj/item/multitool/cyborg,
/obj/item/t_scanner,
/obj/item/analyzer,
/obj/item/soap/nanotrasen,
/obj/item/borg/cyborghug,
/obj/item/geiger_counter/cyborg,
/obj/item/assembly/signaler/cyborg,
/obj/item/holosign_creator/atmos,
/obj/item/areaeditor/blueprints/cyborg,
/obj/item/electroadaptive_pseudocircuit,
/obj/item/stack/sheet/metal/cyborg,
@@ -335,9 +344,15 @@
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/restraints/handcuffs/cable/zipties,
/obj/item/holosign_creator/security,
/obj/item/melee/baton/loaded,
/obj/item/gun/energy/disabler/cyborg,
/obj/item/reagent_containers/spray/pepper,
/obj/item/clothing/mask/gas/sechailer/cyborg,
/obj/item/extinguisher/mini,
/obj/item/borg/cyborghug,
/obj/item/soap/nanotrasen,
/obj/item/crowbar/cyborg,
/obj/item/pinpointer/crew)
emag_modules = list(/obj/item/gun/energy/laser/cyborg)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
@@ -361,7 +376,9 @@
/obj/item/reagent_containers/borghypo/peace,
/obj/item/holosign_creator/cyborg,
/obj/item/borg/cyborghug/peacekeeper,
/obj/item/extinguisher,
/obj/item/soap/nanotrasen,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/borg/projectile_dampen)
emag_modules = list(/obj/item/reagent_containers/borghypo/peace/hacked)
ratvar_modules = list(
@@ -386,6 +403,7 @@
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/soap/nanotrasen,
/obj/item/storage/bag/trash/cyborg,
/obj/item/borg/cyborghug,
/obj/item/extinguisher/mini,
/obj/item/mop/cyborg,
/obj/item/lightreplacer/cyborg,
@@ -434,15 +452,19 @@
/obj/item/bikehorn,
/obj/item/bikehorn/airhorn,
/obj/item/paint/anycolor,
/obj/item/soap/nanotrasen,
/obj/item/cookiesynth,
/obj/item/pneumatic_cannon/pie/selfcharge/cyborg,
/obj/item/razor, //killbait material
/obj/item/lipstick/purple,
/obj/item/soap/nanotrasen,
/obj/item/reagent_containers/spray/waterflower/cyborg,
/obj/item/borg/cyborghug/peacekeeper,
/obj/item/borg/lollipop/clown,
/obj/item/picket_sign/cyborg,
/obj/item/reagent_containers/borghypo/borgshaker,
/obj/item/reagent_containers/borghypo/clown,
/obj/item/borg/apparatus/beaker/service,
/obj/item/reagent_containers/glass/beaker/large,
/obj/item/extinguisher/mini)
emag_modules = list(
/obj/item/reagent_containers/borghypo/clown/hacked,
@@ -459,16 +481,20 @@
name = "Service"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/reagent_containers/food/drinks/drinkingglass,
/obj/item/reagent_containers/glass/beaker/large,
/obj/item/borg/apparatus/beaker/service,
/obj/item/reagent_containers/food/condiment/enzyme,
/obj/item/pen,
/obj/item/toy/crayon/spraycan/borg,
/obj/item/extinguisher/mini,
/obj/item/hand_labeler/borg,
/obj/item/razor,
/obj/item/crowbar/cyborg,
/obj/item/instrument/violin,
/obj/item/soap/nanotrasen,
/obj/item/instrument/guitar,
/obj/item/rsf/cyborg,
/obj/item/borg/cyborghug,
/obj/item/reagent_containers/dropper,
/obj/item/lighter,
/obj/item/storage/bag/tray,
@@ -497,6 +523,8 @@
/obj/item/shovel,
/obj/item/crowbar/cyborg,
/obj/item/weldingtool/mini,
/obj/item/borg/cyborghug,
/obj/item/soap/nanotrasen,
/obj/item/extinguisher/mini,
/obj/item/storage/bag/sheetsnatcher/borg,
/obj/item/t_scanner/adv_mining_scanner,
@@ -208,6 +208,7 @@
throwforce = 10
created_name = "Floorbot"
var/toolbox = /obj/item/storage/toolbox/mechanical
var/toolbox_color = "" //Blank for blue, r for red, y for yellow, etc.
/obj/item/bot_assembly/floorbot/Initialize()
. = ..()
@@ -219,25 +220,45 @@
if(ASSEMBLY_FIRST_STEP)
desc = initial(desc)
name = initial(name)
icon_state = initial(icon_state)
icon_state = "[toolbox_color]toolbox_tiles"
if(ASSEMBLY_SECOND_STEP)
desc = "It's a toolbox with tiles sticking out the top and a sensor attached."
name = "incomplete floorbot assembly"
icon_state = "toolbox_tiles_sensor"
icon_state = "[toolbox_color]toolbox_tiles_sensor"
/obj/item/storage/toolbox/attackby(obj/item/stack/tile/plasteel/T, mob/user, params)
var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots
/obj/item/storage/toolbox/electrical,
/obj/item/storage/toolbox/mechanical,
/obj/item/storage/toolbox/artistic,
/obj/item/storage/toolbox/syndicate)
/obj/item/storage/toolbox/mechanical/attackby(obj/item/stack/tile/plasteel/T, mob/user, params)
if(!istype(T, /obj/item/stack/tile/plasteel))
..()
return
if(!is_type_in_list(src, allowed_toolbox) && (type != /obj/item/storage/toolbox))
return
if(contents.len >= 1)
to_chat(user, "<span class='warning'>They won't fit in, as there is already stuff inside!</span>")
return
if(T.use(10))
var/obj/item/bot_assembly/floorbot/B = new
B.toolbox = type
switch(B.toolbox)
if(/obj/item/storage/toolbox)
B.toolbox_color = "r"
if(/obj/item/storage/toolbox/emergency)
B.toolbox_color = "r"
if(/obj/item/storage/toolbox/electrical)
B.toolbox_color = "y"
if(/obj/item/storage/toolbox/artistic)
B.toolbox_color = "g"
if(/obj/item/storage/toolbox/syndicate)
B.toolbox_color = "s"
user.put_in_hands(B)
to_chat(user, "<span class='notice'>You add the tiles into the empty [src.name]. They protrude from the top.</span>")
B.update_icon()
to_chat(user, "<span class='notice'>You add the tiles into the empty [name]. They protrude from the top.</span>")
qdel(src)
else
to_chat(user, "<span class='warning'>You need 10 floor tiles to start building a floorbot!</span>")
@@ -259,7 +280,7 @@
if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot))
if(!can_finish_build(W, user))
return
var/mob/living/simple_animal/bot/floorbot/A = new(drop_location())
var/mob/living/simple_animal/bot/floorbot/A = new(drop_location(), toolbox_color)
A.name = created_name
A.robot_arm = W.type
A.toolbox = toolbox
@@ -32,6 +32,7 @@
var/turf/target
var/oldloc = null
var/toolbox = /obj/item/storage/toolbox/mechanical
var/toolbox_color = ""
#define HULL_BREACH 1
#define LINE_SPACE_MODE 2
@@ -41,12 +42,16 @@
#define REPLACE_TILE 6
#define TILE_EMAG 7
/mob/living/simple_animal/bot/floorbot/Initialize()
/mob/living/simple_animal/bot/floorbot/Initialize(mapload, new_toolbox_color)
. = ..()
toolbox_color = new_toolbox_color
update_icon()
var/datum/job/engineer/J = new/datum/job/engineer
access_card.access += J.get_access()
prev_access = access_card.access
if(toolbox_color == "s")
health = 100
maxHealth = 100
/mob/living/simple_animal/bot/floorbot/turn_on()
. = ..()
@@ -312,7 +317,7 @@
return
if(isspaceturf(target_turf)) //If we are fixing an area not part of pure space, it is
anchored = TRUE
icon_state = "floorbot-c"
icon_state = "[toolbox_color]floorbot-c"
visible_message("<span class='notice'>[targetdirection ? "[src] begins installing a bridge plating." : "[src] begins to repair the hole."] </span>")
mode = BOT_REPAIRING
sleep(50)
@@ -327,7 +332,7 @@
if(F.type != initial(tiletype.turf_type) && (F.broken || F.burnt || isplatingturf(F)) || F.type == (initial(tiletype.turf_type) && (F.broken || F.burnt)))
anchored = TRUE
icon_state = "floorbot-c"
icon_state = "[toolbox_color]floorbot-c"
mode = BOT_REPAIRING
visible_message("<span class='notice'>[src] begins repairing the floor.</span>")
sleep(50)
@@ -338,7 +343,7 @@
if(replacetiles && F.type != initial(tiletype.turf_type) && specialtiles && !isplatingturf(F))
anchored = TRUE
icon_state = "floorbot-c"
icon_state = "[toolbox_color]floorbot-c"
mode = BOT_REPAIRING
visible_message("<span class='notice'>[src] begins replacing the floor tiles.</span>")
sleep(50)
@@ -355,7 +360,7 @@
target = null
/mob/living/simple_animal/bot/floorbot/update_icon()
icon_state = "floorbot[on]"
icon_state = "[toolbox_color]floorbot[on]"
/mob/living/simple_animal/bot/floorbot/explode()
+1 -1
View File
@@ -20,7 +20,7 @@
name = "hybrid taser"
desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams."
icon_state = "advtaser"
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler)
ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/electrode)
ammo_x_offset = 2
/obj/item/gun/energy/e_gun/advtaser/cyborg
+3 -1
View File
@@ -88,6 +88,8 @@
//Effects
var/stun = 0
var/knockdown = 0
var/knockdown_stamoverride
var/knockdown_stam_max
var/unconscious = 0
var/irradiate = 0
var/stutter = 0
@@ -202,7 +204,7 @@
else
L.log_message("has been shot by [firer] with [src]", LOG_ATTACK, color="orange")
return L.apply_effects(stun, knockdown, unconscious, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter)
return L.apply_effects(stun, knockdown, unconscious, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter, knockdown_stamoverride, knockdown_stam_max)
/obj/item/projectile/proc/vol_by_damage()
if(src.damage)
@@ -3,7 +3,9 @@
icon_state = "spark"
color = "#FFFF00"
nodamage = 1
knockdown = 100
knockdown = 60
knockdown_stamoverride = 36
knockdown_stam_max = 50
stutter = 5
jitter = 20
hitsound = 'sound/weapons/taserhit.ogg'
@@ -11,6 +13,7 @@
tracer_type = /obj/effect/projectile/tracer/stun
muzzle_type = /obj/effect/projectile/muzzle/stun
impact_type = /obj/effect/projectile/impact/stun
var/tase_duration = 50
/obj/item/projectile/energy/electrode/on_hit(atom/target, blocked = FALSE)
. = ..()
@@ -23,6 +26,7 @@
if(C.dna && C.dna.check_mutation(HULK))
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
C.apply_status_effect(STATUS_EFFECT_TASED, tase_duration)
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
@@ -1421,6 +1421,7 @@
/datum/reagent/medicine/silibinin
name = "Silibinin"
id = "silibinin"
description = "A thistle derrived hepatoprotective flavolignan mixture that help reverse damage to the liver."
reagent_state = SOLID
color = "#FFFFD0"
@@ -1433,6 +1434,7 @@
/datum/reagent/medicine/polypyr //This is intended to be an ingredient in advanced chems.
name = "Polypyrylium Oligomers"
id = "polypyrylium_oligomers"
description = "A?purple mixture of short polyelectrolyte chains not easily synthesized in the laboratory. It is valued as an intermediate in the synthesis of the cutting edge pharmaceuticals."
reagent_state = SOLID
color = "#9423FF"
@@ -903,6 +903,7 @@
/datum/reagent/toxin/bungotoxin
name = "Bungotoxin"
id = "bungotoxin"
description = "A horrible cardiotoxin that protects the humble bungo pit."
silent_toxin = TRUE
color = "#EBFF8E"
@@ -704,7 +704,7 @@
materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_SILVER=10000, MAT_GOLD=10000, MAT_TITANIUM=5000, MAT_DIAMOND=5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_surgicalprocessor
name = "Cyborg Upgrade (Surgical Processor)"
id = "borg_upgrade_surgicalprocessor"
@@ -759,6 +759,15 @@
construction_time = 120
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_circuit_app
name = "Cyborg Upgrade (Circuit Manipulator)"
id = "borg_upgrade_circuitapp"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/circuit_app
materials = list(MAT_METAL=2000, MAT_TITANIUM=500)
construction_time = 120
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_pinpointer
name = "Cyborg Upgrade (Crew pinpointer)"
id = "borg_upgrade_pinpointer"
@@ -83,6 +83,7 @@
/obj/item/bodypart/blob_act()
take_damage(max_damage)
/obj/item/bodypart/Destroy()
if(owner)
owner.bodyparts -= src
+11
View File
@@ -0,0 +1,11 @@
/obj/item/bodypart/proc/break_bone(dam_type = BRUTE)
if(!owner)
return FALSE
var/mob/living/carbon/C = owner
if(!dismemberable)
return FALSE
if(broken == 0) //Its not broken.
C.visible_message("<span class ='danger'><B>[C]'s [src.name] contorts in an unnatural way!</B></span>")
C.emote("scream")
broken = 1
disabled = 1
@@ -358,6 +358,7 @@
L.burn_dam = 0
L.brutestate = 0
L.burnstate = 0
L.broken = 0
L.attach_limb(src, 1)
return 1
+5
View File
@@ -123,6 +123,7 @@
products = list(/obj/item/clothing/glasses/hud/diagnostic = 3,
/obj/item/clothing/under/rank/roboticist = 3,
/obj/item/clothing/under/rank/roboticist/skirt = 3,
/obj/item/clothing/suit/hooded/wintercoat/robotics = 3,
/obj/item/clothing/suit/toggle/labcoat = 3,
/obj/item/clothing/shoes/sneakers/black = 3,
/obj/item/clothing/gloves/fingerless = 3,
@@ -255,6 +256,7 @@
vend_reply = "Thank you for using the JaniDrobe!"
products = list(/obj/item/clothing/under/rank/janitor = 2,
/obj/item/clothing/under/rank/janitor/skirt = 2,
/obj/item/clothing/suit/hooded/wintercoat/janitor = 3,
/obj/item/cartridge/janitor = 3,
/obj/item/clothing/gloves/color/black = 2,
/obj/item/clothing/head/soft/purple = 2,
@@ -334,6 +336,7 @@
vend_reply = "Thank you for using the ChemDrobe!"
products = list(/obj/item/clothing/under/rank/chemist = 3,
/obj/item/clothing/under/rank/chemist/skirt = 3,
/obj/item/clothing/suit/hooded/wintercoat/chemistry = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/chemist = 3,
/obj/item/storage/backpack/chemistry = 3,
@@ -353,6 +356,7 @@
vend_reply = "Thank you for using the GeneDrobe!"
products = list(/obj/item/clothing/under/rank/geneticist = 3,
/obj/item/clothing/under/rank/geneticist/skirt = 3,
/obj/item/clothing/suit/hooded/wintercoat/genetics = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/genetics = 3,
/obj/item/storage/backpack/genetics = 3,
@@ -370,6 +374,7 @@
vend_reply = "Thank you for using the ViroDrobe"
products = list(/obj/item/clothing/under/rank/virologist = 3,
/obj/item/clothing/under/rank/virologist/skirt = 3,
/obj/item/clothing/suit/hooded/wintercoat/viro = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/virologist = 3,
/obj/item/clothing/mask/surgical = 3,
Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 KiB

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

After

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 41 KiB

+25 -9
View File
@@ -78,10 +78,10 @@ GLOBAL_LIST_EMPTY(menulist)
/datum/verbs/menu/Settings/FPS
checkbox = CHECKBOX_GROUP
default = /datum/verbs/menu/Settings/FPS/verb/high
default = /datum/verbs/menu/Settings/FPS/verb/twentyfiveframes
/datum/verbs/menu/Settings/FPS/verb/low()
set name = "Low-end FPS"
/datum/verbs/menu/Settings/FPS/verb/twentyframes()
set name = "Low-End (20) FPS"
set desc = "&20 fps"
set category = "Preferences"
set hidden = 1
@@ -89,8 +89,8 @@ GLOBAL_LIST_EMPTY(menulist)
usr.client.prefs.parent.fps = 20
/datum/verbs/menu/Settings/FPS/verb/high()
set name = "High-end FPS"
/datum/verbs/menu/Settings/FPS/verb/twentyfiveframes()
set name = "High-End (25) FPS"
set desc = "&25 fps"
set category = "Preferences"
set hidden = 1
@@ -98,21 +98,37 @@ GLOBAL_LIST_EMPTY(menulist)
usr.client.prefs.parent.fps = 25
/datum/verbs/menu/Settings/FPS/verb/vhigh()
set name = "Higher-end FPS"
/datum/verbs/menu/Settings/FPS/verb/thirtyframes()
set name = "Higher-End (30) FPS"
set desc = "&30 fps"
set category = "Preferences"
set hidden = 1
usr.client.prefs.clientfps = 30
usr.client.prefs.parent.fps = 30
/datum/verbs/menu/Settings/FPS/verb/fortyframes()
set name = "Very Higher-End (40) FPS"
set desc = "&40 fps"
set category = "Preferences"
set hidden = 1
usr.client.prefs.clientfps = 40
usr.client.prefs.parent.fps = 40
/datum/verbs/menu/Settings/FPS/verb/sixtyframes()
set name = "Very Very Higher-End (60) FPS"
set desc = "&60 fps"
set category = "Preferences"
set hidden = 1
usr.client.prefs.clientfps = 60
usr.client.prefs.parent.fps = 60
/datum/verbs/menu/Settings/ChatOutput
checkbox = CHECKBOX_GROUP
default = /datum/verbs/menu/Settings/ChatOutput/verb/newchat
/datum/verbs/menu/Settings/ChatOutput/verb/oldchat()
set name = "Old Chat"
set name = "Old BYONDChat"
set desc = "&Old Chat (Faster)"
set hidden = 1
set category = "Preferences"
@@ -120,7 +136,7 @@ GLOBAL_LIST_EMPTY(menulist)
winset(src, "browseroutput", "is-visible=false")
/datum/verbs/menu/Settings/ChatOutput/verb/newchat()
set name = "Fancy Chat"
set name = "Fancy Goonchat"
set desc = "&Fancy Chat (Slower)"
set hidden = 1
set category = "Preferences"
@@ -92,3 +92,8 @@
name = "Headphones"
category = SLOT_NECK
path = /obj/item/clothing/ears/headphones
/datum/gear/polycloak
name = "Polychromic Cloak"
category = SLOT_NECK
path = /obj/item/clothing/neck/cloak/polychromic
@@ -18,9 +18,13 @@
return FALSE
return .
/mob/living/carbon/proc/toggle_combat_mode()
/mob/living/carbon/proc/toggle_combat_mode(forced)
if(recoveringstam)
return TRUE
if(!forced)
for(var/datum/status_effect/S in status_effects)
if(S.blocks_combatmode)
return TRUE
combatmode = !combatmode
if(voremode)
toggle_vore_mode()
@@ -154,9 +154,8 @@
attack_verb = "flutter" //wat?
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
liked_food = VEGETABLES | DAIRY| CLOTH
disliked_food = FRUIT | GROSS
toxic_food = MEAT | RAW
liked_food = VEGETABLES | DAIRY| CLOTH |FRUIT
toxic_food = GROSS | RAW | FRIED
/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
. = ..()
@@ -116,7 +116,7 @@
to_chat(src, "<span class='notice'>You're too exhausted to keep going...</span>")
resting = TRUE
if(combatmode)
toggle_combat_mode()
toggle_combat_mode(TRUE)
recoveringstam = TRUE
filters += CIT_FILTER_STAMINACRIT
update_canmove()
@@ -37,6 +37,7 @@
/obj/item/clothing/mask/gas/sechailer/cyborg,
/obj/item/soap/tongue,
/obj/item/analyzer/nose,
/obj/item/holosign_creator/security,
/obj/item/dogborg/sleeper/K9,
/obj/item/gun/energy/disabler/cyborg,
/obj/item/pinpointer/crew)
@@ -88,9 +89,12 @@
/obj/item/healthanalyzer,
/obj/item/dogborg/sleeper/medihound,
/obj/item/roller/robo,
/obj/item/crowbar/cyborg,
/obj/item/borg/apparatus/beaker,
/obj/item/reagent_containers/borghypo,
/obj/item/twohanded/shockpaddles/cyborg/hound,
/obj/item/stack/medical/gauze/cyborg,
/obj/item/reagent_containers/syringe,
/obj/item/pinpointer/crew,
/obj/item/sensor_device)
emag_modules = list(/obj/item/dogborg/pounce)
@@ -132,9 +136,13 @@
basic_modules = list(
/obj/item/dogborg/jaws/small,
/obj/item/analyzer/nose,
/obj/item/crowbar/cyborg,
/obj/item/soap/tongue/scrubpup,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/storage/bag/trash/cyborg,
/obj/item/lightreplacer/cyborg,
/obj/item/extinguisher/mini,
/obj/item/holosign_creator,
/obj/item/dogborg/sleeper/compactor)
emag_modules = list(/obj/item/dogborg/pounce)
ratvar_modules = list(
@@ -168,7 +176,12 @@
/obj/item/storage/bag/borgdelivery,
/obj/item/analyzer/nose,
/obj/item/soap/tongue,
/obj/item/cookiesynth,
/obj/item/holosign_creator/cyborg,
/obj/item/crowbar/cyborg,
/obj/item/borg/projectile_dampen,
/obj/item/healthanalyzer,
/obj/item/reagent_containers/borghypo/peace,
/obj/item/extinguisher/mini,
/obj/item/borg/cyborghug)
emag_modules = list(/obj/item/dogborg/pounce)
@@ -210,7 +223,6 @@
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
cyborg_pixel_offset = -16
/obj/item/robot_module/miner/do_transform_animation()
var/mob/living/silicon/robot/R = loc
R.cut_overlays()
@@ -222,7 +234,7 @@
/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot")
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot", "BootyF", "BootyM", "BootyS", "Haydee")
if(!borg_icon)
return FALSE
switch(borg_icon)
@@ -244,11 +256,27 @@
if("Heavy")
cyborg_base_icon = "heavymed"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("BootyF")
cyborg_base_icon = "bootymedical"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootymedicalM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootymedicalS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("Haydee")
cyborg_base_icon = "haydeemedical"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/janitor/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/list/janimodels = list("Default", "Sleek", "Marina", "Can", "Heavy")
var/list/janimodels = list("Default", "Sleek", "Marina", "Can", "Heavy", "BootyF", "BootyM", "BootyS")
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in janimodels
if(!borg_icon)
return FALSE
@@ -267,11 +295,23 @@
if("Heavy")
cyborg_base_icon = "heavyres"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("BootyF")
cyborg_base_icon = "bootyjanitor"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootyjanitorM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootyjanitorS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/peacekeeper/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Spider")
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Spider", "BootyF", "BootyM", "BootyS")
if(!borg_icon)
return FALSE
switch(borg_icon)
@@ -280,11 +320,23 @@
if("Spider")
cyborg_base_icon = "whitespider"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("BootyF")
cyborg_base_icon = "bootypeace"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootypeaceM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootypeaceS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads", "Heavy", "Sleek", "Can", "Marina", "Spider")
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads", "Heavy", "Sleek", "Can", "Marina", "Spider", "BootyF", "BootyM", "BootyS")
if(!borg_icon)
return FALSE
switch(borg_icon)
@@ -309,11 +361,23 @@
if("Heavy")
cyborg_base_icon = "heavysec"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("BootyF")
cyborg_base_icon = "bootysecurity"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootysecurityM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootysecurityS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Waitress", "Heavy", "Sleek", "Butler", "Tophat", "Kent", "Bro")
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Waitress", "Heavy", "Sleek", "Butler", "Tophat", "Kent", "Bro", "BootyF", "BootyM", "BootyS")
if(!borg_icon)
return FALSE
switch(borg_icon)
@@ -339,11 +403,23 @@
cyborg_base_icon = "heavyserv"
special_light_key = "heavyserv"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("BootyF")
cyborg_base_icon = "bootyservice"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootyserviceM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootyserviceS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer")
var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer", "BootyF", "BootyM", "BootyS")
if(R.client && R.client.ckey in list("nezuli"))
engymodels += "Alina"
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in engymodels
@@ -395,11 +471,23 @@
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
if("BootyF")
cyborg_base_icon = "bootyengineer"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootyengineerM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootyengineerS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid")
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid", "BootyF", "BootyM", "BootyS")
if(!borg_icon)
return FALSE
switch(borg_icon)
@@ -427,4 +515,60 @@
if("Heavy")
cyborg_base_icon = "heavymin"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("BootyF")
cyborg_base_icon = "bootyminer"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootyminerM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootyminerS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/standard/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Standard", "BootyF", "BootyM", "BootyS")
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Standard")
cyborg_base_icon = "standard"
if("BootyF")
cyborg_base_icon = "bootystandard"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootystandardM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootystandardS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
/obj/item/robot_module/clown/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Standard", "BootyF", "BootyM", "BootyS")
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Standard")
cyborg_base_icon = "clown"
if("BootyF")
cyborg_base_icon = "bootyclown"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyM")
cyborg_base_icon = "bootyclownM"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
if("BootyS")
cyborg_base_icon = "bootyclownS"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 3
return ..()
@@ -1,2 +0,0 @@
/obj/item/projectile/energy/electrode
stamina = 36

Some files were not shown because too many files have changed in this diff Show More