mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 11:07:12 +01:00
Merge https://github.com/ParadiseSS13/Paradise into Magic-With-Style
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
"}
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" = (
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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, ",")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -134,8 +134,6 @@
|
||||
if(operating)
|
||||
return
|
||||
add_fingerprint(user)
|
||||
if(!requiresID())
|
||||
user = null
|
||||
|
||||
if(density && !emagged)
|
||||
if(allowed(user))
|
||||
@@ -157,7 +155,7 @@
|
||||
return try_to_activate_door(user)
|
||||
|
||||
/obj/machinery/door/attack_tk(mob/user)
|
||||
if(requiresID() && !allowed(null))
|
||||
if(!allowed(null))
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -165,9 +163,7 @@
|
||||
add_fingerprint(user)
|
||||
if(operating || emagged)
|
||||
return
|
||||
if(!requiresID())
|
||||
user = null //so allowed(user) always succeeds
|
||||
if(allowed(user) || user.can_advanced_admin_interact())
|
||||
if(requiresID() && (allowed(user) || user.can_advanced_admin_interact()))
|
||||
if(density)
|
||||
open()
|
||||
else
|
||||
@@ -179,6 +175,8 @@
|
||||
/obj/machinery/door/allowed(mob/M)
|
||||
if(emergency)
|
||||
return TRUE
|
||||
if(!requiresID())
|
||||
return FALSE // Intentional. machinery/door/requiresID() always == 1. airlocks, however, == 0 if ID scan is disabled. Yes, this var is poorly named.
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/proc/try_to_weld(obj/item/weldingtool/W, mob/user)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.getBrainLoss() >= 60)
|
||||
visible_message("<span class='warning'>[H] stares cluelessly at [src] and drools.</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
else if(prob(H.getBrainLoss()))
|
||||
to_chat(user, "<span class='warning'>You momentarily forget how to use [src].</span>")
|
||||
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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1031,6 +1031,7 @@
|
||||
contraband = list(/obj/item/gun/projectile/shotgun/toy/crossbow= 10, //Congrats, you unlocked the +18 setting!
|
||||
/obj/item/gun/projectile/automatic/c20r/toy/riot = 10,
|
||||
/obj/item/gun/projectile/automatic/l6_saw/toy/riot = 10,
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/toy = 10,
|
||||
/obj/item/ammo_box/foambox/riot = 20,
|
||||
/obj/item/toy/katana = 10,
|
||||
/obj/item/twohanded/dualsaber/toy = 5,
|
||||
|
||||
@@ -3,68 +3,126 @@
|
||||
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/can_teleport(atom/movable/M)
|
||||
. = TRUE
|
||||
|
||||
if(!istype(M))
|
||||
. = FALSE
|
||||
|
||||
if(!M.simulated || iseffect(M))
|
||||
. = FALSE
|
||||
|
||||
if(M.anchored && ismecha(M))
|
||||
. = FALSE
|
||||
|
||||
/obj/effect/portal/proc/teleport(atom/movable/M)
|
||||
if(!can_teleport(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("<span class='warning'>[src] flickers and fails due to bluespace interference!</span>")
|
||||
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
|
||||
ignore_tele_proof_area_setting = TRUE
|
||||
|
||||
@@ -242,7 +242,8 @@
|
||||
/obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50,
|
||||
/obj/item/gun/projectile/shotgun/toy = 50,
|
||||
/obj/item/gun/projectile/shotgun/toy/crossbow = 50,
|
||||
/obj/item/gun/projectile/shotgun/toy/tommygun = 50
|
||||
/obj/item/gun/projectile/shotgun/toy/tommygun = 50,
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/toy = 50
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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("<span class='danger'>The burglar alarm goes off!</span>")
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/can_teleport(atom/movable/M)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params)
|
||||
teleport(user)
|
||||
if(istype(M, /obj/singularity))
|
||||
. = FALSE
|
||||
|
||||
/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(!can_teleport(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
|
||||
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
|
||||
|
||||
@@ -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 //
|
||||
|
||||
@@ -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
|
||||
// ----------------------------
|
||||
|
||||
@@ -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("<span class='notice'>[user.name] activates the [src.name]!</span>")
|
||||
user.visible_message("<span class='notice'>[user.name] activates the [name]!</span>")
|
||||
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, "<span class='notice'>You're having difficulties getting the [src.name] to work.</span>")
|
||||
to_chat(user, "<span class='notice'>You're having difficulties getting the [name] to work.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -736,49 +737,42 @@
|
||||
|
||||
var/list/L = get_destinations(user)
|
||||
if(!L.len)
|
||||
to_chat(user, "<span class='notice'>The [src.name] found no beacons in the world to anchor a wormhole to.</span>")
|
||||
to_chat(user, "<span class='notice'>The [name] found no beacons in the world to anchor a wormhole to.</span>")
|
||||
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!</span>")
|
||||
activate(user, FALSE)
|
||||
else
|
||||
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>")
|
||||
|
||||
/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("<span class='danger'>[L.name] vomits from travelling through the [src.name]!</span>", "<span class='userdanger'>You throw up from travelling through the [src.name]!</span>")
|
||||
H.nutrition -= 20
|
||||
H.adjustToxLoss(-3)
|
||||
var/turf/T = get_turf(H)
|
||||
T.add_vomit_floor()
|
||||
else
|
||||
visible_message("<span class='warning'>[src] flickers and fails, due to bluespace interference!</span>")
|
||||
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**********************/
|
||||
|
||||
@@ -911,6 +905,7 @@
|
||||
throw_range = 5
|
||||
var/loaded = 1
|
||||
var/malfunctioning = 0
|
||||
var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it
|
||||
|
||||
/obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(!loaded)
|
||||
@@ -918,6 +913,9 @@
|
||||
if(istype(target, /mob/living) && proximity_flag)
|
||||
if(istype(target, /mob/living/simple_animal))
|
||||
var/mob/living/simple_animal/M = target
|
||||
if(M.sentience_type != revive_type)
|
||||
to_chat(user, "<span class='info'>[src] does not work on this sort of creature.</span>")
|
||||
return
|
||||
if(M.stat == DEAD)
|
||||
M.faction = list("neutral")
|
||||
M.revive()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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("<span class='danger'>[user] turns \the [T] into [transform_string]!</span>")
|
||||
message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>).")
|
||||
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("<span class='danger'>[user] turns \the [T] into [reset_string]!</span>")
|
||||
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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(boo_phrases, list(
|
||||
|
||||
ghost = TRUE
|
||||
|
||||
action_icon_state = "boo"
|
||||
school = "transmutation"
|
||||
charge_max = 600
|
||||
starts_charged = FALSE
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -106,6 +106,12 @@
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
|
||||
if("warble", "warbles")
|
||||
if(isskrell(src)) //Only Skrell can warble.
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
|
||||
if("scream", "screams")
|
||||
on_CD = handle_emote_CD(50) //longer cooldown
|
||||
if("fart", "farts", "flip", "flips", "snap", "snaps")
|
||||
@@ -221,6 +227,13 @@
|
||||
playsound(loc, 'sound/effects/voxrustle.ogg', 50, 0) //Credit to sound-ideas (freesfx.co.uk) for the sound.
|
||||
m_type = 2
|
||||
|
||||
if("warble", "warbles")
|
||||
var/M = handle_emote_param(param)
|
||||
|
||||
message = "<B>[src]</B> warbles[M ? " at [M]" : ""]."
|
||||
playsound(loc, 'sound/effects/warble.ogg', 50, 0) // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
|
||||
m_type = 2
|
||||
|
||||
if("yes")
|
||||
var/M = handle_emote_param(param)
|
||||
|
||||
@@ -904,6 +917,8 @@
|
||||
emotelist += "\nVox specific emotes :- quill(s)"
|
||||
if("Diona")
|
||||
emotelist += "\nDiona specific emotes :- creak(s)"
|
||||
if("Skrell")
|
||||
emotelist += "\nSkrell specific emotes :- warble(s)"
|
||||
|
||||
if(ismachine(src))
|
||||
emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -594,7 +594,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm
|
||||
qdel(src)
|
||||
|
||||
/obj/item/honkbot_arm_assembly
|
||||
name = "incomplete honkbot assembly."
|
||||
name = "incomplete honkbot assembly"
|
||||
desc = "A clown box with a robot arm permanently grafted to it."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "honkbot_arm"
|
||||
@@ -625,8 +625,8 @@ var/robot_arm = /obj/item/robot_parts/l_arm
|
||||
if(istype(W, /obj/item/instrument/trombone))
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk! </span>")
|
||||
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk!</span>")
|
||||
qdel(W)
|
||||
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(T)
|
||||
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(get_turf(src))
|
||||
A.robot_arm = robot_arm
|
||||
qdel(src)
|
||||
@@ -37,7 +37,7 @@
|
||||
. = ..()
|
||||
update_icon()
|
||||
auto_patrol = TRUE
|
||||
var/datum/job/clown/J = new/datum/job/clown
|
||||
var/datum/job/clown/J = new /datum/job/clown()
|
||||
access_card.access += J.get_access()
|
||||
prev_access = access_card.access
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
. = ..()
|
||||
if(!.)
|
||||
walk(src, 0)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/handle_automated_action()
|
||||
if(AIStatus == AI_OFF)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
@@ -64,7 +64,7 @@
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/AttackingTarget()
|
||||
if(is_type_in_list(target, wanted_objects)) //we eats
|
||||
if(is_type_in_typecache(target, wanted_objects)) //we eats
|
||||
udder.generateMilk()
|
||||
regenerate_icons()
|
||||
visible_message("<span class='notice'>[src] slurps up [target].</span>")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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, "<span class = 'userdanger'>\The [src] is not compatible with your form!</span>")
|
||||
to_chat(H, "<span class='userdanger'>[src] is not compatible with your form!</span>")
|
||||
return
|
||||
playsound(user,'sound/effects/singlebeat.ogg', 40, 1)
|
||||
user.drop_item()
|
||||
@@ -111,17 +110,16 @@
|
||||
if(owner)
|
||||
to_chat(owner, "<span class='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
|
||||
|
||||
|
||||
/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, "<span class='userdanger'>Too soon!</span>")
|
||||
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 = ""
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Kyep"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Disarming/grabbing a door with IDSCAN disabled no longer results in a can_admin_interact runtime error."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "iantine"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Skrell *warble emote"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Arkatos"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "Added new Boo! spell icon"
|
||||
@@ -0,0 +1,21 @@
|
||||
author: "Markolie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Portals can now be activated by clicking on them with or without an object. Ghosts can now also click on them to be taken to their destination."
|
||||
- rscadd: "Portals now warn admins when they are used to teleport megafauna."
|
||||
- tweak: "The singularity can now eat basalt and chasms on Lavaland. They get turned into lava."
|
||||
- bugfix: "AI swarmers will no longer get stuck on effects (such as blood)."
|
||||
- bugfix: "Fixed the spectral blade turning all ghosts visible."
|
||||
- bugfix: "Fixed a runtime with assigning outfits to mindless mobs."
|
||||
- bugfix: "Fixed certain alarms triggering despite being outside of station contact and the Syndicate base still triggering fire alarms."
|
||||
- bugfix: "Fixed being unable to put the wormhole jaunter in the belt slot."
|
||||
- bugfix: "Fixed the disk compartmentalizer not accepting disks."
|
||||
- bugfix: "Gutlunches and Gubbucks will now reproduce properly."
|
||||
- bugfix: "The necropolis chest cult clothing drop no longer spawns with a cult hood as well, as that's part of the suit itself."
|
||||
- bugfix: "Goliath steaks can now be eaten properly."
|
||||
- bugfix: "Fixed a stray light on the beach ruin."
|
||||
- bugfix: "Lavaland ruins should no longer spawn on the Labor Camp."
|
||||
- bugfix: "Ancient goliaths will now properly randomly spawn tentacles."
|
||||
- bugfix: "The labor camp will now spawn properly with a processing console."
|
||||
- bugfix: "Water turfs in the beach ruin (and other water turfs that previously didn't do so) will now properly apply water to you."
|
||||
- bugfix: "Ash flora is now anchored."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Terilia"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added the Donksoft sniper into the Trader spawnpool."
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "Markolie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Gutlunches will now eat properly."
|
||||
- bugfix: "The tesla can no longer travel through wormholes."
|
||||
- bugfix: "Fixed an issue with honkbot construction."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Fethas"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixes an oversight from the lavaland port invovling Laz injectors and sentience typing that didn't carry over from tg."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 113 KiB |
Binary file not shown.
Reference in New Issue
Block a user