diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm
index c46e89e9436..bed554f54f2 100644
--- a/_maps/map_files/MetaStation/z2.dmm
+++ b/_maps/map_files/MetaStation/z2.dmm
@@ -6351,6 +6351,10 @@
/obj/structure/bed/abductor,
/turf/unsimulated/floor/abductor,
/area/abductor_ship)
+"Ur" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water,
+/area/centcom/holding)
(1,1,1) = {"
aa
@@ -35864,7 +35868,7 @@ tv
tu
tu
tQ
-tU
+Ur
th
ab
ab
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
index 398b065cfbd..e6fda6f503a 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
@@ -24,9 +24,6 @@
"af" = (
/obj/structure/table,
/obj/item/clothing/mask/gas,
-/obj/machinery/light/small{
- dir = 1
- },
/obj/item/clothing/glasses/sunglasses/big,
/obj/item/clothing/glasses/sunglasses/big,
/obj/item/clothing/glasses/sunglasses/big,
@@ -34,6 +31,9 @@
/area/ruin/powered/beach)
"ag" = (
/obj/structure/reagent_dispensers/fueltank,
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/ruin/powered/beach)
"ah" = (
@@ -438,6 +438,10 @@
/obj/item/storage/backpack/duffel,
/turf/simulated/floor/beach/sand,
/area/ruin/powered/beach)
+"bL" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/simulated/floor/beach/water,
+/area/ruin/powered/beach)
"bM" = (
/turf/simulated/floor/plasteel/stairs/old,
/area/ruin/powered/beach)
@@ -477,12 +481,6 @@
"bW" = (
/turf/simulated/wall/r_wall,
/area/ruin/powered/beach)
-"cd" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/wall/mineral/sandstone,
-/area/ruin/powered/beach)
"cs" = (
/obj/effect/overlay/palmtree_l,
/obj/machinery/light{
@@ -567,6 +565,14 @@
},
/turf/simulated/floor/pod,
/area/ruin/powered/beach)
+"Ei" = (
+/obj/effect/turf_decal/sand,
+/obj/machinery/light/small{
+ light_power = 3;
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/powered/beach)
"Gc" = (
/turf/simulated/floor/pod/light,
/area/ruin/powered/beach)
@@ -1054,7 +1060,7 @@ aa
(15,1,1) = {"
aa
bW
-cd
+aj
aj
aj
aF
@@ -1087,7 +1093,7 @@ aa
aa
bW
ak
-ar
+Ei
aj
aE
aC
@@ -1335,7 +1341,7 @@ bU
bU
bU
bU
-bU
+bL
bW
aa
"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index e61f0d7a5a1..13850af5db7 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -763,7 +763,7 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -1683,7 +1683,7 @@
/turf/simulated/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"dT" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -1996,7 +1996,7 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -2201,7 +2201,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"eM" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 1;
pixel_y = -24
},
@@ -2513,7 +2513,7 @@
/obj/item/clothing/glasses/hud/health,
/obj/structure/disposalpipe/segment,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 4;
pixel_x = 26
},
@@ -3613,7 +3613,7 @@
/turf/simulated/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/main)
"hZ" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -3921,7 +3921,7 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 2;
pixel_y = 24
},
@@ -3958,7 +3958,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"iG" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -5194,7 +5194,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/bar)
"kM" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 4;
pixel_x = 26
},
@@ -5281,7 +5281,7 @@
/obj/structure/chair{
dir = 1
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -5763,7 +5763,7 @@
/turf/simulated/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"mg" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -5871,7 +5871,7 @@
/obj/structure/bed/roller,
/obj/machinery/iv_drip,
/obj/item/reagent_containers/iv_bag/blood/OMinus,
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -6546,7 +6546,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 2;
pixel_y = 24
},
@@ -6649,7 +6649,7 @@
/turf/simulated/floor/plasteel/white/side,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"oh" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
diff --git a/_maps/map_files/RandomZLevels/beach.dmm b/_maps/map_files/RandomZLevels/beach.dmm
index 76a7da40fb1..4544e3830d8 100644
--- a/_maps/map_files/RandomZLevels/beach.dmm
+++ b/_maps/map_files/RandomZLevels/beach.dmm
@@ -6,7 +6,7 @@
/turf/unsimulated/beach/water/deep,
/area/awaymission/undersea)
"ac" = (
-/obj/machinery/poolcontroller/seacontroller,
+/obj/machinery/poolcontroller/invisible/sea,
/turf/unsimulated/beach/water/deep,
/area/awaymission/undersea)
"ad" = (
@@ -1494,6 +1494,10 @@
/obj/structure/closet/crate,
/turf/unsimulated/beach/sand,
/area/awaymission/beach)
+"LZ" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water/deep,
+/area/awaymission/beach)
(1,1,1) = {"
aa
@@ -15371,7 +15375,7 @@ du
du
du
du
-du
+LZ
"}
(55,1,1) = {"
aa
diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm
index 3c62113aa0b..3d8d1868c2c 100644
--- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm
+++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm
@@ -3608,7 +3608,7 @@
name = "MO19 Research"
})
"fj" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_y = 24
},
@@ -5104,7 +5104,7 @@
pixel_y = 0;
tag = ""
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 28
},
@@ -5267,7 +5267,7 @@
pixel_x = -4;
pixel_y = 2
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_y = 24
},
@@ -5413,7 +5413,7 @@
pixel_x = 0;
pixel_y = 0
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 28
},
@@ -6594,7 +6594,7 @@
name = "MO19 Arrivals"
})
"jp" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -7560,7 +7560,7 @@
name = "MO19 Arrivals"
})
"kK" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_y = -24
},
@@ -8028,7 +8028,7 @@
name = "MO19 Arrivals"
})
"lt" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -8649,7 +8649,7 @@
name = "MO19 Arrivals"
})
"mw" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -8898,7 +8898,7 @@
name = "MO19 Arrivals"
})
"mS" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm
index b9232daea52..541156ddc57 100644
--- a/_maps/map_files/RandomZLevels/spacehotel.dmm
+++ b/_maps/map_files/RandomZLevels/spacehotel.dmm
@@ -859,9 +859,6 @@
},
/turf/unsimulated/beach/sand,
/area/awaymission/beach)
-"bD" = (
-/turf/simulated/floor/plating/lava/smooth,
-/area/awaymission)
"bE" = (
/obj/effect/decal{
name = "rock";
@@ -1619,7 +1616,7 @@
requires_power = 0
})
"cR" = (
-/obj/machinery/poolcontroller/seacontroller,
+/obj/machinery/poolcontroller/invisible/sea,
/turf/unsimulated/wall/metal,
/area/awaymission/undersea{
requires_power = 0
@@ -2062,12 +2059,6 @@
},
/turf/unsimulated/beach/water/drop/dense,
/area/awaymission/beach)
-"dH" = (
-/turf/simulated/floor/plating/lava/smooth,
-/area/awaymission{
- name = "Snowland";
- requires_power = 0
- })
"dI" = (
/obj/machinery/light,
/turf/unsimulated/beach/water/deep/wood_floor{
@@ -4814,6 +4805,15 @@
icon_state = "cult"
},
/area/awaymission/spacehotel)
+"VG" = (
+/obj/effect/decal{
+ name = "rock";
+ icon = 'icons/turf/mining.dmi';
+ icon_state = "rock_side_w"
+ },
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water/deep/dense,
+/area/awaymission/beach)
(1,1,1) = {"
aa
@@ -4842,15 +4842,15 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -4972,15 +4972,15 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -5102,15 +5102,15 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -5232,15 +5232,15 @@ aa
dx
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -5363,14 +5363,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -5493,14 +5493,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -5623,14 +5623,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -5753,14 +5753,14 @@ dy
dk
dk
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -5883,14 +5883,14 @@ dw
dk
dk
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6013,14 +6013,14 @@ dk
dk
dF
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6143,14 +6143,14 @@ dk
dF
dF
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6273,14 +6273,14 @@ dk
dF
dF
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6403,14 +6403,14 @@ dk
dk
dF
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6533,14 +6533,14 @@ dw
dk
dk
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6663,14 +6663,14 @@ dw
dk
dk
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6793,14 +6793,14 @@ dw
dk
dk
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -6923,14 +6923,14 @@ dx
dk
dk
dF
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -7053,14 +7053,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -7183,14 +7183,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -7313,14 +7313,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -7443,14 +7443,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -7573,14 +7573,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -7703,14 +7703,14 @@ aa
dw
dk
dk
-dH
-dH
-dH
-dH
-dH
-dH
-dH
-dH
+dF
+dF
+dF
+dF
+dF
+dF
+dF
+dF
ah
ah
ah
@@ -10564,7 +10564,7 @@ dC
dG
dB
dB
-dB
+VG
ah
ah
ah
@@ -13274,24 +13274,24 @@ ad
ad
ad
ad
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -13404,24 +13404,24 @@ ad
ad
ad
ad
-bD
-bD
-bD
+ad
+ad
+ad
bL
cq
cq
cE
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -13534,8 +13534,8 @@ ad
ad
ad
ad
-bD
-bD
+ad
+ad
bL
bV
bV
@@ -13544,14 +13544,14 @@ bV
cq
cE
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -13664,7 +13664,7 @@ ad
ad
ad
ad
-bD
+ad
bL
bV
bV
@@ -13674,14 +13674,14 @@ bV
bV
cV
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -13794,7 +13794,7 @@ ad
ad
ad
ad
-bD
+ad
bM
bV
cf
@@ -13805,15 +13805,15 @@ cf
bV
cE
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -13924,7 +13924,7 @@ ad
ad
ad
ad
-bD
+ad
bM
bV
bV
@@ -13935,15 +13935,15 @@ bV
bV
cV
cO
-bD
+ad
bL
dd
dd
cE
cO
-bD
-bD
-bD
+ad
+ad
+ad
dJ
dL
cO
@@ -14054,7 +14054,7 @@ ad
ad
ad
ad
-bD
+ad
bN
bV
bV
@@ -14068,7 +14068,7 @@ dd
dd
cP
cO
-bD
+ad
dE
cO
bL
@@ -14184,8 +14184,8 @@ ad
ad
ad
ad
-bD
-bD
+ad
+ad
bM
bV
bV
@@ -14195,15 +14195,15 @@ bV
bV
cV
cO
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
bN
dd
cP
cO
-bD
+ad
dJ
dN
cO
@@ -14314,8 +14314,8 @@ ad
ad
ad
ad
-bD
-bD
+ad
+ad
bM
cf
bV
@@ -14325,15 +14325,15 @@ cf
bV
cP
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -14444,8 +14444,8 @@ ad
ad
ad
ad
-bD
-bD
+ad
+ad
bM
bV
bV
@@ -14454,16 +14454,16 @@ bV
bV
cV
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -14574,8 +14574,8 @@ ad
ad
ad
ad
-bD
-bD
+ad
+ad
bN
cg
cg
@@ -14584,16 +14584,16 @@ bV
bV
cP
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -14704,26 +14704,26 @@ ad
ad
ad
ad
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
bN
cg
cP
cO
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
@@ -14834,26 +14834,26 @@ ad
ad
ad
ad
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
-bD
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
ad
ad
ad
diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm
index 8f9f3746ea8..c5741039f2b 100644
--- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm
+++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm
@@ -812,7 +812,7 @@
name = "UO45 Central Hall"
})
"by" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -1841,7 +1841,7 @@
name = "UO45 Central Hall"
})
"do" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -2133,7 +2133,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -3590,7 +3590,7 @@
name = "UO45 Central Hall"
})
"fW" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -4205,7 +4205,7 @@
name = "UO45 Research"
})
"gZ" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -4314,7 +4314,7 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -5061,7 +5061,7 @@
name = "UO45 Crew Quarters"
})
"iq" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -5827,7 +5827,7 @@
name = "UO45 Crew Quarters"
})
"jw" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -6511,7 +6511,7 @@
initialize_directions = 11;
tag = "icon-manifold-r-f (EAST)"
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -7046,7 +7046,7 @@
name = "UO45 Crew Quarters"
})
"lg" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -7409,7 +7409,7 @@
pixel_x = 0;
tag = ""
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -7594,7 +7594,7 @@
icon_state = "pipe-j1";
tag = "icon-pipe-j1 (EAST)"
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -7668,7 +7668,7 @@
name = "UO45 Research"
})
"lN" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -8181,7 +8181,7 @@
})
"mz" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -8241,7 +8241,7 @@
name = "UO45 Gateway"
})
"mE" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -9938,7 +9938,7 @@
scrub_N2O = 0;
scrub_Toxins = 0
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -10347,7 +10347,7 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -10384,7 +10384,7 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -11386,7 +11386,7 @@
/obj/item/storage/toolbox/mechanical{
pixel_y = 5
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -11735,7 +11735,7 @@
name = "UO45 Engineering"
})
"rj" = (
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -12914,7 +12914,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -15179,7 +15179,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -16281,7 +16281,7 @@
})
"xp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/firealarm{
+/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm
index aa33ac4e65f..7a43bfc098b 100644
--- a/_maps/map_files/cyberiad/z2.dmm
+++ b/_maps/map_files/cyberiad/z2.dmm
@@ -12566,6 +12566,10 @@
/obj/effect/landmark/ai_multicam_room,
/turf/unsimulated/ai_visible,
/area/ai_multicam_room)
+"Qt" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water,
+/area/ninja/holding)
"QE" = (
/obj/structure/chair/sofa/right,
/turf/simulated/shuttle/floor{
@@ -54450,7 +54454,7 @@ fI
fH
fH
he
-hv
+Qt
fg
aN
aN
diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm
index 66ed729e9d6..3bfdb1d12b2 100644
--- a/_maps/map_files/generic/Lavaland.dmm
+++ b/_maps/map_files/generic/Lavaland.dmm
@@ -628,6 +628,7 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
+/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/plasteel,
/area/mine/eva)
"bH" = (
diff --git a/_maps/map_files/templates/spacehotel/s_01.dmm b/_maps/map_files/templates/spacehotel/s_01.dmm
index f7c6ba629c6..f97f6613f07 100644
--- a/_maps/map_files/templates/spacehotel/s_01.dmm
+++ b/_maps/map_files/templates/spacehotel/s_01.dmm
@@ -141,6 +141,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
+"K" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water,
+/area/template_noop)
(1,1,1) = {"
a
@@ -153,7 +157,7 @@ a
"}
(2,1,1) = {"
a
-b
+K
b
l
o
diff --git a/_maps/map_files/templates/spacehotel/s_02.dmm b/_maps/map_files/templates/spacehotel/s_02.dmm
index 5aa78f57470..c3ee3c4a727 100644
--- a/_maps/map_files/templates/spacehotel/s_02.dmm
+++ b/_maps/map_files/templates/spacehotel/s_02.dmm
@@ -142,6 +142,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
+"O" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water,
+/area/template_noop)
(1,1,1) = {"
a
@@ -154,7 +158,7 @@ a
"}
(2,1,1) = {"
a
-b
+O
b
l
o
diff --git a/_maps/map_files/templates/spacehotel/s_04.dmm b/_maps/map_files/templates/spacehotel/s_04.dmm
index 564246a2854..81c1306da96 100644
--- a/_maps/map_files/templates/spacehotel/s_04.dmm
+++ b/_maps/map_files/templates/spacehotel/s_04.dmm
@@ -190,6 +190,10 @@
icon_state = "floor4"
},
/area/template_noop)
+"X" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water,
+/area/template_noop)
(1,1,1) = {"
a
@@ -202,7 +206,7 @@ a
"}
(2,1,1) = {"
a
-b
+X
b
l
o
diff --git a/_maps/map_files/templates/spacehotel/s_05.dmm b/_maps/map_files/templates/spacehotel/s_05.dmm
index 62c82037700..1ff9546e265 100644
--- a/_maps/map_files/templates/spacehotel/s_05.dmm
+++ b/_maps/map_files/templates/spacehotel/s_05.dmm
@@ -129,6 +129,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
+"Z" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water,
+/area/template_noop)
(1,1,1) = {"
a
@@ -141,7 +145,7 @@ a
"}
(2,1,1) = {"
a
-b
+Z
b
k
n
diff --git a/_maps/map_files/templates/spacehotel/s_06.dmm b/_maps/map_files/templates/spacehotel/s_06.dmm
index fa839217019..03a1e7e9e99 100644
--- a/_maps/map_files/templates/spacehotel/s_06.dmm
+++ b/_maps/map_files/templates/spacehotel/s_06.dmm
@@ -131,6 +131,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
+"X" = (
+/obj/machinery/poolcontroller/invisible,
+/turf/unsimulated/beach/water,
+/area/template_noop)
(1,1,1) = {"
a
@@ -143,7 +147,7 @@ a
"}
(2,1,1) = {"
a
-b
+X
b
m
p
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 4ff62ea4c89..c4478f62837 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -17,6 +17,8 @@
#define ismecha(A) (istype(A, /obj/mecha))
+#define iseffect(A) (istype(A, /obj/effect))
+
#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable
#define is_pen(W) (istype(W, /obj/item/pen))
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 7b9d207e172..f7c5b670dc8 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1718,8 +1718,8 @@ var/mob/dview/dview_mob = new
/proc/turf_clear(turf/T)
for(var/atom/A in T)
if(A.simulated)
- return 0
- return 1
+ return FALSE
+ return TRUE
/proc/screen_loc2turf(scr_loc, turf/origin)
var/tX = splittext(scr_loc, ",")
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index b8e6ee4bc14..b45ef833b9f 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -30,7 +30,7 @@ SUBSYSTEM_DEF(mapping)
var/mining_type = MINETYPE
if (mining_type == "lavaland")
// Spawn Lavaland ruins and rivers.
- seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors, lava_ruins_templates)
+ seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors/unexplored, lava_ruins_templates)
spawn_rivers()
else
// Populate mining Z-level hidden rooms
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index fafc244af14..bbe2db385a0 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -523,3 +523,5 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
return current_state >= GAME_STATE_PLAYING
+/datum/controller/subsystem/ticker/proc/IsRoundInProgress()
+ return current_state == GAME_STATE_PLAYING
\ No newline at end of file
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 05f430136f0..b7d687d090b 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -624,7 +624,7 @@ var/record_id_num = 1001
clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
- else if(H.mind.assigned_role in get_all_centcom_jobs())
+ else if(H.mind && H.mind.assigned_role in get_all_centcom_jobs())
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
else
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 32e6487ca57..c52df8c7912 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -12,7 +12,7 @@
var/last_bumped = 0
var/pass_flags = 0
var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom.
- var/simulated = 1 //filter for actions - used by lighting overlays
+ var/simulated = TRUE //filter for actions - used by lighting overlays
var/atom_say_verb = "says"
var/dont_save = 0 // For atoms that are temporary by necessity - like lighting overlays
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 525eb10e52f..bcaf21d5cde 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -380,23 +380,20 @@
//Overlays
/atom/movable/overlay
var/atom/master = null
- anchored = 1
+ anchored = TRUE
+ simulated = FALSE
/atom/movable/overlay/New()
verbs.Cut()
return
/atom/movable/overlay/attackby(a, b, c)
- if(src.master)
- return src.master.attackby(a, b, c)
- return
-
+ if(master)
+ return master.attackby(a, b, c)
/atom/movable/overlay/attack_hand(a, b, c)
- if(src.master)
- return src.master.attack_hand(a, b, c)
- return
-
+ if(master)
+ return master.attack_hand(a, b, c)
/atom/movable/proc/water_act(volume, temperature, source, method = TOUCH) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins)
return TRUE
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index ecb566af64e..e73474bad7d 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -181,9 +181,19 @@
S.Integrate(src)
return FALSE
-/atom/movable/lighting_object/swarmer_act()
+/atom/movable/swarmer_act()
+ if(!simulated)
+ return FALSE
+ return ..()
+
+/obj/effect/swarmer_act()
return FALSE
+/obj/effect/decal/cleanable/robot_debris/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
+ S.DisIntegrate(src)
+ qdel(src)
+ return TRUE
+
/obj/item/gun/swarmer_act()//Stops you from eating the entire armory
return FALSE
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 5028db8f0c6..d59aca72145 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -295,10 +295,12 @@
to_chat(O, "The screen bursts into static.")
/obj/machinery/camera/proc/triggerCameraAlarm()
- SSalarms.camera_alarm.triggerAlarm(loc, src)
+ if(is_station_contact(z))
+ SSalarms.camera_alarm.triggerAlarm(loc, src)
/obj/machinery/camera/proc/cancelCameraAlarm()
- SSalarms.camera_alarm.clearAlarm(loc, src)
+ if(is_station_contact(z))
+ SSalarms.camera_alarm.clearAlarm(loc, src)
/obj/machinery/camera/proc/can_use()
if(!status)
diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm
index 17f64c07cb8..312e4cf577e 100644
--- a/code/game/machinery/camera/motion.dm
+++ b/code/game/machinery/camera/motion.dm
@@ -43,19 +43,20 @@
/obj/machinery/camera/proc/cancelAlarm()
if(!status || (stat & NOPOWER))
- return 0
- if(detectTime == -1)
+ return FALSE
+ if(detectTime == -1 && is_station_contact(z))
SSalarms.motion_alarm.clearAlarm(loc, src)
detectTime = 0
- return 1
+ return TRUE
/obj/machinery/camera/proc/triggerAlarm()
if(!status || (stat & NOPOWER))
- return 0
- if(!detectTime) return 0
+ return FALSE
+ if(!detectTime || !is_station_contact(z))
+ return FALSE
SSalarms.motion_alarm.triggerAlarm(loc, src)
detectTime = -1
- return 1
+ return TRUE
/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj)
// Motion cameras outside of an "ai monitored" area will use this to detect stuff.
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 835b0264229..e9504157063 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -21,6 +21,16 @@ FIRE ALARM
var/wiresexposed = 0
var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone
+ var/report_fire_alarms = TRUE // Should triggered fire alarms also trigger an actual alarm?
+ var/show_alert_level = TRUE // Should fire alarms display the current alert level?
+
+/obj/machinery/firealarm/no_alarm
+ report_fire_alarms = FALSE
+
+/obj/machinery/firealarm/syndicate
+ report_fire_alarms = FALSE
+ show_alert_level = FALSE
+
/obj/machinery/firealarm/update_icon()
if(wiresexposed)
@@ -215,40 +225,38 @@ FIRE ALARM
time = min(max(round(time), 0), 120)
/obj/machinery/firealarm/proc/reset()
- if(!( working ))
+ if(!working)
return
var/area/A = get_area(src)
A.fire_reset()
+
for(var/obj/machinery/firealarm/FA in A)
- SSalarms.fire_alarm.clearAlarm(loc, FA)
- return
+ if(is_station_contact(z) && FA.report_fire_alarms)
+ SSalarms.fire_alarm.clearAlarm(loc, FA)
/obj/machinery/firealarm/proc/alarm(var/duration = 0)
- if(!( working))
+ if(!working)
return
+
var/area/A = get_area(src)
for(var/obj/machinery/firealarm/FA in A)
- SSalarms.fire_alarm.triggerAlarm(loc, FA, duration)
+ if(is_station_contact(z) && FA.report_fire_alarms)
+ SSalarms.fire_alarm.triggerAlarm(loc, FA, duration)
+ else
+ A.fire_alert() // Manually trigger alarms if the alarm isn't reported
+
update_icon()
- //playsound(loc, 'sound/ambience/signal.ogg', 75, 0)
- return
/obj/machinery/firealarm/New(location, direction, building)
..()
- if(location)
- loc = location
-
- if(direction)
- dir = direction
-
if(building)
buildstage = 0
- wiresexposed = 1
+ wiresexposed = TRUE
pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0
- if(is_station_contact(z))
+ if(is_station_contact(z) && show_alert_level)
if(security_level)
overlays += image('icons/obj/monitors.dmi', "overlay_[get_security_level()]")
else
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 7ed82b476f9..2bc9196740e 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -348,28 +348,28 @@ Class Procs:
return attack_hand(user)
/obj/machinery/attack_hand(mob/user as mob)
- if(user.lying || user.stat)
- return 1
+ if(user.incapacitated())
+ return TRUE
if(!user.IsAdvancedToolUser())
to_chat(user, "You don't have the dexterity to do this!")
- return 1
+ return TRUE
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= 60)
visible_message("[H] stares cluelessly at [src] and drools.")
- return 1
+ return TRUE
else if(prob(H.getBrainLoss()))
to_chat(user, "You momentarily forget how to use [src].")
- return 1
+ return TRUE
if(panel_open)
add_fingerprint(user)
- return 0
+ return FALSE
if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT))
- return 1
+ return TRUE
add_fingerprint(user)
diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm
index 17fae9df6f6..0d6f76aad38 100644
--- a/code/game/machinery/poolcontroller.dm
+++ b/code/game/machinery/poolcontroller.dm
@@ -20,13 +20,36 @@
var/list/linkedmist = list() //Used to keep track of created mist
var/deep_water = FALSE //set to 1 to drown even standing people
+/obj/machinery/poolcontroller/invisible
+ invisibility = INVISIBILITY_MAXIMUM
+ name = "Water Controller"
+ desc = "An invisible water controller. Players shouldn't see this."
-/obj/machinery/poolcontroller/New() //This proc automatically happens on world start
+/obj/machinery/poolcontroller/invisible/sea
+ name = "Sea Controller"
+ desc = "A controller for the underwater portion of the sea. Players shouldn't see this."
+ deep_water = TRUE
+
+/obj/machinery/poolcontroller/Initialize(mapload)
+ var/contents_loop = linked_area
if(!linked_area)
- for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange
- linkedturfs += W //Add found pool turfs to the central list.
- W.linkedcontroller = src // And add the linked controller to itself.
- ..() //Changed to call parent as per MarkvA's recommendation
+ contents_loop = range(srange, src)
+
+ for(var/turf/T in contents_loop)
+ if(istype(T, /turf/simulated/floor/beach/water))
+ var/turf/simulated/floor/beach/water/W = T
+ W.linkedcontroller = src
+ linkedturfs += T
+ else if(istype(T, /turf/unsimulated/beach/water))
+ var/turf/unsimulated/beach/water/W = T
+ W.linkedcontroller = src
+ linkedturfs += T
+
+ . = ..()
+
+/obj/machinery/poolcontroller/invisible/Initialize(mapload)
+ linked_area = get_area(src)
+ . = ..()
/obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer.
if(!emagged) //If it is not already emagged, emag it.
@@ -190,20 +213,6 @@
return 1
-/obj/machinery/poolcontroller/seacontroller
- invisibility = 101
- unacidable = 1
- name = "Sea Controller"
- desc = "A controller for the underwater portion of the sea. Players shouldn't see this."
- deep_water = TRUE //deep sea is deep water
-
-/obj/machinery/poolcontroller/seacontroller/Initialize()
- linked_area = get_area(src)
- for(var/turf/unsimulated/beach/water/W in linked_area)
- linkedturfs += W //Add found pool turfs to the central list.
- W.linkedcontroller = src // And add the linked controller to itself.
- ..()
-
#undef FRIGID
#undef COOL
#undef NORMAL
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index faaf623fa50..a4020af9d0d 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -3,68 +3,120 @@
desc = "Looks unstable. Best to test it with the clown."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "portal"
- density = 1
- unacidable = 1//Can't destroy energy portals.
- var/failchance = 5
+ density = TRUE
+ unacidable = TRUE
+ anchored = TRUE
+
var/obj/item/target = null
var/creator = null
- anchored = 1
- var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent
- var/can_multitool_to_remove = 0
+
+ var/failchance = 5
+ var/fail_icon = "portal1"
+
+ var/precision = TRUE // how close to the portal you will teleport. FALSE = on the portal, TRUE = adjacent
+ var/can_multitool_to_remove = FALSE
var/ignore_tele_proof_area_setting = FALSE
/obj/effect/portal/Bumped(mob/M as mob|obj)
teleport(M)
-/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
+/obj/effect/portal/New(loc, turf/target, creator = null, lifespan = 300)
+ ..()
+
GLOB.portals += src
- src.loc = loc
+
src.target = target
src.creator = creator
+
if(lifespan > 0)
spawn(lifespan)
qdel(src)
/obj/effect/portal/Destroy()
GLOB.portals -= src
- if(istype(creator, /obj))
+
+ if(isobj(creator))
var/obj/O = creator
O.portal_destroyed(src)
+
creator = null
target = null
return ..()
-/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
- if(istype(M, /obj/effect)) //sparks don't teleport
+/obj/effect/portal/singularity_pull()
+ return
+
+/obj/effect/portal/singularity_act()
+ return
+
+/obj/effect/portal/Crossed(atom/movable/AM)
+ if(isobserver(AM))
+ return ..()
+
+ if(!teleport(AM))
+ return ..()
+
+/obj/effect/portal/attack_tk(mob/user)
+ return
+
+/obj/effect/portal/attack_hand(mob/user)
+ . = ..()
+ if(.)
return
- if(M.anchored&&istype(M, /obj/mecha))
- return
- if(!( target ))
- qdel(src)
- return
- if(istype(M, /atom/movable))
- if(prob(failchance))
- src.icon_state = "portal1"
- if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space.
- invalid_teleport()
- else
- if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target.
- invalid_teleport()
+ if(get_turf(user) == get_turf(src))
+ teleport(user)
+ if(Adjacent(user))
+ user.forceMove(get_turf(src))
+
+/obj/effect/portal/attack_ghost(mob/dead/observer/O)
+ if(target)
+ O.forceMove(target)
/obj/effect/portal/attackby(obj/item/A, mob/user)
- if(istype(A, /obj/item/multitool) && can_multitool_to_remove)
+ if(ismultitool(A) && can_multitool_to_remove)
qdel(src)
+ else if(user && Adjacent(user))
+ user.forceMove(get_turf(src))
+ return TRUE
+
+/obj/effect/portal/proc/teleport(atom/movable/M, force = FALSE)
+ if(!istype(M))
+ return FALSE
+
+ if(!M.simulated || iseffect(M))
+ return FALSE
+
+ if(M.anchored && ismecha(M))
+ return FALSE
+
+ if(!target)
+ qdel(src)
+ return FALSE
+
+ if(ismegafauna(M))
+ message_admins("[M] has used a portal at [ADMIN_VERBOSEJMP(src)] made by [key_name_admin(usr)].")
+
+ if(prob(failchance))
+ icon_state = fail_icon
+ if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space.
+ invalid_teleport()
+ return FALSE
+ else
+ if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target.
+ invalid_teleport()
+ return FALSE
+
+ return TRUE
/obj/effect/portal/proc/invalid_teleport()
visible_message("[src] flickers and fails due to bluespace interference!")
do_sparks(5, 0, loc)
qdel(src)
-
/obj/effect/portal/redspace
name = "redspace portal"
desc = "A portal capable of bypassing bluespace interference."
icon_state = "portal1"
failchance = 0
precision = 0
- ignore_tele_proof_area_setting = TRUE
\ No newline at end of file
+ ignore_tele_proof_area_setting = TRUE
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 6b54f61537e..c03b9694cfa 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -93,14 +93,14 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox20"
desc = "A display case for prized possessions. It taunts you to kick it."
- density = 1
- anchored = 1
- unacidable = 1 //Dissolving the case would also delete the contents.
+ density = TRUE
+ anchored = TRUE
+ unacidable = TRUE //Dissolving the case would also delete the contents.
var/health = 30
var/obj/item/occupant = null
- var/destroyed = 0
- var/locked = 0
- var/burglar_alarm = 0
+ var/destroyed = FALSE
+ var/locked = FALSE
+ var/burglar_alarm = FALSE
var/ue = null
var/image/occupant_overlay = null
var/obj/item/airlock_electronics/circuit
@@ -116,8 +116,8 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
/obj/structure/displaycase/captains_laser
name = "captain's display case"
desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system."
- burglar_alarm = 1
- locked = 1
+ burglar_alarm = TRUE
+ locked = TRUE
req_access = list(access_captain)
start_showpiece_type = /obj/item/gun/energy/laser/captain
@@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
return
/obj/structure/displaycase/proc/burglar_alarm()
- if(burglar_alarm)
+ if(burglar_alarm && is_station_contact(z))
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
visible_message("The burglar alarm goes off!")
@@ -215,10 +215,10 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
sleep(74) // 7.4 seconds long
/obj/structure/displaycase/update_icon()
- if(src.destroyed)
- src.icon_state = "glassbox2b"
+ if(destroyed)
+ icon_state = "glassbox2b"
else
- src.icon_state = "glassbox2[locked]"
+ icon_state = "glassbox2[locked]"
overlays = 0
if(occupant)
var/icon/occupant_icon=getFlatIcon(occupant)
diff --git a/code/game/turfs/simulated/floor/asteroid.dm b/code/game/turfs/simulated/floor/asteroid.dm
index 8ed3cd22b4b..43d77bd39be 100644
--- a/code/game/turfs/simulated/floor/asteroid.dm
+++ b/code/game/turfs/simulated/floor/asteroid.dm
@@ -18,9 +18,6 @@
if(prob(floor_variance))
icon_state = "[environment_type][rand(0,12)]"
-/turf/simulated/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
/turf/simulated/floor/plating/asteroid/burn_tile()
return
@@ -95,12 +92,6 @@
slowdown = 0
return
-/turf/simulated/floor/plating/asteroid/singularity_act()
- return
-
-/turf/simulated/floor/plating/asteroid/singularity_pull(S, current_size)
- return
-
/turf/simulated/floor/plating/asteroid/basalt
name = "volcanic floor"
baseturf = /turf/simulated/floor/plating/asteroid/basalt
diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm
index f3273c7786a..6a213400d04 100644
--- a/code/game/turfs/simulated/floor/chasm.dm
+++ b/code/game/turfs/simulated/floor/chasm.dm
@@ -8,7 +8,7 @@
canSmoothWith = list(/turf/simulated/floor/chasm)
density = TRUE //This will prevent hostile mobs from pathing into chasms, while the canpass override will still let it function like an open turf
var/static/list/falling_atoms = list() //Atoms currently falling into the chasm
- var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse, /atom/movable/lighting_object))
+ var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse))
var/drop_x = 1
var/drop_y = 1
var/drop_z = 1
@@ -75,7 +75,7 @@
return FALSE
if(!isliving(AM) && !isobj(AM))
return FALSE
- if(is_type_in_typecache(AM, forbidden_types) || AM.throwing)
+ if(!AM.simulated || is_type_in_typecache(AM, forbidden_types) || AM.throwing)
return FALSE
//Flies right over the chasm
if(isliving(AM))
diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm
index c1a8bfd6fea..d1ee346b302 100644
--- a/code/game/turfs/simulated/floor/lava.dm
+++ b/code/game/turfs/simulated/floor/lava.dm
@@ -53,13 +53,13 @@
return FALSE
var/thing_to_check = src
- if (AM)
+ if(AM)
thing_to_check = list(AM)
for(var/thing in thing_to_check)
- if(istype(thing, /atom/movable/lighting_object) || istype(thing, /atom/movable/overlay))
- continue
if(isobj(thing))
var/obj/O = thing
+ if(!O.simulated)
+ continue
if((O.resistance_flags & (LAVA_PROOF|INDESTRUCTIBLE)) || O.throwing)
continue
. = 1
@@ -71,7 +71,7 @@
O.resistance_flags &= ~FIRE_PROOF
O.fire_act(10000, 1000)
- else if (isliving(thing))
+ else if(isliving(thing))
. = 1
var/mob/living/L = thing
if(L.flying)
diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm
index 92d4c8811ed..a801fd450c5 100644
--- a/code/game/turfs/simulated/floor/mineral.dm
+++ b/code/game/turfs/simulated/floor/mineral.dm
@@ -254,6 +254,3 @@
/turf/simulated/floor/plating/abductor2/burn_tile()
return //unburnable
-
-/turf/simulated/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
\ No newline at end of file
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index de1e61039e7..ddf71b96798 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -43,6 +43,9 @@
name = "beach"
icon = 'icons/misc/beach.dmi'
+/turf/simulated/floor/beach/pry_tile(obj/item/C, mob/user, silent = FALSE)
+ return
+
/turf/simulated/floor/beach/sand
name = "sand"
icon_state = "sand"
@@ -67,10 +70,6 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
var/obj/machinery/poolcontroller/linkedcontroller = null
-/turf/simulated/floor/beach/water/pry_tile(obj/item/C, mob/user, silent = FALSE)
- return //cannot pry off tiles of water
-
-
/turf/simulated/floor/beach/water/New()
..()
var/image/overlay_image = image('icons/misc/beach.dmi', icon_state = "water5", layer = ABOVE_MOB_LAYER)
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 438240ad503..ee53cd0ca35 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -2,7 +2,7 @@
name = "plating"
icon_state = "plating"
icon = 'icons/turf/floors/plating.dmi'
- intact = 0
+ intact = FALSE
floor_tile = null
broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5")
burnt_states = list("floorscorched1", "floorscorched2")
@@ -103,7 +103,7 @@
/turf/simulated/floor/engine/attack_hand(mob/user as mob)
user.Move_Pulled(src)
-/turf/simulated/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+/turf/simulated/floor/engine/pry_tile(obj/item/C, mob/user, silent = FALSE)
return
/turf/simulated/floor/engine/attackby(obj/item/C as obj, mob/user as mob, params)
@@ -224,7 +224,7 @@
/turf/simulated/floor/snow/ex_act(severity)
return
-/turf/simulated/floor/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+/turf/simulated/floor/snow/pry_tile(obj/item/C, mob/user, silent = FALSE)
return
/turf/simulated/floor/plating/metalfoam
@@ -243,12 +243,10 @@
if(MFOAM_IRON)
icon_state = "ironfoam"
-/turf/simulated/floor/plating/metalfoam/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
/turf/simulated/floor/plating/metalfoam/attackby(var/obj/item/C, mob/user, params)
if(..())
- return 1
+ return TRUE
+
if(istype(C) && C.force)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 23038b21be5..8163bc75acc 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -136,7 +136,7 @@
var/obj/structure/sign/poster/P = O
P.roll_and_drop(src)
else
- O.loc = src
+ O.forceMove(src)
ChangeTurf(/turf/simulated/floor/plating)
diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm
index c08189e4d93..79bf171ce1f 100644
--- a/code/game/turfs/space/transit.dm
+++ b/code/game/turfs/space/transit.dm
@@ -88,7 +88,7 @@
/turf/space/transit/Entered(atom/movable/AM, atom/OldLoc, ignoreRest = 0)
if(!AM)
return
- if(istype(AM, /obj/docking_port) || !AM.simulated)
+ if(!AM.simulated || istype(AM, /obj/docking_port))
return //this was fucking hilarious, the docking ports were getting thrown to random Z-levels
var/max = world.maxx-TRANSITIONEDGE
var/min = 1+TRANSITIONEDGE
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 21b9f9b455a..53cf1917404 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -491,16 +491,14 @@
var/turf/T0 = src
for(var/X in T0.GetAllContents())
var/atom/A = X
+ if(!A.simulated)
+ continue
if(istype(A, /mob/dead))
continue
if(istype(A, /obj/effect/landmark))
continue
if(istype(A, /obj/docking_port))
continue
- if(istype(A, /atom/movable/lighting_object))
- continue
- if(!A.simulated)
- continue
qdel(A, force=TRUE)
T0.ChangeTurf(turf_type)
diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm
index e84df256f6b..ed888d65465 100644
--- a/code/modules/awaymissions/mission_code/stationCollision.dm
+++ b/code/modules/awaymissions/mission_code/stationCollision.dm
@@ -161,7 +161,7 @@ var/sc_safecode5 = "[rand(0,9)]"
desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible."
move_self = 0 //Contianed narsie does not move!
grav_pull = 0 //Contained narsie does not pull stuff in!
- var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_object, /mob/living/simple_animal/hostile/construct)
+ var/uneatable = list(/turf/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct)
//Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment
/obj/singularity/narsie/sc_Narsie/admin_investigate_setup()
@@ -173,14 +173,16 @@ var/sc_safecode5 = "[rand(0,9)]"
mezzer()
/obj/singularity/narsie/sc_Narsie/consume(var/atom/A)
+ if(!A.simulated)
+ return FALSE
if(is_type_in_list(A, uneatable))
- return 0
+ return FALSE
if(istype(A,/mob/living))
var/mob/living/L = A
L.gib()
else if(istype(A,/obj/))
var/obj/O = A
- O.ex_act(1.0)
+ O.ex_act(1)
if(O) qdel(O)
else if(isturf(A))
var/turf/T = A
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index be145752671..c92ec910cdc 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -34,7 +34,6 @@
qdel(O)
wormholes.Cut()
-
/obj/effect/portal/wormhole
name = "wormhole"
desc = "It looks highly unstable; It could close at any moment."
@@ -42,23 +41,26 @@
icon_state = "anom"
failchance = 0
-/obj/effect/portal/wormhole/attack_hand(mob/user)
- teleport(user)
-
-/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params)
- teleport(user)
-
/obj/effect/portal/wormhole/teleport(atom/movable/M)
- if(istype(M, /obj/effect)) //sparks don't teleport
- return
- if(M.anchored && istype(M, /obj/mecha))
- return
+ if(!istype(M))
+ return FALSE
- if(istype(M, /atom/movable))
- var/turf/target
- if(GLOB.portals.len)
- var/obj/effect/portal/P = pick(GLOB.portals)
- if(P && isturf(P.loc))
- target = P.loc
- if(!target) return
- do_teleport(M, target, 1, 1, 0, 0) ///You will appear adjacent to the beacon
+ if(!M.simulated || iseffect(M))
+ return FALSE
+
+ if(M.anchored && ismecha(M))
+ return FALSE
+
+ var/turf/target
+ if(GLOB.portals.len)
+ var/obj/effect/portal/P = pick(GLOB.portals)
+ if(P && isturf(P.loc))
+ target = P.loc
+
+ if(!target)
+ return FALSE
+
+ if(!do_teleport(M, target, 1, TRUE)) ///You will appear adjacent to the beacon
+ return FALSE
+
+ return TRUE
diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm
index fdcf4d2497a..eb9569ad356 100644
--- a/code/modules/food_and_drinks/food/foods/meat.dm
+++ b/code/modules/food_and_drinks/food/foods/meat.dm
@@ -129,7 +129,7 @@
name = "goliath meat"
desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava."
icon_state = "goliathmeat"
- list_reagents = list("nutriment" = 3, "toxin" = 5)
+ list_reagents = list("protein" = 3, "toxin" = 5)
/obj/item/reagent_containers/food/snacks/goliath/burn()
visible_message("[src] finishes cooking!")
@@ -222,6 +222,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF
icon_state = "goliathsteak"
trash = null
+ list_reagents = list("protein" = 6, "vitamin" = 2)
//////////////////////
// Cubes //
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index e623cda0de0..48b4453f6d4 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -157,6 +157,9 @@
pass_flags = PASSTABLE
visible_contents = FALSE
+/obj/machinery/smartfridge/disks/accept_check(obj/item/O)
+ return istype(O, /obj/item/disk)
+
// ----------------------------
// Virology Medical Smartfridge
// ----------------------------
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 82ae53fa5a0..10823051563 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -699,7 +699,7 @@
/obj/item/wormhole_jaunter
name = "wormhole jaunter"
- desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least."
+ desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms."
icon = 'icons/obj/items.dmi'
icon_state = "Jaunter"
item_state = "electronic"
@@ -708,15 +708,16 @@
throw_speed = 3
throw_range = 5
origin_tech = "bluespace=2"
+ slot_flags = SLOT_BELT
/obj/item/wormhole_jaunter/attack_self(mob/user)
- user.visible_message("[user.name] activates the [src.name]!")
+ user.visible_message("[user.name] activates the [name]!")
activate(user, TRUE)
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
if(!device_turf || !is_teleport_allowed(device_turf.z))
- to_chat(user, "You're having difficulties getting the [src.name] to work.")
+ to_chat(user, "You're having difficulties getting the [name] to work.")
return FALSE
return TRUE
@@ -736,49 +737,42 @@
var/list/L = get_destinations(user)
if(!L.len)
- to_chat(user, "The [src.name] found no beacons in the world to anchor a wormhole to.")
+ to_chat(user, "The [name] found no beacons in the world to anchor a wormhole to.")
return
var/chosen_beacon = pick(L)
- var/obj/effect/portal/wormhole/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon))
+ var/obj/effect/portal/jaunt_tunnel/J = new(get_turf(src), get_turf(chosen_beacon), src, 100)
if(adjacent)
try_move_adjacent(J)
+ else
+ J.teleport(user)
playsound(src,'sound/effects/sparks4.ogg',50,1)
qdel(src)
/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
- if(user.get_item_by_slot(SLOT_BELT) == src)
+ if(user.get_item_by_slot(slot_belt) == src)
to_chat(user, "Your [name] activates, saving you from the chasm!")
activate(user, FALSE)
else
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.")
-/obj/effect/portal/wormhole/jaunt_tunnel
+/obj/effect/portal/jaunt_tunnel
name = "jaunt tunnel"
icon = 'icons/effects/effects.dmi'
icon_state = "bhole3"
desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon."
+ failchance = 0
-/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M)
- if(istype(M, /obj/effect))
- return
- if(istype(M, /atom/movable))
- if(do_teleport(M, target, 6))
- if(isliving(M))
- var/mob/living/L = M
- L.Weaken(3)
- if(ishuman(L))
- shake_camera(L, 20, 1)
- var/mob/living/carbon/human/H = L
- spawn(20)
- if(H && H.check_has_mouth())
- H.visible_message("[L.name] vomits from travelling through the [src.name]!", "You throw up from travelling through the [src.name]!")
- H.nutrition -= 20
- H.adjustToxLoss(-3)
- var/turf/T = get_turf(H)
- T.add_vomit_floor()
- else
- visible_message("[src] flickers and fails, due to bluespace interference!")
- qdel(src)
+/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M)
+ . = ..()
+ if(.)
+ // KERPLUNK
+ playsound(M,'sound/weapons/resonator_blast.ogg', 50, 1)
+ if(iscarbon(M))
+ var/mob/living/carbon/L = M
+ L.Weaken(6)
+ if(ishuman(L))
+ shake_camera(L, 20, 1)
+ addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20)
/**********************Resonator**********************/
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index 17887b8eae7..ab714c6f1a6 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -4,6 +4,7 @@
icon_state = "l_mushroom"
name = "large mushrooms"
desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores."
+ anchored = TRUE
var/harvested_name = "shortened mushrooms"
var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large."
var/needs_sharp_harvest = TRUE
@@ -26,17 +27,6 @@
if(prob(15))
harvest(null, TRUE)
-/obj/structure/flora/ash/ex_act(severity, target)
- switch(severity)
- if(1)
- qdel(src)
- if(2)
- if(prob(80))
- qdel(src)
- if(3)
- if(prob(50))
- qdel(src)
-
/obj/structure/flora/ash/proc/harvest(user, no_drop)
if(harvested)
return 0
diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
index a39b1bbf8c6..4f8f01498d0 100644
--- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm
+++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
@@ -72,7 +72,7 @@
var/mob/dead/observer/current_spirits = list()
for(var/mob/dead/observer/O in GLOB.player_list)
- if(is_type_in_list(O.following, contents))
+ if((O.following in contents))
ghost_counter++
O.invisibility = 0
current_spirits |= O
@@ -198,7 +198,7 @@
user.visible_message("[user] turns \the [T] into [transform_string]!")
message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (JMP).")
log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).")
- T.TerraformTurf(turf_type)
+ T.TerraformTurf(turf_type, keep_icon = FALSE)
timer = world.time + create_cooldown
qdel(L)
else
@@ -207,7 +207,7 @@
return
else
user.visible_message("[user] turns \the [T] into [reset_string]!")
- T.TerraformTurf(reset_turf_type)
+ T.TerraformTurf(reset_turf_type, keep_icon = FALSE)
timer = world.time + reset_cooldown
playsound(T,'sound/magic/fireball.ogg', 200, 1)
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 573ff630350..d8286bc8698 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -30,7 +30,6 @@
if(6)
new /obj/item/pickaxe/diamond(src)
if(7)
- new /obj/item/clothing/head/culthood(src)
new /obj/item/clothing/suit/hooded/cultrobes(src)
new /obj/item/bedsheet/cult(src)
if(8)
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 860692673a5..03b8404b1f0 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -20,18 +20,27 @@
anchored = TRUE
var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
+ speed_process = TRUE
-/obj/machinery/mineral/processing_unit_console/New()
- ..()
+/obj/machinery/mineral/processing_unit_console/Initialize(mapload)
+ . = ..()
machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
if(machine)
machine.CONSOLE = src
else
- qdel(src)
+ return INITIALIZE_HINT_QDEL
+
+/obj/machinery/mineral/processing_unit_console/attack_ghost(mob/user)
+ return ui_interact(user)
/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
if(..())
- return
+ return TRUE
+
+ return ui_interact(user)
+
+/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user)
+ . = ..()
if(!machine)
return
@@ -43,7 +52,8 @@
/obj/machinery/mineral/processing_unit_console/Topic(href, href_list)
if(..())
- return
+ return TRUE
+
usr.set_machine(src)
add_fingerprint(usr)
@@ -59,15 +69,14 @@
machine.on = (href_list["set_on"] == "on")
updateUsrDialog()
+ return TRUE
/obj/machinery/mineral/processing_unit_console/Destroy()
machine = null
return ..()
-
/**********************Mineral processing unit**************************/
-
/obj/machinery/mineral/processing_unit
name = "furnace"
icon = 'icons/obj/machines/mining_machines.dmi'
@@ -81,8 +90,8 @@
var/datum/research/files
speed_process = TRUE
-/obj/machinery/mineral/processing_unit/New()
- ..()
+/obj/machinery/mineral/processing_unit/Initialize(mapload)
+ . = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack)
files = new /datum/research/smelter(src)
@@ -99,6 +108,7 @@
for(var/obj/item/stack/ore/O in T)
process_ore(O)
CHECK_TICK
+
if(on)
if(selected_material)
smelt_ore()
@@ -106,11 +116,9 @@
else if(selected_alloy)
smelt_alloy()
-
if(CONSOLE)
CONSOLE.updateUsrDialog()
-
/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O)
GET_COMPONENT(materials, /datum/component/material_container)
var/material_amount = materials.get_item_material_amount(O)
@@ -167,7 +175,6 @@
var/out = get_step(src, output_dir)
materials.retrieve_sheets(sheets_to_remove, selected_material, out)
-
/obj/machinery/mineral/processing_unit/proc/smelt_alloy()
var/datum/design/alloy = files.FindDesignByID(selected_alloy) //check if it's a valid design
if(!alloy)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index d412d604ec2..bb7bcfc94e1 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -245,6 +245,10 @@
/mob/proc/get_item_by_slot(slot_id)
switch(slot_id)
+ if(slot_wear_mask)
+ return wear_mask
+ if(slot_back)
+ return back
if(slot_l_hand)
return l_hand
if(slot_r_hand)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 31788ecc8cf..2c7a2d67c55 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -712,17 +712,18 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
return back
if(slot_wear_mask)
return wear_mask
- if(slot_handcuffed)
- return handcuffed
- if(slot_legcuffed)
- return legcuffed
+ if(slot_wear_suit)
+ return wear_suit
if(slot_l_hand)
return l_hand
if(slot_r_hand)
return r_hand
+ if(slot_handcuffed)
+ return handcuffed
+ if(slot_legcuffed)
+ return legcuffed
return null
-
//generates realistic-ish pulse output based on preset levels
/mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate
var/temp = 0 //see setup.dm:694
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index e0c58c484d8..276ee7b246e 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -3,9 +3,9 @@
set background = BACKGROUND_ENABLED
if(notransform)
- return 0
+ return FALSE
if(!loc)
- return 0
+ return FALSE
var/datum/gas_mixture/environment = loc.return_air()
if(client || registered_z) // This is a temporary error tracker to make sure we've caught everything
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 62784a793f9..4dea368ad5e 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -16,8 +16,8 @@
turns_per_move = 5
see_in_dark = 6
mob_size = MOB_SIZE_SMALL
- simplespecies = /mob/living/simple_animal/pet/cat
- childtype = /mob/living/simple_animal/pet/cat/kitten
+ animal_species = /mob/living/simple_animal/pet/cat
+ childtype = list(/mob/living/simple_animal/pet/cat/kitten)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3)
response_help = "pets"
response_disarm = "gently pushes aside"
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 970ac596482..90ed82ff395 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -22,8 +22,8 @@
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
- childtype = /mob/living/simple_animal/pet/corgi/puppy
- simplespecies = /mob/living/simple_animal/pet/corgi
+ childtype = list(/mob/living/simple_animal/pet/corgi)
+ animal_species = /mob/living/simple_animal/pet/corgi
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
var/shaved = 0
var/obj/item/inventory_head
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 0f4fd774dc5..9c787639ba4 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -67,7 +67,7 @@
. = ..()
if(!.)
walk(src, 0)
- return 0
+ return FALSE
/mob/living/simple_animal/hostile/handle_automated_action()
if(AIStatus == AI_OFF)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm
index 66f8e4fd873..a1c488b4068 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm
@@ -10,7 +10,7 @@
attack_sound = 'sound/weapons/punch4.ogg'
mouse_opacity = MOUSE_OPACITY_OPAQUE
move_to_delay = 40
- ranged = 1
+ ranged = TRUE
ranged_cooldown = 2 //By default, start the Goliath with his cooldown off so that people can run away quickly on first sight
ranged_cooldown_time = 120
friendly = "wails at"
@@ -31,12 +31,12 @@
move_force = MOVE_FORCE_VERY_STRONG
move_resist = MOVE_FORCE_VERY_STRONG
pull_force = MOVE_FORCE_VERY_STRONG
- var/pre_attack = 0
+ var/pre_attack = FALSE
var/pre_attack_icon = "Goliath_preattack"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
- ..()
+ . = ..()
handle_preattack()
/mob/living/simple_animal/hostile/asteroid/goliath/proc/handle_preattack()
@@ -59,8 +59,7 @@
new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src)
ranged_cooldown = world.time + ranged_cooldown_time
icon_state = icon_aggro
- pre_attack = 0
- return
+ pre_attack = FALSE
/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage)
ranged_cooldown--
@@ -72,7 +71,6 @@
handle_preattack()
if(icon_state != icon_aggro)
icon_state = icon_aggro
- return
// Lavaland Goliath
/mob/living/simple_animal/hostile/asteroid/goliath/beast
@@ -87,8 +85,8 @@
pre_attack_icon = "goliath2"
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
- stat_attack = 1
- robust_searching = 1
+ stat_attack = TRUE
+ robust_searching = TRUE
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
. = ..()
@@ -136,7 +134,7 @@
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
fromtendril = TRUE
-//tentacles
+// Tentacles
/obj/effect/temp_visual/goliath_tentacle
name = "goliath tentacle"
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm
index 4e924a5424c..d73fe3ca77c 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm
@@ -35,7 +35,7 @@
loot = list(/obj/effect/decal/cleanable/blood/gibs)
deathmessage = "is pulped into bugmash."
- simplespecies = /mob/living/simple_animal/hostile/asteroid/gutlunch
+ animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch
childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55)
wanted_objects = list(/obj/effect/decal/cleanable/blood/gibs)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 3799daacb63..6955633efce 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -62,10 +62,9 @@
var/can_collar = 0 // can add collar to mob or not
//Hot simple_animal baby making vars
-
- var/childtype = null
- var/scan_ready = 1
- var/simplespecies //Sorry, no spider+corgi buttbabies.
+ var/list/childtype = null
+ var/next_scan_time = 0
+ var/animal_species //Sorry, no spider+corgi buttbabies.
var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood
@@ -446,27 +445,32 @@
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
- if(gender != FEMALE || stat || !scan_ready || !childtype || !simplespecies)
- return
- scan_ready = 0
- spawn(400)
- scan_ready = 1
- var/alone = 1
+ if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress())
+ return FALSE
+ next_scan_time = world.time + 400
+
+ var/alone = TRUE
var/mob/living/simple_animal/partner
var/children = 0
+
for(var/mob/M in oview(7, src))
- if(istype(M, childtype)) //Check for children FIRST.
+ if(M.stat != CONSCIOUS) //Check if it's conscious FIRST.
+ continue
+ else if(istype(M, childtype)) //Check for children SECOND.
children++
- else if(istype(M, simplespecies))
- if(M.client)
+ else if(istype(M, animal_species))
+ if(M.ckey)
continue
else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_;
partner = M
- else if(istype(M, /mob/))
- alone = 0
- continue
+ else if(isliving(M) && !faction_check_mob(M)) //shyness check. we're not shy in front of things that share a faction with us.
+ return //we never mate when not alone, so just abort early
+
if(alone && partner && children < 3)
- return new childtype(loc)
+ var/childspawn = pickweight(childtype)
+ var/turf/target = get_turf(loc)
+ if(target)
+ return new childspawn(target)
/mob/living/simple_animal/say_quote(var/message)
var/verb = "says"
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d59948a2ed6..c74d7545473 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1010,7 +1010,7 @@ var/list/slot_equipment_priority = list( \
var/atom/A = foo
if(A.invisibility > see_invisible)
continue
- if(is_type_in_list(A, shouldnt_see))
+ if(is_type_in_list(A, shouldnt_see) || !A.simulated)
continue
statpanel_things += A
statpanel(listed_turf.name, null, statpanel_things)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 60a3637166a..b378705becb 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -176,7 +176,7 @@
var/player_ghosted = 0
var/turf/listed_turf = null //the current turf being examined in the stat panel
- var/list/shouldnt_see = list(/atom/movable/lighting_object) //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
+ var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
var/kills = 0
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index b868945f065..a69ff2a793b 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -99,7 +99,7 @@
var/indestructible = 0 // If set, prevents aliens from destroying it
var/keep_preset_name = 0
- var/report_power_alarm = 1
+ var/report_power_alarm = TRUE
var/shock_proof = 0 //if set to 1, this APC will not arc bolts of electricity if it's overloaded.
@@ -117,11 +117,11 @@
operating = 0
/obj/machinery/power/apc/noalarm
- report_power_alarm = 0
+ report_power_alarm = FALSE
/obj/machinery/power/apc/syndicate //general syndicate access
req_access = list(access_syndicate)
- report_power_alarm = 0
+ report_power_alarm = FALSE
/obj/item/apc_electronics
name = "power control module"
@@ -1171,14 +1171,14 @@
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
autoflag = 3
- if(report_power_alarm)
+ if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.clearAlarm(loc, src)
else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment
if(autoflag != 2)
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
- if(report_power_alarm)
+ if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 2
else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment
@@ -1186,7 +1186,7 @@
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 2)
environ = autoset(environ, 1)
- if(report_power_alarm)
+ if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 1
else if(cell.charge <= 0) // zero charge, turn all off
@@ -1194,7 +1194,7 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
- if(report_power_alarm)
+ if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
@@ -1250,7 +1250,7 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
- if(report_power_alarm)
+ if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index 20e2ba82b1e..fc79d0b336b 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -57,7 +57,7 @@
if(!(istype(B) && B.off_floor))
qdel(O)
else
- if(!istype(O, /atom/movable/lighting_object))
+ if(O.simulated)
O.color = initial(O.color)
O.clean_blood()
diff --git a/code/modules/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/ruins/lavalandruin_code/syndicate_base.dm
index 7e62f0fda39..bbfa4ef688a 100644
--- a/code/modules/ruins/lavalandruin_code/syndicate_base.dm
+++ b/code/modules/ruins/lavalandruin_code/syndicate_base.dm
@@ -74,7 +74,7 @@
/datum/outfit/lavaland_syndicate/comms
name = "Lavaland Syndicate Comms Agent"
r_hand = /obj/item/melee/energy/sword/saber
- mask = /obj/item/clothing/mask/chameleon
+ mask = /obj/item/clothing/mask/chameleon/gps
suit = /obj/item/clothing/suit/armor/vest
/obj/item/clothing/mask/chameleon/gps/New()
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index 28cb96b128b..b6a7e7bb28f 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -58,12 +58,10 @@
var/contcount
for(var/atom/A in T.contents)
- if(istype(A,/atom/movable/lighting_object))
- continue
- if(istype(A,/obj/machinery/light))
- continue //hacky but whatever, shuttles need three spots each for this shit
if(!A.simulated)
continue
+ if(istype(A, /obj/machinery/light))
+ continue //hacky but whatever, shuttles need three spots each for this shit
contcount++
if(contcount)
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 512de9de9e9..987315ac13b 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -82,11 +82,10 @@
var/heal_burn = 0
var/heal_oxy = 0
-
/obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target)
if(H == user && istype(H))
if(NO_BLOOD in H.dna.species.species_traits)
- to_chat(H, "\The [src] is not compatible with your form!")
+ to_chat(H, "[src] is not compatible with your form!")
return
playsound(user,'sound/effects/singlebeat.ogg', 40, 1)
user.drop_item()
@@ -111,17 +110,16 @@
if(owner)
to_chat(owner, "Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!")
-
/datum/action/item_action/organ_action/cursed_heart
name = "pump your blood"
//You are now brea- pumping blood manually
/datum/action/item_action/organ_action/cursed_heart/Trigger()
. = ..()
- if(. && istype(target,/obj/item/organ/internal/heart/cursed))
+ if(. && istype(target, /obj/item/organ/internal/heart/cursed))
var/obj/item/organ/internal/heart/cursed/cursed_heart = target
- if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay-10))) //no spam
+ if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay - 10))) //no spam
to_chat(owner, "Too soon!")
return
@@ -132,7 +130,7 @@
var/mob/living/carbon/human/H = owner
if(istype(H))
if(!(NO_BLOOD in H.dna.species.species_traits))
- H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_NORMAL)
+ H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss * 0.5, BLOOD_VOLUME_NORMAL)
if(owner.client)
owner.client.color = ""
diff --git a/code/modules/tram/tram.dm b/code/modules/tram/tram.dm
index fed50355dde..0f80c99405e 100644
--- a/code/modules/tram/tram.dm
+++ b/code/modules/tram/tram.dm
@@ -22,7 +22,7 @@
var/delay_timer = null
- var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_object)
+ var/list/blacklist = list(/obj/tram/rail)
var/list/ancwhitelist = list(/obj/tram, /obj/vehicle, /obj/structure/chair, /obj/structure/grille, /obj/structure/window)
/obj/tram/tram_controller/New()
@@ -135,14 +135,20 @@
tram += src
/obj/tram/tram_controller/proc/check_validity(var/atom/movable/AM)
- if(!AM) return 0
- if(is_type_in_list(AM, blacklist)) return 0
- if(!AM.simulated) return 0
+ if(!AM)
+ return FALSE
+
+ if(!AM.simulated)
+ return FALSE
+
+ if(is_type_in_list(AM, blacklist))
+ return FALSE
+
if(AM.anchored)
if(is_type_in_list(AM, ancwhitelist))
- return 1
- return 0
- return 1
+ return TRUE
+ return FALSE
+ return TRUE
/obj/tram/tram_controller/proc/init_controllers()
for(var/obj/tram/controlpad/CCP in tram)