Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit483
This commit is contained in:
@@ -226,6 +226,12 @@
|
||||
/obj/structure/chair/stool,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"aaK" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/bar)
|
||||
"aaL" = (
|
||||
/obj/machinery/computer/libraryconsole/bookmanagement,
|
||||
/obj/structure/table,
|
||||
@@ -5861,7 +5867,7 @@
|
||||
pixel_y = -2
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -8268,7 +8274,7 @@
|
||||
},
|
||||
/obj/structure/filingcabinet/employment,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -8414,7 +8420,7 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"asl" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
@@ -9588,7 +9594,7 @@
|
||||
/area/maintenance/fore)
|
||||
"avj" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -11430,7 +11436,7 @@
|
||||
/obj/item/clothing/under/gladiator,
|
||||
/obj/item/clothing/under/gladiator,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -13476,13 +13482,6 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/bar)
|
||||
"aDQ" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/bar)
|
||||
"aDR" = (
|
||||
/obj/structure/closet/lasertag/blue,
|
||||
/obj/item/clothing/under/pj/blue,
|
||||
@@ -14587,7 +14586,7 @@
|
||||
/area/ai_monitored/nuke_storage)
|
||||
"aGf" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -15886,7 +15885,7 @@
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/item/plant_analyzer,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/green,
|
||||
@@ -17035,7 +17034,7 @@
|
||||
/area/construction/mining/aux_base)
|
||||
"aLv" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -19589,7 +19588,7 @@
|
||||
/area/library)
|
||||
"aRR" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -19620,7 +19619,7 @@
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -19680,6 +19679,7 @@
|
||||
/area/storage/tools)
|
||||
"aSd" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = -24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -21255,7 +21255,7 @@
|
||||
"aVH" = (
|
||||
/obj/machinery/processor,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
@@ -23027,7 +23027,7 @@
|
||||
/area/bridge/meeting_room)
|
||||
"aZv" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/table,
|
||||
@@ -23357,7 +23357,7 @@
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -23901,7 +23901,7 @@
|
||||
/area/chapel/main)
|
||||
"bbG" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -24036,7 +24036,7 @@
|
||||
/area/crew_quarters/locker)
|
||||
"bbV" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -25327,7 +25327,7 @@
|
||||
layer = 2.9
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
@@ -26112,7 +26112,7 @@
|
||||
/area/crew_quarters/heads/captain)
|
||||
"bgY" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -28412,7 +28412,7 @@
|
||||
},
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -28706,7 +28706,7 @@
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -28945,7 +28945,7 @@
|
||||
/obj/item/assembly/flash/handheld,
|
||||
/obj/item/assembly/flash/handheld,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -29837,7 +29837,7 @@
|
||||
"bpg" = (
|
||||
/obj/structure/chair/office/light,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -29884,7 +29884,7 @@
|
||||
network = list("ss13","medbay")
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/closet/secure_closet/personal/patient,
|
||||
@@ -30212,7 +30212,7 @@
|
||||
/area/science/robotics/lab)
|
||||
"bpX" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -31709,7 +31709,7 @@
|
||||
"btt" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/folder/yellow,
|
||||
@@ -34596,7 +34596,7 @@
|
||||
/area/science/research)
|
||||
"bzF" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -34892,7 +34892,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -36231,7 +36231,7 @@
|
||||
/area/quartermaster/miningdock)
|
||||
"bDl" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -36265,7 +36265,7 @@
|
||||
/area/quartermaster/miningdock)
|
||||
"bDp" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -42597,7 +42597,7 @@
|
||||
/area/medical/virology)
|
||||
"bRO" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -45588,7 +45588,7 @@
|
||||
/area/engine/break_room)
|
||||
"bYI" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow,
|
||||
@@ -47354,7 +47354,7 @@
|
||||
/area/maintenance/port/aft)
|
||||
"ccv" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -48381,7 +48381,7 @@
|
||||
/area/crew_quarters/heads/chief)
|
||||
"cfd" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
@@ -51655,7 +51655,7 @@
|
||||
/area/engine/engineering)
|
||||
"cmG" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -52930,7 +52930,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
@@ -53882,7 +53882,7 @@
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -54088,7 +54088,7 @@
|
||||
"cuo" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner,
|
||||
@@ -54175,7 +54175,7 @@
|
||||
amount = 35
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
@@ -54830,7 +54830,7 @@
|
||||
network = list("aicore")
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/circuit,
|
||||
@@ -55028,7 +55028,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -56922,7 +56922,7 @@
|
||||
/area/engine/engineering)
|
||||
"cEk" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -59662,7 +59662,7 @@
|
||||
"vzp" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/stock_parts/cell/high,
|
||||
@@ -95402,7 +95402,7 @@ cNE
|
||||
aQP
|
||||
awB
|
||||
awB
|
||||
aDQ
|
||||
aaK
|
||||
aFi
|
||||
awB
|
||||
awB
|
||||
|
||||
@@ -1800,7 +1800,7 @@
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
@@ -15186,7 +15186,7 @@
|
||||
/area/crew_quarters/bar)
|
||||
"aGc" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = 32
|
||||
},
|
||||
@@ -15457,7 +15457,7 @@
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -16828,7 +16828,7 @@
|
||||
/area/maintenance/disposal/incinerator)
|
||||
"aIy" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -17791,7 +17791,7 @@
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
@@ -21486,7 +21486,7 @@
|
||||
"aQl" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/camera,
|
||||
@@ -23602,7 +23602,7 @@
|
||||
/area/crew_quarters/theatre)
|
||||
"aTy" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -27337,7 +27337,7 @@
|
||||
/area/crew_quarters/bar/atrium)
|
||||
"aYF" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -27513,7 +27513,7 @@
|
||||
"aYR" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -27639,7 +27639,7 @@
|
||||
"aZb" = (
|
||||
/obj/machinery/photocopier,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -29336,7 +29336,7 @@
|
||||
pixel_y = 22
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/chem_master/condimaster{
|
||||
@@ -29603,7 +29603,7 @@
|
||||
/obj/item/clipboard,
|
||||
/obj/item/toy/figure/miner,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -30819,7 +30819,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -31057,7 +31057,7 @@
|
||||
"beY" = (
|
||||
/obj/structure/kitchenspike,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -32627,7 +32627,7 @@
|
||||
/area/crew_quarters/kitchen)
|
||||
"bhL" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = 32
|
||||
},
|
||||
@@ -37308,7 +37308,6 @@
|
||||
/obj/item/clothing/accessory/armband/deputy,
|
||||
/obj/item/clothing/accessory/armband/deputy,
|
||||
/obj/item/clothing/accessory/armband/deputy,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
@@ -40095,7 +40094,7 @@
|
||||
/area/crew_quarters/heads/hos)
|
||||
"bty" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -40782,7 +40781,7 @@
|
||||
/area/security/main)
|
||||
"buM" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -41844,7 +41843,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -43216,7 +43215,7 @@
|
||||
"byI" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -43230,7 +43229,7 @@
|
||||
/area/security/execution/transfer)
|
||||
"byJ" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -48755,7 +48754,7 @@
|
||||
/area/engine/gravity_generator)
|
||||
"bGg" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
@@ -48794,7 +48793,7 @@
|
||||
/area/engine/break_room)
|
||||
"bGk" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
@@ -48935,7 +48934,7 @@
|
||||
"bGt" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -49890,7 +49889,7 @@
|
||||
/area/engine/gravity_generator)
|
||||
"bHS" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -50406,7 +50405,7 @@
|
||||
"bIG" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
@@ -51881,7 +51880,7 @@
|
||||
"bKU" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -52445,7 +52444,7 @@
|
||||
"bLK" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
@@ -55374,7 +55373,7 @@
|
||||
"bQh" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -57009,7 +57008,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -57153,7 +57152,7 @@
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -57248,7 +57247,7 @@
|
||||
layer = 2.9
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -60797,7 +60796,7 @@
|
||||
"bXY" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
@@ -60899,7 +60898,7 @@
|
||||
"bYh" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
@@ -60920,7 +60919,7 @@
|
||||
"bYi" = (
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
@@ -62280,7 +62279,7 @@
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"caj" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/porta_turret/ai,
|
||||
@@ -64037,7 +64036,7 @@
|
||||
"cdk" = (
|
||||
/obj/machinery/vending/wardrobe/law_wardrobe,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -64076,7 +64075,7 @@
|
||||
/area/security/brig)
|
||||
"cdn" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -67030,7 +67029,7 @@
|
||||
/area/engine/engineering)
|
||||
"chF" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -67361,7 +67360,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
@@ -69328,7 +69327,7 @@
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = 32
|
||||
},
|
||||
@@ -70711,7 +70710,7 @@
|
||||
},
|
||||
/obj/item/camera_film,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
@@ -76603,7 +76602,7 @@
|
||||
},
|
||||
/obj/item/crowbar,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
@@ -77602,7 +77601,7 @@
|
||||
"czP" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -77888,7 +77887,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/cable/white{
|
||||
@@ -78794,7 +78793,7 @@
|
||||
"cBL" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
@@ -80798,7 +80797,7 @@
|
||||
/obj/item/radio,
|
||||
/obj/item/radio,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -81427,7 +81426,7 @@
|
||||
/obj/item/clothing/head/welding,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24;
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -82645,7 +82644,7 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"cIk" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -87477,7 +87476,7 @@
|
||||
"cQE" = (
|
||||
/obj/structure/closet/secure_closet/security/science,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/status_display{
|
||||
@@ -88838,7 +88837,7 @@
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -95618,7 +95617,7 @@
|
||||
/obj/item/paper_bin,
|
||||
/obj/item/pen,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/storage/bag/bio,
|
||||
@@ -96554,7 +96553,7 @@
|
||||
/obj/item/reagent_containers/glass/bottle/epinephrine,
|
||||
/obj/item/reagent_containers/dropper,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -100259,7 +100258,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
@@ -100623,7 +100622,7 @@
|
||||
/area/science/explab)
|
||||
"dmJ" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -100634,7 +100633,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -103278,7 +103277,7 @@
|
||||
pixel_x = 36
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/vending/assist,
|
||||
@@ -103445,7 +103444,7 @@
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -104055,7 +104054,7 @@
|
||||
"dti" = (
|
||||
/obj/structure/closet/bombcloset,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -104389,7 +104388,7 @@
|
||||
/area/medical/surgery)
|
||||
"dtQ" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -105002,7 +105001,7 @@
|
||||
"duZ" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24;
|
||||
pixel_y = -26
|
||||
},
|
||||
@@ -105033,7 +105032,7 @@
|
||||
"dvd" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -107185,7 +107184,7 @@
|
||||
"dyD" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/status_display/ai{
|
||||
@@ -108398,7 +108397,7 @@
|
||||
/obj/item/clothing/glasses/welding,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -111492,7 +111491,7 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -111886,7 +111885,7 @@
|
||||
pixel_y = 26
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24;
|
||||
pixel_y = -26
|
||||
},
|
||||
@@ -112582,7 +112581,7 @@
|
||||
/area/science/robotics/lab)
|
||||
"dHC" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
@@ -113983,7 +113982,7 @@
|
||||
"dJO" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -114247,7 +114246,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
@@ -116746,7 +116745,7 @@
|
||||
"dOC" = (
|
||||
/obj/structure/filingcabinet/medical,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -117626,7 +117625,7 @@
|
||||
name = "emergency shower"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
@@ -118825,7 +118824,7 @@
|
||||
/area/medical/virology)
|
||||
"dSd" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -119657,7 +119656,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/sign/poster/official/work_for_a_future{
|
||||
@@ -119868,7 +119867,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -121622,7 +121621,7 @@
|
||||
"dXI" = (
|
||||
/obj/structure/chair/wood,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -122148,7 +122147,7 @@
|
||||
/area/medical/virology)
|
||||
"dYV" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/closet/secure_closet/medical1,
|
||||
@@ -125155,7 +125154,7 @@
|
||||
},
|
||||
/obj/item/camera_film,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/status_display{
|
||||
@@ -125251,7 +125250,7 @@
|
||||
"eeH" = (
|
||||
/obj/structure/filingcabinet/security,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -125960,7 +125959,7 @@
|
||||
"egb" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/clipboard,
|
||||
|
||||
@@ -1445,7 +1445,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -3882,7 +3882,7 @@
|
||||
/obj/item/clothing/head/helmet/riot,
|
||||
/obj/item/clothing/head/helmet/riot,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -4020,7 +4020,7 @@
|
||||
"ahJ" = (
|
||||
/obj/machinery/disposal/bin,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -4158,7 +4158,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -4903,7 +4903,7 @@
|
||||
name = "Evidence Closet 5"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -7192,7 +7192,7 @@
|
||||
/obj/item/reagent_containers/glass/bottle/morphine,
|
||||
/obj/machinery/light/small,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -7248,7 +7248,7 @@
|
||||
"anu" = (
|
||||
/obj/machinery/vending/security,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
@@ -7733,7 +7733,7 @@
|
||||
"aot" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -7780,7 +7780,7 @@
|
||||
/area/maintenance/port/fore)
|
||||
"aoy" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/structure/closet/secure_closet/warden,
|
||||
@@ -9298,7 +9298,7 @@
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
@@ -9456,7 +9456,7 @@
|
||||
/area/engine/gravity_generator)
|
||||
"arS" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -11192,7 +11192,7 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -13469,7 +13469,7 @@
|
||||
/area/security/brig)
|
||||
"azQ" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/filingcabinet,
|
||||
@@ -14063,7 +14063,7 @@
|
||||
/area/hallway/primary/fore)
|
||||
"aAX" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -14112,7 +14112,7 @@
|
||||
"aBc" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -14609,7 +14609,7 @@
|
||||
maxcharge = 2000
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
@@ -15124,7 +15124,7 @@
|
||||
/area/maintenance/port/fore)
|
||||
"aDh" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -16127,7 +16127,7 @@
|
||||
"aFc" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -16225,7 +16225,7 @@
|
||||
"aFo" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -16236,7 +16236,7 @@
|
||||
"aFp" = (
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -16584,7 +16584,7 @@
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -16858,7 +16858,7 @@
|
||||
},
|
||||
/obj/item/pen,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/reagent_dispensers/peppertank{
|
||||
@@ -17616,7 +17616,7 @@
|
||||
/area/maintenance/starboard/fore)
|
||||
"aHX" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -18710,7 +18710,7 @@
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -19722,7 +19722,7 @@
|
||||
/area/storage/primary)
|
||||
"aMF" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -19794,7 +19794,7 @@
|
||||
/area/hallway/primary/fore)
|
||||
"aMK" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -20623,7 +20623,7 @@
|
||||
/area/lawoffice)
|
||||
"aOs" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/table,
|
||||
@@ -21207,7 +21207,7 @@
|
||||
"aPA" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -21396,7 +21396,7 @@
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -23473,7 +23473,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -23863,7 +23863,7 @@
|
||||
/area/crew_quarters/locker)
|
||||
"aUL" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -25956,7 +25956,7 @@
|
||||
pixel_x = -38
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
@@ -28079,7 +28079,7 @@
|
||||
"bcn" = (
|
||||
/obj/structure/rack,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/item/clothing/gloves/color/fyellow,
|
||||
@@ -28277,7 +28277,7 @@
|
||||
/area/storage/tech)
|
||||
"bcE" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -28446,7 +28446,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
@@ -28566,7 +28566,7 @@
|
||||
},
|
||||
/obj/structure/closet/secure_closet/security,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -28783,7 +28783,7 @@
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -29276,7 +29276,7 @@
|
||||
"beo" = (
|
||||
/obj/structure/closet/secure_closet/security/engine,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
@@ -30114,7 +30114,7 @@
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -30613,7 +30613,7 @@
|
||||
/obj/item/mop,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -31943,7 +31943,7 @@
|
||||
/area/hallway/primary/starboard)
|
||||
"bjE" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -32353,7 +32353,7 @@
|
||||
"bkn" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -33024,7 +33024,7 @@
|
||||
/obj/machinery/computer/teleporter,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -34207,7 +34207,7 @@
|
||||
/area/ai_monitored/storage/satellite)
|
||||
"bnK" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -34637,7 +34637,7 @@
|
||||
/area/bridge)
|
||||
"boC" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/item/storage/fancy/donut_box,
|
||||
@@ -36458,7 +36458,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -37243,7 +37243,7 @@
|
||||
/obj/structure/table,
|
||||
/obj/item/camera_film,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -38242,7 +38242,7 @@
|
||||
pixel_x = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -38729,7 +38729,7 @@
|
||||
"bwr" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -38821,7 +38821,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -38943,7 +38943,7 @@
|
||||
"bwK" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/machinery/chem_dispenser/drinks,
|
||||
@@ -39807,7 +39807,7 @@
|
||||
"byv" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -39973,7 +39973,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
@@ -40671,7 +40671,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
@@ -41103,7 +41103,7 @@
|
||||
pixel_y = -30
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/item/paper_bin{
|
||||
@@ -41614,7 +41614,7 @@
|
||||
/area/crew_quarters/theatre)
|
||||
"bCd" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
@@ -41949,7 +41949,7 @@
|
||||
/area/crew_quarters/toilet/auxiliary)
|
||||
"bCS" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -44190,7 +44190,7 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -45223,7 +45223,7 @@
|
||||
/area/security/vacantoffice)
|
||||
"bJx" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -45233,7 +45233,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
@@ -45319,7 +45319,7 @@
|
||||
"bJH" = (
|
||||
/obj/machinery/suit_storage_unit/standard_unit,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -45967,7 +45967,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -46985,7 +46985,7 @@
|
||||
"bMW" = (
|
||||
/obj/machinery/teleport/station,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
@@ -47352,7 +47352,7 @@
|
||||
/area/crew_quarters/kitchen)
|
||||
"bNC" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/vending/dinnerware,
|
||||
@@ -47447,7 +47447,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -49198,7 +49198,7 @@
|
||||
name = "novelty HoS hat"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -49294,7 +49294,7 @@
|
||||
"bRO" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -49729,7 +49729,7 @@
|
||||
"bSD" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -52408,7 +52408,7 @@
|
||||
/area/hallway/primary/central)
|
||||
"bXZ" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/item/twohanded/required/kirbyplants{
|
||||
@@ -53733,7 +53733,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -53817,7 +53817,7 @@
|
||||
},
|
||||
/obj/item/pen,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -53831,7 +53831,7 @@
|
||||
/area/security/checkpoint/science/research)
|
||||
"caG" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/sink{
|
||||
@@ -55905,7 +55905,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26;
|
||||
pixel_y = 28
|
||||
},
|
||||
@@ -57091,7 +57091,7 @@
|
||||
icon_state = "2-8"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/structure/reagent_dispensers/cooking_oil,
|
||||
@@ -57265,7 +57265,7 @@
|
||||
/area/medical/sleeper)
|
||||
"cgT" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
@@ -57892,7 +57892,7 @@
|
||||
/area/maintenance/port/aft)
|
||||
"cie" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -59031,7 +59031,7 @@
|
||||
/area/maintenance/starboard/aft)
|
||||
"ckm" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/sink{
|
||||
@@ -59626,7 +59626,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -59730,7 +59730,7 @@
|
||||
/area/science/research)
|
||||
"clI" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/closet/firecloset,
|
||||
@@ -61045,7 +61045,7 @@
|
||||
/area/science/research)
|
||||
"cok" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
@@ -62766,7 +62766,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
@@ -63319,7 +63319,7 @@
|
||||
"csq" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/item/bedsheet/medical,
|
||||
@@ -63349,7 +63349,7 @@
|
||||
/area/medical/cryo)
|
||||
"cst" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -64556,7 +64556,7 @@
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/sign/warning/nosmoking{
|
||||
@@ -64778,7 +64778,7 @@
|
||||
},
|
||||
/obj/item/storage/secure/briefcase,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria{
|
||||
@@ -65130,7 +65130,7 @@
|
||||
/area/medical/genetics)
|
||||
"cvC" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/storage/box/syringes,
|
||||
@@ -65705,7 +65705,7 @@
|
||||
"cwF" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -65785,7 +65785,7 @@
|
||||
"cwO" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -66781,7 +66781,7 @@
|
||||
/area/science/circuit)
|
||||
"cyN" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
@@ -67430,7 +67430,7 @@
|
||||
},
|
||||
/obj/item/paper,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
@@ -68105,7 +68105,7 @@
|
||||
"cBi" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
@@ -68521,7 +68521,7 @@
|
||||
/area/medical/medbay/aft)
|
||||
"cCb" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/closet/secure_closet/personal/patient,
|
||||
@@ -69596,7 +69596,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -70136,7 +70136,7 @@
|
||||
/area/science/robotics/lab)
|
||||
"cFj" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28;
|
||||
pixel_y = 5
|
||||
},
|
||||
@@ -70649,7 +70649,7 @@
|
||||
"cGi" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
@@ -72046,7 +72046,7 @@
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/machinery/vending/wardrobe/viro_wardrobe,
|
||||
@@ -73267,7 +73267,7 @@
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -73902,7 +73902,7 @@
|
||||
"cLS" = (
|
||||
/obj/structure/chair/stool,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/green,
|
||||
@@ -73931,7 +73931,7 @@
|
||||
pixel_y = 25
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
@@ -77869,7 +77869,7 @@
|
||||
/area/hallway/primary/central)
|
||||
"cVi" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -79683,7 +79683,7 @@
|
||||
network = list("ss13","engine")
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -81295,7 +81295,7 @@
|
||||
/area/crew_quarters/theatre)
|
||||
"dis" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/disposal/bin,
|
||||
@@ -84068,7 +84068,7 @@
|
||||
/area/library)
|
||||
"qXt" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
|
||||
@@ -1094,7 +1094,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
@@ -3052,7 +3052,7 @@
|
||||
"afp" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -3138,7 +3138,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -4288,7 +4288,7 @@
|
||||
/area/maintenance/starboard/fore)
|
||||
"ahk" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -4440,7 +4440,7 @@
|
||||
"ahy" = (
|
||||
/obj/machinery/suit_storage_unit/security,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
@@ -4475,7 +4475,7 @@
|
||||
"ahB" = (
|
||||
/obj/machinery/photocopier,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/cable/white{
|
||||
@@ -7740,7 +7740,7 @@
|
||||
/obj/item/stack/packageWrap,
|
||||
/obj/item/hand_labeler,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -7886,7 +7886,7 @@
|
||||
"anj" = (
|
||||
/obj/machinery/suit_storage_unit/standard_unit,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/end{
|
||||
@@ -8367,7 +8367,7 @@
|
||||
"anZ" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -8554,7 +8554,7 @@
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -9965,7 +9965,7 @@
|
||||
icon_state = "plant-21"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -10216,7 +10216,7 @@
|
||||
pixel_y = -22
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/paper_bin,
|
||||
@@ -11445,7 +11445,7 @@
|
||||
"atj" = (
|
||||
/obj/machinery/vending/coffee,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -12887,7 +12887,7 @@
|
||||
/area/hallway/primary/port)
|
||||
"avX" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/item/twohanded/required/kirbyplants{
|
||||
@@ -12902,7 +12902,7 @@
|
||||
/obj/item/stock_parts/cell/high,
|
||||
/obj/machinery/cell_charger,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light_switch{
|
||||
@@ -14105,7 +14105,7 @@
|
||||
/area/engine/atmos)
|
||||
"ayl" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -14116,7 +14116,7 @@
|
||||
"aym" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
@@ -16093,7 +16093,7 @@
|
||||
"aCh" = (
|
||||
/obj/machinery/vending/snack/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -16503,7 +16503,7 @@
|
||||
/obj/item/clipboard,
|
||||
/obj/item/toy/figure/chef,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -16714,7 +16714,7 @@
|
||||
/area/engine/break_room)
|
||||
"aDw" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
|
||||
@@ -17444,7 +17444,7 @@
|
||||
"aEK" = (
|
||||
/obj/machinery/vending/clothing,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -17977,7 +17977,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -18209,7 +18209,7 @@
|
||||
/area/hallway/primary/port)
|
||||
"aFL" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -20148,7 +20148,7 @@
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/pill_bottle/dice,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -21489,7 +21489,7 @@
|
||||
"aLg" = (
|
||||
/obj/machinery/vending/snack/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -22597,7 +22597,7 @@
|
||||
/area/maintenance/starboard/central)
|
||||
"aNF" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -23062,7 +23062,7 @@
|
||||
/area/engine/engineering)
|
||||
"aOG" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -23834,7 +23834,7 @@
|
||||
"aPW" = (
|
||||
/obj/machinery/vending/snack/random,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -25049,7 +25049,7 @@
|
||||
name = "emergency shower"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -26916,7 +26916,7 @@
|
||||
/obj/item/storage/box/bodybags,
|
||||
/obj/item/pen,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -28252,7 +28252,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -29794,7 +29794,7 @@
|
||||
/area/hallway/primary/aft)
|
||||
"baN" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
@@ -30100,7 +30100,7 @@
|
||||
/area/medical/medbay/zone3)
|
||||
"bbu" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -31241,7 +31241,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
@@ -32128,7 +32128,7 @@
|
||||
/area/security/checkpoint)
|
||||
"beK" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -34456,7 +34456,7 @@
|
||||
pixel_y = -22
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -37099,7 +37099,7 @@
|
||||
"dai" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -40387,7 +40387,7 @@
|
||||
/area/maintenance/starboard)
|
||||
"sHf" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -42215,6 +42215,7 @@
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = -26
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
@@ -42280,6 +42281,7 @@
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = -26
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
|
||||
@@ -174,7 +174,6 @@
|
||||
pixel_x = -27
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 26
|
||||
},
|
||||
/turf/open/floor/circuit,
|
||||
@@ -672,7 +671,7 @@
|
||||
/obj/item/pen,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/item/paper_bin,
|
||||
@@ -2453,7 +2452,7 @@
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -27
|
||||
},
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
@@ -3387,7 +3386,7 @@
|
||||
/obj/item/gun/energy/e_gun,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -27
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -4248,7 +4247,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -27
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -4964,7 +4963,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
@@ -8228,7 +8227,7 @@
|
||||
dir = 10
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -8715,7 +8714,7 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"avl" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/computer/cryopod{
|
||||
@@ -9674,7 +9673,7 @@
|
||||
light_color = "#e8eaff"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/computer/rdconsole{
|
||||
@@ -11431,7 +11430,6 @@
|
||||
"aBB" = (
|
||||
/obj/machinery/computer/cargo/request,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -12379,7 +12377,7 @@
|
||||
/area/storage/primary)
|
||||
"aDB" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
@@ -14356,7 +14354,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -17508,7 +17505,7 @@
|
||||
dir = 10
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -18556,7 +18553,7 @@
|
||||
/area/maintenance/department/crew_quarters/bar)
|
||||
"aSA" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/machinery/hydroponics/constructable,
|
||||
@@ -18775,7 +18772,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -19108,7 +19104,7 @@
|
||||
"aTP" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
@@ -21328,7 +21324,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
@@ -21725,7 +21721,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -22077,7 +22073,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
@@ -24433,7 +24429,6 @@
|
||||
"bfx" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
@@ -24819,7 +24814,6 @@
|
||||
/area/hallway/primary/central)
|
||||
"bgx" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 27
|
||||
},
|
||||
/obj/structure/chair,
|
||||
@@ -26683,7 +26677,7 @@
|
||||
"bly" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26;
|
||||
pixel_y = 28
|
||||
},
|
||||
@@ -27994,7 +27988,6 @@
|
||||
"boz" = (
|
||||
/obj/machinery/vending/clothing,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 27
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -30024,7 +30017,7 @@
|
||||
"bsB" = (
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/structure/sign/poster/official/random{
|
||||
@@ -30231,7 +30224,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/green,
|
||||
@@ -30360,7 +30353,7 @@
|
||||
/obj/item/crowbar,
|
||||
/obj/item/wrench,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/item/multitool,
|
||||
@@ -30810,7 +30803,7 @@
|
||||
/area/medical/chemistry)
|
||||
"bun" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -30848,7 +30841,7 @@
|
||||
network = list("ss13","rd")
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -31469,7 +31462,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
@@ -34270,7 +34263,7 @@
|
||||
/area/science/storage)
|
||||
"bBH" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
@@ -34299,7 +34292,7 @@
|
||||
"bBK" = (
|
||||
/obj/structure/closet/bombcloset,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/structure/sign/poster/official/random{
|
||||
@@ -35599,7 +35592,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -35961,8 +35954,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/vending/wallmed{
|
||||
pixel_y = 28;
|
||||
products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1)
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/effect/landmark/blobstart,
|
||||
@@ -36644,7 +36636,7 @@
|
||||
"bGe" = (
|
||||
/obj/machinery/portable_atmospherics/scrubber,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -36690,7 +36682,7 @@
|
||||
network = list("ss13","rd")
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
@@ -37123,7 +37115,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
@@ -37798,8 +37790,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/vending/wallmed{
|
||||
pixel_y = 28;
|
||||
products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1)
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
@@ -38760,8 +38751,7 @@
|
||||
/area/medical/medbay/central)
|
||||
"bKw" = (
|
||||
/obj/machinery/vending/wallmed{
|
||||
pixel_y = 28;
|
||||
products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1)
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
@@ -39311,7 +39301,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -40977,7 +40967,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -41200,7 +41190,6 @@
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -41252,7 +41241,6 @@
|
||||
},
|
||||
/obj/item/stock_parts/cell/high/plus,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
@@ -42923,7 +42911,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -45325,7 +45312,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
@@ -47520,7 +47506,7 @@
|
||||
/area/engine/engineering)
|
||||
"cgV" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -48339,7 +48325,7 @@
|
||||
"ckD" = (
|
||||
/obj/structure/chair/wood/normal,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -52165,7 +52151,6 @@
|
||||
network = list("ss13","monastery")
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -53839,7 +53824,7 @@
|
||||
/area/maintenance/department/security/brig)
|
||||
"ePS" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -54224,7 +54209,7 @@
|
||||
"fFv" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -54362,7 +54347,7 @@
|
||||
"gdL" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
@@ -56363,7 +56348,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -27
|
||||
},
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
@@ -59450,7 +59435,6 @@
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 27
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
@@ -59851,7 +59835,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -60093,7 +60076,7 @@
|
||||
},
|
||||
/obj/item/hand_labeler,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/machinery/light{
|
||||
@@ -61756,7 +61739,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
|
||||
@@ -3398,7 +3398,7 @@
|
||||
/area/centcom/supply)
|
||||
"iS" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -3883,7 +3883,7 @@
|
||||
/area/centcom/control)
|
||||
"jV" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -4231,7 +4231,7 @@
|
||||
icon_state = "plant-22"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -5775,7 +5775,7 @@
|
||||
req_access_txt = "109"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -5799,7 +5799,7 @@
|
||||
req_access_txt = "109"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -6866,7 +6866,7 @@
|
||||
/area/centcom/ferry)
|
||||
"pM" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
@@ -6893,7 +6893,7 @@
|
||||
/obj/item/clothing/gloves/color/black,
|
||||
/obj/item/clothing/glasses/eyepatch,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
@@ -9214,7 +9214,7 @@
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -11017,7 +11017,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -12323,7 +12323,7 @@
|
||||
/obj/item/book/manual/wiki/security_space_law,
|
||||
/obj/item/taperecorder,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -12390,7 +12390,7 @@
|
||||
"CM" = (
|
||||
/obj/structure/filingcabinet/medical,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -14511,7 +14511,7 @@
|
||||
/area/tdome/tdomeobserve)
|
||||
"Hq" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -14554,7 +14554,7 @@
|
||||
/area/tdome/tdomeobserve)
|
||||
"Hu" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
@@ -15835,7 +15835,7 @@
|
||||
icon_state = "plant-21"
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#define APPRENTICE_BLUESPACE "bluespace"
|
||||
#define APPRENTICE_ROBELESS "robeless"
|
||||
#define APPRENTICE_HEALING "healing"
|
||||
#define APPRENTICE_MARTIAL "martial"
|
||||
|
||||
|
||||
//ERT Types
|
||||
|
||||
@@ -9,12 +9,13 @@
|
||||
#define META_GAS_FUSION_POWER 7
|
||||
//ATMOS
|
||||
//stuff you should probably leave well alone!
|
||||
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
|
||||
#define ONE_ATMOSPHERE 101.325 //kPa
|
||||
#define TCMB 2.7 // -270.3degC
|
||||
#define TCRYO 225 // -48.15degC
|
||||
#define T0C 273.15 // 0degC
|
||||
#define T20C 293.15 // 20degC
|
||||
#define R_IDEAL_GAS_EQUATION 8.31446261815324 //kPa*L/(K*mol)
|
||||
#define ONE_ATMOSPHERE 101.325 //kPa
|
||||
#define TCMB 2.7 // -270.3degC
|
||||
#define TCRYO 225 // -48.15degC
|
||||
#define T0C 273.15 // 0degC
|
||||
#define T20C 293.15 // 20degC
|
||||
#define STEFANBOLTZMANN (5.670373*10e-8) // W/(m^2*K^4)
|
||||
|
||||
#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC
|
||||
#define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005) //compared against for superconductivity
|
||||
@@ -149,9 +150,9 @@
|
||||
|
||||
//OPEN TURF ATMOS
|
||||
#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn
|
||||
#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15°C telecommunications. also used for xenobiology slime killrooms
|
||||
#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15°C telecommunications. also used for xenobiology slime killrooms
|
||||
#define AIRLESS_ATMOS "TEMP=2.7" //space
|
||||
#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15°C snow and ice turfs
|
||||
#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15°C snow and ice turfs
|
||||
#define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program
|
||||
|
||||
//ATMOSPHERICS DEPARTMENT GAS TANK TURFS
|
||||
|
||||
@@ -57,9 +57,9 @@
|
||||
#define BALLS_SACK_SIZE_DEF 8
|
||||
#define BALLS_SACK_SIZE_MAX 40
|
||||
|
||||
#define CUM_RATE 0.035
|
||||
#define CUM_RATE 2 // holy shit what a really shitty define name - relates to units per arbitrary measure of time?
|
||||
#define CUM_RATE_MULT 1
|
||||
#define CUM_EFFICIENCY 1//amount of nutrition required per life()
|
||||
#define CUM_EFFICIENCY 1 //amount of nutrition required per life()
|
||||
|
||||
#define EGG_GIRTH_MIN 1//inches
|
||||
#define EGG_GIRTH_DEF 6
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#define GROSS (1<<10)
|
||||
#define TOXIC (1<<11)
|
||||
#define PINEAPPLE (1<<12)
|
||||
#define BREAKFAST (1<<13)
|
||||
|
||||
#define DRINK_NICE 1
|
||||
#define DRINK_GOOD 2
|
||||
|
||||
@@ -118,6 +118,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
|
||||
#define ismouse(A) (istype(A, /mob/living/simple_animal/mouse))
|
||||
|
||||
#define iscow(A) (istype(A, /mob/living/simple_animal/cow))
|
||||
|
||||
#define isslime(A) (istype(A, /mob/living/simple_animal/slime))
|
||||
|
||||
#define isdrone(A) (istype(A, /mob/living/simple_animal/drone))
|
||||
|
||||
@@ -59,11 +59,13 @@
|
||||
#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow.
|
||||
|
||||
#define LIGHTING_PLANE_ALPHA_VISIBLE 255
|
||||
#define LIGHTING_PLANE_ALPHA_NV_TRAIT 250
|
||||
#define LIGHTING_PLANE_ALPHA_NV_TRAIT 223
|
||||
#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192
|
||||
#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell.
|
||||
#define LIGHTING_PLANE_ALPHA_INVISIBLE 0
|
||||
|
||||
#define NIGHT_VISION_DARKSIGHT_RANGE 3
|
||||
|
||||
//lighting area defines
|
||||
#define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness)
|
||||
#define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled
|
||||
@@ -80,4 +82,4 @@
|
||||
|
||||
#define FLASH_LIGHT_DURATION 2
|
||||
#define FLASH_LIGHT_POWER 3
|
||||
#define FLASH_LIGHT_RANGE 3.8
|
||||
#define FLASH_LIGHT_RANGE 3.8
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
|
||||
#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG"
|
||||
#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
|
||||
#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
|
||||
|
||||
#define MOVESPEED_ID_TASED_STATUS "TASED"
|
||||
|
||||
|
||||
@@ -118,6 +118,7 @@
|
||||
#define TRAIT_PARALYSIS_R_ARM "para-r-arm"
|
||||
#define TRAIT_PARALYSIS_L_LEG "para-l-leg"
|
||||
#define TRAIT_PARALYSIS_R_LEG "para-r-leg"
|
||||
#define TRAIT_DISK_VERIFIER "disk-verifier"
|
||||
#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech"
|
||||
#define TRAIT_SOOTHED_THROAT "soothed-throat"
|
||||
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
|
||||
@@ -227,3 +228,5 @@
|
||||
#define SLEEPING_CARP_TRAIT "sleeping_carp"
|
||||
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
|
||||
#define MADE_UNCLONEABLE "made-uncloneable"
|
||||
#define NUKEOP_TRAIT "nuke-op"
|
||||
#define DEATHSQUAD_TRAIT "deathsquad"
|
||||
|
||||
@@ -320,6 +320,8 @@
|
||||
parts += "[FOURSPACES][FOURSPACES][str]"
|
||||
for(var/entry in mode.threat_tallies)
|
||||
parts += "[FOURSPACES][FOURSPACES][entry] added [mode.threat_tallies[entry]]"
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",mode.threat_level,"Final threat level")
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",mode.threat,"Threat left")
|
||||
return parts.Join("<br>")
|
||||
|
||||
/client/proc/roundend_report_file()
|
||||
|
||||
+475
-475
File diff suppressed because it is too large
Load Diff
@@ -213,6 +213,16 @@ or something covering your eyes."
|
||||
desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already."
|
||||
icon_state = "high"
|
||||
|
||||
/obj/screen/alert/mind_control
|
||||
name = "Mind Control"
|
||||
desc = "Your mind has been hijacked! Click to view the mind control command."
|
||||
icon_state = "mind_control"
|
||||
var/command
|
||||
|
||||
/obj/screen/alert/mind_control/Click()
|
||||
var/mob/living/L = usr
|
||||
to_chat(L, "<span class='mind_control'>[command]</span>")
|
||||
|
||||
/obj/screen/alert/hypnosis
|
||||
name = "Hypnosis"
|
||||
desc = "Something's hypnotizing you, but you're not really sure about what."
|
||||
|
||||
@@ -379,3 +379,10 @@
|
||||
/datum/config_entry/number/auto_transfer_delay
|
||||
config_entry_value = 72000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/marauder_delay_non_reebe
|
||||
config_entry_value = 1800
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/allow_clockwork_marauder_on_station
|
||||
config_entry_value = TRUE
|
||||
|
||||
@@ -12,6 +12,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
var/list/obj/structure/chisel_message/chisel_messages = list()
|
||||
var/list/saved_messages = list()
|
||||
var/list/saved_modes = list(1,2,3)
|
||||
var/list/saved_dynamic_rules = list(list(),list(),list())
|
||||
var/list/saved_threat_levels = list(1,1,1)
|
||||
var/list/saved_maps
|
||||
var/list/saved_trophies = list()
|
||||
@@ -227,7 +228,10 @@ SUBSYSTEM_DEF(persistence)
|
||||
CollectSecretSatchels()
|
||||
CollectTrophies()
|
||||
CollectRoundtype()
|
||||
CollectThreatLevel()
|
||||
if(istype(SSticker.mode, /datum/game_mode/dynamic))
|
||||
var/datum/game_mode/dynamic/mode = SSticker.mode
|
||||
CollectThreatLevel(mode)
|
||||
CollectRulesets(mode)
|
||||
RecordMaps()
|
||||
SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION.
|
||||
if(CONFIG_GET(flag/use_antag_rep))
|
||||
@@ -384,17 +388,27 @@ SUBSYSTEM_DEF(persistence)
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/CollectThreatLevel()
|
||||
if(istype(SSticker.mode, /datum/game_mode/dynamic))
|
||||
var/datum/game_mode/dynamic/mode = SSticker.mode
|
||||
saved_threat_levels[3] = saved_threat_levels[2]
|
||||
saved_threat_levels[2] = saved_threat_levels [1]
|
||||
saved_threat_levels[1] = mode.threat_level
|
||||
var/json_file = file("data/RecentThreatLevels.json")
|
||||
var/list/file_data = list()
|
||||
file_data["data"] = saved_threat_levels
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
/datum/controller/subsystem/persistence/proc/CollectThreatLevel(var/datum/game_mode/dynamic/mode)
|
||||
saved_threat_levels[3] = saved_threat_levels[2]
|
||||
saved_threat_levels[2] = saved_threat_levels [1]
|
||||
saved_threat_levels[1] = mode.threat_level
|
||||
var/json_file = file("data/RecentThreatLevels.json")
|
||||
var/list/file_data = list()
|
||||
file_data["data"] = saved_threat_levels
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/CollectRulesets(var/datum/game_mode/dynamic/mode)
|
||||
saved_dynamic_rules[3] = saved_dynamic_rules[2]
|
||||
saved_dynamic_rules[2] = saved_dynamic_rules[1]
|
||||
saved_dynamic_rules[1] = list()
|
||||
for(var/datum/dynamic_ruleset/ruleset in mode.executed_rules)
|
||||
saved_dynamic_rules[1] += ruleset.config_tag
|
||||
var/json_file = file("data/RecentRulesets.json")
|
||||
var/list/file_data = list()
|
||||
file_data["data"] = saved_dynamic_rules
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/RecordMaps()
|
||||
saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]")
|
||||
|
||||
@@ -93,7 +93,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/head_of_security/alt,
|
||||
/obj/item/clothing/under/rank/research_director/alt, /obj/item/clothing/under/rank/research_director/turtleneck,
|
||||
/obj/item/clothing/under/captainparade, /obj/item/clothing/under/hosparademale, /obj/item/clothing/under/hosparadefem,
|
||||
/obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor_baton,
|
||||
/obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor/baton,
|
||||
/obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer,
|
||||
/obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom_officer,
|
||||
/obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec,
|
||||
@@ -136,7 +136,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
"aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
|
||||
/obj/structure/alien, /obj/item/toy/toy_xeno,
|
||||
/obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien,
|
||||
/obj/item/abductor_baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
|
||||
/obj/item/abductor/baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
|
||||
/obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/surgicaldrill/alien, /obj/item/cautery/alien,
|
||||
/obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor,
|
||||
/obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland,
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/datum/component/shrink
|
||||
var/olddens
|
||||
var/oldopac
|
||||
dupe_mode = COMPONENT_DUPE_HIGHLANDER
|
||||
|
||||
/datum/component/shrink/Initialize(shrink_time)
|
||||
if(!isatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
var/atom/parent_atom = parent
|
||||
parent_atom.transform = parent_atom.transform.Scale(0.5,0.5)
|
||||
olddens = parent_atom.density
|
||||
oldopac = parent_atom.opacity
|
||||
parent_atom.density = 0
|
||||
parent_atom.opacity = 0
|
||||
if(isliving(parent_atom))
|
||||
var/mob/living/L = parent_atom
|
||||
L.add_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY, update=TRUE, priority=100, multiplicative_slowdown=4)
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
C.unequip_everything()
|
||||
C.visible_message("<span class='warning'>[C]'s belongings fall off of [C.p_them()] as they shrink down!</span>",
|
||||
"<span class='userdanger'>Your belongings fall away as everything grows bigger!</span>")
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
H.physiology.damage_resistance -= 100//carbons take double damage while shrunk
|
||||
parent_atom.visible_message("<span class='warning'>[parent_atom] shrinks down to a tiny size!</span>",
|
||||
"<span class='userdanger'>Everything grows bigger!</span>")
|
||||
QDEL_IN(src, shrink_time)
|
||||
|
||||
|
||||
/datum/component/shrink/Destroy()
|
||||
var/atom/parent_atom = parent
|
||||
parent_atom.transform = parent_atom.transform.Scale(2,2)
|
||||
parent_atom.density = olddens
|
||||
parent_atom.opacity = oldopac
|
||||
if(isliving(parent_atom))
|
||||
var/mob/living/L = parent_atom
|
||||
L.remove_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY)
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
H.physiology.damage_resistance += 100
|
||||
..()
|
||||
@@ -0,0 +1,25 @@
|
||||
/datum/component/sizzle
|
||||
var/mutable_appearance/sizzling
|
||||
var/sizzlealpha = 0
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
|
||||
|
||||
/datum/component/sizzle/Initialize()
|
||||
if(!isatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
setup_sizzle()
|
||||
|
||||
/datum/component/sizzle/InheritComponent(datum/component/C, i_am_original)
|
||||
var/atom/food = parent
|
||||
sizzlealpha += 5
|
||||
sizzling.alpha = sizzlealpha
|
||||
food.cut_overlay(sizzling)
|
||||
food.add_overlay(sizzling)
|
||||
|
||||
/datum/component/sizzle/proc/setup_sizzle()
|
||||
var/atom/food = parent
|
||||
var/icon/grill_marks = icon(initial(food.icon), initial(food.icon_state)) //we only want to apply grill marks to the initial icon_state for each object
|
||||
grill_marks.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent)
|
||||
grill_marks.Blend(icon('icons/obj/kitchen.dmi', "grillmarks"), ICON_MULTIPLY) //adds grill marks and the remaining white areas become transparent
|
||||
sizzling = new(grill_marks)
|
||||
sizzling.alpha = sizzlealpha
|
||||
food.add_overlay(sizzling)
|
||||
@@ -4,7 +4,7 @@
|
||||
mid_sounds = list('sound/machines/shower/shower_mid1.ogg'=1,'sound/machines/shower/shower_mid2.ogg'=1,'sound/machines/shower/shower_mid3.ogg'=1)
|
||||
mid_length = 10
|
||||
end_sound = 'sound/machines/shower/shower_end.ogg'
|
||||
volume = 20
|
||||
volume = 10
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
|
||||
mid_length = 2
|
||||
end_sound = 'sound/machines/fryer/deep_fryer_emerge.ogg'
|
||||
volume = 15
|
||||
volume = 5
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -43,3 +43,12 @@
|
||||
mid_length = 10
|
||||
end_sound = 'sound/machines/microwave/microwave-end.ogg'
|
||||
volume = 90
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/grill
|
||||
mid_length = 2
|
||||
mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
|
||||
volume = 10
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -134,6 +134,12 @@
|
||||
mood_change = 3
|
||||
timeout = 3000
|
||||
|
||||
/datum/mood_event/breakfast
|
||||
description = "<span class='nicegreen'>Nothing like a hearty breakfast to start the shift.</span>\n"
|
||||
mood_change = 2
|
||||
timeout = 15 MINUTES
|
||||
|
||||
//Power gamer stuff below
|
||||
/datum/mood_event/drankblood
|
||||
description = "<span class='nicegreen'>I have fed greedly from that which nourishes me.</span>\n"
|
||||
mood_change = 10
|
||||
@@ -143,6 +149,7 @@
|
||||
description = "<span class='nicegreen'>I slept in a coffin during the day. I feel whole again.</span>\n"
|
||||
mood_change = 8
|
||||
timeout = 1200
|
||||
|
||||
//Cursed stuff below.
|
||||
|
||||
/datum/mood_event/orgasm
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
message = replacetext(message," ugly "," beautiful ")
|
||||
message = replacetext(message," douchbag "," nice guy ")
|
||||
message = replacetext(message," whore "," lady ")
|
||||
message = replacetext(message," gamer "," intellectual ")
|
||||
message = replacetext(message," nerd "," smarty pants ")
|
||||
message = replacetext(message," moron "," fun person ")
|
||||
message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ")
|
||||
|
||||
@@ -208,3 +208,15 @@
|
||||
/datum/quirk/bloodpressure/remove()
|
||||
var/mob/living/M = quirk_holder
|
||||
M.blood_ratio = 1
|
||||
|
||||
/datum/quirk/night_vision
|
||||
name = "Night Vision"
|
||||
desc = "You can see slightly more clearly in full darkness than most people."
|
||||
value = 1
|
||||
mob_trait = TRAIT_NIGHT_VISION
|
||||
gain_text = "<span class='notice'>The shadows seem a little less dark.</span>"
|
||||
lose_text = "<span class='danger'>Everything seems a little darker.</span>"
|
||||
|
||||
/datum/quirk/night_vision/on_spawn()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.update_sight()
|
||||
|
||||
@@ -22,27 +22,17 @@
|
||||
target_trait = ZTRAIT_STATION
|
||||
|
||||
immunity_type = "rad"
|
||||
|
||||
var/radiation_intensity = 100
|
||||
|
||||
/datum/weather/rad_storm/telegraph()
|
||||
..()
|
||||
status_alarm(TRUE)
|
||||
|
||||
|
||||
/datum/weather/rad_storm/weather_act(mob/living/L)
|
||||
var/resist = L.getarmor(null, "rad")
|
||||
if(prob(40))
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.dna && !HAS_TRAIT(H, TRAIT_RADIMMUNE))
|
||||
if(prob(max(0,100-resist)))
|
||||
H.randmuti()
|
||||
if(prob(50))
|
||||
if(prob(90))
|
||||
H.randmutb()
|
||||
else
|
||||
H.randmutg()
|
||||
H.domutcheck()
|
||||
L.rad_act(20)
|
||||
var/ratio = 1 - (min(resist, 100) / 100)
|
||||
L.rad_act(radiation_intensity * ratio)
|
||||
|
||||
/datum/weather/rad_storm/end()
|
||||
if(..())
|
||||
|
||||
@@ -300,6 +300,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
|
||||
/datum/game_mode/dynamic/proc/log_threat(var/log_str,var/verbose = FALSE)
|
||||
threat_log_verbose += ("[worldtime2text()]: "+log_str)
|
||||
SSblackbox.record_feedback("tally","dynamic_threat_log",1,log_str)
|
||||
if(!verbose)
|
||||
threat_log += log_str
|
||||
|
||||
@@ -329,6 +330,10 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
peaceful_percentage = round(LORENTZ_CUMULATIVE_DISTRIBUTION(relative_threat, GLOB.dynamic_curve_centre, GLOB.dynamic_curve_width), 0.01)*100
|
||||
|
||||
threat = threat_level
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Initial threat level")
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_centre,"Curve centre")
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_width,"Curve width")
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",peaceful_percentage,"Percent of same-vote rounds that are more peaceful")
|
||||
|
||||
/datum/game_mode/dynamic/can_start()
|
||||
message_admins("Dynamic mode parameters for the round:")
|
||||
@@ -340,6 +345,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
if(GLOB.dynamic_forced_threat_level >= 0)
|
||||
threat_level = round(GLOB.dynamic_forced_threat_level, 0.1)
|
||||
threat = threat_level
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Threat level (forced by admins)")
|
||||
else
|
||||
generate_threat()
|
||||
|
||||
@@ -384,7 +390,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
if (roundstart_rules.len <= 0)
|
||||
log_game("DYNAMIC: [roundstart_rules.len] rules.")
|
||||
return TRUE
|
||||
|
||||
SSblackbox.record_feedback("tally","dynamic",roundstart_rules.len,"Roundstart rules considered")
|
||||
SSblackbox.record_feedback("tally","dynamic",roundstart_rules.len,"Players readied up")
|
||||
if(GLOB.dynamic_forced_roundstart_ruleset.len > 0)
|
||||
rigged_roundstart()
|
||||
else
|
||||
@@ -537,6 +544,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
if(rule.execute())
|
||||
if(rule.persistent)
|
||||
current_rules += rule
|
||||
SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info())
|
||||
return TRUE
|
||||
rule.clean_up() // Refund threat, delete teams and so on.
|
||||
executed_rules -= rule
|
||||
@@ -615,6 +623,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
else if(new_rule.flags & ONLY_RULESET)
|
||||
only_ruleset_executed = TRUE
|
||||
log_game("DYNAMIC: Making a call to a specific ruleset...[new_rule.name]!")
|
||||
SSblackbox.record_feedback("associative","dynamic_rulesets",1,new_rule.get_blackbox_info())
|
||||
executed_rules += new_rule
|
||||
if (new_rule.persistent)
|
||||
current_rules += new_rule
|
||||
@@ -639,6 +648,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
message_admins("[key_name(M)] joined the station, and was selected by the [rule.name] ruleset.")
|
||||
log_game("DYNAMIC: [key_name(M)] joined the station, and was selected by the [rule.name] ruleset.")
|
||||
executed_rules += rule
|
||||
SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info())
|
||||
rule.candidates.Cut()
|
||||
if (rule.persistent)
|
||||
current_rules += rule
|
||||
@@ -655,6 +665,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
for (var/datum/dynamic_ruleset/rule in current_rules)
|
||||
if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing.
|
||||
current_rules -= rule
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Rulesets finished")
|
||||
SSblackbox.record_feedback("associative","dynamic_rulesets_finished",1,rule.get_blackbox_info())
|
||||
|
||||
if (midround_injection_cooldown < world.time)
|
||||
if (GLOB.dynamic_forced_extended)
|
||||
@@ -673,6 +685,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
|
||||
update_playercounts()
|
||||
if (get_injection_chance())
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Attempted midround injections")
|
||||
var/cur_threat_frac = threat/threat_level
|
||||
var/list/drafted_rules = list()
|
||||
var/antag_num = current_players[CURRENT_LIVING_ANTAGS].len
|
||||
@@ -688,12 +701,16 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
drafted_rules[rule] = round(rule.get_weight() + (rule.cost * cur_threat_frac))
|
||||
else
|
||||
drafted_rules[rule] = rule.get_weight()
|
||||
else if(threat < rule.cost)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend")
|
||||
if (drafted_rules.len > 0)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Successful midround injections")
|
||||
picking_midround_latejoin_rule(drafted_rules)
|
||||
else
|
||||
midround_injection_cooldown = (midround_injection_cooldown + world.time)/2
|
||||
|
||||
if(event_injection_cooldown < world.time)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Attempted event injections")
|
||||
var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min)
|
||||
event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time)
|
||||
message_admins("DYNAMIC: Doing event injection.")
|
||||
@@ -704,7 +721,10 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
if(rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost)
|
||||
if(rule.ready())
|
||||
drafted_rules[rule] = rule.get_weight()
|
||||
else if(threat < rule.cost)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend")
|
||||
if(drafted_rules.len > 0)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Successful event injections")
|
||||
picking_midround_latejoin_rule(drafted_rules)
|
||||
|
||||
/// Updates current_players.
|
||||
@@ -795,6 +815,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
forced_latejoin_rule = null
|
||||
|
||||
else if (latejoin_injection_cooldown < world.time && prob(get_injection_chance()))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Attempted latejoin injections")
|
||||
var/list/drafted_rules = list()
|
||||
for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules)
|
||||
if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost)
|
||||
@@ -812,12 +833,14 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
drafted_rules[rule] = rule.get_weight()
|
||||
|
||||
if (drafted_rules.len > 0 && picking_midround_latejoin_rule(drafted_rules))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Successful latejoin injections")
|
||||
var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min)
|
||||
latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + world.time
|
||||
|
||||
/// Refund threat, but no more than threat_level.
|
||||
/datum/game_mode/dynamic/proc/refund_threat(regain)
|
||||
threat = min(threat_level,threat+regain)
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",regain,"Refunded threat")
|
||||
log_threat("[regain] refunded. Threat is now [threat].", verbose = TRUE)
|
||||
|
||||
/// Generate threat and increase the threat_level if it goes beyond, capped at 100
|
||||
@@ -825,11 +848,13 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
|
||||
threat = min(100, threat+gain)
|
||||
if(threat > threat_level)
|
||||
threat_level = threat
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",gain,"Created threat")
|
||||
log_threat("[gain] created. Threat is now [threat] and threat level is now [threat_level].", verbose = TRUE)
|
||||
|
||||
/// Expend threat, can't fall under 0.
|
||||
/datum/game_mode/dynamic/proc/spend_threat(cost)
|
||||
threat = max(threat-cost,0)
|
||||
SSblackbox.record_feedback("tally","dynamic_threat",cost,"Threat spent")
|
||||
log_threat("[cost] spent. Threat is now [threat].", verbose = TRUE)
|
||||
|
||||
/// Turns the value generated by lorentz distribution to threat value between 0 and 100.
|
||||
|
||||
@@ -80,6 +80,9 @@
|
||||
/// Delay for when execute will get called from the time of post_setup (roundstart) or process (midround/latejoin).
|
||||
/// Make sure your ruleset works with execute being called during the game when using this, and that the clean_up proc reverts it properly in case of faliure.
|
||||
var/delay = 0
|
||||
/// Whether or not recent-round weight values are taken into account for this ruleset.
|
||||
/// Weight reduction uses the same values as secret's recent-round mode weight reduction.
|
||||
var/always_max_weight = FALSE
|
||||
|
||||
/datum/dynamic_ruleset/New()
|
||||
..()
|
||||
@@ -91,8 +94,15 @@
|
||||
var/costs = CONFIG_GET(keyed_list/dynamic_cost)
|
||||
var/requirementses = CONFIG_GET(keyed_list/dynamic_requirements) // can't damn well use requirements
|
||||
var/high_population_requirements = CONFIG_GET(keyed_list/dynamic_high_population_requirement)
|
||||
var/list/repeated_mode_adjust = CONFIG_GET(number_list/repeated_mode_adjust)
|
||||
if(config_tag in weights)
|
||||
weight = weights[config_tag]
|
||||
var/weight_mult = 1
|
||||
if(!always_max_weight && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3)
|
||||
var/saved_dynamic_rules = SSpersistence.saved_dynamic_rules
|
||||
for(var/i in 1 to 3)
|
||||
if(config_tag in saved_dynamic_rules[i])
|
||||
weight_mult -= (repeated_mode_adjust[i]/100)
|
||||
weight = weights[config_tag] * weight_mult
|
||||
if(config_tag in costs)
|
||||
cost = costs[config_tag]
|
||||
if(config_tag in requirementses)
|
||||
@@ -115,12 +125,15 @@
|
||||
/// If your rule has extra checks, such as counting security officers, do that in ready() instead
|
||||
/datum/dynamic_ruleset/proc/acceptable(population = 0, threat_level = 0)
|
||||
if(minimum_players > population)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to low pop")
|
||||
return FALSE
|
||||
if(maximum_players > 0 && population > maximum_players)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to high pop")
|
||||
return FALSE
|
||||
if (population >= GLOB.dynamic_high_pop_limit)
|
||||
indice_pop = 10
|
||||
if(threat_level < high_population_requirement)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level")
|
||||
log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[high_population_requirement]")
|
||||
return FALSE
|
||||
else
|
||||
@@ -132,6 +145,7 @@
|
||||
log_game("DYNAMIC: requirements and antag_cap lists have different lengths in ruleset [name]. Likely config issue, report this.")
|
||||
indice_pop = min(requirements.len,round(population/pop_per_requirement)+1)
|
||||
if(threat_level < requirements[indice_pop])
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level")
|
||||
log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[requirements[indice_pop]]")
|
||||
return FALSE
|
||||
else
|
||||
@@ -178,6 +192,7 @@
|
||||
/// IMPORTANT: If ready() returns TRUE, that means pre_execute() or execute() should never fail!
|
||||
/datum/dynamic_ruleset/proc/ready(forced = 0)
|
||||
if (required_candidates > candidates.len)
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough candidates")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -212,6 +227,24 @@
|
||||
/datum/dynamic_ruleset/proc/check_finished()
|
||||
return FALSE
|
||||
|
||||
/// Returns a list to be displayed on statbus.
|
||||
/datum/dynamic_ruleset/proc/get_blackbox_info()
|
||||
var/list/ruleset_data = list()
|
||||
ruleset_data["name"] = name
|
||||
ruleset_data["rule_type"] = ruletype
|
||||
ruleset_data["cost"] = total_cost
|
||||
ruleset_data["weight"] = weight
|
||||
ruleset_data["scaled_times"] = scaled_times
|
||||
ruleset_data["antagonist_type"] = antag_datum
|
||||
ruleset_data["population_tier"] = indice_pop
|
||||
ruleset_data["assigned"] = list()
|
||||
for (var/datum/mind/M in assigned)
|
||||
var/assigned_data = list()
|
||||
assigned_data["key"] = M.key
|
||||
assigned_data["name"] = M.name
|
||||
ruleset_data["assigned"] += list(assigned_data)
|
||||
return ruleset_data
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
// ROUNDSTART RULESETS //
|
||||
|
||||
@@ -3,6 +3,17 @@
|
||||
var/typepath // typepath of the event
|
||||
var/triggering
|
||||
|
||||
/datum/dynamic_ruleset/event/get_blackbox_info()
|
||||
var/list/ruleset_data = list()
|
||||
ruleset_data["name"] = name
|
||||
ruleset_data["rule_type"] = ruletype
|
||||
ruleset_data["cost"] = total_cost
|
||||
ruleset_data["weight"] = weight
|
||||
ruleset_data["scaled_times"] = scaled_times
|
||||
ruleset_data["event_type"] = typepath
|
||||
ruleset_data["population_tier"] = indice_pop
|
||||
return ruleset_data
|
||||
|
||||
/datum/dynamic_ruleset/event/execute()
|
||||
var/datum/round_event/E = new typepath()
|
||||
E.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
|
||||
@@ -26,6 +37,7 @@
|
||||
|
||||
var/threat = round(mode.threat_level/10)
|
||||
if (job_check < required_enemies[threat])
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -125,6 +137,7 @@
|
||||
requirements = list(5,5,5,5,5,5,5,5,5,5)
|
||||
high_population_requirement = 5
|
||||
repeatable = TRUE
|
||||
always_max_weight = TRUE
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
@@ -146,12 +159,15 @@
|
||||
|
||||
/datum/dynamic_ruleset/event/meteor_wave/ready()
|
||||
if(mode.threat_level > 40 && mode.threat >= 25 && prob(20))
|
||||
name = "Meteor Wave: Threatening"
|
||||
cost = 25
|
||||
typepath = /datum/round_event/meteor_wave/threatening
|
||||
else if(mode.threat_level > 50 && mode.threat >= 40 && prob(30))
|
||||
name = "Meteor Wave: Catastrophic"
|
||||
cost = 40
|
||||
typepath = /datum/round_event/meteor_wave/catastrophic
|
||||
else
|
||||
name = "Meteor Wave: Normal"
|
||||
cost = 15
|
||||
typepath = /datum/round_event/meteor_wave
|
||||
return ..()
|
||||
@@ -280,6 +296,7 @@
|
||||
requirements = list(5,5,5,5,5,5,5,5,5,5)
|
||||
high_population_requirement = 5
|
||||
repeatable = TRUE
|
||||
always_max_weight = TRUE
|
||||
|
||||
/datum/dynamic_ruleset/event/space_dust
|
||||
name = "Minor Space Dust"
|
||||
@@ -293,6 +310,7 @@
|
||||
requirements = list(5,5,5,5,5,5,5,5,5,5)
|
||||
high_population_requirement = 5
|
||||
repeatable = TRUE
|
||||
always_max_weight = TRUE
|
||||
|
||||
/datum/dynamic_ruleset/event/major_dust
|
||||
name = "Major Space Dust"
|
||||
@@ -332,6 +350,7 @@
|
||||
requirements = list(101,101,101,5,5,5,5,5,5,5)
|
||||
high_population_requirement = 5
|
||||
repeatable = TRUE
|
||||
always_max_weight = TRUE
|
||||
|
||||
/datum/dynamic_ruleset/event/radiation_storm
|
||||
name = "Radiation Storm"
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
continue // Dead players cannot count as opponents
|
||||
if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles)))
|
||||
job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
|
||||
|
||||
var/threat = round(mode.threat_level/10)
|
||||
if (job_check < required_enemies[threat])
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
high_population_requirement = 15
|
||||
repeatable = TRUE
|
||||
flags = TRAITOR_RULESET
|
||||
always_max_weight = TRUE
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
|
||||
var/threat = round(mode.threat_level/10)
|
||||
if (job_check < required_enemies[threat])
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -179,6 +180,7 @@
|
||||
repeatable = TRUE
|
||||
high_population_requirement = 15
|
||||
flags = TRAITOR_RULESET
|
||||
always_max_weight = TRUE
|
||||
|
||||
/datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0)
|
||||
var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len
|
||||
@@ -291,6 +293,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
|
||||
if (required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
if(GLOB.wizardstart.len == 0)
|
||||
log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
|
||||
@@ -353,6 +356,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE)
|
||||
if (required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -389,6 +393,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE)
|
||||
if (required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -420,6 +425,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE)
|
||||
if (required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -519,6 +525,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE)
|
||||
if (required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -557,6 +564,7 @@
|
||||
if(deadMobs < REVENANT_SPAWN_THRESHOLD)
|
||||
return FALSE
|
||||
if(required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies
|
||||
var/turf/T = get_turf(L)
|
||||
@@ -604,6 +612,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE)
|
||||
if(required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
|
||||
if(isturf(L.loc))
|
||||
@@ -655,6 +664,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE)
|
||||
if(required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
team = new /datum/team/abductor_team
|
||||
if(team.team_number > ABDUCTOR_MAX_TEAMS)
|
||||
@@ -694,6 +704,7 @@
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE)
|
||||
if(required_candidates > (dead_players.len + list_observers.len))
|
||||
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
|
||||
return FALSE
|
||||
if(!spawn_loc)
|
||||
var/list/spawn_locs = list()
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
requirements = list(50,50,50,50,50,50,50,50,50,50)
|
||||
high_population_requirement = 40
|
||||
antag_cap = list(1,1,1,1,2,2,2,2,3,3)
|
||||
always_max_weight = TRUE
|
||||
var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec)
|
||||
|
||||
/datum/dynamic_ruleset/roundstart/traitor/pre_execute()
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
false_report_weight = 10
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
|
||||
required_players = 30
|
||||
required_enemies = 2
|
||||
required_players = 20
|
||||
required_enemies = 1
|
||||
recommended_enemies = 3
|
||||
enemy_minimum_age = 14
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
var/filling = FALSE
|
||||
var/obj/item/reagent_containers/blood/bag = null
|
||||
var/obj/item/reagent_containers/blood/outbag = null
|
||||
var/bloodstored = 0
|
||||
var/maxbloodstored = 1000
|
||||
var/menustat = "menu"
|
||||
var/efficiency = 0
|
||||
@@ -20,7 +19,7 @@
|
||||
|
||||
/obj/machinery/bloodbankgen/Initialize()
|
||||
. = ..()
|
||||
create_reagents(1000)
|
||||
create_reagents(maxbloodstored, AMOUNT_VISIBLE)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/bloodbankgen/Destroy()
|
||||
@@ -28,6 +27,14 @@
|
||||
QDEL_NULL(outbag)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/bloodbankgen/examine(mob/user)
|
||||
. = ..()
|
||||
if(bag)
|
||||
. += "<span class='notice'>It has \a [bag.name] hooked to its <b>input</b> slot. The counter reads: \"Current Capacity: [bag.reagents.total_volume] of [bag.reagents.maximum_volume]\"</span>"
|
||||
if(outbag)
|
||||
. += "<span class='notice'>It has \a [bag.name] hooked to its <b>output</b> slot. The counter reads: \"Current Capacity: [outbag.reagents.total_volume] of [outbag.reagents.maximum_volume]\"</span>"
|
||||
|
||||
|
||||
/obj/machinery/bloodbankgen/handle_atom_del(atom/A)
|
||||
..()
|
||||
if(A == bag)
|
||||
@@ -108,74 +115,42 @@
|
||||
|
||||
/obj/machinery/bloodbankgen/process()
|
||||
if(!is_operational())
|
||||
return PROCESS_KILL
|
||||
|
||||
bloodstored = reagents.total_volume
|
||||
return
|
||||
|
||||
var/transfer_amount = 20
|
||||
|
||||
if(draining)
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
draining = FALSE
|
||||
if(reagents.total_volume >= reagents.maximum_volume || !bag || !bag.reagents.total_volume)
|
||||
beep_stop_pumping()
|
||||
return
|
||||
|
||||
if(bag)
|
||||
if(bag.reagents.total_volume)
|
||||
var/datum/reagent/blood/B = bag.reagents.has_reagent("blood")
|
||||
if(B)
|
||||
var/amount = reagents.maximum_volume - reagents.total_volume //monitor the machine's internal storage
|
||||
amount = min(amount, transfer_amount)
|
||||
if(!amount)
|
||||
draining = FALSE
|
||||
updateUsrDialog()
|
||||
visible_message("[src] beeps loudly.")
|
||||
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
return
|
||||
|
||||
if(bag.blood_type == "SY") //no infinite loops using synthetics.
|
||||
reagents.add_reagent("syntheticblood", amount)
|
||||
else
|
||||
reagents.add_reagent("syntheticblood", (amount+(5*efficiency)))
|
||||
|
||||
if(bag.reagents.total_volume >= amount)
|
||||
bag.reagents.remove_reagent("blood", amount)
|
||||
else
|
||||
visible_message("[src] beeps loudly.")
|
||||
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
draining = FALSE
|
||||
|
||||
bag.update_icon()
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
else
|
||||
draining = FALSE
|
||||
updateUsrDialog()
|
||||
var/blood_amount = bag.reagents.get_reagent_amount("blood")
|
||||
//monitor the machine and blood bag's reagents storage.
|
||||
var/amount = min(blood_amount, min(transfer_amount, reagents.maximum_volume - reagents.total_volume))
|
||||
if(!amount)
|
||||
beep_stop_pumping()
|
||||
return
|
||||
var/bonus = bag.blood_type == "SY" ? 0 : 5 * efficiency //no infinite loops using synthetics.
|
||||
reagents.add_reagent("syntheticblood", amount + bonus)
|
||||
bag.reagents.remove_reagent("blood", amount)
|
||||
update_icon()
|
||||
|
||||
if(filling)
|
||||
if(!reagents || !reagents.total_volume)
|
||||
filling = FALSE //there ain't anything in the machine yo.
|
||||
if(!reagents.total_volume || !outbag || outbag.reagents.total_volume >= outbag.reagents.maximum_volume)
|
||||
beep_stop_pumping("[src] pings.", TRUE)
|
||||
return
|
||||
if(outbag && outbag.reagents.total_volume < outbag.reagents.maximum_volume)
|
||||
var/amount = outbag.reagents.maximum_volume - outbag.reagents.total_volume //monitor the output bag's internal storage
|
||||
amount = min(amount, transfer_amount)
|
||||
if(!amount)
|
||||
filling = FALSE
|
||||
visible_message("[src] pings.")
|
||||
playsound(loc, 'sound/machines/beep.ogg', 50, 1)
|
||||
updateUsrDialog()
|
||||
return
|
||||
//monitor the output bag's reagents storage.
|
||||
var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume)
|
||||
reagents.trans_to(outbag, amount)
|
||||
update_icon()
|
||||
|
||||
reagents.trans_to(outbag, amount)
|
||||
outbag.update_icon()
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
else
|
||||
visible_message("[src] pings.")
|
||||
playsound(loc, 'sound/machines/beep.ogg', 50, 1)
|
||||
filling = FALSE
|
||||
updateUsrDialog()
|
||||
return
|
||||
/obj/machinery/bloodbankgen/proc/beep_stop_pumping(msg = "[src] beeps loudly.", out_instead_of_in = FALSE)
|
||||
if(out_instead_of_in)
|
||||
filling = FALSE
|
||||
else
|
||||
draining = FALSE
|
||||
updateUsrDialog()
|
||||
audible_message(msg)
|
||||
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
|
||||
/obj/machinery/bloodbankgen/attackby(obj/item/O, mob/user, params)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
@@ -198,8 +173,8 @@
|
||||
|
||||
if(istype(O, /obj/item/reagent_containers/blood))
|
||||
. = TRUE //no afterattack
|
||||
var/msg = ""
|
||||
if(!panel_open)
|
||||
var/msg
|
||||
if(panel_open)
|
||||
. += "Close the maintenance panel"
|
||||
if(!anchored)
|
||||
. += "[msg ? " and a" : "A"]nchor its bolts"
|
||||
@@ -267,7 +242,7 @@
|
||||
if(!bag && !outbag)
|
||||
dat += "<div class='statusDisplay'>No containers inside, please insert container.</div>"
|
||||
|
||||
var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 520)
|
||||
var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 420)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -305,6 +280,7 @@
|
||||
if(usr && Adjacent(usr) && !issiliconoradminghost(usr))
|
||||
usr.put_in_hands(bag)
|
||||
bag = null
|
||||
draining = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/bloodbankgen/proc/detachoutput()
|
||||
@@ -313,6 +289,7 @@
|
||||
if(usr && Adjacent(usr) && !issiliconoradminghost(usr))
|
||||
usr.put_in_hands(outbag)
|
||||
outbag = null
|
||||
filling = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/bloodbankgen/proc/attachinput(obj/item/O, mob/user)
|
||||
@@ -338,23 +315,22 @@
|
||||
to_chat(user, "<span class='notice'>There is already something in this slot!</span>")
|
||||
|
||||
/obj/machinery/bloodbankgen/Topic(href, href_list)
|
||||
if(..() || panel_open)
|
||||
. = ..()
|
||||
if(. | !is_operational())
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["activateinput"])
|
||||
activateinput()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["detachinput"])
|
||||
detachinput()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["activateoutput"])
|
||||
activateoutput()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["detachoutput"])
|
||||
detachoutput()
|
||||
updateUsrDialog()
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
if(check_access(I))
|
||||
authenticated = 1
|
||||
auth_id = "[I.registered_name] ([I.assignment])"
|
||||
if((20 in I.access))
|
||||
if((ACCESS_CAPTAIN in I.access))
|
||||
authenticated = 2
|
||||
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
|
||||
if(obj_flags & EMAGGED)
|
||||
@@ -279,7 +279,7 @@
|
||||
|
||||
// OMG CENTCOM LETTERHEAD
|
||||
if("MessageCentCom")
|
||||
if(authenticated==2)
|
||||
if(authenticated)
|
||||
if(!checkCCcooldown())
|
||||
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
|
||||
return
|
||||
|
||||
@@ -58,8 +58,6 @@
|
||||
/obj/machinery/firealarm/update_icon()
|
||||
cut_overlays()
|
||||
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
|
||||
var/area/A = src.loc
|
||||
A = A.loc
|
||||
|
||||
if(panel_open)
|
||||
icon_state = "fire_b[buildstage]"
|
||||
@@ -69,23 +67,32 @@
|
||||
icon_state = "firex"
|
||||
return
|
||||
|
||||
icon_state = "fire0"
|
||||
|
||||
if(stat & NOPOWER)
|
||||
icon_state = "fire0"
|
||||
return
|
||||
|
||||
if(is_station_level(z))
|
||||
add_overlay("overlay_[GLOB.security_level]")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "overlay_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
else
|
||||
add_overlay("overlay_[SEC_LEVEL_GREEN]")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "overlay_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
add_overlay("fire_overlay")
|
||||
|
||||
if(detecting)
|
||||
add_overlay("overlay_[A.fire ? "fire" : "clear"]")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "overlay_[A.fire ? "fire" : "clear"]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
if(is_station_level(z))
|
||||
add_overlay("fire_[GLOB.security_level]")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
else
|
||||
add_overlay("overlay_fire")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "overlay_fire", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
add_overlay("fire_[SEC_LEVEL_GREEN]")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
|
||||
var/area/A = src.loc
|
||||
A = A.loc
|
||||
|
||||
if(!detecting || !A.fire)
|
||||
add_overlay("fire_off")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "fire_off", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
else if(obj_flags & EMAGGED)
|
||||
add_overlay("fire_emagged")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
else
|
||||
add_overlay("fire_on")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, "fire_on", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
|
||||
|
||||
/obj/machinery/firealarm/emp_act(severity)
|
||||
. = ..()
|
||||
@@ -101,6 +108,7 @@
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
obj_flags |= EMAGGED
|
||||
update_icon()
|
||||
if(user)
|
||||
user.visible_message("<span class='warning'>Sparks fly out of [src]!</span>",
|
||||
"<span class='notice'>You emag [src], disabling its thermal sensors.</span>")
|
||||
@@ -112,51 +120,39 @@
|
||||
alarm()
|
||||
..()
|
||||
|
||||
/obj/machinery/firealarm/proc/alarm()
|
||||
if(!is_operational() && (last_alarm+FIREALARM_COOLDOWN < world.time))
|
||||
/obj/machinery/firealarm/proc/alarm(mob/user)
|
||||
if(!is_operational() || (last_alarm+FIREALARM_COOLDOWN > world.time))
|
||||
return
|
||||
last_alarm = world.time
|
||||
var/area/A = get_area(src)
|
||||
A.firealert(src)
|
||||
playsound(src.loc, 'goon/sound/machinery/FireAlarm.ogg', 75)
|
||||
playsound(loc, 'goon/sound/machinery/FireAlarm.ogg', 75)
|
||||
if(user)
|
||||
log_game("[user] triggered a fire alarm at [COORD(src)]")
|
||||
|
||||
/obj/machinery/firealarm/proc/reset()
|
||||
/obj/machinery/firealarm/proc/reset(mob/user)
|
||||
if(!is_operational())
|
||||
return
|
||||
var/area/A = get_area(src)
|
||||
A.firereset(src)
|
||||
if(user)
|
||||
log_game("[user] reset a fire alarm at [COORD(src)]")
|
||||
|
||||
/obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "firealarm", name, 300, 150, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/firealarm/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["emagged"] = obj_flags & EMAGGED ? 1 : 0
|
||||
|
||||
if(is_station_level(z))
|
||||
data["seclevel"] = get_security_level()
|
||||
else
|
||||
data["seclevel"] = "green"
|
||||
|
||||
/obj/machinery/firealarm/attack_hand(mob/user)
|
||||
if(buildstage != 2)
|
||||
return ..()
|
||||
add_fingerprint(user)
|
||||
var/area/A = get_area(src)
|
||||
data["alarm"] = A.fire
|
||||
if(A.fire)
|
||||
reset(user)
|
||||
else
|
||||
alarm(user)
|
||||
|
||||
return data
|
||||
/obj/machinery/firealarm/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/firealarm/ui_act(action, params)
|
||||
if(..() || buildstage != 2)
|
||||
return
|
||||
switch(action)
|
||||
if("reset")
|
||||
reset()
|
||||
. = TRUE
|
||||
if("alarm")
|
||||
alarm()
|
||||
. = TRUE
|
||||
/obj/machinery/firealarm/attack_robot(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
@@ -200,6 +196,12 @@
|
||||
to_chat(user, "<span class='notice'>You cut the wires from \the [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
else if(W.force) //hit and turn it on
|
||||
..()
|
||||
var/area/A = get_area(src)
|
||||
if(!A.fire)
|
||||
alarm()
|
||||
return
|
||||
if(1)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
@@ -322,8 +324,3 @@
|
||||
if (!party_overlay)
|
||||
party_overlay = iconstate2appearance('icons/turf/areas.dmi', "party")
|
||||
A.add_overlay(party_overlay)
|
||||
|
||||
/obj/machinery/firealarm/partyalarm/ui_data(mob/user)
|
||||
. = ..()
|
||||
var/area/A = get_area(src)
|
||||
.["alarm"] = A && A.party
|
||||
|
||||
@@ -326,6 +326,9 @@
|
||||
|
||||
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
|
||||
if(state_open && is_operational())
|
||||
if(istype(I, /obj/item/clothing/head/mob_holder))
|
||||
to_chat(user, "<span class='warning'>You can't quite fit that in while you hold it!</span>")
|
||||
return
|
||||
if(istype(I, /obj/item/clothing/suit))
|
||||
if(suit)
|
||||
to_chat(user, "<span class='warning'>The unit already contains a suit!.</span>")
|
||||
@@ -437,4 +440,4 @@
|
||||
if(I)
|
||||
I.forceMove(loc)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
update_icon()
|
||||
|
||||
@@ -219,6 +219,10 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/clothing/head/mob_holder))
|
||||
to_chat(user, "<span class='warning'>It's too unwieldly to put in this way.</span>")
|
||||
return 1
|
||||
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
|
||||
if (!state_open)
|
||||
|
||||
@@ -72,6 +72,11 @@
|
||||
desc = "It's still good. Four second rule!"
|
||||
icon_state = "flour"
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow/ecto
|
||||
name = "ectoplasmic puddle"
|
||||
desc = "You know who to call."
|
||||
light_power = 2
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow
|
||||
name = "glowing goo"
|
||||
desc = "Jeez. I hope that's not for lunch."
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
/obj/item/organ/heart/gland/chem = 5,
|
||||
/obj/item/organ/heart/gland/mindshock = 5,
|
||||
/obj/item/organ/heart/gland/plasma = 7,
|
||||
/obj/item/organ/heart/gland/pop = 5,
|
||||
/obj/item/organ/heart/gland/transform = 5,
|
||||
/obj/item/organ/heart/gland/slime = 4,
|
||||
/obj/item/organ/heart/gland/spiderman = 5,
|
||||
/obj/item/organ/heart/gland/ventcrawling = 1,
|
||||
|
||||
@@ -349,6 +349,10 @@
|
||||
icon_state = "impact_laser_purple"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/temp_visual/impact_effect/shrink
|
||||
icon_state = "m_shield"
|
||||
duration = 10
|
||||
|
||||
/obj/effect/temp_visual/impact_effect/ion
|
||||
icon_state = "shieldsparkles"
|
||||
duration = 6
|
||||
|
||||
@@ -665,6 +665,13 @@
|
||||
name = "Booze Dispenser (Machine Board)"
|
||||
build_path = /obj/machinery/chem_dispenser/drinks/beer
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser/abductor
|
||||
name = "Reagent Synthetizer (Abductor Machine Board)"
|
||||
icon_state = "abductor_mod"
|
||||
build_path = /obj/machinery/chem_dispenser/abductor
|
||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
||||
needs_anchored = FALSE
|
||||
|
||||
/obj/item/circuitboard/machine/smoke_machine
|
||||
name = "Smoke Machine (Machine Board)"
|
||||
build_path = /obj/machinery/smoke_machine
|
||||
|
||||
@@ -76,7 +76,7 @@ GLOBAL_LIST_EMPTY(possible_gifts)
|
||||
/obj/item/clothing/suit/poncho/red,
|
||||
/obj/item/clothing/suit/snowman,
|
||||
/obj/item/clothing/head/snowman,
|
||||
/obj/item/trash/coal)
|
||||
/obj/item/stack/sheet/mineral/coal)
|
||||
|
||||
gift_type_list += subtypesof(/obj/item/clothing/head/collectable)
|
||||
gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo)) //All toys, except for abstract types and syndicate cards.
|
||||
|
||||
@@ -14,23 +14,31 @@
|
||||
do_sparks(rand(5, 9), FALSE, src)
|
||||
playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9)
|
||||
new /obj/effect/dummy/lighting_obj (flashbang_turf, LIGHT_COLOR_WHITE, (flashbang_range + 2), 4, 2)
|
||||
for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf))
|
||||
bang(get_turf(M), M)
|
||||
flashbang_mobs(flashbang_turf, flashbang_range)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
|
||||
/obj/item/grenade/flashbang/proc/flashbang_mobs(turf/source, range)
|
||||
var/list/banged = get_hearers_in_view(range, source)
|
||||
var/list/flashed = viewers(range, source)
|
||||
for(var/i in banged)
|
||||
bang(i, source)
|
||||
for(var/i in flashed)
|
||||
flash(i, source)
|
||||
|
||||
/obj/item/grenade/flashbang/proc/bang(mob/living/M, turf/source)
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
return
|
||||
M.show_message("<span class='warning'>BANG</span>", MSG_AUDIBLE)
|
||||
var/distance = max(0,get_dist(get_turf(src),T))
|
||||
|
||||
//Flash
|
||||
if(M.flash_act(affect_silicon = 1))
|
||||
M.Knockdown(max(200/max(1,distance), 60))
|
||||
//Bang
|
||||
var/distance = get_dist(get_turf(M), source)
|
||||
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
|
||||
M.Knockdown(200)
|
||||
M.soundbang_act(1, 200, 10, 15)
|
||||
|
||||
else
|
||||
M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5))
|
||||
|
||||
/obj/item/grenade/flashbang/proc/flash(mob/living/M, turf/source)
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
return
|
||||
var/distance = get_dist(get_turf(M), source)
|
||||
if(M.flash_act(affect_silicon = 1))
|
||||
M.Knockdown(max(200/max(1,distance), 60))
|
||||
|
||||
@@ -11,95 +11,42 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 40
|
||||
novariants = FALSE
|
||||
var/heal_brute = 0
|
||||
var/heal_burn = 0
|
||||
var/stop_bleeding = 0
|
||||
item_flags = NOBLUDGEON
|
||||
var/self_delay = 50
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/M, mob/user)
|
||||
if(M.stat == DEAD && !stop_bleeding)
|
||||
var/t_him = "it"
|
||||
if(M.gender == MALE)
|
||||
t_him = "him"
|
||||
else if(M.gender == FEMALE)
|
||||
t_him = "her"
|
||||
to_chat(user, "<span class='danger'>\The [M] is dead, you cannot help [t_him]!</span>")
|
||||
. = ..()
|
||||
if(!M.can_inject(user, TRUE))
|
||||
return
|
||||
|
||||
if(!iscarbon(M) && !isanimal(M))
|
||||
to_chat(user, "<span class='danger'>You don't know how to apply \the [src] to [M]!</span>")
|
||||
return 1
|
||||
|
||||
var/obj/item/bodypart/affecting
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
affecting = C.get_bodypart(check_zone(user.zone_selected))
|
||||
if(!affecting) //Missing limb?
|
||||
to_chat(user, "<span class='warning'>[C] doesn't have \a [parse_zone(user.zone_selected)]!</span>")
|
||||
if(M == user)
|
||||
user.visible_message("<span class='notice'>[user] starts to apply \the [src] on [user.p_them()]self...</span>", "<span class='notice'>You begin applying \the [src] on yourself...</span>")
|
||||
if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE)))
|
||||
return
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(stop_bleeding)
|
||||
if(H.bleedsuppress)
|
||||
to_chat(user, "<span class='warning'>[H]'s bleeding is already bandaged!</span>")
|
||||
return
|
||||
else if(!H.bleed_rate)
|
||||
to_chat(user, "<span class='warning'>[H] isn't bleeding!</span>")
|
||||
return
|
||||
if(heal(M, user))
|
||||
log_combat(user, M, "healed", src.name)
|
||||
use(1)
|
||||
|
||||
|
||||
if(isliving(M))
|
||||
if(!M.can_inject(user, 1))
|
||||
return
|
||||
/obj/item/stack/medical/proc/heal(mob/living/M, mob/user)
|
||||
return
|
||||
|
||||
if(user)
|
||||
if (M != user)
|
||||
if (isanimal(M))
|
||||
var/mob/living/simple_animal/critter = M
|
||||
if (!(critter.healable))
|
||||
to_chat(user, "<span class='notice'> You cannot use [src] on [M]!</span>")
|
||||
return
|
||||
else if (critter.health == critter.maxHealth)
|
||||
to_chat(user, "<span class='notice'> [M] is at full health.</span>")
|
||||
return
|
||||
else if(src.heal_brute < 1)
|
||||
to_chat(user, "<span class='notice'> [src] won't help [M] at all.</span>")
|
||||
return
|
||||
user.visible_message("<span class='green'>[user] applies [src] on [M].</span>", "<span class='green'>You apply [src] on [M].</span>")
|
||||
else
|
||||
var/t_himself = "itself"
|
||||
if(user.gender == MALE)
|
||||
t_himself = "himself"
|
||||
else if(user.gender == FEMALE)
|
||||
t_himself = "herself"
|
||||
user.visible_message("<span class='notice'>[user] starts to apply [src] on [t_himself]...</span>", "<span class='notice'>You begin applying [src] on yourself...</span>")
|
||||
if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject,user,1)))
|
||||
return
|
||||
user.visible_message("<span class='green'>[user] applies [src] on [t_himself].</span>", "<span class='green'>You apply [src] on yourself.</span>")
|
||||
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
affecting = C.get_bodypart(check_zone(user.zone_selected))
|
||||
if(!affecting) //Missing limb?
|
||||
to_chat(user, "<span class='warning'>[C] doesn't have \a [parse_zone(user.zone_selected)]!</span>")
|
||||
return
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(stop_bleeding)
|
||||
if(!H.bleedsuppress) //so you can't stack bleed suppression
|
||||
H.suppress_bloodloss(stop_bleeding)
|
||||
if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
|
||||
if(affecting.heal_damage(heal_brute, heal_burn))
|
||||
/obj/item/stack/medical/proc/heal_carbon(mob/living/carbon/C, mob/user, brute, burn)
|
||||
var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected))
|
||||
if(!affecting) //Missing limb?
|
||||
to_chat(user, "<span class='warning'>[C] doesn't have \a [parse_zone(user.zone_selected)]!</span>")
|
||||
return
|
||||
if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
|
||||
if(affecting.brute_dam && brute || affecting.burn_dam && burn)
|
||||
user.visible_message("<span class='green'>[user] applies \the [src] on [C]'s [affecting.name].</span>", "<span class='green'>You apply \the [src] on [C]'s [affecting.name].</span>")
|
||||
if(affecting.heal_damage(brute, burn))
|
||||
C.update_damage_overlays()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>")
|
||||
else
|
||||
M.heal_bodypart_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
|
||||
use(1)
|
||||
|
||||
return TRUE
|
||||
to_chat(user, "<span class='notice'>[C]'s [affecting.name] can not be healed with \the [src].</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>\The [src] won't work on a robotic limb!</span>")
|
||||
|
||||
/obj/item/stack/medical/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
|
||||
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
name = "bruise pack"
|
||||
@@ -108,27 +55,56 @@
|
||||
icon_state = "brutepack"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
heal_brute = 40
|
||||
var/heal_brute = 25
|
||||
self_delay = 20
|
||||
max_amount = 12
|
||||
grind_results = list("styptic_powder" = 10)
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/heal(mob/living/M, mob/user)
|
||||
if(M.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'> [M] is dead. You can not help [M.p_them()]!</span>")
|
||||
return
|
||||
if(isanimal(M))
|
||||
var/mob/living/simple_animal/critter = M
|
||||
if (!(critter.healable))
|
||||
to_chat(user, "<span class='notice'> You cannot use \the [src] on [M]!</span>")
|
||||
return FALSE
|
||||
else if (critter.health == critter.maxHealth)
|
||||
to_chat(user, "<span class='notice'> [M] is at full health.</span>")
|
||||
return FALSE
|
||||
user.visible_message("<span class='green'>[user] applies \the [src] on [M].</span>", "<span class='green'>You apply \the [src] on [M].</span>")
|
||||
M.heal_bodypart_damage((heal_brute/2))
|
||||
return TRUE
|
||||
if(iscarbon(M))
|
||||
return heal_carbon(M, user, heal_brute, 0)
|
||||
to_chat(user, "<span class='notice'>You can't heal [M] with the \the [src]!</span>")
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/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/gauze
|
||||
name = "medical gauze"
|
||||
desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, but does not heal wounds."
|
||||
desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, heals minor wounds."
|
||||
gender = PLURAL
|
||||
singular_name = "medical gauze"
|
||||
icon_state = "gauze"
|
||||
stop_bleeding = 1800
|
||||
self_delay = 20
|
||||
var/stop_bleeding = 1800
|
||||
var/heal_brute = 5
|
||||
self_delay = 10
|
||||
max_amount = 12
|
||||
|
||||
/obj/item/stack/medical/gauze/heal(mob/living/M, mob/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression
|
||||
H.suppress_bloodloss(stop_bleeding)
|
||||
to_chat(user, "<span class='notice'>You stop the bleeding of [M]!</span>")
|
||||
return TRUE
|
||||
to_chat(user, "<span class='notice'>You can not use \the [src] on [M]!</span>")
|
||||
|
||||
/obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/wirecutters) || I.get_sharpness())
|
||||
if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness())
|
||||
if(get_amount() < 2)
|
||||
to_chat(user, "<span class='warning'>You need at least two gauzes to do this!</span>")
|
||||
return
|
||||
@@ -163,13 +139,19 @@
|
||||
icon_state = "ointment"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
heal_burn = 40
|
||||
var/heal_burn = 25
|
||||
self_delay = 20
|
||||
max_amount = 12
|
||||
grind_results = list("silver_sulfadiazine" = 10)
|
||||
|
||||
/obj/item/stack/medical/ointment/heal(mob/living/M, mob/user)
|
||||
if(M.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'> [M] is dead. You can not help [M.p_them()]!</span>")
|
||||
return
|
||||
if(iscarbon(M))
|
||||
return heal_carbon(M, user, 0, heal_burn)
|
||||
to_chat(user, "<span class='notice'>You can't heal [M] with the \the [src]!</span>")
|
||||
|
||||
/obj/item/stack/medical/ointment/suicide_act(mob/living/user)
|
||||
user.visible_message("<span class='suicide'>[user] is squeezing \the [src] into [user.p_their()] mouth! [user.p_do(TRUE)]n't [user.p_they()] know that stuff is toxic?</span>")
|
||||
return TOXLOSS
|
||||
|
||||
/obj/item/stack/medical/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
|
||||
|
||||
@@ -4,7 +4,6 @@ Mineral Sheets
|
||||
- Sandstone
|
||||
- Sandbags
|
||||
- Diamond
|
||||
- Snow
|
||||
- Uranium
|
||||
- Plasma
|
||||
- Gold
|
||||
@@ -15,8 +14,9 @@ Mineral Sheets
|
||||
Others:
|
||||
- Adamantine
|
||||
- Mythril
|
||||
- Enriched Uranium
|
||||
- Snow
|
||||
- Abductor
|
||||
- Coal
|
||||
*/
|
||||
|
||||
/obj/item/stack/sheet/mineral/Initialize(mapload)
|
||||
@@ -410,3 +410,36 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
|
||||
/obj/item/stack/sheet/mineral/abductor/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.abductor_recipes
|
||||
. = ..()
|
||||
|
||||
/*
|
||||
* Coal
|
||||
*/
|
||||
|
||||
/obj/item/stack/sheet/mineral/coal
|
||||
name = "coal"
|
||||
desc = "Someone's gotten on the naughty list."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "slag"
|
||||
singular_name = "coal lump"
|
||||
merge_type = /obj/item/stack/sheet/mineral/coal
|
||||
grind_results = list("carbon" = 20)
|
||||
|
||||
/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, params)
|
||||
if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
|
||||
log_game("Coal ignited by [key_name(user)] in [AREACOORD(T)]")
|
||||
fire_act(W.get_temperature())
|
||||
return TRUE
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/sheet/mineral/coal/fire_act(exposed_temperature, exposed_volume)
|
||||
atmos_spawn_air("co2=[amount*10];TEMP=[exposed_temperature]")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/stack/sheet/mineral/coal/five
|
||||
amount = 5
|
||||
|
||||
/obj/item/stack/sheet/mineral/coal/ten
|
||||
amount = 10
|
||||
@@ -551,7 +551,7 @@
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
|
||||
new /obj/item/clothing/shoes/magboots/syndie(src)
|
||||
new /obj/item/storage/firstaid/tactical(src)
|
||||
new /obj/item/storage/firstaid/tactical/nukeop(src)
|
||||
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
|
||||
new /obj/item/ammo_box/foambox/riot(src)
|
||||
|
||||
|
||||
@@ -176,18 +176,36 @@
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_NORMAL
|
||||
STR.max_combined_w_class = 16
|
||||
STR.max_items = 8
|
||||
|
||||
/obj/item/storage/firstaid/tactical/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/defibrillator/compact/combat/loaded(src)
|
||||
new /obj/item/reagent_containers/hypospray/combat(src)
|
||||
new /obj/item/reagent_containers/pill/patch/styptic(src)
|
||||
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
|
||||
new /obj/item/reagent_containers/syringe/lethal/choral(src)
|
||||
new /obj/item/reagent_containers/hypospray/combat/omnizine(src)
|
||||
new /obj/item/reagent_containers/medspray/styptic(src)
|
||||
new /obj/item/reagent_containers/medspray/silver_sulf(src)
|
||||
new /obj/item/healthanalyzer/advanced(src)
|
||||
new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for
|
||||
new /obj/item/clothing/glasses/hud/health/night(src)
|
||||
|
||||
/obj/item/storage/firstaid/tactical/nukeop
|
||||
name = "improved combat medical kit"
|
||||
|
||||
/obj/item/storage/firstaid/tactical/nukeop/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/defibrillator/compact/combat/loaded(src)
|
||||
new /obj/item/reagent_containers/hypospray/combat(src)
|
||||
new /obj/item/reagent_containers/medspray/styptic(src)
|
||||
new /obj/item/reagent_containers/medspray/silver_sulf(src)
|
||||
new /obj/item/healthanalyzer/advanced(src)
|
||||
new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for
|
||||
new /obj/item/clothing/glasses/hud/health/night(src)
|
||||
|
||||
/*
|
||||
* Pill Bottles
|
||||
*/
|
||||
|
||||
@@ -72,17 +72,10 @@
|
||||
resistance_flags = NONE
|
||||
grind_results = list("aluminium" = 10)
|
||||
|
||||
/obj/item/trash/boritos
|
||||
name = "boritos bag"
|
||||
icon_state = "boritos"
|
||||
grind_results = list("aluminium" = 1) //from the mylar bag
|
||||
|
||||
/obj/item/trash/attack(mob/M, mob/living/user)
|
||||
return
|
||||
|
||||
/obj/item/trash/coal
|
||||
name = "lump of coal"
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "slag"
|
||||
desc = "Someone's gotten on the naughty list."
|
||||
grind_results = list("carbon" = 20)
|
||||
|
||||
/obj/item/trash/coal/burn()
|
||||
visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...")
|
||||
new /obj/item/stack/ore/diamond(loc)
|
||||
qdel(src)
|
||||
|
||||
+8
-2
@@ -126,8 +126,14 @@ GLOBAL_LIST_INIT(freqtospan, list(
|
||||
return returntext
|
||||
return "[copytext("[freq]", 1, 4)].[copytext("[freq]", 4, 5)]"
|
||||
|
||||
/proc/attach_spans(input, list/spans)
|
||||
return "[message_spans_start(spans)][input]</span>"
|
||||
/atom/movable/proc/attach_spans(input, list/spans)
|
||||
var/customsayverb = findtext(input, "*")
|
||||
if(customsayverb)
|
||||
input = capitalize(copytext(input, customsayverb+1))
|
||||
if(input)
|
||||
return "[message_spans_start(spans)][input]</span>"
|
||||
else
|
||||
return
|
||||
|
||||
/proc/message_spans_start(list/spans)
|
||||
var/output = "<span class='"
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
dat += "<I>Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.</I><BR>"
|
||||
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_ROBELESS]'>Robeless</A><BR>"
|
||||
dat += "<I>Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.</I><BR>"
|
||||
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_MARTIAL]'>Martial Artist</a><BR>"
|
||||
dat += "<I>Your apprentice is training in ancient martial arts. They know the Plasmafist and Nuclear Fist.</I><BR>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
@@ -65,6 +65,8 @@
|
||||
//Equip
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
H.set_species(/datum/species/abductor)
|
||||
var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
T.mothership = "[team.name]"
|
||||
|
||||
H.real_name = "[team.name] [sub_role]"
|
||||
H.equipOutfit(outfit)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
actions_types = list(/datum/action/item_action/hands_free/activate)
|
||||
allowed = list(
|
||||
/obj/item/abductor,
|
||||
/obj/item/abductor_baton,
|
||||
/obj/item/abductor/baton,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/gun/energy,
|
||||
/obj/item/restraints/handcuffs
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it.
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry)
|
||||
disguise = entry
|
||||
@@ -89,11 +89,9 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
DeactivateStealth()
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/IsReflect()
|
||||
DeactivateStealth()
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/ui_action_click()
|
||||
switch(mode)
|
||||
@@ -111,7 +109,10 @@
|
||||
to_chat(loc, "<span class='warning'>Combat injection is still recharging.</span>")
|
||||
return
|
||||
var/mob/living/carbon/human/M = loc
|
||||
M.do_adrenaline(150, FALSE, 0, 0, TRUE, list("inaprovaline" = 3, "synaptizine" = 10, "omnizine" = 10), "<span class='boldnotice'>You feel a sudden surge of energy!</span>")
|
||||
M.adjustStaminaLoss(-75)
|
||||
M.SetUnconscious(0)
|
||||
M.SetStun(0)
|
||||
M.SetKnockdown(0)
|
||||
combat_cooldown = 0
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
@@ -131,9 +132,11 @@
|
||||
|
||||
/obj/item/abductor
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
|
||||
|
||||
/obj/item/abductor/proc/AbductorCheck(mob/user)
|
||||
if(HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
|
||||
if (HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
|
||||
return TRUE
|
||||
if (istype(user) && user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING))
|
||||
return TRUE
|
||||
@@ -158,8 +161,6 @@
|
||||
desc = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras."
|
||||
icon_state = "gizmo_scan"
|
||||
item_state = "silencer"
|
||||
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
|
||||
var/mode = GIZMO_SCAN
|
||||
var/mob/living/marked = null
|
||||
var/obj/machinery/abductor/console/console
|
||||
@@ -218,12 +219,9 @@
|
||||
if(marked == target)
|
||||
to_chat(user, "<span class='warning'>This specimen is already marked!</span>")
|
||||
return
|
||||
if(ishuman(target))
|
||||
if(isabductor(target))
|
||||
marked = target
|
||||
to_chat(user, "<span class='notice'>You mark [target] for future retrieval.</span>")
|
||||
else
|
||||
prepare(target,user)
|
||||
if(isabductor(target) || iscow(target))
|
||||
marked = target
|
||||
to_chat(user, "<span class='notice'>You mark [target] for future retrieval.</span>")
|
||||
else
|
||||
prepare(target,user)
|
||||
|
||||
@@ -247,8 +245,6 @@
|
||||
desc = "A compact device used to shut down communications equipment."
|
||||
icon_state = "silencer"
|
||||
item_state = "gizmo"
|
||||
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
|
||||
|
||||
/obj/item/abductor/silencer/attack(mob/living/M, mob/user)
|
||||
if(!AbductorCheck(user))
|
||||
@@ -292,8 +288,6 @@
|
||||
or to send a command to a test subject with a charged gland."
|
||||
icon_state = "mind_device_message"
|
||||
item_state = "silencer"
|
||||
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
|
||||
var/mode = MIND_DEVICE_MESSAGE
|
||||
|
||||
/obj/item/abductor/mind_device/attack_self(mob/user)
|
||||
@@ -389,6 +383,17 @@
|
||||
item_state = "alienpistol"
|
||||
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
|
||||
|
||||
/obj/item/gun/energy/shrink_ray
|
||||
name = "shrink ray blaster"
|
||||
desc = "This is a piece of frightening alien tech that enhances the magnetic pull of atoms in a localized space to temporarily make an object shrink. \
|
||||
That or it's just space magic. Either way, it shrinks stuff."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/shrink)
|
||||
item_state = "shrink_ray"
|
||||
icon_state = "shrink_ray"
|
||||
fire_delay = 30
|
||||
selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds
|
||||
trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them)
|
||||
|
||||
/obj/item/paper/guides/antag/abductor
|
||||
name = "Dissection Guide"
|
||||
icon_state = "alienpaper_words"
|
||||
@@ -422,21 +427,18 @@
|
||||
#define BATON_PROBE 3
|
||||
#define BATON_MODES 4
|
||||
|
||||
/obj/item/abductor_baton
|
||||
/obj/item/abductor/baton
|
||||
name = "advanced baton"
|
||||
desc = "A quad-mode baton used for incapacitation and restraining of specimens."
|
||||
var/mode = BATON_STUN
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "wonderprodStun"
|
||||
item_state = "wonderprod"
|
||||
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 7
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
actions_types = list(/datum/action/item_action/toggle_mode)
|
||||
|
||||
/obj/item/abductor_baton/proc/toggle(mob/living/user=usr)
|
||||
/obj/item/abductor/baton/proc/toggle(mob/living/user=usr)
|
||||
mode = (mode+1)%BATON_MODES
|
||||
var/txt
|
||||
switch(mode)
|
||||
@@ -452,7 +454,7 @@
|
||||
to_chat(usr, "<span class='notice'>You switch the baton to [txt] mode.</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/abductor_baton/update_icon()
|
||||
/obj/item/abductor/baton/update_icon()
|
||||
switch(mode)
|
||||
if(BATON_STUN)
|
||||
icon_state = "wonderprodStun"
|
||||
@@ -467,8 +469,8 @@
|
||||
icon_state = "wonderprodProbe"
|
||||
item_state = "wonderprodProbe"
|
||||
|
||||
/obj/item/abductor_baton/attack(mob/target, mob/living/user)
|
||||
if(!isabductor(user))
|
||||
/obj/item/abductor/baton/attack(mob/target, mob/living/user)
|
||||
if(!AbductorCheck(user))
|
||||
return
|
||||
|
||||
if(iscyborg(target))
|
||||
@@ -485,8 +487,8 @@
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
|
||||
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
return 0
|
||||
playsound(H, 'sound/weapons/genhit.ogg', 50, TRUE)
|
||||
return FALSE
|
||||
|
||||
switch (mode)
|
||||
if(BATON_STUN)
|
||||
@@ -498,10 +500,10 @@
|
||||
if(BATON_PROBE)
|
||||
ProbeAttack(L,user)
|
||||
|
||||
/obj/item/abductor_baton/attack_self(mob/living/user)
|
||||
/obj/item/abductor/baton/attack_self(mob/living/user)
|
||||
toggle(user)
|
||||
|
||||
/obj/item/abductor_baton/proc/StunAttack(mob/living/L,mob/living/user)
|
||||
/obj/item/abductor/baton/proc/StunAttack(mob/living/L,mob/living/user)
|
||||
|
||||
L.lastattacker = user.real_name
|
||||
L.lastattackerckey = user.ckey
|
||||
@@ -513,7 +515,7 @@
|
||||
|
||||
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
|
||||
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
|
||||
playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
@@ -521,7 +523,7 @@
|
||||
|
||||
log_combat(user, L, "stunned")
|
||||
|
||||
/obj/item/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user)
|
||||
/obj/item/abductor/baton/proc/SleepAttack(mob/living/L,mob/living/user)
|
||||
if(L.incapacitated(TRUE, TRUE))
|
||||
if(L.anti_magic_check(FALSE, FALSE, TRUE, 0))
|
||||
to_chat(user, "<span class='warning'>The specimen's tinfoil protection is interfering with the sleep inducement!</span>")
|
||||
@@ -531,7 +533,7 @@
|
||||
return
|
||||
L.visible_message("<span class='danger'>[user] has induced sleep in [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>You suddenly feel very drowsy!</span>")
|
||||
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
|
||||
playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
|
||||
L.Sleeping(1200)
|
||||
log_combat(user, L, "put to sleep")
|
||||
else
|
||||
@@ -545,13 +547,13 @@
|
||||
L.visible_message("<span class='danger'>[user] tried to induce sleep in [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>You suddenly feel drowsy!</span>")
|
||||
|
||||
/obj/item/abductor_baton/proc/CuffAttack(mob/living/L,mob/living/user)
|
||||
/obj/item/abductor/baton/proc/CuffAttack(mob/living/L,mob/living/user)
|
||||
if(!iscarbon(L))
|
||||
return
|
||||
var/mob/living/carbon/C = L
|
||||
if(!C.handcuffed)
|
||||
if(C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2)
|
||||
C.visible_message("<span class='danger'>[user] begins restraining [C] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] begins shaping an energy field around your hands!</span>")
|
||||
if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore()))
|
||||
@@ -565,7 +567,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[C] doesn't have two hands...</span>")
|
||||
|
||||
/obj/item/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user)
|
||||
/obj/item/abductor/baton/proc/ProbeAttack(mob/living/L,mob/living/user)
|
||||
L.visible_message("<span class='danger'>[user] probes [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] probes you!</span>")
|
||||
|
||||
@@ -610,7 +612,7 @@
|
||||
S.start()
|
||||
. = ..()
|
||||
|
||||
/obj/item/abductor_baton/examine(mob/user)
|
||||
/obj/item/abductor/baton/examine(mob/user)
|
||||
. = ..()
|
||||
switch(mode)
|
||||
if(BATON_STUN)
|
||||
@@ -639,10 +641,44 @@
|
||||
AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
|
||||
|
||||
/obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
return // Stops humans from disassembling abductor headsets.
|
||||
return ..()
|
||||
|
||||
/obj/item/abductor_machine_beacon
|
||||
name = "machine beacon"
|
||||
desc = "A beacon designed to instantly tele-construct abductor machinery."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "beacon"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/obj/machinery/spawned_machine
|
||||
|
||||
/obj/item/abductor_machine_beacon/attack_self(mob/user)
|
||||
..()
|
||||
user.visible_message("<span class='notice'>[user] places down [src] and activates it.</span>", "<span class='notice'>You place down [src] and activate it.</span>")
|
||||
user.dropItemToGround(src)
|
||||
playsound(src, 'sound/machines/terminal_alert.ogg', 50)
|
||||
addtimer(CALLBACK(src, .proc/try_spawn_machine), 30)
|
||||
|
||||
/obj/item/abductor_machine_beacon/proc/try_spawn_machine()
|
||||
var/viable = FALSE
|
||||
if(isfloorturf(loc))
|
||||
var/turf/T = loc
|
||||
viable = TRUE
|
||||
for(var/obj/thing in T.contents)
|
||||
if(thing.density || ismachinery(thing) || isstructure(thing))
|
||||
viable = FALSE
|
||||
if(viable)
|
||||
playsound(src, 'sound/effects/phasein.ogg', 50, TRUE)
|
||||
var/new_machine = new spawned_machine(loc)
|
||||
visible_message("<span class='notice'>[new_machine] warps on top of the beacon!</span>")
|
||||
qdel(src)
|
||||
else
|
||||
playsound(src, 'sound/machines/buzz-two.ogg', 50)
|
||||
|
||||
/obj/item/abductor_machine_beacon/chem_dispenser
|
||||
name = "beacon - Reagent Synthesizer"
|
||||
spawned_machine = /obj/machinery/chem_dispenser/abductor
|
||||
|
||||
/obj/item/scalpel/alien
|
||||
name = "alien scalpel"
|
||||
@@ -706,11 +742,11 @@
|
||||
framestackamount = 1
|
||||
|
||||
/obj/structure/table_frame/abductor/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/wrench))
|
||||
if(I.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
|
||||
I.play_tool_sound(src)
|
||||
if(I.use_tool(src, user, 30))
|
||||
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
for(var/i = 1, i <= framestackamount, i++)
|
||||
new framestack(get_turf(src))
|
||||
qdel(src)
|
||||
@@ -760,7 +796,6 @@
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "bed"
|
||||
can_buckle = 1
|
||||
buckle_lying = 1
|
||||
|
||||
var/static/list/injected_reagents = list("corazone")
|
||||
|
||||
@@ -798,3 +833,11 @@
|
||||
airlock_type = /obj/machinery/door/airlock/abductor
|
||||
material_type = /obj/item/stack/sheet/mineral/abductor
|
||||
noglass = TRUE
|
||||
|
||||
/obj/item/clothing/under/abductor
|
||||
desc = "The most advanced form of jumpsuit known to reality, looks uncomfortable."
|
||||
name = "alien jumpsuit"
|
||||
icon_state = "abductor"
|
||||
item_state = "bl_suit"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0)
|
||||
can_adjust = 0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/outfit/abductor
|
||||
name = "Abductor Basic"
|
||||
uniform = /obj/item/clothing/under/color/grey //they're greys gettit
|
||||
uniform = /obj/item/clothing/under/abductor
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
back = /obj/item/storage/backpack
|
||||
ears = /obj/item/radio/headset/abductor
|
||||
@@ -34,7 +34,7 @@
|
||||
name = "Abductor Agent"
|
||||
head = /obj/item/clothing/head/helmet/abductor
|
||||
suit = /obj/item/clothing/suit/armor/abductor/vest
|
||||
suit_store = /obj/item/abductor_baton
|
||||
suit_store = /obj/item/abductor/baton
|
||||
belt = /obj/item/storage/belt/military/abductor/full
|
||||
|
||||
backpack_contents = list(
|
||||
|
||||
@@ -5,18 +5,23 @@
|
||||
icon_state = "gland"
|
||||
status = ORGAN_ROBOTIC
|
||||
beating = TRUE
|
||||
organ_flags = ORGAN_NO_SPOIL
|
||||
var/true_name = "baseline placebo referencer"
|
||||
var/cooldown_low = 300
|
||||
var/cooldown_high = 300
|
||||
var/next_activation = 0
|
||||
var/uses // -1 For infinite
|
||||
var/human_only = 0
|
||||
var/active = 0
|
||||
var/human_only = FALSE
|
||||
var/active = FALSE
|
||||
|
||||
var/mind_control_uses = 1
|
||||
var/mind_control_duration = 1800
|
||||
var/active_mind_control = FALSE
|
||||
|
||||
/obj/item/organ/heart/gland/Initialize()
|
||||
. = ..()
|
||||
icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral"))
|
||||
|
||||
/obj/item/organ/heart/gland/examine(mob/user)
|
||||
. = ..()
|
||||
if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user))
|
||||
@@ -55,14 +60,18 @@
|
||||
active_mind_control = TRUE
|
||||
message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]")
|
||||
update_gland_hud()
|
||||
|
||||
var/obj/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /obj/screen/alert/mind_control)
|
||||
mind_alert.command = command
|
||||
addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/proc/clear_mind_control()
|
||||
if(!ownerCheck() || !active_mind_control)
|
||||
return FALSE
|
||||
to_chat(owner, "<span class='userdanger'>You feel the compulsion fade, and you completely forget about your previous orders.</span>")
|
||||
to_chat(owner, "<span class='userdanger'>You feel the compulsion fade, and you <i>completely forget</i> about your previous orders.</span>")
|
||||
owner.clear_alert("mind_control")
|
||||
active_mind_control = FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = 0)
|
||||
active = 0
|
||||
@@ -98,257 +107,4 @@
|
||||
active = 0
|
||||
|
||||
/obj/item/organ/heart/gland/proc/activate()
|
||||
return
|
||||
|
||||
/obj/item/organ/heart/gland/heals
|
||||
true_name = "coherency harmonizer"
|
||||
cooldown_low = 200
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
icon_state = "health"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 3000
|
||||
|
||||
/obj/item/organ/heart/gland/heals/activate()
|
||||
to_chat(owner, "<span class='notice'>You feel curiously revitalized.</span>")
|
||||
owner.adjustToxLoss(-20, FALSE, TRUE)
|
||||
owner.heal_bodypart_damage(20, 20, 0, TRUE)
|
||||
owner.adjustOxyLoss(-20)
|
||||
|
||||
/obj/item/organ/heart/gland/slime
|
||||
true_name = "gastric animation galvanizer"
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
uses = -1
|
||||
icon_state = "slime"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 2400
|
||||
|
||||
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
owner.faction |= "slime"
|
||||
owner.grant_language(/datum/language/slime)
|
||||
|
||||
/obj/item/organ/heart/gland/slime/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel nauseated!</span>")
|
||||
owner.vomit(20)
|
||||
|
||||
var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey")
|
||||
Slime.Friends = list(owner)
|
||||
Slime.Leader = owner
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock
|
||||
true_name = "neural crosstalk uninhibitor"
|
||||
cooldown_low = 400
|
||||
cooldown_high = 700
|
||||
uses = -1
|
||||
icon_state = "mindshock"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 6000
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/activate()
|
||||
to_chat(owner, "<span class='notice'>You get a headache.</span>")
|
||||
|
||||
var/turf/T = get_turf(owner)
|
||||
for(var/mob/living/carbon/H in orange(4,T))
|
||||
if(H == owner)
|
||||
continue
|
||||
switch(pick(1,3))
|
||||
if(1)
|
||||
to_chat(H, "<span class='userdanger'>You hear a loud buzz in your head, silencing your thoughts!</span>")
|
||||
H.Stun(50)
|
||||
if(2)
|
||||
to_chat(H, "<span class='warning'>You hear an annoying buzz in your head.</span>")
|
||||
H.confused += 15
|
||||
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
|
||||
if(3)
|
||||
H.hallucination += 60
|
||||
|
||||
/obj/item/organ/heart/gland/pop
|
||||
true_name = "anthropmorphic translocator"
|
||||
cooldown_low = 900
|
||||
cooldown_high = 1800
|
||||
uses = -1
|
||||
human_only = TRUE
|
||||
icon_state = "species"
|
||||
mind_control_uses = 5
|
||||
mind_control_duration = 300
|
||||
|
||||
/obj/item/organ/heart/gland/pop/activate()
|
||||
to_chat(owner, "<span class='notice'>You feel unlike yourself.</span>")
|
||||
randomize_human(owner)
|
||||
var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
|
||||
owner.set_species(species)
|
||||
|
||||
/obj/item/organ/heart/gland/ventcrawling
|
||||
true_name = "pliant cartilage enabler"
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
uses = 1
|
||||
icon_state = "vent"
|
||||
mind_control_uses = 4
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/ventcrawling/activate()
|
||||
to_chat(owner, "<span class='notice'>You feel very stretchy.</span>")
|
||||
owner.ventcrawler = VENTCRAWLER_ALWAYS
|
||||
|
||||
/obj/item/organ/heart/gland/viral
|
||||
true_name = "contamination incubator"
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
uses = 1
|
||||
icon_state = "viral"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/viral/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel sick.</span>")
|
||||
var/datum/disease/advance/A = random_virus(pick(2,6),6)
|
||||
A.carrier = TRUE
|
||||
owner.ForceContractDisease(A, FALSE, TRUE)
|
||||
|
||||
/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
|
||||
if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
|
||||
max_symptoms = VIRUS_SYMPTOM_LIMIT
|
||||
var/datum/disease/advance/A = new /datum/disease/advance()
|
||||
var/list/datum/symptom/possible_symptoms = list()
|
||||
for(var/symptom in subtypesof(/datum/symptom))
|
||||
var/datum/symptom/S = symptom
|
||||
if(initial(S.level) > max_level)
|
||||
continue
|
||||
if(initial(S.level) <= 0) //unobtainable symptoms
|
||||
continue
|
||||
possible_symptoms += S
|
||||
for(var/i in 1 to max_symptoms)
|
||||
var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
|
||||
if(chosen_symptom)
|
||||
var/datum/symptom/S = new chosen_symptom
|
||||
A.symptoms += S
|
||||
A.Refresh() //just in case someone already made and named the same disease
|
||||
return A
|
||||
|
||||
/obj/item/organ/heart/gland/trauma
|
||||
true_name = "white matter randomiser"
|
||||
cooldown_low = 800
|
||||
cooldown_high = 1200
|
||||
uses = 5
|
||||
icon_state = "emp"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/trauma/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel a spike of pain in your head.</span>")
|
||||
if(prob(33))
|
||||
owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
|
||||
else
|
||||
if(prob(20))
|
||||
owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
|
||||
else
|
||||
owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
|
||||
|
||||
/obj/item/organ/heart/gland/spiderman
|
||||
true_name = "araneae cloister accelerator"
|
||||
cooldown_low = 450
|
||||
cooldown_high = 900
|
||||
uses = -1
|
||||
icon_state = "spider"
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 2400
|
||||
|
||||
/obj/item/organ/heart/gland/spiderman/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel something crawling in your skin.</span>")
|
||||
owner.faction |= "spiders"
|
||||
var/obj/structure/spider/spiderling/S = new(owner.drop_location())
|
||||
S.directive = "Protect your nest inside [owner.real_name]."
|
||||
|
||||
/obj/item/organ/heart/gland/egg
|
||||
true_name = "roe/enzymatic synthesizer"
|
||||
cooldown_low = 300
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
icon_state = "egg"
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/egg/activate()
|
||||
owner.visible_message("<span class='alertalien'>[owner] [pick(EGG_LAYING_MESSAGES)]</span>")
|
||||
var/turf/T = owner.drop_location()
|
||||
new /obj/item/reagent_containers/food/snacks/egg/gland(T)
|
||||
|
||||
/obj/item/organ/heart/gland/electric
|
||||
true_name = "electron accumulator/discharger"
|
||||
cooldown_low = 800
|
||||
cooldown_high = 1200
|
||||
uses = -1
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 900
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
|
||||
REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/electric/activate()
|
||||
owner.visible_message("<span class='danger'>[owner]'s skin starts emitting electric arcs!</span>",\
|
||||
"<span class='warning'>You feel electric energy building up inside you!</span>")
|
||||
playsound(get_turf(owner), "sparks", 100, 1, -1)
|
||||
addtimer(CALLBACK(src, .proc/zap), rand(30, 100))
|
||||
|
||||
/obj/item/organ/heart/gland/electric/proc/zap()
|
||||
tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN)
|
||||
playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, 1)
|
||||
|
||||
/obj/item/organ/heart/gland/chem
|
||||
true_name = "intrinsic pharma-provider"
|
||||
cooldown_low = 50
|
||||
cooldown_high = 50
|
||||
uses = -1
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1200
|
||||
var/list/possible_reagents = list()
|
||||
|
||||
/obj/item/organ/heart/gland/chem/Initialize()
|
||||
..()
|
||||
for(var/X in subtypesof(/datum/reagent/drug))
|
||||
var/datum/reagent/R = X
|
||||
possible_reagents += initial(R.id)
|
||||
for(var/X in subtypesof(/datum/reagent/medicine))
|
||||
var/datum/reagent/R = X
|
||||
possible_reagents += initial(R.id)
|
||||
for(var/X in typesof(/datum/reagent/toxin))
|
||||
var/datum/reagent/R = X
|
||||
possible_reagents += initial(R.id)
|
||||
|
||||
/obj/item/organ/heart/gland/chem/activate()
|
||||
var/chem_to_add = pick(possible_reagents)
|
||||
owner.reagents.add_reagent(chem_to_add, 2)
|
||||
owner.adjustToxLoss(-2, TRUE, TRUE)
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/plasma
|
||||
true_name = "effluvium sanguine-synonym emitter"
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 1800
|
||||
uses = -1
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 800
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel bloated.</span>")
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "<span class='userdanger'>A massive stomachache overcomes you.</span>"), 150)
|
||||
addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
|
||||
if(!owner)
|
||||
return
|
||||
owner.visible_message("<span class='danger'>[owner] vomits a cloud of plasma!</span>")
|
||||
var/turf/open/T = get_turf(owner)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air("plasma=50;TEMP=[T20C]")
|
||||
owner.vomit()
|
||||
return
|
||||
@@ -0,0 +1,19 @@
|
||||
/obj/item/organ/heart/gland/access
|
||||
true_name = "anagraphic electro-scrambler"
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
uses = 1
|
||||
icon_state = "mindshock"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 900
|
||||
|
||||
/obj/item/organ/heart/gland/access/activate()
|
||||
to_chat(owner, "<span class='notice'>You feel like a VIP for some reason.</span>")
|
||||
RegisterSignal(owner, COMSIG_MOB_ALLOWED, .proc/free_access)
|
||||
|
||||
/obj/item/organ/heart/gland/access/proc/free_access(datum/source, obj/O)
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/access/Remove(mob/living/carbon/M, special = 0)
|
||||
UnregisterSignal(owner, COMSIG_MOB_ALLOWED)
|
||||
..()
|
||||
@@ -0,0 +1,18 @@
|
||||
/obj/item/organ/heart/gland/blood
|
||||
true_name = "pseudonuclear hemo-destabilizer"
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 1800
|
||||
uses = -1
|
||||
icon_state = "egg"
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1500
|
||||
|
||||
/obj/item/organ/heart/gland/blood/activate()
|
||||
if(!ishuman(owner) || !owner.dna.species)
|
||||
return
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/datum/species/species = H.dna.species
|
||||
to_chat(H, "<span class='warning'>You feel your blood heat up for a moment.</span>")
|
||||
species.exotic_blood = get_random_reagent_id()
|
||||
@@ -0,0 +1,20 @@
|
||||
/obj/item/organ/heart/gland/chem
|
||||
true_name = "intrinsic pharma-provider"
|
||||
cooldown_low = 50
|
||||
cooldown_high = 50
|
||||
uses = -1
|
||||
icon_state = "viral"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1200
|
||||
var/list/possible_reagents = list()
|
||||
|
||||
/obj/item/organ/heart/gland/chem/Initialize()
|
||||
. = ..()
|
||||
for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin))
|
||||
possible_reagents += R
|
||||
|
||||
/obj/item/organ/heart/gland/chem/activate()
|
||||
var/chem_to_add = pick(possible_reagents)
|
||||
owner.reagents.add_reagent(chem_to_add, 2)
|
||||
owner.adjustToxLoss(-5, TRUE, TRUE)
|
||||
..()
|
||||
@@ -0,0 +1,15 @@
|
||||
/obj/item/organ/heart/gland/egg
|
||||
true_name = "roe/enzymatic synthesizer"
|
||||
cooldown_low = 300
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
icon_state = "egg"
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/egg/activate()
|
||||
owner.visible_message("<span class='alertalien'>[owner] [pick(EGG_LAYING_MESSAGES)]</span>")
|
||||
var/turf/T = owner.drop_location()
|
||||
new /obj/item/reagent_containers/food/snacks/egg/gland(T)
|
||||
@@ -0,0 +1,26 @@
|
||||
/obj/item/organ/heart/gland/electric
|
||||
true_name = "electron accumulator/discharger"
|
||||
cooldown_low = 800
|
||||
cooldown_high = 1200
|
||||
icon_state = "species"
|
||||
uses = -1
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 900
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
|
||||
REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/electric/activate()
|
||||
owner.visible_message("<span class='danger'>[owner]'s skin starts emitting electric arcs!</span>",\
|
||||
"<span class='warning'>You feel electric energy building up inside you!</span>")
|
||||
playsound(get_turf(owner), "sparks", 100, TRUE, -1)
|
||||
addtimer(CALLBACK(src, .proc/zap), rand(30, 100))
|
||||
|
||||
/obj/item/organ/heart/gland/electric/proc/zap()
|
||||
tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN)
|
||||
playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, TRUE)
|
||||
@@ -0,0 +1,178 @@
|
||||
/obj/item/organ/heart/gland/heal
|
||||
true_name = "organic replicator"
|
||||
cooldown_low = 200
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
human_only = TRUE
|
||||
icon_state = "health"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 3000
|
||||
|
||||
/obj/item/organ/heart/gland/heal/activate()
|
||||
if(!(owner.mob_biotypes & MOB_ORGANIC))
|
||||
return
|
||||
|
||||
for(var/organ in owner.internal_organs)
|
||||
if(istype(organ, /obj/item/organ/cyberimp))
|
||||
reject_implant(organ)
|
||||
return
|
||||
|
||||
var/obj/item/organ/liver/liver = owner.getorganslot(ORGAN_SLOT_LIVER)
|
||||
if((!liver/* && !HAS_TRAIT(owner, TRAIT_NOMETABOLISM)*/) || (liver && ((liver.damage > (liver.maxHealth / 2)) || (istype(liver, /obj/item/organ/liver/cybernetic)))))
|
||||
replace_liver(liver)
|
||||
return
|
||||
|
||||
var/obj/item/organ/lungs/lungs = owner.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && (istype(lungs, /obj/item/organ/lungs/cybernetic))))
|
||||
replace_lungs(lungs)
|
||||
return
|
||||
|
||||
var/obj/item/organ/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(!eyes || (eyes && ((HAS_TRAIT_FROM(owner, TRAIT_NEARSIGHT, EYE_DAMAGE)) || (HAS_TRAIT_FROM(owner, TRAIT_BLIND, EYE_DAMAGE)) || (istype(eyes, /obj/item/organ/eyes/robotic)))))
|
||||
replace_eyes(eyes)
|
||||
return
|
||||
|
||||
var/obj/item/bodypart/limb
|
||||
var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
|
||||
for(var/zone in limb_list)
|
||||
limb = owner.get_bodypart(zone)
|
||||
if(!limb)
|
||||
replace_limb(zone)
|
||||
return
|
||||
if((limb.get_damage() >= (limb.max_damage / 2)) || (limb.status == BODYPART_ROBOTIC))
|
||||
replace_limb(zone, limb)
|
||||
return
|
||||
|
||||
if(owner.getToxLoss() > 40)
|
||||
replace_blood()
|
||||
return
|
||||
var/tox_amount = 0
|
||||
for(var/datum/reagent/toxin/T in owner.reagents.reagent_list)
|
||||
tox_amount += owner.reagents.get_reagent_amount(T.type)
|
||||
if(tox_amount > 10)
|
||||
replace_blood()
|
||||
return
|
||||
if(owner.blood_volume < BLOOD_VOLUME_OKAY)
|
||||
owner.blood_volume = BLOOD_VOLUME_NORMAL
|
||||
to_chat(owner, "<span class='warning'>You feel your blood pulsing within you.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/bodypart/chest/chest = owner.get_bodypart(BODY_ZONE_CHEST)
|
||||
if((chest.get_damage() >= (chest.max_damage / 4)) || (chest.status == BODYPART_ROBOTIC))
|
||||
replace_chest(chest)
|
||||
return
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/reject_implant(obj/item/organ/cyberimp/implant)
|
||||
owner.visible_message("<span class='warning'>[owner] vomits up his [implant.name]!</span>", "<span class='userdanger'>You suddenly vomit up your [implant.name]!</span>")
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
implant.Remove(owner)
|
||||
implant.forceMove(owner.drop_location())
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_liver(obj/item/organ/liver/liver)
|
||||
if(liver)
|
||||
owner.visible_message("<span class='warning'>[owner] vomits up his [liver.name]!</span>", "<span class='userdanger'>You suddenly vomit up your [liver.name]!</span>")
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
liver.Remove(owner)
|
||||
liver.forceMove(owner.drop_location())
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You feel a weird rumble in your bowels...</span>")
|
||||
|
||||
var/liver_type = /obj/item/organ/liver
|
||||
if(owner?.dna?.species?.mutantliver)
|
||||
liver_type = owner.dna.species.mutantliver
|
||||
var/obj/item/organ/liver/new_liver = new liver_type()
|
||||
new_liver.Insert(owner)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_lungs(obj/item/organ/lungs/lungs)
|
||||
if(lungs)
|
||||
owner.visible_message("<span class='warning'>[owner] vomits up his [lungs.name]!</span>", "<span class='userdanger'>You suddenly vomit up your [lungs.name]!</span>")
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
lungs.Remove(owner)
|
||||
lungs.forceMove(owner.drop_location())
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You feel a weird rumble inside your chest...</span>")
|
||||
|
||||
var/lung_type = /obj/item/organ/lungs
|
||||
if(owner.dna.species && owner.dna.species.mutantlungs)
|
||||
lung_type = owner.dna.species.mutantlungs
|
||||
var/obj/item/organ/lungs/new_lungs = new lung_type()
|
||||
new_lungs.Insert(owner)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_eyes(obj/item/organ/eyes/eyes)
|
||||
if(eyes)
|
||||
owner.visible_message("<span class='warning'>[owner]'s [eyes.name] fall out of their sockets!</span>", "<span class='userdanger'>Your [eyes.name] fall out of their sockets!</span>")
|
||||
playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
|
||||
eyes.Remove(owner)
|
||||
eyes.forceMove(owner.drop_location())
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You feel a weird rumble behind your eye sockets...</span>")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/finish_replace_eyes), rand(100, 200))
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/finish_replace_eyes()
|
||||
var/eye_type = /obj/item/organ/eyes
|
||||
if(owner.dna.species && owner.dna.species.mutanteyes)
|
||||
eye_type = owner.dna.species.mutanteyes
|
||||
var/obj/item/organ/eyes/new_eyes = new eye_type()
|
||||
new_eyes.Insert(owner)
|
||||
owner.visible_message("<span class='warning'>A pair of new eyes suddenly inflates into [owner]'s eye sockets!</span>", "<span class='userdanger'>A pair of new eyes suddenly inflates into your eye sockets!</span>")
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb)
|
||||
if(limb)
|
||||
owner.visible_message("<span class='warning'>[owner]'s [limb.name] suddenly detaches from [owner.p_their()] body!</span>", "<span class='userdanger'>Your [limb.name] suddenly detaches from your body!</span>")
|
||||
playsound(owner, "desceration", 50, TRUE, -1)
|
||||
limb.drop_limb()
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You feel a weird tingle in your [parse_zone(body_zone)]... even if you don't have one.</span>")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/finish_replace_limb, body_zone), rand(150, 300))
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/finish_replace_limb(body_zone)
|
||||
owner.visible_message("<span class='warning'>With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body!</span>",
|
||||
"<span class='userdanger'>With a loud snap, your [parse_zone(body_zone)] rapidly grows back from your body!</span>",
|
||||
"<span class='warning'>Your hear a loud snap.</span>")
|
||||
playsound(owner, 'sound/magic/demon_consume.ogg', 50, TRUE)
|
||||
owner.regenerate_limb(body_zone)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_blood()
|
||||
owner.visible_message("<span class='warning'>[owner] starts vomiting huge amounts of blood!</span>", "<span class='userdanger'>You suddenly start vomiting huge amounts of blood!</span>")
|
||||
keep_replacing_blood()
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/keep_replacing_blood()
|
||||
var/keep_going = FALSE
|
||||
owner.vomit(0, TRUE, FALSE, 3, FALSE, FALSE, FALSE, TRUE)
|
||||
owner.Stun(15)
|
||||
owner.adjustToxLoss(-15, TRUE, TRUE)
|
||||
|
||||
owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)
|
||||
if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
keep_going = TRUE
|
||||
|
||||
if(owner.getToxLoss())
|
||||
keep_going = TRUE
|
||||
for(var/datum/reagent/toxin/R in owner.reagents.reagent_list)
|
||||
owner.reagents.remove_reagent(R.type, 4)
|
||||
if(owner.reagents.has_reagent(R.type))
|
||||
keep_going = TRUE
|
||||
if(keep_going)
|
||||
addtimer(CALLBACK(src, .proc/keep_replacing_blood), 30)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest)
|
||||
if(chest.status == BODYPART_ROBOTIC)
|
||||
owner.visible_message("<span class='warning'>[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh!</span>", "<span class='userdanger'>Your [chest.name] rapidly expels its mechanical components, replacing them with flesh!</span>")
|
||||
playsound(owner, 'sound/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE)
|
||||
var/list/dirs = GLOB.alldirs.Copy()
|
||||
for(var/i in 1 to 3)
|
||||
var/obj/effect/decal/cleanable/robot_debris/debris = new(get_turf(owner))
|
||||
debris.streak(dirs)
|
||||
else
|
||||
owner.visible_message("<span class='warning'>[owner]'s [chest.name] sheds off its damaged flesh, rapidly replacing it!</span>", "<span class='warning'>Your [chest.name] sheds off its damaged flesh, rapidly replacing it!</span>")
|
||||
playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
|
||||
var/list/dirs = GLOB.alldirs.Copy()
|
||||
for(var/i in 1 to 3)
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gibs = new(get_turf(owner))
|
||||
gibs.streak(dirs)
|
||||
|
||||
var/obj/item/bodypart/chest/new_chest = new(null)
|
||||
new_chest.replace_limb(owner, TRUE)
|
||||
qdel(chest)
|
||||
@@ -0,0 +1,64 @@
|
||||
/obj/item/organ/heart/gland/mindshock
|
||||
true_name = "neural crosstalk uninhibitor"
|
||||
cooldown_low = 400
|
||||
cooldown_high = 700
|
||||
uses = -1
|
||||
icon_state = "mindshock"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 6000
|
||||
var/list/mob/living/carbon/human/broadcasted_mobs = list()
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/activate()
|
||||
to_chat(owner, "<span class='notice'>You get a headache.</span>")
|
||||
|
||||
var/turf/T = get_turf(owner)
|
||||
for(var/mob/living/carbon/H in orange(4,T))
|
||||
if(H == owner)
|
||||
continue
|
||||
switch(pick(1,3))
|
||||
if(1)
|
||||
to_chat(H, "<span class='userdanger'>You hear a loud buzz in your head, silencing your thoughts!</span>")
|
||||
H.Stun(50)
|
||||
if(2)
|
||||
to_chat(H, "<span class='warning'>You hear an annoying buzz in your head.</span>")
|
||||
H.confused += 15
|
||||
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
|
||||
if(3)
|
||||
H.hallucination += 60
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/mind_control(command, mob/living/user)
|
||||
if(!ownerCheck() || !mind_control_uses || active_mind_control)
|
||||
return FALSE
|
||||
mind_control_uses--
|
||||
for(var/mob/M in oview(7, owner))
|
||||
if(!ishuman(M))
|
||||
continue
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.stat)
|
||||
continue
|
||||
|
||||
broadcasted_mobs += H
|
||||
to_chat(H, "<span class='userdanger'>You suddenly feel an irresistible compulsion to follow an order...</span>")
|
||||
to_chat(H, "<span class='mind_control'>[command]</span>")
|
||||
|
||||
message_admins("[key_name(user)] broadcasted an abductor mind control message from [key_name(owner)] to [key_name(H)]: [command]")
|
||||
|
||||
var/obj/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /obj/screen/alert/mind_control)
|
||||
mind_alert.command = command
|
||||
|
||||
if(LAZYLEN(broadcasted_mobs))
|
||||
active_mind_control = TRUE
|
||||
addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
|
||||
|
||||
update_gland_hud()
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/clear_mind_control()
|
||||
if(!active_mind_control || !LAZYLEN(broadcasted_mobs))
|
||||
return FALSE
|
||||
for(var/M in broadcasted_mobs)
|
||||
var/mob/living/carbon/human/H = M
|
||||
to_chat(H, "<span class='userdanger'>You feel the compulsion fade, and you <i>completely forget</i> about your previous orders.</span>")
|
||||
H.clear_alert("mind_control")
|
||||
active_mind_control = FALSE
|
||||
return TRUE
|
||||
@@ -0,0 +1,22 @@
|
||||
/obj/item/organ/heart/gland/plasma
|
||||
true_name = "effluvium sanguine-synonym emitter"
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 1800
|
||||
icon_state = "slime"
|
||||
uses = -1
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 800
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel bloated.</span>")
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "<span class='userdanger'>A massive stomachache overcomes you.</span>"), 150)
|
||||
addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
|
||||
if(!owner)
|
||||
return
|
||||
owner.visible_message("<span class='danger'>[owner] vomits a cloud of plasma!</span>")
|
||||
var/turf/open/T = get_turf(owner)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air("plasma=50;TEMP=[T20C]")
|
||||
owner.vomit()
|
||||
@@ -0,0 +1,47 @@
|
||||
/obj/item/organ/heart/gland/quantum
|
||||
true_name = "quantic de-observation matrix"
|
||||
cooldown_low = 150
|
||||
cooldown_high = 150
|
||||
uses = -1
|
||||
icon_state = "emp"
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 1200
|
||||
var/mob/living/carbon/entangled_mob
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/activate()
|
||||
if(entangled_mob)
|
||||
return
|
||||
for(var/mob/M in oview(owner, 7))
|
||||
if(!iscarbon(M))
|
||||
continue
|
||||
entangled_mob = M
|
||||
addtimer(CALLBACK(src, .proc/quantum_swap), rand(600, 2400))
|
||||
return
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/proc/quantum_swap()
|
||||
if(QDELETED(entangled_mob))
|
||||
entangled_mob = null
|
||||
return
|
||||
var/turf/T = get_turf(owner)
|
||||
do_teleport(owner, get_turf(entangled_mob),null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
do_teleport(entangled_mob, T,null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
to_chat(owner, "<span class='warning'>You suddenly find yourself somewhere else!</span>")
|
||||
to_chat(entangled_mob, "<span class='warning'>You suddenly find yourself somewhere else!</span>")
|
||||
if(!active_mind_control) //Do not reset entangled mob while mind control is active
|
||||
entangled_mob = null
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/mind_control(command, mob/living/user)
|
||||
if(..())
|
||||
if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD))
|
||||
to_chat(entangled_mob, "<span class='userdanger'>You suddenly feel an irresistible compulsion to follow an order...</span>")
|
||||
to_chat(entangled_mob, "<span class='mind_control'>[command]</span>")
|
||||
var/obj/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /obj/screen/alert/mind_control)
|
||||
mind_alert.command = command
|
||||
message_admins("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]")
|
||||
update_gland_hud()
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/clear_mind_control()
|
||||
if(active_mind_control)
|
||||
to_chat(entangled_mob, "<span class='userdanger'>You feel the compulsion fade, and you completely forget about your previous orders.</span>")
|
||||
entangled_mob.clear_alert("mind_control")
|
||||
..()
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/item/organ/heart/gland/slime
|
||||
true_name = "gastric animation galvanizer"
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
uses = -1
|
||||
icon_state = "slime"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 2400
|
||||
|
||||
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
owner.faction |= "slime"
|
||||
owner.grant_language(/datum/language/slime)
|
||||
|
||||
/obj/item/organ/heart/gland/slime/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel nauseated!</span>")
|
||||
owner.vomit(20)
|
||||
|
||||
var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey")
|
||||
Slime.Friends = list(owner)
|
||||
Slime.Leader = owner
|
||||
@@ -0,0 +1,14 @@
|
||||
/obj/item/organ/heart/gland/spiderman
|
||||
true_name = "araneae cloister accelerator"
|
||||
cooldown_low = 450
|
||||
cooldown_high = 900
|
||||
uses = -1
|
||||
icon_state = "spider"
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 2400
|
||||
|
||||
/obj/item/organ/heart/gland/spiderman/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel something crawling in your skin.</span>")
|
||||
owner.faction |= "spiders"
|
||||
var/obj/structure/spider/spiderling/S = new(owner.drop_location())
|
||||
S.directive = "Protect your nest inside [owner.real_name]."
|
||||
@@ -0,0 +1,15 @@
|
||||
/obj/item/organ/heart/gland/transform
|
||||
true_name = "anthropmorphic transmorphosizer"
|
||||
cooldown_low = 900
|
||||
cooldown_high = 1800
|
||||
uses = -1
|
||||
human_only = TRUE
|
||||
icon_state = "species"
|
||||
mind_control_uses = 7
|
||||
mind_control_duration = 300
|
||||
|
||||
/obj/item/organ/heart/gland/transform/activate()
|
||||
to_chat(owner, "<span class='notice'>You feel unlike yourself.</span>")
|
||||
randomize_human(owner)
|
||||
var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
|
||||
owner.set_species(species)
|
||||
@@ -0,0 +1,18 @@
|
||||
/obj/item/organ/heart/gland/trauma
|
||||
true_name = "white matter randomiser"
|
||||
cooldown_low = 800
|
||||
cooldown_high = 1200
|
||||
uses = 5
|
||||
icon_state = "emp"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/trauma/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel a spike of pain in your head.</span>")
|
||||
if(prob(33))
|
||||
owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
|
||||
else
|
||||
if(prob(20))
|
||||
owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
|
||||
else
|
||||
owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
|
||||
@@ -0,0 +1,12 @@
|
||||
/obj/item/organ/heart/gland/ventcrawling
|
||||
true_name = "pliant cartilage enabler"
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
uses = 1
|
||||
icon_state = "vent"
|
||||
mind_control_uses = 4
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/ventcrawling/activate()
|
||||
to_chat(owner, "<span class='notice'>You feel very stretchy.</span>")
|
||||
owner.ventcrawler = VENTCRAWLER_ALWAYS
|
||||
@@ -0,0 +1,34 @@
|
||||
/obj/item/organ/heart/gland/viral
|
||||
true_name = "contamination incubator"
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
uses = 1
|
||||
icon_state = "viral"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/viral/activate()
|
||||
to_chat(owner, "<span class='warning'>You feel sick.</span>")
|
||||
var/datum/disease/advance/A = random_virus(pick(2,6),6)
|
||||
A.carrier = TRUE
|
||||
owner.ForceContractDisease(A, FALSE, TRUE)
|
||||
|
||||
/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
|
||||
if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
|
||||
max_symptoms = VIRUS_SYMPTOM_LIMIT
|
||||
var/datum/disease/advance/A = new /datum/disease/advance()
|
||||
var/list/datum/symptom/possible_symptoms = list()
|
||||
for(var/symptom in subtypesof(/datum/symptom))
|
||||
var/datum/symptom/S = symptom
|
||||
if(initial(S.level) > max_level)
|
||||
continue
|
||||
if(initial(S.level) <= 0) //unobtainable symptoms
|
||||
continue
|
||||
possible_symptoms += S
|
||||
for(var/i in 1 to max_symptoms)
|
||||
var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
|
||||
if(chosen_symptom)
|
||||
var/datum/symptom/S = new chosen_symptom
|
||||
A.symptoms += S
|
||||
A.Refresh() //just in case someone already made and named the same disease
|
||||
return A
|
||||
@@ -43,12 +43,15 @@
|
||||
dat += "Collected Samples : [points] <br>"
|
||||
dat += "Gear Credits: [credits] <br>"
|
||||
dat += "<b>Transfer data in exchange for supplies:</b><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=baton'>Advanced Baton</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=helmet'>Agent Helmet</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=vest'>Agent Vest</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=silencer'>Radio Silencer</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=tool'>Science Tool</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=mind_device'>Mental Interface Device</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=baton'>Advanced Baton (2 Credits)</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=mind_device'>Mental Interface Device (2 Credits)</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=chem_dispenser'>Reagent Synthesizer (2 Credits)</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=shrink_ray'>Shrink Ray Blaster (2 Credits)</a><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=helmet'>Agent Helmet (1 Credit)</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=vest'>Agent Vest (1 Credit)</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=silencer'>Radio Silencer (1 Credit)</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=tool'>Science Tool (1 Credit)</A><br>"
|
||||
dat += "<a href='?src=[REF(src)];dispense=tongue'>Superlingual Matrix (1 Credit)</a><br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO EXPERIMENT MACHINE DETECTED</span> <br>"
|
||||
|
||||
@@ -101,7 +104,7 @@
|
||||
else if(href_list["dispense"])
|
||||
switch(href_list["dispense"])
|
||||
if("baton")
|
||||
Dispense(/obj/item/abductor_baton,cost=2)
|
||||
Dispense(/obj/item/abductor/baton,cost=2)
|
||||
if("helmet")
|
||||
Dispense(/obj/item/clothing/head/helmet/abductor)
|
||||
if("silencer")
|
||||
@@ -112,6 +115,12 @@
|
||||
Dispense(/obj/item/clothing/suit/armor/abductor/vest)
|
||||
if("mind_device")
|
||||
Dispense(/obj/item/abductor/mind_device,cost=2)
|
||||
if("chem_dispenser")
|
||||
Dispense(/obj/item/abductor_machine_beacon/chem_dispenser,cost=2)
|
||||
if("tongue")
|
||||
Dispense(/obj/item/organ/tongue/abductor)
|
||||
if("shrink_ray")
|
||||
Dispense(/obj/item/gun/energy/shrink_ray,cost=2)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
|
||||
@@ -136,9 +145,9 @@
|
||||
|
||||
var/entry_name
|
||||
if(remote)
|
||||
entry_name = show_radial_menu(usr, camera.eyeobj, disguises2)
|
||||
entry_name = show_radial_menu(usr, camera.eyeobj, disguises2, tooltips = TRUE)
|
||||
else
|
||||
entry_name = show_radial_menu(usr, src, disguises2)
|
||||
entry_name = show_radial_menu(usr, src, disguises2, require_near = TRUE, tooltips = TRUE)
|
||||
|
||||
var/datum/icon_snapshot/chosen = disguises[entry_name]
|
||||
if(chosen && vest && (remote || in_range(usr,src)))
|
||||
@@ -236,4 +245,4 @@
|
||||
new item(drop_location)
|
||||
|
||||
else
|
||||
say("Insufficent data!")
|
||||
say("Insufficent data!")
|
||||
@@ -77,13 +77,16 @@
|
||||
for(var/mob/living/M in viewers(5, src))
|
||||
if(!is_servant_of_ratvar(M) && M != L)
|
||||
M.flash_act()
|
||||
if(iscultist(L))
|
||||
if(iscultist(L)) //No longer stuns cultists, instead sets them on fire and burns them
|
||||
to_chat(L, "<span class='heavy_brass'>\"Watch your step, wretch.\"</span>")
|
||||
L.adjustBruteLoss(10)
|
||||
L.Knockdown(80, FALSE)
|
||||
L.adjustFireLoss(10)
|
||||
L.Knockdown(20, FALSE)
|
||||
L.adjust_fire_stacks(5) //Burn!
|
||||
L.IgniteMob()
|
||||
else
|
||||
L.Stun(40)
|
||||
L.visible_message("<span class='warning'>[src] appears around [L] in a burst of light!</span>", \
|
||||
"<span class='userdanger'>[target_flashed ? "An unseen force":"The glowing sigil around you"] holds you in place!</span>")
|
||||
L.Stun(40)
|
||||
"<span class='userdanger'>[target_flashed ? "An unseen force":"The glowing sigil around you"] [iscultist(L) ? "painfully bursts into flames!" : "holds you in place!"]</span>")
|
||||
L.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
|
||||
new /obj/effect/temp_visual/ratvar/sigil/transgression(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
@@ -193,15 +193,26 @@
|
||||
L.visible_message("<span class='warning'>[L]'s eyes flare with dim light!</span>")
|
||||
playsound(L, 'sound/weapons/sear.ogg', 50, TRUE)
|
||||
else
|
||||
L.visible_message("<span class='warning'>[L]'s eyes blaze with brilliant light!</span>", \
|
||||
"<span class='userdanger'>Your vision suddenly screams with white-hot light!</span>")
|
||||
L.Knockdown(15, TRUE, FALSE, 15)
|
||||
L.apply_status_effect(STATUS_EFFECT_KINDLE)
|
||||
L.flash_act(1, 1)
|
||||
if(issilicon(target))
|
||||
var/mob/living/silicon/S = L
|
||||
S.emp_act(EMP_HEAVY)
|
||||
if(iscultist(L))
|
||||
if(!iscultist(L))
|
||||
L.visible_message("<span class='warning'>[L]'s eyes blaze with brilliant light!</span>", \
|
||||
"<span class='userdanger'>Your vision suddenly screams with white-hot light!</span>")
|
||||
L.Knockdown(15, TRUE, FALSE, 15)
|
||||
L.apply_status_effect(STATUS_EFFECT_KINDLE)
|
||||
L.flash_act(1, 1)
|
||||
if(issilicon(target))
|
||||
var/mob/living/silicon/S = L
|
||||
S.emp_act(EMP_HEAVY)
|
||||
else //for Nar'sian weaklings
|
||||
to_chat(L, "<span class='heavy_brass'>\"How does it feel to see the light, dog?\"</span>")
|
||||
L.visible_message("<span class='warning'>[L]'s eyes flare with burning light!</span>", \
|
||||
"<span class='userdanger'>Your vision suddenly screams with a flash of burning hot light!</span>") //Debuffs Narsian cultists hard + deals some burn instead of just hardstunning them; Only the confusion part can stack
|
||||
L.flash_act(1,1)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = L
|
||||
C.stuttering = max(8, C.stuttering)
|
||||
C.drowsyness = max(8, C.drowsyness)
|
||||
C.confused += CLAMP(16 - C.confused, 0, 8)
|
||||
C.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
|
||||
L.adjustFireLoss(15)
|
||||
..()
|
||||
|
||||
|
||||
@@ -56,8 +56,14 @@
|
||||
L.visible_message("<span class='warning'>[src] bounces off of [L], as if repelled by an unseen force!</span>")
|
||||
else if(!..())
|
||||
if(!L.anti_magic_check())
|
||||
if(issilicon(L) || iscultist(L))
|
||||
if(issilicon(L))
|
||||
L.Knockdown(100)
|
||||
else if(iscultist(L))
|
||||
L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage
|
||||
to_chat(L, "<span class ='userdanger'>[src] crashes into you with burning force, sending you reeling!</span>")
|
||||
L.adjust_fire_stacks(2)
|
||||
L.Knockdown(1)
|
||||
L.IgniteMob()
|
||||
else
|
||||
L.Knockdown(40)
|
||||
GLOB.clockwork_vitality += L.adjustFireLoss(bonus_burn * 3) //normally a total of 40 damage, 70 with ratvar
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#define MARAUDER_SLOWDOWN_PERCENTAGE 0.40 //Below this percentage of health, marauders will become slower
|
||||
#define MARAUDER_SHIELD_REGEN_TIME 200 //In deciseconds, how long it takes for shields to regenerate after breaking
|
||||
#define MARAUDER_SPACE_FULL_DAMAGE 6 //amount of damage per life tick while inside space
|
||||
#define MARAUDER_SPACE_NEAR_DAMAGE 4 //amount of damage taking per Life() tick from being next to space.
|
||||
|
||||
//Clockwork marauder: A well-rounded frontline construct. Only one can exist for every two human servants.
|
||||
/mob/living/simple_animal/hostile/clockwork/marauder
|
||||
@@ -20,12 +22,14 @@
|
||||
movement_type = FLYING
|
||||
a_intent = INTENT_HARM
|
||||
loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor)
|
||||
light_range = 2
|
||||
light_power = 1.1
|
||||
light_range = 3
|
||||
light_power = 1.7
|
||||
playstyle_string = "<span class='big bold'><span class='neovgre'>You are a clockwork marauder,</span></span><b> a well-rounded frontline construct of Ratvar. Although you have no \
|
||||
unique abilities, you're a fearsome fighter in one-on-one combat, and your shield protects from projectiles!<br><br>Obey the Servants and do as they \
|
||||
tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm.</b>"
|
||||
tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm.</b> \
|
||||
<span class='danger big'>Be warned, however, that you will rapidly decay near the void of space.</span>"
|
||||
empower_string = "<span class='neovgre'>The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is more durable.</span>"
|
||||
var/default_speed = 0
|
||||
var/max_shield_health = 3
|
||||
var/shield_health = 3 //Amount of projectiles that can be deflected within
|
||||
var/shield_health_regen = 0 //When world.time equals this, shield health will regenerate
|
||||
@@ -36,10 +40,21 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork/marauder/Life()
|
||||
..()
|
||||
var/turf/T = get_turf(src)
|
||||
var/turf/open/space/S = isspaceturf(T)? T : null
|
||||
var/less_space_damage
|
||||
if(!istype(S))
|
||||
var/turf/open/space/nearS = locate() in oview(1)
|
||||
if(nearS)
|
||||
S = nearS
|
||||
less_space_damage = TRUE
|
||||
if(S)
|
||||
to_chat(src, "<span class='userdanger'>The void of space drains Ratvar's Light from you! You feel yourself rapidly decaying. It would be wise to get back inside!</span>")
|
||||
adjustBruteLoss(less_space_damage? MARAUDER_SPACE_NEAR_DAMAGE : MARAUDER_SPACE_FULL_DAMAGE)
|
||||
if(!GLOB.ratvar_awakens && health / maxHealth <= MARAUDER_SLOWDOWN_PERCENTAGE)
|
||||
speed = initial(speed) + 1 //Yes, this slows them down
|
||||
speed = default_speed + 1 //Yes, this slows them down
|
||||
else
|
||||
speed = initial(speed)
|
||||
speed = default_speed
|
||||
if(shield_health < max_shield_health && world.time >= shield_health_regen)
|
||||
shield_health_regen = world.time + MARAUDER_SHIELD_REGEN_TIME
|
||||
to_chat(src, "<span class='neovgre'>Your shield has recovered, <b>[shield_health]</b> blocks remaining!</span>")
|
||||
|
||||
@@ -87,9 +87,22 @@
|
||||
object_path = /obj/item/clockwork/construct_chassis/clockwork_marauder
|
||||
construct_type = /mob/living/simple_animal/hostile/clockwork/marauder
|
||||
combat_construct = TRUE
|
||||
var/static/recent_marauders = 0
|
||||
var/static/time_since_last_marauder = 0
|
||||
var/static/scaled_recital_time = 0
|
||||
var/static/last_marauder = 0
|
||||
|
||||
/datum/clockwork_scripture/create_object/construct/clockwork_marauder/post_recital()
|
||||
last_marauder = world.time
|
||||
return ..()
|
||||
|
||||
/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital()
|
||||
if(!is_reebe(invoker.z))
|
||||
if(!CONFIG_GET(flag/allow_clockwork_marauder_on_station))
|
||||
to_chat(invoker, "<span class='brass'>This particular station is too far from the influence of the Hierophant Network. You can not summon a marauder here.</span>")
|
||||
return FALSE
|
||||
if(world.time < (last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)))
|
||||
to_chat(invoker, "<span class='brass'>The hierophant network is still strained from the last summoning of a marauder on a plane without the strong energy connection of Reebe to support it. \
|
||||
You must wait another [DisplayTimeText((last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)) - world.time, TRUE)]!</span>")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/clockwork_scripture/create_object/construct/clockwork_marauder/update_construct_limit()
|
||||
var/human_servants = 0
|
||||
@@ -98,27 +111,7 @@
|
||||
var/mob/living/L = M.current
|
||||
if(ishuman(L) && L.stat != DEAD)
|
||||
human_servants++
|
||||
construct_limit = round(CLAMP((human_servants / 4), 1, 3)) - recent_marauders //1 per 4 human servants, maximum of 3, reduced by recent marauder creation
|
||||
if(recent_marauders)
|
||||
to_chat(invoker, "<span class='warning'>The Hierophant Network is depleted by a summoning in the last [DisplayTimeText(MARAUDER_SCRIPTURE_SCALING_THRESHOLD, TRUE)] - limiting the number of available marauders by [recent_marauders]!</span>")
|
||||
|
||||
/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital()
|
||||
channel_time = initial(channel_time)
|
||||
if(recent_marauders)
|
||||
scaled_recital_time = min(recent_marauders * MARAUDER_SCRIPTURE_SCALING_TIME, MARAUDER_SCRIPTURE_SCALING_MAX)
|
||||
to_chat(invoker, "<span class='warning'>The Hierophant Network is under strain from repeated summoning, making this scripture [DisplayTimeText(scaled_recital_time)] slower!</span>")
|
||||
channel_time += scaled_recital_time
|
||||
return TRUE
|
||||
|
||||
/datum/clockwork_scripture/create_object/construct/clockwork_marauder/scripture_effects()
|
||||
. = ..()
|
||||
recent_marauders++
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/marauder_reset),MARAUDER_SCRIPTURE_SCALING_THRESHOLD)
|
||||
|
||||
/proc/marauder_reset()
|
||||
var/datum/clockwork_scripture/create_object/construct/clockwork_marauder/CM = new()
|
||||
CM.recent_marauders--
|
||||
qdel(CM)
|
||||
construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3
|
||||
|
||||
//Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage.
|
||||
/datum/clockwork_scripture/create_object/summon_arbiter
|
||||
|
||||
@@ -438,21 +438,27 @@
|
||||
target.visible_message("<span class='warning'>[L] starts to glow in a halo of light!</span>", \
|
||||
"<span class='userdanger'>A feeling of warmth washes over you, rays of holy light surround your body and protect you from the flash of light!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='cultitalic'>In an brilliant flash of red, [L] falls to the ground!</span>")
|
||||
L.Knockdown(160)
|
||||
L.adjustStaminaLoss(140) //Ensures hard stamcrit
|
||||
L.flash_act(1,1)
|
||||
if(issilicon(target))
|
||||
var/mob/living/silicon/S = L
|
||||
S.emp_act(EMP_HEAVY)
|
||||
else if(iscarbon(target))
|
||||
var/mob/living/carbon/C = L
|
||||
C.silent += 6
|
||||
C.stuttering += 15
|
||||
C.cultslurring += 15
|
||||
C.Jitter(15)
|
||||
if(is_servant_of_ratvar(L))
|
||||
if(!iscultist(L))
|
||||
L.Knockdown(160)
|
||||
L.adjustStaminaLoss(140) //Ensures hard stamcrit
|
||||
L.flash_act(1,1)
|
||||
if(issilicon(target))
|
||||
var/mob/living/silicon/S = L
|
||||
S.emp_act(EMP_HEAVY)
|
||||
else if(iscarbon(target))
|
||||
var/mob/living/carbon/C = L
|
||||
C.silent += CLAMP(12 - C.silent, 0, 6)
|
||||
C.stuttering += CLAMP(30 - C.stuttering, 0, 15)
|
||||
C.cultslurring += CLAMP(30 - C.cultslurring, 0, 15)
|
||||
C.Jitter(15)
|
||||
else // cultstun no longer hardstuns + damages hostile cultists, instead debuffs them hard + deals some damage; debuffs for a bit longer since they don't add the clockie belligerent debuff
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = L
|
||||
C.stuttering = max(10, C.stuttering)
|
||||
C.drowsyness = max(10, C.drowsyness)
|
||||
C.confused += CLAMP(20 - C.confused, 0, 10)
|
||||
L.adjustBruteLoss(15)
|
||||
to_chat(user, "<span class='cultitalic'>In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"]</span>")
|
||||
uses--
|
||||
..()
|
||||
|
||||
|
||||
@@ -703,7 +703,10 @@
|
||||
else if(!..())
|
||||
if(!L.anti_magic_check())
|
||||
if(is_servant_of_ratvar(L))
|
||||
L.Knockdown(100)
|
||||
to_chat(L, "<span class='cultlarge'>\"Kneel for me, scum\"</span>")
|
||||
L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before
|
||||
L.Knockdown(15)
|
||||
L.adjustBruteLoss(10)
|
||||
else
|
||||
L.Knockdown(50)
|
||||
break_spear(T)
|
||||
|
||||
@@ -34,6 +34,12 @@
|
||||
. = ..()
|
||||
name_source = GLOB.commando_names
|
||||
|
||||
/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override)
|
||||
ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT)
|
||||
|
||||
/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override)
|
||||
REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT)
|
||||
|
||||
/datum/antagonist/ert/security // kinda handled by the base template but here for completion
|
||||
|
||||
/datum/antagonist/ert/security/amber
|
||||
|
||||
@@ -611,10 +611,7 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
if(!fake)
|
||||
return
|
||||
|
||||
var/ghost = isobserver(user)
|
||||
var/captain = user.mind && user.mind.assigned_role == "Captain"
|
||||
var/nukie = user.mind && user.mind.has_antag_datum(/datum/antagonist/nukeop)
|
||||
if(ghost || captain || nukie)
|
||||
if(isobserver(user) || HAS_TRAIT(user, TRAIT_DISK_VERIFIER) || (user.mind && HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER)))
|
||||
. += "<span class='warning'>The serial numbers on [src] are incorrect.</span>"
|
||||
|
||||
/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params)
|
||||
@@ -653,3 +650,7 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
|
||||
/obj/item/disk/nuclear/fake
|
||||
fake = TRUE
|
||||
|
||||
/obj/item/disk/nuclear/fake/obvious
|
||||
name = "cheap plastic imitation of the nuclear authentication disk"
|
||||
desc = "How anyone could mistake this for the real thing is beyond you."
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
/datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/M = mob_override || owner.current
|
||||
update_synd_icons_added(M)
|
||||
ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT)
|
||||
|
||||
/datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/M = mob_override || owner.current
|
||||
update_synd_icons_removed(M)
|
||||
REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT)
|
||||
|
||||
/datum/antagonist/nukeop/proc/equip_op()
|
||||
if(!ishuman(owner.current))
|
||||
@@ -42,7 +44,6 @@
|
||||
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0)
|
||||
to_chat(owner, "<span class='notice'>You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!</span>")
|
||||
owner.announce_objectives()
|
||||
return
|
||||
|
||||
/datum/antagonist/nukeop/on_gain()
|
||||
give_alias()
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/round_event_control/spawn_swarmer
|
||||
name = "Spawn Swarmer Shell"
|
||||
typepath = /datum/round_event/spawn_swarmer
|
||||
weight = 7
|
||||
max_occurrences = 1 //Only once okay fam
|
||||
weight = 0
|
||||
max_occurrences = 0
|
||||
earliest_start = 30 MINUTES
|
||||
min_players = 15
|
||||
|
||||
|
||||
@@ -505,6 +505,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
|
||||
if(!is_station_level(F.z))
|
||||
continue
|
||||
F.obj_flags |= EMAGGED
|
||||
F.update_icon()
|
||||
to_chat(owner, "<span class='notice'>All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.</span>")
|
||||
owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0)
|
||||
|
||||
|
||||
@@ -177,6 +177,10 @@
|
||||
owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
|
||||
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null))
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
|
||||
if(APPRENTICE_MARTIAL)
|
||||
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist(null))
|
||||
H.put_in_hands(new /obj/item/book/granter/martial/plasma_fist(H))
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned mystical martial abilities. You are also able to use the Nuclear Fist at will.")
|
||||
|
||||
/datum/antagonist/wizard/apprentice/create_objectives()
|
||||
var/datum/objective/protect/new_objective = new /datum/objective/protect
|
||||
|
||||
@@ -154,6 +154,11 @@
|
||||
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
|
||||
var/target_temperature
|
||||
var/target_heat_capacity
|
||||
// first calculate heat from radiation. there's an implied "* 1 tick" here.
|
||||
// 0.05 magic multiplicand is, first, 0.1 deciseconds; second, half of the radiation's going right back into the gas.
|
||||
var/share_constant = STEFANBOLTZMANN*(share_volume**(2/3))*0.05
|
||||
// Minimizing temp to 4 billion is mostly to prevent -infinity temperatures.
|
||||
var/heat = share_constant*(min(air.temperature,4000000000)**4)
|
||||
|
||||
if(isopenturf(target))
|
||||
|
||||
@@ -165,8 +170,8 @@
|
||||
|
||||
if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - target_temperature
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
heat -= share_constant*(min(target_temperature,4000000000)**4)
|
||||
heat += thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*target_heat_capacity/(partial_heat_capacity+target_heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
@@ -183,7 +188,8 @@
|
||||
var/sharer_temperature_delta = 0
|
||||
|
||||
if((sharer_heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
heat -= share_constant*(min(target_temperature,4000000000)**4)
|
||||
heat += thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity))
|
||||
|
||||
self_temperature_delta = -heat/total_heat_capacity
|
||||
@@ -199,10 +205,12 @@
|
||||
if((target.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - target.temperature
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
heat -= share_constant*(min(target.temperature,4000000000)**4)
|
||||
heat += thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
air.temperature = CLAMP(air.temperature,TCMB,INFINITY) // i have no idea why TCMB needs to be the min but i ain't changing it
|
||||
update = TRUE
|
||||
|
||||
/datum/pipeline/proc/return_air()
|
||||
|
||||
@@ -26,9 +26,7 @@
|
||||
|
||||
var/turf/T = loc
|
||||
if(istype(T))
|
||||
if(islava(T))
|
||||
environment_temperature = 5000
|
||||
else if(T.blocks_air)
|
||||
if(T.blocks_air)
|
||||
environment_temperature = T.temperature
|
||||
else
|
||||
var/turf/open/OT = T
|
||||
|
||||
@@ -176,6 +176,23 @@
|
||||
/obj/item/storage/bag/tray)
|
||||
crate_name = "fruit crate"
|
||||
|
||||
/datum/supply_pack/organic/grill
|
||||
name = "Grilling Starter Kit"
|
||||
desc = "Hey dad I'm Hungry. Hi Hungry I'm THE NEW GRILLING STARTER KIT ONLY 5000 BUX GET NOW! Contains a cooking grill and five fuel coal sheets."
|
||||
cost = 3000
|
||||
crate_type = /obj/structure/closet/crate
|
||||
contains = list(/obj/item/stack/sheet/mineral/coal/five,
|
||||
/obj/machinery/grill/unwrenched)
|
||||
crate_name = "grilling starter kit crate"
|
||||
|
||||
/datum/supply_pack/organic/grillfuel
|
||||
name = "Grilling Fuel Kit"
|
||||
desc = "Contains coal and coal accessories. (Note: only ten coal sheets.)"
|
||||
cost = 1000
|
||||
crate_type = /obj/structure/closet/crate
|
||||
contains = list(/obj/item/stack/sheet/mineral/coal/ten)
|
||||
crate_name = "grilling fuel kit crate"
|
||||
|
||||
/datum/supply_pack/organic/cream_piee
|
||||
name = "High-yield Clown-grade Cream Pie Crate"
|
||||
desc = "Designed by Aussec's Advanced Warfare Research Division, these high-yield, Clown-grade cream pies are powered by a synergy of performance and efficiency. Guaranteed to provide maximum results."
|
||||
|
||||
@@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
//doohickeys for savefiles
|
||||
var/path
|
||||
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
|
||||
var/max_save_slots = 8
|
||||
var/max_save_slots = 16
|
||||
|
||||
//non-preference stuff
|
||||
var/muted = 0
|
||||
@@ -217,7 +217,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
load_path(C.ckey)
|
||||
unlock_content = C.IsByondMember()
|
||||
if(unlock_content)
|
||||
max_save_slots = 16
|
||||
max_save_slots = 24
|
||||
var/loaded_preferences_successfully = load_preferences()
|
||||
if(loaded_preferences_successfully)
|
||||
if(load_character())
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user