This commit is contained in:
Ghommie
2019-12-21 17:59:32 +01:00
281 changed files with 3165 additions and 1844 deletions
+49 -49
View File
@@ -226,6 +226,12 @@
/obj/structure/chair/stool, /obj/structure/chair/stool,
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
/area/security/prison) /area/security/prison)
"aaK" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/turf/open/floor/wood,
/area/crew_quarters/bar)
"aaL" = ( "aaL" = (
/obj/machinery/computer/libraryconsole/bookmanagement, /obj/machinery/computer/libraryconsole/bookmanagement,
/obj/structure/table, /obj/structure/table,
@@ -5861,7 +5867,7 @@
pixel_y = -2 pixel_y = -2
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -8268,7 +8274,7 @@
}, },
/obj/structure/filingcabinet/employment, /obj/structure/filingcabinet/employment,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/wood, /turf/open/floor/wood,
@@ -8414,7 +8420,7 @@
/area/crew_quarters/dorms) /area/crew_quarters/dorms)
"asl" = ( "asl" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plating, /turf/open/floor/plating,
@@ -9588,7 +9594,7 @@
/area/maintenance/fore) /area/maintenance/fore)
"avj" = ( "avj" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/cable{ /obj/structure/cable{
@@ -11430,7 +11436,7 @@
/obj/item/clothing/under/gladiator, /obj/item/clothing/under/gladiator,
/obj/item/clothing/under/gladiator, /obj/item/clothing/under/gladiator,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -13476,13 +13482,6 @@
}, },
/turf/open/floor/wood, /turf/open/floor/wood,
/area/crew_quarters/bar) /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" = ( "aDR" = (
/obj/structure/closet/lasertag/blue, /obj/structure/closet/lasertag/blue,
/obj/item/clothing/under/pj/blue, /obj/item/clothing/under/pj/blue,
@@ -14587,7 +14586,7 @@
/area/ai_monitored/nuke_storage) /area/ai_monitored/nuke_storage)
"aGf" = ( "aGf" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -15886,7 +15885,7 @@
/obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/glass/bucket,
/obj/item/plant_analyzer, /obj/item/plant_analyzer,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/green, /obj/effect/turf_decal/tile/green,
@@ -17035,7 +17034,7 @@
/area/construction/mining/aux_base) /area/construction/mining/aux_base)
"aLv" = ( "aLv" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -19589,7 +19588,7 @@
/area/library) /area/library)
"aRR" = ( "aRR" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -19620,7 +19619,7 @@
pixel_y = 24 pixel_y = 24
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/cable{ /obj/structure/cable{
@@ -19680,6 +19679,7 @@
/area/storage/tools) /area/storage/tools)
"aSd" = ( "aSd" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = -24 pixel_y = -24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -21255,7 +21255,7 @@
"aVH" = ( "aVH" = (
/obj/machinery/processor, /obj/machinery/processor,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/cafeteria, /turf/open/floor/plasteel/cafeteria,
@@ -23027,7 +23027,7 @@
/area/bridge/meeting_room) /area/bridge/meeting_room)
"aZv" = ( "aZv" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/table, /obj/structure/table,
@@ -23357,7 +23357,7 @@
pixel_y = 2 pixel_y = 2
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -23901,7 +23901,7 @@
/area/chapel/main) /area/chapel/main)
"bbG" = ( "bbG" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -24036,7 +24036,7 @@
/area/crew_quarters/locker) /area/crew_quarters/locker)
"bbV" = ( "bbV" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -25327,7 +25327,7 @@
layer = 2.9 layer = 2.9
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
@@ -26112,7 +26112,7 @@
/area/crew_quarters/heads/captain) /area/crew_quarters/heads/captain)
"bgY" = ( "bgY" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -28412,7 +28412,7 @@
}, },
/obj/item/stack/cable_coil, /obj/item/stack/cable_coil,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/white, /turf/open/floor/plasteel/white,
@@ -28706,7 +28706,7 @@
}, },
/obj/machinery/light, /obj/machinery/light,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel/white, /turf/open/floor/plasteel/white,
@@ -28945,7 +28945,7 @@
/obj/item/assembly/flash/handheld, /obj/item/assembly/flash/handheld,
/obj/item/assembly/flash/handheld, /obj/item/assembly/flash/handheld,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -29837,7 +29837,7 @@
"bpg" = ( "bpg" = (
/obj/structure/chair/office/light, /obj/structure/chair/office/light,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -29884,7 +29884,7 @@
network = list("ss13","medbay") network = list("ss13","medbay")
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/closet/secure_closet/personal/patient, /obj/structure/closet/secure_closet/personal/patient,
@@ -30212,7 +30212,7 @@
/area/science/robotics/lab) /area/science/robotics/lab)
"bpX" = ( "bpX" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -31709,7 +31709,7 @@
"btt" = ( "btt" = (
/obj/structure/table, /obj/structure/table,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/folder/yellow, /obj/item/folder/yellow,
@@ -34596,7 +34596,7 @@
/area/science/research) /area/science/research)
"bzF" = ( "bzF" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -34892,7 +34892,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel/white, /turf/open/floor/plasteel/white,
@@ -36231,7 +36231,7 @@
/area/quartermaster/miningdock) /area/quartermaster/miningdock)
"bDl" = ( "bDl" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -36265,7 +36265,7 @@
/area/quartermaster/miningdock) /area/quartermaster/miningdock)
"bDp" = ( "bDp" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -42597,7 +42597,7 @@
/area/medical/virology) /area/medical/virology)
"bRO" = ( "bRO" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/white, /turf/open/floor/plasteel/white,
@@ -45588,7 +45588,7 @@
/area/engine/break_room) /area/engine/break_room)
"bYI" = ( "bYI" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow,
@@ -47354,7 +47354,7 @@
/area/maintenance/port/aft) /area/maintenance/port/aft)
"ccv" = ( "ccv" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -48381,7 +48381,7 @@
/area/crew_quarters/heads/chief) /area/crew_quarters/heads/chief)
"cfd" = ( "cfd" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/closet/radiation, /obj/structure/closet/radiation,
@@ -51655,7 +51655,7 @@
/area/engine/engineering) /area/engine/engineering)
"cmG" = ( "cmG" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/cable{ /obj/structure/cable{
@@ -52930,7 +52930,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/engine, /turf/open/floor/engine,
@@ -53882,7 +53882,7 @@
pixel_y = 4 pixel_y = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -54088,7 +54088,7 @@
"cuo" = ( "cuo" = (
/obj/machinery/portable_atmospherics/canister/air, /obj/machinery/portable_atmospherics/canister/air,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner,
@@ -54175,7 +54175,7 @@
amount = 35 amount = 35
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/stripes/corner{ /obj/effect/turf_decal/stripes/corner{
@@ -54830,7 +54830,7 @@
network = list("aicore") network = list("aicore")
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/circuit, /turf/open/floor/circuit,
@@ -55028,7 +55028,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -56922,7 +56922,7 @@
/area/engine/engineering) /area/engine/engineering)
"cEk" = ( "cEk" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -59662,7 +59662,7 @@
"vzp" = ( "vzp" = (
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/stock_parts/cell/high, /obj/item/stock_parts/cell/high,
@@ -95402,7 +95402,7 @@ cNE
aQP aQP
awB awB
awB awB
aDQ aaK
aFi aFi
awB awB
awB awB
+78 -78
View File
@@ -1800,7 +1800,7 @@
pixel_y = -32 pixel_y = -32
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
@@ -15186,7 +15186,7 @@
/area/crew_quarters/bar) /area/crew_quarters/bar)
"aGc" = ( "aGc" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = 32 pixel_y = 32
}, },
@@ -15457,7 +15457,7 @@
pixel_y = 32 pixel_y = 32
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -16828,7 +16828,7 @@
/area/maintenance/disposal/incinerator) /area/maintenance/disposal/incinerator)
"aIy" = ( "aIy" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -17791,7 +17791,7 @@
}, },
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/components/unary/vent_pump/on{ /obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -21486,7 +21486,7 @@
"aQl" = ( "aQl" = (
/obj/structure/table/wood, /obj/structure/table/wood,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/camera, /obj/item/camera,
@@ -23602,7 +23602,7 @@
/area/crew_quarters/theatre) /area/crew_quarters/theatre)
"aTy" = ( "aTy" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -27337,7 +27337,7 @@
/area/crew_quarters/bar/atrium) /area/crew_quarters/bar/atrium)
"aYF" = ( "aYF" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -27513,7 +27513,7 @@
"aYR" = ( "aYR" = (
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = -32 pixel_y = -32
}, },
@@ -27639,7 +27639,7 @@
"aZb" = ( "aZb" = (
/obj/machinery/photocopier, /obj/machinery/photocopier,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = -32 pixel_y = -32
}, },
@@ -29336,7 +29336,7 @@
pixel_y = 22 pixel_y = 22
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/chem_master/condimaster{ /obj/machinery/chem_master/condimaster{
@@ -29603,7 +29603,7 @@
/obj/item/clipboard, /obj/item/clipboard,
/obj/item/toy/figure/miner, /obj/item/toy/figure/miner,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -30819,7 +30819,7 @@
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -31057,7 +31057,7 @@
"beY" = ( "beY" = (
/obj/structure/kitchenspike, /obj/structure/kitchenspike,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -32627,7 +32627,7 @@
/area/crew_quarters/kitchen) /area/crew_quarters/kitchen)
"bhL" = ( "bhL" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = 32 pixel_y = 32
}, },
@@ -40095,7 +40095,7 @@
/area/crew_quarters/heads/hos) /area/crew_quarters/heads/hos)
"bty" = ( "bty" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = -32 pixel_y = -32
}, },
@@ -40782,7 +40782,7 @@
/area/security/main) /area/security/main)
"buM" = ( "buM" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = -32 pixel_y = -32
}, },
@@ -41844,7 +41844,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -43216,7 +43216,7 @@
"byI" = ( "byI" = (
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -43230,7 +43230,7 @@
/area/security/execution/transfer) /area/security/execution/transfer)
"byJ" = ( "byJ" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -48755,7 +48755,7 @@
/area/engine/gravity_generator) /area/engine/gravity_generator)
"bGg" = ( "bGg" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
@@ -48794,7 +48794,7 @@
/area/engine/break_room) /area/engine/break_room)
"bGk" = ( "bGk" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/airalarm{ /obj/machinery/airalarm{
@@ -48935,7 +48935,7 @@
"bGt" = ( "bGt" = (
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -49890,7 +49890,7 @@
/area/engine/gravity_generator) /area/engine/gravity_generator)
"bHS" = ( "bHS" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -50406,7 +50406,7 @@
"bIG" = ( "bIG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
@@ -51881,7 +51881,7 @@
"bKU" = ( "bKU" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -52445,7 +52445,7 @@
"bLK" = ( "bLK" = (
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/button/door{ /obj/machinery/button/door{
@@ -55374,7 +55374,7 @@
"bQh" = ( "bQh" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/yellow{ /obj/effect/turf_decal/tile/yellow{
@@ -57009,7 +57009,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -57153,7 +57153,7 @@
pixel_y = -3 pixel_y = -3
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -57248,7 +57248,7 @@
layer = 2.9 layer = 2.9
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light/small{ /obj/machinery/light/small{
@@ -60797,7 +60797,7 @@
"bXY" = ( "bXY" = (
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{ /obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -60899,7 +60899,7 @@
"bYh" = ( "bYh" = (
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{ /obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -60920,7 +60920,7 @@
"bYi" = ( "bYi" = (
/obj/structure/window/reinforced, /obj/structure/window/reinforced,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{ /obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -62280,7 +62280,7 @@
/area/ai_monitored/turret_protected/aisat_interior) /area/ai_monitored/turret_protected/aisat_interior)
"caj" = ( "caj" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/porta_turret/ai, /obj/machinery/porta_turret/ai,
@@ -64037,7 +64037,7 @@
"cdk" = ( "cdk" = (
/obj/machinery/vending/wardrobe/law_wardrobe, /obj/machinery/vending/wardrobe/law_wardrobe,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/wood, /turf/open/floor/wood,
@@ -64076,7 +64076,7 @@
/area/security/brig) /area/security/brig)
"cdn" = ( "cdn" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -67030,7 +67030,7 @@
/area/engine/engineering) /area/engine/engineering)
"chF" = ( "chF" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = -32 pixel_y = -32
}, },
@@ -67361,7 +67361,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
@@ -69328,7 +69328,7 @@
pixel_x = -26 pixel_x = -26
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = 32 pixel_y = 32
}, },
@@ -70711,7 +70711,7 @@
}, },
/obj/item/camera_film, /obj/item/camera_film,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/grimy, /turf/open/floor/plasteel/grimy,
@@ -76603,7 +76603,7 @@
}, },
/obj/item/crowbar, /obj/item/crowbar,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
@@ -77602,7 +77602,7 @@
"czP" = ( "czP" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -77888,7 +77888,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/cable/white{ /obj/structure/cable/white{
@@ -78794,7 +78794,7 @@
"cBL" = ( "cBL" = (
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
@@ -80798,7 +80798,7 @@
/obj/item/radio, /obj/item/radio,
/obj/item/radio, /obj/item/radio,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
@@ -81427,7 +81427,7 @@
/obj/item/clothing/head/welding, /obj/item/clothing/head/welding,
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24; pixel_x = -24;
pixel_y = -32 pixel_y = -32
}, },
@@ -82645,7 +82645,7 @@
/area/crew_quarters/dorms) /area/crew_quarters/dorms)
"cIk" = ( "cIk" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -87477,7 +87477,7 @@
"cQE" = ( "cQE" = (
/obj/structure/closet/secure_closet/security/science, /obj/structure/closet/secure_closet/security/science,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/status_display{ /obj/machinery/status_display{
@@ -88838,7 +88838,7 @@
pixel_y = 32 pixel_y = 32
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -95618,7 +95618,7 @@
/obj/item/paper_bin, /obj/item/paper_bin,
/obj/item/pen, /obj/item/pen,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/storage/bag/bio, /obj/item/storage/bag/bio,
@@ -96554,7 +96554,7 @@
/obj/item/reagent_containers/glass/bottle/epinephrine, /obj/item/reagent_containers/glass/bottle/epinephrine,
/obj/item/reagent_containers/dropper, /obj/item/reagent_containers/dropper,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -100259,7 +100259,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/door/firedoor, /obj/machinery/door/firedoor,
@@ -100623,7 +100623,7 @@
/area/science/explab) /area/science/explab)
"dmJ" = ( "dmJ" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/bot, /obj/effect/turf_decal/bot,
@@ -100634,7 +100634,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/bot, /obj/effect/turf_decal/bot,
@@ -103278,7 +103278,7 @@
pixel_x = 36 pixel_x = 36
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/vending/assist, /obj/machinery/vending/assist,
@@ -103445,7 +103445,7 @@
pixel_y = 6 pixel_y = 6
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -104055,7 +104055,7 @@
"dti" = ( "dti" = (
/obj/structure/closet/bombcloset, /obj/structure/closet/bombcloset,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -104389,7 +104389,7 @@
/area/medical/surgery) /area/medical/surgery)
"dtQ" = ( "dtQ" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -105002,7 +105002,7 @@
"duZ" = ( "duZ" = (
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24; pixel_x = 24;
pixel_y = -26 pixel_y = -26
}, },
@@ -105033,7 +105033,7 @@
"dvd" = ( "dvd" = (
/obj/item/twohanded/required/kirbyplants/random, /obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/bot, /obj/effect/turf_decal/bot,
@@ -107185,7 +107185,7 @@
"dyD" = ( "dyD" = (
/obj/structure/table, /obj/structure/table,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/status_display/ai{ /obj/machinery/status_display/ai{
@@ -108398,7 +108398,7 @@
/obj/item/clothing/glasses/welding, /obj/item/clothing/glasses/welding,
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/bot, /obj/effect/turf_decal/bot,
@@ -111492,7 +111492,7 @@
dir = 5 dir = 5
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -111886,7 +111886,7 @@
pixel_y = 26 pixel_y = 26
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24; pixel_x = 24;
pixel_y = -26 pixel_y = -26
}, },
@@ -112582,7 +112582,7 @@
/area/science/robotics/lab) /area/science/robotics/lab)
"dHC" = ( "dHC" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
@@ -113983,7 +113983,7 @@
"dJO" = ( "dJO" = (
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -114247,7 +114247,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
@@ -116746,7 +116746,7 @@
"dOC" = ( "dOC" = (
/obj/structure/filingcabinet/medical, /obj/structure/filingcabinet/medical,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -117626,7 +117626,7 @@
name = "emergency shower" name = "emergency shower"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/components/unary/vent_pump/on{ /obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -118825,7 +118825,7 @@
/area/medical/virology) /area/medical/virology)
"dSd" = ( "dSd" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -119657,7 +119657,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/sign/poster/official/work_for_a_future{ /obj/structure/sign/poster/official/work_for_a_future{
@@ -119868,7 +119868,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -121622,7 +121622,7 @@
"dXI" = ( "dXI" = (
/obj/structure/chair/wood, /obj/structure/chair/wood,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -122148,7 +122148,7 @@
/area/medical/virology) /area/medical/virology)
"dYV" = ( "dYV" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/closet/secure_closet/medical1, /obj/structure/closet/secure_closet/medical1,
@@ -125155,7 +125155,7 @@
}, },
/obj/item/camera_film, /obj/item/camera_film,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/status_display{ /obj/machinery/status_display{
@@ -125251,7 +125251,7 @@
"eeH" = ( "eeH" = (
/obj/structure/filingcabinet/security, /obj/structure/filingcabinet/security,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -125960,7 +125960,7 @@
"egb" = ( "egb" = (
/obj/structure/table/wood, /obj/structure/table/wood,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/clipboard, /obj/item/clipboard,
+103 -103
View File
@@ -1445,7 +1445,7 @@
icon_state = "1-2" icon_state = "1-2"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -3882,7 +3882,7 @@
/obj/item/clothing/head/helmet/riot, /obj/item/clothing/head/helmet/riot,
/obj/item/clothing/head/helmet/riot, /obj/item/clothing/head/helmet/riot,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -4020,7 +4020,7 @@
"ahJ" = ( "ahJ" = (
/obj/machinery/disposal/bin, /obj/machinery/disposal/bin,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -4158,7 +4158,7 @@
icon_state = "1-2" icon_state = "1-2"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -4903,7 +4903,7 @@
name = "Evidence Closet 5" name = "Evidence Closet 5"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -7192,7 +7192,7 @@
/obj/item/reagent_containers/glass/bottle/morphine, /obj/item/reagent_containers/glass/bottle/morphine,
/obj/machinery/light/small, /obj/machinery/light/small,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/effect/turf_decal/bot, /obj/effect/turf_decal/bot,
@@ -7248,7 +7248,7 @@
"anu" = ( "anu" = (
/obj/machinery/vending/security, /obj/machinery/vending/security,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/turf/open/floor/plasteel/showroomfloor, /turf/open/floor/plasteel/showroomfloor,
@@ -7733,7 +7733,7 @@
"aot" = ( "aot" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -7780,7 +7780,7 @@
/area/maintenance/port/fore) /area/maintenance/port/fore)
"aoy" = ( "aoy" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/structure/closet/secure_closet/warden, /obj/structure/closet/secure_closet/warden,
@@ -9298,7 +9298,7 @@
}, },
/obj/structure/table/wood, /obj/structure/table/wood,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/turf/open/floor/plasteel/grimy, /turf/open/floor/plasteel/grimy,
@@ -9456,7 +9456,7 @@
/area/engine/gravity_generator) /area/engine/gravity_generator)
"arS" = ( "arS" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/structure/cable{ /obj/structure/cable{
@@ -11192,7 +11192,7 @@
dir = 5 dir = 5
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -13469,7 +13469,7 @@
/area/security/brig) /area/security/brig)
"azQ" = ( "azQ" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/filingcabinet, /obj/structure/filingcabinet,
@@ -14063,7 +14063,7 @@
/area/hallway/primary/fore) /area/hallway/primary/fore)
"aAX" = ( "aAX" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/light/small{ /obj/machinery/light/small{
@@ -14112,7 +14112,7 @@
"aBc" = ( "aBc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -14609,7 +14609,7 @@
maxcharge = 2000 maxcharge = 2000
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance,
@@ -15124,7 +15124,7 @@
/area/maintenance/port/fore) /area/maintenance/port/fore)
"aDh" = ( "aDh" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -16127,7 +16127,7 @@
"aFc" = ( "aFc" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -16225,7 +16225,7 @@
"aFo" = ( "aFo" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -16236,7 +16236,7 @@
"aFp" = ( "aFp" = (
/obj/structure/reagent_dispensers/watertank, /obj/structure/reagent_dispensers/watertank,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -16584,7 +16584,7 @@
icon_state = "2-4" icon_state = "2-4"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -16858,7 +16858,7 @@
}, },
/obj/item/pen, /obj/item/pen,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/reagent_dispensers/peppertank{ /obj/structure/reagent_dispensers/peppertank{
@@ -17616,7 +17616,7 @@
/area/maintenance/starboard/fore) /area/maintenance/starboard/fore)
"aHX" = ( "aHX" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -18710,7 +18710,7 @@
icon_state = "1-8" icon_state = "1-8"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/wood, /turf/open/floor/wood,
@@ -19722,7 +19722,7 @@
/area/storage/primary) /area/storage/primary)
"aMF" = ( "aMF" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -19794,7 +19794,7 @@
/area/hallway/primary/fore) /area/hallway/primary/fore)
"aMK" = ( "aMK" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -20623,7 +20623,7 @@
/area/lawoffice) /area/lawoffice)
"aOs" = ( "aOs" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/table, /obj/structure/table,
@@ -21207,7 +21207,7 @@
"aPA" = ( "aPA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -21396,7 +21396,7 @@
pixel_y = 32 pixel_y = 32
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -23473,7 +23473,7 @@
icon_state = "1-2" icon_state = "1-2"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -23863,7 +23863,7 @@
/area/crew_quarters/locker) /area/crew_quarters/locker)
"aUL" = ( "aUL" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -25956,7 +25956,7 @@
pixel_x = -38 pixel_x = -38
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/loading_area{ /obj/effect/turf_decal/loading_area{
@@ -28079,7 +28079,7 @@
"bcn" = ( "bcn" = (
/obj/structure/rack, /obj/structure/rack,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/item/clothing/gloves/color/fyellow, /obj/item/clothing/gloves/color/fyellow,
@@ -28277,7 +28277,7 @@
/area/storage/tech) /area/storage/tech)
"bcE" = ( "bcE" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/structure/disposalpipe/segment{ /obj/structure/disposalpipe/segment{
@@ -28446,7 +28446,7 @@
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/cable/yellow{ /obj/structure/cable/yellow{
@@ -28566,7 +28566,7 @@
}, },
/obj/structure/closet/secure_closet/security, /obj/structure/closet/secure_closet/security,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -28783,7 +28783,7 @@
dir = 9 dir = 9
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -29276,7 +29276,7 @@
"beo" = ( "beo" = (
/obj/structure/closet/secure_closet/security/engine, /obj/structure/closet/secure_closet/security/engine,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/cable/yellow{ /obj/structure/cable/yellow{
@@ -30114,7 +30114,7 @@
pixel_y = 7 pixel_y = 7
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -30613,7 +30613,7 @@
/obj/item/mop, /obj/item/mop,
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -31943,7 +31943,7 @@
/area/hallway/primary/starboard) /area/hallway/primary/starboard)
"bjE" = ( "bjE" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -32353,7 +32353,7 @@
"bkn" = ( "bkn" = (
/obj/structure/table, /obj/structure/table,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/effect/turf_decal/tile/brown{ /obj/effect/turf_decal/tile/brown{
@@ -33024,7 +33024,7 @@
/obj/machinery/computer/teleporter, /obj/machinery/computer/teleporter,
/obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -34207,7 +34207,7 @@
/area/ai_monitored/storage/satellite) /area/ai_monitored/storage/satellite)
"bnK" = ( "bnK" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -34637,7 +34637,7 @@
/area/bridge) /area/bridge)
"boC" = ( "boC" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/item/storage/fancy/donut_box, /obj/item/storage/fancy/donut_box,
@@ -36458,7 +36458,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -37243,7 +37243,7 @@
/obj/structure/table, /obj/structure/table,
/obj/item/camera_film, /obj/item/camera_film,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -38242,7 +38242,7 @@
pixel_x = 4 pixel_x = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -38729,7 +38729,7 @@
"bwr" = ( "bwr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -38821,7 +38821,7 @@
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -38943,7 +38943,7 @@
"bwK" = ( "bwK" = (
/obj/structure/table, /obj/structure/table,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/machinery/chem_dispenser/drinks, /obj/machinery/chem_dispenser/drinks,
@@ -39807,7 +39807,7 @@
"byv" = ( "byv" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -39973,7 +39973,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue,
@@ -40671,7 +40671,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/carpet, /turf/open/floor/carpet,
@@ -41103,7 +41103,7 @@
pixel_y = -30 pixel_y = -30
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/item/paper_bin{ /obj/item/paper_bin{
@@ -41614,7 +41614,7 @@
/area/crew_quarters/theatre) /area/crew_quarters/theatre)
"bCd" = ( "bCd" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/table/wood, /obj/structure/table/wood,
@@ -41949,7 +41949,7 @@
/area/crew_quarters/toilet/auxiliary) /area/crew_quarters/toilet/auxiliary)
"bCS" = ( "bCS" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -44190,7 +44190,7 @@
dir = 5 dir = 5
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/yellow{ /obj/effect/turf_decal/tile/yellow{
@@ -45223,7 +45223,7 @@
/area/security/vacantoffice) /area/security/vacantoffice)
"bJx" = ( "bJx" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/wood, /turf/open/floor/wood,
@@ -45233,7 +45233,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/cobweb,
@@ -45319,7 +45319,7 @@
"bJH" = ( "bJH" = (
/obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/suit_storage_unit/standard_unit,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -45967,7 +45967,7 @@
icon_state = "1-2" icon_state = "1-2"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -46985,7 +46985,7 @@
"bMW" = ( "bMW" = (
/obj/machinery/teleport/station, /obj/machinery/teleport/station,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plating, /turf/open/floor/plating,
@@ -47352,7 +47352,7 @@
/area/crew_quarters/kitchen) /area/crew_quarters/kitchen)
"bNC" = ( "bNC" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/vending/dinnerware, /obj/machinery/vending/dinnerware,
@@ -47447,7 +47447,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -49198,7 +49198,7 @@
name = "novelty HoS hat" name = "novelty HoS hat"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light/small{ /obj/machinery/light/small{
@@ -49294,7 +49294,7 @@
"bRO" = ( "bRO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -49729,7 +49729,7 @@
"bSD" = ( "bSD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -52408,7 +52408,7 @@
/area/hallway/primary/central) /area/hallway/primary/central)
"bXZ" = ( "bXZ" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/item/twohanded/required/kirbyplants{ /obj/item/twohanded/required/kirbyplants{
@@ -53733,7 +53733,7 @@
dir = 1 dir = 1
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -53817,7 +53817,7 @@
}, },
/obj/item/pen, /obj/item/pen,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -53831,7 +53831,7 @@
/area/security/checkpoint/science/research) /area/security/checkpoint/science/research)
"caG" = ( "caG" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/sink{ /obj/structure/sink{
@@ -55905,7 +55905,7 @@
}, },
/obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26; pixel_x = -26;
pixel_y = 28 pixel_y = 28
}, },
@@ -57091,7 +57091,7 @@
icon_state = "2-8" icon_state = "2-8"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/structure/reagent_dispensers/cooking_oil, /obj/structure/reagent_dispensers/cooking_oil,
@@ -57265,7 +57265,7 @@
/area/medical/sleeper) /area/medical/sleeper)
"cgT" = ( "cgT" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{ /obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -57892,7 +57892,7 @@
/area/maintenance/port/aft) /area/maintenance/port/aft)
"cie" = ( "cie" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -59031,7 +59031,7 @@
/area/maintenance/starboard/aft) /area/maintenance/starboard/aft)
"ckm" = ( "ckm" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/sink{ /obj/structure/sink{
@@ -59626,7 +59626,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -59730,7 +59730,7 @@
/area/science/research) /area/science/research)
"clI" = ( "clI" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/closet/firecloset, /obj/structure/closet/firecloset,
@@ -61045,7 +61045,7 @@
/area/science/research) /area/science/research)
"cok" = ( "cok" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
@@ -62766,7 +62766,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/white/side{ /turf/open/floor/plasteel/white/side{
@@ -63319,7 +63319,7 @@
"csq" = ( "csq" = (
/obj/structure/bed, /obj/structure/bed,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/item/bedsheet/medical, /obj/item/bedsheet/medical,
@@ -63349,7 +63349,7 @@
/area/medical/cryo) /area/medical/cryo)
"cst" = ( "cst" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -64556,7 +64556,7 @@
pixel_y = 2 pixel_y = 2
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/sign/warning/nosmoking{ /obj/structure/sign/warning/nosmoking{
@@ -64778,7 +64778,7 @@
}, },
/obj/item/storage/secure/briefcase, /obj/item/storage/secure/briefcase,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/cafeteria{ /turf/open/floor/plasteel/cafeteria{
@@ -65130,7 +65130,7 @@
/area/medical/genetics) /area/medical/genetics)
"cvC" = ( "cvC" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/storage/box/syringes, /obj/item/storage/box/syringes,
@@ -65705,7 +65705,7 @@
"cwF" = ( "cwF" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -65785,7 +65785,7 @@
"cwO" = ( "cwO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -66781,7 +66781,7 @@
/area/science/circuit) /area/science/circuit)
"cyN" = ( "cyN" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/airalarm{ /obj/machinery/airalarm{
@@ -67430,7 +67430,7 @@
}, },
/obj/item/paper, /obj/item/paper,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/table/glass, /obj/structure/table/glass,
@@ -68105,7 +68105,7 @@
"cBi" = ( "cBi" = (
/obj/structure/reagent_dispensers/fueltank, /obj/structure/reagent_dispensers/fueltank,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/delivery,
@@ -68521,7 +68521,7 @@
/area/medical/medbay/aft) /area/medical/medbay/aft)
"cCb" = ( "cCb" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/closet/secure_closet/personal/patient, /obj/structure/closet/secure_closet/personal/patient,
@@ -69596,7 +69596,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -70136,7 +70136,7 @@
/area/science/robotics/lab) /area/science/robotics/lab)
"cFj" = ( "cFj" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28; pixel_x = 28;
pixel_y = 5 pixel_y = 5
}, },
@@ -70649,7 +70649,7 @@
"cGi" = ( "cGi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/white/side{ /turf/open/floor/plasteel/white/side{
@@ -72046,7 +72046,7 @@
dir = 9 dir = 9
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/machinery/vending/wardrobe/viro_wardrobe, /obj/machinery/vending/wardrobe/viro_wardrobe,
@@ -73267,7 +73267,7 @@
dir = 9 dir = 9
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -73902,7 +73902,7 @@
"cLS" = ( "cLS" = (
/obj/structure/chair/stool, /obj/structure/chair/stool,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/green, /obj/effect/turf_decal/tile/green,
@@ -73931,7 +73931,7 @@
pixel_y = 25 pixel_y = 25
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/structure/table/wood, /obj/structure/table/wood,
@@ -77869,7 +77869,7 @@
/area/hallway/primary/central) /area/hallway/primary/central)
"cVi" = ( "cVi" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/wood, /turf/open/floor/wood,
@@ -79683,7 +79683,7 @@
network = list("ss13","engine") network = list("ss13","engine")
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -81295,7 +81295,7 @@
/area/crew_quarters/theatre) /area/crew_quarters/theatre)
"dis" = ( "dis" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/disposal/bin, /obj/machinery/disposal/bin,
@@ -84068,7 +84068,7 @@
/area/library) /area/library)
"qXt" = ( "qXt" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
+40 -38
View File
@@ -1094,7 +1094,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/purple{ /obj/effect/turf_decal/tile/purple{
@@ -3052,7 +3052,7 @@
"afp" = ( "afp" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -3138,7 +3138,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -4288,7 +4288,7 @@
/area/maintenance/starboard/fore) /area/maintenance/starboard/fore)
"ahk" = ( "ahk" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -4440,7 +4440,7 @@
"ahy" = ( "ahy" = (
/obj/machinery/suit_storage_unit/security, /obj/machinery/suit_storage_unit/security,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -4475,7 +4475,7 @@
"ahB" = ( "ahB" = (
/obj/machinery/photocopier, /obj/machinery/photocopier,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/cable/white{ /obj/structure/cable/white{
@@ -7740,7 +7740,7 @@
/obj/item/stack/packageWrap, /obj/item/stack/packageWrap,
/obj/item/hand_labeler, /obj/item/hand_labeler,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -7886,7 +7886,7 @@
"anj" = ( "anj" = (
/obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/suit_storage_unit/standard_unit,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/stripes/end{ /obj/effect/turf_decal/stripes/end{
@@ -8367,7 +8367,7 @@
"anZ" = ( "anZ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -8554,7 +8554,7 @@
}, },
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -9965,7 +9965,7 @@
icon_state = "plant-21" icon_state = "plant-21"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -10216,7 +10216,7 @@
pixel_y = -22 pixel_y = -22
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/item/paper_bin, /obj/item/paper_bin,
@@ -11445,7 +11445,7 @@
"atj" = ( "atj" = (
/obj/machinery/vending/coffee, /obj/machinery/vending/coffee,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -12887,7 +12887,7 @@
/area/hallway/primary/port) /area/hallway/primary/port)
"avX" = ( "avX" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/item/twohanded/required/kirbyplants{ /obj/item/twohanded/required/kirbyplants{
@@ -12902,7 +12902,7 @@
/obj/item/stock_parts/cell/high, /obj/item/stock_parts/cell/high,
/obj/machinery/cell_charger, /obj/machinery/cell_charger,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light_switch{ /obj/machinery/light_switch{
@@ -14105,7 +14105,7 @@
/area/engine/atmos) /area/engine/atmos)
"ayl" = ( "ayl" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -14116,7 +14116,7 @@
"aym" = ( "aym" = (
/obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/delivery,
@@ -16093,7 +16093,7 @@
"aCh" = ( "aCh" = (
/obj/machinery/vending/snack/random, /obj/machinery/vending/snack/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/bot, /obj/effect/turf_decal/bot,
@@ -16503,7 +16503,7 @@
/obj/item/clipboard, /obj/item/clipboard,
/obj/item/toy/figure/chef, /obj/item/toy/figure/chef,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/camera{ /obj/machinery/camera{
@@ -16714,7 +16714,7 @@
/area/engine/break_room) /area/engine/break_room)
"aDw" = ( "aDw" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/components/unary/portables_connector/visible{ /obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -17444,7 +17444,7 @@
"aEK" = ( "aEK" = (
/obj/machinery/vending/clothing, /obj/machinery/vending/clothing,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/bot, /obj/effect/turf_decal/bot,
@@ -17977,7 +17977,7 @@
dir = 1 dir = 1
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/structure/cable{ /obj/structure/cable{
@@ -18209,7 +18209,7 @@
/area/hallway/primary/port) /area/hallway/primary/port)
"aFL" = ( "aFL" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -20148,7 +20148,7 @@
/obj/structure/table, /obj/structure/table,
/obj/item/storage/pill_bottle/dice, /obj/item/storage/pill_bottle/dice,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -21489,7 +21489,7 @@
"aLg" = ( "aLg" = (
/obj/machinery/vending/snack/random, /obj/machinery/vending/snack/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -22597,7 +22597,7 @@
/area/maintenance/starboard/central) /area/maintenance/starboard/central)
"aNF" = ( "aNF" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -23062,7 +23062,7 @@
/area/engine/engineering) /area/engine/engineering)
"aOG" = ( "aOG" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -23834,7 +23834,7 @@
"aPW" = ( "aPW" = (
/obj/machinery/vending/snack/random, /obj/machinery/vending/snack/random,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -25049,7 +25049,7 @@
name = "emergency shower" name = "emergency shower"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -26916,7 +26916,7 @@
/obj/item/storage/box/bodybags, /obj/item/storage/box/bodybags,
/obj/item/pen, /obj/item/pen,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -28252,7 +28252,7 @@
dir = 1 dir = 1
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -29794,7 +29794,7 @@
/area/hallway/primary/aft) /area/hallway/primary/aft)
"baN" = ( "baN" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/machinery/atmospherics/components/unary/vent_pump/on{ /obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -30100,7 +30100,7 @@
/area/medical/medbay/zone3) /area/medical/medbay/zone3)
"bbu" = ( "bbu" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -31241,7 +31241,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -32128,7 +32128,7 @@
/area/security/checkpoint) /area/security/checkpoint)
"beK" = ( "beK" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -34456,7 +34456,7 @@
pixel_y = -22 pixel_y = -22
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/light/small{ /obj/machinery/light/small{
@@ -37099,7 +37099,7 @@
"dai" = ( "dai" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -40387,7 +40387,7 @@
/area/maintenance/starboard) /area/maintenance/starboard)
"sHf" = ( "sHf" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -42215,6 +42215,7 @@
}, },
/obj/structure/table, /obj/structure/table,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = -26 pixel_y = -26
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
@@ -42280,6 +42281,7 @@
}, },
/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/delivery,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = -26 pixel_y = -26
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
+40 -58
View File
@@ -174,7 +174,6 @@
pixel_x = -27 pixel_x = -27
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 26 pixel_y = 26
}, },
/turf/open/floor/circuit, /turf/open/floor/circuit,
@@ -672,7 +671,7 @@
/obj/item/pen, /obj/item/pen,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/item/paper_bin, /obj/item/paper_bin,
@@ -2453,7 +2452,7 @@
dir = 6 dir = 6
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -27 pixel_x = -27
}, },
/turf/open/floor/plasteel/showroomfloor, /turf/open/floor/plasteel/showroomfloor,
@@ -3387,7 +3386,7 @@
/obj/item/gun/energy/e_gun, /obj/item/gun/energy/e_gun,
/obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -27 pixel_x = -27
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -4248,7 +4247,7 @@
}, },
/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -27 pixel_x = -27
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -4964,7 +4963,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/turf/open/floor/plasteel/showroomfloor, /turf/open/floor/plasteel/showroomfloor,
@@ -8228,7 +8227,7 @@
dir = 10 dir = 10
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -8715,7 +8714,7 @@
/area/crew_quarters/dorms) /area/crew_quarters/dorms)
"avl" = ( "avl" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/computer/cryopod{ /obj/machinery/computer/cryopod{
@@ -9674,7 +9673,7 @@
light_color = "#e8eaff" light_color = "#e8eaff"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/computer/rdconsole{ /obj/machinery/computer/rdconsole{
@@ -11431,7 +11430,6 @@
"aBB" = ( "aBB" = (
/obj/machinery/computer/cargo/request, /obj/machinery/computer/cargo/request,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/turf/open/floor/wood, /turf/open/floor/wood,
@@ -12379,7 +12377,7 @@
/area/storage/primary) /area/storage/primary)
"aDB" = ( "aDB" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
@@ -14356,7 +14354,6 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -17508,7 +17505,7 @@
dir = 10 dir = 10
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/turf/open/floor/plasteel, /turf/open/floor/plasteel,
@@ -18556,7 +18553,7 @@
/area/maintenance/department/crew_quarters/bar) /area/maintenance/department/crew_quarters/bar)
"aSA" = ( "aSA" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/machinery/hydroponics/constructable, /obj/machinery/hydroponics/constructable,
@@ -18775,7 +18772,6 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/obj/effect/turf_decal/tile/brown{ /obj/effect/turf_decal/tile/brown{
@@ -19108,7 +19104,7 @@
"aTP" = ( "aTP" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
@@ -21328,7 +21324,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown,
@@ -21725,7 +21721,7 @@
dir = 1 dir = 1
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -22077,7 +22073,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/effect/turf_decal/tile/green{ /obj/effect/turf_decal/tile/green{
@@ -24433,7 +24429,6 @@
"bfx" = ( "bfx" = (
/obj/structure/reagent_dispensers/fueltank, /obj/structure/reagent_dispensers/fueltank,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 24 pixel_y = 24
}, },
/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/delivery,
@@ -24819,7 +24814,6 @@
/area/hallway/primary/central) /area/hallway/primary/central)
"bgx" = ( "bgx" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 27 pixel_y = 27
}, },
/obj/structure/chair, /obj/structure/chair,
@@ -26683,7 +26677,7 @@
"bly" = ( "bly" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26; pixel_x = -26;
pixel_y = 28 pixel_y = 28
}, },
@@ -27994,7 +27988,6 @@
"boz" = ( "boz" = (
/obj/machinery/vending/clothing, /obj/machinery/vending/clothing,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 27 pixel_y = 27
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -30024,7 +30017,7 @@
"bsB" = ( "bsB" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer, /obj/machinery/atmospherics/components/unary/thermomachine/freezer,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/obj/structure/sign/poster/official/random{ /obj/structure/sign/poster/official/random{
@@ -30231,7 +30224,7 @@
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/green, /obj/effect/turf_decal/tile/green,
@@ -30360,7 +30353,7 @@
/obj/item/crowbar, /obj/item/crowbar,
/obj/item/wrench, /obj/item/wrench,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/item/multitool, /obj/item/multitool,
@@ -30810,7 +30803,7 @@
/area/medical/chemistry) /area/medical/chemistry)
"bun" = ( "bun" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/yellow{ /obj/effect/turf_decal/tile/yellow{
@@ -30848,7 +30841,7 @@
network = list("ss13","rd") network = list("ss13","rd")
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -31469,7 +31462,7 @@
dir = 1 dir = 1
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/effect/turf_decal/tile/purple{ /obj/effect/turf_decal/tile/purple{
@@ -34270,7 +34263,7 @@
/area/science/storage) /area/science/storage)
"bBH" = ( "bBH" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/effect/turf_decal/tile/purple{ /obj/effect/turf_decal/tile/purple{
@@ -34299,7 +34292,7 @@
"bBK" = ( "bBK" = (
/obj/structure/closet/bombcloset, /obj/structure/closet/bombcloset,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/structure/sign/poster/official/random{ /obj/structure/sign/poster/official/random{
@@ -35599,7 +35592,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -35961,8 +35954,7 @@
dir = 1 dir = 1
}, },
/obj/machinery/vending/wallmed{ /obj/machinery/vending/wallmed{
pixel_y = 28; 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)
}, },
/obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/landmark/blobstart, /obj/effect/landmark/blobstart,
@@ -36644,7 +36636,7 @@
"bGe" = ( "bGe" = (
/obj/machinery/portable_atmospherics/scrubber, /obj/machinery/portable_atmospherics/scrubber,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -36690,7 +36682,7 @@
network = list("ss13","rd") network = list("ss13","rd")
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/turf/open/floor/engine, /turf/open/floor/engine,
@@ -37123,7 +37115,7 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -37798,8 +37790,7 @@
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/vending/wallmed{ /obj/machinery/vending/wallmed{
pixel_y = 28; 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)
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
dir = 1 dir = 1
@@ -38760,8 +38751,7 @@
/area/medical/medbay/central) /area/medical/medbay/central)
"bKw" = ( "bKw" = (
/obj/machinery/vending/wallmed{ /obj/machinery/vending/wallmed{
pixel_y = 28; 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)
}, },
/obj/machinery/atmospherics/components/unary/vent_pump/on{ /obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4 dir = 4
@@ -39311,7 +39301,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -26 pixel_x = -26
}, },
/turf/open/floor/plasteel/white, /turf/open/floor/plasteel/white,
@@ -40977,7 +40967,7 @@
}, },
/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/yellow{ /obj/effect/turf_decal/tile/yellow{
@@ -41200,7 +41190,6 @@
}, },
/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -41252,7 +41241,6 @@
}, },
/obj/item/stock_parts/cell/high/plus, /obj/item/stock_parts/cell/high/plus,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/obj/effect/turf_decal/tile/green{ /obj/effect/turf_decal/tile/green{
@@ -42923,7 +42911,6 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/obj/effect/turf_decal/tile/yellow{ /obj/effect/turf_decal/tile/yellow{
@@ -45325,7 +45312,6 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/obj/effect/turf_decal/stripes/corner{ /obj/effect/turf_decal/stripes/corner{
@@ -47520,7 +47506,7 @@
/area/engine/engineering) /area/engine/engineering)
"cgV" = ( "cgV" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -48339,7 +48325,7 @@
"ckD" = ( "ckD" = (
/obj/structure/chair/wood/normal, /obj/structure/chair/wood/normal,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -52165,7 +52151,6 @@
network = list("ss13","monastery") network = list("ss13","monastery")
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -53839,7 +53824,7 @@
/area/maintenance/department/security/brig) /area/maintenance/department/security/brig)
"ePS" = ( "ePS" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -54224,7 +54209,7 @@
"fFv" = ( "fFv" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel/dark, /turf/open/floor/plasteel/dark,
@@ -54362,7 +54347,7 @@
"gdL" = ( "gdL" = (
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/effect/turf_decal/tile/purple{ /obj/effect/turf_decal/tile/purple{
@@ -56363,7 +56348,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -27 pixel_x = -27
}, },
/obj/effect/turf_decal/tile/green{ /obj/effect/turf_decal/tile/green{
@@ -59450,7 +59435,6 @@
pixel_y = 6 pixel_y = 6
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 27 pixel_y = 27
}, },
/turf/open/floor/plasteel/cafeteria, /turf/open/floor/plasteel/cafeteria,
@@ -59851,7 +59835,6 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/obj/effect/turf_decal/tile/red{ /obj/effect/turf_decal/tile/red{
@@ -60093,7 +60076,7 @@
}, },
/obj/item/hand_labeler, /obj/item/hand_labeler,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 28 pixel_x = 28
}, },
/obj/machinery/light{ /obj/machinery/light{
@@ -61756,7 +61739,6 @@
dir = 4 dir = 4
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 1;
pixel_y = 29 pixel_y = 29
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
+14 -14
View File
@@ -3398,7 +3398,7 @@
/area/centcom/supply) /area/centcom/supply)
"iS" = ( "iS" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/brown{ /obj/effect/turf_decal/tile/brown{
@@ -3883,7 +3883,7 @@
/area/centcom/control) /area/centcom/control)
"jV" = ( "jV" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/stripes/line{ /obj/effect/turf_decal/stripes/line{
@@ -4231,7 +4231,7 @@
icon_state = "plant-22" icon_state = "plant-22"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -5775,7 +5775,7 @@
req_access_txt = "109" req_access_txt = "109"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -5799,7 +5799,7 @@
req_access_txt = "109" req_access_txt = "109"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -6866,7 +6866,7 @@
/area/centcom/ferry) /area/centcom/ferry)
"pM" = ( "pM" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/machinery/atmospherics/components/unary/vent_pump/on{ /obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -6893,7 +6893,7 @@
/obj/item/clothing/gloves/color/black, /obj/item/clothing/gloves/color/black,
/obj/item/clothing/glasses/eyepatch, /obj/item/clothing/glasses/eyepatch,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/turf/open/floor/plasteel/grimy, /turf/open/floor/plasteel/grimy,
@@ -9214,7 +9214,7 @@
pixel_y = -32 pixel_y = -32
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -11017,7 +11017,7 @@
dir = 8 dir = 8
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/blue{ /obj/effect/turf_decal/tile/blue{
@@ -12323,7 +12323,7 @@
/obj/item/book/manual/wiki/security_space_law, /obj/item/book/manual/wiki/security_space_law,
/obj/item/taperecorder, /obj/item/taperecorder,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -12390,7 +12390,7 @@
"CM" = ( "CM" = (
/obj/structure/filingcabinet/medical, /obj/structure/filingcabinet/medical,
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
@@ -14511,7 +14511,7 @@
/area/tdome/tdomeobserve) /area/tdome/tdomeobserve)
"Hq" = ( "Hq" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 4; dir = 8;
pixel_x = 24 pixel_x = 24
}, },
/turf/open/floor/plasteel/white, /turf/open/floor/plasteel/white,
@@ -14554,7 +14554,7 @@
/area/tdome/tdomeobserve) /area/tdome/tdomeobserve)
"Hu" = ( "Hu" = (
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar,
@@ -15835,7 +15835,7 @@
icon_state = "plant-21" icon_state = "plant-21"
}, },
/obj/machinery/firealarm{ /obj/machinery/firealarm{
dir = 8; dir = 4;
pixel_x = -24 pixel_x = -24
}, },
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
+1
View File
@@ -12,6 +12,7 @@
#define APPRENTICE_BLUESPACE "bluespace" #define APPRENTICE_BLUESPACE "bluespace"
#define APPRENTICE_ROBELESS "robeless" #define APPRENTICE_ROBELESS "robeless"
#define APPRENTICE_HEALING "healing" #define APPRENTICE_HEALING "healing"
#define APPRENTICE_MARTIAL "martial"
//ERT Types //ERT Types
+9 -8
View File
@@ -9,12 +9,13 @@
#define META_GAS_FUSION_POWER 7 #define META_GAS_FUSION_POWER 7
//ATMOS //ATMOS
//stuff you should probably leave well alone! //stuff you should probably leave well alone!
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol) #define R_IDEAL_GAS_EQUATION 8.31446261815324 //kPa*L/(K*mol)
#define ONE_ATMOSPHERE 101.325 //kPa #define ONE_ATMOSPHERE 101.325 //kPa
#define TCMB 2.7 // -270.3degC #define TCMB 2.7 // -270.3degC
#define TCRYO 225 // -48.15degC #define TCRYO 225 // -48.15degC
#define T0C 273.15 // 0degC #define T0C 273.15 // 0degC
#define T20C 293.15 // 20degC #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 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 #define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005) //compared against for superconductivity
@@ -149,9 +150,9 @@
//OPEN TURF ATMOS //OPEN TURF ATMOS
#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn #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 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 #define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program
//ATMOSPHERICS DEPARTMENT GAS TANK TURFS //ATMOSPHERICS DEPARTMENT GAS TANK TURFS
+2 -2
View File
@@ -57,9 +57,9 @@
#define BALLS_SACK_SIZE_DEF 8 #define BALLS_SACK_SIZE_DEF 8
#define BALLS_SACK_SIZE_MAX 40 #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_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_MIN 1//inches
#define EGG_GIRTH_DEF 6 #define EGG_GIRTH_DEF 6
+12 -5
View File
@@ -36,8 +36,10 @@
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
// /datum signals // /datum signals
#define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component) #define COMSIG_COMPONENT_ADDED "component_added" //sent to the new datum parent when a component is added to them: (/datum/component)
#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component) #define COMSIG_COMPONENT_REMOVING "component_removing" //sent to the datum parent before a component is removed from them because of RemoveComponent: (/datum/component)
#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent" //sent to the component itself when unregistered from a parent
#define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent" //sent to the component itself when registered to a parent
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation #define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
#define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called #define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
@@ -150,13 +152,16 @@
#define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination) #define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination)
// /mind signals // /mind signals
#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to(): (new_character, old_character) #define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character)
#define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening.
#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to() when it's done: (new_character, old_character)
// /mob signals // /mob signals
#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A) #define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A)
#define COMPONENT_ALLOW_EXAMINE 1 #define COMPONENT_ALLOW_EXAMINE 1
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed) #define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse) #define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat.
#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize)
#define COMPONENT_BLOCK_GHOSTING 1 #define COMPONENT_BLOCK_GHOSTING 1
#define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj #define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj
#define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources) #define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources)
@@ -168,7 +173,9 @@
#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) #define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters)
#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params)
#define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target) #define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target)
#define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey() #define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey(): (new_character, old_character)
#define COMSIG_MOB_PRE_PLAYER_CHANGE "mob_pre_player_change" //sent to the target mob from base of /mob/transfer_ckey() and /mind/transfer_to(): (our_character, their_character)
// #define COMPONENT_STOP_MIND_TRANSFER 1
#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //from base of /mob/update_sight(): () #define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //from base of /mob/update_sight(): ()
#define COMSIG_MOB_SAY "mob_say" // from /mob/living/say(): (proc args list) #define COMSIG_MOB_SAY "mob_say" // from /mob/living/say(): (proc args list)
#define COMPONENT_UPPERCASE_SPEECH 1 #define COMPONENT_UPPERCASE_SPEECH 1
+2
View File
@@ -118,6 +118,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define ismouse(A) (istype(A, /mob/living/simple_animal/mouse)) #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 isslime(A) (istype(A, /mob/living/simple_animal/slime))
#define isdrone(A) (istype(A, /mob/living/simple_animal/drone)) #define isdrone(A) (istype(A, /mob/living/simple_animal/drone))
+4 -2
View File
@@ -59,11 +59,13 @@
#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow. #define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow.
#define LIGHTING_PLANE_ALPHA_VISIBLE 255 #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_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_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 LIGHTING_PLANE_ALPHA_INVISIBLE 0
#define NIGHT_VISION_DARKSIGHT_RANGE 3
//lighting area defines //lighting area defines
#define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness) #define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness)
#define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled #define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled
@@ -80,4 +82,4 @@
#define FLASH_LIGHT_DURATION 2 #define FLASH_LIGHT_DURATION 2
#define FLASH_LIGHT_POWER 3 #define FLASH_LIGHT_POWER 3
#define FLASH_LIGHT_RANGE 3.8 #define FLASH_LIGHT_RANGE 3.8
+1
View File
@@ -57,6 +57,7 @@
#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG" #define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG"
#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY" #define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
#define MOVESPEED_ID_TASED_STATUS "TASED" #define MOVESPEED_ID_TASED_STATUS "TASED"
+2
View File
@@ -68,6 +68,8 @@
#define STATUS_EFFECT_SAWBLEED /datum/status_effect/saw_bleed //if the bleed builds up enough, takes a ton of damage #define STATUS_EFFECT_SAWBLEED /datum/status_effect/saw_bleed //if the bleed builds up enough, takes a ton of damage
#define STATUS_EFFECT_NECKSLICE /datum/status_effect/neck_slice //Creates the flavor messages for the neck-slice
#define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse #define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse
#define CURSE_BLINDING 1 //makes the edges of the target's screen obscured #define CURSE_BLINDING 1 //makes the edges of the target's screen obscured
#define CURSE_SPAWNING 2 //spawns creatures that attack the target only #define CURSE_SPAWNING 2 //spawns creatures that attack the target only
+2
View File
@@ -66,6 +66,7 @@
#define TRAIT_HUSK "husk" #define TRAIT_HUSK "husk"
#define TRAIT_NOCLONE "noclone" #define TRAIT_NOCLONE "noclone"
#define TRAIT_CLUMSY "clumsy" #define TRAIT_CLUMSY "clumsy"
#define TRAIT_CHUNKYFINGERS "chunkyfingers" //means that you can't use weapons with normal trigger guards.
#define TRAIT_DUMB "dumb" #define TRAIT_DUMB "dumb"
#define TRAIT_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE #define TRAIT_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE
#define TRAIT_PACIFISM "pacifism" #define TRAIT_PACIFISM "pacifism"
@@ -223,5 +224,6 @@
#define LOCKED_HELMET_TRAIT "locked-helmet" #define LOCKED_HELMET_TRAIT "locked-helmet"
#define NINJA_SUIT_TRAIT "ninja-suit" #define NINJA_SUIT_TRAIT "ninja-suit"
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant" #define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
#define SLEEPING_CARP_TRAIT "sleeping_carp"
#define ABDUCTOR_ANTAGONIST "abductor-antagonist" #define ABDUCTOR_ANTAGONIST "abductor-antagonist"
#define MADE_UNCLONEABLE "made-uncloneable" #define MADE_UNCLONEABLE "made-uncloneable"
+19 -1
View File
@@ -95,4 +95,22 @@ GLOBAL_VAR_INIT(cmp_field, "name")
return sorttext(A.sample_object.name, B.sample_object.name) return sorttext(A.sample_object.name, B.sample_object.name)
/proc/cmp_numbered_displays_name_dsc(datum/numbered_display/A, datum/numbered_display/B) /proc/cmp_numbered_displays_name_dsc(datum/numbered_display/A, datum/numbered_display/B)
return sorttext(B.sample_object.name, A.sample_object.name) return sorttext(B.sample_object.name, A.sample_object.name)
/proc/cmp_quirk_asc(datum/quirk/A, datum/quirk/B)
var/a_sign = num2sign(initial(A.value) * -1)
var/b_sign = num2sign(initial(B.value) * -1)
// Neutral traits go last.
if(a_sign == 0)
a_sign = 2
if(b_sign == 0)
b_sign = 2
var/a_name = initial(A.name)
var/b_name = initial(B.name)
if(a_sign != b_sign)
return a_sign - b_sign
else
return sorttext(b_name, a_name)
+2
View File
@@ -320,6 +320,8 @@
parts += "[FOURSPACES][FOURSPACES][str]" parts += "[FOURSPACES][FOURSPACES][str]"
for(var/entry in mode.threat_tallies) for(var/entry in mode.threat_tallies)
parts += "[FOURSPACES][FOURSPACES][entry] added [mode.threat_tallies[entry]]" 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>") return parts.Join("<br>")
/client/proc/roundend_report_file() /client/proc/roundend_report_file()
+9 -1
View File
@@ -1548,4 +1548,12 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
/proc/CallAsync(datum/source, proctype, list/arguments) /proc/CallAsync(datum/source, proctype, list/arguments)
set waitfor = FALSE set waitfor = FALSE
return call(source, proctype)(arglist(arguments)) return call(source, proctype)(arglist(arguments))
/proc/num2sign(numeric)
if(numeric > 0)
return 1
else if(numeric < 0)
return -1
else
return 0
+10
View File
@@ -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." desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already."
icon_state = "high" 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 /obj/screen/alert/hypnosis
name = "Hypnosis" name = "Hypnosis"
desc = "Something's hypnotizing you, but you're not really sure about what." desc = "Something's hypnotizing you, but you're not really sure about what."
@@ -379,3 +379,10 @@
/datum/config_entry/number/auto_transfer_delay /datum/config_entry/number/auto_transfer_delay
config_entry_value = 72000 config_entry_value = 72000
min_val = 0 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
+26 -12
View File
@@ -12,6 +12,7 @@ SUBSYSTEM_DEF(persistence)
var/list/obj/structure/chisel_message/chisel_messages = list() var/list/obj/structure/chisel_message/chisel_messages = list()
var/list/saved_messages = list() var/list/saved_messages = list()
var/list/saved_modes = list(1,2,3) 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_threat_levels = list(1,1,1)
var/list/saved_maps var/list/saved_maps
var/list/saved_trophies = list() var/list/saved_trophies = list()
@@ -227,7 +228,10 @@ SUBSYSTEM_DEF(persistence)
CollectSecretSatchels() CollectSecretSatchels()
CollectTrophies() CollectTrophies()
CollectRoundtype() CollectRoundtype()
CollectThreatLevel() if(istype(SSticker.mode, /datum/game_mode/dynamic))
var/datum/game_mode/dynamic/mode = SSticker.mode
CollectThreatLevel(mode)
CollectRulesets(mode)
RecordMaps() RecordMaps()
SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION.
if(CONFIG_GET(flag/use_antag_rep)) if(CONFIG_GET(flag/use_antag_rep))
@@ -384,17 +388,27 @@ SUBSYSTEM_DEF(persistence)
fdel(json_file) fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data)) WRITE_FILE(json_file, json_encode(file_data))
/datum/controller/subsystem/persistence/proc/CollectThreatLevel() /datum/controller/subsystem/persistence/proc/CollectThreatLevel(var/datum/game_mode/dynamic/mode)
if(istype(SSticker.mode, /datum/game_mode/dynamic)) saved_threat_levels[3] = saved_threat_levels[2]
var/datum/game_mode/dynamic/mode = SSticker.mode saved_threat_levels[2] = saved_threat_levels [1]
saved_threat_levels[3] = saved_threat_levels[2] saved_threat_levels[1] = mode.threat_level
saved_threat_levels[2] = saved_threat_levels [1] var/json_file = file("data/RecentThreatLevels.json")
saved_threat_levels[1] = mode.threat_level var/list/file_data = list()
var/json_file = file("data/RecentThreatLevels.json") file_data["data"] = saved_threat_levels
var/list/file_data = list() fdel(json_file)
file_data["data"] = saved_threat_levels WRITE_FILE(json_file, json_encode(file_data))
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() /datum/controller/subsystem/persistence/proc/RecordMaps()
saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]") saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]")
+28 -20
View File
@@ -12,27 +12,40 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
var/list/quirk_names_by_path = list() var/list/quirk_names_by_path = list()
var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad
var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process
var/list/quirk_blacklist = list() //A list a list of quirks that can not be used with each other. Format: list(quirk1,quirk2),list(quirk3,quirk4)
/datum/controller/subsystem/processing/quirks/Initialize(timeofday) /datum/controller/subsystem/processing/quirks/Initialize(timeofday)
if(!quirks.len) if(!quirks.len)
SetupQuirks() SetupQuirks()
quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic"),list("Ageusia","Deviant Tastes"),list("Ananas Affinity","Ananas Aversion"))
return ..() return ..()
/datum/controller/subsystem/processing/quirks/proc/SetupQuirks() /datum/controller/subsystem/processing/quirks/proc/SetupQuirks()
for(var/V in subtypesof(/datum/quirk)) // Sort by Positive, Negative, Neutral; and then by name
var/list/quirk_list = sortList(subtypesof(/datum/quirk), /proc/cmp_quirk_asc)
for(var/V in quirk_list)
var/datum/quirk/T = V var/datum/quirk/T = V
quirks[initial(T.name)] = T quirks[initial(T.name)] = T
quirk_points[initial(T.name)] = initial(T.value) quirk_points[initial(T.name)] = initial(T.value)
quirk_names_by_path[T] = initial(T.name) quirk_names_by_path[T] = initial(T.name)
/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target) /datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target)
GenerateQuirks(cli) var/badquirk = FALSE
var/list/quirks = cli.prefs.character_quirks.Copy() var/list/my_quirks = cli.prefs.all_quirks.Copy()
var/list/cut var/list/cut
if(job && job.blacklisted_quirks) if(job?.blacklisted_quirks)
cut = filter_quirks(quirks, job) cut = filter_quirks(my_quirks, job)
for(var/V in quirks) for(var/V in my_quirks)
user.add_quirk(V, spawn_effects) var/datum/quirk/Q = quirks[V]
if(Q)
user.add_quirk(Q, spawn_effects)
else
stack_trace("Invalid quirk \"[V]\" in client [cli.ckey] preferences")
cli.prefs.all_quirks -= V
badquirk = TRUE
if(badquirk)
cli.prefs.save_character()
if(!silent && LAZYLEN(cut)) if(!silent && LAZYLEN(cut))
to_chat(to_chat_target || user, "<span class='boldwarning'>All of your non-neutral character quirks have been cut due to these quirks conflicting with your job assignment: [english_list(cut)].</span>") to_chat(to_chat_target || user, "<span class='boldwarning'>All of your non-neutral character quirks have been cut due to these quirks conflicting with your job assignment: [english_list(cut)].</span>")
@@ -50,28 +63,28 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
for(var/i in quirk_names) for(var/i in quirk_names)
. += quirk_points_by_name(i) . += quirk_points_by_name(i)
/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/quirks, datum/job/job) /datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, datum/job/job)
var/list/cut = list() var/list/cut = list()
var/list/banned_names = list() var/list/banned_names = list()
for(var/i in job.blacklisted_quirks) for(var/i in job.blacklisted_quirks)
var/name = quirk_name_by_path(i) var/name = quirk_name_by_path(i)
if(name) if(name)
banned_names += name banned_names += name
var/list/blacklisted = quirks & banned_names var/list/blacklisted = our_quirks & banned_names
if(length(blacklisted)) if(length(blacklisted))
for(var/i in blacklisted) for(var/i in blacklisted)
quirks -= i our_quirks -= i
cut += i cut += i
/* //Code to automatically reduce positive quirks until balance is even. /* //Code to automatically reduce positive quirks until balance is even.
var/points_used = total_points(quirks) var/points_used = total_points(our_quirks)
if(points_used > 0) if(points_used > 0)
//they owe us points, let's collect. //they owe us points, let's collect.
for(var/i in quirks) for(var/i in our_quirks)
var/points = quirk_points_by_name(i) var/points = quirk_points_by_name(i)
if(points > 0) if(points > 0)
cut += i cut += i
quirks -= i our_quirks -= i
points_used -= points points_used -= points
if(points_used <= 0) if(points_used <= 0)
break break
@@ -79,14 +92,9 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
//Nah, let's null all non-neutrals out. //Nah, let's null all non-neutrals out.
if(cut.len) if(cut.len)
for(var/i in quirks) for(var/i in our_quirks)
if(quirk_points_by_name(i) != 0) if(quirk_points_by_name(i) != 0)
//cut += i -- Commented out: Only show the ones that triggered the quirk purge. //cut += i -- Commented out: Only show the ones that triggered the quirk purge.
quirks -= i our_quirks -= i
return cut return cut
/datum/controller/subsystem/processing/quirks/proc/GenerateQuirks(client/user)
if(user.prefs.character_quirks.len)
return
user.prefs.character_quirks = user.prefs.all_quirks
+2 -2
View File
@@ -384,8 +384,8 @@ SUBSYSTEM_DEF(ticker)
captainless=0 captainless=0
if(player.mind.assigned_role != player.mind.special_role) if(player.mind.assigned_role != player.mind.special_role)
SSjob.EquipRank(N, player.mind.assigned_role, 0) SSjob.EquipRank(N, player.mind.assigned_role, 0)
if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character)) if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character))
SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N) SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N)
CHECK_TICK CHECK_TICK
if(captainless) if(captainless)
for(var/mob/dead/new_player/N in GLOB.player_list) for(var/mob/dead/new_player/N in GLOB.player_list)
+2 -2
View File
@@ -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/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/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/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/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/abductor/gizmo, /obj/item/clothing/under/rank/centcom_officer,
/obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec, /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, "aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
/obj/structure/alien, /obj/item/toy/toy_xeno, /obj/structure/alien, /obj/item/toy/toy_xeno,
/obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien, /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/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/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, /obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland,
+2 -2
View File
@@ -53,7 +53,7 @@
// If you want/expect to be moving the component around between parents, use this to register on the parent for signals // If you want/expect to be moving the component around between parents, use this to register on the parent for signals
/datum/component/proc/RegisterWithParent() /datum/component/proc/RegisterWithParent()
return SEND_SIGNAL(src, COMSIG_COMPONENT_REGISTER_PARENT) //CITADEL EDIT
/datum/component/proc/Initialize(...) /datum/component/proc/Initialize(...)
return return
@@ -85,7 +85,7 @@
UnregisterFromParent() UnregisterFromParent()
/datum/component/proc/UnregisterFromParent() /datum/component/proc/UnregisterFromParent()
return SEND_SIGNAL(src, COMSIG_COMPONENT_UNREGISTER_PARENT) //CITADEL EDIT
/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE) /datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE)
if(QDELETED(src) || QDELETED(target)) if(QDELETED(src) || QDELETED(target))
+2
View File
@@ -19,12 +19,14 @@
src.damage_multiplier = damage_multiplier src.damage_multiplier = damage_multiplier
/datum/component/bane/RegisterWithParent() /datum/component/bane/RegisterWithParent()
. = ..()
if(speciestype) if(speciestype)
RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/speciesCheck) RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/speciesCheck)
else else
RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/mobCheck) RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/mobCheck)
/datum/component/bane/UnregisterFromParent() /datum/component/bane/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, COMSIG_ITEM_AFTERATTACK) UnregisterSignal(parent, COMSIG_ITEM_AFTERATTACK)
/datum/component/bane/proc/speciesCheck(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) /datum/component/bane/proc/speciesCheck(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
+2
View File
@@ -21,9 +21,11 @@
RegisterSignal(parent, bounce, .proc/bounce_up) RegisterSignal(parent, bounce, .proc/bounce_up)
/datum/component/bouncy/RegisterWithParent() /datum/component/bouncy/RegisterWithParent()
. = ..()
RegisterSignal(parent, bounce_signals, .proc/bounce_up) RegisterSignal(parent, bounce_signals, .proc/bounce_up)
/datum/component/bouncy/UnregisterFromParent() /datum/component/bouncy/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, bounce_signals) UnregisterSignal(parent, bounce_signals)
/datum/component/bouncy/proc/bounce_up(datum/source) /datum/component/bouncy/proc/bounce_up(datum/source)
+35 -1
View File
@@ -23,17 +23,51 @@
RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/onItemAttack) RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/onItemAttack)
/datum/component/butchering/proc/onItemAttack(obj/item/source, mob/living/M, mob/living/user) /datum/component/butchering/proc/onItemAttack(obj/item/source, mob/living/M, mob/living/user)
if(user.a_intent == INTENT_HARM && M.stat == DEAD && (M.butcher_results || M.guaranteed_butcher_results)) //can we butcher it? if(user.a_intent != INTENT_HARM)
return
if(M.stat == DEAD && (M.butcher_results || M.guaranteed_butcher_results)) //can we butcher it?
if(butchering_enabled && (can_be_blunt || source.get_sharpness())) if(butchering_enabled && (can_be_blunt || source.get_sharpness()))
INVOKE_ASYNC(src, .proc/startButcher, source, M, user) INVOKE_ASYNC(src, .proc/startButcher, source, M, user)
return COMPONENT_ITEM_NO_ATTACK return COMPONENT_ITEM_NO_ATTACK
if(ishuman(M) && source.force && source.get_sharpness())
var/mob/living/carbon/human/H = M
if((H.health <= H.crit_threshold || (user.pulling == H && user.grab_state >= GRAB_NECK) || H.IsSleeping()) && user.zone_selected == BODY_ZONE_HEAD) // Only sleeping, neck grabbed, or crit, can be sliced.
if(H.has_status_effect(/datum/status_effect/neck_slice))
user.show_message("<span class='warning'>[H]'s neck has already been already cut, you can't make the bleeding any worse!</span>", 1, \
"<span class='warning'>Their neck has already been already cut, you can't make the bleeding any worse!</span>")
return COMPONENT_ITEM_NO_ATTACK
INVOKE_ASYNC(src, .proc/startNeckSlice, source, H, user)
return COMPONENT_ITEM_NO_ATTACK
/datum/component/butchering/proc/startButcher(obj/item/source, mob/living/M, mob/living/user) /datum/component/butchering/proc/startButcher(obj/item/source, mob/living/M, mob/living/user)
to_chat(user, "<span class='notice'>You begin to butcher [M]...</span>") to_chat(user, "<span class='notice'>You begin to butcher [M]...</span>")
playsound(M.loc, butcher_sound, 50, TRUE, -1) playsound(M.loc, butcher_sound, 50, TRUE, -1)
if(do_mob(user, M, speed) && M.Adjacent(source)) if(do_mob(user, M, speed) && M.Adjacent(source))
Butcher(user, M) Butcher(user, M)
/datum/component/butchering/proc/startNeckSlice(obj/item/source, mob/living/carbon/human/H, mob/living/user)
user.visible_message("<span class='danger'>[user] is slitting [H]'s throat!</span>", \
"<span class='danger'>You start slicing [H]'s throat!</span>", \
"<span class='notice'>You hear a cutting noise!</span>", ignored_mobs = H)
H.show_message("<span class='userdanger'>Your throat is being slit by [user]!</span>", 1, \
"<span class = 'userdanger'>Something is cutting into your neck!</span>", NONE)
log_combat(user, H, "starts slicing the throat of")
playsound(H.loc, butcher_sound, 50, TRUE, -1)
if(do_mob(user, H, CLAMP(500 / source.force, 30, 100)) && H.Adjacent(source))
if(H.has_status_effect(/datum/status_effect/neck_slice))
user.show_message("<span class='warning'>[H]'s neck has already been already cut, you can't make the bleeding any worse!</span>", 1, \
"<span class='warning'>Their neck has already been already cut, you can't make the bleeding any worse!</span>")
return
H.visible_message("<span class='danger'>[user] slits [H]'s throat!</span>", \
"<span class='userdanger'>[user] slits your throat...</span>")
log_combat(user, H, "finishes slicing the throat of")
H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD)
H.bleed_rate = CLAMP(H.bleed_rate + 20, 0, 30)
H.apply_status_effect(/datum/status_effect/neck_slice)
/datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat) /datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat)
var/turf/T = meat.drop_location() var/turf/T = meat.drop_location()
var/final_effectiveness = effectiveness - meat.butcher_difficulty var/final_effectiveness = effectiveness - meat.butcher_difficulty
+2
View File
@@ -17,6 +17,7 @@
apply() apply()
/datum/component/decal/RegisterWithParent() /datum/component/decal/RegisterWithParent()
. = ..()
if(first_dir) if(first_dir)
RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react) RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react)
if(cleanable) if(cleanable)
@@ -25,6 +26,7 @@
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
/datum/component/decal/UnregisterFromParent() /datum/component/decal/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE)) UnregisterSignal(parent, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE))
/datum/component/decal/Destroy() /datum/component/decal/Destroy()
@@ -30,11 +30,13 @@
return ..() return ..()
/datum/component/fantasy/RegisterWithParent() /datum/component/fantasy/RegisterWithParent()
. = ..()
var/obj/item/master = parent var/obj/item/master = parent
originalName = master.name originalName = master.name
modify() modify()
/datum/component/fantasy/UnregisterFromParent() /datum/component/fantasy/UnregisterFromParent()
. = ..()
unmodify() unmodify()
/datum/component/fantasy/InheritComponent(datum/component/fantasy/newComp, original, list/arguments) /datum/component/fantasy/InheritComponent(datum/component/fantasy/newComp, original, list/arguments)
+2
View File
@@ -9,6 +9,7 @@
src.fire_stacks = fire_stacks src.fire_stacks = fire_stacks
/datum/component/igniter/RegisterWithParent() /datum/component/igniter/RegisterWithParent()
. = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent)) else if(isitem(parent))
@@ -17,6 +18,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/igniter/UnregisterFromParent() /datum/component/igniter/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) /datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
+2
View File
@@ -10,6 +10,7 @@
src.throw_anchored = throw_anchored src.throw_anchored = throw_anchored
/datum/component/knockback/RegisterWithParent() /datum/component/knockback/RegisterWithParent()
. = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent)) else if(isitem(parent))
@@ -18,6 +19,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/knockback/UnregisterFromParent() /datum/component/knockback/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) /datum/component/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
+2
View File
@@ -10,6 +10,7 @@
src.flat_heal = flat_heal src.flat_heal = flat_heal
/datum/component/lifesteal/RegisterWithParent() /datum/component/lifesteal/RegisterWithParent()
. = ..()
if(isgun(parent)) if(isgun(parent))
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent)) else if(isitem(parent))
@@ -18,6 +19,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/lifesteal/UnregisterFromParent() /datum/component/lifesteal/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/lifesteal/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) /datum/component/lifesteal/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
-9
View File
@@ -150,15 +150,6 @@
if(9) if(9)
setSanity(sanity+0.4, maximum=SANITY_GREAT) setSanity(sanity+0.4, maximum=SANITY_GREAT)
if(HAS_TRAIT(owner, TRAIT_DEPRESSION))
if(prob(0.05))
add_event(null, "depression", /datum/mood_event/depression)
clear_event(null, "jolly")
if(HAS_TRAIT(owner, TRAIT_JOLLY))
if(prob(0.05))
add_event(null, "jolly", /datum/mood_event/jolly)
clear_event(null, "depression")
HandleNutrition(owner) HandleNutrition(owner)
/datum/component/mood/proc/setSanity(amount, minimum=SANITY_INSANE, maximum=SANITY_NEUTRAL)//I'm sure bunging this in here will have no negative repercussions. /datum/component/mood/proc/setSanity(amount, minimum=SANITY_INSANE, maximum=SANITY_NEUTRAL)//I'm sure bunging this in here will have no negative repercussions.
+2
View File
@@ -34,6 +34,7 @@
cloud_sync() cloud_sync()
/datum/component/nanites/RegisterWithParent() /datum/component/nanites/RegisterWithParent()
. = ..()
RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites) RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites)
RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data) RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data)
RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs) RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs)
@@ -57,6 +58,7 @@
RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal) RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal)
/datum/component/nanites/UnregisterFromParent() /datum/component/nanites/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_HAS_NANITES, UnregisterSignal(parent, list(COMSIG_HAS_NANITES,
COMSIG_NANITE_UI_DATA, COMSIG_NANITE_UI_DATA,
COMSIG_NANITE_GET_PROGRAMS, COMSIG_NANITE_GET_PROGRAMS,
+2
View File
@@ -20,12 +20,14 @@
begin_orbit(orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation) begin_orbit(orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
/datum/component/orbiter/RegisterWithParent() /datum/component/orbiter/RegisterWithParent()
. = ..()
var/atom/target = parent var/atom/target = parent
while(ismovableatom(target)) while(ismovableatom(target))
RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react) RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react)
target = target.loc target = target.loc
/datum/component/orbiter/UnregisterFromParent() /datum/component/orbiter/UnregisterFromParent()
. = ..()
var/atom/target = parent var/atom/target = parent
while(ismovableatom(target)) while(ismovableatom(target))
UnregisterSignal(target, COMSIG_MOVABLE_MOVED) UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
+2
View File
@@ -13,10 +13,12 @@
src.override_projectile_range = override_projectile_range src.override_projectile_range = override_projectile_range
/datum/component/shrapnel/RegisterWithParent() /datum/component/shrapnel/RegisterWithParent()
. = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
/datum/component/shrapnel/UnregisterFromParent() /datum/component/shrapnel/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_PROJECTILE_ON_HIT)) UnregisterSignal(parent, list(COMSIG_PROJECTILE_ON_HIT))
/datum/component/shrapnel/proc/projectile_hit(atom/fired_from, atom/movable/firer, atom/target, Angle) /datum/component/shrapnel/proc/projectile_hit(atom/fired_from, atom/movable/firer, atom/target, Angle)
+42
View File
@@ -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
..()
+2
View File
@@ -24,6 +24,7 @@
src.faction = faction src.faction = faction
/datum/component/summoning/RegisterWithParent() /datum/component/summoning/RegisterWithParent()
. = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent)) else if(isitem(parent))
@@ -32,6 +33,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/summoning/UnregisterFromParent() /datum/component/summoning/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) /datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
+2
View File
@@ -9,10 +9,12 @@
src.allowed_slot = allowed_slot src.allowed_slot = allowed_slot
/datum/component/tactical/RegisterWithParent() /datum/component/tactical/RegisterWithParent()
. = ..()
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/modify) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/modify)
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/unmodify) RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/unmodify)
/datum/component/tactical/UnregisterFromParent() /datum/component/tactical/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
unmodify() unmodify()
+205 -88
View File
@@ -1,128 +1,245 @@
/**
* The virtual reality turned component.
* Originally created to overcome issues of mob polymorphing locking the player inside virtual reality
* and allow for a more "immersive" virtual reality in a virtual reality experience.
* It relies on comically complex order of logic, expect things to break if procs such as mind/transfer_to() are revamped.
* In short, a barebone not so hardcoded VR framework.
* If you plan to add more devices that make use of this component, remember to isolate their code outta here where possible.
*/
/datum/component/virtual_reality /datum/component/virtual_reality
can_transfer = TRUE can_transfer = TRUE
var/datum/mind/mastermind // where is my mind t. pixies //the player's mind (not the parent's), should something happen to them or to their mob.
var/datum/mind/mastermind
//the current mob's mind, which we need to keep track for mind transfer.
var/datum/mind/current_mind var/datum/mind/current_mind
var/obj/machinery/vr_sleeper/vr_sleeper //the action datum used by the mob to quit the vr session.
var/datum/action/quit_vr/quit_action var/datum/action/quit_vr/quit_action
//This one's name should be self explainatory, currently used for emags.
var/you_die_in_the_game_you_die_for_real = FALSE var/you_die_in_the_game_you_die_for_real = FALSE
var/datum/component/virtual_reality/inception //The component works on a very fragile link betwixt mind, ckey and death. //Used to allow people to play recursively playing vr while playing vr without many issues.
var/datum/component/virtual_reality/level_below
var/datum/component/virtual_reality/level_above
//Used to stop the component from executing certain functions that'd cause us some issues otherwise.
//FALSE if there is a connected player, otherwise TRUE.
var/session_paused = TRUE
//Used to stop unwarranted behaviour from happening in cases where the master mind transference is unsupported. Set on Initialize().
var/allow_mastermind_transfer = FALSE
/datum/component/virtual_reality/Initialize(mob/M, obj/machinery/vr_sleeper/gaming_pod, yolo = FALSE, new_char = TRUE) /datum/component/virtual_reality/Initialize(yolo = FALSE, _allow_mastermind_transfer = FALSE)
if(!ismob(parent) || !istype(M)) var/mob/M = parent
if(!istype(M) || !M.mind)
return COMPONENT_INCOMPATIBLE return COMPONENT_INCOMPATIBLE
var/mob/vr_M = parent
mastermind = M.mind
RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over)
RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/switch_player)
RegisterSignal(mastermind, COMSIG_MIND_TRANSFER, .proc/switch_player)
you_die_in_the_game_you_die_for_real = yolo you_die_in_the_game_you_die_for_real = yolo
quit_action = new() allow_mastermind_transfer = _allow_mastermind_transfer
if(gaming_pod) quit_action = new
vr_sleeper = gaming_pod
RegisterSignal(vr_sleeper, COMSIG_ATOM_EMAG_ACT, .proc/you_only_live_once) /datum/component/virtual_reality/Destroy()
RegisterSignal(vr_sleeper, COMSIG_MACHINE_EJECT_OCCUPANT, .proc/revert_to_reality) QDEL_NULL(quit_action)
vr_M.ckey = M.ckey if(level_above)
var/datum/component/virtual_reality/clusterfk = M.GetComponent(/datum/component/virtual_reality) level_above.level_below = null
if(clusterfk && !clusterfk.inception) level_above = null
clusterfk.inception = src if(level_below)
SStgui.close_user_uis(M, src) level_below.level_above = null
level_below = null
return ..()
/datum/component/virtual_reality/RegisterWithParent() /datum/component/virtual_reality/RegisterWithParent()
. = ..()
var/mob/M = parent var/mob/M = parent
current_mind = M.mind current_mind = M.mind
if(!quit_action)
quit_action = new
quit_action.Grant(M) quit_action.Grant(M)
RegisterSignal(quit_action, COMSIG_ACTION_TRIGGER, .proc/revert_to_reality) RegisterSignal(quit_action, COMSIG_ACTION_TRIGGER, .proc/action_trigger)
RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over) RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over)
RegisterSignal(M, COMSIG_MOB_GHOSTIZE, .proc/be_a_quitter) RegisterSignal(M, COMSIG_MOB_GHOSTIZE, .proc/be_a_quitter)
RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/pass_me_the_remote) RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/on_player_transfer)
RegisterSignal(current_mind, COMSIG_MIND_TRANSFER, .proc/pass_me_the_remote) RegisterSignal(current_mind, COMSIG_MIND_TRANSFER, .proc/on_player_transfer)
mastermind.current.audiovisual_redirect = M RegisterSignal(current_mind, COMSIG_PRE_MIND_TRANSFER, .proc/pre_player_transfer)
if(vr_sleeper) if(mastermind?.current)
vr_sleeper.vr_mob = M mastermind.current.audiovisual_redirect = M
/datum/component/virtual_reality/UnregisterFromParent() /datum/component/virtual_reality/UnregisterFromParent()
quit_action.Remove(parent) . = ..()
if(quit_action)
quit_action.Remove(parent)
UnregisterSignal(quit_action, COMSIG_ACTION_TRIGGER)
UnregisterSignal(parent, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_KEY_CHANGE, COMSIG_MOB_GHOSTIZE)) UnregisterSignal(parent, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_KEY_CHANGE, COMSIG_MOB_GHOSTIZE))
UnregisterSignal(current_mind, COMSIG_MIND_TRANSFER) UnregisterSignal(current_mind, list(COMSIG_MIND_TRANSFER, COMSIG_PRE_MIND_TRANSFER))
UnregisterSignal(quit_action, COMSIG_ACTION_TRIGGER)
current_mind = null current_mind = null
mastermind.current.audiovisual_redirect = null if(mastermind?.current)
mastermind.current.audiovisual_redirect = null
/datum/component/virtual_reality/proc/switch_player(datum/source, mob/new_mob, mob/old_mob) /**
if(vr_sleeper || !new_mob.mind) * Called when attempting to connect a mob to a virtual reality mob.
// Machineries currently don't deal up with the occupant being polymorphed et similar... Or did something fuck up? * This will return FALSE if the mob is without player or dead. TRUE otherwise
revert_to_reality() */
return /datum/component/virtual_reality/proc/connect(mob/M)
old_mob.audiovisual_redirect = null var/mob/vr_M = parent
new_mob.audiovisual_redirect = parent if(!M.mind || M.stat == DEAD || !vr_M.mind || vr_M.stat == DEAD)
return FALSE
/datum/component/virtual_reality/proc/action_trigger(datum/signal_source, datum/action/source) var/datum/component/virtual_reality/VR = M.GetComponent(/datum/component/virtual_reality)
if(source != quit_action) if(VR)
return COMPONENT_ACTION_BLOCK_TRIGGER VR.level_below = src
revert_to_reality(signal_source) level_above = VR
M.transfer_ckey(vr_M, FALSE)
mastermind = M.mind
mastermind.current.audiovisual_redirect = parent
RegisterSignal(mastermind, COMSIG_PRE_MIND_TRANSFER, .proc/switch_player)
RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over)
RegisterSignal(M, COMSIG_MOB_PRE_PLAYER_CHANGE, .proc/player_hijacked)
SStgui.close_user_uis(vr_M, src)
session_paused = FALSE
return TRUE
/**
* emag_act() hook. Makes the game deadlier, killing the mastermind mob too should the parent die.
*/
/datum/component/virtual_reality/proc/you_only_live_once() /datum/component/virtual_reality/proc/you_only_live_once()
if(you_die_in_the_game_you_die_for_real || vr_sleeper?.only_current_user_can_interact) if(you_die_in_the_game_you_die_for_real)
return FALSE return FALSE
you_die_in_the_game_you_die_for_real = TRUE you_die_in_the_game_you_die_for_real = TRUE
return TRUE return TRUE
/datum/component/virtual_reality/proc/pass_me_the_remote(datum/source, mob/new_mob) /**
if(new_mob == mastermind.current) * Called when the mastermind mind is transferred to another mob.
revert_to_reality(source) * This is pretty much just going to simply quit the session until machineries support polymorphed occupants etcetera.
return TRUE */
new_mob.TakeComponent(src) /datum/component/virtual_reality/proc/switch_player(datum/source, mob/new_mob, mob/old_mob)
return TRUE if(session_paused)
return
if(!allow_mastermind_transfer)
quit()
return COMPONENT_STOP_MIND_TRANSFER
UnregisterSignal(old_mob, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_PRE_PLAYER_CHANGE))
RegisterSignal(new_mob, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over)
RegisterSignal(new_mob, COMSIG_MOB_PRE_PLAYER_CHANGE, .proc/player_hijacked)
old_mob.audiovisual_redirect = null
new_mob.audiovisual_redirect = parent
/**
* Called to stop the player mind from being transferred should the new mob happen to be one of our masterminds'.
* Since the target's mind.current is going to be null'd in the mind transfer process,
* This has to be done in a different signal proc than on_player_transfer(), by then the mastermind.current will be null.
*/
/datum/component/virtual_reality/proc/pre_player_transfer(datum/source, mob/new_mob, mob/old_mob)
if(!mastermind || session_paused)
return
if(new_mob == mastermind.current)
quit()
return COMPONENT_STOP_MIND_TRANSFER
if(!level_above)
return
var/datum/component/virtual_reality/VR = level_above
while(VR)
if(VR.mastermind.current == new_mob)
VR.quit() //this will revert the ckey back to new_mob.
return COMPONENT_STOP_MIND_TRANSFER
VR = VR.level_above
/**
* Called when someone or something else is somewhat about to replace the mastermind's mob key somehow.
* And potentially lock the player in a broken virtual reality plot. Not really something to be proud of.
*/
/datum/component/virtual_reality/proc/player_hijacked(datum/source, mob/our_character, mob/their_character)
if(session_paused)
return
if(!their_character)
quit(cleanup = TRUE)
return
var/will_it_be_handled_in_their_pre_player_transfer = FALSE
var/datum/component/virtual_reality/VR = src
while(VR)
if(VR.parent == their_character)
will_it_be_handled_in_their_pre_player_transfer = TRUE
break
VR = VR.level_below
if(!will_it_be_handled_in_their_pre_player_transfer) //it's not the player playing shenanigeans, abandon all ships.
quit(cleanup = TRUE)
/**
* Takes care of moving the component from a mob to another when their mind or ckey is transferred.
* The very reason this component even exists (else one would be stuck playing as a monky if monkyified)
*/
/datum/component/virtual_reality/proc/on_player_transfer(datum/source, mob/new_mob, mob/old_mob)
new_mob.TakeComponent(src)
/**
* Required for the component to be transferable from mob to mob.
*/
/datum/component/virtual_reality/PostTransfer() /datum/component/virtual_reality/PostTransfer()
if(!ismob(parent)) if(!ismob(parent))
return COMPONENT_INCOMPATIBLE return COMPONENT_INCOMPATIBLE
/**
*The following procs simply acts as hooks for quit(), since components do not use callbacks anymore
*/
/datum/component/virtual_reality/proc/action_trigger(datum/signal_source, datum/action/source)
quit()
return COMPONENT_ACTION_BLOCK_TRIGGER
/datum/component/virtual_reality/proc/revert_to_reality(datum/source) /datum/component/virtual_reality/proc/revert_to_reality(datum/source)
quit_it() quit()
/datum/component/virtual_reality/proc/game_over(datum/source) /datum/component/virtual_reality/proc/game_over(datum/source)
quit_it(TRUE, TRUE) quit(you_die_in_the_game_you_die_for_real, TRUE)
return COMPONENT_BLOCK_DEATH_BROADCAST
/datum/component/virtual_reality/proc/be_a_quitter(datum/source, can_reenter_corpse) /datum/component/virtual_reality/proc/be_a_quitter(datum/source, can_reenter_corpse, special = FALSE, penalize = FALSE)
quit_it() if(!special)
return COMPONENT_BLOCK_GHOSTING quit()
return COMPONENT_BLOCK_GHOSTING
/datum/component/virtual_reality/proc/virtual_reality_in_a_virtual_reality(mob/player, killme = FALSE, datum/component/virtual_reality/yo_dawg) /datum/component/virtual_reality/proc/machine_destroyed(datum/source)
quit(cleanup = TRUE)
/**
* Takes care of deleting itself, moving the player back to the mastermind's current and queueing the parent for deletion.
* It supports nested virtual realities by recursively calling vr_in_a_vr(), which in turns calls quit(),
* up to the deepest level, where the ckey will be transferred back to our mastermind's mob instead.
* The above operation is skipped when session_paused is TRUE (ergo no player in control of the current mob).
* vars:
* * deathcheck is used to kill the master, you want this FALSE unless for stuff that doesn't involve emagging.
* * cleanup is used to queue the parent for the next vr_clean_master's run, where they'll be deleted should they be dead.
* * mob/override is used for the recursive virtual reality explained above and shouldn't be used outside of vr_in_a_vr().
*/
/datum/component/virtual_reality/proc/quit(deathcheck = FALSE, cleanup = FALSE, mob/override)
var/mob/M = parent var/mob/M = parent
quit_it(FALSE, killme, player, yo_dawg) if(!session_paused)
yo_dawg.inception = null session_paused = TRUE
if(killme) var/mob/dreamer = override || mastermind.current
M.death(FALSE) if(!dreamer) //This shouldn't happen.
stack_trace("virtual reality component quit() called without a mob to transfer the parent ckey to.")
/datum/component/virtual_reality/proc/quit_it(deathcheck = FALSE, cleanup = FALSE, mob/override) to_chat(M, "<span class='warning'>You feel a dreadful sensation, something terrible happened. You try to wake up, but you find yourself unable to...</span>")
var/mob/M = parent qdel(src)
var/mob/dreamer = override ? override : mastermind.current return
if(!mastermind) if(level_below?.parent)
to_chat(M, "<span class='warning'>You feel a dreadful sensation, something terrible happened. You try to wake up, but you find yourself unable to...</span>") level_below.vr_in_a_vr(dreamer, deathcheck, (deathcheck && cleanup))
else
var/key_transfer = FALSE
if(inception?.parent)
inception.virtual_reality_in_a_virtual_reality(dreamer, cleanup, src)
else else
key_transfer = TRUE
if(key_transfer)
M.transfer_ckey(dreamer, FALSE) M.transfer_ckey(dreamer, FALSE)
dreamer.stop_sound_channel(CHANNEL_HEARTBEAT) if(deathcheck)
dreamer.audiovisual_redirect = null to_chat(dreamer, "<span class='warning'>You feel everything fading away...</span>")
if(deathcheck && you_die_in_the_game_you_die_for_real) dreamer.death(FALSE)
to_chat(mastermind, "<span class='warning'>You feel everything fading away...</span>") mastermind.current.audiovisual_redirect = null
dreamer.death(FALSE) if(!cleanup)
if(cleanup) if(level_above)
var/obj/effect/vr_clean_master/cleanbot = locate() in get_area(M) level_above.level_below = null
if(cleanbot) level_above = null
LAZYADD(cleanbot.corpse_party, M) UnregisterSignal(mastermind.current, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_PRE_PLAYER_CHANGE))
if(vr_sleeper) UnregisterSignal(mastermind, COMSIG_PRE_MIND_TRANSFER)
vr_sleeper.vr_mob = null mastermind = null
vr_sleeper = null if(cleanup)
qdel(src) var/obj/effect/vr_clean_master/cleanbot = locate() in get_area(M)
if(cleanbot)
LAZYOR(cleanbot.corpse_party, M)
qdel(src)
/datum/component/virtual_reality/Destroy() /**
var/datum/action/quit_vr/delet_me = quit_action * Used for recursive virtual realities shenanigeans and should be called only through the above proc.
. = ..() */
qdel(delet_me) /datum/component/virtual_reality/proc/vr_in_a_vr(mob/player, deathcheck = FALSE, lethal_cleanup = FALSE)
var/mob/M = parent
quit(deathcheck, lethal_cleanup, player)
M.audiovisual_redirect = null
if(lethal_cleanup)
M.death(FALSE)
+2
View File
@@ -34,10 +34,12 @@
last_process = world.time last_process = world.time
/datum/component/wet_floor/RegisterWithParent() /datum/component/wet_floor/RegisterWithParent()
. = ..()
RegisterSignal(parent, COMSIG_TURF_IS_WET, .proc/is_wet) RegisterSignal(parent, COMSIG_TURF_IS_WET, .proc/is_wet)
RegisterSignal(parent, COMSIG_TURF_MAKE_DRY, .proc/dry) RegisterSignal(parent, COMSIG_TURF_MAKE_DRY, .proc/dry)
/datum/component/wet_floor/UnregisterFromParent() /datum/component/wet_floor/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_TURF_IS_WET, COMSIG_TURF_MAKE_DRY)) UnregisterSignal(parent, list(COMSIG_TURF_IS_WET, COMSIG_TURF_MAKE_DRY))
/datum/component/wet_floor/Destroy() /datum/component/wet_floor/Destroy()
+1 -1
View File
@@ -255,7 +255,7 @@
M.fields["alg_d"] = "No allergies have been detected in this patient." M.fields["alg_d"] = "No allergies have been detected in this patient."
M.fields["cdi"] = "None" M.fields["cdi"] = "None"
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
M.fields["notes"] = "No notes." M.fields["notes"] = H.get_trait_string(medical)
medical += M medical += M
//Security Record //Security Record
+26
View File
@@ -1398,3 +1398,29 @@
var/mob/living/carbon/human/H = locate(href_list["copyoutfit"]) in GLOB.carbon_list var/mob/living/carbon/human/H = locate(href_list["copyoutfit"]) in GLOB.carbon_list
if(istype(H)) if(istype(H))
H.copy_outfit() H.copy_outfit()
else if(href_list["modquirks"])
if(!check_rights(R_SPAWN))
return
var/mob/living/carbon/human/H = locate(href_list["modquirks"]) in GLOB.mob_list
if(!istype(H))
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
return
var/list/options = list("Clear"="Clear")
for(var/x in subtypesof(/datum/quirk))
var/datum/quirk/T = x
var/qname = initial(T.name)
options[H.has_quirk(T) ? "[qname] (Remove)" : "[qname] (Add)"] = T
var/result = input(usr, "Choose quirk to add/remove","Quirk Mod") as null|anything in options
if(result)
if(result == "Clear")
for(var/datum/quirk/q in H.roundstart_quirks)
H.remove_quirk(q.type)
else
var/T = options[result]
if(H.has_quirk(T))
H.remove_quirk(T)
else
H.add_quirk(T,TRUE)
+6 -6
View File
@@ -8,9 +8,7 @@
var/deflection_chance = 0 //Chance to deflect projectiles var/deflection_chance = 0 //Chance to deflect projectiles
var/reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction? var/reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction?
var/block_chance = 0 //Chance to block melee attacks using items while on throw mode. var/block_chance = 0 //Chance to block melee attacks using items while on throw mode.
var/restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not
var/help_verb var/help_verb
var/no_guns = FALSE
var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist. var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist.
var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts
@@ -28,14 +26,16 @@
/datum/martial_art/proc/add_to_streak(element,mob/living/carbon/human/D) /datum/martial_art/proc/add_to_streak(element,mob/living/carbon/human/D)
if(D != current_target) if(D != current_target)
current_target = D reset_streak(D)
streak = ""
restraining = 0
streak = streak+element streak = streak+element
if(length(streak) > max_streak_length) if(length(streak) > max_streak_length)
streak = copytext(streak,2) streak = copytext(streak,2)
return return
/datum/martial_art/proc/reset_streak(mob/living/carbon/human/new_target)
current_target = new_target
streak = ""
/datum/martial_art/proc/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D) /datum/martial_art/proc/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D)
var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
@@ -81,7 +81,7 @@
D.forcesay(GLOB.hit_appends) D.forcesay(GLOB.hit_appends)
return 1 return 1
/datum/martial_art/proc/teach(mob/living/carbon/human/H,make_temporary=0) /datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE)
if(!istype(H) || !H.mind) if(!istype(H) || !H.mind)
return FALSE return FALSE
if(H.mind.martial_art) if(H.mind.martial_art)
+35 -34
View File
@@ -9,24 +9,13 @@
id = MARTIALART_CQC id = MARTIALART_CQC
help_verb = /mob/living/carbon/human/proc/CQC_help help_verb = /mob/living/carbon/human/proc/CQC_help
block_chance = 75 block_chance = 75
var/just_a_cook = FALSE var/old_grab_state = null
var/static/list/areas_under_siege = typecacheof(list(/area/crew_quarters/kitchen, var/restraining = FALSE
/area/crew_quarters/cafeteria,
/area/crew_quarters/bar))
/datum/martial_art/cqc/under_siege /datum/martial_art/cqc/reset_streak(mob/living/carbon/human/new_target)
name = "Close Quarters Cooking" . = ..()
just_a_cook = TRUE
/datum/martial_art/cqc/proc/drop_restraining()
restraining = FALSE restraining = FALSE
/datum/martial_art/cqc/can_use(mob/living/carbon/human/H)
var/area/A = get_area(H)
if(just_a_cook && !(is_type_in_typecache(A, areas_under_siege)))
return FALSE
return ..()
/datum/martial_art/cqc/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/cqc/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A)) if(!can_use(A))
return FALSE return FALSE
@@ -75,6 +64,7 @@
D.apply_damage(10, BRUTE) D.apply_damage(10, BRUTE)
log_combat(A, D, "kicked (CQC)") log_combat(A, D, "kicked (CQC)")
if(D.IsKnockdown() && !D.stat) if(D.IsKnockdown() && !D.stat)
log_combat(A, D, "knocked out (Head kick)(CQC)")
D.visible_message("<span class='warning'>[A] kicks [D]'s head, knocking [D.p_them()] out!</span>", \ D.visible_message("<span class='warning'>[A] kicks [D]'s head, knocking [D.p_them()] out!</span>", \
"<span class='userdanger'>[A] kicks your head, knocking you out!</span>") "<span class='userdanger'>[A] kicks your head, knocking you out!</span>")
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1) playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
@@ -85,7 +75,8 @@
/datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A)) if(!can_use(A))
return FALSE return FALSE
D.visible_message("<span class='warning'>[A] forces their arm on [D]'s neck!</span>") log_combat(A, D, "pressured (CQC)")
D.visible_message("<span class='warning'>[A] punches [D]'s neck!</span>")
D.adjustStaminaLoss(60) D.adjustStaminaLoss(60)
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
return TRUE return TRUE
@@ -96,18 +87,20 @@
if(!can_use(A)) if(!can_use(A))
return FALSE return FALSE
if(!D.stat) if(!D.stat)
log_combat(A, D, "restrained (CQC)")
D.visible_message("<span class='warning'>[A] locks [D] into a restraining position!</span>", \ D.visible_message("<span class='warning'>[A] locks [D] into a restraining position!</span>", \
"<span class='userdanger'>[A] locks you into a restraining position!</span>") "<span class='userdanger'>[A] locks you into a restraining position!</span>")
D.adjustStaminaLoss(20) D.adjustStaminaLoss(20)
D.Stun(100) D.Stun(100)
restraining = TRUE restraining = TRUE
addtimer(CALLBACK(src, .proc/drop_restraining), 50, TIMER_UNIQUE) addtimer(VARSET_CALLBACK(src, restraining, FALSE), 50, TIMER_UNIQUE)
return TRUE return TRUE
/datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A)) if(!can_use(A))
return FALSE return FALSE
if(!D.stat) if(!D.stat)
log_combat(A, D, "consecutive CQC'd (CQC)")
D.visible_message("<span class='warning'>[A] strikes [D]'s abdomen, neck and back consecutively</span>", \ D.visible_message("<span class='warning'>[A] strikes [D]'s abdomen, neck and back consecutively</span>", \
"<span class='userdanger'>[A] strikes your abdomen, neck and back consecutively!</span>") "<span class='userdanger'>[A] strikes your abdomen, neck and back consecutively!</span>")
playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1) playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1)
@@ -119,23 +112,20 @@
return TRUE return TRUE
/datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A)) if(A.a_intent == INTENT_GRAB && A!=D && can_use(A)) // A!=D prevents grabbing yourself
return FALSE add_to_streak("G",D)
add_to_streak("G",D) if(check_streak(A,D)) //if a combo is made no grab upgrade is done
if(check_streak(A,D)) return TRUE
return TRUE old_grab_state = A.grab_state
if(A == D) // no self grab.
return FALSE
if(A.grab_state >= GRAB_AGGRESSIVE)
D.grabbedby(A, 1) D.grabbedby(A, 1)
else if(old_grab_state == GRAB_PASSIVE)
A.start_pulling(D, 1) D.drop_all_held_items()
if(A.pulling) A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent
D.stop_pulling()
log_combat(A, D, "grabbed", addition="aggressively") log_combat(A, D, "grabbed", addition="aggressively")
A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab D.visible_message("<span class='warning'>[A] violently grabs [D]!</span>", \
"<span class='userdanger'>[A] violently grabs you!</span>")
return TRUE return TRUE
return FALSE
/datum/martial_art/cqc/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/cqc/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A)) if(!can_use(A))
@@ -190,6 +180,7 @@
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1) playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]") log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]")
if(restraining && A.pulling == D) if(restraining && A.pulling == D)
log_combat(A, D, "knocked out (Chokehold)(CQC)")
D.visible_message("<span class='danger'>[A] puts [D] into a chokehold!</span>", \ D.visible_message("<span class='danger'>[A] puts [D] into a chokehold!</span>", \
"<span class='userdanger'>[A] puts you into a chokehold!</span>") "<span class='userdanger'>[A] puts you into a chokehold!</span>")
D.SetSleeping(400) D.SetSleeping(400)
@@ -208,9 +199,19 @@
to_chat(usr, "<b><i>You try to remember some of the basics of CQC.</i></b>") to_chat(usr, "<b><i>You try to remember some of the basics of CQC.</i></b>")
to_chat(usr, "<span class='notice'>Slam</span>: Grab Harm. Slam opponent into the ground, knocking them down.") to_chat(usr, "<span class='notice'>Slam</span>: Grab Harm. Slam opponent into the ground, knocking them down.")
to_chat(usr, "<span class='notice'>CQC Kick</span>: Disarm Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.") to_chat(usr, "<span class='notice'>CQC Kick</span>: Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.")
to_chat(usr, "<span class='notice'>Restrain</span>: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a choke hold.") to_chat(usr, "<span class='notice'>Restrain</span>: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a chokehold.")
to_chat(usr, "<span class='notice'>Pressure</span>: Disarm Grab. Decent stamina damage.") to_chat(usr, "<span class='notice'>Pressure</span>: Disarm Grab. Decent stamina damage.")
to_chat(usr, "<span class='notice'>Consecutive CQC</span>: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.") to_chat(usr, "<span class='notice'>Consecutive CQC</span>: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.")
to_chat(usr, "<b><i>In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.</i></b>") to_chat(usr, "<b><i>In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.</i></b>")
///Subtype of CQC. Only used for the chef.
/datum/martial_art/cqc/under_siege
name = "Close Quarters Cooking"
///Prevents use if the cook is not in the kitchen.
/datum/martial_art/cqc/under_siege/can_use(mob/living/carbon/human/H) //this is used to make chef CQC only work in kitchen
if(!istype(get_area(H), /area/crew_quarters/kitchen))
return FALSE
return ..()
+55 -47
View File
@@ -9,35 +9,36 @@
id = MARTIALART_SLEEPINGCARP id = MARTIALART_SLEEPINGCARP
deflection_chance = 100 deflection_chance = 100
reroute_deflection = TRUE reroute_deflection = TRUE
no_guns = TRUE
allow_temp_override = FALSE allow_temp_override = FALSE
help_verb = /mob/living/carbon/human/proc/sleeping_carp_help help_verb = /mob/living/carbon/human/proc/sleeping_carp_help
var/old_grab_state = null
/datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(findtext(streak,WRIST_WRENCH_COMBO)) if(findtext(streak,WRIST_WRENCH_COMBO))
streak = "" streak = ""
wristWrench(A,D) wristWrench(A,D)
return 1 return TRUE
if(findtext(streak,BACK_KICK_COMBO)) if(findtext(streak,BACK_KICK_COMBO))
streak = "" streak = ""
backKick(A,D) backKick(A,D)
return 1 return TRUE
if(findtext(streak,STOMACH_KNEE_COMBO)) if(findtext(streak,STOMACH_KNEE_COMBO))
streak = "" streak = ""
kneeStomach(A,D) kneeStomach(A,D)
return 1 return TRUE
if(findtext(streak,HEAD_KICK_COMBO)) if(findtext(streak,HEAD_KICK_COMBO))
streak = "" streak = ""
headKick(A,D) headKick(A,D)
return 1 return TRUE
if(findtext(streak,ELBOW_DROP_COMBO)) if(findtext(streak,ELBOW_DROP_COMBO))
streak = "" streak = ""
elbowDrop(A,D) elbowDrop(A,D)
return 1 return TRUE
return 0 return FALSE
/datum/martial_art/the_sleeping_carp/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsStun() && !D.IsKnockdown()) if(!D.stat && !D.IsStun() && !D.IsKnockdown())
log_combat(A, D, "wrist wrenched (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("<span class='warning'>[A] grabs [D]'s wrist and wrenches it sideways!</span>", \ D.visible_message("<span class='warning'>[A] grabs [D]'s wrist and wrenches it sideways!</span>", \
"<span class='userdanger'>[A] grabs your wrist and violently wrenches it to the side!</span>") "<span class='userdanger'>[A] grabs your wrist and violently wrenches it to the side!</span>")
@@ -46,24 +47,29 @@
D.dropItemToGround(D.get_active_held_item()) D.dropItemToGround(D.get_active_held_item())
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
D.Knockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun() D.Knockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
return 1 return TRUE
log_combat(A, D, "wrist wrenched (Sleeping Carp)")
return basic_hit(A,D) return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/backKick(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/proc/backKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(A.dir == D.dir && !D.stat && !D.IsKnockdown()) if(!D.stat && !D.IsKnockdown())
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) if(A.dir == D.dir)
D.visible_message("<span class='warning'>[A] kicks [D] in the back!</span>", \ log_combat(A, D, "back-kicked (Sleeping Carp)")
"<span class='userdanger'>[A] kicks you in the back, making you stumble and fall!</span>") A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
step_to(D,get_step(D,D.dir),1) D.visible_message("<span class='warning'>[A] kicks [D] in the back!</span>", \
D.Knockdown(80) "<span class='userdanger'>[A] kicks you in the back, making you stumble and fall!</span>")
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) step_to(D,get_step(D,D.dir),1)
return 1 D.Knockdown(80)
log_combat(A, D, "back-kicked (Sleeping Carp)") playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
return TRUE
else
log_combat(A, D, "missed a back-kick (Sleeping Carp) on")
D.visible_message("<span class='warning'>[A] tries to kick [D] in the back, but misses!</span>", \
"<span class='userdanger'>[A] tries to kick you in the back, but misses!</span>")
return basic_hit(A,D) return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsKnockdown()) if(!D.stat && !D.IsKnockdown())
log_combat(A, D, "stomach kneed (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK) A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("<span class='warning'>[A] knees [D] in the stomach!</span>", \ D.visible_message("<span class='warning'>[A] knees [D] in the stomach!</span>", \
"<span class='userdanger'>[A] winds you with a knee in the stomach!</span>") "<span class='userdanger'>[A] winds you with a knee in the stomach!</span>")
@@ -71,12 +77,12 @@
D.losebreath += 3 D.losebreath += 3
D.Knockdown(40)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun() D.Knockdown(40)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
return 1 return TRUE
log_combat(A, D, "stomach kneed (Sleeping Carp)")
return basic_hit(A,D) return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/headKick(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/proc/headKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsKnockdown()) if(!D.stat && !D.IsKnockdown())
log_combat(A, D, "head kicked (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK) A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \ D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \
"<span class='userdanger'>[A] kicks you in the jaw!</span>") "<span class='userdanger'>[A] kicks you in the jaw!</span>")
@@ -84,12 +90,12 @@
D.drop_all_held_items() D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Knockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun() D.Knockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
return 1 return TRUE
log_combat(A, D, "head kicked (Sleeping Carp)")
return basic_hit(A,D) return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/elbowDrop(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/proc/elbowDrop(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(D.IsKnockdown() || D.resting || D.stat) if(D.IsKnockdown() || D.resting || D.stat)
log_combat(A, D, "elbow dropped (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("<span class='warning'>[A] elbow drops [D]!</span>", \ D.visible_message("<span class='warning'>[A] elbow drops [D]!</span>", \
"<span class='userdanger'>[A] piledrives you with their elbow!</span>") "<span class='userdanger'>[A] piledrives you with their elbow!</span>")
@@ -97,37 +103,29 @@
D.death() //FINISH HIM! D.death() //FINISH HIM!
D.apply_damage(50, BRUTE, BODY_ZONE_CHEST) D.apply_damage(50, BRUTE, BODY_ZONE_CHEST)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
return 1 return TRUE
log_combat(A, D, "elbow dropped (Sleeping Carp)")
return basic_hit(A,D) return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("G",D) if(A.a_intent == INTENT_GRAB && A!=D) // A!=D prevents grabbing yourself
if(check_streak(A,D)) add_to_streak("G",D)
return 1 if(check_streak(A,D)) //if a combo is made no grab upgrade is done
if(A == D) //no self grab stun return TRUE
return FALSE old_grab_state = A.grab_state
if(A.grab_state >= GRAB_AGGRESSIVE)
D.grabbedby(A, 1) D.grabbedby(A, 1)
else if(old_grab_state == GRAB_PASSIVE)
A.start_pulling(D, 1)
if(A.pulling)
D.drop_all_held_items() D.drop_all_held_items()
D.stop_pulling() A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent
if(A.a_intent == INTENT_GRAB) log_combat(A, D, "grabbed", addition="aggressively")
log_combat(A, D, "grabbed", addition="aggressively") D.visible_message("<span class='warning'>[A] violently grabs [D]!</span>", \
D.visible_message("<span class='warning'>[A] violently grabs [D]!</span>", \ "<span class='userdanger'>[A] violently grabs you!</span>")
"<span class='userdanger'>[A] violently grabs you!</span>") return TRUE
A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab return FALSE
else
log_combat(A, D, "grabbed", addition="passively")
A.grab_state = GRAB_PASSIVE
return 1
/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("H",D) add_to_streak("H",D)
if(check_streak(A,D)) if(check_streak(A,D))
return 1 return TRUE
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams") var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams")
D.visible_message("<span class='danger'>[A] [atk_verb] [D]!</span>", \ D.visible_message("<span class='danger'>[A] [atk_verb] [D]!</span>", \
@@ -138,15 +136,25 @@
D.visible_message("<span class='warning'>[D] stumbles and falls!</span>", "<span class='userdanger'>The blow sends you to the ground!</span>") D.visible_message("<span class='warning'>[D] stumbles and falls!</span>", "<span class='userdanger'>The blow sends you to the ground!</span>")
D.Knockdown(80) D.Knockdown(80)
log_combat(A, D, "[atk_verb] (Sleeping Carp)") log_combat(A, D, "[atk_verb] (Sleeping Carp)")
return 1 return TRUE
/datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("D",D) add_to_streak("D",D)
if(check_streak(A,D)) if(check_streak(A,D))
return 1 return TRUE
return ..() return ..()
/datum/martial_art/the_sleeping_carp/teach(mob/living/carbon/human/H, make_temporary = FALSE)
. = ..()
if(!.)
return
ADD_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT)
/datum/martial_art/the_sleeping_carp/on_remove(mob/living/carbon/human/H)
. = ..()
REMOVE_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT)
/mob/living/carbon/human/proc/sleeping_carp_help() /mob/living/carbon/human/proc/sleeping_carp_help()
set name = "Recall Teachings" set name = "Recall Teachings"
set desc = "Remember the martial techniques of the Sleeping Carp clan." set desc = "Remember the martial techniques of the Sleeping Carp clan."
@@ -232,4 +240,4 @@
/obj/item/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) /obj/item/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(wielded) if(wielded)
return ..() return ..()
return 0 return FALSE
+5 -1
View File
@@ -88,6 +88,9 @@
/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0) /datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0)
var/old_character = current var/old_character = current
var/signals = SEND_SIGNAL(new_character, COMSIG_MOB_PRE_PLAYER_CHANGE, new_character, old_character) | SEND_SIGNAL(src, COMSIG_PRE_MIND_TRANSFER, new_character, old_character)
if(signals & COMPONENT_STOP_MIND_TRANSFER)
return
if(current) // remove ourself from our old body's mind variable if(current) // remove ourself from our old body's mind variable
current.mind = null current.mind = null
SStgui.on_transfer(current, new_character) SStgui.on_transfer(current, new_character)
@@ -125,7 +128,6 @@
transfer_martial_arts(new_character) transfer_martial_arts(new_character)
if(active || force_key_move) if(active || force_key_move)
new_character.key = key //now transfer the key to link the client to our new body new_character.key = key //now transfer the key to link the client to our new body
SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character)
//CIT CHANGE - makes arousal update when transfering bodies //CIT CHANGE - makes arousal update when transfering bodies
if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs. if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs.
@@ -134,6 +136,8 @@
L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting... L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting...
L.update_arousal_hud() //Removes the old icon L.update_arousal_hud() //Removes the old icon
SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character)
/datum/mind/proc/store_memory(new_text) /datum/mind/proc/store_memory(new_text)
if((length(memory) + length(new_text)) <= MAX_MESSAGE_LEN) if((length(memory) + length(new_text)) <= MAX_MESSAGE_LEN)
memory += "[new_text]<BR>" memory += "[new_text]<BR>"
+2
View File
@@ -13,6 +13,7 @@
return return
ADD_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK) ADD_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK)
ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK) ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK)
ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK)
owner.update_body_parts() owner.update_body_parts()
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk) SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk)
RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech) RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
@@ -31,6 +32,7 @@
return return
REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK) REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK)
REMOVE_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK) REMOVE_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK)
ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK)
owner.update_body_parts() owner.update_body_parts()
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk") SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk")
UnregisterSignal(owner, COMSIG_MOB_SAY) UnregisterSignal(owner, COMSIG_MOB_SAY)
+1
View File
@@ -95,6 +95,7 @@
message = replacetext(message," ugly "," beautiful ") message = replacetext(message," ugly "," beautiful ")
message = replacetext(message," douchbag "," nice guy ") message = replacetext(message," douchbag "," nice guy ")
message = replacetext(message," whore "," lady ") message = replacetext(message," whore "," lady ")
message = replacetext(message," gamer "," intellectual ")
message = replacetext(message," nerd "," smarty pants ") message = replacetext(message," nerd "," smarty pants ")
message = replacetext(message," moron "," fun person ") message = replacetext(message," moron "," fun person ")
message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ") message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ")
+13
View File
@@ -409,6 +409,19 @@
else else
new /obj/effect/temp_visual/bleed(get_turf(owner)) new /obj/effect/temp_visual/bleed(get_turf(owner))
/datum/status_effect/neck_slice
id = "neck_slice"
status_type = STATUS_EFFECT_UNIQUE
alert_type = null
duration = -1
/datum/status_effect/neck_slice/tick()
var/mob/living/carbon/human/H = owner
if(H.stat == DEAD || H.bleed_rate <= 8)
H.remove_status_effect(/datum/status_effect/neck_slice)
if(prob(10))
H.emote(pick("gasp", "gag", "choke"))
/mob/living/proc/apply_necropolis_curse(set_curse, duration = 10 MINUTES) /mob/living/proc/apply_necropolis_curse(set_curse, duration = 10 MINUTES)
var/datum/status_effect/necropolis_curse/C = has_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE) var/datum/status_effect/necropolis_curse/C = has_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE)
if(!set_curse) if(!set_curse)
+32
View File
@@ -8,12 +8,14 @@
mob_trait = TRAIT_ALCOHOL_TOLERANCE mob_trait = TRAIT_ALCOHOL_TOLERANCE
gain_text = "<span class='notice'>You feel like you could drink a whole keg!</span>" gain_text = "<span class='notice'>You feel like you could drink a whole keg!</span>"
lose_text = "<span class='danger'>You don't feel as resistant to alcohol anymore. Somehow.</span>" lose_text = "<span class='danger'>You don't feel as resistant to alcohol anymore. Somehow.</span>"
medical_record_text = "Patient demonstrates a high tolerance for alcohol."
/datum/quirk/apathetic /datum/quirk/apathetic
name = "Apathetic" name = "Apathetic"
desc = "You just don't care as much as other people. That's nice to have in a place like this, I guess." desc = "You just don't care as much as other people. That's nice to have in a place like this, I guess."
value = 1 value = 1
mood_quirk = TRUE mood_quirk = TRUE
medical_record_text = "Patient was administered the Apathy Evaluation Scale but did not bother to complete it."
/datum/quirk/apathetic/add() /datum/quirk/apathetic/add()
var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood) var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood)
@@ -42,6 +44,7 @@
mob_trait = TRAIT_EMPATH mob_trait = TRAIT_EMPATH
gain_text = "<span class='notice'>You feel in tune with those around you.</span>" gain_text = "<span class='notice'>You feel in tune with those around you.</span>"
lose_text = "<span class='danger'>You feel isolated from others.</span>" lose_text = "<span class='danger'>You feel isolated from others.</span>"
medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed."
/datum/quirk/freerunning /datum/quirk/freerunning
name = "Freerunning" name = "Freerunning"
@@ -50,6 +53,7 @@
mob_trait = TRAIT_FREERUNNING mob_trait = TRAIT_FREERUNNING
gain_text = "<span class='notice'>You feel lithe on your feet!</span>" gain_text = "<span class='notice'>You feel lithe on your feet!</span>"
lose_text = "<span class='danger'>You feel clumsy again.</span>" lose_text = "<span class='danger'>You feel clumsy again.</span>"
medical_record_text = "Patient scored highly on cardio tests."
/datum/quirk/friendly /datum/quirk/friendly
name = "Friendly" name = "Friendly"
@@ -59,6 +63,7 @@
gain_text = "<span class='notice'>You want to hug someone.</span>" gain_text = "<span class='notice'>You want to hug someone.</span>"
lose_text = "<span class='danger'>You no longer feel compelled to hug others.</span>" lose_text = "<span class='danger'>You no longer feel compelled to hug others.</span>"
mood_quirk = TRUE mood_quirk = TRUE
medical_record_text = "Patient demonstrates low-inhibitions for physical contact and well-developed arms. Requesting another doctor take over this case."
/datum/quirk/jolly /datum/quirk/jolly
name = "Jolly" name = "Jolly"
@@ -66,6 +71,11 @@
value = 1 value = 1
mob_trait = TRAIT_JOLLY mob_trait = TRAIT_JOLLY
mood_quirk = TRUE mood_quirk = TRUE
medical_record_text = "Patient demonstrates constant euthymia irregular for environment. It's a bit much, to be honest."
/datum/quirk/jolly/on_process()
if(prob(0.05))
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "jolly", /datum/mood_event/jolly)
/datum/quirk/light_step /datum/quirk/light_step
name = "Light Step" name = "Light Step"
@@ -74,6 +84,7 @@
mob_trait = TRAIT_LIGHT_STEP mob_trait = TRAIT_LIGHT_STEP
gain_text = "<span class='notice'>You walk with a little more litheness.</span>" gain_text = "<span class='notice'>You walk with a little more litheness.</span>"
lose_text = "<span class='danger'>You start tromping around like a barbarian.</span>" lose_text = "<span class='danger'>You start tromping around like a barbarian.</span>"
medical_record_text = "Patient's dexterity belies a strong capacity for stealth."
/datum/quirk/quick_step /datum/quirk/quick_step
name = "Quick Step" name = "Quick Step"
@@ -82,6 +93,7 @@
mob_trait = TRAIT_SPEEDY_STEP mob_trait = TRAIT_SPEEDY_STEP
gain_text = "<span class='notice'>You feel determined. No time to lose.</span>" gain_text = "<span class='notice'>You feel determined. No time to lose.</span>"
lose_text = "<span class='danger'>You feel less determined. What's the rush, man?</span>" lose_text = "<span class='danger'>You feel less determined. What's the rush, man?</span>"
medical_record_text = "Patient scored highly on racewalking tests."
/datum/quirk/musician /datum/quirk/musician
name = "Musician" name = "Musician"
@@ -90,6 +102,7 @@
mob_trait = TRAIT_MUSICIAN mob_trait = TRAIT_MUSICIAN
gain_text = "<span class='notice'>You know everything about musical instruments.</span>" gain_text = "<span class='notice'>You know everything about musical instruments.</span>"
lose_text = "<span class='danger'>You forget how musical instruments work.</span>" lose_text = "<span class='danger'>You forget how musical instruments work.</span>"
medical_record_text = "Patient brain scans show a highly-developed auditory pathway."
/datum/quirk/musician/on_spawn() /datum/quirk/musician/on_spawn()
var/mob/living/carbon/human/H = quirk_holder var/mob/living/carbon/human/H = quirk_holder
@@ -108,6 +121,7 @@
mob_trait = TRAIT_PHOTOGRAPHER mob_trait = TRAIT_PHOTOGRAPHER
gain_text = "<span class='notice'>You know everything about photography.</span>" gain_text = "<span class='notice'>You know everything about photography.</span>"
lose_text = "<span class='danger'>You forget how photo cameras work.</span>" lose_text = "<span class='danger'>You forget how photo cameras work.</span>"
medical_record_text = "Patient mentions photography as a stress-relieving hobby."
/datum/quirk/photographer/on_spawn() /datum/quirk/photographer/on_spawn()
var/mob/living/carbon/human/H = quirk_holder var/mob/living/carbon/human/H = quirk_holder
@@ -121,12 +135,14 @@
desc = "You know your body well, and can accurately assess the extent of your wounds." desc = "You know your body well, and can accurately assess the extent of your wounds."
value = 2 value = 2
mob_trait = TRAIT_SELF_AWARE mob_trait = TRAIT_SELF_AWARE
medical_record_text = "Patient demonstrates an uncanny knack for self-diagnosis."
/datum/quirk/skittish /datum/quirk/skittish
name = "Skittish" name = "Skittish"
desc = "You can conceal yourself in danger. Ctrl-shift-click a closed locker to jump into it, as long as you have access." desc = "You can conceal yourself in danger. Ctrl-shift-click a closed locker to jump into it, as long as you have access."
value = 2 value = 2
mob_trait = TRAIT_SKITTISH mob_trait = TRAIT_SKITTISH
medical_record_text = "Patient demonstrates a high aversion to danger and has described hiding in containers out of fear."
/datum/quirk/spiritual /datum/quirk/spiritual
name = "Spiritual" name = "Spiritual"
@@ -135,6 +151,7 @@
mob_trait = TRAIT_SPIRITUAL mob_trait = TRAIT_SPIRITUAL
gain_text = "<span class='notice'>You feel a little more faithful to the gods today.</span>" gain_text = "<span class='notice'>You feel a little more faithful to the gods today.</span>"
lose_text = "<span class='danger'>You feel less faithful in the gods.</span>" lose_text = "<span class='danger'>You feel less faithful in the gods.</span>"
medical_record_text = "Patient reports a belief in a higher power."
/datum/quirk/tagger /datum/quirk/tagger
name = "Tagger" name = "Tagger"
@@ -143,6 +160,7 @@
mob_trait = TRAIT_TAGGER mob_trait = TRAIT_TAGGER
gain_text = "<span class='notice'>You know how to tag walls efficiently.</span>" gain_text = "<span class='notice'>You know how to tag walls efficiently.</span>"
lose_text = "<span class='danger'>You forget how to tag walls properly.</span>" lose_text = "<span class='danger'>You forget how to tag walls properly.</span>"
medical_record_text = "Patient was recently seen for possible paint huffing incident."
/datum/quirk/tagger/on_spawn() /datum/quirk/tagger/on_spawn()
var/mob/living/carbon/human/H = quirk_holder var/mob/living/carbon/human/H = quirk_holder
@@ -158,6 +176,7 @@
mob_trait = TRAIT_VORACIOUS mob_trait = TRAIT_VORACIOUS
gain_text = "<span class='notice'>You feel HONGRY.</span>" gain_text = "<span class='notice'>You feel HONGRY.</span>"
lose_text = "<span class='danger'>You no longer feel HONGRY.</span>" lose_text = "<span class='danger'>You no longer feel HONGRY.</span>"
medical_record_text = "Patient demonstrates a disturbing capacity for eating."
/datum/quirk/trandening /datum/quirk/trandening
name = "High Luminosity Eyes" name = "High Luminosity Eyes"
@@ -179,6 +198,7 @@
mob_trait = TRAIT_HIGH_BLOOD mob_trait = TRAIT_HIGH_BLOOD
gain_text = "<span class='notice'>You feel full of blood!</span>" gain_text = "<span class='notice'>You feel full of blood!</span>"
lose_text = "<span class='notice'>You feel like your blood pressure went down.</span>" lose_text = "<span class='notice'>You feel like your blood pressure went down.</span>"
medical_record_text = "Patient's blood tests report an abnormal concentration of red blood cells in their bloodstream."
/datum/quirk/bloodpressure/add() /datum/quirk/bloodpressure/add()
var/mob/living/M = quirk_holder var/mob/living/M = quirk_holder
@@ -188,3 +208,15 @@
/datum/quirk/bloodpressure/remove() /datum/quirk/bloodpressure/remove()
var/mob/living/M = quirk_holder var/mob/living/M = quirk_holder
M.blood_ratio = 1 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()
+10 -3
View File
@@ -22,14 +22,19 @@
value = -1 value = -1
gain_text = "<span class='danger'>You start feeling depressed.</span>" gain_text = "<span class='danger'>You start feeling depressed.</span>"
lose_text = "<span class='notice'>You no longer feel depressed.</span>" //if only it were that easy! lose_text = "<span class='notice'>You no longer feel depressed.</span>" //if only it were that easy!
medical_record_text = "Patient has a severe mood disorder causing them to experience sudden moments of sadness." medical_record_text = "Patient has a severe mood disorder, causing them to experience acute episodes of depression."
mood_quirk = TRUE mood_quirk = TRUE
/datum/quirk/depression/on_process()
if(prob(0.05))
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "depression", /datum/mood_event/depression)
/datum/quirk/family_heirloom /datum/quirk/family_heirloom
name = "Family Heirloom" name = "Family Heirloom"
desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!" desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!"
value = -1 value = -1
mood_quirk = TRUE mood_quirk = TRUE
medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom."
var/obj/item/heirloom var/obj/item/heirloom
var/where var/where
@@ -143,6 +148,7 @@
name = "Nyctophobia" name = "Nyctophobia"
desc = "As far as you can remember, you've always been afraid of the dark. While in the dark without a light source, you instinctually act careful, and constantly feel a sense of dread." desc = "As far as you can remember, you've always been afraid of the dark. While in the dark without a light source, you instinctually act careful, and constantly feel a sense of dread."
value = -1 value = -1
medical_record_text = "Patient demonstrates a fear of the dark. (Seriously?)"
/datum/quirk/nyctophobia/on_process() /datum/quirk/nyctophobia/on_process()
var/mob/living/carbon/human/H = quirk_holder var/mob/living/carbon/human/H = quirk_holder
@@ -163,7 +169,8 @@
desc = "Bright lights irritate you. Your eyes start to water, your skin feels itchy against the photon radiation, and your hair gets dry and frizzy. Maybe it's a medical condition. If only Nanotrasen was more considerate of your needs..." desc = "Bright lights irritate you. Your eyes start to water, your skin feels itchy against the photon radiation, and your hair gets dry and frizzy. Maybe it's a medical condition. If only Nanotrasen was more considerate of your needs..."
value = -1 value = -1
gain_text = "<span class='danger'>The safty of light feels off...</span>" gain_text = "<span class='danger'>The safty of light feels off...</span>"
lose_text = "<span class='notice'>Enlighing.</span>" lose_text = "<span class='notice'>Enlightening.</span>"
medical_record_text = "Despite my warnings, the patient refuses turn on the lights, only to end up rolling down a full flight of stairs and into the cellar."
/datum/quirk/lightless/on_process() /datum/quirk/lightless/on_process()
var/turf/T = get_turf(quirk_holder) var/turf/T = get_turf(quirk_holder)
@@ -379,7 +386,7 @@
value = -4 value = -4
gain_text = "<span class='danger'>You can't see anything.</span>" gain_text = "<span class='danger'>You can't see anything.</span>"
lose_text = "<span class='notice'>You miraculously gain back your vision.</span>" lose_text = "<span class='notice'>You miraculously gain back your vision.</span>"
medical_record_text = "Subject has permanent blindness." medical_record_text = "Patient has permanent blindness."
/datum/quirk/blindness/add() /datum/quirk/blindness/add()
quirk_holder.become_blind(ROUNDSTART_TRAIT) quirk_holder.become_blind(ROUNDSTART_TRAIT)
+5 -1
View File
@@ -16,6 +16,7 @@
value = 0 value = 0
gain_text = "<span class='notice'>You feel an intense craving for pineapple.</span>" gain_text = "<span class='notice'>You feel an intense craving for pineapple.</span>"
lose_text = "<span class='notice'>Your feelings towards pineapples seem to return to a lukewarm state.</span>" lose_text = "<span class='notice'>Your feelings towards pineapples seem to return to a lukewarm state.</span>"
medical_record_text = "Patient demonstrates a pathological love of pineapple."
/datum/quirk/pineapple_liker/add() /datum/quirk/pineapple_liker/add()
var/mob/living/carbon/human/H = quirk_holder var/mob/living/carbon/human/H = quirk_holder
@@ -34,6 +35,7 @@
value = 0 value = 0
gain_text = "<span class='notice'>You find yourself pondering what kind of idiot actually enjoys pineapples...</span>" gain_text = "<span class='notice'>You find yourself pondering what kind of idiot actually enjoys pineapples...</span>"
lose_text = "<span class='notice'>Your feelings towards pineapples seem to return to a lukewarm state.</span>" lose_text = "<span class='notice'>Your feelings towards pineapples seem to return to a lukewarm state.</span>"
medical_record_text = "Patient is correct to think that pineapple is disgusting."
/datum/quirk/pineapple_hater/add() /datum/quirk/pineapple_hater/add()
var/mob/living/carbon/human/H = quirk_holder var/mob/living/carbon/human/H = quirk_holder
@@ -52,6 +54,7 @@
value = 0 value = 0
gain_text = "<span class='notice'>You start craving something that tastes strange.</span>" gain_text = "<span class='notice'>You start craving something that tastes strange.</span>"
lose_text = "<span class='notice'>You feel like eating normal food again.</span>" lose_text = "<span class='notice'>You feel like eating normal food again.</span>"
medical_record_text = "Patient demonstrates irregular nutrition preferences."
/datum/quirk/deviant_tastes/add() /datum/quirk/deviant_tastes/add()
var/mob/living/carbon/human/H = quirk_holder var/mob/living/carbon/human/H = quirk_holder
@@ -92,7 +95,7 @@
value = 0 value = 0
gain_text = "<span class='notice'>You feel more prudish.</span>" gain_text = "<span class='notice'>You feel more prudish.</span>"
lose_text = "<span class='notice'>You don't feel as prudish as before.</span>" lose_text = "<span class='notice'>You don't feel as prudish as before.</span>"
medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin." medical_record_text = "Patient exhibits a special gene that makes them immune to aphrodisiacs."
/datum/quirk/libido /datum/quirk/libido
name = "Nymphomania" name = "Nymphomania"
@@ -134,6 +137,7 @@
value = 0 value = 0
mob_trait = TRAIT_PHARMA mob_trait = TRAIT_PHARMA
lose_text = "<span class='notice'>Your liver feels different.</span>" lose_text = "<span class='notice'>Your liver feels different.</span>"
medical_record_text = "Non-invasive tests report that the patient's metabolism is indeed incompatible with a certain \"stimulants\"."
var/active = FALSE var/active = FALSE
var/power = 0 var/power = 0
var/cachedmoveCalc = 1 var/cachedmoveCalc = 1
@@ -22,27 +22,17 @@
target_trait = ZTRAIT_STATION target_trait = ZTRAIT_STATION
immunity_type = "rad" immunity_type = "rad"
var/radiation_intensity = 100
/datum/weather/rad_storm/telegraph() /datum/weather/rad_storm/telegraph()
..() ..()
status_alarm(TRUE) status_alarm(TRUE)
/datum/weather/rad_storm/weather_act(mob/living/L) /datum/weather/rad_storm/weather_act(mob/living/L)
var/resist = L.getarmor(null, "rad") var/resist = L.getarmor(null, "rad")
if(prob(40)) var/ratio = 1 - (min(resist, 100) / 100)
if(ishuman(L)) L.rad_act(radiation_intensity * ratio)
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)
/datum/weather/rad_storm/end() /datum/weather/rad_storm/end()
if(..()) if(..())
@@ -265,6 +265,7 @@
armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 35000 max_temperature = 35000
operation_req_access = list(ACCESS_SYNDICATE) operation_req_access = list(ACCESS_SYNDICATE)
internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/honker/dark wreckage = /obj/structure/mecha_wreckage/honker/dark
max_equip = 3 max_equip = 3
spawn_tracked = FALSE spawn_tracked = FALSE
+26 -1
View File
@@ -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) /datum/game_mode/dynamic/proc/log_threat(var/log_str,var/verbose = FALSE)
threat_log_verbose += ("[worldtime2text()]: "+log_str) threat_log_verbose += ("[worldtime2text()]: "+log_str)
SSblackbox.record_feedback("tally","dynamic_threat_log",1,log_str)
if(!verbose) if(!verbose)
threat_log += log_str 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 peaceful_percentage = round(LORENTZ_CUMULATIVE_DISTRIBUTION(relative_threat, GLOB.dynamic_curve_centre, GLOB.dynamic_curve_width), 0.01)*100
threat = threat_level 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() /datum/game_mode/dynamic/can_start()
message_admins("Dynamic mode parameters for the round:") 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) if(GLOB.dynamic_forced_threat_level >= 0)
threat_level = round(GLOB.dynamic_forced_threat_level, 0.1) threat_level = round(GLOB.dynamic_forced_threat_level, 0.1)
threat = threat_level threat = threat_level
SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Threat level (forced by admins)")
else else
generate_threat() generate_threat()
@@ -384,7 +390,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if (roundstart_rules.len <= 0) if (roundstart_rules.len <= 0)
log_game("DYNAMIC: [roundstart_rules.len] rules.") log_game("DYNAMIC: [roundstart_rules.len] rules.")
return TRUE 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) if(GLOB.dynamic_forced_roundstart_ruleset.len > 0)
rigged_roundstart() rigged_roundstart()
else else
@@ -537,6 +544,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if(rule.execute()) if(rule.execute())
if(rule.persistent) if(rule.persistent)
current_rules += rule current_rules += rule
SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info())
return TRUE return TRUE
rule.clean_up() // Refund threat, delete teams and so on. rule.clean_up() // Refund threat, delete teams and so on.
executed_rules -= rule executed_rules -= rule
@@ -615,6 +623,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
else if(new_rule.flags & ONLY_RULESET) else if(new_rule.flags & ONLY_RULESET)
only_ruleset_executed = TRUE only_ruleset_executed = TRUE
log_game("DYNAMIC: Making a call to a specific ruleset...[new_rule.name]!") 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 executed_rules += new_rule
if (new_rule.persistent) if (new_rule.persistent)
current_rules += new_rule 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.") 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.") log_game("DYNAMIC: [key_name(M)] joined the station, and was selected by the [rule.name] ruleset.")
executed_rules += rule executed_rules += rule
SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info())
rule.candidates.Cut() rule.candidates.Cut()
if (rule.persistent) if (rule.persistent)
current_rules += rule current_rules += rule
@@ -655,6 +665,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
for (var/datum/dynamic_ruleset/rule in current_rules) 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. if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing.
current_rules -= rule 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 (midround_injection_cooldown < world.time)
if (GLOB.dynamic_forced_extended) if (GLOB.dynamic_forced_extended)
@@ -673,6 +685,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
update_playercounts() update_playercounts()
if (get_injection_chance()) if (get_injection_chance())
SSblackbox.record_feedback("tally","dynamic",1,"Attempted midround injections")
var/cur_threat_frac = threat/threat_level var/cur_threat_frac = threat/threat_level
var/list/drafted_rules = list() var/list/drafted_rules = list()
var/antag_num = current_players[CURRENT_LIVING_ANTAGS].len 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)) drafted_rules[rule] = round(rule.get_weight() + (rule.cost * cur_threat_frac))
else else
drafted_rules[rule] = rule.get_weight() 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) if (drafted_rules.len > 0)
SSblackbox.record_feedback("tally","dynamic",1,"Successful midround injections")
picking_midround_latejoin_rule(drafted_rules) picking_midround_latejoin_rule(drafted_rules)
else else
midround_injection_cooldown = (midround_injection_cooldown + world.time)/2 midround_injection_cooldown = (midround_injection_cooldown + world.time)/2
if(event_injection_cooldown < world.time) 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) 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) 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.") 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.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost)
if(rule.ready()) if(rule.ready())
drafted_rules[rule] = rule.get_weight() 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) if(drafted_rules.len > 0)
SSblackbox.record_feedback("tally","dynamic",1,"Successful event injections")
picking_midround_latejoin_rule(drafted_rules) picking_midround_latejoin_rule(drafted_rules)
/// Updates current_players. /// Updates current_players.
@@ -795,6 +815,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
forced_latejoin_rule = null forced_latejoin_rule = null
else if (latejoin_injection_cooldown < world.time && prob(get_injection_chance())) 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() var/list/drafted_rules = list()
for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules) for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules)
if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) 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() drafted_rules[rule] = rule.get_weight()
if (drafted_rules.len > 0 && picking_midround_latejoin_rule(drafted_rules)) 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) 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 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. /// Refund threat, but no more than threat_level.
/datum/game_mode/dynamic/proc/refund_threat(regain) /datum/game_mode/dynamic/proc/refund_threat(regain)
threat = min(threat_level,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) log_threat("[regain] refunded. Threat is now [threat].", verbose = TRUE)
/// Generate threat and increase the threat_level if it goes beyond, capped at 100 /// 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) threat = min(100, threat+gain)
if(threat > threat_level) if(threat > threat_level)
threat_level = threat 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) log_threat("[gain] created. Threat is now [threat] and threat level is now [threat_level].", verbose = TRUE)
/// Expend threat, can't fall under 0. /// Expend threat, can't fall under 0.
/datum/game_mode/dynamic/proc/spend_threat(cost) /datum/game_mode/dynamic/proc/spend_threat(cost)
threat = max(threat-cost,0) threat = max(threat-cost,0)
SSblackbox.record_feedback("tally","dynamic_threat",cost,"Threat spent")
log_threat("[cost] spent. Threat is now [threat].", verbose = TRUE) log_threat("[cost] spent. Threat is now [threat].", verbose = TRUE)
/// Turns the value generated by lorentz distribution to threat value between 0 and 100. /// 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). /// 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. /// 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 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() /datum/dynamic_ruleset/New()
..() ..()
@@ -91,8 +94,15 @@
var/costs = CONFIG_GET(keyed_list/dynamic_cost) var/costs = CONFIG_GET(keyed_list/dynamic_cost)
var/requirementses = CONFIG_GET(keyed_list/dynamic_requirements) // can't damn well use requirements 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/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) 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) if(config_tag in costs)
cost = costs[config_tag] cost = costs[config_tag]
if(config_tag in requirementses) 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 /// 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) /datum/dynamic_ruleset/proc/acceptable(population = 0, threat_level = 0)
if(minimum_players > population) if(minimum_players > population)
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to low pop")
return FALSE return FALSE
if(maximum_players > 0 && population > maximum_players) if(maximum_players > 0 && population > maximum_players)
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to high pop")
return FALSE return FALSE
if (population >= GLOB.dynamic_high_pop_limit) if (population >= GLOB.dynamic_high_pop_limit)
indice_pop = 10 indice_pop = 10
if(threat_level < high_population_requirement) 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]") log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[high_population_requirement]")
return FALSE return FALSE
else else
@@ -132,6 +145,7 @@
log_game("DYNAMIC: requirements and antag_cap lists have different lengths in ruleset [name]. Likely config issue, report this.") 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) indice_pop = min(requirements.len,round(population/pop_per_requirement)+1)
if(threat_level < requirements[indice_pop]) 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]]") log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[requirements[indice_pop]]")
return FALSE return FALSE
else else
@@ -178,6 +192,7 @@
/// IMPORTANT: If ready() returns TRUE, that means pre_execute() or execute() should never fail! /// IMPORTANT: If ready() returns TRUE, that means pre_execute() or execute() should never fail!
/datum/dynamic_ruleset/proc/ready(forced = 0) /datum/dynamic_ruleset/proc/ready(forced = 0)
if (required_candidates > candidates.len) if (required_candidates > candidates.len)
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough candidates")
return FALSE return FALSE
return TRUE return TRUE
@@ -212,6 +227,24 @@
/datum/dynamic_ruleset/proc/check_finished() /datum/dynamic_ruleset/proc/check_finished()
return FALSE 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 // // ROUNDSTART RULESETS //
@@ -3,6 +3,17 @@
var/typepath // typepath of the event var/typepath // typepath of the event
var/triggering 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() /datum/dynamic_ruleset/event/execute()
var/datum/round_event/E = new typepath() var/datum/round_event/E = new typepath()
E.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1) 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) var/threat = round(mode.threat_level/10)
if (job_check < required_enemies[threat]) if (job_check < required_enemies[threat])
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
return FALSE return FALSE
return TRUE return TRUE
@@ -125,6 +137,7 @@
requirements = list(5,5,5,5,5,5,5,5,5,5) requirements = list(5,5,5,5,5,5,5,5,5,5)
high_population_requirement = 5 high_population_requirement = 5
repeatable = TRUE repeatable = TRUE
always_max_weight = TRUE
////////////////////////////////////////////// //////////////////////////////////////////////
// // // //
@@ -146,12 +159,15 @@
/datum/dynamic_ruleset/event/meteor_wave/ready() /datum/dynamic_ruleset/event/meteor_wave/ready()
if(mode.threat_level > 40 && mode.threat >= 25 && prob(20)) if(mode.threat_level > 40 && mode.threat >= 25 && prob(20))
name = "Meteor Wave: Threatening"
cost = 25 cost = 25
typepath = /datum/round_event/meteor_wave/threatening typepath = /datum/round_event/meteor_wave/threatening
else if(mode.threat_level > 50 && mode.threat >= 40 && prob(30)) else if(mode.threat_level > 50 && mode.threat >= 40 && prob(30))
name = "Meteor Wave: Catastrophic"
cost = 40 cost = 40
typepath = /datum/round_event/meteor_wave/catastrophic typepath = /datum/round_event/meteor_wave/catastrophic
else else
name = "Meteor Wave: Normal"
cost = 15 cost = 15
typepath = /datum/round_event/meteor_wave typepath = /datum/round_event/meteor_wave
return ..() return ..()
@@ -280,6 +296,7 @@
requirements = list(5,5,5,5,5,5,5,5,5,5) requirements = list(5,5,5,5,5,5,5,5,5,5)
high_population_requirement = 5 high_population_requirement = 5
repeatable = TRUE repeatable = TRUE
always_max_weight = TRUE
/datum/dynamic_ruleset/event/space_dust /datum/dynamic_ruleset/event/space_dust
name = "Minor Space Dust" name = "Minor Space Dust"
@@ -293,6 +310,7 @@
requirements = list(5,5,5,5,5,5,5,5,5,5) requirements = list(5,5,5,5,5,5,5,5,5,5)
high_population_requirement = 5 high_population_requirement = 5
repeatable = TRUE repeatable = TRUE
always_max_weight = TRUE
/datum/dynamic_ruleset/event/major_dust /datum/dynamic_ruleset/event/major_dust
name = "Major Space Dust" name = "Major Space Dust"
@@ -332,6 +350,7 @@
requirements = list(101,101,101,5,5,5,5,5,5,5) requirements = list(101,101,101,5,5,5,5,5,5,5)
high_population_requirement = 5 high_population_requirement = 5
repeatable = TRUE repeatable = TRUE
always_max_weight = TRUE
/datum/dynamic_ruleset/event/radiation_storm /datum/dynamic_ruleset/event/radiation_storm
name = "Radiation Storm" name = "Radiation Storm"
@@ -36,9 +36,9 @@
continue // Dead players cannot count as opponents 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))) 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 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) var/threat = round(mode.threat_level/10)
if (job_check < required_enemies[threat]) if (job_check < required_enemies[threat])
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
return FALSE return FALSE
return ..() return ..()
@@ -69,6 +69,7 @@
high_population_requirement = 15 high_population_requirement = 15
repeatable = TRUE repeatable = TRUE
flags = TRAITOR_RULESET flags = TRAITOR_RULESET
always_max_weight = TRUE
////////////////////////////////////////////// //////////////////////////////////////////////
// // // //
@@ -87,6 +87,7 @@
var/threat = round(mode.threat_level/10) var/threat = round(mode.threat_level/10)
if (job_check < required_enemies[threat]) if (job_check < required_enemies[threat])
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
return FALSE return FALSE
return TRUE return TRUE
@@ -179,6 +180,7 @@
repeatable = TRUE repeatable = TRUE
high_population_requirement = 15 high_population_requirement = 15
flags = TRAITOR_RULESET flags = TRAITOR_RULESET
always_max_weight = TRUE
/datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0) /datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0)
var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len
@@ -291,6 +293,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE) /datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
if(GLOB.wizardstart.len == 0) if(GLOB.wizardstart.len == 0)
log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") 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) /datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
return ..() return ..()
@@ -389,6 +393,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE) /datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
return ..() return ..()
@@ -420,6 +425,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE) /datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
return ..() return ..()
@@ -519,6 +525,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE) /datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
return ..() return ..()
@@ -557,6 +564,7 @@
if(deadMobs < REVENANT_SPAWN_THRESHOLD) if(deadMobs < REVENANT_SPAWN_THRESHOLD)
return FALSE return FALSE
if(required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies
var/turf/T = get_turf(L) var/turf/T = get_turf(L)
@@ -604,6 +612,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE) /datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE)
if(required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
if(isturf(L.loc)) if(isturf(L.loc))
@@ -655,6 +664,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE) /datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE)
if(required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
team = new /datum/team/abductor_team team = new /datum/team/abductor_team
if(team.team_number > ABDUCTOR_MAX_TEAMS) if(team.team_number > ABDUCTOR_MAX_TEAMS)
@@ -694,6 +704,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE) /datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE)
if(required_candidates > (dead_players.len + list_observers.len)) 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 FALSE
if(!spawn_loc) if(!spawn_loc)
var/list/spawn_locs = list() var/list/spawn_locs = list()
@@ -21,6 +21,7 @@
requirements = list(50,50,50,50,50,50,50,50,50,50) requirements = list(50,50,50,50,50,50,50,50,50,50)
high_population_requirement = 40 high_population_requirement = 40
antag_cap = list(1,1,1,1,2,2,2,2,3,3) 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) var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec)
/datum/dynamic_ruleset/roundstart/traitor/pre_execute() /datum/dynamic_ruleset/roundstart/traitor/pre_execute()
+2 -2
View File
@@ -14,8 +14,8 @@
false_report_weight = 10 false_report_weight = 10
restricted_jobs = list("AI", "Cyborg") 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") 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_players = 20
required_enemies = 2 required_enemies = 1
recommended_enemies = 3 recommended_enemies = 3
enemy_minimum_age = 14 enemy_minimum_age = 14
+3 -2
View File
@@ -181,8 +181,9 @@ Class Procs:
if(isliving(A)) if(isliving(A))
var/mob/living/L = A var/mob/living/L = A
L.update_canmove() L.update_canmove()
SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant) if(occupant)
occupant = null SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant)
occupant = null
/obj/machinery/proc/can_be_occupant(atom/movable/am) /obj/machinery/proc/can_be_occupant(atom/movable/am)
return occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am) return occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am)
+44 -68
View File
@@ -12,7 +12,6 @@
var/filling = FALSE var/filling = FALSE
var/obj/item/reagent_containers/blood/bag = null var/obj/item/reagent_containers/blood/bag = null
var/obj/item/reagent_containers/blood/outbag = null var/obj/item/reagent_containers/blood/outbag = null
var/bloodstored = 0
var/maxbloodstored = 1000 var/maxbloodstored = 1000
var/menustat = "menu" var/menustat = "menu"
var/efficiency = 0 var/efficiency = 0
@@ -20,7 +19,7 @@
/obj/machinery/bloodbankgen/Initialize() /obj/machinery/bloodbankgen/Initialize()
. = ..() . = ..()
create_reagents(1000) create_reagents(maxbloodstored, AMOUNT_VISIBLE)
update_icon() update_icon()
/obj/machinery/bloodbankgen/Destroy() /obj/machinery/bloodbankgen/Destroy()
@@ -28,6 +27,14 @@
QDEL_NULL(outbag) QDEL_NULL(outbag)
return ..() 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) /obj/machinery/bloodbankgen/handle_atom_del(atom/A)
..() ..()
if(A == bag) if(A == bag)
@@ -108,74 +115,42 @@
/obj/machinery/bloodbankgen/process() /obj/machinery/bloodbankgen/process()
if(!is_operational()) if(!is_operational())
return PROCESS_KILL return
bloodstored = reagents.total_volume
var/transfer_amount = 20 var/transfer_amount = 20
if(draining) if(draining)
if(reagents.total_volume >= reagents.maximum_volume) if(reagents.total_volume >= reagents.maximum_volume || !bag || !bag.reagents.total_volume)
draining = FALSE beep_stop_pumping()
return return
var/blood_amount = bag.reagents.get_reagent_amount("blood")
if(bag) //monitor the machine and blood bag's reagents storage.
if(bag.reagents.total_volume) var/amount = min(blood_amount, min(transfer_amount, reagents.maximum_volume - reagents.total_volume))
var/datum/reagent/blood/B = bag.reagents.has_reagent("blood") if(!amount)
if(B) beep_stop_pumping()
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()
return 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(filling)
if(!reagents || !reagents.total_volume) if(!reagents.total_volume || !outbag || outbag.reagents.total_volume >= outbag.reagents.maximum_volume)
filling = FALSE //there ain't anything in the machine yo. beep_stop_pumping("[src] pings.", TRUE)
return return
if(outbag && outbag.reagents.total_volume < outbag.reagents.maximum_volume) //monitor the output bag's reagents storage.
var/amount = outbag.reagents.maximum_volume - outbag.reagents.total_volume //monitor the output bag's internal storage var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume)
amount = min(amount, transfer_amount) reagents.trans_to(outbag, amount)
if(!amount) update_icon()
filling = FALSE
visible_message("[src] pings.")
playsound(loc, 'sound/machines/beep.ogg', 50, 1)
updateUsrDialog()
return
reagents.trans_to(outbag, amount) /obj/machinery/bloodbankgen/proc/beep_stop_pumping(msg = "[src] beeps loudly.", out_instead_of_in = FALSE)
outbag.update_icon() if(out_instead_of_in)
update_icon() filling = FALSE
updateUsrDialog() else
else draining = FALSE
visible_message("[src] pings.") updateUsrDialog()
playsound(loc, 'sound/machines/beep.ogg', 50, 1) audible_message(msg)
filling = FALSE playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
updateUsrDialog()
return
/obj/machinery/bloodbankgen/attackby(obj/item/O, mob/user, params) /obj/machinery/bloodbankgen/attackby(obj/item/O, mob/user, params)
if(user.a_intent == INTENT_HARM) if(user.a_intent == INTENT_HARM)
@@ -198,8 +173,8 @@
if(istype(O, /obj/item/reagent_containers/blood)) if(istype(O, /obj/item/reagent_containers/blood))
. = TRUE //no afterattack . = TRUE //no afterattack
var/msg = "" var/msg
if(!panel_open) if(panel_open)
. += "Close the maintenance panel" . += "Close the maintenance panel"
if(!anchored) if(!anchored)
. += "[msg ? " and a" : "A"]nchor its bolts" . += "[msg ? " and a" : "A"]nchor its bolts"
@@ -267,7 +242,7 @@
if(!bag && !outbag) if(!bag && !outbag)
dat += "<div class='statusDisplay'>No containers inside, please insert container.</div>" 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.set_content(dat)
popup.open() popup.open()
@@ -305,6 +280,7 @@
if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) if(usr && Adjacent(usr) && !issiliconoradminghost(usr))
usr.put_in_hands(bag) usr.put_in_hands(bag)
bag = null bag = null
draining = null
update_icon() update_icon()
/obj/machinery/bloodbankgen/proc/detachoutput() /obj/machinery/bloodbankgen/proc/detachoutput()
@@ -313,6 +289,7 @@
if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) if(usr && Adjacent(usr) && !issiliconoradminghost(usr))
usr.put_in_hands(outbag) usr.put_in_hands(outbag)
outbag = null outbag = null
filling = null
update_icon() update_icon()
/obj/machinery/bloodbankgen/proc/attachinput(obj/item/O, mob/user) /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>") to_chat(user, "<span class='notice'>There is already something in this slot!</span>")
/obj/machinery/bloodbankgen/Topic(href, href_list) /obj/machinery/bloodbankgen/Topic(href, href_list)
if(..() || panel_open) . = ..()
if(. | !is_operational())
return return
usr.set_machine(src) usr.set_machine(src)
if(href_list["activateinput"]) if(href_list["activateinput"])
activateinput() activateinput()
updateUsrDialog()
else if(href_list["detachinput"]) else if(href_list["detachinput"])
detachinput() detachinput()
updateUsrDialog()
else if(href_list["activateoutput"]) else if(href_list["activateoutput"])
activateoutput() activateoutput()
updateUsrDialog()
else if(href_list["detachoutput"]) else if(href_list["detachoutput"])
detachoutput() detachoutput()
updateUsrDialog()
updateUsrDialog()
@@ -70,7 +70,7 @@
if(check_access(I)) if(check_access(I))
authenticated = 1 authenticated = 1
auth_id = "[I.registered_name] ([I.assignment])" auth_id = "[I.registered_name] ([I.assignment])"
if((20 in I.access)) if((ACCESS_CAPTAIN in I.access))
authenticated = 2 authenticated = 2
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0) playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
if(obj_flags & EMAGGED) if(obj_flags & EMAGGED)
@@ -279,7 +279,7 @@
// OMG CENTCOM LETTERHEAD // OMG CENTCOM LETTERHEAD
if("MessageCentCom") if("MessageCentCom")
if(authenticated==2) if(authenticated)
if(!checkCCcooldown()) if(!checkCCcooldown())
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>") to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
return return
+48 -51
View File
@@ -58,8 +58,6 @@
/obj/machinery/firealarm/update_icon() /obj/machinery/firealarm/update_icon()
cut_overlays() cut_overlays()
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
var/area/A = src.loc
A = A.loc
if(panel_open) if(panel_open)
icon_state = "fire_b[buildstage]" icon_state = "fire_b[buildstage]"
@@ -69,23 +67,32 @@
icon_state = "firex" icon_state = "firex"
return return
icon_state = "fire0"
if(stat & NOPOWER) if(stat & NOPOWER)
icon_state = "fire0"
return return
if(is_station_level(z)) add_overlay("fire_overlay")
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)
if(detecting) if(is_station_level(z))
add_overlay("overlay_[A.fire ? "fire" : "clear"]") add_overlay("fire_[GLOB.security_level]")
SSvis_overlays.add_vis_overlay(src, icon, "overlay_[A.fire ? "fire" : "clear"]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
else else
add_overlay("overlay_fire") add_overlay("fire_[SEC_LEVEL_GREEN]")
SSvis_overlays.add_vis_overlay(src, icon, "overlay_fire", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) 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) /obj/machinery/firealarm/emp_act(severity)
. = ..() . = ..()
@@ -101,6 +108,7 @@
if(obj_flags & EMAGGED) if(obj_flags & EMAGGED)
return return
obj_flags |= EMAGGED obj_flags |= EMAGGED
update_icon()
if(user) if(user)
user.visible_message("<span class='warning'>Sparks fly out of [src]!</span>", user.visible_message("<span class='warning'>Sparks fly out of [src]!</span>",
"<span class='notice'>You emag [src], disabling its thermal sensors.</span>") "<span class='notice'>You emag [src], disabling its thermal sensors.</span>")
@@ -112,51 +120,39 @@
alarm() alarm()
..() ..()
/obj/machinery/firealarm/proc/alarm() /obj/machinery/firealarm/proc/alarm(mob/user)
if(!is_operational() && (last_alarm+FIREALARM_COOLDOWN < world.time)) if(!is_operational() || (last_alarm+FIREALARM_COOLDOWN > world.time))
return return
last_alarm = world.time last_alarm = world.time
var/area/A = get_area(src) var/area/A = get_area(src)
A.firealert(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()) if(!is_operational())
return return
var/area/A = get_area(src) var/area/A = get_area(src)
A.firereset(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, \ /obj/machinery/firealarm/attack_hand(mob/user)
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) if(buildstage != 2)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) return ..()
if(!ui) add_fingerprint(user)
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"
var/area/A = get_area(src) 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) /obj/machinery/firealarm/attack_robot(mob/user)
if(..() || buildstage != 2) return attack_hand(user)
return
switch(action)
if("reset")
reset()
. = TRUE
if("alarm")
alarm()
. = TRUE
/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params) /obj/machinery/firealarm/attackby(obj/item/W, mob/user, params)
add_fingerprint(user) add_fingerprint(user)
@@ -200,6 +196,12 @@
to_chat(user, "<span class='notice'>You cut the wires from \the [src].</span>") to_chat(user, "<span class='notice'>You cut the wires from \the [src].</span>")
update_icon() update_icon()
return return
else if(W.force) //hit and turn it on
..()
var/area/A = get_area(src)
if(!A.fire)
alarm()
return
if(1) if(1)
if(istype(W, /obj/item/stack/cable_coil)) if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/coil = W var/obj/item/stack/cable_coil/coil = W
@@ -322,8 +324,3 @@
if (!party_overlay) if (!party_overlay)
party_overlay = iconstate2appearance('icons/turf/areas.dmi', "party") party_overlay = iconstate2appearance('icons/turf/areas.dmi', "party")
A.add_overlay(party_overlay) A.add_overlay(party_overlay)
/obj/machinery/firealarm/partyalarm/ui_data(mob/user)
. = ..()
var/area/A = get_area(src)
.["alarm"] = A && A.party
+4 -1
View File
@@ -326,6 +326,9 @@
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) /obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
if(state_open && is_operational()) 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(istype(I, /obj/item/clothing/suit))
if(suit) if(suit)
to_chat(user, "<span class='warning'>The unit already contains a suit!.</span>") to_chat(user, "<span class='warning'>The unit already contains a suit!.</span>")
@@ -437,4 +440,4 @@
if(I) if(I)
I.forceMove(loc) I.forceMove(loc)
. = TRUE . = TRUE
update_icon() update_icon()
+4
View File
@@ -219,6 +219,10 @@
update_icon() update_icon()
return 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) else if(user.a_intent != INTENT_HARM)
if (!state_open) if (!state_open)
+1
View File
@@ -27,6 +27,7 @@
max_temperature = 35000 max_temperature = 35000
leg_overload_coeff = 100 leg_overload_coeff = 100
operation_req_access = list(ACCESS_SYNDICATE) operation_req_access = list(ACCESS_SYNDICATE)
internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/gygax/dark wreckage = /obj/structure/mecha_wreckage/gygax/dark
max_equip = 4 max_equip = 4
spawn_tracked = FALSE spawn_tracked = FALSE
+1
View File
@@ -10,6 +10,7 @@
max_temperature = 25000 max_temperature = 25000
infra_luminosity = 5 infra_luminosity = 5
operation_req_access = list(ACCESS_THEATRE) operation_req_access = list(ACCESS_THEATRE)
internals_req_access = list(ACCESS_THEATRE, ACCESS_ROBOTICS)
wreckage = /obj/structure/mecha_wreckage/honker wreckage = /obj/structure/mecha_wreckage/honker
add_req_access = 0 add_req_access = 0
max_equip = 3 max_equip = 3
+3
View File
@@ -10,6 +10,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
infra_luminosity = 3 infra_luminosity = 3
operation_req_access = list(ACCESS_CENT_SPECOPS) operation_req_access = list(ACCESS_CENT_SPECOPS)
internals_req_access = list(ACCESS_CENT_SPECOPS, ACCESS_ROBOTICS)
wreckage = /obj/structure/mecha_wreckage/marauder wreckage = /obj/structure/mecha_wreckage/marauder
add_req_access = 0 add_req_access = 0
internal_damage_threshold = 25 internal_damage_threshold = 25
@@ -46,6 +47,7 @@
name = "\improper Seraph" name = "\improper Seraph"
icon_state = "seraph" icon_state = "seraph"
operation_req_access = list(ACCESS_CENT_SPECOPS) operation_req_access = list(ACCESS_CENT_SPECOPS)
internals_req_access = list(ACCESS_CENT_SPECOPS, ACCESS_ROBOTICS)
step_in = 3 step_in = 3
max_integrity = 550 max_integrity = 550
wreckage = /obj/structure/mecha_wreckage/seraph wreckage = /obj/structure/mecha_wreckage/seraph
@@ -72,6 +74,7 @@
name = "\improper Mauler" name = "\improper Mauler"
icon_state = "mauler" icon_state = "mauler"
operation_req_access = list(ACCESS_SYNDICATE) operation_req_access = list(ACCESS_SYNDICATE)
internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/mauler wreckage = /obj/structure/mecha_wreckage/mauler
max_equip = 5 max_equip = 5
+3 -1
View File
@@ -12,6 +12,8 @@
layer = ABOVE_MOB_LAYER layer = ABOVE_MOB_LAYER
breach_time = 100 //ten seconds till all goes to shit breach_time = 100 //ten seconds till all goes to shit
recharge_rate = 100 recharge_rate = 100
internals_req_access = list()
add_req_access = 0
wreckage = /obj/structure/mecha_wreckage/durand/neovgre wreckage = /obj/structure/mecha_wreckage/durand/neovgre
spawn_tracked = FALSE spawn_tracked = FALSE
@@ -47,7 +49,7 @@
for(var/mob/M in src) for(var/mob/M in src)
to_chat(M, "<span class='brass'>You are consumed by the fires raging within Neovgre...</span>") to_chat(M, "<span class='brass'>You are consumed by the fires raging within Neovgre...</span>")
M.dust() M.dust()
playsound(src, 'sound/magic/lightning_chargeup.ogg', 100, 0) playsound(src, 'sound/effects/neovgre_exploding.ogg', 100, 0)
src.visible_message("<span class = 'userdanger'>The reactor has gone critical, its going to blow!</span>") src.visible_message("<span class = 'userdanger'>The reactor has gone critical, its going to blow!</span>")
addtimer(CALLBACK(src,.proc/go_critical),breach_time) addtimer(CALLBACK(src,.proc/go_critical),breach_time)
+1
View File
@@ -10,6 +10,7 @@
max_temperature = 15000 max_temperature = 15000
wreckage = /obj/structure/mecha_wreckage/reticence wreckage = /obj/structure/mecha_wreckage/reticence
operation_req_access = list(ACCESS_THEATRE) operation_req_access = list(ACCESS_THEATRE)
internals_req_access = list(ACCESS_THEATRE, ACCESS_ROBOTICS)
add_req_access = 0 add_req_access = 0
internal_damage_threshold = 25 internal_damage_threshold = 25
max_equip = 2 max_equip = 2
+1 -1
View File
@@ -68,7 +68,7 @@
var/internal_damage = 0 //contains bitflags var/internal_damage = 0 //contains bitflags
var/list/operation_req_access = list()//required access level for mecha operation var/list/operation_req_access = list()//required access level for mecha operation
var/list/internals_req_access = list(ACCESS_ENGINE,ACCESS_ROBOTICS)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT var/list/internals_req_access = list(ACCESS_ROBOTICS)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT
var/wreckage var/wreckage
@@ -165,7 +165,7 @@
/obj/item/organ/heart/gland/chem = 5, /obj/item/organ/heart/gland/chem = 5,
/obj/item/organ/heart/gland/mindshock = 5, /obj/item/organ/heart/gland/mindshock = 5,
/obj/item/organ/heart/gland/plasma = 7, /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/slime = 4,
/obj/item/organ/heart/gland/spiderman = 5, /obj/item/organ/heart/gland/spiderman = 5,
/obj/item/organ/heart/gland/ventcrawling = 1, /obj/item/organ/heart/gland/ventcrawling = 1,
@@ -349,6 +349,10 @@
icon_state = "impact_laser_purple" icon_state = "impact_laser_purple"
duration = 4 duration = 4
/obj/effect/temp_visual/impact_effect/shrink
icon_state = "m_shield"
duration = 10
/obj/effect/temp_visual/impact_effect/ion /obj/effect/temp_visual/impact_effect/ion
icon_state = "shieldsparkles" icon_state = "shieldsparkles"
duration = 6 duration = 6
@@ -665,6 +665,13 @@
name = "Booze Dispenser (Machine Board)" name = "Booze Dispenser (Machine Board)"
build_path = /obj/machinery/chem_dispenser/drinks/beer 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 /obj/item/circuitboard/machine/smoke_machine
name = "Smoke Machine (Machine Board)" name = "Smoke Machine (Machine Board)"
build_path = /obj/machinery/smoke_machine build_path = /obj/machinery/smoke_machine
@@ -69,14 +69,9 @@
if (!user.IsAdvancedToolUser()) if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>") to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return return
if(HAS_TRAIT(user, TRAIT_NOGUNS)) if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS))
to_chat(user, "<span class='warning'>Your fingers can't press the button!</span>") to_chat(user, "<span class='warning'>Your fingers can't press the button!</span>")
return return
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna.check_mutation(HULK))
to_chat(user, "<span class='warning'>Your fingers can't press the button!</span>")
return
add_fingerprint(user) add_fingerprint(user)
+18 -10
View File
@@ -14,23 +14,31 @@
do_sparks(rand(5, 9), FALSE, src) do_sparks(rand(5, 9), FALSE, src)
playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) 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) 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)) flashbang_mobs(flashbang_turf, flashbang_range)
bang(get_turf(M), M)
qdel(src) 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! if(M.stat == DEAD) //They're dead!
return return
M.show_message("<span class='warning'>BANG</span>", MSG_AUDIBLE) M.show_message("<span class='warning'>BANG</span>", MSG_AUDIBLE)
var/distance = max(0,get_dist(get_turf(src),T)) var/distance = get_dist(get_turf(M), source)
//Flash
if(M.flash_act(affect_silicon = 1))
M.Knockdown(max(200/max(1,distance), 60))
//Bang
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this. if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
M.Knockdown(200) M.Knockdown(200)
M.soundbang_act(1, 200, 10, 15) M.soundbang_act(1, 200, 10, 15)
else else
M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5)) 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))
+70 -88
View File
@@ -11,95 +11,42 @@
resistance_flags = FLAMMABLE resistance_flags = FLAMMABLE
max_integrity = 40 max_integrity = 40
novariants = FALSE novariants = FALSE
var/heal_brute = 0 item_flags = NOBLUDGEON
var/heal_burn = 0
var/stop_bleeding = 0
var/self_delay = 50 var/self_delay = 50
/obj/item/stack/medical/attack(mob/living/M, mob/user) /obj/item/stack/medical/attack(mob/living/M, mob/user)
if(M.stat == DEAD && !stop_bleeding) . = ..()
var/t_him = "it" if(!M.can_inject(user, TRUE))
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>")
return return
if(M == user)
if(!iscarbon(M) && !isanimal(M)) 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>")
to_chat(user, "<span class='danger'>You don't know how to apply \the [src] to [M]!</span>") if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE)))
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>")
return return
if(ishuman(C)) if(heal(M, user))
var/mob/living/carbon/human/H = C log_combat(user, M, "healed", src.name)
if(stop_bleeding) use(1)
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(isliving(M)) /obj/item/stack/medical/proc/heal(mob/living/M, mob/user)
if(!M.can_inject(user, 1)) return
return
if(user) /obj/item/stack/medical/proc/heal_carbon(mob/living/carbon/C, mob/user, brute, burn)
if (M != user) var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected))
if (isanimal(M)) if(!affecting) //Missing limb?
var/mob/living/simple_animal/critter = M to_chat(user, "<span class='warning'>[C] doesn't have \a [parse_zone(user.zone_selected)]!</span>")
if (!(critter.healable)) return
to_chat(user, "<span class='notice'> You cannot use [src] on [M]!</span>") if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
return if(affecting.brute_dam && brute || affecting.burn_dam && burn)
else if (critter.health == critter.maxHealth) 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>")
to_chat(user, "<span class='notice'> [M] is at full health.</span>") if(affecting.heal_damage(brute, burn))
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))
C.update_damage_overlays() C.update_damage_overlays()
else return TRUE
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>") to_chat(user, "<span class='notice'>[C]'s [affecting.name] can not be healed with \the [src].</span>")
else return
M.heal_bodypart_damage((src.heal_brute/2), (src.heal_burn/2)) to_chat(user, "<span class='notice'>\The [src] won't work on a robotic limb!</span>")
use(1)
/obj/item/stack/medical/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
/obj/item/stack/medical/bruise_pack /obj/item/stack/medical/bruise_pack
name = "bruise pack" name = "bruise pack"
@@ -108,27 +55,56 @@
icon_state = "brutepack" icon_state = "brutepack"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
heal_brute = 40 var/heal_brute = 25
self_delay = 20 self_delay = 20
max_amount = 12
grind_results = list("styptic_powder" = 10) 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) /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>") 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) return (BRUTELOSS)
/obj/item/stack/medical/gauze /obj/item/stack/medical/gauze
name = "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 gender = PLURAL
singular_name = "medical gauze" singular_name = "medical gauze"
icon_state = "gauze" icon_state = "gauze"
stop_bleeding = 1800 var/stop_bleeding = 1800
self_delay = 20 var/heal_brute = 5
self_delay = 10
max_amount = 12 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) /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) if(get_amount() < 2)
to_chat(user, "<span class='warning'>You need at least two gauzes to do this!</span>") to_chat(user, "<span class='warning'>You need at least two gauzes to do this!</span>")
return return
@@ -163,13 +139,19 @@
icon_state = "ointment" icon_state = "ointment"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
heal_burn = 40 var/heal_burn = 25
self_delay = 20 self_delay = 20
max_amount = 12
grind_results = list("silver_sulfadiazine" = 10) 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) /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>") 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 return TOXLOSS
/obj/item/stack/medical/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
@@ -276,6 +276,33 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
/obj/item/stack/sheet/mineral/wood/fifty /obj/item/stack/sheet/mineral/wood/fifty
amount = 50 amount = 50
/*
* Bamboo
*/
GLOBAL_LIST_INIT(bamboo_recipes, list ( \
new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 30, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 70), \
))
/obj/item/stack/sheet/mineral/bamboo
name = "bamboo cuttings"
desc = "Finely cut bamboo sticks."
singular_name = "cut bamboo"
icon_state = "sheet-bamboo"
item_state = "sheet-bamboo"
icon = 'icons/obj/stack_objects.dmi'
throwforce = 15
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/bamboo
grind_results = list("carbon" = 5)
/obj/item/stack/sheet/mineral/bamboo/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.bamboo_recipes
return ..()
/* /*
* Cloth * Cloth
*/ */
+1 -1
View File
@@ -551,7 +551,7 @@
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents() /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src) 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/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src) new /obj/item/ammo_box/foambox/riot(src)
+22 -4
View File
@@ -176,18 +176,36 @@
. = ..() . = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage) var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_w_class = WEIGHT_CLASS_NORMAL STR.max_w_class = WEIGHT_CLASS_NORMAL
STR.max_combined_w_class = 16
STR.max_items = 8
/obj/item/storage/firstaid/tactical/PopulateContents() /obj/item/storage/firstaid/tactical/PopulateContents()
if(empty) if(empty)
return return
new /obj/item/stack/medical/gauze(src) new /obj/item/stack/medical/gauze(src)
new /obj/item/defibrillator/compact/combat/loaded(src) new /obj/item/defibrillator/compact/combat/loaded(src)
new /obj/item/reagent_containers/hypospray/combat(src) new /obj/item/reagent_containers/hypospray/combat/omnizine(src)
new /obj/item/reagent_containers/pill/patch/styptic(src) new /obj/item/reagent_containers/medspray/styptic(src)
new /obj/item/reagent_containers/pill/patch/silver_sulf(src) new /obj/item/reagent_containers/medspray/silver_sulf(src)
new /obj/item/reagent_containers/syringe/lethal/choral(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) 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 * Pill Bottles
*/ */
+7
View File
@@ -285,6 +285,13 @@
. += new /obj/item/shard(location) . += new /obj/item/shard(location)
/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type) /obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
if (get_dist(src,user) > 1)
if (iscarbon(user))
var/mob/living/carbon/H = user
if (!(H.dna && H.dna.check_mutation(TK) && tkMaxRangeCheck(src,H)))
return FALSE
else
return FALSE
if(anchored) if(anchored)
to_chat(user, "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>") to_chat(user, "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>")
return FALSE return FALSE
+8 -2
View File
@@ -126,8 +126,14 @@ GLOBAL_LIST_INIT(freqtospan, list(
return returntext return returntext
return "[copytext("[freq]", 1, 4)].[copytext("[freq]", 4, 5)]" return "[copytext("[freq]", 1, 4)].[copytext("[freq]", 4, 5)]"
/proc/attach_spans(input, list/spans) /atom/movable/proc/attach_spans(input, list/spans)
return "[message_spans_start(spans)][input]</span>" 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) /proc/message_spans_start(list/spans)
var/output = "<span class='" var/output = "<span class='"
+1 -1
View File
@@ -40,5 +40,5 @@
/datum/action/quit_vr/Trigger() //this merely a trigger for /datum/component/virtual_reality /datum/action/quit_vr/Trigger() //this merely a trigger for /datum/component/virtual_reality
. = ..() . = ..()
if(!.) if(.) //The component was not there to block the trigger.
Remove(owner) Remove(owner)
+41 -29
View File
@@ -52,18 +52,16 @@
flags_1 = NODECONSTRUCT_1 flags_1 = NODECONSTRUCT_1
only_current_user_can_interact = TRUE only_current_user_can_interact = TRUE
/obj/machinery/vr_sleeper/hugbox/emag_act(mob/user)
return SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
/obj/machinery/vr_sleeper/emag_act(mob/user) /obj/machinery/vr_sleeper/emag_act(mob/user)
. = ..() . = ..()
if(!(obj_flags & EMAGGED)) if(!(obj_flags & EMAGGED))
return return
obj_flags |= EMAGGED if(!only_current_user_can_interact)
you_die_in_the_game_you_die_for_real = TRUE obj_flags |= EMAGGED
sparks.start() you_die_in_the_game_you_die_for_real = TRUE
addtimer(CALLBACK(src, .proc/emagNotify), 150) sparks.start()
return TRUE addtimer(CALLBACK(src, .proc/emagNotify), 150)
return TRUE
/obj/machinery/vr_sleeper/update_icon() /obj/machinery/vr_sleeper/update_icon()
icon_state = "[initial(icon_state)][state_open ? "-open" : ""]" icon_state = "[initial(icon_state)][state_open ? "-open" : ""]"
@@ -76,7 +74,7 @@
return ..() return ..()
/obj/machinery/vr_sleeper/MouseDrop_T(mob/target, mob/user) /obj/machinery/vr_sleeper/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) if(user.lying || !iscarbon(target) || !Adjacent(target) || !user.canUseTopic(src, BE_CLOSE, TRUE, NO_TK))
return return
close_machine(target) close_machine(target)
@@ -91,26 +89,25 @@
return return
switch(action) switch(action)
if("vr_connect") if("vr_connect")
var/mob/living/carbon/human/human_occupant = occupant var/mob/M = occupant
if(human_occupant && human_occupant.mind && usr == occupant) if(M?.mind && M == usr)
to_chat(M, "<span class='warning'>Transferring to virtual reality...</span>")
to_chat(occupant, "<span class='warning'>Transferring to virtual reality...</span>") var/datum/component/virtual_reality/VR
if(vr_mob && (!istype(vr_mob) || !vr_mob.InCritical()) && !vr_mob.GetComponent(/datum/component/virtual_reality)) if(vr_mob)
vr_mob.AddComponent(/datum/component/virtual_reality, human_occupant, src, you_die_in_the_game_you_die_for_real) VR = vr_mob.GetComponent(/datum/component/virtual_reality)
to_chat(vr_mob, "<span class='notice'>Transfer successful! You are now playing as [vr_mob] in VR!</span>") if(!(VR?.connect(M)))
else
if(allow_creating_vr_mobs) if(allow_creating_vr_mobs)
to_chat(occupant, "<span class='warning'>Virtual avatar not found, attempting to create one...</span>") to_chat(occupant, "<span class='warning'>Virtual avatar [vr_mob ? "corrupted" : "missing"], attempting to create one...</span>")
var/obj/effect/landmark/vr_spawn/V = get_vr_spawnpoint() var/obj/effect/landmark/vr_spawn/V = get_vr_spawnpoint()
var/turf/T = get_turf(V) var/turf/T = get_turf(V)
if(T) if(T)
SStgui.close_user_uis(occupant, src)
new_player(occupant, T, V.vr_outfit) new_player(occupant, T, V.vr_outfit)
to_chat(vr_mob, "<span class='notice'>Transfer successful! You are now playing as [vr_mob] in VR!</span>")
else else
to_chat(occupant, "<span class='warning'>Virtual world misconfigured, aborting transfer</span>") to_chat(occupant, "<span class='warning'>Virtual world misconfigured, aborting transfer</span>")
else else
to_chat(occupant, "<span class='warning'>The virtual world does not support the creation of new virtual avatars, aborting transfer</span>") to_chat(occupant, "<span class='warning'>The virtual world does not support the creation of new virtual avatars, aborting transfer</span>")
else
to_chat(vr_mob, "<span class='notice'>Transfer successful! You are now playing as [vr_mob] in VR!</span>")
. = TRUE . = TRUE
if("delete_avatar") if("delete_avatar")
if(!occupant || usr == occupant) if(!occupant || usr == occupant)
@@ -157,17 +154,31 @@
for(var/obj/effect/landmark/vr_spawn/V in GLOB.landmarks_list) for(var/obj/effect/landmark/vr_spawn/V in GLOB.landmarks_list)
GLOB.vr_spawnpoints[V.vr_category] = V GLOB.vr_spawnpoints[V.vr_category] = V
/obj/machinery/vr_sleeper/proc/new_player(mob/living/carbon/human/H, location, datum/outfit/outfit, transfer = TRUE) /obj/machinery/vr_sleeper/proc/new_player(mob/M, location, datum/outfit/outfit, transfer = TRUE)
if(!H) if(!M)
return return
cleanup_vr_mob() cleanup_vr_mob()
vr_mob = new virtual_mob_type(location) vr_mob = new virtual_mob_type(location)
if(vr_mob.build_virtual_character(H, outfit)) if(vr_mob.build_virtual_character(M, outfit) && iscarbon(vr_mob))
var/mob/living/carbon/human/vr_H = vr_mob var/mob/living/carbon/C = vr_mob
vr_H.updateappearance(TRUE, TRUE, TRUE) C.updateappearance(TRUE, TRUE, TRUE)
if(!transfer || !H.mind) var/datum/component/virtual_reality/VR = vr_mob.AddComponent(/datum/component/virtual_reality, you_die_in_the_game_you_die_for_real)
return if(VR.connect(M))
vr_mob.AddComponent(/datum/component/virtual_reality, H, src, you_die_in_the_game_you_die_for_real) RegisterSignal(VR, COMSIG_COMPONENT_UNREGISTER_PARENT, .proc/unset_vr_mob)
RegisterSignal(VR, COMSIG_COMPONENT_REGISTER_PARENT, .proc/set_vr_mob)
if(!only_current_user_can_interact)
VR.RegisterSignal(src, COMSIG_ATOM_EMAG_ACT, /datum/component/virtual_reality.proc/you_only_live_once)
VR.RegisterSignal(src, COMSIG_MACHINE_EJECT_OCCUPANT, /datum/component/virtual_reality.proc/revert_to_reality)
VR.RegisterSignal(src, COMSIG_PARENT_QDELETING, /datum/component/virtual_reality.proc/machine_destroyed)
to_chat(vr_mob, "<span class='notice'>Transfer successful! You are now playing as [vr_mob] in VR!</span>")
else
to_chat(M, "<span class='notice'>Transfer failed! virtual reality data likely corrupted!</span>")
/obj/machinery/vr_sleeper/proc/unset_vr_mob(datum/component/virtual_reality/VR)
vr_mob = null
/obj/machinery/vr_sleeper/proc/set_vr_mob(datum/component/virtual_reality/VR)
vr_mob = VR.parent
/obj/machinery/vr_sleeper/proc/cleanup_vr_mob() /obj/machinery/vr_sleeper/proc/cleanup_vr_mob()
if(vr_mob) if(vr_mob)
@@ -222,6 +233,7 @@
qdel(C) qdel(C)
for (var/A in corpse_party) for (var/A in corpse_party)
var/mob/M = A var/mob/M = A
if(get_area(M) == vr_area && M.stat == DEAD) if(M && M.stat == DEAD && get_area(M) == vr_area)
qdel(M) qdel(M)
corpse_party -= M
addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES) addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES)
@@ -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 += "<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 += "<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 += "<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") user << browse(dat, "window=radio")
onclose(user, "radio") onclose(user, "radio")
return return

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