Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into auxtools-atmos
This commit is contained in:
@@ -139,6 +139,7 @@
|
||||
dir = 4;
|
||||
name = "shrine of the liberator"
|
||||
},
|
||||
/obj/item/tcg_card/special/golem,
|
||||
/turf/open/floor/mineral/titanium/purple,
|
||||
/area/ruin/powered/golem_ship)
|
||||
"v" = (
|
||||
|
||||
@@ -14,6 +14,10 @@
|
||||
},
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/icemoon/surface/outdoors)
|
||||
"l" = (
|
||||
/obj/item/tcg_card/special/morph,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/icemoon/surface/outdoors)
|
||||
"I" = (
|
||||
/turf/closed/indestructible/fakeglass,
|
||||
/area/icemoon/surface/outdoors)
|
||||
@@ -72,7 +76,7 @@ L
|
||||
c
|
||||
c
|
||||
c
|
||||
U
|
||||
l
|
||||
U
|
||||
a
|
||||
b
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
},
|
||||
/turf/open/floor/mineral/diamond,
|
||||
/area/icemoon/surface/outdoors)
|
||||
"f" = (
|
||||
/obj/item/tcg_card/special/xenomaid,
|
||||
/turf/open/floor/mineral/diamond,
|
||||
/area/icemoon/surface/outdoors)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -65,7 +69,7 @@ a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
f
|
||||
c
|
||||
c
|
||||
b
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
/area/ruin/unpowered)
|
||||
"k" = (
|
||||
/obj/structure/closet/crate/freezer,
|
||||
/obj/item/tcg_card/special/demonic_miner,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/unpowered)
|
||||
"l" = (
|
||||
|
||||
@@ -31,6 +31,10 @@
|
||||
"N" = (
|
||||
/turf/open/indestructible/necropolis/ice,
|
||||
/area/icemoon/underground/explored)
|
||||
"S" = (
|
||||
/obj/item/tcg_card/special/wendigo,
|
||||
/turf/open/indestructible/necropolis/ice,
|
||||
/area/icemoon/underground/explored)
|
||||
"U" = (
|
||||
/obj/item/paper/crumpled/bloody{
|
||||
info = "for your own sake, do not enter"
|
||||
@@ -451,7 +455,7 @@ a
|
||||
N
|
||||
N
|
||||
N
|
||||
N
|
||||
S
|
||||
N
|
||||
N
|
||||
N
|
||||
|
||||
@@ -862,6 +862,7 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 10
|
||||
},
|
||||
/obj/item/tcg_card/special/honk,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/powered/clownplanet)
|
||||
"bF" = (
|
||||
|
||||
@@ -155,6 +155,12 @@
|
||||
/obj/item/stack/tile/brass/fifty,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/lavaland/surface/outdoors/unexplored)
|
||||
"Y" = (
|
||||
/obj/item/tcg_card/special/ratvar,
|
||||
/turf/open/floor/clockwork{
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
},
|
||||
/area/lavaland/surface/outdoors/unexplored)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -484,7 +490,7 @@ h
|
||||
h
|
||||
h
|
||||
h
|
||||
h
|
||||
Y
|
||||
h
|
||||
l
|
||||
l
|
||||
@@ -709,7 +715,7 @@ b
|
||||
l
|
||||
l
|
||||
b
|
||||
h
|
||||
Y
|
||||
h
|
||||
t
|
||||
b
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
},
|
||||
/turf/open/indestructible/hierophant/two,
|
||||
/area/ruin/unpowered/hierophant)
|
||||
"s" = (
|
||||
/obj/item/tcg_card/special/hierophant,
|
||||
/turf/open/indestructible/hierophant,
|
||||
/area/ruin/unpowered/hierophant)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -494,7 +498,7 @@ b
|
||||
b
|
||||
b
|
||||
c
|
||||
b
|
||||
s
|
||||
a
|
||||
a
|
||||
b
|
||||
|
||||
@@ -11,6 +11,13 @@
|
||||
"d" = (
|
||||
/turf/closed/wall/mineral/abductor,
|
||||
/area/ruin/unpowered)
|
||||
"h" = (
|
||||
/obj/structure/closet/abductor,
|
||||
/obj/item/tcg_card/special/abductor,
|
||||
/turf/open/floor/plating/abductor{
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
},
|
||||
/area/ruin/unpowered)
|
||||
"j" = (
|
||||
/obj/machinery/abductor/experiment{
|
||||
team_number = 100
|
||||
@@ -188,7 +195,7 @@ a
|
||||
a
|
||||
c
|
||||
d
|
||||
q
|
||||
h
|
||||
t
|
||||
q
|
||||
d
|
||||
|
||||
@@ -567,6 +567,7 @@
|
||||
"bm" = (
|
||||
/obj/structure/closet/wardrobe/science_white,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/item/tcg_card/special/space_carp,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
/area/template_noop)
|
||||
"ae" = (
|
||||
/obj/structure/fluff/broken_flooring{
|
||||
icon_state = "plating";
|
||||
dir = 4
|
||||
dir = 4;
|
||||
icon_state = "plating"
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
@@ -66,8 +66,8 @@
|
||||
"an" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/structure/fluff/broken_flooring{
|
||||
icon_state = "plating";
|
||||
dir = 4
|
||||
dir = 4;
|
||||
icon_state = "plating"
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
@@ -78,8 +78,8 @@
|
||||
"ap" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/structure/fluff/broken_flooring{
|
||||
icon_state = "pile";
|
||||
dir = 8
|
||||
dir = 8;
|
||||
icon_state = "pile"
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
@@ -133,8 +133,8 @@
|
||||
/area/template_noop)
|
||||
"aE" = (
|
||||
/obj/structure/fluff/broken_flooring{
|
||||
icon_state = "pile";
|
||||
dir = 4
|
||||
dir = 4;
|
||||
icon_state = "pile"
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
@@ -1054,6 +1054,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/closet/crate/secure/weapon,
|
||||
/obj/item/gun/ballistic/automatic/pistol/APS,
|
||||
/obj/item/tcg_card/special/spess_pirate,
|
||||
/turf/open/floor/plasteel/airless/dark,
|
||||
/area/shuttle/caravan/freighter2)
|
||||
"js" = (
|
||||
|
||||
@@ -91,6 +91,10 @@
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/airless,
|
||||
/area/ruin/space/has_grav)
|
||||
"Y" = (
|
||||
/obj/item/tcg_card/special/gondola,
|
||||
/turf/open/floor/plating/asteroid/airless,
|
||||
/area/ruin/space/has_grav)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -339,7 +343,7 @@ b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
Y
|
||||
o
|
||||
c
|
||||
r
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
/area/ruin/space/has_grav/powered/mechtransport)
|
||||
"g" = (
|
||||
/obj/structure/closet/crate/secure/loot,
|
||||
/obj/item/tcg_card/special/phazon,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/ruin/space/has_grav/powered/mechtransport)
|
||||
"h" = (
|
||||
|
||||
@@ -881,7 +881,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/cabin)
|
||||
"cT" = (
|
||||
/obj/vehicle/ridden/atv,
|
||||
/obj/vehicle/ridden/atv/snowmobile,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg3"
|
||||
},
|
||||
@@ -893,7 +893,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/cabin)
|
||||
"cV" = (
|
||||
/obj/vehicle/ridden/atv,
|
||||
/obj/vehicle/ridden/atv/snowmobile,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/cabin)
|
||||
"cW" = (
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"ai" = (
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/obj/structure/closet/crate/secure/loot,
|
||||
/obj/item/clothing/head/collectable/paper,
|
||||
/obj/item/clothing/head/sombrero/shamebrero,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/jungleresort)
|
||||
"ak" = (
|
||||
@@ -51,6 +51,10 @@
|
||||
/obj/machinery/jukebox,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/jungleresort)
|
||||
"az" = (
|
||||
/obj/structure/stone_tile/center,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"aA" = (
|
||||
/obj/machinery/light,
|
||||
/obj/structure/chair/wood{
|
||||
@@ -199,7 +203,7 @@
|
||||
/area/awaymission/jungleresort)
|
||||
"cK" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/clothing/head/collectable/tophat,
|
||||
/obj/item/clothing/head/collectable/petehat/gang,
|
||||
/turf/open/floor/plating/rust,
|
||||
/area/awaymission/jungleresort)
|
||||
"cT" = (
|
||||
@@ -217,6 +221,11 @@
|
||||
/obj/structure/flora/rock,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"cY" = (
|
||||
/obj/structure/flora/grass/jungle/b,
|
||||
/mob/living/simple_animal/hostile/gorilla/jungle,
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"dm" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/reagent_containers/food/drinks/beer,
|
||||
@@ -274,7 +283,6 @@
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/stone_tile/center/cracked,
|
||||
/obj/item/ammo_casing/shotgun/buckshot,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"eB" = (
|
||||
@@ -407,8 +415,8 @@
|
||||
/area/awaymission/jungleresort)
|
||||
"gK" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot,
|
||||
/obj/item/ammo_box/magazine/toy/m762/riot,
|
||||
/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted,
|
||||
/obj/item/ammo_box/magazine/toy/smgm45,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/jungleresort)
|
||||
"gL" = (
|
||||
@@ -580,6 +588,9 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/stone_tile/center/burnt,
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"iE" = (
|
||||
@@ -660,6 +671,11 @@
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"jw" = (
|
||||
/obj/structure/stone_tile/surrounding/cracked,
|
||||
/obj/structure/stone_tile/center/burnt,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"jy" = (
|
||||
/obj/structure/flora/grass/jungle/b,
|
||||
/obj/effect/turf_decal/weather/dirt{
|
||||
@@ -674,6 +690,16 @@
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"jD" = (
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked,
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"jF" = (
|
||||
/obj/structure/flora/tree/jungle,
|
||||
/obj/machinery/light,
|
||||
@@ -798,6 +824,11 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/jungleresort)
|
||||
"lF" = (
|
||||
/obj/structure/flora/junglebush,
|
||||
/mob/living/simple_animal/hostile/gorilla/jungle,
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"lJ" = (
|
||||
/obj/structure/flora/junglebush/c,
|
||||
/obj/machinery/light{
|
||||
@@ -869,6 +900,8 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/item/clothing/glasses/meson/engine,
|
||||
/obj/item/storage/belt/utility,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/jungleresort)
|
||||
"mE" = (
|
||||
@@ -986,6 +1019,10 @@
|
||||
/obj/item/toy/crayon/spraycan,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"ou" = (
|
||||
/obj/item/clothing/glasses/meson,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/awaymission/jungleresort)
|
||||
"ow" = (
|
||||
/obj/structure/flora/tree/jungle,
|
||||
/obj/effect/turf_decal/weather/dirt,
|
||||
@@ -993,7 +1030,7 @@
|
||||
/area/awaymission/jungleresort)
|
||||
"oW" = (
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/item/clothing/head/collectable/petehat/gang,
|
||||
/obj/item/clothing/head/collectable/tophat,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/jungleresort)
|
||||
"oX" = (
|
||||
@@ -1075,7 +1112,7 @@
|
||||
"qi" = (
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/obj/structure/closet/crate/secure/loot,
|
||||
/obj/item/clothing/head/collectable/beret,
|
||||
/obj/item/clothing/head/rice_hat/cursed,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/jungleresort)
|
||||
"qr" = (
|
||||
@@ -1255,6 +1292,15 @@
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/jungleresort)
|
||||
"tm" = (
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"tn" = (
|
||||
/obj/structure/flora/rock/pile,
|
||||
/obj/machinery/light{
|
||||
@@ -1478,6 +1524,15 @@
|
||||
/obj/effect/turf_decal/weather/dirt,
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"vz" = (
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 6
|
||||
},
|
||||
/obj/structure/stone_tile/surrounding/cracked{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"vK" = (
|
||||
/obj/structure/flora/ausbushes/stalkybush,
|
||||
/turf/open/floor/grass,
|
||||
@@ -1497,6 +1552,10 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/jungleresort)
|
||||
"wd" = (
|
||||
/obj/item/storage/bag/ore,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/awaymission/jungleresort)
|
||||
"wj" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
@@ -1535,7 +1594,7 @@
|
||||
/area/awaymission/jungleresort)
|
||||
"ww" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/captain,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/captain/jungle,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/awaymission/jungleresort)
|
||||
"wF" = (
|
||||
@@ -1655,6 +1714,10 @@
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"yw" = (
|
||||
/obj/item/pickaxe/mini,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/awaymission/jungleresort)
|
||||
"yx" = (
|
||||
/obj/structure/flora/ausbushes/fullgrass,
|
||||
/obj/effect/turf_decal/weather/dirt{
|
||||
@@ -1814,6 +1877,13 @@
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"Ad" = (
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"Ag" = (
|
||||
/obj/machinery/door/airlock/wood{
|
||||
name = "Resort Office"
|
||||
@@ -2016,6 +2086,7 @@
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/turf/open/floor/carpet,
|
||||
/area/awaymission/jungleresort)
|
||||
"CV" = (
|
||||
@@ -2329,6 +2400,9 @@
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/stone_tile/surrounding/cracked{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"GN" = (
|
||||
@@ -2368,6 +2442,10 @@
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"Hr" = (
|
||||
/obj/structure/stone_tile/surrounding/cracked,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"Hs" = (
|
||||
/obj/structure/flora/ausbushes/stalkybush,
|
||||
/obj/machinery/light,
|
||||
@@ -2410,6 +2488,10 @@
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"HT" = (
|
||||
/mob/living/simple_animal/hostile/gorilla/jungle,
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"Ih" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/jungleresort)
|
||||
@@ -2897,6 +2979,15 @@
|
||||
/obj/item/storage/book/bible,
|
||||
/turf/open/floor/carpet,
|
||||
/area/awaymission/jungleresort)
|
||||
"ON" = (
|
||||
/obj/effect/decal/cleanable/blood/splatter,
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/structure/stone_tile/burnt,
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"OU" = (
|
||||
/obj/effect/turf_decal/weather/dirt,
|
||||
/turf/open/floor/grass,
|
||||
@@ -3030,7 +3121,7 @@
|
||||
/obj/effect/decal/cleanable/blood/tracks{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/stone_tile/surrounding/cracked,
|
||||
/obj/structure/stone_tile/center/burnt,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"QA" = (
|
||||
@@ -3091,6 +3182,7 @@
|
||||
/obj/item/stack/sheet/mineral/uranium,
|
||||
/obj/item/stack/sheet/mineral/uranium,
|
||||
/obj/item/clothing/glasses/meson/engine,
|
||||
/obj/item/storage/belt/utility,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/jungleresort)
|
||||
"Rm" = (
|
||||
@@ -3224,11 +3316,8 @@
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/structure/stone_tile/surrounding/cracked,
|
||||
/obj/item/gun/ballistic/shotgun/sc_pump,
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/ammo_casing/shotgun/buckshot,
|
||||
/obj/item/ammo_casing/shotgun/buckshot,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"SV" = (
|
||||
@@ -3246,6 +3335,7 @@
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 5
|
||||
},
|
||||
/obj/structure/stone_tile/burnt,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"Ta" = (
|
||||
@@ -3290,6 +3380,7 @@
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/stone_tile/center,
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"TG" = (
|
||||
@@ -3508,7 +3599,7 @@
|
||||
/area/awaymission/jungleresort)
|
||||
"WD" = (
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/item/clothing/head/collectable/slime,
|
||||
/obj/item/clothing/head/collectable/beret,
|
||||
/turf/open/floor/plating/rust,
|
||||
/area/awaymission/jungleresort)
|
||||
"WE" = (
|
||||
@@ -3573,6 +3664,11 @@
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"Xu" = (
|
||||
/obj/structure/flora/junglebush/c,
|
||||
/mob/living/simple_animal/hostile/gorilla/jungle,
|
||||
/turf/open/floor/grass,
|
||||
/area/awaymission/jungleresort)
|
||||
"Xz" = (
|
||||
/turf/open/floor/carpet/red,
|
||||
/area/awaymission/jungleresort)
|
||||
@@ -3639,6 +3735,7 @@
|
||||
"Ye" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/toy/figure/syndie,
|
||||
/obj/item/gun/ballistic/automatic/toy/pistol/unrestricted,
|
||||
/turf/open/floor/carpet/red,
|
||||
/area/awaymission/jungleresort)
|
||||
"Yf" = (
|
||||
@@ -3748,6 +3845,9 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/stone_tile/surrounding_tile/burnt,
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plating/dirt/jungle,
|
||||
/area/awaymission/jungleresort)
|
||||
"ZH" = (
|
||||
@@ -6362,8 +6462,8 @@ AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
oZ
|
||||
jD
|
||||
aL
|
||||
fy
|
||||
Dr
|
||||
@@ -6513,8 +6613,8 @@ AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
oZ
|
||||
Gk
|
||||
AC
|
||||
GD
|
||||
oZ
|
||||
@@ -6668,8 +6768,8 @@ AR
|
||||
oZ
|
||||
iv
|
||||
Qz
|
||||
AR
|
||||
AR
|
||||
tm
|
||||
oZ
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
@@ -6819,6 +6919,7 @@ AR
|
||||
oZ
|
||||
wS
|
||||
SZ
|
||||
Hr
|
||||
oZ
|
||||
AR
|
||||
AR
|
||||
@@ -6834,7 +6935,6 @@ AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
rd
|
||||
AF
|
||||
YQ
|
||||
@@ -6967,11 +7067,11 @@ AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
yJ
|
||||
oZ
|
||||
AR
|
||||
aL
|
||||
yJ
|
||||
TD
|
||||
oZ
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
@@ -7122,6 +7222,8 @@ AR
|
||||
AR
|
||||
oZ
|
||||
Yp
|
||||
az
|
||||
ON
|
||||
oZ
|
||||
AR
|
||||
AR
|
||||
@@ -7137,8 +7239,6 @@ AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
YQ
|
||||
YM
|
||||
cn
|
||||
@@ -7166,7 +7266,7 @@ YQ
|
||||
YQ
|
||||
CN
|
||||
YQ
|
||||
YQ
|
||||
HT
|
||||
rd
|
||||
YQ
|
||||
YQ
|
||||
@@ -7274,6 +7374,8 @@ AR
|
||||
AR
|
||||
oZ
|
||||
TD
|
||||
Ad
|
||||
jw
|
||||
oZ
|
||||
AR
|
||||
AR
|
||||
@@ -7289,8 +7391,6 @@ AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
YQ
|
||||
aP
|
||||
Wl
|
||||
@@ -7427,7 +7527,7 @@ AR
|
||||
oZ
|
||||
aL
|
||||
Xs
|
||||
AR
|
||||
oZ
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
@@ -7579,7 +7679,7 @@ AR
|
||||
AR
|
||||
oZ
|
||||
tH
|
||||
AR
|
||||
vz
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
@@ -8261,7 +8361,7 @@ YQ
|
||||
YQ
|
||||
MW
|
||||
CN
|
||||
AF
|
||||
lF
|
||||
Wl
|
||||
YQ
|
||||
YQ
|
||||
@@ -9006,7 +9106,7 @@ YQ
|
||||
CN
|
||||
YQ
|
||||
YQ
|
||||
YQ
|
||||
HT
|
||||
Wl
|
||||
aP
|
||||
YQ
|
||||
@@ -9807,7 +9907,7 @@ YQ
|
||||
YQ
|
||||
YQ
|
||||
YQ
|
||||
YQ
|
||||
HT
|
||||
YQ
|
||||
YQ
|
||||
YQ
|
||||
@@ -10950,7 +11050,7 @@ YQ
|
||||
YQ
|
||||
Fz
|
||||
wH
|
||||
YQ
|
||||
HT
|
||||
YQ
|
||||
YQ
|
||||
VU
|
||||
@@ -11390,9 +11490,9 @@ AR
|
||||
AR
|
||||
AR
|
||||
io
|
||||
uh
|
||||
pQ
|
||||
pQ
|
||||
VJ
|
||||
AV
|
||||
AV
|
||||
QA
|
||||
dF
|
||||
io
|
||||
@@ -11544,8 +11644,8 @@ AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
pQ
|
||||
io
|
||||
VJ
|
||||
AV
|
||||
QA
|
||||
QA
|
||||
@@ -14218,7 +14318,7 @@ YQ
|
||||
cn
|
||||
ZV
|
||||
MW
|
||||
YQ
|
||||
HT
|
||||
rd
|
||||
aP
|
||||
vK
|
||||
@@ -15051,7 +15151,7 @@ Wl
|
||||
YQ
|
||||
YQ
|
||||
YQ
|
||||
YQ
|
||||
HT
|
||||
rd
|
||||
YQ
|
||||
YQ
|
||||
@@ -18177,8 +18277,8 @@ YQ
|
||||
YQ
|
||||
YQ
|
||||
AF
|
||||
AR
|
||||
AR
|
||||
yw
|
||||
ou
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
@@ -18329,9 +18429,9 @@ YQ
|
||||
YM
|
||||
Wl
|
||||
Pg
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
wd
|
||||
Qp
|
||||
Qp
|
||||
AR
|
||||
AR
|
||||
AR
|
||||
@@ -20699,7 +20799,7 @@ YQ
|
||||
YQ
|
||||
YQ
|
||||
MW
|
||||
rd
|
||||
cY
|
||||
Wl
|
||||
YQ
|
||||
YQ
|
||||
@@ -22732,7 +22832,7 @@ AF
|
||||
ZV
|
||||
YQ
|
||||
YQ
|
||||
cn
|
||||
Xu
|
||||
YQ
|
||||
YQ
|
||||
YQ
|
||||
@@ -23322,7 +23422,7 @@ YQ
|
||||
CN
|
||||
VU
|
||||
dY
|
||||
YQ
|
||||
HT
|
||||
YQ
|
||||
aP
|
||||
YQ
|
||||
@@ -23577,7 +23677,7 @@ YQ
|
||||
YQ
|
||||
YQ
|
||||
vK
|
||||
YQ
|
||||
HT
|
||||
kr
|
||||
YQ
|
||||
AF
|
||||
|
||||
@@ -13605,13 +13605,10 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/structure/disposalpipe/sorting/mail{
|
||||
dir = 2;
|
||||
sortType = 18
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"aEB" = (
|
||||
@@ -56987,6 +56984,17 @@
|
||||
icon_state = "wood-broken6"
|
||||
},
|
||||
/area/maintenance/bar)
|
||||
"lqO" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/structure/disposalpipe/sorting/mail/flip{
|
||||
dir = 1;
|
||||
sortType = 18
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"lre" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/structure/table/wood/poker,
|
||||
@@ -57108,6 +57116,12 @@
|
||||
},
|
||||
/turf/closed/wall,
|
||||
/area/maintenance/disposal/incinerator)
|
||||
"lLf" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/maintenance/fore)
|
||||
"lMg" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
@@ -58655,8 +58669,11 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/door/airlock/vault,
|
||||
/obj/effect/mapping_helpers/airlock/locked,
|
||||
/obj/machinery/door/airlock/vault{
|
||||
name = "Vault Door";
|
||||
req_access_txt = "53"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/nuke_storage)
|
||||
"puh" = (
|
||||
@@ -58822,6 +58839,14 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/disposal)
|
||||
"pMQ" = (
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/machinery/disposal/bin,
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/theatre)
|
||||
"pPi" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
@@ -60860,11 +60885,13 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
},
|
||||
/obj/structure/disposalpipe/junction,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/structure/disposalpipe/sorting/mail{
|
||||
sortType = 26
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/dorms)
|
||||
"uys" = (
|
||||
@@ -61051,7 +61078,6 @@
|
||||
/area/science/circuit)
|
||||
"uOJ" = (
|
||||
/obj/effect/mapping_helpers/airlock/locked,
|
||||
/obj/machinery/door/airlock/vault,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
@@ -61065,6 +61091,10 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/airlock/vault{
|
||||
name = "Vault Door";
|
||||
req_access_txt = "53"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/nuke_storage)
|
||||
"uQR" = (
|
||||
@@ -84618,7 +84648,7 @@ ayD
|
||||
nez
|
||||
ngV
|
||||
xPY
|
||||
aOH
|
||||
pMQ
|
||||
hcb
|
||||
hcb
|
||||
syJ
|
||||
@@ -84875,7 +84905,7 @@ ayE
|
||||
ayE
|
||||
ayE
|
||||
ayE
|
||||
ayE
|
||||
lLf
|
||||
ayE
|
||||
ayE
|
||||
ayE
|
||||
@@ -85132,7 +85162,7 @@ ayH
|
||||
ayH
|
||||
ayH
|
||||
ayH
|
||||
ayH
|
||||
lqO
|
||||
ayH
|
||||
aFV
|
||||
ayH
|
||||
|
||||
@@ -47138,13 +47138,9 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/gravity_generator)
|
||||
"bEx" = (
|
||||
/obj/structure/closet/radiation,
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = 26
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -48383,7 +48379,10 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small,
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = 26
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/gravity_generator)
|
||||
"bGg" = (
|
||||
@@ -49543,6 +49542,9 @@
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/gravity_generator)
|
||||
"bHV" = (
|
||||
|
||||
@@ -22,3 +22,5 @@
|
||||
#define POLICYCONFIG_ON_DEFIB_LATE "ON_DEFIB_LATE"
|
||||
/// Displayed to pyroclastic slimes on spawn
|
||||
#define POLICYCONFIG_ON_PYROCLASTIC_SENTIENT "PYROCLASTIC_SLIME"
|
||||
/// Displayed to pAIs on spawn
|
||||
#define POLICYCONFIG_PAI "PAI_SPAWN"
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
|
||||
#define COMSIG_LIVING_ACTIVE_BLOCK_START "active_block_start" //from base of mob/living/keybind_start_active_blocking(): (obj/item/blocking_item, list/backup_items)
|
||||
#define COMPONENT_PREVENT_BLOCK_START 1
|
||||
#define COMSIG_LIVING_ACTIVE_PARRY_START "active_parry_start" //from base of mob/living/initiate_parry_sequence(): (parrying_method, datum/parrying_item_mob_or_art, list/backup_items)
|
||||
#define COMSIG_LIVING_ACTIVE_PARRY_START "active_parry_start" //from base of mob/living/initiate_parry_sequence(): (parrying_method, datum/parrying_item_mob_or_art, list/backup_items, list/override)
|
||||
#define COMPONENT_PREVENT_PARRY_START 1
|
||||
|
||||
//ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS!
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#define INSTRUMENT_EXP_FALLOFF_MAX 10
|
||||
|
||||
/// Minimum volume for when the sound is considered dead.
|
||||
#define INSTRUMENT_MIN_SUSTAIN_DROPOFF 0
|
||||
#define INSTRUMENT_MIN_SUSTAIN_DROPOFF 1
|
||||
|
||||
#define SUSTAIN_LINEAR 1
|
||||
#define SUSTAIN_EXPONENTIAL 2
|
||||
|
||||
@@ -24,3 +24,4 @@
|
||||
#define LANGUAGE_STONER "stoner"
|
||||
#define LANGUAGE_VASSAL "vassal"
|
||||
#define LANGUAGE_VOICECHANGE "voicechange"
|
||||
#define LANGUAGE_MULTILINGUAL "multilingual"
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
//Checks to determine borg availability depending on the server's config. These are defines in the interest of reducing copypasta
|
||||
#define BORG_SEC_AVAILABLE (!CONFIG_GET(flag/disable_secborg) && GLOB.security_level >= CONFIG_GET(number/minimum_secborg_alert))
|
||||
|
||||
//silicon_priviledges flags
|
||||
#define PRIVILEDGES_SILICON (1<<0)
|
||||
#define PRIVILEDGES_PAI (1<<1)
|
||||
#define PRIVILEDGES_BOT (1<<2)
|
||||
#define PRIVILEDGES_DRONE (1<<3)
|
||||
//silicon_privileges flags
|
||||
#define PRIVILEGES_SILICON (1<<0)
|
||||
#define PRIVILEGES_PAI (1<<1)
|
||||
#define PRIVILEGES_BOT (1<<2)
|
||||
#define PRIVILEGES_DRONE (1<<3)
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
#define EMOTE_OMNI 4
|
||||
|
||||
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
|
||||
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
|
||||
#define MAX_FLAVOR_LEN 4096 //double the maximum message length.
|
||||
#define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen?
|
||||
#define MAX_FLAVOR_LEN 4096
|
||||
#define MAX_TASTE_LEN 40 //lick... vore... ew...
|
||||
#define MAX_NAME_LEN 42
|
||||
#define MAX_BROADCAST_LEN 512
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
///Compile all the overlays for an atom from the cache lists
|
||||
// |= on overlays is not actually guaranteed to not add same appearances but we're optimistically using it anyway.
|
||||
#define COMPILE_OVERLAYS(A)\
|
||||
if (TRUE) {\
|
||||
do {\
|
||||
var/list/ad = A.add_overlays;\
|
||||
var/list/rm = A.remove_overlays;\
|
||||
if(LAZYLEN(rm)){\
|
||||
@@ -231,7 +231,7 @@
|
||||
ad.Cut();\
|
||||
}\
|
||||
A.flags_1 &= ~OVERLAY_QUEUED_1;\
|
||||
}
|
||||
} while(FALSE)
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -191,12 +191,14 @@
|
||||
#define TRAIT_MUSICIAN "musician"
|
||||
#define TRAIT_PERMABONER "permanent_arousal"
|
||||
#define TRAIT_NEVERBONER "never_aroused"
|
||||
#define TRAIT_NYMPHO "nymphomaniac"
|
||||
#define TRAIT_MASO "masochism"
|
||||
#define TRAIT_HIGH_BLOOD "high_blood"
|
||||
#define TRAIT_PARA "paraplegic"
|
||||
#define TRAIT_EMPATH "empath"
|
||||
#define TRAIT_FRIENDLY "friendly"
|
||||
#define TRAIT_SNOB "snob"
|
||||
#define TRAIT_MULTILINGUAL "multilingual"
|
||||
#define TRAIT_CULT_EYES "cult_eyes"
|
||||
#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item"
|
||||
#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
} while(FALSE)
|
||||
|
||||
//Returns a list in plain english as a string
|
||||
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
|
||||
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "")
|
||||
var/total = length(input)
|
||||
switch(total)
|
||||
if (0)
|
||||
@@ -87,6 +87,34 @@
|
||||
|
||||
return "[output][and_text][input[index]]"
|
||||
|
||||
/**
|
||||
* English_list but associative supporting. Higher overhead.
|
||||
*/
|
||||
/proc/english_list_assoc(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "")
|
||||
var/total = length(input)
|
||||
switch(total)
|
||||
if (0)
|
||||
return "[nothing_text]"
|
||||
if (1)
|
||||
var/assoc = input[input[1]] == null? "" : " = [input[input[1]]]"
|
||||
return "[input[1]][assoc]"
|
||||
if (2)
|
||||
var/assoc = input[input[1]] == null? "" : " = [input[input[1]]]"
|
||||
var/assoc2 = input[input[2]] == null? "" : " = [input[input[2]]]"
|
||||
return "[input[1]][assoc][and_text][input[2]][assoc2]"
|
||||
else
|
||||
var/output = ""
|
||||
var/index = 1
|
||||
var/assoc
|
||||
while (index < total)
|
||||
if (index == total - 1)
|
||||
comma_text = final_comma_text
|
||||
assoc = input[input[index]] == null? "" : " = [input[input[index]]]"
|
||||
output += "[input[index]][assoc][comma_text]"
|
||||
++index
|
||||
assoc = input[input[index]] == null? "" : " = [input[input[index]]]"
|
||||
return "[output][and_text][input[index]]"
|
||||
|
||||
//Returns list element or null. Should prevent "index out of bounds" error.
|
||||
/proc/listgetindex(list/L, index)
|
||||
if(LAZYLEN(L))
|
||||
|
||||
@@ -231,10 +231,10 @@
|
||||
src_object = window.locked_by.src_object
|
||||
// Insert src_object info
|
||||
if(src_object)
|
||||
entry += "\nUsing: [src_object.type] [REF(src_object)]"
|
||||
entry += "Using: [src_object.type] [REF(src_object)]"
|
||||
// Insert message
|
||||
if(message)
|
||||
entry += "\n[message]"
|
||||
entry += "[message]"
|
||||
WRITE_LOG(GLOB.tgui_log, entry)
|
||||
|
||||
/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
announcement += "<br><h2 class='alert'>[html_encode(title)]</h2>"
|
||||
else if(type == "Captain")
|
||||
announcement += "<h1 class='alert'>Captain Announces</h1>"
|
||||
GLOB.news_network.SubmitArticle(text, "Captain's Announcement", "Station Announcements", null)
|
||||
GLOB.news_network.SubmitArticle(html_encode(text), "Captain's Announcement", "Station Announcements", null)
|
||||
|
||||
else
|
||||
if(!sender_override)
|
||||
|
||||
@@ -242,6 +242,8 @@
|
||||
SSpersistence.station_was_destroyed = TRUE
|
||||
if(!mode.allow_persistence_save)
|
||||
SSpersistence.station_persistence_save_disabled = TRUE
|
||||
else
|
||||
SSpersistence.SaveTCGCards()
|
||||
SSpersistence.CollectData()
|
||||
|
||||
//stop collecting feedback during grifftime
|
||||
|
||||
@@ -263,7 +263,7 @@ Turf and target are separate in case you want to teleport some distance from a t
|
||||
return .
|
||||
|
||||
//Returns a list of all items of interest with their name
|
||||
/proc/getpois(mobs_only=0,skip_mindless=0)
|
||||
/proc/getpois(mobs_only = FALSE, skip_mindless = FALSE, specify_dead_role = TRUE)
|
||||
var/list/mobs = sortmobs()
|
||||
var/list/namecounts = list()
|
||||
var/list/pois = list()
|
||||
@@ -277,7 +277,7 @@ Turf and target are separate in case you want to teleport some distance from a t
|
||||
|
||||
if(M.real_name && M.real_name != M.name)
|
||||
name += " \[[M.real_name]\]"
|
||||
if(M.stat == DEAD)
|
||||
if(M.stat == DEAD && specify_dead_role)
|
||||
if(isobserver(M))
|
||||
name += " \[ghost\]"
|
||||
else
|
||||
|
||||
@@ -132,6 +132,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_NODROP" = TRAIT_NODROP,
|
||||
"TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT,
|
||||
"TRAIT_SPOOKY_THROW" = TRAIT_SPOOKY_THROW
|
||||
),
|
||||
/datum/mind = list(
|
||||
"TRAIT_CLOWN_MENTALITY" = TRAIT_CLOWN_MENTALITY
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
+46
-21
@@ -118,27 +118,7 @@
|
||||
action_intent.hud = src
|
||||
static_inventory += action_intent
|
||||
|
||||
using = new /obj/screen/mov_intent
|
||||
using.icon = tg_ui_icon_to_cit_ui(ui_style) // CIT CHANGE - overrides mov intent icon
|
||||
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
|
||||
using.screen_loc = ui_movi
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
|
||||
//CITADEL CHANGES - sprint button
|
||||
using = new /obj/screen/sprintbutton
|
||||
using.icon = tg_ui_icon_to_cit_ui(ui_style)
|
||||
using.icon_state = ((owner.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) ? "act_sprint_on" : "act_sprint")
|
||||
using.screen_loc = ui_movi
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
//END OF CITADEL CHANGES
|
||||
|
||||
//same as above but buffer.
|
||||
sprint_buffer = new /obj/screen/sprint_buffer
|
||||
sprint_buffer.screen_loc = ui_sprintbufferloc
|
||||
sprint_buffer.hud = src
|
||||
static_inventory += sprint_buffer
|
||||
assert_move_intent_ui(owner, TRUE)
|
||||
|
||||
// clickdelay
|
||||
clickdelay = new
|
||||
@@ -393,6 +373,51 @@
|
||||
|
||||
update_locked_slots()
|
||||
|
||||
/datum/hud/human/proc/assert_move_intent_ui(mob/living/carbon/human/owner = mymob, on_new = FALSE)
|
||||
var/obj/screen/using
|
||||
// delete old ones
|
||||
var/list/obj/screen/victims = list()
|
||||
victims += locate(/obj/screen/mov_intent) in static_inventory
|
||||
victims += locate(/obj/screen/sprintbutton) in static_inventory
|
||||
victims += locate(/obj/screen/sprint_buffer) in static_inventory
|
||||
if(victims)
|
||||
static_inventory -= victims
|
||||
if(mymob?.client)
|
||||
mymob.client.screen -= victims
|
||||
QDEL_LIST(victims)
|
||||
|
||||
// make new ones
|
||||
// walk/run
|
||||
using = new /obj/screen/mov_intent
|
||||
using.icon = tg_ui_icon_to_cit_ui(ui_style) // CIT CHANGE - overrides mov intent icon
|
||||
using.screen_loc = ui_movi
|
||||
using.hud = src
|
||||
using.update_icon()
|
||||
static_inventory += using
|
||||
if(!on_new)
|
||||
owner?.client?.screen += using
|
||||
|
||||
if(!CONFIG_GET(flag/sprint_enabled))
|
||||
return
|
||||
|
||||
// sprint button
|
||||
using = new /obj/screen/sprintbutton
|
||||
using.icon = tg_ui_icon_to_cit_ui(ui_style)
|
||||
using.icon_state = ((owner.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) ? "act_sprint_on" : "act_sprint")
|
||||
using.screen_loc = ui_movi
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
if(!on_new)
|
||||
owner?.client?.screen += using
|
||||
|
||||
// same as above but buffer.
|
||||
sprint_buffer = new /obj/screen/sprint_buffer
|
||||
sprint_buffer.screen_loc = ui_sprintbufferloc
|
||||
sprint_buffer.hud = src
|
||||
static_inventory += sprint_buffer
|
||||
if(!on_new)
|
||||
owner?.client?.screen += using
|
||||
|
||||
/datum/hud/human/update_locked_slots()
|
||||
if(!mymob)
|
||||
return
|
||||
|
||||
@@ -351,6 +351,10 @@
|
||||
icon = 'icons/mob/screen_midnight.dmi'
|
||||
icon_state = "running"
|
||||
|
||||
/obj/screen/mov_intent/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/screen/mov_intent/Click()
|
||||
toggle(usr)
|
||||
|
||||
@@ -359,7 +363,7 @@
|
||||
if(MOVE_INTENT_WALK)
|
||||
icon_state = "walking"
|
||||
if(MOVE_INTENT_RUN)
|
||||
icon_state = "running"
|
||||
icon_state = CONFIG_GET(flag/sprint_enabled)? "running" : "running_nosprint"
|
||||
|
||||
/obj/screen/mov_intent/proc/toggle(mob/user)
|
||||
if(isobserver(user))
|
||||
|
||||
@@ -290,6 +290,17 @@
|
||||
var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/walk)
|
||||
M.sync()
|
||||
|
||||
/datum/config_entry/flag/sprint_enabled
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/sprint_enabled/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
for(var/datum/hud/human/H)
|
||||
H.assert_move_intent_ui()
|
||||
if(!config_entry_value) // disabled
|
||||
for(var/mob/living/L in world)
|
||||
L.disable_intentional_sprint_mode()
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_speed_increase
|
||||
config_entry_value = 1
|
||||
|
||||
@@ -484,6 +495,8 @@
|
||||
|
||||
/datum/config_entry/flag/modetier_voting
|
||||
|
||||
/datum/config_entry/flag/must_be_readied_to_vote_gamemode
|
||||
|
||||
/datum/config_entry/number/dropped_modes
|
||||
config_entry_value = 3
|
||||
|
||||
|
||||
@@ -26,50 +26,6 @@
|
||||
|
||||
/datum/config_entry/flag/hub // if the game appears on the hub or not
|
||||
|
||||
/datum/config_entry/flag/log_ooc // log OOC channel
|
||||
|
||||
/datum/config_entry/flag/log_access // log login/logout
|
||||
|
||||
/datum/config_entry/flag/log_say // log client say
|
||||
|
||||
/datum/config_entry/flag/log_admin // log admin actions
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/log_prayer // log prayers
|
||||
|
||||
/datum/config_entry/flag/log_law // log lawchanges
|
||||
|
||||
/datum/config_entry/flag/log_game // log game events
|
||||
|
||||
/datum/config_entry/flag/log_virus // log virology data
|
||||
|
||||
/datum/config_entry/flag/log_vote // log voting
|
||||
|
||||
/datum/config_entry/flag/log_craft // log crafting
|
||||
|
||||
/datum/config_entry/flag/log_whisper // log client whisper
|
||||
|
||||
/datum/config_entry/flag/log_attack // log attack messages
|
||||
|
||||
/datum/config_entry/flag/log_emote // log emotes
|
||||
|
||||
/datum/config_entry/flag/log_adminchat // log admin chat messages
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/log_shuttle // log shuttle related actions, ie shuttle computers, shuttle manipulator, emergency console
|
||||
|
||||
/datum/config_entry/flag/log_pda // log pda messages
|
||||
|
||||
/datum/config_entry/flag/log_telecomms // log telecomms messages
|
||||
|
||||
/datum/config_entry/flag/log_twitter // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases.
|
||||
|
||||
/datum/config_entry/flag/log_world_topic // log all world.Topic() calls
|
||||
|
||||
/datum/config_entry/flag/log_manifest // log crew manifest to seperate file
|
||||
|
||||
/datum/config_entry/flag/log_job_debug // log roundstart divide occupations debug information to a file
|
||||
|
||||
/datum/config_entry/flag/allow_admin_ooccolor // Allows admins with relevant permissions to have their own ooc colour
|
||||
|
||||
/datum/config_entry/flag/allow_vote_restart // allow votes to restart
|
||||
@@ -472,10 +428,6 @@
|
||||
/datum/config_entry/string/default_view_square
|
||||
config_entry_value = "15x15"
|
||||
|
||||
/datum/config_entry/flag/log_pictures
|
||||
|
||||
/datum/config_entry/flag/picture_logging_camera
|
||||
|
||||
/datum/config_entry/number/max_bunker_days
|
||||
config_entry_value = 7
|
||||
min_val = 1
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/datum/config_entry/flag/log_ooc // log OOC channel
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_access // log login/logout
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_say // log client say
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_admin // log admin actions
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/log_prayer // log prayers
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_law // log lawchanges
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_game // log game events
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_virus // log virology data
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_vote // log voting
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_craft // log crafting
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_whisper // log client whisper
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_attack // log attack messages
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_emote // log emotes
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_adminchat // log admin chat messages
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/log_shuttle // log shuttle related actions, ie shuttle computers, shuttle manipulator, emergency console
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_pda // log pda messages
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_telecomms // log telecomms messages
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_twitter // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases.
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_world_topic // log all world.Topic() calls
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_manifest // log crew manifest to seperate file
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_job_debug // log roundstart divide occupations debug information to a file
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_pictures
|
||||
|
||||
/datum/config_entry/flag/picture_logging_camera
|
||||
|
||||
/// forces log_href for tgui
|
||||
/datum/config_entry/flag/emergency_tgui_logging
|
||||
config_entry_value = FALSE
|
||||
@@ -490,6 +490,43 @@ SUBSYSTEM_DEF(job)
|
||||
job.after_spawn(H, M, joined_late) // note: this happens before the mob has a key! M will always have a client, H might not.
|
||||
equip_loadout(N, H, TRUE)//CIT CHANGE - makes players spawn with in-backpack loadout items properly. A little hacky but it works
|
||||
|
||||
if(ishuman(H) && H.client && N)
|
||||
if(H.client && H.client.prefs && length(H.client.prefs.tcg_cards))
|
||||
var/obj/item/tcgcard_binder/binder = new(get_turf(H))
|
||||
H.equip_to_slot_if_possible(binder, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)
|
||||
for(var/card_type in H.client.prefs.tcg_cards)
|
||||
if(card_type)
|
||||
if(islist(H.client.prefs.tcg_cards[card_type]))
|
||||
for(var/duplicate in H.client.prefs.tcg_cards[card_type])
|
||||
var/obj/item/tcg_card/card = new(get_turf(H), card_type, duplicate)
|
||||
card.forceMove(binder)
|
||||
binder.cards.Add(card)
|
||||
else
|
||||
var/obj/item/tcg_card/card = new(get_turf(H), card_type, H.client.prefs.tcg_cards[card_type])
|
||||
card.forceMove(binder)
|
||||
binder.cards.Add(card)
|
||||
binder.check_for_exodia()
|
||||
if(length(H.client.prefs.tcg_decks))
|
||||
binder.decks = H.client.prefs.tcg_decks
|
||||
else
|
||||
if(H && N.client.prefs && length(N.client.prefs.tcg_cards))
|
||||
var/obj/item/tcgcard_binder/binder = new(get_turf(H))
|
||||
H.equip_to_slot_if_possible(binder, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)
|
||||
for(var/card_type in N.client.prefs.tcg_cards)
|
||||
if(card_type)
|
||||
if(islist(H.client.prefs.tcg_cards[card_type]))
|
||||
for(var/duplicate in N.client.prefs.tcg_cards[card_type])
|
||||
var/obj/item/tcg_card/card = new(get_turf(H), card_type, duplicate)
|
||||
card.forceMove(binder)
|
||||
binder.cards.Add(card)
|
||||
else
|
||||
var/obj/item/tcg_card/card = new(get_turf(H), card_type, N.client.prefs.tcg_cards[card_type])
|
||||
card.forceMove(binder)
|
||||
binder.cards.Add(card)
|
||||
binder.check_for_exodia()
|
||||
if(length(N.client.prefs.tcg_decks))
|
||||
binder.decks = N.client.prefs.tcg_decks
|
||||
|
||||
return H
|
||||
/*
|
||||
/datum/controller/subsystem/job/proc/handle_auto_deadmin_roles(client/C, rank)
|
||||
|
||||
@@ -349,3 +349,15 @@ SUBSYSTEM_DEF(persistence)
|
||||
if(!ending_human.client)
|
||||
return
|
||||
ending_human.client.prefs.save_character()
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/SaveTCGCards()
|
||||
for(var/i in GLOB.joined_player_list)
|
||||
var/mob/living/carbon/human/ending_human = get_mob_by_ckey(i)
|
||||
if(!istype(ending_human) || !ending_human.mind || !ending_human.client || !ending_human.client.prefs || !ending_human.client.prefs.tcg_cards)
|
||||
continue
|
||||
|
||||
var/mob/living/carbon/human/original_human = ending_human.mind.original_character
|
||||
if(!original_human || original_human.stat == DEAD || !(original_human == ending_human))
|
||||
continue
|
||||
|
||||
ending_human.SaveTCGCards()
|
||||
|
||||
@@ -68,6 +68,10 @@ SUBSYSTEM_DEF(vote)
|
||||
//get the highest number of votes
|
||||
var/greatest_votes = 0
|
||||
var/total_votes = 0
|
||||
if(mode == "gamemode" && CONFIG_GET(flag/must_be_readied_to_vote_gamemode))
|
||||
for(var/mob/dead/new_player/P in GLOB.player_list)
|
||||
if(P.ready != PLAYER_READY_TO_PLAY && voted[P.ckey])
|
||||
choices[choices[voted[P.ckey]]]--
|
||||
for(var/option in choices)
|
||||
var/votes = choices[option]
|
||||
total_votes += votes
|
||||
@@ -101,6 +105,10 @@ SUBSYSTEM_DEF(vote)
|
||||
|
||||
/datum/controller/subsystem/vote/proc/calculate_condorcet_votes(var/blackbox_text)
|
||||
// https://en.wikipedia.org/wiki/Schulze_method#Implementation
|
||||
if((mode == "gamemode" || mode == "dynamic") && CONFIG_GET(flag/must_be_readied_to_vote_gamemode))
|
||||
for(var/mob/dead/new_player/P in GLOB.player_list)
|
||||
if(P.ready != PLAYER_READY_TO_PLAY && voted[P.ckey])
|
||||
voted -= P.ckey
|
||||
var/list/d[][] = new/list(choices.len,choices.len) // the basic vote matrix, how many times a beats b
|
||||
for(var/ckey in voted)
|
||||
var/list/this_vote = voted[ckey]
|
||||
@@ -147,6 +155,10 @@ SUBSYSTEM_DEF(vote)
|
||||
for(var/choice in choices)
|
||||
scores_by_choice += "[choice]"
|
||||
scores_by_choice["[choice]"] = list()
|
||||
if((mode == "gamemode" || mode == "dynamic") && CONFIG_GET(flag/must_be_readied_to_vote_gamemode))
|
||||
for(var/mob/dead/new_player/P in GLOB.player_list)
|
||||
if(P.ready != PLAYER_READY_TO_PLAY && voted[P.ckey])
|
||||
voted -= P.ckey
|
||||
for(var/ckey in voted)
|
||||
var/list/this_vote = voted[ckey]
|
||||
var/list/pretty_vote = list()
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
/datum/crafting_recipe/bloodsucker/blackcoffin
|
||||
name = "Black Coffin"
|
||||
result = /obj/structure/closet/crate/coffin/blackcoffin
|
||||
tools = list(/obj/item/weldingtool,
|
||||
/obj/item/screwdriver)
|
||||
tools = list(TOOL_WELDER,
|
||||
TOOL_SCREWDRIVER)
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 1,
|
||||
/obj/item/stack/sheet/mineral/wood = 5,
|
||||
/obj/item/stack/sheet/metal = 1)
|
||||
@@ -72,8 +72,8 @@
|
||||
/datum/crafting_recipe/bloodsucker/metalcoffin
|
||||
name = "Metal Coffin"
|
||||
result =/obj/structure/closet/crate/coffin/metalcoffin
|
||||
tools = list(/obj/item/weldingtool,
|
||||
/obj/item/screwdriver)
|
||||
tools = list(TOOL_WELDER,
|
||||
TOOL_SCREWDRIVER)
|
||||
reqs = list(/obj/item/stack/sheet/metal = 5)
|
||||
time = 100
|
||||
subcategory = CAT_FURNITURE
|
||||
@@ -84,9 +84,9 @@
|
||||
name = "Persuasion Rack"
|
||||
//desc = "For converting crewmembers into loyal Vassals."
|
||||
result = /obj/structure/bloodsucker/vassalrack
|
||||
tools = list(/obj/item/weldingtool,
|
||||
//obj/item/screwdriver,
|
||||
/obj/item/wrench
|
||||
tools = list(TOOL_WELDER,
|
||||
//TOOL_SCREWDRIVER,
|
||||
TOOL_WRENCH
|
||||
)
|
||||
reqs = list(/obj/item/stack/sheet/mineral/wood = 3,
|
||||
/obj/item/stack/sheet/metal = 2,
|
||||
@@ -108,8 +108,8 @@
|
||||
name = "Candelabrum"
|
||||
//desc = "For converting crewmembers into loyal Vassals."
|
||||
result = /obj/structure/bloodsucker/candelabrum
|
||||
tools = list(/obj/item/weldingtool,
|
||||
/obj/item/wrench
|
||||
tools = list(TOOL_WELDER,
|
||||
TOOL_WRENCH
|
||||
)
|
||||
reqs = list(/obj/item/stack/sheet/metal = 3,
|
||||
/obj/item/stack/rods = 1,
|
||||
|
||||
@@ -26,15 +26,16 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
if(. == COMPONENT_INCOMPATIBLE || !isitem(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
var/atom/A = parent
|
||||
A.add_overlay("working")
|
||||
if(starton)
|
||||
A.add_overlay("working")
|
||||
else
|
||||
tracking = FALSE
|
||||
A.name = "[initial(A.name)] ([gpstag])"
|
||||
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact)
|
||||
if(!emp_proof)
|
||||
RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp_act)
|
||||
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/on_examine)
|
||||
RegisterSignal(parent, COMSIG_CLICK_ALT, .proc/on_AltClick)
|
||||
if(!starton)
|
||||
tracking = FALSE
|
||||
|
||||
///Called on COMSIG_ITEM_ATTACK_SELF
|
||||
/datum/component/gps/item/proc/interact(datum/source, mob/user)
|
||||
|
||||
@@ -146,9 +146,11 @@
|
||||
if(!istype(A) || !get_turf(A) || A == src)
|
||||
return
|
||||
|
||||
orbit_target = A
|
||||
return A.AddComponent(/datum/component/orbiter, src, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
|
||||
|
||||
/atom/movable/proc/stop_orbit(datum/component/orbiter/orbits)
|
||||
orbit_target = null
|
||||
return // We're just a simple hook
|
||||
|
||||
/atom/proc/transfer_observers_to(atom/target)
|
||||
|
||||
@@ -84,38 +84,37 @@ handles linking back and forth.
|
||||
_MakeLocal()
|
||||
|
||||
/datum/component/remote_materials/proc/OnAttackBy(datum/source, obj/item/I, mob/user)
|
||||
if (istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = I
|
||||
if (!QDELETED(M.buffer) && istype(M.buffer, /obj/machinery/ore_silo))
|
||||
if (silo == M.buffer)
|
||||
if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
if((I.buffer) && istype(I.buffer, /obj/machinery/ore_silo))
|
||||
if(silo == I.buffer)
|
||||
to_chat(user, "<span class='notice'>[parent] is already connected to [silo].</span>")
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
if (silo)
|
||||
if(silo)
|
||||
silo.connected -= src
|
||||
silo.updateUsrDialog()
|
||||
else if (mat_container)
|
||||
else if(mat_container)
|
||||
mat_container.retrieve_all()
|
||||
qdel(mat_container)
|
||||
silo = M.buffer
|
||||
silo = I.buffer
|
||||
silo.connected += src
|
||||
silo.updateUsrDialog()
|
||||
mat_container = silo.GetComponent(/datum/component/material_container)
|
||||
to_chat(user, "<span class='notice'>You connect [parent] to [silo] from the multitool's buffer.</span>")
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
|
||||
else if (silo && istype(I, /obj/item/stack))
|
||||
if (silo.remote_attackby(parent, user, I))
|
||||
else if(silo && istype(I, /obj/item/stack))
|
||||
if(silo.remote_attackby(parent, user, I))
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
|
||||
/datum/component/remote_materials/proc/on_hold()
|
||||
return silo && silo.holds["[get_area(parent)]/[category]"]
|
||||
|
||||
/datum/component/remote_materials/proc/silo_log(obj/machinery/M, action, amount, noun, list/mats)
|
||||
if (silo)
|
||||
if(silo)
|
||||
silo.silo_log(M || parent, action, amount, noun, mats)
|
||||
|
||||
/datum/component/remote_materials/proc/format_amount()
|
||||
if (mat_container)
|
||||
if(mat_container)
|
||||
return "[mat_container.total_amount] / [mat_container.max_amount == INFINITY ? "Unlimited" : mat_container.max_amount] ([silo ? "remote" : "local"])"
|
||||
else
|
||||
return "0 / 0"
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
qdel(src)
|
||||
|
||||
/datum/component/riding/proc/vehicle_mob_buckle(datum/source, mob/living/M, force)
|
||||
handle_vehicle_offsets()
|
||||
handle_vehicle_offsets(M.buckled?.dir)
|
||||
|
||||
/datum/component/riding/proc/handle_vehicle_layer(dir)
|
||||
var/atom/movable/AM = parent
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
else
|
||||
if(!default_can_user_rotate(user, default_rotation_direction))
|
||||
return
|
||||
if(istype(I,/obj/item/wrench))
|
||||
if(I.tool_behaviour == TOOL_WRENCH)
|
||||
BaseRot(user,default_rotation_direction)
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
*A storage component to be used on card piles, for use as hands/decks/discard piles. Don't use on something that's not a card pile!
|
||||
*/
|
||||
/datum/component/storage/concrete/tcg
|
||||
display_numerical_stacking = FALSE
|
||||
max_w_class = WEIGHT_CLASS_TINY
|
||||
max_items = 30
|
||||
max_combined_w_class = WEIGHT_CLASS_TINY * 30
|
||||
///The deck that the card pile is using for FAIR PLAY.
|
||||
|
||||
/datum/component/storage/concrete/tcg/can_be_inserted(obj/item/I, stop_messages, mob/M)
|
||||
. = ..()
|
||||
return istype(I, /obj/item/tcg_card)
|
||||
|
||||
/datum/component/storage/concrete/tcg/PostTransfer()
|
||||
. = ..()
|
||||
handle_empty_deck()
|
||||
|
||||
/datum/component/storage/concrete/tcg/remove_from_storage(atom/movable/AM, atom/new_location)
|
||||
. = ..()
|
||||
handle_empty_deck()
|
||||
|
||||
/datum/component/storage/concrete/tcg/ui_show(mob/M)
|
||||
. = ..()
|
||||
M.visible_message("<span class='notice'>[M] starts to look through the contents of \the [parent]!</span>", \
|
||||
"<span class='notice'>You begin looking into the contents of \the [parent]!</span>")
|
||||
|
||||
/datum/component/storage/concrete/tcg/close(mob/M)
|
||||
. = ..()
|
||||
var/list/card_contents = contents()
|
||||
var/obj/temp_parent = parent
|
||||
temp_parent.visible_message("<span class='notice'>\the [parent] is shuffled after looking through it.</span>")
|
||||
card_contents = shuffle(card_contents)
|
||||
|
||||
/datum/component/storage/concrete/tcg/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found)
|
||||
. = ..()
|
||||
if(!things.len)
|
||||
qdel(parent)
|
||||
|
||||
/datum/component/storage/concrete/tcg/proc/handle_empty_deck()
|
||||
var/list/contents = contents()
|
||||
//You can't have a deck of one card!
|
||||
if(contents.len == 1)
|
||||
var/obj/item/tcgcard_deck/deck = parent
|
||||
var/obj/item/tcg_card/card = contents[1]
|
||||
remove_from_storage(card, card.drop_location())
|
||||
card.flipped = deck.flipped
|
||||
card.update_icon_state()
|
||||
qdel(parent)
|
||||
@@ -11,6 +11,8 @@
|
||||
var/antag_removal_text // Text will be given to the quirk holder if they get an antag that has it blacklisted.
|
||||
var/mood_quirk = FALSE //if true, this quirk affects mood and is unavailable if moodlets are disabled
|
||||
var/mob_trait //if applicable, apply and remove this mob trait
|
||||
/// should we immediately call on_spawn or add a timer to trigger
|
||||
var/on_spawn_immediate = TRUE
|
||||
var/mob/living/quirk_holder
|
||||
|
||||
/datum/quirk/New(mob/living/quirk_mob, spawn_effects)
|
||||
@@ -26,7 +28,10 @@
|
||||
START_PROCESSING(SSquirks, src)
|
||||
add()
|
||||
if(spawn_effects)
|
||||
on_spawn()
|
||||
if(on_spawn_immediate)
|
||||
on_spawn()
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/on_spawn), 0)
|
||||
addtimer(CALLBACK(src, .proc/post_add), 30)
|
||||
|
||||
/datum/quirk/Destroy()
|
||||
|
||||
@@ -219,3 +219,19 @@
|
||||
/datum/quirk/night_vision/on_spawn()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.update_sight()
|
||||
|
||||
/datum/quirk/multilingual
|
||||
name = "Multi-Lingual"
|
||||
desc = "You spent a portion of your life learning to understand an additional language. You may or may not be able to speak it based on your anatomy."
|
||||
value = 1
|
||||
mob_trait = TRAIT_MULTILINGUAL
|
||||
gain_text = "You've learned an extra language!"
|
||||
lose_text = "You've forgotten your extra language."
|
||||
|
||||
/datum/quirk/multilingual/post_add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.grant_language(H.client.prefs.language, TRUE, TRUE, LANGUAGE_MULTILINGUAL)
|
||||
|
||||
/datum/quirk/multilingual/remove()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.remove_language(H.client.prefs.language, TRUE, TRUE, LANGUAGE_MULTILINGUAL)
|
||||
|
||||
@@ -184,6 +184,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms)
|
||||
gain_text = null // Handled by trauma.
|
||||
lose_text = null
|
||||
medical_record_text = "Patient has an untreatable impairment in motor function in the lower extremities."
|
||||
on_spawn_immediate = FALSE
|
||||
|
||||
/datum/quirk/paraplegic/add()
|
||||
var/datum/brain_trauma/severe/paralysis/paraplegic/T = new()
|
||||
|
||||
@@ -105,6 +105,22 @@
|
||||
gain_text = "<span class='notice'>You desire to be hurt.</span>"
|
||||
lose_text = "<span class='notice'>Pain has become less exciting for you.</span>"
|
||||
|
||||
/datum/quirk/libido
|
||||
name = "Nymphomaniac"
|
||||
desc = "You are much more sensitive to arousal."
|
||||
value = 0
|
||||
mob_trait = TRAIT_NYMPHO
|
||||
gain_text = "<span class='notice'>You are feeling extra wild.</span>"
|
||||
lose_text = "<span class='notice'>You don't feel that burning sensation anymore.</span>"
|
||||
|
||||
/datum/quirk/libido/add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.arousal_rate = 3 * initial(H.arousal_rate)
|
||||
|
||||
/datum/quirk/libido/remove()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.arousal_rate = initial(H.arousal_rate)
|
||||
|
||||
/datum/quirk/alcohol_intolerance
|
||||
name = "Alcohol Intolerance"
|
||||
desc = "You take toxin damage from alcohol rather than getting drunk."
|
||||
|
||||
@@ -265,11 +265,10 @@
|
||||
reveal_wires = TRUE
|
||||
|
||||
// Same for anyone with an abductor multitool.
|
||||
else if(user.is_holding_item_of_type(/obj/item/multitool/abductor))
|
||||
reveal_wires = TRUE
|
||||
// and advanced multitool
|
||||
else if(user.is_holding_item_of_type(/obj/item/multitool/advanced))
|
||||
reveal_wires = TRUE
|
||||
else if(user.is_holding_tool_quality(TOOL_MULTITOOL))
|
||||
var/obj/item/tool = user.is_holding_tool_quality(TOOL_MULTITOOL)
|
||||
if(tool.show_wires)
|
||||
reveal_wires = TRUE
|
||||
|
||||
// Station blueprints do that too, but only if the wires are not randomized.
|
||||
else if(user.is_holding_item_of_type(/obj/item/areaeditor/blueprints) && !randomize)
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
if(status_effect_type)
|
||||
linked_status_effect = victim.apply_status_effect(status_effect_type, src)
|
||||
SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb)
|
||||
victim.emote("pain")
|
||||
if(!victim.alerts["wound"]) // only one alert is shared between all of the wounds
|
||||
victim.throw_alert("wound", /obj/screen/alert/status_effect/wound)
|
||||
|
||||
|
||||
+4
-1
@@ -99,6 +99,9 @@
|
||||
///Mobs that are currently do_after'ing this atom, to be cleared from on Destroy()
|
||||
var/list/targeted_by
|
||||
|
||||
///Reference to atom being orbited
|
||||
var/atom/orbit_target
|
||||
|
||||
/**
|
||||
* Called when an atom is created in byond (built in engine proc)
|
||||
*
|
||||
@@ -982,7 +985,7 @@
|
||||
return
|
||||
|
||||
/atom/proc/multitool_check_buffer(user, obj/item/I, silent = FALSE)
|
||||
if(!istype(I, /obj/item/multitool))
|
||||
if(!I.tool_behaviour == TOOL_MULTITOOL)
|
||||
if(user && !silent)
|
||||
to_chat(user, "<span class='warning'>[I] has no data buffer!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
/datum/sabotage_objective/processing/check_conditions()
|
||||
return won
|
||||
|
||||
/*
|
||||
/datum/sabotage_objective/processing/power_sink
|
||||
name = "Drain at least 100 megajoules of power using a power sink."
|
||||
sabotage_type = "powersink"
|
||||
@@ -44,6 +45,7 @@
|
||||
for(var/s in GLOB.power_sinks)
|
||||
var/obj/item/powersink/sink = s
|
||||
won = max(won,sink.power_drained/1e8)
|
||||
*/
|
||||
|
||||
/obj/item/paper/guides/antag/supermatter_sabotage
|
||||
info = "Ways to sabotage a supermatter:<br>\
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
O.add_fingerprint(user)
|
||||
update_icon()
|
||||
|
||||
else if(istype(O, /obj/item/weldingtool) && user.a_intent != INTENT_HARM)
|
||||
else if(O.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
|
||||
if(stat & BROKEN)
|
||||
if(!O.tool_start_check(user, amount=0))
|
||||
return
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
O.add_fingerprint(user)
|
||||
update_icon()
|
||||
|
||||
else if(istype(O, /obj/item/weldingtool) && user.a_intent != INTENT_HARM)
|
||||
else if(O.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
|
||||
if(obj_integrity < max_integrity)
|
||||
if(!O.tool_start_check(user, amount=0))
|
||||
return
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
. += "button-board"
|
||||
|
||||
/obj/machinery/button/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
if(panel_open || allowed(user))
|
||||
default_deconstruction_screwdriver(user, "button-open", "[skin]",W)
|
||||
update_icon()
|
||||
@@ -93,7 +93,7 @@
|
||||
req_access = board.accesses
|
||||
to_chat(user, "<span class='notice'>You add [W] to the button.</span>")
|
||||
|
||||
if(!device && !board && istype(W, /obj/item/wrench))
|
||||
if(!device && !board && W.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, "<span class='notice'>You start unsecuring the button frame...</span>")
|
||||
W.play_tool_sound(src)
|
||||
if(W.use_tool(src, user, 40))
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
switch(state)
|
||||
if(1)
|
||||
// State 1
|
||||
if(istype(W, /obj/item/weldingtool))
|
||||
if(W.tool_behaviour == TOOL_WELDER)
|
||||
if(weld(W, user))
|
||||
to_chat(user, "<span class='notice'>You weld the assembly securely into place.</span>")
|
||||
setAnchored(TRUE)
|
||||
@@ -56,7 +56,7 @@
|
||||
return
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weldingtool))
|
||||
else if(W.tool_behaviour == TOOL_WELDER)
|
||||
|
||||
if(weld(W, user))
|
||||
to_chat(user, "<span class='notice'>You unweld the assembly from its place.</span>")
|
||||
@@ -133,7 +133,9 @@
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/camera_assembly/proc/weld(obj/item/weldingtool/W, mob/living/user)
|
||||
/obj/structure/camera_assembly/proc/weld(obj/item/W, mob/living/user)
|
||||
if(!W.tool_behaviour == TOOL_WELDER)
|
||||
return
|
||||
if(!W.tool_start_check(user, amount=0))
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You start to weld \the [src]...</span>")
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
circuit = /obj/item/circuitboard/machine/cell_charger
|
||||
pass_flags = PASSTABLE
|
||||
var/obj/item/stock_parts/cell/charging = null
|
||||
var/charge_rate = 500
|
||||
var/recharge_coeff = 1
|
||||
|
||||
/obj/machinery/cell_charger/update_overlays()
|
||||
. += ..()
|
||||
@@ -28,9 +28,10 @@
|
||||
. = ..()
|
||||
. += "There's [charging ? "a" : "no"] cell in the charger."
|
||||
if(charging)
|
||||
. += "Current charge: [round(charging.percent(), 1)]%."
|
||||
var/obj/item/stock_parts/cell/C = charging.get_cell()
|
||||
. += "Current charge: [C.percent()]%."
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
. += "<span class='notice'>The status display reads: Charge rate at <b>[charge_rate]J</b> per cycle.</span>"
|
||||
. += "<span class='notice'>The status display reads: Charge rate at <b>[recharge_coeff*10]J</b> per cycle.</span>"
|
||||
|
||||
/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/stock_parts/cell) && !panel_open)
|
||||
@@ -122,17 +123,18 @@
|
||||
charging.emp_act(severity)
|
||||
|
||||
/obj/machinery/cell_charger/RefreshParts()
|
||||
charge_rate = 500
|
||||
for(var/obj/item/stock_parts/capacitor/C in component_parts)
|
||||
charge_rate *= C.rating
|
||||
recharge_coeff = C.rating
|
||||
|
||||
/obj/machinery/cell_charger/process()
|
||||
if(!charging || !anchored || (stat & (BROKEN|NOPOWER)))
|
||||
return
|
||||
|
||||
if(charging.percent() >= 100)
|
||||
return
|
||||
use_power(charge_rate)
|
||||
charging.give(charge_rate) //this is 2558, efficient batteries exist
|
||||
if(charging)
|
||||
var/obj/item/stock_parts/cell/C = charging.get_cell()
|
||||
if(C)
|
||||
if(C.charge < C.maxcharge)
|
||||
C.give(C.chargerate * recharge_coeff)
|
||||
use_power(250 * recharge_coeff)
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -297,22 +297,20 @@
|
||||
if(default_deconstruction_crowbar(W))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/multitool))
|
||||
var/obj/item/multitool/P = W
|
||||
|
||||
if(istype(P.buffer, /obj/machinery/computer/cloning))
|
||||
if(get_area(P.buffer) != get_area(src))
|
||||
if(W.tool_behaviour == TOOL_MULTITOOL)
|
||||
if(istype(W.buffer, /obj/machinery/computer/cloning))
|
||||
if(get_area(W.buffer) != get_area(src))
|
||||
to_chat(user, "<font color = #666633>-% Cannot link machines across power zones. Buffer cleared %-</font color>")
|
||||
P.buffer = null
|
||||
W.buffer = null
|
||||
return
|
||||
to_chat(user, "<font color = #666633>-% Successfully linked [P.buffer] with [src] %-</font color>")
|
||||
var/obj/machinery/computer/cloning/comp = P.buffer
|
||||
to_chat(user, "<font color = #666633>-% Successfully linked [W.buffer] with [src] %-</font color>")
|
||||
var/obj/machinery/computer/cloning/comp = W.buffer
|
||||
if(connected)
|
||||
connected.DetachCloner(src)
|
||||
comp.AttachCloner(src)
|
||||
else
|
||||
P.buffer = src
|
||||
to_chat(user, "<font color = #666633>-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-</font color>")
|
||||
W.buffer = src
|
||||
to_chat(user, "<font color = #666633>-% Successfully stored [REF(W.buffer)] [W.buffer] in buffer %-</font color>")
|
||||
return
|
||||
|
||||
var/mob/living/mob_occupant = occupant
|
||||
|
||||
@@ -44,7 +44,8 @@
|
||||
icon_state = "colormate"
|
||||
|
||||
/obj/machinery/gear_painter/Destroy()
|
||||
inserted.forceMove(drop_location())
|
||||
if(inserted) //please i beg you do not drop nulls
|
||||
inserted.forceMove(drop_location())
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gear_painter/attackby(obj/item/I, mob/living/user)
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
var/mob/living/silicon/ai/occupier = null
|
||||
var/active = FALSE
|
||||
|
||||
/obj/machinery/computer/aifixer/attackby(obj/I, mob/user, params)
|
||||
if(occupier && istype(I, /obj/item/screwdriver))
|
||||
/obj/machinery/computer/aifixer/attackby(obj/item/I, mob/user, params)
|
||||
if(occupier && I.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
to_chat(user, "<span class='warning'>The screws on [name]'s screen won't budge.</span>")
|
||||
else
|
||||
|
||||
@@ -151,7 +151,14 @@
|
||||
var/obj/machinery/power/apc/target = locate(ref) in GLOB.apcs_list
|
||||
if(!target)
|
||||
return
|
||||
target.vars[type] = target.setsubsystem(text2num(value))
|
||||
value = target.setsubsystem(text2num(value))
|
||||
switch(type) // Sanity check
|
||||
if("equipment", "lighting", "environ")
|
||||
target.vars[type] = value
|
||||
else
|
||||
message_admins("Warning: possible href exploit by [key_name(usr)] - attempted to set [type] on [target] to [value]")
|
||||
log_game("Warning: possible href exploit by [key_name(usr)] - attempted to set [type] on [target] to [value]")
|
||||
return
|
||||
target.update_icon()
|
||||
target.update()
|
||||
var/setTo = ""
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
add_fingerprint(user)
|
||||
switch(state)
|
||||
if(0)
|
||||
if(istype(P, /obj/item/wrench))
|
||||
if(P.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, "<span class='notice'>You start wrenching the frame into place...</span>")
|
||||
if(P.use_tool(src, user, 20, volume=50))
|
||||
to_chat(user, "<span class='notice'>You wrench the frame into place.</span>")
|
||||
setAnchored(TRUE)
|
||||
state = 1
|
||||
return
|
||||
if(istype(P, /obj/item/weldingtool))
|
||||
if(P.tool_behaviour == TOOL_WELDER)
|
||||
if(!P.tool_start_check(user, amount=0))
|
||||
return
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
if(1)
|
||||
if(istype(P, /obj/item/wrench))
|
||||
if(P.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, "<span class='notice'>You start to unfasten the frame...</span>")
|
||||
if(P.use_tool(src, user, 20, volume=50) && state == 1)
|
||||
to_chat(user, "<span class='notice'>You unfasten the frame.</span>")
|
||||
@@ -46,13 +46,13 @@
|
||||
else if(istype(P, /obj/item/circuitboard) && !circuit)
|
||||
to_chat(user, "<span class='warning'>This frame does not accept circuit boards of this type!</span>")
|
||||
return
|
||||
if(istype(P, /obj/item/screwdriver) && circuit)
|
||||
if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit)
|
||||
P.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You screw [circuit] into place.</span>")
|
||||
state = 2
|
||||
icon_state = "2"
|
||||
return
|
||||
if(istype(P, /obj/item/crowbar) && circuit)
|
||||
if(P.tool_behaviour == TOOL_CROWBAR && circuit)
|
||||
P.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You remove [circuit].</span>")
|
||||
state = 1
|
||||
@@ -62,7 +62,7 @@
|
||||
circuit = null
|
||||
return
|
||||
if(2)
|
||||
if(istype(P, /obj/item/screwdriver) && circuit)
|
||||
if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit)
|
||||
P.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You unfasten the circuit board.</span>")
|
||||
state = 1
|
||||
@@ -78,7 +78,7 @@
|
||||
icon_state = "3"
|
||||
return
|
||||
if(3)
|
||||
if(istype(P, /obj/item/wirecutters))
|
||||
if(P.tool_behaviour == TOOL_WIRECUTTER)
|
||||
P.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You remove the cables.</span>")
|
||||
state = 2
|
||||
@@ -98,7 +98,7 @@
|
||||
src.icon_state = "4"
|
||||
return
|
||||
if(4)
|
||||
if(istype(P, /obj/item/crowbar))
|
||||
if(P.tool_behaviour == TOOL_CROWBAR)
|
||||
P.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You remove the glass panel.</span>")
|
||||
state = 3
|
||||
@@ -106,7 +106,7 @@
|
||||
var/obj/item/stack/sheet/glass/G = new(drop_location(), 2)
|
||||
G.add_fingerprint(user)
|
||||
return
|
||||
if(istype(P, /obj/item/screwdriver))
|
||||
if(P.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
P.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You connect the monitor.</span>")
|
||||
var/obj/B = new circuit.build_path (loc, circuit)
|
||||
@@ -117,12 +117,6 @@
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
return ..()
|
||||
|
||||
//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking.
|
||||
/obj/structure/frame/computer/proc/check_state(target_state)
|
||||
if(state == target_state)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/structure/frame/computer/deconstruct(disassembled = TRUE)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
if(state == 4)
|
||||
|
||||
@@ -133,22 +133,20 @@
|
||||
to_chat(user, "<span class='notice'>You insert [W].</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
|
||||
src.updateUsrDialog()
|
||||
else if(istype(W, /obj/item/multitool))
|
||||
var/obj/item/multitool/P = W
|
||||
|
||||
if(istype(P.buffer, clonepod_type))
|
||||
if(get_area(P.buffer) != get_area(src))
|
||||
else if(W.tool_behaviour == TOOL_MULTITOOL)
|
||||
if(istype(W.buffer, clonepod_type))
|
||||
if(get_area(W.buffer) != get_area(src))
|
||||
to_chat(user, "<font color = #666633>-% Cannot link machines across power zones. Buffer cleared %-</font color>")
|
||||
P.buffer = null
|
||||
W.buffer = null
|
||||
return
|
||||
to_chat(user, "<font color = #666633>-% Successfully linked [P.buffer] with [src] %-</font color>")
|
||||
var/obj/machinery/clonepod/pod = P.buffer
|
||||
to_chat(user, "<font color = #666633>-% Successfully linked [W.buffer] with [src] %-</font color>")
|
||||
var/obj/machinery/clonepod/pod = W.buffer
|
||||
if(pod.connected)
|
||||
pod.connected.DetachCloner(pod)
|
||||
AttachCloner(pod)
|
||||
else
|
||||
P.buffer = src
|
||||
to_chat(user, "<font color = #666633>-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-</font color>")
|
||||
W.buffer = src
|
||||
to_chat(user, "<font color = #666633>-% Successfully stored [REF(W.buffer)] [W.buffer] in buffer %-</font color>")
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
@@ -473,7 +471,7 @@
|
||||
scanner.locked = prev_locked
|
||||
src.updateUsrDialog()
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/cloning/proc/scan_occupant(occupant)
|
||||
var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
|
||||
|
||||
@@ -23,11 +23,10 @@
|
||||
if(W.tool_behaviour == TOOL_MULTITOOL)
|
||||
if(!multitool_check_buffer(user, W))
|
||||
return
|
||||
var/obj/item/multitool/M = W
|
||||
if(M.buffer && istype(M.buffer, /obj/machinery/launchpad))
|
||||
if(W.buffer && istype(W.buffer, /obj/machinery/launchpad))
|
||||
if(LAZYLEN(launchpads) < maximum_pads)
|
||||
launchpads |= M.buffer
|
||||
M.buffer = null
|
||||
launchpads |= W.buffer
|
||||
W.buffer = null
|
||||
to_chat(user, "<span class='notice'>You upload the data from the [W.name]'s buffer.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] cannot handle any more connections!</span>")
|
||||
|
||||
@@ -55,11 +55,12 @@
|
||||
return connected_mechpad
|
||||
|
||||
/obj/machinery/computer/mechpad/multitool_act(mob/living/user, obj/item/tool)
|
||||
if(!tool.tool_behaviour == TOOL_MULTITOOL)
|
||||
return
|
||||
if(!multitool_check_buffer(user, tool))
|
||||
return
|
||||
var/obj/item/multitool/multitool = tool
|
||||
if(istype(multitool.buffer, /obj/machinery/mechpad))
|
||||
var/obj/machinery/mechpad/buffered_console = multitool.buffer
|
||||
if(istype(tool.buffer, /obj/machinery/mechpad))
|
||||
var/obj/machinery/mechpad/buffered_console = tool.buffer
|
||||
if(!(mechpads.len < maximum_pads))
|
||||
to_chat(user, "<span class='warning'>[src] cannot handle any more connections!</span>")
|
||||
return
|
||||
@@ -69,13 +70,13 @@
|
||||
connected_mechpad = buffered_console
|
||||
connected_mechpad.connected_console = src
|
||||
connected_mechpad.id = id
|
||||
multitool.buffer = null
|
||||
to_chat(user, "<span class='notice'>You connect the console to the pad with data from the [multitool.name]'s buffer.</span>")
|
||||
tool.buffer = null
|
||||
to_chat(user, "<span class='notice'>You connect the console to the pad with data from the [tool.name]'s buffer.</span>")
|
||||
else
|
||||
mechpads += buffered_console
|
||||
LAZYADD(buffered_console.consoles, src)
|
||||
multitool.buffer = null
|
||||
to_chat(user, "<span class='notice'>You upload the data from the [multitool.name]'s buffer.</span>")
|
||||
tool.buffer = null
|
||||
to_chat(user, "<span class='notice'>You upload the data from the [tool.name]'s buffer.</span>")
|
||||
|
||||
/**
|
||||
* Tries to call the launch proc on the connected mechpad, returns if there is no connected mechpad or there is no mecha on the pad
|
||||
|
||||
@@ -264,6 +264,8 @@ What a mess.*/
|
||||
active1 = null
|
||||
if(!( GLOB.data_core.security.Find(active2) ))
|
||||
active2 = null
|
||||
if(!authenticated && href_list["choice"] != "Log In") // logging in is the only action you can do if not logged in
|
||||
return
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr) || IsAdminGhost(usr))
|
||||
usr.set_machine(src)
|
||||
switch(href_list["choice"])
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
circuit = null
|
||||
qdel(src)
|
||||
|
||||
//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking.
|
||||
/obj/structure/frame/proc/check_state(target_state)
|
||||
if(state == target_state)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/structure/frame/machine
|
||||
name = "machine frame"
|
||||
@@ -84,34 +89,32 @@
|
||||
if(!P.tool_start_check(user, amount=5))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start to add cables to the frame...</span>")
|
||||
if(P.use_tool(src, user, 20, volume=50, amount=5))
|
||||
if(P.use_tool(src, user, 20, volume=50, amount=5, extra_checks = CALLBACK(src, .proc/check_state, 1)))
|
||||
to_chat(user, "<span class='notice'>You add cables to the frame.</span>")
|
||||
state = 2
|
||||
icon_state = "box_1"
|
||||
|
||||
return
|
||||
if(istype(P, /obj/item/screwdriver) && !anchored)
|
||||
if(P.tool_behaviour == TOOL_SCREWDRIVER && !anchored)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the frame.</span>", \
|
||||
"<span class='notice'>You start to disassemble the frame...</span>", "You hear banging and clanking.")
|
||||
if(P.use_tool(src, user, 40, volume=50))
|
||||
if(state == 1)
|
||||
to_chat(user, "<span class='notice'>You disassemble the frame.</span>")
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 5)
|
||||
M.add_fingerprint(user)
|
||||
qdel(src)
|
||||
if(P.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, .proc/check_state, 1)))
|
||||
to_chat(user, "<span class='notice'>You disassemble the frame.</span>")
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 5)
|
||||
M.add_fingerprint(user)
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(P, /obj/item/wrench))
|
||||
if(P.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
|
||||
if(P.use_tool(src, user, 40, volume=75))
|
||||
if(state == 1)
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
|
||||
setAnchored(!anchored)
|
||||
if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 1)))
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
|
||||
setAnchored(!anchored)
|
||||
return
|
||||
|
||||
if(2)
|
||||
if(istype(P, /obj/item/wrench))
|
||||
if(P.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
|
||||
if(P.use_tool(src, user, 40, volume=75))
|
||||
if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 2)))
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
|
||||
setAnchored(!anchored)
|
||||
return
|
||||
@@ -140,7 +143,7 @@
|
||||
to_chat(user, "<span class='warning'>This frame does not accept circuit boards of this type!</span>")
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/wirecutters))
|
||||
if(P.tool_behaviour == TOOL_WIRECUTTER)
|
||||
P.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You remove the cables.</span>")
|
||||
state = 1
|
||||
@@ -149,7 +152,7 @@
|
||||
return
|
||||
|
||||
if(3)
|
||||
if(istype(P, /obj/item/crowbar))
|
||||
if(P.tool_behaviour == TOOL_CROWBAR)
|
||||
P.play_tool_sound(src)
|
||||
state = 2
|
||||
circuit.forceMove(drop_location())
|
||||
@@ -167,14 +170,14 @@
|
||||
icon_state = "box_1"
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/wrench) && !circuit.needs_anchored)
|
||||
if(P.tool_behaviour == TOOL_WRENCH && !circuit.needs_anchored)
|
||||
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
|
||||
if(P.use_tool(src, user, 40, volume=75))
|
||||
if(P.use_tool(src, user, 40, volume=75, extra_checks = CALLBACK(src, .proc/check_state, 3)))
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
|
||||
setAnchored(!anchored)
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/screwdriver))
|
||||
if(P.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
var/component_check = 1
|
||||
for(var/R in req_components)
|
||||
if(req_components[R] > 0)
|
||||
|
||||
@@ -296,6 +296,12 @@
|
||||
AM.forceMove(src)
|
||||
R.module.remove_module(I, TRUE)
|
||||
else
|
||||
|
||||
if(ishuman(mob_occupant))
|
||||
var/mob/living/carbon/human/H = mob_occupant
|
||||
if(H.mind && H.client && H.client.prefs && H == H.mind.original_character)
|
||||
H.SaveTCGCards()
|
||||
|
||||
var/list/gear = list()
|
||||
if(iscarbon(mob_occupant)) // sorry simp-le-mobs deserve no mercy
|
||||
var/mob/living/carbon/C = mob_occupant
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
/obj/machinery/jukebox/attackby(obj/item/O, mob/user, params)
|
||||
if(!active && !(flags_1 & NODECONSTRUCT_1))
|
||||
if(istype(O, /obj/item/wrench))
|
||||
if(O.tool_behaviour == TOOL_WRENCH)
|
||||
if(!anchored && !isinspace())
|
||||
to_chat(user,"<span class='notice'>You secure [src] to the floor.</span>")
|
||||
setAnchored(TRUE)
|
||||
|
||||
@@ -99,19 +99,21 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/machinery/defibrillator_mount/multitool_act(mob/living/user, obj/item/multitool)
|
||||
/obj/machinery/defibrillator_mount/multitool_act(mob/living/user, obj/item/W)
|
||||
if(!W.tool_behaviour == TOOL_MULTITOOL)
|
||||
return
|
||||
if(!defib)
|
||||
to_chat(user, "<span class='warning'>There isn't any defibrillator to clamp in!</span>")
|
||||
return TRUE
|
||||
if(!clamps_locked)
|
||||
to_chat(user, "<span class='warning'>[src]'s clamps are disengaged!</span>")
|
||||
return TRUE
|
||||
user.visible_message("<span class='notice'>[user] presses [multitool] into [src]'s ID slot...</span>", \
|
||||
user.visible_message("<span class='notice'>[user] presses [W] into [src]'s ID slot...</span>", \
|
||||
"<span class='notice'>You begin overriding the clamps on [src]...</span>")
|
||||
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
|
||||
if(!do_after(user, 100, target = src) || !clamps_locked)
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] pulses [multitool], and [src]'s clamps slide up.</span>", \
|
||||
user.visible_message("<span class='notice'>[user] pulses [W], and [src]'s clamps slide up.</span>", \
|
||||
"<span class='notice'>You override the locking clamps on [src]!</span>")
|
||||
playsound(src, 'sound/machines/locktoggle.ogg', 50, TRUE)
|
||||
clamps_locked = FALSE
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/barricade/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weldingtool) && user.a_intent != INTENT_HARM && bar_material == METAL)
|
||||
if(I.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM && bar_material == METAL)
|
||||
if(obj_integrity < max_integrity)
|
||||
if(!I.tool_start_check(user, amount=0))
|
||||
return
|
||||
|
||||
@@ -864,7 +864,7 @@
|
||||
update_icon()
|
||||
return
|
||||
if(AIRLOCK_SECURITY_METAL)
|
||||
if(istype(C, /obj/item/weldingtool))
|
||||
if(C.tool_behaviour == TOOL_WELDER)
|
||||
if(!C.tool_start_check(user, amount=2))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You begin cutting the panel's shielding...</span>")
|
||||
@@ -879,10 +879,9 @@
|
||||
update_icon()
|
||||
return
|
||||
if(AIRLOCK_SECURITY_PLASTEEL_I_S)
|
||||
if(istype(C, /obj/item/crowbar))
|
||||
var/obj/item/crowbar/W = C
|
||||
if(C.tool_behaviour == TOOL_CROWBAR)
|
||||
to_chat(user, "<span class='notice'>You start removing the inner layer of shielding...</span>")
|
||||
if(W.use_tool(src, user, 40, volume=100))
|
||||
if(C.use_tool(src, user, 40, volume=100))
|
||||
if(!panel_open)
|
||||
return
|
||||
if(security_level != AIRLOCK_SECURITY_PLASTEEL_I_S)
|
||||
@@ -896,7 +895,7 @@
|
||||
update_icon()
|
||||
return
|
||||
if(AIRLOCK_SECURITY_PLASTEEL_I)
|
||||
if(istype(C, /obj/item/weldingtool))
|
||||
if(C.tool_behaviour == TOOL_WELDER)
|
||||
if(!C.tool_start_check(user, amount=2))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You begin cutting the inner layer of shielding...</span>")
|
||||
@@ -909,7 +908,7 @@
|
||||
security_level = AIRLOCK_SECURITY_PLASTEEL_I_S
|
||||
return
|
||||
if(AIRLOCK_SECURITY_PLASTEEL_O_S)
|
||||
if(istype(C, /obj/item/crowbar))
|
||||
if(C.tool_behaviour == TOOL_CROWBAR)
|
||||
to_chat(user, "<span class='notice'>You start removing outer layer of shielding...</span>")
|
||||
if(C.use_tool(src, user, 40, volume=100))
|
||||
if(!panel_open)
|
||||
@@ -922,7 +921,7 @@
|
||||
spawn_atom_to_turf(/obj/item/stack/sheet/plasteel, user.loc, 1)
|
||||
return
|
||||
if(AIRLOCK_SECURITY_PLASTEEL_O)
|
||||
if(istype(C, /obj/item/weldingtool))
|
||||
if(C.tool_behaviour == TOOL_WELDER)
|
||||
if(!C.tool_start_check(user, amount=2))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You begin cutting the outer layer of shielding...</span>")
|
||||
@@ -935,7 +934,7 @@
|
||||
security_level = AIRLOCK_SECURITY_PLASTEEL_O_S
|
||||
return
|
||||
if(AIRLOCK_SECURITY_PLASTEEL)
|
||||
if(istype(C, /obj/item/wirecutters))
|
||||
if(C.tool_behaviour == TOOL_WIRECUTTER)
|
||||
if(src.hasPower() && src.shock(user, 60)) // Protective grille of wiring is electrified
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start cutting through the outer grille.</span>")
|
||||
@@ -946,7 +945,7 @@
|
||||
"<span class='notice'>You cut through \the [src]'s outer grille.</span>")
|
||||
security_level = AIRLOCK_SECURITY_PLASTEEL_O
|
||||
return
|
||||
if(istype(C, /obj/item/screwdriver))
|
||||
if(C.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
if(panel_open && detonated)
|
||||
to_chat(user, "<span class='warning'>[src] has no maintenance panel!</span>")
|
||||
return
|
||||
@@ -954,7 +953,7 @@
|
||||
to_chat(user, "<span class='notice'>You [panel_open ? "open":"close"] the maintenance panel of the airlock.</span>")
|
||||
C.play_tool_sound(src)
|
||||
src.update_icon()
|
||||
else if(istype(C, /obj/item/wirecutters) && note)
|
||||
else if(C.tool_behaviour == TOOL_WIRECUTTER && note)
|
||||
user.visible_message("<span class='notice'>[user] cuts down [note] from [src].</span>", "<span class='notice'>You remove [note] from [src].</span>")
|
||||
C.play_tool_sound(src)
|
||||
note.forceMove(get_turf(user))
|
||||
@@ -999,7 +998,9 @@
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/try_to_weld(obj/item/weldingtool/W, mob/user)
|
||||
/obj/machinery/door/airlock/try_to_weld(obj/item/W, mob/user)
|
||||
if(!W.tool_behaviour == TOOL_WELDER)
|
||||
return
|
||||
if(!operating && density)
|
||||
if(user.a_intent != INTENT_HELP)
|
||||
if(!W.tool_start_check(user, amount=0))
|
||||
@@ -1028,12 +1029,14 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The airlock doesn't need repairing.</span>")
|
||||
|
||||
/obj/machinery/door/airlock/proc/weld_checks(obj/item/weldingtool/W, mob/user)
|
||||
/obj/machinery/door/airlock/proc/weld_checks(obj/item/W, mob/user)
|
||||
if(!W.tool_behaviour == TOOL_WELDER)
|
||||
return
|
||||
return !operating && density
|
||||
|
||||
/obj/machinery/door/airlock/try_to_crowbar(obj/item/I, mob/living/user)
|
||||
var/beingcrowbarred = null
|
||||
if(istype(I, /obj/item/crowbar) )
|
||||
if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
beingcrowbarred = 1
|
||||
else
|
||||
beingcrowbarred = 0
|
||||
@@ -1059,7 +1062,7 @@
|
||||
to_chat(user, "<span class='warning'>The airlock's motors resist your efforts to force it!</span>")
|
||||
else if(locked)
|
||||
to_chat(user, "<span class='warning'>The airlock's bolts prevent it from being forced!</span>")
|
||||
else if( !welded && !operating)
|
||||
else if(!welded && !operating)
|
||||
if(!beingcrowbarred) //being fireaxe'd
|
||||
var/obj/item/fireaxe/axe = I
|
||||
if(!axe.wielded)
|
||||
@@ -1069,7 +1072,9 @@
|
||||
else
|
||||
INVOKE_ASYNC(src, (density ? .proc/open : .proc/close), 2)
|
||||
|
||||
if(istype(I, /obj/item/crowbar/power))
|
||||
if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
if(!I.can_force_powered)
|
||||
return
|
||||
if(hasPower() && isElectrified())
|
||||
shock(user,100)//it's like sticking a forck in a power socket
|
||||
return
|
||||
|
||||
@@ -658,7 +658,7 @@
|
||||
/obj/machinery/door/airlock/clockwork/proc/attempt_construction(obj/item/I, mob/living/user)
|
||||
if(!I || !user || !user.canUseTopic(src))
|
||||
return 0
|
||||
else if(istype(I, /obj/item/wrench))
|
||||
else if(I.tool_behaviour == TOOL_WRENCH)
|
||||
if(construction_state == GEAR_SECURE)
|
||||
user.visible_message("<span class='notice'>[user] begins loosening [src]'s cogwheel...</span>", "<span class='notice'>You begin loosening [src]'s cogwheel...</span>")
|
||||
if(!I.use_tool(src, user, 75, volume=50) || construction_state != GEAR_SECURE)
|
||||
@@ -674,7 +674,7 @@
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
construction_state = GEAR_SECURE
|
||||
return 1
|
||||
else if(istype(I, /obj/item/crowbar))
|
||||
else if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
if(construction_state == GEAR_SECURE)
|
||||
to_chat(user, "<span class='warning'>[src]'s cogwheel is too tightly secured! Your [I.name] can't reach under it!</span>")
|
||||
return 1
|
||||
|
||||
@@ -173,7 +173,9 @@
|
||||
/obj/machinery/door/proc/unrestricted_side(mob/M) //Allows for specific side of airlocks to be unrestrected (IE, can exit maint freely, but need access to enter)
|
||||
return get_dir(src, M) & unres_sides
|
||||
|
||||
/obj/machinery/door/proc/try_to_weld(obj/item/weldingtool/W, mob/user)
|
||||
/obj/machinery/door/proc/try_to_weld(obj/item/W, mob/user)
|
||||
if(!W.tool_behaviour == TOOL_WELDER)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user)
|
||||
|
||||
@@ -123,7 +123,9 @@
|
||||
/obj/machinery/door/firedoor/try_to_activate_door(mob/user)
|
||||
return
|
||||
|
||||
/obj/machinery/door/firedoor/try_to_weld(obj/item/weldingtool/W, mob/user)
|
||||
/obj/machinery/door/firedoor/try_to_weld(obj/item/W, mob/user)
|
||||
if(!W.tool_behaviour == TOOL_WELDER)
|
||||
return
|
||||
if(!W.tool_start_check(user, amount=0))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] starts [welded ? "unwelding" : "welding"] [src].</span>", "<span class='notice'>You start welding [src].</span>")
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
|
||||
add_fingerprint(user)
|
||||
if(!(flags_1&NODECONSTRUCT_1))
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
if(density || operating)
|
||||
to_chat(user, "<span class='warning'>You need to open the door to access the maintenance panel!</span>")
|
||||
return
|
||||
@@ -252,7 +252,7 @@
|
||||
to_chat(user, "<span class='notice'>You [panel_open ? "open":"close"] the maintenance panel of the [src.name].</span>")
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/crowbar))
|
||||
if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
if(panel_open && !density && !operating)
|
||||
user.visible_message("[user] removes the electronics from the [src.name].", \
|
||||
"<span class='notice'>You start to remove electronics from the [src.name]...</span>")
|
||||
|
||||
@@ -54,7 +54,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
|
||||
return
|
||||
|
||||
/obj/machinery/doppler_array/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/wrench))
|
||||
if(I.tool_behaviour == TOOL_WRENCH)
|
||||
if(!anchored && !isinspace())
|
||||
anchored = TRUE
|
||||
power_change()
|
||||
|
||||
@@ -210,13 +210,13 @@
|
||||
icon_state = icon_on
|
||||
|
||||
/obj/machinery/droneDispenser/attackby(obj/item/I, mob/living/user)
|
||||
if(istype(I, /obj/item/crowbar))
|
||||
if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.retrieve_all()
|
||||
I.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You retrieve the materials from [src].</span>")
|
||||
|
||||
else if(istype(I, /obj/item/weldingtool))
|
||||
else if(I.tool_behaviour == TOOL_WELDER)
|
||||
if(!(stat & BROKEN))
|
||||
to_chat(user, "<span class='warning'>[src] doesn't need repairs.</span>")
|
||||
return
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(istype(W, /obj/item/screwdriver) && buildstage == 2)
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER && buildstage == 2)
|
||||
W.play_tool_sound(src)
|
||||
panel_open = !panel_open
|
||||
to_chat(user, "<span class='notice'>The wires have been [panel_open ? "exposed" : "unexposed"].</span>")
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
if(panel_open)
|
||||
|
||||
if(istype(W, /obj/item/weldingtool) && user.a_intent == INTENT_HELP)
|
||||
if((W.tool_behaviour == TOOL_WELDER) && user.a_intent == INTENT_HELP)
|
||||
if(obj_integrity < max_integrity)
|
||||
if(!W.tool_start_check(user, amount=0))
|
||||
return
|
||||
@@ -184,7 +184,7 @@
|
||||
|
||||
switch(buildstage)
|
||||
if(2)
|
||||
if(istype(W, /obj/item/multitool))
|
||||
if(W.tool_behaviour == TOOL_MULTITOOL)
|
||||
detecting = !detecting
|
||||
if (src.detecting)
|
||||
user.visible_message("[user] has reconnected [src]'s detecting unit!", "<span class='notice'>You reconnect [src]'s detecting unit.</span>")
|
||||
@@ -192,7 +192,7 @@
|
||||
user.visible_message("[user] has disconnected [src]'s detecting unit!", "<span class='notice'>You disconnect [src]'s detecting unit.</span>")
|
||||
return
|
||||
|
||||
else if (istype(W, /obj/item/wirecutters))
|
||||
else if(W.tool_behaviour == TOOL_WIRECUTTER)
|
||||
buildstage = 1
|
||||
W.play_tool_sound(src)
|
||||
new /obj/item/stack/cable_coil(user.loc, 5)
|
||||
@@ -215,7 +215,7 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/crowbar))
|
||||
else if(W.tool_behaviour == TOOL_CROWBAR)
|
||||
user.visible_message("[user.name] removes the electronics from [src.name].", \
|
||||
"<span class='notice'>You start prying out the circuit...</span>")
|
||||
if(W.use_tool(src, user, 20, volume=50))
|
||||
@@ -247,7 +247,7 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/wrench))
|
||||
else if(W.tool_behaviour == TOOL_WRENCH)
|
||||
user.visible_message("[user] removes the fire alarm assembly from the wall.", \
|
||||
"<span class='notice'>You remove the fire alarm assembly from the wall.</span>")
|
||||
var/obj/item/wallframe/firealarm/frame = new /obj/item/wallframe/firealarm()
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
//Don't want to render prison breaks impossible
|
||||
/obj/machinery/flasher/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
if (istype(W, /obj/item/wirecutters))
|
||||
if (bulb)
|
||||
if(W.tool_behaviour == TOOL_WIRECUTTER)
|
||||
if(bulb)
|
||||
user.visible_message("[user] begins to disconnect [src]'s flashbulb.", "<span class='notice'>You begin to disconnect [src]'s flashbulb...</span>")
|
||||
if(W.use_tool(src, user, 30, volume=50) && bulb)
|
||||
user.visible_message("[user] has disconnected [src]'s flashbulb!", "<span class='notice'>You disconnect [src]'s flashbulb.</span>")
|
||||
@@ -66,7 +66,7 @@
|
||||
bulb = null
|
||||
power_change()
|
||||
|
||||
else if (istype(W, /obj/item/assembly/flash/handheld))
|
||||
else if(istype(W, /obj/item/assembly/flash/handheld))
|
||||
if (!bulb)
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
@@ -76,7 +76,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>A flashbulb is already installed in [src]!</span>")
|
||||
|
||||
else if (istype(W, /obj/item/wrench))
|
||||
else if(W.tool_behaviour == TOOL_WRENCH)
|
||||
if(!bulb)
|
||||
to_chat(user, "<span class='notice'>You start unsecuring the flasher frame...</span>")
|
||||
if(W.use_tool(src, user, 40, volume=50))
|
||||
@@ -173,10 +173,10 @@
|
||||
flash()
|
||||
|
||||
/obj/machinery/flasher/portable/attackby(obj/item/W, mob/user, params)
|
||||
if (istype(W, /obj/item/wrench))
|
||||
if(W.tool_behaviour == TOOL_WRENCH)
|
||||
W.play_tool_sound(src, 100)
|
||||
|
||||
if (!anchored && !isinspace())
|
||||
if(!anchored && !isinspace())
|
||||
to_chat(user, "<span class='notice'>[src] is now secured.</span>")
|
||||
add_overlay("[base_state]-s")
|
||||
setAnchored(TRUE)
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
// src.sd_SetLuminosity(0)
|
||||
|
||||
/obj/machinery/sparker/attackby(obj/item/W, mob/user, params)
|
||||
if (istype(W, /obj/item/screwdriver))
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
add_fingerprint(user)
|
||||
src.disable = !src.disable
|
||||
if (src.disable)
|
||||
|
||||
@@ -38,8 +38,7 @@
|
||||
if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
I.buffer = src
|
||||
to_chat(user, "<span class='notice'>You save the data in the [I.name]'s buffer.</span>")
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -37,13 +37,14 @@
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/mechpad/multitool_act(mob/living/user, obj/item/tool)
|
||||
if(!tool.tool_behaviour == TOOL_MULTITOOL)
|
||||
return
|
||||
if(!panel_open)
|
||||
return
|
||||
if(!multitool_check_buffer(user, tool))
|
||||
return
|
||||
var/obj/item/multitool/multitool = tool
|
||||
multitool.buffer = src
|
||||
to_chat(user, "<span class='notice'>You save the data in the [multitool.name]'s buffer.</span>")
|
||||
tool.buffer = src
|
||||
to_chat(user, "<span class='notice'>You save the data in the [tool.name]'s buffer.</span>")
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
if(T.intact)
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
open = !open
|
||||
|
||||
user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "<span class='notice'>You [open ? "open" : "close"] the beacon's cover.</span>")
|
||||
|
||||
@@ -127,7 +127,9 @@ Buildable meters
|
||||
/obj/item/pipe/attack_self(mob/user)
|
||||
setDir(turn(dir,-90))
|
||||
|
||||
/obj/item/pipe/wrench_act(mob/living/user, obj/item/wrench/W)
|
||||
/obj/item/pipe/wrench_act(mob/living/user, obj/item/W)
|
||||
if(!W.tool_behaviour == TOOL_WRENCH)
|
||||
return
|
||||
if(!isturf(loc))
|
||||
return TRUE
|
||||
|
||||
@@ -196,8 +198,9 @@ Buildable meters
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
var/piping_layer = PIPING_LAYER_DEFAULT
|
||||
|
||||
/obj/item/pipe_meter/wrench_act(mob/living/user, obj/item/wrench/W)
|
||||
|
||||
/obj/item/pipe_meter/wrench_act(mob/living/user, obj/item/W)
|
||||
if(!W.tool_behaviour == TOOL_WRENCH)
|
||||
return
|
||||
var/obj/machinery/atmospherics/pipe/pipe
|
||||
for(var/obj/machinery/atmospherics/pipe/P in loc)
|
||||
if(P.piping_layer == piping_layer)
|
||||
|
||||
@@ -283,9 +283,9 @@
|
||||
|
||||
/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, params)
|
||||
if(stat & BROKEN)
|
||||
if(istype(I, /obj/item/crowbar))
|
||||
//If the turret is destroyed, you can remove it with a crowbar to
|
||||
//try and salvage its components
|
||||
if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
//If the turret is destroyed, you can remove it with something
|
||||
//that acts like a crowbar to try and salvage its components
|
||||
to_chat(user, "<span class='notice'>You begin prying the metal coverings off...</span>")
|
||||
if(I.use_tool(src, user, 20))
|
||||
if(prob(70))
|
||||
@@ -302,7 +302,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
else if((istype(I, /obj/item/wrench)) && (!on))
|
||||
else if((I.tool_behaviour == TOOL_WRENCH) && (!on))
|
||||
if(raised)
|
||||
return
|
||||
|
||||
@@ -329,12 +329,11 @@
|
||||
to_chat(user, "<span class='notice'>Controls are now [locked ? "locked" : "unlocked"].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Access denied.</span>")
|
||||
else if(istype(I, /obj/item/multitool) && !locked)
|
||||
else if(I.tool_behaviour == TOOL_MULTITOOL && !locked)
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
to_chat(user, "<span class='notice'>You add [src] to multitool buffer.</span>")
|
||||
I.buffer = src
|
||||
to_chat(user, "<span class='notice'>You add [src] to [I]'s buffer.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -393,6 +392,27 @@
|
||||
spark_system.start() //creates some sparks because they look cool
|
||||
qdel(cover) //deletes the cover - no need on keeping it there!
|
||||
|
||||
//turret healing
|
||||
/obj/machinery/porta_turret/examine(mob/user)
|
||||
. = ..()
|
||||
if(obj_integrity < max_integrity)
|
||||
. += "<span class='notice'>[src] is damaged, use a lit welder to fix it.</span>"
|
||||
|
||||
/obj/machinery/porta_turret/welder_act(mob/living/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(cover && obj_integrity < max_integrity)
|
||||
if(!I.tool_start_check(user, amount=0))
|
||||
return
|
||||
user.visible_message("[user] is welding the turret.", \
|
||||
"<span class='notice'>You begin repairing the turret...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
if(I.use_tool(src, user, 40, volume=50))
|
||||
obj_integrity = max_integrity
|
||||
user.visible_message("[user.name] has repaired [src].", \
|
||||
"<span class='notice'>You finish repairing the turret.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The turret doesn't need repairing.</span>")
|
||||
|
||||
/obj/machinery/porta_turret/process()
|
||||
//the main machinery process
|
||||
if(cover == null && anchored) //if it has no cover and is anchored
|
||||
@@ -927,20 +947,19 @@
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
|
||||
if (istype(I, /obj/item/multitool))
|
||||
if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
if(M.buffer && istype(M.buffer, /obj/machinery/porta_turret))
|
||||
turrets |= M.buffer
|
||||
to_chat(user, "<span class='notice'>You link \the [M.buffer] with \the [src].</span>")
|
||||
if(I.buffer && istype(I.buffer, /obj/machinery/porta_turret))
|
||||
turrets |= I.buffer
|
||||
to_chat(user, "<span class='notice'>You link \the [I.buffer] with \the [src].</span>")
|
||||
return
|
||||
|
||||
if (issilicon(user))
|
||||
if(issilicon(user))
|
||||
return attack_hand(user)
|
||||
|
||||
if ( get_dist(src, user) == 0 ) // trying to unlock the interface
|
||||
if (allowed(usr))
|
||||
if(get_dist(src, user) == 0 ) // trying to unlock the interface
|
||||
if(allowed(usr))
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<span class='warning'>The turret control is unresponsive!</span>")
|
||||
return
|
||||
|
||||
@@ -23,14 +23,14 @@
|
||||
//this is a bit unwieldy but self-explanatory
|
||||
switch(build_step)
|
||||
if(PTURRET_UNSECURED) //first step
|
||||
if(istype(I, /obj/item/wrench) && !anchored)
|
||||
if(I.tool_behaviour == TOOL_WRENCH && !anchored)
|
||||
I.play_tool_sound(src, 100)
|
||||
to_chat(user, "<span class='notice'>You secure the external bolts.</span>")
|
||||
setAnchored(TRUE)
|
||||
build_step = PTURRET_BOLTED
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/crowbar) && !anchored)
|
||||
else if(I.tool_behaviour == TOOL_CROWBAR && !anchored)
|
||||
I.play_tool_sound(src, 75)
|
||||
to_chat(user, "<span class='notice'>You dismantle the turret construction.</span>")
|
||||
new /obj/item/stack/sheet/metal( loc, 5)
|
||||
@@ -48,7 +48,7 @@
|
||||
to_chat(user, "<span class='warning'>You need two sheets of metal to continue construction!</span>")
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/wrench))
|
||||
else if(I.tool_behaviour == TOOL_WRENCH)
|
||||
I.play_tool_sound(src, 75)
|
||||
to_chat(user, "<span class='notice'>You unfasten the external bolts.</span>")
|
||||
setAnchored(FALSE)
|
||||
@@ -57,13 +57,13 @@
|
||||
|
||||
|
||||
if(PTURRET_START_INTERNAL_ARMOUR)
|
||||
if(istype(I, /obj/item/wrench))
|
||||
if(I.tool_behaviour == TOOL_WRENCH)
|
||||
I.play_tool_sound(src, 100)
|
||||
to_chat(user, "<span class='notice'>You bolt the metal armor into place.</span>")
|
||||
build_step = PTURRET_INTERNAL_ARMOUR_ON
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/weldingtool))
|
||||
else if(I.tool_behaviour == TOOL_WELDER)
|
||||
if(!I.tool_start_check(user, amount=5)) //uses up 5 fuel
|
||||
return
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
build_step = PTURRET_GUN_EQUIPPED
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/wrench))
|
||||
else if(I.tool_behaviour == TOOL_WRENCH)
|
||||
I.play_tool_sound(src, 100)
|
||||
to_chat(user, "<span class='notice'>You remove the turret's metal armor bolts.</span>")
|
||||
build_step = PTURRET_START_INTERNAL_ARMOUR
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
|
||||
if(PTURRET_SENSORS_ON)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
I.play_tool_sound(src, 100)
|
||||
build_step = PTURRET_CLOSED
|
||||
to_chat(user, "<span class='notice'>You close the internal access hatch.</span>")
|
||||
@@ -123,14 +123,14 @@
|
||||
to_chat(user, "<span class='warning'>You need two sheets of metal to continue construction!</span>")
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/screwdriver))
|
||||
else if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
I.play_tool_sound(src, 100)
|
||||
build_step = PTURRET_SENSORS_ON
|
||||
to_chat(user, "<span class='notice'>You open the internal access hatch.</span>")
|
||||
return
|
||||
|
||||
if(PTURRET_START_EXTERNAL_ARMOUR)
|
||||
if(istype(I, /obj/item/weldingtool))
|
||||
if(I.tool_behaviour == TOOL_WELDER)
|
||||
if(!I.tool_start_check(user, amount=5))
|
||||
return
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/crowbar))
|
||||
else if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
I.play_tool_sound(src, 75)
|
||||
to_chat(user, "<span class='notice'>You pry off the turret's exterior armor.</span>")
|
||||
new /obj/item/stack/sheet/metal(loc, 2)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
|
||||
/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/wrench) && !parent_turret.on)
|
||||
if(I.tool_behaviour == TOOL_WRENCH && !parent_turret.on)
|
||||
if(parent_turret.raised)
|
||||
return
|
||||
|
||||
@@ -60,10 +60,9 @@
|
||||
updateUsrDialog()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Access denied.</span>")
|
||||
else if(istype(I, /obj/item/multitool) && !parent_turret.locked)
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = parent_turret
|
||||
to_chat(user, "<span class='notice'>You add [parent_turret] to multitool buffer.</span>")
|
||||
else if(I.tool_behaviour == TOOL_MULTITOOL && !parent_turret.locked)
|
||||
I.buffer = parent_turret
|
||||
to_chat(user, "<span class='notice'>You add [parent_turret] to [I]'s buffer.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
switch(stat)
|
||||
if(1)
|
||||
// Stat 1
|
||||
if(istype(W, /obj/item/weldingtool))
|
||||
if(W.tool_behaviour == TOOL_WELDER)
|
||||
if(weld(W, user))
|
||||
to_chat(user, "<span class='notice'>You weld the fan assembly securely into place.</span>")
|
||||
setAnchored(TRUE)
|
||||
@@ -46,7 +46,7 @@
|
||||
forceMove(F)
|
||||
F.setDir(src.dir)
|
||||
return
|
||||
else if(istype(W, /obj/item/weldingtool))
|
||||
else if(W.tool_behaviour == TOOL_WELDER)
|
||||
if(weld(W, user))
|
||||
to_chat(user, "<span class='notice'>You unweld the fan assembly from its place.</span>")
|
||||
stat = 1
|
||||
@@ -64,7 +64,9 @@
|
||||
deconstruct()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/fan_assembly/proc/weld(obj/item/weldingtool/W, mob/living/user)
|
||||
/obj/machinery/fan_assembly/proc/weld(obj/item/W, mob/living/user)
|
||||
if(!W.tool_behaviour == TOOL_WELDER)
|
||||
return
|
||||
if(!W.tool_start_check(user, amount=0))
|
||||
return FALSE
|
||||
switch(stat)
|
||||
|
||||
@@ -55,19 +55,17 @@
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
I.buffer = src
|
||||
to_chat(user, "<span class='notice'>You save the data in [I]'s buffer. It can now be saved to pads with closed panels.</span>")
|
||||
return TRUE
|
||||
else if(istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = I
|
||||
if(istype(M.buffer, /obj/machinery/quantumpad))
|
||||
if(M.buffer == src)
|
||||
else if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
if(istype(I.buffer, /obj/machinery/quantumpad))
|
||||
if(I.buffer == src)
|
||||
to_chat(user, "<span class='warning'>You cannot link a pad to itself!</span>")
|
||||
return TRUE
|
||||
else
|
||||
linked_pad = M.buffer
|
||||
linked_pad = I.buffer
|
||||
to_chat(user, "<span class='notice'>You link [src] to the one in [I]'s buffer.</span>")
|
||||
return TRUE
|
||||
else
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
setCharging()
|
||||
|
||||
/obj/machinery/recharger/attackby(obj/item/G, mob/user, params)
|
||||
if(istype(G, /obj/item/wrench))
|
||||
if(G.tool_behaviour == TOOL_WRENCH)
|
||||
if(charging)
|
||||
to_chat(user, "<span class='notice'>Remove the charging item first!</span>")
|
||||
return
|
||||
@@ -102,7 +102,7 @@
|
||||
if(default_deconstruction_screwdriver(user, "rechargeropen", "recharger0", G))
|
||||
return
|
||||
|
||||
if(panel_open && istype(G, /obj/item/crowbar))
|
||||
if(panel_open && G.tool_behaviour == TOOL_CROWBAR)
|
||||
default_deconstruction_crowbar(G)
|
||||
return
|
||||
|
||||
|
||||
@@ -502,7 +502,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
|
||||
messages += "<b>From:</b> [linkedsender]<br>[message]"
|
||||
|
||||
/obj/machinery/requests_console/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/crowbar))
|
||||
if(O.tool_behaviour == TOOL_CROWBAR)
|
||||
if(open)
|
||||
to_chat(user, "<span class='notice'>You close the maintenance panel.</span>")
|
||||
open = FALSE
|
||||
@@ -511,7 +511,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
|
||||
open = TRUE
|
||||
update_icon()
|
||||
return
|
||||
if(istype(O, /obj/item/screwdriver))
|
||||
if(O.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
if(open)
|
||||
hackState = !hackState
|
||||
if(hackState)
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
W.play_tool_sound(src, 100)
|
||||
panel_open = !panel_open
|
||||
if(panel_open)
|
||||
@@ -165,7 +165,7 @@
|
||||
to_chat(user, "<span class='notice'>You repair \the [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(istype(W, /obj/item/wrench))
|
||||
else if(W.tool_behaviour == TOOL_WRENCH)
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>The bolts are covered! Unlocking this would retract the covers.</span>")
|
||||
return
|
||||
@@ -343,7 +343,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwallgen/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
if(W.tool_behaviour == TOOL_WRENCH)
|
||||
default_unfasten_wrench(user, W, 0)
|
||||
|
||||
else if(W.GetID())
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The hatch must be open to insert a power cell!</span>")
|
||||
return
|
||||
else if(istype(I, /obj/item/screwdriver))
|
||||
else if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
panel_open = !panel_open
|
||||
user.visible_message("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src].", "<span class='notice'>You [panel_open ? "open" : "close"] the hatch on \the [src].</span>")
|
||||
update_icon()
|
||||
|
||||
@@ -75,7 +75,7 @@ GLOBAL_VAR_INIT(singularity_counter, 0)
|
||||
to_chat(user, "<span class='warning'>You need to screw the beacon to the floor first!</span>")
|
||||
|
||||
/obj/machinery/power/singularity_beacon/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
if(active)
|
||||
to_chat(user, "<span class='warning'>You need to deactivate the beacon first!</span>")
|
||||
return
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
. = timer_set
|
||||
|
||||
/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/wrench) && can_unanchor)
|
||||
if(I.tool_behaviour == TOOL_WRENCH && can_unanchor)
|
||||
if(!anchored)
|
||||
if(!isturf(loc) || isspaceturf(loc))
|
||||
to_chat(user, "<span class='notice'>The bomb must be placed on solid ground to attach it.</span>")
|
||||
@@ -130,7 +130,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The bolts are locked down!</span>")
|
||||
|
||||
else if(istype(I, /obj/item/screwdriver))
|
||||
else if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
open_panel = !open_panel
|
||||
update_icon()
|
||||
to_chat(user, "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>")
|
||||
@@ -138,7 +138,7 @@
|
||||
else if(is_wire_tool(I) && open_panel)
|
||||
wires.interact(user)
|
||||
|
||||
else if(istype(I, /obj/item/crowbar))
|
||||
else if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
if(open_panel && wires.is_all_cut())
|
||||
if(payload)
|
||||
to_chat(user, "<span class='notice'>You carefully pry out [payload].</span>")
|
||||
@@ -158,7 +158,7 @@
|
||||
to_chat(user, "<span class='notice'>You place [payload] into [src].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[payload] is already loaded into [src]! You'll have to remove it first.</span>")
|
||||
else if(istype(I, /obj/item/weldingtool))
|
||||
else if(I.tool_behaviour == TOOL_WELDER)
|
||||
if(payload || !wires.is_all_cut() || !open_panel)
|
||||
return
|
||||
|
||||
@@ -436,7 +436,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/crowbar) && beakers.len > 0)
|
||||
if(I.tool_behaviour == TOOL_CROWBAR && beakers.len > 0)
|
||||
I.play_tool_sound(src)
|
||||
for (var/obj/item/B in beakers)
|
||||
B.forceMove(drop_location())
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
ref = REF(pda)
|
||||
)
|
||||
data_out["message_logs"] += list(data)
|
||||
|
||||
|
||||
return data_out
|
||||
|
||||
/obj/machinery/computer/message_monitor/ui_data(mob/user)
|
||||
@@ -119,7 +119,7 @@
|
||||
if(!linkedServer)
|
||||
data_out["selected"] = null
|
||||
return data_out
|
||||
|
||||
|
||||
data_out["selected"] = list(
|
||||
name = linkedServer.name,
|
||||
id = linkedServer.id,
|
||||
@@ -156,7 +156,7 @@
|
||||
if(LAZYLEN(machinelist) > 0)
|
||||
message = "FAILED: Cannot probe when buffer full"
|
||||
return
|
||||
|
||||
|
||||
for(var/obj/machinery/telecomms/message_server/T in GLOB.telecomms_list)
|
||||
if(T.network == network)
|
||||
LAZYADD(machinelist, T)
|
||||
@@ -206,7 +206,7 @@
|
||||
message = "NOTICE: Decryption key set."
|
||||
return
|
||||
message = incorrectkey
|
||||
|
||||
|
||||
if("hack")
|
||||
if(!(linkedServer.on && (linkedServer.toggled != FALSE)))
|
||||
message = noserver
|
||||
@@ -225,7 +225,7 @@
|
||||
else if(!(linkedServer.on && (linkedServer.toggled != FALSE)))
|
||||
message = noserver
|
||||
return
|
||||
|
||||
|
||||
var/datum/data_ref = locate(params["ref"])
|
||||
if(istype(data_ref, /datum/data_rc_msg))
|
||||
LAZYREMOVE(linkedServer.rc_msgs, data_ref)
|
||||
@@ -258,7 +258,7 @@
|
||||
else if(!(linkedServer.on && (linkedServer.toggled != FALSE)))
|
||||
message = noserver
|
||||
return
|
||||
|
||||
|
||||
if("reset" in params)
|
||||
ResetMessage()
|
||||
return
|
||||
@@ -311,7 +311,7 @@
|
||||
return
|
||||
custommessage = M
|
||||
return
|
||||
|
||||
|
||||
if("recepient" in params)
|
||||
// Get out list of viable PDAs
|
||||
var/list/obj/item/pda/sendPDAs = get_viewable_pdas()
|
||||
@@ -324,8 +324,8 @@
|
||||
update_static_data(usr)
|
||||
|
||||
/obj/machinery/computer/message_monitor/attackby(obj/item/O, mob/living/user, params)
|
||||
if(istype(O, /obj/item/screwdriver) && CHECK_BITFIELD(obj_flags, EMAGGED))
|
||||
//Stops people from just unscrewing the monitor and putting it back to get the console working again.
|
||||
if(O.tool_behaviour == TOOL_SCREWDRIVER && CHECK_BITFIELD(obj_flags, EMAGGED))
|
||||
//Stops people from just unscrewing the monitor and putting it back to get the console working again.
|
||||
//Why this though, you should make it emag to a board level. (i wont do it)
|
||||
to_chat(user, "<span class='warning'>It is too hot to mess with!</span>")
|
||||
else
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
/obj/machinery/telecomms/attackby(obj/item/P, mob/user, params)
|
||||
var/icon_closed = initial(icon_state)
|
||||
var/icon_open = "[initial(icon_state)]_o"
|
||||
|
||||
|
||||
if(!on)
|
||||
icon_closed = "[initial(icon_state)]_off"
|
||||
icon_open = "[initial(icon_state)]_o_off"
|
||||
@@ -19,7 +19,7 @@
|
||||
if(default_deconstruction_screwdriver(user, icon_open, icon_closed, P))
|
||||
return
|
||||
// Using a multitool lets you access the receiver's interface
|
||||
else if(istype(P, /obj/item/multitool))
|
||||
else if(P.tool_behaviour == TOOL_MULTITOOL)
|
||||
attack_hand(user)
|
||||
|
||||
else if(default_deconstruction_crowbar(P))
|
||||
@@ -42,7 +42,7 @@
|
||||
. = list() //cpypaste from the vending bus
|
||||
.["notice"] = temp
|
||||
.["multitool"] = FALSE
|
||||
var/obj/item/multitool/P = get_multitool(user)
|
||||
var/obj/item/P = get_multitool(user)
|
||||
if(P)
|
||||
.["multitool"] = TRUE
|
||||
.["multitool_buf"] = null //to clean the list!
|
||||
@@ -113,7 +113,7 @@
|
||||
if("network" in params)
|
||||
if(!canAccess(usr))
|
||||
return
|
||||
var/newnet = sanitize(sanitize_text(params["network"], network))
|
||||
var/newnet = sanitize(sanitize_text(params["network"], network))
|
||||
if(length(newnet) > 15)
|
||||
temp = "-% Too many characters in new network tag. %-"
|
||||
return
|
||||
@@ -122,19 +122,19 @@
|
||||
temp = "-% New network tag assigned: \"[network]\" %-"
|
||||
return
|
||||
if("multitool")
|
||||
var/obj/item/multitool/P = get_multitool(usr)
|
||||
var/obj/item/P = get_multitool(usr)
|
||||
if("Link" in params)
|
||||
if(!canAccess(usr))
|
||||
return
|
||||
if(!istype(P))
|
||||
if(!P.tool_behaviour == TOOL_MULTITOOL)
|
||||
temp = "-% Unable to acquire buffer %-"
|
||||
return
|
||||
|
||||
|
||||
var/obj/machinery/telecomms/T = P.buffer
|
||||
if(!istype(T) || T == src)
|
||||
temp = "-% Unable to acquire buffer %-"
|
||||
return
|
||||
|
||||
|
||||
if(!(src in T.links))
|
||||
LAZYADD(T.links, src)
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
return
|
||||
|
||||
P.buffer = src
|
||||
temp = "% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-"
|
||||
temp = "% Successfully stored [REF(P.buffer)] [P.buffer] in buffer %-"
|
||||
|
||||
if("unlink")
|
||||
var/obj/machinery/telecomms/T = locate(params["value"])
|
||||
@@ -167,7 +167,7 @@
|
||||
if(!istype(T))
|
||||
temp = "-% Unable to locate machine to unlink from, try again. %-"
|
||||
return
|
||||
|
||||
|
||||
temp = "-% Removed [REF(T)] [T.name] from linked entities. %-"
|
||||
if(T.links) //lazyrem makes blank list null, which is good but some might cause runtime ee's
|
||||
T.links.Remove(src)
|
||||
@@ -198,7 +198,7 @@
|
||||
var/x = text2num(params["remove"])
|
||||
temp = "-% Removed frequency filter [x] %-"
|
||||
freq_listening.Remove(x)
|
||||
|
||||
|
||||
/obj/machinery/telecomms/relay/ui_act(action, params)
|
||||
..()
|
||||
switch(action)
|
||||
@@ -243,7 +243,11 @@
|
||||
|
||||
// Check if the user can use it.
|
||||
/obj/machinery/telecomms/proc/canInteract(mob/user)
|
||||
if(hasSiliconAccessInArea(user) || istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
var/get = user.get_active_held_item()
|
||||
var/obj/item/I = get
|
||||
if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
return TRUE
|
||||
if(hasSiliconAccessInArea(user))
|
||||
return TRUE
|
||||
return FALSE
|
||||
// Check if the user is nearby and has a multitool.
|
||||
@@ -256,14 +260,16 @@
|
||||
/obj/machinery/telecomms/proc/get_multitool(mob/user)
|
||||
if(!canInteract(user))
|
||||
return null
|
||||
var/obj/item/multitool/P = user.get_active_held_item()
|
||||
var/obj/item/P = user.get_active_held_item()
|
||||
// Is the ref not a null? and is it the actual type?
|
||||
if(istype(P))
|
||||
if(P.tool_behaviour == TOOL_MULTITOOL)
|
||||
return P
|
||||
else if(isAI(user))
|
||||
var/mob/living/silicon/ai/U = user
|
||||
P = U.aiMulti
|
||||
else if(iscyborg(user) && in_range(user, src))
|
||||
if(istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
P = user.get_active_held_item()
|
||||
var/get = user.get_active_held_item()
|
||||
var/obj/item/I = get
|
||||
if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
I = user.get_active_held_item()
|
||||
return P
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user