Merge remote-tracking branch 'refs/remotes/Citadel-Station-13/master' into syntheticbloods

This commit is contained in:
Poojawa
2019-05-22 00:08:13 -05:00
162 changed files with 3723 additions and 1050 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
FROM tgstation/byond:512.1463 as base
FROM tgstation/byond:512.1467 as base
FROM base as build_base
+139 -53
View File
@@ -250,7 +250,9 @@
/obj/machinery/light{
dir = 4
},
/obj/machinery/cryopod,
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel,
/area/security/prison)
"aaH" = (
@@ -319,6 +321,10 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/machinery/computer/cryopod{
dir = 8;
pixel_x = 26
},
/turf/open/floor/plasteel/cafeteria,
/area/security/prison)
"aaQ" = (
@@ -12182,11 +12188,12 @@
/obj/machinery/airalarm{
pixel_y = 23
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
/obj/machinery/cryopod,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
/area/crew_quarters/cryopod)
"aCe" = (
/obj/effect/landmark/xeno_spawn,
/obj/item/bikehorn/rubberducky,
@@ -12822,6 +12829,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/machinery/camera{
c_tag = "Dormitory South";
dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aDH" = (
@@ -12846,11 +12857,16 @@
/turf/closed/wall/r_wall,
/area/ai_monitored/storage/eva)
"aDK" = (
/obj/machinery/door/airlock{
name = "Cryo airlock"
/obj/machinery/door/airlock/public/glass{
name = "Cryogenics "
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/machinery/door/firedoor,
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
/area/crew_quarters/cryopod)
"aDL" = (
/obj/structure/sink{
dir = 8;
@@ -12865,6 +12881,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
"aDM" = (
@@ -12894,7 +12913,7 @@
"aDQ" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/structure/cable{
icon_state = "2-4"
icon_state = "4-8"
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
@@ -13386,13 +13405,12 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aFe" = (
/obj/machinery/camera{
c_tag = "Dormitory South";
dir = 4
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
@@ -13402,12 +13420,21 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aFf" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
"aFg" = (
@@ -13423,6 +13450,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
"aFi" = (
@@ -13435,7 +13465,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/cable,
/obj/structure/cable{
icon_state = "0-8"
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
"aFj" = (
@@ -56571,16 +56603,31 @@
/obj/structure/reagent_dispensers/keg/gargle,
/turf/open/floor/wood,
/area/maintenance/bar)
"dgz" = (
/turf/closed/wall,
/area/crew_quarters/cryopod)
"dqu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"dvc" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"dvO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
/turf/closed/wall,
/area/science/circuit)
"dzi" = (
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"dKP" = (
/turf/closed/wall,
/area/maintenance/bar)
@@ -56625,6 +56672,11 @@
/obj/structure/grille,
/turf/open/space/basic,
/area/space/nearstation)
"eVC" = (
/obj/effect/spawner/structure/window,
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
"eVL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/light_switch{
@@ -56664,8 +56716,14 @@
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"fvY" = (
/obj/machinery/computer/cryopod{
pixel_y = 26
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
/area/crew_quarters/cryopod)
"fxa" = (
/obj/structure/chair/wood/normal,
/turf/open/floor/wood{
@@ -56696,6 +56754,12 @@
/obj/item/stack/sheet/glass/fifty,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"gfD" = (
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"gjl" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
@@ -56835,6 +56899,14 @@
/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
"iVU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/spawner/structure/window,
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
"jbf" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -57233,11 +57305,8 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/machinery/computer/cryopod{
pixel_y = -30
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
/area/crew_quarters/cryopod)
"rcD" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -57392,15 +57461,15 @@
},
/area/maintenance/bar)
"tqg" = (
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/cryopod{
icon_state = "cryopod-open";
dir = 1
dir = 4
},
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
/area/crew_quarters/cryopod)
"trb" = (
/obj/machinery/light{
dir = 4
@@ -57471,15 +57540,11 @@
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"ujF" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
/obj/machinery/cryopod{
dir = 4
},
/obj/machinery/cryopod{
icon_state = "cryopod-open";
dir = 1
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
/area/crew_quarters/cryopod)
"uoB" = (
/obj/structure/table/reinforced,
/obj/item/multitool,
@@ -57567,6 +57632,11 @@
/obj/machinery/meter,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"vsM" = (
/obj/machinery/power/apc/auto_name/south,
/obj/structure/cable,
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"vxh" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -57599,6 +57669,16 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
/area/science/circuit)
"vHj" = (
/obj/machinery/door/airlock/public/glass{
name = "Cryogenics "
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/crew_quarters/cryopod)
"vHY" = (
/turf/open/floor/plating,
/area/science/mixing)
@@ -57616,6 +57696,12 @@
"wkN" = (
/turf/closed/wall,
/area/science/circuit)
"woR" = (
/obj/machinery/cryopod{
dir = 1
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"wph" = (
/obj/docking_port/stationary{
area_type = /area/construction/mining/aux_base;
@@ -87629,12 +87715,12 @@ arf
arf
arf
arf
arf
arf
arf
arf
anF
ahn
dgz
dgz
dgz
dgz
dgz
dgz
aJn
aJn
aJq
@@ -87886,12 +87972,12 @@ atf
arf
aqa
atf
arf
dgz
tqg
ujF
arf
anF
ahn
ujF
ujF
dgz
aaa
aJn
aJq
@@ -88143,12 +88229,12 @@ ath
arf
apY
ath
arf
dgz
fvY
ath
arf
anF
ahn
dvc
dzi
vsM
dgz
aaa
aJn
aLY
@@ -88400,12 +88486,12 @@ ath
arf
ayV
ath
arf
dgz
aCd
qIw
arf
anF
ahn
gfD
woR
dgz
aJw
aJw
aMh
@@ -88657,12 +88743,12 @@ awo
arf
asd
aAb
arf
asd
dgz
iVU
aDK
arf
aoa
ahn
vHj
eVC
dgz
aJv
aKG
aMg
+37 -56
View File
@@ -18876,6 +18876,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/machinery/computer/cryopod{
pixel_y = 26
},
/turf/open/floor/plasteel,
/area/security/prison)
"aMm" = (
@@ -74297,6 +74300,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/machinery/computer/cryopod{
dir = 8;
pixel_x = 26
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"cuC" = (
@@ -75916,10 +75923,6 @@
/obj/machinery/light{
dir = 4
},
/obj/machinery/computer/cryopod{
pixel_x = 30
},
/obj/machinery/cryopod,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -75930,6 +75933,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cxs" = (
@@ -76886,7 +76892,6 @@
/obj/machinery/status_display{
pixel_x = 32
},
/obj/machinery/cryopod,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -76897,6 +76902,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cyX" = (
@@ -77710,6 +77718,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/closet/wardrobe/white,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -78713,6 +78722,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/closet/wardrobe/mixed,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -78880,7 +78890,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/closet/wardrobe/mixed,
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cCc" = (
@@ -79859,20 +79871,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"cDB" = (
/obj/structure/closet/wardrobe/white,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cDC" = (
/obj/effect/decal/cleanable/blood/old,
/obj/effect/decal/cleanable/dirt{
@@ -80973,20 +80971,6 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"cFv" = (
/obj/structure/closet/wardrobe/grey,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cFw" = (
/obj/item/clipboard{
pixel_x = -4;
@@ -81692,7 +81676,6 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cGM" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -81703,6 +81686,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/closet/wardrobe/grey,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cGN" = (
@@ -81738,9 +81722,6 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cGP" = (
/obj/structure/table,
/obj/item/paper_bin,
/obj/item/pen,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -81751,6 +81732,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/closet/wardrobe/black,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cGQ" = (
@@ -81785,20 +81767,6 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cGS" = (
/obj/structure/closet/wardrobe/black,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"cGT" = (
/obj/machinery/button/door{
id = "Dorm1";
@@ -127461,6 +127429,19 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"xKS" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"xMn" = (
/obj/structure/disposalpipe/trunk,
/obj/machinery/disposal/bin,
@@ -177002,7 +176983,7 @@ cAu
cBZ
cDA
cFt
cGM
xKS
cxi
cJg
cKV
@@ -177514,9 +177495,9 @@ cxr
cyW
cqd
cCb
cDB
cFv
cGS
cCb
cCb
cCb
cqd
cJi
cKX
+262 -82
View File
@@ -911,7 +911,9 @@
dir = 8;
pixel_x = 24
},
/obj/machinery/cryopod,
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel,
/area/security/prison)
"acy" = (
@@ -1090,6 +1092,10 @@
pixel_y = 7
},
/obj/item/pen,
/obj/machinery/computer/cryopod{
dir = 8;
pixel_x = 26
},
/turf/open/floor/plasteel,
/area/security/prison)
"acN" = (
@@ -2682,10 +2688,13 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"afv" = (
/obj/structure/easel,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"afw" = (
@@ -2714,6 +2723,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"afy" = (
@@ -3276,6 +3286,7 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"agx" = (
@@ -3720,6 +3731,7 @@
"ahj" = (
/obj/structure/chair,
/obj/effect/landmark/start/assistant,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"ahk" = (
@@ -5184,9 +5196,7 @@
/obj/structure/chair/stool{
pixel_y = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"ajS" = (
@@ -5974,10 +5984,6 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"alf" = (
/obj/machinery/cryopod{
icon_state = "cryopod-open";
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"alg" = (
@@ -6797,23 +6803,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
"amv" = (
/obj/machinery/cryopod{
icon_state = "cryopod-open";
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"amw" = (
/obj/structure/window/reinforced,
/obj/machinery/door/window/eastright{
@@ -6826,11 +6815,16 @@
/area/crew_quarters/fitness/recreation)
"amx" = (
/obj/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"amy" = (
/obj/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"amz" = (
@@ -80731,9 +80725,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
/obj/machinery/computer/cryopod{
pixel_x = -30
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"dhq" = (
@@ -83268,6 +83259,12 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
"eHn" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
"eZe" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -83281,6 +83278,19 @@
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
/area/engine/engineering)
"fpY" = (
/turf/closed/wall,
/area/crew_quarters/cryopod)
"fzR" = (
/obj/machinery/door/airlock{
name = "Cryogenics"
},
/obj/machinery/door/firedoor,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"fDD" = (
/obj/machinery/light_switch{
pixel_y = -25
@@ -83302,6 +83312,12 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
"gde" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"gnZ" = (
/obj/item/radio/intercom{
pixel_y = -30
@@ -83321,6 +83337,18 @@
/obj/item/clothing/suit/apron/chef,
/turf/open/floor/plating,
/area/maintenance/port/aft)
"gqO" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/structure/cable/yellow{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"gra" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -83415,6 +83443,12 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/science/circuit)
"ivu" = (
/obj/structure/cable/yellow{
icon_state = "2-4"
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"izu" = (
/obj/machinery/autolathe{
name = "public autolathe"
@@ -83452,6 +83486,13 @@
},
/turf/open/floor/plating,
/area/quartermaster/storage)
"jfW" = (
/obj/structure/window/reinforced{
dir = 1
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"jwW" = (
/turf/closed/wall/mineral/plastitanium,
/area/crew_quarters/fitness/recreation)
@@ -83609,6 +83650,12 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
"lzG" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"lGS" = (
/obj/docking_port/stationary/public_mining_dock,
/turf/open/floor/plating,
@@ -83643,6 +83690,13 @@
},
/turf/open/floor/plasteel/dark,
/area/tcommsat/server)
"maM" = (
/obj/machinery/cryopod,
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"mjJ" = (
/obj/machinery/nuclearbomb/beer{
pixel_x = 2;
@@ -83650,6 +83704,10 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"mnV" = (
/obj/structure/lattice,
/turf/closed/wall,
/area/crew_quarters/cryopod)
"mvj" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -83666,6 +83724,14 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
"mAU" = (
/obj/machinery/cryopod,
/obj/machinery/camera{
c_tag = "Fitness Room - Fore";
dir = 2
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"mWg" = (
/obj/structure/girder,
/obj/structure/grille,
@@ -83783,6 +83849,13 @@
/obj/structure/sign/poster/official/random,
/turf/closed/wall,
/area/hydroponics)
"oFq" = (
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"oLq" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"oLW" = (
/obj/structure/table/reinforced,
/obj/structure/cable/yellow{
@@ -83819,6 +83892,13 @@
/obj/item/pen,
/turf/open/floor/plasteel/white,
/area/science/circuit)
"oXn" = (
/obj/machinery/computer/cryopod{
dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"oZg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -83868,6 +83948,14 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
"pEv" = (
/obj/machinery/airalarm{
dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"pMX" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -83912,6 +84000,20 @@
},
/turf/open/floor/plasteel,
/area/science/misc_lab)
"qvY" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"qBh" = (
/obj/structure/table,
/obj/item/paicard,
@@ -83935,6 +84037,11 @@
/obj/item/storage/photo_album,
/turf/open/floor/engine/cult,
/area/library)
"qLE" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
"qRM" = (
/obj/machinery/camera{
c_tag = "Research Division Circuitry Lab";
@@ -83952,6 +84059,13 @@
},
/turf/open/floor/wood,
/area/library)
"qXt" = (
/obj/machinery/firealarm{
dir = 8;
pixel_x = -24
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"rzX" = (
/obj/structure/chair/office/light{
dir = 1;
@@ -83998,10 +84112,23 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
"sdw" = (
/turf/open/space/basic,
/area/space/nearstation)
"siF" = (
/obj/structure/grille,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"soh" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"sFv" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -84043,6 +84170,23 @@
"sJW" = (
/turf/closed/wall/mineral/plastitanium,
/area/engine/break_room)
"sME" = (
/obj/machinery/light{
dir = 8
},
/obj/machinery/cryopod,
/obj/machinery/light_switch{
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"tap" = (
/obj/machinery/power/apc/auto_name/east,
/obj/structure/cable/yellow{
icon_state = "0-8"
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"tsx" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -84091,6 +84235,10 @@
/obj/machinery/air_sensor/atmos/toxins_mixing_tank,
/turf/open/floor/engine/vacuum,
/area/science/mixing)
"ugc" = (
/obj/machinery/cryopod,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"upN" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -84182,6 +84330,23 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"vxG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"vyx" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -84193,6 +84358,11 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space)
"wdu" = (
/obj/structure/grille,
/obj/structure/lattice,
/turf/open/floor/plating,
/area/space/nearstation)
"wgw" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
@@ -84221,6 +84391,12 @@
},
/turf/open/floor/plating,
/area/engine/atmos)
"wzH" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
"wFH" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -84254,6 +84430,10 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/misc_lab)
"xeC" = (
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"xkG" = (
/obj/item/integrated_electronics/wirer,
/obj/structure/table/reinforced,
@@ -119110,11 +119290,11 @@ aaa
aaa
aaa
aai
aaa
aaa
aaf
aaa
acP
fpY
fpY
mnV
fpY
fpY
acP
ags
acP
@@ -119122,7 +119302,7 @@ acP
acP
acP
alf
amv
afA
acP
aoS
acP
@@ -119367,11 +119547,11 @@ aaa
aaa
aaa
aag
aaa
aaa
aaf
aaa
acQ
fpY
sME
oXn
qXt
qLE
aft
agt
ahf
@@ -119623,17 +119803,17 @@ aaa
aaa
aaa
aaa
aag
aaa
aaa
aaf
aaa
acQ
wdu
qLE
ugc
oFq
oLq
wzH
afu
agu
ahg
ahg
ahg
soh
aiX
aiX
aiX
ajR
ahg
ahg
@@ -119881,13 +120061,13 @@ aaa
aaa
aaa
aag
aaa
aaa
aaf
aaa
acQ
fpY
ugc
ivu
gde
fzR
afv
agu
gqO
ahh
ahh
aiR
@@ -120138,11 +120318,11 @@ aaa
aaa
aaa
aai
aaa
aaa
aaf
aaf
acP
fpY
mAU
lzG
xeC
fpY
acP
agv
ahh
@@ -120395,11 +120575,11 @@ aaa
aaa
aaa
aag
aaa
aaa
aaf
aaa
acQ
fpY
ugc
lzG
oFq
qLE
afw
agu
ahi
@@ -120652,18 +120832,18 @@ aaa
aaa
aaa
aag
aaa
aaa
aaf
aaa
acQ
qLE
maM
tap
pEv
eHn
afx
agw
ahj
ahX
afA
ajU
afA
jfW
qvY
vxG
qvY
amy
anI
aoX
@@ -120909,11 +121089,11 @@ aaa
aaa
aaf
aai
aaf
aaf
aaf
aaa
acQ
fpY
fpY
fpY
fpY
fpY
afy
agx
ahk
@@ -121168,7 +121348,7 @@ aaf
aaa
aaa
aaa
aaf
sdw
aaa
acP
acP
+15 -2
View File
@@ -2639,6 +2639,13 @@
},
/turf/open/indestructible/boss,
/area/lavaland/surface/outdoors)
"il" = (
/obj/machinery/computer/cryopod{
dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"ir" = (
/obj/structure/stone_tile/slab/cracked{
dir = 5
@@ -3534,6 +3541,12 @@
},
/turf/open/indestructible/boss,
/area/lavaland/surface/outdoors)
"Po" = (
/obj/machinery/cryopod{
dir = 4
},
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"Uq" = (
/obj/docking_port/stationary{
area_type = /area/lavaland/surface/outdoors;
@@ -9244,8 +9257,8 @@ ap
ar
ar
aq
az
az
Po
il
az
az
az
+11 -5
View File
@@ -13798,7 +13798,6 @@
/area/crew_quarters/dorms)
"axG" = (
/obj/effect/turf_decal/bot,
/obj/machinery/cryopod,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -13809,6 +13808,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/dorms)
"axH" = (
@@ -16798,6 +16800,7 @@
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aDG" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"aDH" = (
@@ -36561,10 +36564,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bxJ" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/computer/cryopod{
pixel_x = 30
},
/obj/machinery/light{
dir = 4;
light_color = "#e8eaff"
@@ -36573,6 +36572,13 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/machinery/computer/cryopod{
dir = 8;
pixel_x = 26
},
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"bxK" = (
+24 -5
View File
@@ -8707,7 +8707,9 @@
/obj/machinery/computer/cryopod{
pixel_y = 30
},
/obj/machinery/cryopod,
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"avm" = (
@@ -53537,6 +53539,12 @@
/obj/structure/chair/office/dark,
/turf/open/floor/wood,
/area/lawoffice)
"epj" = (
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"epJ" = (
/obj/structure/sign/poster/contraband/random{
pixel_y = 32
@@ -53769,6 +53777,13 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"eSB" = (
/obj/machinery/computer/cryopod{
dir = 1;
pixel_y = -26;
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
"eSL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/item/beacon,
@@ -54140,7 +54155,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/machinery/cryopod,
/obj/machinery/cryopod{
dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"fIN" = (
@@ -55936,7 +55953,9 @@
/turf/open/floor/plating,
/area/maintenance/department/science)
"jXF" = (
/obj/machinery/cryopod,
/obj/machinery/cryopod{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
"jXV" = (
@@ -82772,7 +82791,7 @@ aeU
afo
afG
aeU
aeU
eSB
agy
agL
agZ
@@ -102071,7 +102090,7 @@ apX
apX
avl
fIu
dbi
epj
aIh
azA
dbi
+1
View File
@@ -71,6 +71,7 @@
#define ADMIN_PUNISHMENT_ROD "Immovable Rod"
#define ADMIN_PUNISHMENT_SUPPLYPOD "Supply Pod"
#define ADMIN_PUNISHMENT_MAZING "Puzzle"
#define ADMIN_PUNISHMENT_PIE "Cream Pie"
#define AHELP_ACTIVE 1
#define AHELP_CLOSED 2
+5
View File
@@ -76,6 +76,9 @@
#define MILK_RATE_MULT 1
#define MILK_EFFICIENCY 1
#define AROUSAL_MINIMUM_DEFAULT 0
#define AROUSAL_MAXIMUM_DEFAULT 100
#define AROUSAL_START_VALUE 1
//Individual logging define
#define INDIVIDUAL_LOOC_LOG "LOOC log"
@@ -98,6 +101,8 @@
#define SKINTONE 40 //uses skin tones
//Citadel istypes
#define isgenital(A) (istype(A, /obj/item/organ/genital))
#define isborer(A) (istype(A, /mob/living/simple_animal/borer))
#define isipcperson(A) (is_species(A, /datum/species/ipc))
#define ismammal(A) (is_species(A, /datum/species/mammal))
+3 -3
View File
@@ -28,9 +28,9 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us
#define SCRIPTURE_APPLICATION "Application"
//Various costs related to power.
#define MAX_CLOCKWORK_POWER 50000 //The max power in W that the cult can stockpile
#define SCRIPT_UNLOCK_THRESHOLD 25000 //Scripts will unlock if the total power reaches this amount
#define APPLICATION_UNLOCK_THRESHOLD 40000 //Applications will unlock if the total powre reaches this amount
#define MAX_CLOCKWORK_POWER 80000 //The max power in W that the cult can stockpile
#define SCRIPT_UNLOCK_THRESHOLD 35000 //Scripts will unlock if the total power reaches this amount
#define APPLICATION_UNLOCK_THRESHOLD 50000 //Applications will unlock if the total powre reaches this amount
#define ABSCOND_ABDUCTION_COST 95
+2 -1
View File
@@ -53,4 +53,5 @@
#define COLOR_ASSEMBLY_GREEN "#44843C"
#define COLOR_ASSEMBLY_LBLUE "#5D99BE"
#define COLOR_ASSEMBLY_BLUE "#38559E"
#define COLOR_ASSEMBLY_PURPLE "#6F6192"
#define COLOR_ASSEMBLY_PURPLE "#6F6192"
#define COLOR_ASSEMBLY_PINK "#ff4adc"
+3 -1
View File
@@ -481,4 +481,6 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (istype(I, /client) ? I : (istype(I, /datum/mind) ? I:current?:client : null)))
#define AREASELECT_CORNERA "corner A"
#define AREASELECT_CORNERB "corner B"
#define AREASELECT_CORNERB "corner B"
#define PREF_SAVELOAD_COOLDOWN 5
+1
View File
@@ -70,6 +70,7 @@
#define TRAIT_PHOTOGRAPHER "photographer"
#define TRAIT_MUSICIAN "musician"
#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
#define TRAIT_NYMPHO "nymphomania"
// common trait sources
#define TRAIT_GENERIC "generic"
+5
View File
@@ -12,3 +12,8 @@
/proc/format_frequency(frequency)
frequency = text2num(frequency)
return "[round(frequency / 10)].[frequency % 10]"
//Opposite of format, returns as a number
/proc/unformat_frequency(frequency)
frequency = text2num(frequency)
return frequency * 10
@@ -360,3 +360,7 @@
min_val = 0
/datum/config_entry/flag/disable_stambuffer
/datum/config_entry/number/auto_transfer_delay
config_entry_value = 72000
min_val = 0
@@ -50,17 +50,20 @@ PROCESSING_SUBSYSTEM_DEF(circuit)
/obj/item/electronic_assembly/simple,
/obj/item/electronic_assembly/hook,
/obj/item/electronic_assembly/pda,
/obj/item/electronic_assembly/dildo,
/obj/item/electronic_assembly/small/default,
/obj/item/electronic_assembly/small/cylinder,
/obj/item/electronic_assembly/small/scanner,
/obj/item/electronic_assembly/small/hook,
/obj/item/electronic_assembly/small/box,
/obj/item/electronic_assembly/small/dildo,
/obj/item/electronic_assembly/medium/default,
/obj/item/electronic_assembly/medium/box,
/obj/item/electronic_assembly/medium/clam,
/obj/item/electronic_assembly/medium/medical,
/obj/item/electronic_assembly/medium/gun,
/obj/item/electronic_assembly/medium/radio,
/obj/item/electronic_assembly/medium/dildo,
/obj/item/electronic_assembly/large/default,
/obj/item/electronic_assembly/large/scope,
/obj/item/electronic_assembly/large/terminal,
@@ -89,4 +92,4 @@ PROCESSING_SUBSYSTEM_DEF(circuit)
/obj/item/card/data/full_color,
/obj/item/card/data/disk
)
+1
View File
@@ -76,6 +76,7 @@ SUBSYSTEM_DEF(shuttle)
if(!supply)
WARNING("No /obj/docking_port/mobile/supply placed on the map!")
realtimeofstart = world.realtime
auto_call = CONFIG_GET(number/auto_transfer_delay)
return ..()
/datum/controller/subsystem/shuttle/proc/initial_load()
+32 -10
View File
@@ -14,7 +14,8 @@ SUBSYSTEM_DEF(traumas)
//phobia types is to pull from randomly for brain traumas, e.g. conspiracies is for special assignment only
phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards",
"skeletons", "snakes", "robots", "doctors", "authority", "the supernatural",
"aliens", "strangers", "birds", "falling", "anime", "mimes", "cats"
"aliens", "strangers", "birds", "falling", "anime", "mimes", "cats", "syndicate",
"eye"
)
phobia_words = list("spiders" = strings(PHOBIA_FILE, "spiders"),
@@ -36,7 +37,9 @@ SUBSYSTEM_DEF(traumas)
"falling" = strings(PHOBIA_FILE, "falling"),
"anime" = strings(PHOBIA_FILE, "anime"),
"mimes" = strings(PHOBIA_FILE, "mimes"),
"cats" = strings(PHOBIA_FILE, "cats")
"cats" = strings(PHOBIA_FILE, "cats"),
"syndicate"= strings(PHOBIA_FILE, "syndicate"),
"eye" = strings(PHOBIA_FILE, "eye")
)
phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)),
@@ -56,7 +59,9 @@ SUBSYSTEM_DEF(traumas)
"birds" = typecacheof(list(/mob/living/simple_animal/parrot, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
/mob/living/simple_animal/pet/penguin)),
"anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian)),
"cats"= typecacheof(list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/hostile/cat_butcherer))
"cats"= typecacheof(list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/hostile/cat_butcherer)),
"syndicate" = typecacheof(list(/mob/living/simple_animal/hostile/syndicate, /mob/living/simple_animal/hostile/viscerator, /mob/living/simple_animal/hostile/carp/cayenne, /mob/living/silicon/robot/modules/syndicate)),
"eye" = typecacheof(list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher, /mob/living/simple_animal/hostile/carp/eyeball))
)
@@ -157,7 +162,23 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence)),
"cats" = typecacheof(list(/obj/item/organ/ears/cat, /obj/item/organ/tail/cat, /obj/item/laser_pointer, /obj/item/toy/cattoy, /obj/item/clothing/head/kitty,
/obj/item/clothing/head/collectable/kitty, /obj/item/melee/chainofcommand/tailwhip/kitty, /obj/item/stack/sheet/animalhide/cat))
/obj/item/clothing/head/collectable/kitty, /obj/item/melee/chainofcommand/tailwhip/kitty, /obj/item/stack/sheet/animalhide/cat)),
"syndicate" = typecacheof(list(/obj/item/stack/tile/mineral/plastitanium, /obj/machinery/computer/shuttle/syndicate, /obj/machinery/computer/shuttle/syndicate/recall, /obj/machinery/computer/shuttle/syndicate/drop_pod, /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate, /obj/machinery/recharge_station,
/obj/machinery/porta_turret/syndicate, /obj/structure/closet/syndicate, /obj/machinery/suit_storage_unit/syndicate, /obj/item/clothing/under/syndicate, /obj/item/folder/syndicate, /obj/item/documents/syndicate, /obj/item/clothing/glasses/phantomthief/syndicate, /obj/item/antag_spawner/nuke_ops, /obj/item/storage/box/syndicate,
/obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver/syndie,
/obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/m90, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/storage/belt/grenade/full, /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate, /obj/item/gun/energy/kinetic_accelerator/crossbow,
/obj/item/melee/transforming/energy/sword/saber, /obj/item/twohanded/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate,
/obj/item/cartridge/virus/frame, /obj/item/chameleon, /obj/item/storage/box/syndie_kit/cutouts, /obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/card/emag, /obj/item/storage/toolbox/syndicate, /obj/item/storage/book/bible/syndicate, /obj/item/encryptionkey/binary, /obj/item/encryptionkey/syndicate, /obj/item/aiModule/syndicate,
/obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited,
/obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate,
/obj/machinery/computer/pod/old/syndicate, /obj/machinery/vending/medical/syndicate_access, /obj/item/mmi/syndie, /obj/item/target/syndicate, /obj/machinery/vending/cigarette/syndicate, /obj/item/robot_module/syndicate, /obj/item/clothing/mask/gas/syndicate, /obj/machinery/power/singularity_beacon/syndicate, /obj/item/clothing/head/syndicatefake,
/obj/item/radio/headset/syndicate, /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate, /obj/item/pda/syndicate, /obj/item/clothing/suit/armor/vest/capcarapace/syndicate, /obj/item/gun/ballistic/automatic/flechette, /obj/item/ammo_box/magazine/flechette, /obj/item/clothing/suit/toggle/lawyer/black/syndie, /obj/item/melee/transforming/energy/sword/cx/traitor,
/obj/structure/sign/poster/contraband/syndicate_pistol, /obj/structure/sign/poster/contraband/syndicate_recruitment, /obj/item/bedsheet/syndie, /obj/item/borg/upgrade/syndicate, /obj/item/tank/jetpack/oxygen/harness, /obj/item/firing_pin/implant/pindicate, /obj/item/reagent_containers/glass/bottle/traitor, /obj/item/storage/belt/military,
/obj/item/twohanded/shockpaddles/syndicate, /obj/item/clothing/mask/cigarette/syndicate, /obj/item/toy/plush/nukeplushie)),
"eye" = typecacheof(list(/obj/item/organ/eyes, /obj/item/reagent_containers/syringe))
)
phobia_turfs = list("space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)),
@@ -165,18 +186,19 @@ SUBSYSTEM_DEF(traumas)
/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)),
"aliens" = typecacheof(list(/turf/open/floor/plating/abductor, /turf/open/floor/plating/abductor2,
/turf/open/floor/mineral/abductor, /turf/closed/wall/mineral/abductor)),
"falling" = typecacheof(list(/turf/open/chasm, /turf/open/floor/fakepit))
"falling" = typecacheof(list(/turf/open/chasm, /turf/open/floor/fakepit)),
"syndicate" = typecacheof(list(/turf/closed/wall/mineral/plastitanium, /turf/open/floor/mineral/plastitanium, /turf/open/floor/plasteel/shuttle/red/syndicate))
)
phobia_species = list("lizards" = typecacheof(list(/datum/species/lizard)),
"skeletons" = typecacheof(list(/datum/species/skeleton, /datum/species/plasmaman)),
"conspiracies" = typecacheof(list(/datum/species/abductor, /datum/species/lizard, /datum/species/synth)),
"robots" = typecacheof(list(/datum/species/android)),
"conspiracies" = typecacheof(list(/datum/species/abductor, /datum/species/lizard, /datum/species/synth, /datum/species/corporate)),
"robots" = typecacheof(list(/datum/species/android, /datum/species/synth)),
"the supernatural" = typecacheof(list(/datum/species/golem/clockwork, /datum/species/golem/runic)),
"aliens" = typecacheof(list(/datum/species/abductor, /datum/species/jelly, /datum/species/pod,
/datum/species/shadow)),
"aliens" = typecacheof(list(/datum/species/abductor, /datum/species/jelly, /datum/species/pod, /datum/species/shadow)),
"anime" = typecacheof(list(/datum/species/human/felinid)),
"cats" = typecacheof(list(/datum/species/human/felinid))
"cats" = typecacheof(list(/datum/species/human/felinid)),
"syndicate" = typecacheof(list(/datum/species/corporate, /datum/species/zombie/infectious))
)
return ..()
+1
View File
@@ -228,6 +228,7 @@ SUBSYSTEM_DEF(vote)
to_chat(world, "\n<font color='purple'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=[REF(src)]'>here</a> to place your votes.\nYou have [DisplayTimeText(vp)] to vote.</font>")
time_remaining = round(vp/10)
for(var/c in GLOB.clients)
SEND_SOUND(c, sound('sound/misc/server-ready.ogg'))
var/client/C = c
var/datum/action/vote/V = new
if(question)
+1 -1
View File
@@ -57,8 +57,8 @@
if(H.stat == CONSCIOUS)
H.visible_message("<span class='userdanger'>[H] clutches at [H.p_their()] chest as if [H.p_their()] heart is stopping!</span>")
H.adjustStaminaLoss(60)
H.reagents.add_reagent("corazone", 3) // To give the victim a final chance to shock their heart before losing consciousness
H.set_heartattack(TRUE)
H.reagents.add_reagent("corazone", 3) // To give the victim a final chance to shock their heart before losing consciousness
cure()
else
@@ -33,6 +33,11 @@
mood_change = 2
timeout = 2400
/datum/mood_event/bshonk
description = "<span class='nicegreen'>Quantum mechanics can be fun and silly, too! Honk!</span>\n"
mood_change = 6
timeout = 4800
/datum/mood_event/perform_cpr
description = "<span class='nicegreen'>It feels good to save a life.</span>\n"
mood_change = 6
+16
View File
@@ -151,6 +151,22 @@
if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len)
for(var/datum/reagent/R in mob_occupant.reagents.reagent_list)
data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume))
if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner.
var/mob/living/carbon/C = mob_occupant
var/blood_id = C.get_blood_id()
if(blood_id)
data["occupant"]["blood"] = list() // We can start populating this list.
var/blood_type = C.dna.blood_type
if(blood_id != "blood") // special blood substance
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id]
if(R)
blood_type = R.name
else
blood_type = blood_id
data["occupant"]["blood"]["maxBloodVolume"] = BLOOD_VOLUME_NORMAL
data["occupant"]["blood"]["currentBloodVolume"] = C.blood_volume
data["occupant"]["blood"]["dangerBloodVolume"] = BLOOD_VOLUME_SAFE
data["occupant"]["blood"]["bloodType"] = blood_type
return data
/obj/machinery/sleeper/ui_act(action, params)
+55 -7
View File
@@ -50,6 +50,8 @@
radio.canhear_range = 0
radio.recalculateChannels()
update_icon()
/obj/machinery/clonepod/Destroy()
go_out()
QDEL_NULL(radio)
@@ -151,7 +153,6 @@
if(clonemind.damnation_type) //Can't clone the damned.
INVOKE_ASYNC(src, .proc/horrifyingsound)
mess = TRUE
icon_state = "pod_g"
update_icon()
return FALSE
@@ -179,7 +180,6 @@
clonename = "clone ([rand(1,999)])"
H.real_name = clonename
icon_state = "pod_1"
//Get the clone body ready
maim_clone(H)
H.add_trait(TRAIT_STABLEHEART, "cloning")
@@ -278,10 +278,10 @@
else if (!mob_occupant || mob_occupant.loc != src)
occupant = null
if (!mess && !panel_open)
icon_state = "pod_0"
use_power(200)
update_icon()
//Let's unlock this early I guess. Might be too early, needs tweaking.
/obj/machinery/clonepod/attackby(obj/item/W, mob/user, params)
if(!(occupant || mess))
@@ -355,7 +355,7 @@
mess = FALSE
new /obj/effect/gibspawner/generic(get_turf(src))
audible_message("<span class='italics'>You hear a splat.</span>")
icon_state = "pod_0"
update_icon()
return
if(!mob_occupant)
@@ -373,7 +373,7 @@
mob_occupant.flash_act()
occupant.forceMove(T)
icon_state = "pod_0"
update_icon()
mob_occupant.domutcheck(1) //Waiting until they're out before possible monkeyizing. The 1 argument forces powers to manifest.
for(var/fl in unattached_flesh)
qdel(fl)
@@ -389,7 +389,7 @@
technician, as your warranty may be affected.")
mess = TRUE
maim_clone(mob_occupant) //Remove every bit that's grown back so far to drop later, also destroys bits that haven't grown yet
icon_state = "pod_g"
update_icon()
if(mob_occupant.mind != clonemind)
clonemind.transfer_to(mob_occupant)
mob_occupant.grab_ghost() // We really just want to make you suffer.
@@ -471,6 +471,54 @@
flesh_number = unattached_flesh.len
#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
/obj/machinery/clonepod/update_icon()
cut_overlays()
if(mess)
icon_state = "pod_g"
var/image/gib1 = image(CRYOMOBS, "gibup")
var/image/gib2 = image(CRYOMOBS, "gibdown")
gib1.pixel_y = 27 + round(sin(world.time) * 3)
gib1.pixel_x = round(sin(world.time * 3))
gib2.pixel_y = 27 + round(cos(world.time) * 3)
gib2.pixel_x = round(cos(world.time * 3))
add_overlay(gib2)
add_overlay(gib1)
add_overlay("cover-on")
else if(occupant)
icon_state = "pod_1"
var/image/occupant_overlay
var/completion = (flesh_number - unattached_flesh.len) / flesh_number
if(unattached_flesh.len <= 0)
occupant_overlay = image(occupant.icon, occupant.icon_state)
occupant_overlay.copy_overlays(occupant)
else
occupant_overlay = image(CRYOMOBS, "clone_meat")
var/matrix/tform = matrix()
tform.Scale(completion)
tform.Turn(cos(world.time * 2) * 3)
occupant_overlay.transform = tform
occupant_overlay.appearance_flags = 0
occupant_overlay.dir = SOUTH
occupant_overlay.pixel_y = 27 + round(sin(world.time) * 3)
occupant_overlay.pixel_x = round(sin(world.time * 3))
add_overlay(occupant_overlay)
add_overlay("cover-on")
else
icon_state = "pod_0"
if(panel_open)
icon_state = "pod_0_maintenance"
add_overlay("panel")
/*
* Manual -- A big ol' manual.
*/
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/machinery/dna_scannernew
name = "\improper DNA scanner"
desc = "It scans DNA structures."
icon = 'icons/obj/machines/cloning.dmi'
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "scanner"
density = TRUE
use_power = IDLE_POWER_USE
+10 -5
View File
@@ -96,7 +96,7 @@
/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE)
var/list/to_eat
if(istype(AM0, /obj/item))
if(isitem(AM0))
to_eat = AM0.GetAllContents()
else
to_eat = list(AM0)
@@ -107,7 +107,7 @@
var/atom/movable/AM = i
var/obj/item/bodypart/head/as_head = AM
var/obj/item/mmi/as_mmi = AM
var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /mob/living/brain)
var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || isbrain(AM)
if(brain_holder)
emergency_stop(AM)
else if(isliving(AM))
@@ -115,9 +115,14 @@
crush_living(AM)
else
emergency_stop(AM)
else if(istype(AM, /obj/item))
recycle_item(AM)
items_recycled++
else if(isitem(AM))
var/obj/O = AM
if(O.resistance_flags & INDESTRUCTIBLE)
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
O.forceMove(loc)
else
recycle_item(AM)
items_recycled++
else
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
AM.forceMove(loc)
+1 -1
View File
@@ -9,7 +9,7 @@
message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
if(heavy_range > 1)
if(heavy_range >= 1)
new /obj/effect/temp_visual/emp/pulse(epicenter)
if(heavy_range > light_range)
+2 -2
View File
@@ -37,10 +37,10 @@
to_chat(user, "You're still waiting for approval from your employers about your proposed name change, it'd be best to wait for now.")
return
var/new_name = stripped_input(user, message="What do you want to name \
var/new_name = html_decode(stripped_input(user, message="What do you want to name \
[station_name()]? Keep in mind particularly terrible names may be \
rejected by your employers, while names using the standard format, \
will automatically be accepted.", max_length=MAX_CHARTER_LEN)
will automatically be accepted.", max_length=MAX_CHARTER_LEN))
if(response_timer_id)
to_chat(user, "You're still waiting for approval from your employers about your proposed name change, it'd be best to wait for now.")
+22 -7
View File
@@ -447,8 +447,9 @@
return (!H.suiciding && !(H.has_trait(TRAIT_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain)
/obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H)
if(defib.pullshocksafely && isliving(H.pulledby))
H.visible_message("<span class='danger'>The defibrillator safely discharges the excessive charge into the floor!</span>")
if(req_defib)
if(defib.pullshocksafely && isliving(H.pulledby))
H.visible_message("<span class='danger'>The defibrillator safely discharges the excessive charge into the floor!</span>")
else
var/mob/living/M = H.pulledby
if(M.electrocute_act(30, src))
@@ -542,7 +543,20 @@
user.visible_message("<span class='warning'>[user] begins to place [src] on [H]'s chest.</span>", "<span class='warning'>You begin to place [src] on [H]'s chest...</span>")
busy = TRUE
update_icon()
if(do_after(user, 30 - defib.primetime, target = H)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
var/primetimer
var/primetimer2
var/deathtimer
if(req_defib)
primetimer = 30 - defib.primetime //I swear to god if I find shit like this elsewhere
primetimer2 = 20 - defib.primetime
deathtimer = DEFIB_TIME_LOSS * defib.timedeath
else
primetimer = 30
primetimer2 = 20
deathtimer = DEFIB_TIME_LOSS * 10
if(do_after(user, primetimer, target = H)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
user.visible_message("<span class='notice'>[user] places [src] on [H]'s chest.</span>", "<span class='warning'>You place [src] on [H]'s chest.</span>")
playsound(src, 'sound/machines/defib_charge.ogg', 75, 0)
var/tplus = world.time - H.timeofdeath
@@ -550,10 +564,10 @@
// (in deciseconds)
// brain damage starts setting in on the patient after
// some time left rotting
var/tloss = DEFIB_TIME_LOSS * defib.timedeath
var/tloss = deathtimer
var/total_burn = 0
var/total_brute = 0
if(do_after(user, 20 - defib.primetime, target = H)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
if(do_after(user, primetimer2, target = H)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
for(var/obj/item/carried_item in H.contents)
if(istype(carried_item, /obj/item/clothing/suit/space))
if((!combat && !req_defib) || (req_defib && !defib.combat))
@@ -613,8 +627,9 @@
if(tplus > tloss)
H.adjustBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))), 150)
log_combat(user, H, "revived", defib)
if(defib.healdisk)
H.heal_overall_damage(25, 25)
if(req_defib)
if(defib.healdisk)
H.heal_overall_damage(25, 25)
if(req_defib)
defib.deductcharge(revivecost)
cooldown = 1
+3 -1
View File
@@ -248,7 +248,9 @@
if(SSreligion.holy_weapon_type)
return
var/obj/item/nullrod/holy_weapon
var/list/holy_weapons_list = typesof(/obj/item/nullrod)
var/list/holy_weapons_list = typesof(/obj/item/nullrod) + list(
/obj/item/melee/transforming/energy/sword/cx/chaplain
)
var/list/display_names = list()
for(var/V in holy_weapons_list)
var/obj/item/nullrod/rodtype = V
@@ -1,6 +1,7 @@
/obj/item/implant/mindshield
name = "mindshield implant"
desc = "Protects against brainwashing."
resistance_flags = INDESTRUCTIBLE
activated = 0
/obj/item/implant/mindshield/get_data()
@@ -34,16 +34,23 @@
. = ..()
uses--
to_chat(imp_in, "<span class='notice'>You feel a sudden surge of energy!</span>")
imp_in.SetSleeping(0)
imp_in.SetStun(0)
imp_in.SetKnockdown(0)
imp_in.SetUnconscious(0)
imp_in.adjustStaminaLoss(-75)
imp_in.adjustStaminaLoss(-150)
imp_in.stuttering = 0
imp_in.updatehealth()
imp_in.update_stamina()
imp_in.resting = 0
imp_in.lying = 0
imp_in.update_canmove()
imp_in.reagents.add_reagent("inaprovaline", 3) //let's give another chance to dumb fucks who forget to breathe
imp_in.reagents.add_reagent("synaptizine", 10)
imp_in.reagents.add_reagent("omnizine", 10)
imp_in.reagents.add_reagent("stimulants", 10)
if(!uses)
qdel(src)
@@ -382,8 +382,8 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \
GLOBAL_LIST_INIT(brass_recipes, list ( \
new/datum/stack_recipe("wall gear", /obj/structure/destructible/clockwork/wall_gear, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
null,
new/datum/stack_recipe("pinion airlock", /obj/machinery/door/airlock/clockwork, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("brass pinion airlock", /obj/machinery/door/airlock/clockwork/brass, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("brass pinion airlock", /obj/machinery/door/airlock/clockwork, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("brass pinion airlock - windowed", /obj/machinery/door/airlock/clockwork/brass, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("brass windoor", /obj/machinery/door/window/clockwork, 2, time = 30, on_floor = TRUE, window_checks = TRUE), \
null,
new/datum/stack_recipe("directional brass window", /obj/structure/window/reinforced/clockwork/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
@@ -392,11 +392,14 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \
null,
new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("sender - mech sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("sender - lever", /obj/structure/destructible/clockwork/trap/trigger/lever, 1, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("sender - repeater", /obj/structure/destructible/clockwork/trap/trigger/repeater, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
null,
new/datum/stack_recipe("receiver - brass skewer", /obj/structure/destructible/clockwork/trap/brass_skewer, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_ADJACENT), \
new/datum/stack_recipe("receiver - steam vent", /obj/structure/destructible/clockwork/trap/steam_vent, 3, time = 30, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
))
/obj/item/stack/tile/brass
@@ -48,6 +48,13 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
/obj/item/storage/backpack/holding/satchel
name = "satchel of holding"
desc = "A satchel that opens into a localized pocket of Blue Space."
icon_state = "holdingsat"
item_state = "holdingsat"
species_exception = list(/datum/species/angel)
/obj/item/storage/backpack/holding/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
@@ -27,6 +27,14 @@
for(var/i in 1 to 6)
new /obj/item/paper(folder)
/obj/item/storage/briefcase/crafted
desc = "Hand crafted suitcase made of leather and cloth."
force = 6
max_integrity = 50
/obj/item/storage/briefcase/crafted/PopulateContents()
return //So we dont spawn items
/obj/item/storage/briefcase/lawyer
folder_path = /obj/item/folder/blue
@@ -208,3 +208,38 @@
new/obj/item/stack/cable_coil/orange(src)
new/obj/item/stack/cable_coil/cyan(src)
new/obj/item/stack/cable_coil/white(src)
/obj/item/storage/toolbox/gold_real
name = "golden toolbox"
desc = "A larger then normal toolbox made of gold plated plastitanium."
item_state = "gold"
icon_state = "gold"
has_latches = FALSE
force = 16 // Less then a spear
throwforce = 14
throw_speed = 5
throw_range = 10
/obj/item/storage/toolbox/gold_real/PopulateContents()
new /obj/item/screwdriver/nuke(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool/largetank(src)
new /obj/item/crowbar/red(src)
new /obj/item/wirecutters(src, "red")
new /obj/item/multitool/ai_detect(src)
new /obj/item/clothing/gloves/combat(src)
/obj/item/storage/toolbox/gold_real/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
STR.max_combined_w_class = 40
STR.max_items = 12
/obj/item/storage/toolbox/gold_fake // used in crafting
name = "golden toolbox"
desc = "A gold plated toolbox, fancy and harmless do to the gold plating being on cardboard!"
icon_state = "gold"
item_state = "gold"
has_latches = FALSE
force = 0
throwforce = 0
+4
View File
@@ -290,6 +290,8 @@
var/hacked = FALSE
var/brightness_on = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD
var/list/possible_colors = list("red", "blue", "green", "purple")
total_mass = 0.375 //Survival flashlights typically weigh around 5 ounces.
var/total_mass_on = 3.4 //The typical medieval sword, on the other hand, weighs roughly 3 pounds. //Values copied from the regular e-sword
/obj/item/twohanded/dualsaber/suicide_act(mob/living/carbon/user)
if(wielded)
@@ -387,6 +389,7 @@
if(wielded)
sharpness = IS_SHARP
w_class = w_class_on
total_mass = total_mass_on
hitsound = 'sound/weapons/blade1.ogg'
START_PROCESSING(SSobj, src)
set_light(brightness_on)
@@ -394,6 +397,7 @@
/obj/item/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
sharpness = initial(sharpness)
w_class = initial(w_class)
total_mass = initial(total_mass)
..()
hitsound = "swing_hit"
STOP_PROCESSING(SSobj, src)
+1
View File
@@ -500,6 +500,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
w_class = WEIGHT_CLASS_HUGE
var/homerun_ready = 0
var/homerun_able = 0
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
/obj/item/melee/baseball_bat/homerun
name = "home run bat"
+1 -1
View File
@@ -1,6 +1,6 @@
#define MUSICIAN_HEARCHECK_MINDELAY 4
#define MUSIC_MAXLINES 300
#define MUSIC_MAXLINES 600
#define MUSIC_MAXLINECHARS 50
/datum/song
+36
View File
@@ -150,6 +150,42 @@
message_admins("[key_name_admin(src)] set the round end sound to [S]")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Set Round End Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/play_web_sound_manual()
set category = "Fun"
set name = "Manual Play Internet Sound"
if(!check_rights(R_SOUNDS))
return
var/web_sound_input = input("Enter youtube-dl fetched content URL (supported sites only, leave blank to stop playing)", "Send youtube-dl media link") as text|null
if(!istext(web_sound_input))
return
web_sound_input = trim(web_sound_input)
if(!length(web_sound_input))
log_admin("[key_name(src)] stopped web sound")
message_admins("[key_name(src)] stopped web sound")
for(var/m in GLOB.player_list)
var/mob/M = m
var/client/C = M.client
if((C.prefs.toggles & SOUND_MIDI) && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded)
C.chatOutput.stopMusic()
return
var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num
if(!freq)
return
if(web_sound_input && !findtext(web_sound_input, GLOB.is_http_protocol))
to_chat(src, "<span class='boldwarning'>BLOCKED: Content URL not using http(s) protocol</span>")
to_chat(src, "<span class='warning'>The media provider returned a content URL that isn't using the HTTP or HTTPS protocol</span>")
return
SSblackbox.record_feedback("nested tally", "played_url_manual", 1, list("[ckey]", "[web_sound_input]"))
log_admin("[key_name(src)] manually played web sound: [web_sound_input]")
message_admins("[key_name(src)] manually played web sound: <a href='web_sound_input'>HREF</a>")
for(var/m in GLOB.player_list)
var/mob/M = m
var/client/C = M.client
if((C.prefs.toggles & SOUND_MIDI) && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded)
C.chatOutput.sendMusic(web_sound_input, freq)
/client/proc/stop_sounds()
set category = "Debug"
set name = "Stop All Playing Sounds"
+4 -1
View File
@@ -1249,7 +1249,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(!check_rights(R_ADMIN) || !check_rights(R_FUN))
return
var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_ROD, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING)
var/list/punishment_list = list(ADMIN_PUNISHMENT_PIE, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING, ADMIN_PUNISHMENT_ROD)
var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list
@@ -1294,6 +1294,9 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(!puzzle_imprison(target))
to_chat(usr,"<span class='warning'>Imprisonment failed!</span>")
return
if(ADMIN_PUNISHMENT_PIE)
var/obj/item/reagent_containers/food/snacks/pie/cream/nostun/creamy = new(get_turf(target))
creamy.splat(target)
var/msg = "[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment]."
message_admins(msg)
@@ -108,10 +108,20 @@
to_chat(loc, "<span class='warning'>Combat injection is still recharging.</span>")
return
var/mob/living/carbon/human/M = loc
M.adjustStaminaLoss(-75)
M.SetSleeping(0)
M.SetUnconscious(0)
M.SetStun(0)
M.SetKnockdown(0)
M.reagents.add_reagent("inaprovaline", 3)
M.reagents.add_reagent("synaptizine", 10)
M.reagents.add_reagent("stimulants", 10)
M.adjustStaminaLoss(-150)
M.stuttering = 0
M.updatehealth()
M.update_stamina()
M.resting = 0
M.lying = 0
M.update_canmove()
combat_cooldown = 0
START_PROCESSING(SSobj, src)
@@ -503,6 +513,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
L.lastattacker = user.real_name
L.lastattackerckey = user.ckey
L.adjustStaminaLoss(35) //because previously it took 5-6 hits to actually "incapacitate" someone for the purposes of the sleep inducement
L.Knockdown(140)
L.apply_effect(EFFECT_STUTTER, 7)
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
@@ -19,6 +19,14 @@
user.SetKnockdown(0)
user.reagents.add_reagent("changelingadrenaline", 10)
user.reagents.add_reagent("changelinghaste", 2) //For a really quick burst of speed
user.adjustStaminaLoss(-75)
user.reagents.add_reagent("inaprovaline", 3) //let's give another chance to dumb fucks who forget to breathe
user.adjustStaminaLoss(-150)
user.stuttering = 0
user.updatehealth()
user.update_stamina()
user.resting = 0
user.lying = 0
user.update_canmove()
return TRUE
@@ -13,7 +13,7 @@
if (user.has_trait(CHANGELING_HIVEMIND_MUTE))
to_chat(user, "<span class='warning'>The poison in the air hinders our ability to interact with the hivemind.</span>")
return
var/input = stripped_input(usr, "Please choose a message to transmit.", "Changeling Hivemind", "")
var/input = html_decode(stripped_input(usr, "Please choose a message to transmit.", "Changeling Hivemind", ""))
user.say(".g[input]")
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec)
@@ -44,12 +44,13 @@
/obj/item/clockwork/slab/cyborg //three scriptures, plus a spear and fabricator
clockwork_desc = "A divine link to the Celestial Derelict, allowing for limited recital of scripture."
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard)
quickbound = list(/datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard, \
/datum/clockwork_scripture/create_object/stargazer)
maximum_quickbound = 6 //we usually have one or two unique scriptures, so if ratvar is up let us bind one more
actions_types = list()
/obj/item/clockwork/slab/cyborg/engineer //two scriptures, plus a fabricator
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transmission)
/obj/item/clockwork/slab/cyborg/engineer //three scriptures, plus a fabricator
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transmission, /datum/clockwork_scripture/create_object/stargazer)
/obj/item/clockwork/slab/cyborg/medical //five scriptures, plus a spear
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/ranged_ability/sentinels_compromise, \
@@ -61,12 +62,12 @@
/obj/item/clockwork/slab/cyborg/peacekeeper //two scriptures, plus a spear
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/hateful_manacles, /datum/clockwork_scripture/ranged_ability/judicial_marker)
/obj/item/clockwork/slab/cyborg/janitor //five scriptures, plus a fabricator
/obj/item/clockwork/slab/cyborg/janitor //six scriptures, plus a fabricator
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transgression, \
/datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
/datum/clockwork_scripture/create_object/stargazer, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
/obj/item/clockwork/slab/cyborg/service //five scriptures, plus xray vision
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, \
/obj/item/clockwork/slab/cyborg/service //six scriptures, plus xray vision
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant,/datum/clockwork_scripture/create_object/stargazer, \
/datum/clockwork_scripture/spatial_gateway, /datum/clockwork_scripture/create_object/clockwork_obelisk)
/obj/item/clockwork/slab/cyborg/miner //two scriptures, plus a spear and xray vision
@@ -2,6 +2,32 @@
// DRIVERS //
/////////////
//Stargazer: Creates a stargazer, a cheap power generator that utilizes starlight.
/datum/clockwork_scripture/create_object/stargazer
descname = "Generates Power From Starlight"
name = "Stargazer"
desc = "Forms a weak structure that generates power every second while within three tiles of starlight."
invocations = list("Capture their inferior light for us!")
channel_time = 50
power_cost = 200
object_path = /obj/structure/destructible/clockwork/stargazer
creator_message = "<span class='brass'>You form a stargazer, which will generate power near starlight.</span>"
observer_message = "<span class='warning'>A large lantern-shaped machine forms!</span>"
usage_tip = "For obvious reasons, make sure to place this near a window or somewhere else that can see space!"
tier = SCRIPTURE_DRIVER
one_per_tile = TRUE
primary_component = HIEROPHANT_ANSIBLE
sort_priority = 1
quickbind = TRUE
quickbind_desc = "Creates a stargazer, which generates power when near starlight."
/datum/clockwork_scripture/create_object/stargazer/check_special_requirements()
var/area/A = get_area(invoker)
if(A.outdoors || A.map_name == "Space" || !A.blob_allowed)
to_chat(invoker, "<span class='danger'>Stargazers can't be built off-station.</span>")
return
return ..()
//Integration Cog: Creates an integration cog that can be inserted into APCs to passively siphon power.
/datum/clockwork_scripture/create_object/integration_cog
@@ -18,7 +44,7 @@
tier = SCRIPTURE_DRIVER
space_allowed = TRUE
primary_component = HIEROPHANT_ANSIBLE
sort_priority = 1
sort_priority = 2
important = TRUE
quickbind = TRUE
quickbind_desc = "Creates an integration cog, which can be used to siphon power from an open APC."
@@ -39,7 +65,7 @@
tier = SCRIPTURE_DRIVER
one_per_tile = TRUE
primary_component = HIEROPHANT_ANSIBLE
sort_priority = 2
sort_priority = 3
quickbind = TRUE
quickbind_desc = "Creates a Sigil of Transgression, which will briefly stun and slow the next non-Servant to cross it."
@@ -59,7 +85,7 @@
tier = SCRIPTURE_DRIVER
one_per_tile = TRUE
primary_component = HIEROPHANT_ANSIBLE
sort_priority = 3
sort_priority = 4
quickbind = TRUE
quickbind_desc = "Creates a Sigil of Submission, which will convert non-Servants that remain on it."
@@ -76,7 +102,7 @@
usage_tip = "The light can be used from up to two tiles away. Damage taken will GREATLY REDUCE the stun's duration."
tier = SCRIPTURE_DRIVER
primary_component = BELLIGERENT_EYE
sort_priority = 4
sort_priority = 5
slab_overlay = "volt"
ranged_type = /obj/effect/proc_holder/slab/kindle
ranged_message = "<span class='brass'><i>You charge the clockwork slab with divine energy.</i>\n\
@@ -100,7 +126,7 @@
usage_tip = "The manacles are about as strong as zipties, and break when removed."
tier = SCRIPTURE_DRIVER
primary_component = BELLIGERENT_EYE
sort_priority = 5
sort_priority = 6
ranged_type = /obj/effect/proc_holder/slab/hateful_manacles
slab_overlay = "hateful_manacles"
ranged_message = "<span class='neovgre_small'><i>You charge the clockwork slab with divine energy.</i>\n\
@@ -124,7 +150,7 @@
usage_tip = "You cannot reactivate Vanguard while still shielded by it."
tier = SCRIPTURE_DRIVER
primary_component = VANGUARD_COGWHEEL
sort_priority = 6
sort_priority = 7
quickbind = TRUE
quickbind_desc = "Allows you to temporarily have quickly regenerating stamina and absorb stuns. All stuns absorbed will affect you when disabled."
@@ -156,7 +182,7 @@
usage_tip = "The Compromise is very fast to invoke, and will remove holy water from the target Servant."
tier = SCRIPTURE_DRIVER
primary_component = VANGUARD_COGWHEEL
sort_priority = 7
sort_priority = 8
quickbind = TRUE
quickbind_desc = "Allows you to convert a Servant's brute, burn, and oxygen damage to half toxin damage.<br><b>Click your slab to disable.</b>"
slab_overlay = "compromise"
@@ -180,7 +206,7 @@
usage_tip = "This can't be used while on Reebe, for obvious reasons."
tier = SCRIPTURE_DRIVER
primary_component = GEIS_CAPACITOR
sort_priority = 8
sort_priority = 9
important = TRUE
quickbind = TRUE
quickbind_desc = "Returns you to Reebe."
@@ -238,7 +264,7 @@
tier = SCRIPTURE_DRIVER
space_allowed = TRUE
primary_component = GEIS_CAPACITOR
sort_priority = 9
sort_priority = 10
important = TRUE
quickbind = TRUE
quickbind_desc = "Creates a new Clockwork Slab."
@@ -259,6 +285,6 @@
tier = SCRIPTURE_DRIVER
space_allowed = TRUE
primary_component = GEIS_CAPACITOR
sort_priority = 10
sort_priority = 11
quickbind = TRUE
quickbind_desc = "Creates a pair of Wraith Spectacles, which grant true sight but cause gradual vision loss."
@@ -0,0 +1,70 @@
#define STARGAZER_RANGE 3 //How many tiles the stargazer can see out to
#define STARGAZER_POWER 7 //How many watts will be produced per second when the stargazer sees starlight
//Stargazer: A very fragile but cheap generator that creates power from starlight.
/obj/structure/destructible/clockwork/stargazer
name = "stargazer"
desc = "A large lantern-shaped machine made of thin brass. It looks fragile."
clockwork_desc = "A lantern-shaped generator that produces power when near starlight."
icon_state = "stargazer"
unanchored_icon = "stargazer_unwrenched"
max_integrity = 40
construction_value = 5
layer = WALL_OBJ_LAYER
break_message = "<span class='warning'>The stargazer's fragile body shatters into pieces!</span>"
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
light_color = "#DAAA18"
var/star_light_star_bright = FALSE //If this stargazer can see starlight
/obj/structure/destructible/clockwork/stargazer/Initialize()
. = ..()
START_PROCESSING(SSprocessing, src)
/obj/structure/destructible/clockwork/stargazer/Destroy()
STOP_PROCESSING(SSprocessing, src)
. = ..()
/obj/structure/destructible/clockwork/stargazer/examine(mob/user)
..()
if(is_servant_of_ratvar(user))
to_chat(user, "<span class='nzcrentr_small'>Generates <b>[DisplayPower(STARGAZER_POWER)]</b> per second while viewing starlight within [STARGAZER_RANGE] tiles.</span>")
if(star_light_star_bright)
to_chat(user, "[is_servant_of_ratvar(user) ? "<span class='nzcrentr_small'>It can see starlight!</span>" : "It's shining brilliantly!"]")
/obj/structure/destructible/clockwork/stargazer/process()
star_light_star_bright = check_starlight()
if(star_light_star_bright)
adjust_clockwork_power(STARGAZER_POWER)
/obj/structure/destructible/clockwork/stargazer/update_anchored(mob/living/user, damage)
. = ..()
star_light_star_bright = check_starlight()
/obj/structure/destructible/clockwork/stargazer/proc/check_starlight()
var/old_status = star_light_star_bright
var/has_starlight
if(!anchored)
has_starlight = FALSE
else
for(var/turf/T in view(3, src))
if(isspaceturf(T))
has_starlight = TRUE
break
if(has_starlight && anchored)
var/area/A = get_area(src)
if(A.outdoors || A.map_name == "Space" || !A.blob_allowed)
has_starlight = FALSE
if(old_status != has_starlight)
if(has_starlight)
visible_message("<span class='nzcrentr_small'>[src] hums and shines brilliantly!</span>")
playsound(src, 'sound/machines/clockcult/stargazer_activate.ogg', 50, TRUE)
add_overlay("stargazer_light")
set_light(1.5, 5)
else
if(anchored) //We lost visibility somehow
visible_message("<span class='danger'>[src] flickers, and falls dark.</span>")
else
visible_message("<span class='danger'>[src] whooshes quietly as it slides into a less bulky form.</span>")
cut_overlays()
set_light(0)
return has_starlight
@@ -0,0 +1,20 @@
//Mech sensor: Activates when stepped on by a mech
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech
name = "mech sensor"
desc = "A thin plate of brass, barely visible but clearly distinct."
clockwork_desc = "A trigger that will activate when a mech controlled by a non-servant runs across it."
max_integrity = 5
icon_state = "pressure_sensor"
alpha = 75
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech/Crossed(atom/movable/AM)
if(!istype(AM,/obj/mecha/))
return
var/obj/mecha/M = AM
if(M.occupant && is_servant_of_ratvar(M.occupant))
return
audible_message("<i>*click*</i>")
playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE)
activate()
@@ -68,7 +68,14 @@
mouse_opacity = MOUSE_OPACITY_OPAQUE //So players can interact with the tile it's on to pull them off
buckle_mob(squirrel, TRUE)
else
visible_message("<span class='danger'>A massive brass spike erupts from the ground!</span>")
var/obj/mecha/M = locate() in get_turf(src)
if(M)
M.take_damage(50,BRUTE,"melee")
M.visible_message("<span class='danger'>A massive brass spike erupts from the ground, penetrating \the [M] and shattering the trap into pieces!</span>")
addtimer(CALLBACK(src, .proc/take_damage, max_integrity), 1)
else
visible_message("<span class='danger'>A massive brass spike erupts from the ground!</span>")
playsound(src, 'sound/machines/clockcult/brass_skewer.ogg', 75, FALSE)
icon_state = "[initial(icon_state)]_extended"
density = TRUE //Skewers are one-use only
@@ -0,0 +1,17 @@
/obj/structure/destructible/clockwork/trap/power_nullifier
name = "power nullifier"
desc = "A well hidden set of wires and connections."
clockwork_desc = "When triggered, it sets off a 3x3 emp pulse with the center suffering a stronger pulse."
icon_state = "electric_trap"
break_message = "<span class='warning'>The power nullifier sparks, then slowly crumbles to debris!</span>"
max_integrity = 40
density = FALSE
var/activated = FALSE
/obj/structure/destructible/clockwork/trap/power_nullifier/activate()
if(!activated)
activated = TRUE
empulse(get_turf(src),1,1,TRUE)
/obj/structure/destructible/clockwork/trap/power_nullifier/emp_act(var/strength=1)
activate()
+5 -5
View File
@@ -211,8 +211,6 @@
else
return FALSE
/datum/action/innate/cult/spin2win
name = "Geometer's Fury"
desc = "You draw on the power of the sword's ancient runes, spinning it wildly around you as you become immune to most attacks."
@@ -267,7 +265,6 @@
return
. = ..()
/obj/item/clothing/head/culthood
name = "ancient cultist hood"
icon_state = "culthood"
@@ -294,7 +291,6 @@
heat_protection = CHEST|GROIN|LEGS|ARMS
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
/obj/item/clothing/head/culthood/alt
name = "cultist hood"
desc = "An armored hood worn by the followers of Nar'Sie."
@@ -313,7 +309,6 @@
/obj/item/clothing/suit/cultrobes/alt/ghost
item_flags = NODROP | DROPDEL
/obj/item/clothing/head/magus
name = "magus helm"
icon_state = "magus"
@@ -529,7 +524,12 @@
"The shuttle's custodian was found washing the windows with their own blood.",
"A shuttle engineer began screaming 'DEATH IS NOT THE END' and ripped out wires until an arc flash seared off her flesh.",
"A shuttle inspector started laughing madly over the radio and then threw herself into an engine turbine.",
"An assistant was found on the shuttle.",
"A medical officer was found pouring out several blood bags onto the shuttle's instrument panels, before slitting both wrists open and screaming 'DEATH IS NOT THE END'.",
"A fuel technician was found replacing the fuel with his blood.",
"All the lights aboard the shuttle turned a crimson red before blowing out..",
"The shuttle dispatcher was found dead with bloody symbols carved into their flesh.",
"An engine turbine began leaking blood when it was powered on.",
"The shuttle's transponder is emitting the encoded message 'FEAR THE OLD BLOOD' in lieu of its assigned identification signal.")
var/message = pick_n_take(curses)
message += " The shuttle will be delayed by three minutes."
+19 -19
View File
@@ -58,18 +58,12 @@
<A href='byond://?src=[REF(src)];send=1'>Send Signal</A><BR>
<B>Frequency/Code</B> for signaler:<BR>
Frequency:
<A href='byond://?src=[REF(src)];freq=-10'>-</A>
<A href='byond://?src=[REF(src)];freq=-2'>-</A>
[format_frequency(src.frequency)]
<A href='byond://?src=[REF(src)];freq=2'>+</A>
<A href='byond://?src=[REF(src)];freq=10'>+</A><BR>
<A href='byond://?src=[REF(src)];set=freq'>Set</A><BR>
Code:
<A href='byond://?src=[REF(src)];code=-5'>-</A>
<A href='byond://?src=[REF(src)];code=-1'>-</A>
[src.code]
<A href='byond://?src=[REF(src)];code=1'>+</A>
<A href='byond://?src=[REF(src)];code=5'>+</A><BR>
<A href='byond://?src=[REF(src)];set=code'>Set</A><BR>
[t1]
</TT>"}
user << browse(dat, "window=radio")
@@ -85,17 +79,23 @@ Code:
onclose(usr, "radio")
return
if (href_list["freq"])
var/new_frequency = (frequency + text2num(href_list["freq"]))
if(new_frequency < MIN_FREE_FREQ || new_frequency > MAX_FREE_FREQ)
new_frequency = sanitize_frequency(new_frequency)
set_frequency(new_frequency)
if (href_list["set"])
if(href_list["code"])
src.code += text2num(href_list["code"])
src.code = round(src.code)
src.code = min(100, src.code)
src.code = max(1, src.code)
if(href_list["set"] == "freq")
var/new_freq = input(usr, "Input a new signalling frequency", "Remote Signaller Frequency", format_frequency(frequency)) as num|null
if(!usr.canUseTopic(src, BE_CLOSE))
return
new_freq = unformat_frequency(new_freq)
new_freq = sanitize_frequency(new_freq, TRUE)
set_frequency(new_freq)
if(href_list["set"] == "code")
var/new_code = input(usr, "Input a new signalling code", "Remote Signaller Code", code) as num|null
if(!usr.canUseTopic(src, BE_CLOSE))
return
new_code = round(new_code)
new_code = CLAMP(new_code, 1, 100)
code = new_code
if(href_list["send"])
spawn( 0 )
@@ -206,4 +206,4 @@ Code:
/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
return
/obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I)
return
return
+6
View File
@@ -21,6 +21,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/last_ip
var/last_id
//Cooldowns for saving/loading. These are four are all separate due to loading code calling these one after another
var/saveprefcooldown
var/loadprefcooldown
var/savecharcooldown
var/loadcharcooldown
//game-preferences
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
var/ooccolor = null
@@ -58,6 +58,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
/datum/preferences/proc/load_preferences()
if(!path)
return 0
if(world.time < loadprefcooldown)
if(istype(parent))
to_chat(parent, "<span class='warning'>You're attempting to load your preferences a little too fast. Wait half a second, then try again.</span>")
return 0
loadprefcooldown = world.time + PREF_SAVELOAD_COOLDOWN
if(!fexists(path))
return 0
@@ -152,6 +157,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
/datum/preferences/proc/save_preferences()
if(!path)
return 0
if(world.time < saveprefcooldown)
if(istype(parent))
to_chat(parent, "<span class='warning'>You're attempting to save your preferences a little too fast. Wait half a second, then try again.</span>")
return 0
saveprefcooldown = world.time + PREF_SAVELOAD_COOLDOWN
var/savefile/S = new /savefile(path)
if(!S)
return 0
@@ -204,6 +214,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
/datum/preferences/proc/load_character(slot)
if(!path)
return 0
if(world.time < loadcharcooldown) //This is before the check to see if the filepath exists to ensure that BYOND can't get hung up on read attempts when the hard drive is a little slow
if(istype(parent))
to_chat(parent, "<span class='warning'>You're attempting to load your character a little too fast. Wait half a second, then try again.</span>")
return "SLOW THE FUCK DOWN" //the reason this isn't null is to make sure that people don't have their character slots overridden by random chars if they accidentally double-click a slot
loadcharcooldown = world.time + PREF_SAVELOAD_COOLDOWN
if(!fexists(path))
return 0
var/savefile/S = new /savefile(path)
@@ -418,6 +433,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
/datum/preferences/proc/save_character()
if(!path)
return 0
if(world.time < savecharcooldown)
if(istype(parent))
to_chat(parent, "<span class='warning'>You're attempting to save your character a little too fast. Wait half a second, then try again.</span>")
return 0
savecharcooldown = world.time + PREF_SAVELOAD_COOLDOWN
var/savefile/S = new /savefile(path)
if(!S)
return 0
+67 -10
View File
@@ -177,9 +177,12 @@
/obj/item/clothing/neck/petcollar
name = "pet collar"
desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule."
desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule. It seems to be made out of a polychromic material."
icon_state = "petcollar"
item_color = "petcollar"
alternate_worn_icon = 'icons/mob/neck.dmi' //Because, as it appears, the item itself is normally not directly aware of its worn overlays, so this is about the easiest way, without adding a new var.
hasprimary = TRUE
primary_color = "#00BBBB"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar
var/tagname = null
@@ -187,21 +190,56 @@
tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
name = "[initial(name)] - [tagname]"
/obj/item/clothing/neck/petcollar/worn_overlays(isinhands, icon_file)
. = ..()
if(hasprimary | hassecondary | hastertiary)
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
if(hasprimary) //checks if overlays are enabled
var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
primary_worn.color = primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite
if(hassecondary)
var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
secondary_worn.color = secondary_color
. += secondary_worn
if(hastertiary)
var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
tertiary_worn.color = tertiary_color
. += tertiary_worn
/obj/item/clothing/neck/petcollar/leather
name = "leather pet collar"
icon_state = "leathercollar"
item_color = "leathercollar"
hasprimary = TRUE
hassecondary = TRUE
primary_color = "#222222"
secondary_color = "#888888"
/obj/item/clothing/neck/petcollar/choker
desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel."
name = "choker"
icon_state = "choker"
item_color = "choker"
hasprimary = TRUE
primary_color = "#222222"
/obj/item/clothing/neck/petcollar/locked
name = "locked collar"
desc = "A collar that has a small lock on it to keep it from being removed."
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked
var/lock = FALSE
/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params)
if(lock != FALSE)
to_chat(user, "<span class='warning'>With a click the collar unlocks!</span>")
lock = FALSE
item_flags = NONE
else
to_chat(user, "<span class='warning'>With a click the collar locks!</span>")
lock = TRUE
item_flags = NODROP
/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/K, mob/user, params)
if(istype(K, /obj/item/key/collar))
if(lock != FALSE)
to_chat(user, "<span class='warning'>With a click the collar unlocks!</span>")
lock = FALSE
else
to_chat(user, "<span class='warning'>With a click the collar locks!</span>")
lock = TRUE
return
/obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user)
@@ -210,6 +248,25 @@
return
..()
/obj/item/clothing/neck/petcollar/locked/leather
name = "leather pet collar"
icon_state = "leathercollar"
item_color = "leathercollar"
hasprimary = TRUE
hassecondary = TRUE
primary_color = "#222222"
secondary_color = "#888888"
/obj/item/clothing/neck/petcollar/locked/choker
name = "choker"
desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel."
icon_state = "choker"
item_color = "choker"
hasprimary = TRUE
primary_color = "#222222"
/obj/item/key/collar
name = "Collar Key"
desc = "A key for a tiny lock on a collar or bag."
-6
View File
@@ -41,12 +41,6 @@
if(tauric == TRUE)
center = TRUE
dimension_x = 64
/*
else if(H.dna.features["taur"] == "Horse" || "Cow")
taurmode = HOOF_TAURIC //tweak this for when the exotics get their own suits, if ever.
center = TRUE
dimension_x = 64
*/
else
taurmode = NOT_TAURIC
if(tauric == TRUE)
-1
View File
@@ -23,7 +23,6 @@
item_state = "armoralt"
blood_overlay_type = "armor"
dog_fashion = /datum/dog_fashion/back
tauric = TRUE //Citadel Add for tauric hardsuits
/obj/item/clothing/suit/armor/vest/alt
desc = "A Type I armored vest that provides decent protection against most types of damage."
+1
View File
@@ -28,6 +28,7 @@
CAT_PIZZA,
CAT_SALAD,
CAT_SANDWICH,
CAT_SUSHI,
CAT_SOUP,
CAT_SPAGHETTI),
CAT_CLOTHING) //Clothing subcategories
+31 -1
View File
@@ -435,6 +435,15 @@
result = /obj/item/extendohand
category = CAT_MISC
/datum/crafting_recipe/bluespacehonker
name = "Bluespace Bike horn"
result = /obj/item/bikehorn/bluespacehonker
time = 10
reqs = list(/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/toy/crayon/blue = 1,
/obj/item/bikehorn = 1)
category = CAT_MISC
/datum/crafting_recipe/chemical_payload
name = "Chemical Payload (C4)"
result = /obj/item/bombcore/chemical
@@ -686,6 +695,16 @@
reqs = list(/obj/item/bedsheet = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/briefcase
name = "Hand made Briefcase"
result = /obj/item/storage/briefcase/crafted
time = 35
tools = list(TOOL_WIRECUTTER)
reqs = list(/obj/item/stack/sheet/cardboard = 1,
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 5)
category = CAT_CLOTHING
/datum/crafting_recipe/aitater
name = "intelliTater"
result = /obj/item/aicard/aitater
@@ -706,6 +725,17 @@
name = "Improvised Jetpack"
result = /obj/item/tank/jetpack/improvised
time = 30
reqs = list(/obj/item/tank/internals/oxygen/red = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30)//red oxygen tank so it looks right
reqs = list(/obj/item/tank/internals/oxygen = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30)//red oxygen tank so it looks right
category = CAT_MISC
tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
/datum/crafting_recipe/goldenbox
name = "Gold Plated Toolbox"
result = /obj/item/storage/toolbox/gold_fake
reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting
/obj/item/stack/cable_coil = 10,
/obj/item/stack/sheet/mineral/gold = 1,
/obj/item/stock_parts/cell = 1,
/datum/reagent/water = 15)
time = 40
category = CAT_MISC
+15 -4
View File
@@ -47,7 +47,16 @@
"hair_dye",
"sugar",
"white_glitter",
"growthserum"
"growthserum",
"cornoil",
"uranium",
"carpet",
"firefighting_foam",
"semen",
"femcum",
"tearjuice",
"strange_reagent"
)
//needs to be chemid unit checked at some point
@@ -58,8 +67,10 @@
endWhen = rand(120, 180)
for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines)
var/turf/T = get_turf(temp_vent)
if(T && is_station_level(T.z) && !temp_vent.welded)
var/area/A = T.loc
if(T && is_station_level(T.z) && !temp_vent.welded && !A.safe)
vents += temp_vent
if(!vents.len)
return kill()
@@ -87,8 +98,8 @@
else
R.add_reagent(pick(saferChems), reagentsAmount)
var/datum/effect_system/smoke_spread/chem/C = new
C.set_up(R,16,T,TRUE)
var/datum/effect_system/smoke_spread/chem/smoke_machine/C = new
C.set_up(R,16,1,T)
C.start()
playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -643,6 +643,11 @@
icon_state = "setup_small_pda"
desc = "It's a case, for building small electronics with. This one resembles a PDA."
/obj/item/electronic_assembly/dildo
name = "type-g electronic assembly"
icon_state = "setup_dildo_medium"
desc = "It's a case, for building small electronics with. This one has a phallic design."
/obj/item/electronic_assembly/small
name = "electronic device"
icon_state = "setup_device"
@@ -674,6 +679,11 @@
icon_state = "setup_device_box"
desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design."
/obj/item/electronic_assembly/small/dildo
name = "type-f electronic device"
icon_state = "setup_dildo_small"
desc = "It's a case, for building tiny-sized electronics with. This one has a phallic design."
/obj/item/electronic_assembly/medium
name = "electronic mechanism"
icon_state = "setup_medium"
@@ -714,6 +724,12 @@
icon_state = "setup_medium_radio"
desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio."
/obj/item/electronic_assembly/medium/dildo
name = "type-g electronic mechanism"
icon_state = "setup_dildo_large"
desc = "It's a case, for building medium-sized electronics with. This one has a phallic design."
/obj/item/electronic_assembly/large
name = "electronic machine"
icon_state = "setup_large"
@@ -25,7 +25,9 @@
"green" = COLOR_ASSEMBLY_GREEN,
"light blue" = COLOR_ASSEMBLY_LBLUE,
"blue" = COLOR_ASSEMBLY_BLUE,
"purple" = COLOR_ASSEMBLY_PURPLE
"purple" = COLOR_ASSEMBLY_PURPLE,
"pink" = COLOR_ASSEMBLY_PINK,
"custom" = COLOR_ASSEMBLY_WHITE
)
/obj/item/integrated_electronics/detailer/Initialize()
@@ -43,6 +45,9 @@
if(!color_list[color_choice])
return
if(!in_range(src, user))
return
detail_color = color_list[color_choice]
return
if(color_choice == "custom")
detail_color = input(user,"","Choose Color",detail_color) as color|null
else
detail_color = color_list[color_choice]
update_icon()
@@ -1,139 +1,6 @@
/obj/item/integrated_circuit/manipulation
category_text = "Manipulation"
/obj/item/integrated_circuit/manipulation/weapon_firing
name = "weapon firing mechanism"
desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it."
extended_desc = "The firing mechanism can slot in any energy weapon. \
The first and second inputs need to be numbers which correspond to coordinates for the gun to fire at relative to the machine itself. \
The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode will switch between \
lethal (TRUE) or stun (FALSE) modes. It uses the internal battery of the weapon itself, not the assembly. If you wish to fire the gun while the circuit is in \
hand, you will need to use an assembly that is a gun."
complexity = 20
w_class = WEIGHT_CLASS_SMALL
size = 3
inputs = list(
"target X rel" = IC_PINTYPE_NUMBER,
"target Y rel" = IC_PINTYPE_NUMBER,
"mode" = IC_PINTYPE_BOOLEAN
)
outputs = list("reference to gun" = IC_PINTYPE_REF)
activators = list(
"fire" = IC_PINTYPE_PULSE_IN
)
var/obj/item/gun/energy/installed_gun = null
spawn_flags = IC_SPAWN_RESEARCH
action_flags = IC_ACTION_COMBAT
power_draw_per_use = 0
ext_cooldown = 1
var/mode = FALSE
var/stun_projectile = null //stun mode projectile type
var/stun_projectile_sound
var/lethal_projectile = null //lethal mode projectile type
var/lethal_projectile_sound
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
/obj/item/integrated_circuit/manipulation/weapon_firing/Destroy()
qdel(installed_gun)
return ..()
/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(var/obj/O, var/mob/user)
if(istype(O, /obj/item/gun/energy))
var/obj/item/gun/gun = O
if(installed_gun)
to_chat(user, "<span class='warning'>There's already a weapon installed.</span>")
return
user.transferItemToLoc(gun,src)
installed_gun = gun
var/list/gun_properties = gun.get_turret_properties()
to_chat(user, "<span class='notice'>You slide \the [gun] into the firing mechanism.</span>")
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
stun_projectile = gun_properties["stun_projectile"]
stun_projectile_sound = gun_properties["stun_projectile_sound"]
lethal_projectile = gun_properties["lethal_projectile"]
lethal_projectile_sound = gun_properties["lethal_projectile_sound"]
if(gun_properties["shot_delay"])
cooldown_per_use = gun_properties["shot_delay"]*10
if(cooldown_per_use<30)
cooldown_per_use = 30
if(gun_properties["reqpower"])
power_draw_per_use = gun_properties["reqpower"]
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
push_data()
else
..()
/obj/item/integrated_circuit/manipulation/weapon_firing/attack_self(var/mob/user)
if(installed_gun)
installed_gun.forceMove(drop_location())
to_chat(user, "<span class='notice'>You slide \the [installed_gun] out of the firing mechanism.</span>")
size = initial(size)
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
installed_gun = null
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
push_data()
else
to_chat(user, "<span class='notice'>There's no weapon to remove from the mechanism.</span>")
/obj/item/integrated_circuit/manipulation/weapon_firing/do_work()
if(!installed_gun || !installed_gun.handle_pins())
return
if(!isturf(assembly.loc) && !(assembly.can_fire_equipped && ishuman(assembly.loc)))
return
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
push_data()
var/datum/integrated_io/xo = inputs[1]
var/datum/integrated_io/yo = inputs[2]
var/datum/integrated_io/mode1 = inputs[3]
mode = mode1.data
if(assembly)
if(isnum(xo.data))
xo.data = round(xo.data, 1)
if(isnum(yo.data))
yo.data = round(yo.data, 1)
var/turf/T = get_turf(assembly)
var/target_x = CLAMP(T.x + xo.data, 0, world.maxx)
var/target_y = CLAMP(T.y + yo.data, 0, world.maxy)
assembly.visible_message("<span class='danger'>[assembly] fires [installed_gun]!</span>")
shootAt(locate(target_x, target_y, T.z))
/obj/item/integrated_circuit/manipulation/weapon_firing/proc/shootAt(turf/target)
var/turf/T = get_turf(src)
var/turf/U = target
if(!istype(T) || !istype(U))
return
if(!installed_gun.cell)
return
if(!installed_gun.cell.charge)
return
var/obj/item/ammo_casing/energy/shot = installed_gun.ammo_type[mode?2:1]
if(installed_gun.cell.charge < shot.e_cost)
return
if(!shot)
return
update_icon()
var/obj/item/projectile/A
if(!mode)
A = new stun_projectile(T)
playsound(loc, stun_projectile_sound, 75, 1)
else
A = new lethal_projectile(T)
playsound(loc, lethal_projectile_sound, 75, 1)
installed_gun.cell.use(shot.e_cost)
//Shooting Code:
A.preparePixelProjectile(target, src)
A.fire()
log_attack("[assembly] [REF(assembly)] has fired [installed_gun].")
return A
/obj/item/integrated_circuit/manipulation/locomotion
name = "locomotion circuit"
desc = "This allows a machine to move in a given direction."
@@ -171,80 +38,6 @@
return FALSE
return FALSE
/obj/item/integrated_circuit/manipulation/grenade
name = "grenade primer"
desc = "This circuit comes with the ability to attach most types of grenades and prime them at will."
extended_desc = "The time between priming and detonation is limited to between 1 to 12 seconds, but is optional. \
If the input is not set, not a number, or a number less than 1, the grenade's built-in timing will be used. \
Beware: Once primed, there is no aborting the process!"
icon_state = "grenade"
complexity = 30
cooldown_per_use = 10
inputs = list("detonation time" = IC_PINTYPE_NUMBER)
outputs = list()
activators = list("prime grenade" = IC_PINTYPE_PULSE_IN)
spawn_flags = IC_SPAWN_RESEARCH
action_flags = IC_ACTION_COMBAT
var/obj/item/grenade/attached_grenade
var/pre_attached_grenade_type
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
/obj/item/integrated_circuit/manipulation/grenade/Initialize()
. = ..()
if(pre_attached_grenade_type)
var/grenade = new pre_attached_grenade_type(src)
attach_grenade(grenade)
/obj/item/integrated_circuit/manipulation/grenade/Destroy()
if(attached_grenade && !attached_grenade.active)
attached_grenade.forceMove(loc)
detach_grenade()
return ..()
/obj/item/integrated_circuit/manipulation/grenade/attackby(var/obj/item/grenade/G, var/mob/user)
if(istype(G))
if(attached_grenade)
to_chat(user, "<span class='warning'>There is already a grenade attached!</span>")
else if(user.transferItemToLoc(G,src))
user.visible_message("<span class='warning'>\The [user] attaches \a [G] to \the [src]!</span>", "<span class='notice'>You attach \the [G] to \the [src].</span>")
attach_grenade(G)
G.forceMove(src)
else
return ..()
/obj/item/integrated_circuit/manipulation/grenade/attack_self(var/mob/user)
if(attached_grenade)
user.visible_message("<span class='warning'>\The [user] removes \an [attached_grenade] from \the [src]!</span>", "<span class='notice'>You remove \the [attached_grenade] from \the [src].</span>")
user.put_in_hands(attached_grenade)
detach_grenade()
else
return ..()
/obj/item/integrated_circuit/manipulation/grenade/do_work()
if(attached_grenade && !attached_grenade.active)
var/datum/integrated_io/detonation_time = inputs[1]
var/dt
if(isnum(detonation_time.data) && detonation_time.data > 0)
dt = CLAMP(detonation_time.data, 1, 12)*10
else
dt = 15
addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/prime), dt)
var/atom/holder = loc
message_admins("activated a grenade assembly. Last touches: Assembly: [holder.fingerprintslast] Circuit: [fingerprintslast] Grenade: [attached_grenade.fingerprintslast]")
// These procs do not relocate the grenade, that's the callers responsibility
/obj/item/integrated_circuit/manipulation/grenade/proc/attach_grenade(var/obj/item/grenade/G)
attached_grenade = G
G.forceMove(src)
desc += " \An [attached_grenade] is attached to it!"
/obj/item/integrated_circuit/manipulation/grenade/proc/detach_grenade()
if(!attached_grenade)
return
attached_grenade.forceMove(drop_location())
attached_grenade = null
desc = initial(desc)
/obj/item/integrated_circuit/manipulation/plant_module
name = "plant manipulation module"
desc = "Used to uproot weeds and harvest/plant trays."
@@ -478,7 +271,7 @@
/obj/item/integrated_circuit/manipulation/thrower
name = "thrower"
desc = "A compact launcher to throw things from inside or nearby tiles."
desc = "A compact launcher to throw things from inside or nearby tiles at a low enough velocity not to harm someone."
extended_desc = "The first and second inputs need to be numbers which correspond to the coordinates to throw objects at relative to the machine itself. \
The 'fire' activator will cause the mechanism to attempt to throw objects at the coordinates, if possible. Note that the \
projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \
@@ -544,7 +337,7 @@
A.embedding = list("embed_chance" = 0)
//throw it
assembly.visible_message("<span class='danger'>[assembly] has thrown [A]!</span>")
log_attack("[assembly] [REF(assembly)] has thrown [A].")
log_attack("[assembly] [REF(assembly)] has thrown [A] with non-lethal force.")
A.forceMove(drop_location())
A.throw_at(locate(x_abs, y_abs, T.z), range, 3, , , , CALLBACK(src, .proc/post_throw, A))
@@ -813,4 +606,7 @@
set_pin_data(IC_OUTPUT, 1, assembly.detail_color)
push_data()
activate_pin(3)
activate_pin(3)
@@ -548,9 +548,12 @@
desc = "Unlike most electronics, creating smoke is completely intentional."
icon_state = "smoke"
extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \
into the smoke clouds when activated. The reagents are consumed when the smoke is made."
into the smoke clouds when activated. The reagents are consumed when the smoke is made. Requires at least 10 units of reagents to generate smoke."
ext_cooldown = 1
volume = 100
container_type = OPENCONTAINER
complexity = 20
cooldown_per_use = 1 SECONDS
inputs = list()
@@ -573,6 +576,7 @@
if(changetype == ADD_REAGENT)
notified = FALSE
push_vol()
/obj/item/integrated_circuit/reagent/smoke/do_work(ord)
switch(ord)
if(1)
@@ -598,9 +602,10 @@
name = "integrated extinguisher"
desc = "This circuit sprays any of its contents out like an extinguisher."
icon_state = "injector"
extended_desc = "This circuit can hold up to 30 units of any given chemicals. On each use, it sprays these reagents like a fire extinguisher."
extended_desc = "This circuit can hold up to 30 units of any given chemicals. On each use, it sprays these reagents like a fire extinguisher. Requires at least 10 units of reagents to work."
volume = 30
container_type = OPENCONTAINER
complexity = 20
cooldown_per_use = 6 SECONDS
@@ -631,7 +636,7 @@
/obj/item/integrated_circuit/reagent/extinguisher/do_work()
//Check if enough volume
set_pin_data(IC_OUTPUT, 1, reagents.total_volume)
if(!reagents || reagents.total_volume < 5 || busy)
if(!reagents || reagents.total_volume < IC_SMOKE_REAGENTS_MINIMUM_UNITS || busy)
push_data()
activate_pin(3)
return
@@ -0,0 +1,343 @@
/obj/item/integrated_circuit/weaponized
category_text = "Weaponized"
/obj/item/integrated_circuit/weaponized/weapon_firing
name = "weapon firing mechanism"
desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it."
extended_desc = "The firing mechanism can slot in any energy weapon. \
The first and second inputs need to be numbers which correspond to coordinates for the gun to fire at relative to the machine itself. \
The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode will switch between \
lethal (TRUE) or stun (FALSE) modes. It uses the internal battery of the weapon itself, not the assembly. If you wish to fire the gun while the circuit is in \
hand, you will need to use an assembly that is a gun."
complexity = 20
w_class = WEIGHT_CLASS_SMALL
size = 3
inputs = list(
"target X rel" = IC_PINTYPE_NUMBER,
"target Y rel" = IC_PINTYPE_NUMBER,
"mode" = IC_PINTYPE_BOOLEAN
)
outputs = list("reference to gun" = IC_PINTYPE_REF)
activators = list(
"fire" = IC_PINTYPE_PULSE_IN
)
var/obj/item/gun/energy/installed_gun = null
spawn_flags = IC_SPAWN_RESEARCH
action_flags = IC_ACTION_COMBAT
power_draw_per_use = 0
ext_cooldown = 1
var/mode = FALSE
var/stun_projectile = null //stun mode projectile type
var/stun_projectile_sound
var/lethal_projectile = null //lethal mode projectile type
var/lethal_projectile_sound
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
/obj/item/integrated_circuit/weaponized/weapon_firing/Destroy()
qdel(installed_gun)
return ..()
/obj/item/integrated_circuit/weaponized/weapon_firing/attackby(var/obj/O, var/mob/user)
if(istype(O, /obj/item/gun/energy))
var/obj/item/gun/gun = O
if(installed_gun)
to_chat(user, "<span class='warning'>There's already a weapon installed.</span>")
return
user.transferItemToLoc(gun,src)
installed_gun = gun
var/list/gun_properties = gun.get_turret_properties()
to_chat(user, "<span class='notice'>You slide \the [gun] into the firing mechanism.</span>")
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
stun_projectile = gun_properties["stun_projectile"]
stun_projectile_sound = gun_properties["stun_projectile_sound"]
lethal_projectile = gun_properties["lethal_projectile"]
lethal_projectile_sound = gun_properties["lethal_projectile_sound"]
if(gun_properties["shot_delay"])
cooldown_per_use = gun_properties["shot_delay"]*10
if(cooldown_per_use<30)
cooldown_per_use = 30
if(gun_properties["reqpower"])
power_draw_per_use = gun_properties["reqpower"]
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
push_data()
else
..()
/obj/item/integrated_circuit/weaponized/weapon_firing/attack_self(var/mob/user)
if(installed_gun)
installed_gun.forceMove(drop_location())
to_chat(user, "<span class='notice'>You slide \the [installed_gun] out of the firing mechanism.</span>")
size = initial(size)
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
installed_gun = null
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
push_data()
else
to_chat(user, "<span class='notice'>There's no weapon to remove from the mechanism.</span>")
/obj/item/integrated_circuit/weaponized/weapon_firing/do_work()
if(!installed_gun || !installed_gun.handle_pins())
return
if(!isturf(assembly.loc) && !(assembly.can_fire_equipped && ishuman(assembly.loc)))
return
set_pin_data(IC_OUTPUT, 1, WEAKREF(installed_gun))
push_data()
var/datum/integrated_io/xo = inputs[1]
var/datum/integrated_io/yo = inputs[2]
var/datum/integrated_io/mode1 = inputs[3]
mode = mode1.data
if(assembly)
if(isnum(xo.data))
xo.data = round(xo.data, 1)
if(isnum(yo.data))
yo.data = round(yo.data, 1)
var/turf/T = get_turf(assembly)
var/target_x = CLAMP(T.x + xo.data, 0, world.maxx)
var/target_y = CLAMP(T.y + yo.data, 0, world.maxy)
assembly.visible_message("<span class='danger'>[assembly] fires [installed_gun]!</span>")
shootAt(locate(target_x, target_y, T.z))
/obj/item/integrated_circuit/weaponized/weapon_firing/proc/shootAt(turf/target)
var/turf/T = get_turf(src)
var/turf/U = target
if(!istype(T) || !istype(U))
return
if(!installed_gun.cell)
return
if(!installed_gun.cell.charge)
return
var/obj/item/ammo_casing/energy/shot = installed_gun.ammo_type[mode?2:1]
if(installed_gun.cell.charge < shot.e_cost)
return
if(!shot)
return
update_icon()
var/obj/item/projectile/A
if(!mode)
A = new stun_projectile(T)
playsound(loc, stun_projectile_sound, 75, 1)
else
A = new lethal_projectile(T)
playsound(loc, lethal_projectile_sound, 75, 1)
installed_gun.cell.use(shot.e_cost)
//Shooting Code:
A.preparePixelProjectile(target, src)
A.fire()
log_attack("[assembly] [REF(assembly)] has fired [installed_gun].")
return A
/obj/item/integrated_circuit/weaponized/grenade
name = "grenade primer"
desc = "This circuit comes with the ability to attach most types of grenades and prime them at will."
extended_desc = "The time between priming and detonation is limited to between 1 to 12 seconds, but is optional. \
If the input is not set, not a number, or a number less than 1, the grenade's built-in timing will be used. \
Beware: Once primed, there is no aborting the process!"
icon_state = "grenade"
complexity = 30
cooldown_per_use = 10
inputs = list("detonation time" = IC_PINTYPE_NUMBER)
outputs = list()
activators = list("prime grenade" = IC_PINTYPE_PULSE_IN)
spawn_flags = IC_SPAWN_RESEARCH
action_flags = IC_ACTION_COMBAT
var/obj/item/grenade/attached_grenade
var/pre_attached_grenade_type
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
/obj/item/integrated_circuit/weaponized/grenade/Initialize()
. = ..()
if(pre_attached_grenade_type)
var/grenade = new pre_attached_grenade_type(src)
attach_grenade(grenade)
/obj/item/integrated_circuit/weaponized/grenade/Destroy()
if(attached_grenade && !attached_grenade.active)
attached_grenade.forceMove(loc)
detach_grenade()
return ..()
/obj/item/integrated_circuit/weaponized/grenade/attackby(var/obj/item/grenade/G, var/mob/user)
if(istype(G))
if(attached_grenade)
to_chat(user, "<span class='warning'>There is already a grenade attached!</span>")
else if(user.transferItemToLoc(G,src))
user.visible_message("<span class='warning'>\The [user] attaches \a [G] to \the [src]!</span>", "<span class='notice'>You attach \the [G] to \the [src].</span>")
attach_grenade(G)
G.forceMove(src)
else
return ..()
/obj/item/integrated_circuit/weaponized/grenade/attack_self(var/mob/user)
if(attached_grenade)
user.visible_message("<span class='warning'>\The [user] removes \an [attached_grenade] from \the [src]!</span>", "<span class='notice'>You remove \the [attached_grenade] from \the [src].</span>")
user.put_in_hands(attached_grenade)
detach_grenade()
else
return ..()
/obj/item/integrated_circuit/weaponized/grenade/do_work()
if(attached_grenade && !attached_grenade.active)
var/datum/integrated_io/detonation_time = inputs[1]
var/dt
if(isnum(detonation_time.data) && detonation_time.data > 0)
dt = CLAMP(detonation_time.data, 1, 12)*10
else
dt = 15
addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/prime), dt)
var/atom/holder = loc
message_admins("activated a grenade assembly. Last touches: Assembly: [holder.fingerprintslast] Circuit: [fingerprintslast] Grenade: [attached_grenade.fingerprintslast]")
// These procs do not relocate the grenade, that's the callers responsibility
/obj/item/integrated_circuit/weaponized/grenade/proc/attach_grenade(var/obj/item/grenade/G)
attached_grenade = G
G.forceMove(src)
desc += " \An [attached_grenade] is attached to it!"
/obj/item/integrated_circuit/weaponized/grenade/proc/detach_grenade()
if(!attached_grenade)
return
attached_grenade.forceMove(drop_location())
attached_grenade = null
desc = initial(desc)
/obj/item/integrated_circuit/weaponized/air_cannon
name = "pneumatic cannon"
desc = "A compact pneumatic cannon to throw things from inside or nearby tiles at a high enough velocity to cause damage. Requires air from a canister to fire."
extended_desc = "The first and second inputs need to be numbers which correspond to the coordinates to throw objects at relative to the machine itself. \
The 'fire' activator will cause the mechanism to attempt to launch objects at the coordinates, if possible. Note that the \
projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \
must also be a gun if you wish to launch something while the assembly is in hand."
complexity = 75
w_class = WEIGHT_CLASS_SMALL
size = 4
cooldown_per_use = 30
ext_cooldown = 15
inputs = list(
"target X rel" = IC_PINTYPE_NUMBER,
"target Y rel" = IC_PINTYPE_NUMBER,
"projectile" = IC_PINTYPE_REF,
"canister" = IC_PINTYPE_REF
)
outputs = list()
activators = list(
"fire" = IC_PINTYPE_PULSE_IN
)
spawn_flags = IC_SPAWN_RESEARCH
action_flags = IC_ACTION_COMBAT
power_draw_per_use = 50
var/gas_per_throw = 6
/obj/item/integrated_circuit/weaponized/air_cannon/do_work()
var/max_w_class = assembly.w_class
var/target_x_rel = round(get_pin_data(IC_INPUT, 1))
var/target_y_rel = round(get_pin_data(IC_INPUT, 2))
var/obj/item/A = get_pin_data_as_type(IC_INPUT, 3, /obj/item)
var/obj/item/integrated_circuit/atmospherics/AT = get_pin_data_as_type(IC_INPUT, 4, /obj/item/integrated_circuit/atmospherics)
if(!A || A.anchored || A.throwing || A == assembly || istype(A, /obj/item/twohanded) || istype(A, /obj/item/transfer_valve))
return
if(!AT || !AT.air_contents)
return
if (istype(assembly.loc, /obj/item/implant/storage)) //Prevents the more abusive form of chestgun.
return
if(max_w_class && (A.w_class > max_w_class))
return
if(!assembly.can_fire_equipped && ishuman(assembly.loc))
return
// Is the target inside the assembly or close to it?
if(!check_target(A, exclude_components = TRUE))
return
var/turf/T = get_turf(get_object())
if(!T)
return
// If the item is in mob's inventory, try to remove it from there.
if(ismob(A.loc))
var/mob/living/M = A.loc
if(!M.temporarilyRemoveItemFromInventory(A))
return
var/datum/gas_mixture/source_air = AT.return_air()
var/datum/gas_mixture/target_air = T.return_air()
if(!source_air || !target_air)
return
var/datum/gas_mixture/removed = source_air.remove(gas_per_throw)
if(!removed)
return
target_air.merge(removed)
// If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it.
var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc
var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx)
var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy)
var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1)
assembly.visible_message("<span class='danger'>\The [assembly] has thrown [A]!</span>")
log_attack("[assembly] [REF(assembly)] has thrown [A] with lethal force.")
A.forceMove(drop_location())
A.throw_at(locate(x_abs, y_abs, T.z), range, 3)
air_update_turf()
// If the item came from a grabber now we can update the outputs since we've thrown it.
if(istype(G))
G.update_outputs()
/obj/item/integrated_circuit/weaponized/stun
name = "electronic stun module"
desc = "Used to stun a target holding the device via electricity."
icon_state = "power_relay"
extended_desc = "Attempts to stun the holder of this device, with the strength input being the strength of the stun, from 1 to 70."
complexity = 60
size = 4
inputs = list("strength" = IC_PINTYPE_NUMBER)
activators = list("stun" = IC_PINTYPE_PULSE_IN, "on success" = IC_PINTYPE_PULSE_OUT, "on fail" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_RESEARCH
power_draw_per_use = 2000
cooldown_per_use = 50
ext_cooldown = 25
/obj/item/integrated_circuit/weaponized/stun/do_work()
var/stunforce = CLAMP(get_pin_data(IC_INPUT, 1),1,70)
var/mob/living/L = assembly.loc
if(attempt_stun(L,stunforce))
activate_pin(2)
else
activate_pin(3)
/obj/item/integrated_circuit/weaponized/proc/attempt_stun(var/mob/living/L,var/stunforce = 70) //Copied from stunbaton code.
if(!L || !isliving(L))
return 0
L.Knockdown(stunforce)
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
message_admins("stunned someone with an assembly. Last touches: Assembly: [assembly.fingerprintslast] Circuit: [fingerprintslast]")
L.visible_message("<span class='danger'>\The [assembly] has stunned \the [L] with \the [src]!</span>", "<span class='userdanger'>\The [assembly] has stunned you with \the [src]!</span>")
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
if(ishuman(L))
var/mob/living/carbon/human/H = L
H.forcesay(GLOB.hit_appends)
return 1
@@ -774,7 +774,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(!forced_colour)
switch(S.color_src)
if(SKINTONE)
accessory_overlay.color = skintone2hex(H.skin_tone)
accessory_overlay.color = "#[skintone2hex(H.skin_tone)]"
if(MUTCOLORS)
if(fixed_mut_color)
accessory_overlay.color = "#[fixed_mut_color]"
@@ -1478,7 +1478,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
target.forcesay(GLOB.hit_appends)
/datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
// CITADEL EDIT slap mouthy gits
// CITADEL EDIT slap mouthy gits and booty
var/aim_for_mouth = user.zone_selected == "mouth"
var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item()
var/target_aiming_for_mouth = target.zone_selected == "mouth"
@@ -1488,7 +1488,22 @@ GLOBAL_LIST_EMPTY(roundstart_races)
user.visible_message("<span class='danger'>[user] slaps [target] in the face!</span>",
"<span class='notice'>You slap [target] in the face! </span>",\
"You hear a slap.")
stop_wagging_tail(target)
if (!target.has_trait(TRAIT_NYMPHO))
stop_wagging_tail(target)
return FALSE
var/aim_for_groin = user.zone_selected == "groin"
var/target_aiming_for_groin = target.zone_selected == "groin"
if(aim_for_groin && (target_on_help_and_unarmed || target_restrained || target_aiming_for_groin))
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
user.visible_message("<span class='danger'>[user] slaps [target]'s ass!</span>",
"<span class='notice'>You slap [target]'s ass! </span>",\
"You hear a slap.")
if (target.canbearoused)
target.adjustArousalLoss(5)
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna())
target.mob_climax(forced_climax=TRUE)
if (!target.has_trait(TRAIT_NYMPHO))
stop_wagging_tail(target)
return FALSE
else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
to_chat(user, "<span class='warning'>You're too exhausted.</span>")
@@ -3,7 +3,7 @@
id = "abductor"
say_mod = "gibbers"
sexes = FALSE
species_traits = list(NOBLOOD,NOEYES)
species_traits = list(NOBLOOD,NOEYES,NOGENITALS)
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
mutanttongue = /obj/item/organ/tongue/abductor
var/scientist = FALSE // vars to not pollute spieces list with castes
@@ -2,7 +2,7 @@
name = "Android"
id = "android"
say_mod = "states"
species_traits = list(NOBLOOD)
species_traits = list(NOBLOOD,NOGENITALS)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
meat = null
@@ -15,6 +15,6 @@
attack_sound = 'sound/weapons/resonator_blast.ogg'
blacklisted = 1
use_skintones = 0
species_traits = list(NOBLOOD,EYECOLOR)
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
sexes = 0
@@ -2,7 +2,7 @@
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
name = "Golem"
id = "iron golem"
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR)
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
mutant_organs = list(/obj/item/organ/adamantine_resonator)
@@ -9,7 +9,7 @@
nojumpsuit = TRUE
say_mod = "poofs" //what does a mushroom sound like
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR)
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS)
inherent_traits = list(TRAIT_NOBREATH)
speedmod = 1.5 //faster than golems but not by much
@@ -4,7 +4,7 @@
say_mod = "rattles"
sexes = 0
meat = /obj/item/stack/sheet/mineral/plasma
species_traits = list(NOBLOOD,NOTRANSSTING)
species_traits = list(NOBLOOD,NOTRANSSTING,NOGENITALS)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER)
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
mutantlungs = /obj/item/organ/lungs/plasmaman
@@ -12,6 +12,11 @@
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
disliked_food = MEAT | DAIRY
liked_food = VEGETABLES | FRUIT | GRAIN
var/light_nutrition_gain_factor = 10
var/light_toxheal = 1
var/light_oxyheal = 1
var/light_burnheal = 1
var/light_bruteheal = 1
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
@@ -31,13 +36,13 @@
if(isturf(H.loc)) //else, there's considered to be no light
var/turf/T = H.loc
light_amount = min(1,T.get_lumcount()) - 0.5
H.nutrition += light_amount * 10
H.nutrition += light_amount * light_nutrition_gain_factor
if(H.nutrition > NUTRITION_LEVEL_FULL)
H.nutrition = NUTRITION_LEVEL_FULL
if(light_amount > 0.2) //if there's enough light, heal
H.heal_overall_damage(1,1)
H.adjustToxLoss(-1)
H.adjustOxyLoss(-1)
H.heal_overall_damage(light_bruteheal, light_burnheal)
H.adjustToxLoss(-light_toxheal)
H.adjustOxyLoss(-light_oxyheal)
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
H.take_overall_damage(2,0)
@@ -65,3 +70,11 @@
H.show_message("<span class='userdanger'>The radiation beam singes you!</span>")
if(/obj/item/projectile/energy/florayield)
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
/datum/species/pod/pseudo_weak
id = "podweak"
limbs_id = "pod"
light_nutrition_gain_factor = 7.5
light_bruteheal = 0.2
light_burnheal = 0.2
light_toxheal = 0.7
@@ -38,7 +38,7 @@
burnmod = 1.5
blacklisted = TRUE
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES)
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
mutant_organs = list(/obj/item/organ/heart/nightmare)
@@ -6,7 +6,7 @@
blacklisted = 1
sexes = 0
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
species_traits = list(NOBLOOD)
species_traits = list(NOBLOOD,NOGENITALS)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH)
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
mutanttongue = /obj/item/organ/tongue/bone
@@ -3,7 +3,7 @@
id = "synth"
say_mod = "beep boops" //inherited from a user's real species
sexes = 0
species_traits = list(NOTRANSSTING) //all of these + whatever we inherit from the real species
species_traits = list(NOTRANSSTING,NOGENITALS) //all of these + whatever we inherit from the real species
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
dangerous_existence = 1
@@ -102,20 +102,19 @@
set category = "Object"
set src in oview(1)
var/datum/belly/B = vore_organs[vore_selected]
if(faction != usr.faction)
to_chat(usr,"<span class='warning'>This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you.</span>")
return
if(B.digest_mode == "Hold")
var/mob/living/carbon/human/user = usr
if(!istype(user) || user.stat) return
if(vore_selected.digest_mode == DM_HOLD)
var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel")
if(confirm == "Enable")
B.digest_mode = "Digest"
sleep(20 MINUTES) //12000=20 minutes
B.digest_mode = "Hold"
vore_selected.digest_mode = DM_DIGEST
sleep(20 MINUTES)
vore_selected.digest_mode = vore_default_mode
else
var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel")
if(confirm == "Disable")
B.digest_mode = "Hold"
vore_selected.digest_mode = DM_HOLD
//
// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs.
@@ -4,12 +4,25 @@
if(!ninjacost(0,N_ADRENALINE))
var/mob/living/carbon/human/H = affecting
H.SetUnconscious(0)
H.SetSleeping(0)
H.SetStun(0)
H.SetKnockdown(0)
H.adjustStaminaLoss(-75)
H.SetUnconscious(0)
H.adjustStaminaLoss(-150)
H.stuttering = 0
H.updatehealth()
H.update_stamina()
H.resting = 0
H.lying = 0
H.update_canmove()
H.reagents.add_reagent("inaprovaline", 3) //let's give another chance to dumb fucks who forget to breathe
H.reagents.add_reagent("synaptizine", 10)
H.reagents.add_reagent("omnizine", 10)
H.reagents.add_reagent("stimulants", 10)
H.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"), forced = "ninjaboost")
a_boost--
to_chat(H, "<span class='notice'>There are <B>[a_boost]</B> adrenaline boosts remaining.</span>")
s_coold = 3
@@ -299,4 +299,8 @@
ammo_type = list(/obj/item/ammo_casing/energy/gravity/repulse, /obj/item/ammo_casing/energy/gravity/attract, /obj/item/ammo_casing/energy/gravity/chaos)
item_state = "gravity_gun"
icon_state = "gravity_gun"
pin = null
var/power = 4
/obj/item/gun/energy/gravity_gun/security
pin = /obj/item/firing_pin
+2 -2
View File
@@ -269,11 +269,11 @@
if(C.reagent_check(R) != 1)
if(can_overdose)
if(R.overdose_threshold)
if(R.volume >= R.overdose_threshold && !R.overdosed)
if(R.volume > R.overdose_threshold && !R.overdosed)
R.overdosed = 1
need_mob_update += R.overdose_start(C)
if(R.addiction_threshold)
if(R.volume >= R.addiction_threshold && !is_type_in_list(R, cached_addictions))
if(R.volume > R.addiction_threshold && !is_type_in_list(R, cached_addictions))
var/datum/reagent/new_reagent = new R.type()
cached_addictions.Add(new_reagent)
if(R.overdosed)
@@ -304,13 +304,14 @@
reagent_state = SOLID
color = "#000067" // rgb: 0, 0, 103
toxpwr = 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
metabolization_rate = 1 * REAGENTS_METABOLISM
/datum/reagent/toxin/chloralhydratedelayed/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
if(10 to 20)
M.confused += 1
M.drowsyness += 1
M.adjustStaminaLoss(7.5)
if(20 to INFINITY)
M.Sleeping(40, 0)
..()
@@ -870,3 +870,19 @@
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/disk/holodisk
category = list("initial", "Misc")
/datum/design/lock_collar
name = "Lockable Collar"
id = "lock_collar"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1200, MAT_GLASS = 100)
build_path = /obj/item/clothing/neck/petcollar/locked
category = list("initial", "Misc")
/datum/design/collar_key
name = "Collar Key"
id = "collar_key"
build_type = AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 150)
build_path = /obj/item/key/collar
category = list("initial", "Misc")
@@ -24,6 +24,17 @@
dangerous_construction = TRUE
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/satchel_holding
name = "Satchel of Holding"
desc = "A satchel that opens into a localized pocket of bluespace."
id = "satchel_holding"
build_type = PROTOLATHE
materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250, MAT_BLUESPACE = 2000)
build_path = /obj/item/storage/backpack/holding/satchel
category = list("Bluespace Designs")
dangerous_construction = TRUE
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/biobag_holding
name = "Bio Bag of Holding"
desc = "A chemical holding thingy. Mostly used for xenobiology."
+1 -1
View File
@@ -246,7 +246,7 @@
display_name = "Bluespace Pockets"
description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality."
prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma")
design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash")
design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500)
export_price = 5000
/////////////////////////plasma tech/////////////////////////
+21 -14
View File
@@ -45,7 +45,8 @@
var/species_color = ""
var/mutation_color = ""
var/no_update = 0
var/body_markings //for bodypart markings
var/body_markings = "" //for bodypart markings
var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi'
var/list/markings_color = list()
var/auxmarking
var/list/auxmarking_color = list()
@@ -260,6 +261,7 @@
icon = DEFAULT_BODYPART_ICON_ORGANIC
else if(status == BODYPART_ROBOTIC)
icon = DEFAULT_BODYPART_ICON_ROBOTIC
body_markings = null
if(owner)
owner.updatehealth()
@@ -332,14 +334,18 @@
species_color = ""
if("mam_body_markings" in S.default_features)
var/datum/sprite_accessory/Smark
Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
if(H.dna.features.["mam_body_markings"] != "None")
body_markings_icon = Smark.icon
body_markings = lowertext(H.dna.features.["mam_body_markings"])
if(MATRIXED)
markings_color = list(colorlist)
else
body_markings = "plain"
markings_color = (H.dna.features.["mcolor"])
else
body_markings = "None"
body_markings = null
markings_color = ""
if(!dropping_limb && H.dna.check_mutation(HULK))
@@ -354,6 +360,7 @@
if(status == BODYPART_ROBOTIC)
dmg_overlay_type = "robotic"
body_markings = null
if(dropping_limb)
no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner.
@@ -385,11 +392,11 @@
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0", -DAMAGE_LAYER, image_dir)
if(burnstate)
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir)
if(body_markings)
if(body_markings && status != BODYPART_ROBOTIC)
if(use_digitigrade == NOT_DIGITIGRADE)
. += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
. += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
. += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir)
var/image/aux
@@ -447,9 +454,9 @@
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking
// Citadel End
@@ -461,7 +468,7 @@
if(species_id == "husk")
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
else
auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir)
auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir)
. += auxmarking
else
@@ -475,21 +482,21 @@
. += aux
if(body_markings)
if(species_id == "husk")
auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
else
auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir)
auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir)
. += auxmarking
if(body_markings)
if(species_id == "husk")
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
else if(species_id == "husk" && use_digitigrade)
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking
return
@@ -178,6 +178,7 @@
L.update_limb(fixed_icon, src)
if(robotic)
L.change_bodypart_status(BODYPART_ROBOTIC)
L.body_markings = null
. = L
/mob/living/carbon/monkey/newBodyPart(zone, robotic, fixed_icon)
+69
View File
@@ -0,0 +1,69 @@
/obj/item/nutcracker
name = "nutcracker"
desc = "It seems quite oversized. You could probably even crush a watermelon with it."
icon = 'icons/obj/surgery.dmi'
icon_state = "nutcracker"
force = 10
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("smashed", "beaten", "crushed")
/obj/item/nutcracker/proc/gib_head(mob/living/carbon/M)
var/obj/item/bodypart/head = M.get_bodypart("head")
if(!head)
return
var/turf/T = get_turf(M)
var/list/organs = M.getorganszone("head") + M.getorganszone("eyes") + M.getorganszone("mouth")
for(var/internal_organ in organs)
var/obj/item/organ/I = internal_organ
I.Remove(M)
I.forceMove(T)
head.drop_limb()
qdel(head)
new M.gib_type(T,1,M.get_static_viruses())
M.add_splatter_floor(T)
playsound(M, 'sound/effects/splat.ogg', 50, 1)
//It's a bit of a clusterfuck, but if someone wants, it can be easily repurposed to work on other limbs too.
/obj/item/nutcracker/attack(mob/living/carbon/M, mob/living/carbon/user)
. = ..()
var/target_zone = "head"
var/obj/item/bodypart/target_limb = M.get_bodypart(target_zone)
if(!get_turf(M))
return
if(!istype(M))
return
if(M == user) //just use the suicide verb instead
return
if(user.zone_selected != "head")
return
if(!target_limb)
to_chat(user, "<span class='notice'>[M] has no [parse_zone(target_zone)]!</span>")
return
if(!get_location_accessible(M, target_zone))
to_chat(user, "<span class='notice'>Expose [M]\s head before trying to crush it!</span>")
return
M.visible_message("<span class='warning'>[user] is trying to crush [M]\s head with \the [src]!</span>")
var/crush_time = max(0, 400 - target_limb.brute_dam*2)
if(do_mob(user, M, crush_time))
if(get_location_accessible(M, target_zone)) //Yes, two checks, before and after the timer. What if someone puts a helmet on the guy while you're crushing his head?
if(target_limb)//If he still has the head. In case you queue up a lot of these up at once or the guy loses the head while you're removing it.
M.visible_message("<span class='warning'>[M]\s head cracks like a watermelon, spilling everything inside, as it becomes an unrecognizable mess!</span>")
gib_head(M)
else
to_chat(user, "<span class='notice'>Expose [M]\s head before trying to crush it!</span>")
/obj/item/nutcracker/suicide_act(mob/living/carbon/user)
var/obj/item/bodypart/target_limb = user.get_bodypart("head")
if(target_limb) //I mean like... for example lings can be still alive without heads.
user.visible_message("<span class='suicide'>[user] is crushing [user.p_their()] own head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
if(do_after(user, 30))
gib_head(user)
else
return
return (BRUTELOSS)
+4
View File
@@ -113,6 +113,10 @@
if(owner)
to_chat(owner, "<span class ='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
/obj/item/organ/heart/cursed/Remove(mob/living/carbon/M, special = 0)
..()
M.remove_client_colour(/datum/client_colour/cursed_heart_blood)
/datum/action/item_action/organ_action/cursed_heart
name = "Pump your blood"
+14 -1
View File
@@ -988,6 +988,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/storage/backpack/duffelbag/syndie/surgery
cost = 3
/datum/uplink_item/device_tools/nutcracker
name = "Nutcracker"
desc = "An oversized version of what you'd initially expect here. Big enough to crush skulls."
item = /obj/item/nutcracker
cost = 1
/datum/uplink_item/device_tools/surgerybag_adv
name = "Syndicate Surgery Duffel Bag"
desc = "The Syndicate surgery duffel bag is a toolkit containing all newest surgery tools, surgical drapes, \
@@ -1438,6 +1444,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 20
restricted_roles = list("Assistant")
/datum/uplink_item/role_restricted/goldenbox
name = "Gold Toolbox"
desc = "A gold planted plastitanium toolbox loaded with tools. Comes with a set of AI detection multi-tool and a pare of combat gloves."
item = /obj/item/storage/toolbox/gold_real
cost = 5 // Has synda tools + gloves + a robust weapon
restricted_roles = list("Assistant", "Curator") //Curator do to being made of gold - It fits the theme
/datum/uplink_item/role_restricted/brainwash_disk
name = "Brainwashing Surgery Program"
desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \
@@ -1504,7 +1517,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 15
restricted_roles = list("Clown")
/datum/uplink_item/device_tools/honkpins //Idealy so they can place it into their own guns without needing cargo
/datum/uplink_item/device_tools/honkpins //Idealy so they can place it into their own guns without needing cargo
name = "Hilarious firing pin"
desc = "A single firing pin made for Clown agents, this firing pin makes any gun honk when fired if not a true clown! \
This firing pin also helps you fire the gun correctly. May the HonkMother HONK you agent."
+107 -107
View File
@@ -6,114 +6,114 @@
icon_deny = "clothes-deny"
product_slogans = "Dress for success!;Prepare to look swagalicious!;Look at all this free swag!;Why leave style up to fate? Use the ClothesMate!"
vend_reply = "Thank you for using the ClothesMate!"
products = list(/obj/item/clothing/head/that = 2,
/obj/item/clothing/head/fedora = 1,
/obj/item/clothing/glasses/monocle = 1,
/obj/item/clothing/suit/jacket = 2,
/obj/item/clothing/suit/jacket/puffer/vest = 2,
/obj/item/clothing/suit/jacket/puffer = 2,
/obj/item/clothing/under/suit_jacket/navy = 1,
/obj/item/clothing/under/suit_jacket/really_black = 1,
/obj/item/clothing/under/suit_jacket/burgundy = 1,
/obj/item/clothing/under/suit_jacket/charcoal = 1,
/obj/item/clothing/under/suit_jacket/white = 1,
/obj/item/clothing/under/kilt = 1,
/obj/item/clothing/under/overalls = 1,
/obj/item/clothing/under/sl_suit = 1,
/obj/item/clothing/under/pants/jeans = 3,
/obj/item/clothing/under/pants/classicjeans = 2,
/obj/item/clothing/under/pants/camo = 1,
/obj/item/clothing/under/pants/blackjeans = 2,
/obj/item/clothing/under/pants/khaki = 2,
/obj/item/clothing/under/pants/white = 2,
/obj/item/clothing/under/pants/red = 1,
/obj/item/clothing/under/pants/black = 2,
/obj/item/clothing/under/pants/tan = 2,
/obj/item/clothing/under/pants/track = 1,
/obj/item/clothing/suit/jacket/miljacket = 1,
/obj/item/clothing/neck/tie/blue = 1,
/obj/item/clothing/neck/tie/red = 1,
/obj/item/clothing/neck/tie/black = 1,
/obj/item/clothing/neck/tie/horrible = 1,
/obj/item/clothing/neck/scarf/pink = 1,
/obj/item/clothing/neck/scarf/red = 1,
/obj/item/clothing/neck/scarf/green = 1,
/obj/item/clothing/neck/scarf/darkblue = 1,
/obj/item/clothing/neck/scarf/purple = 1,
/obj/item/clothing/neck/scarf/yellow = 1,
/obj/item/clothing/neck/scarf/orange = 1,
/obj/item/clothing/neck/scarf/cyan = 1,
/obj/item/clothing/neck/scarf = 1,
/obj/item/clothing/neck/scarf/black = 1,
/obj/item/clothing/neck/scarf/zebra = 1,
/obj/item/clothing/neck/scarf/christmas = 1,
/obj/item/clothing/neck/stripedredscarf = 1,
/obj/item/clothing/neck/stripedbluescarf = 1,
/obj/item/clothing/neck/stripedgreenscarf = 1,
/obj/item/clothing/accessory/waistcoat = 1,
/obj/item/clothing/under/skirt/black = 1,
/obj/item/clothing/under/skirt/blue = 1,
/obj/item/clothing/under/skirt/red = 1,
/obj/item/clothing/under/skirt/purple = 1,
/obj/item/clothing/under/sundress = 2,
/obj/item/clothing/under/stripeddress = 1,
/obj/item/clothing/under/sailordress = 1,
/obj/item/clothing/under/redeveninggown = 1,
/obj/item/clothing/under/blacktango = 1,
/obj/item/clothing/under/plaid_skirt = 1,
/obj/item/clothing/under/plaid_skirt/blue = 1,
/obj/item/clothing/under/plaid_skirt/purple = 1,
/obj/item/clothing/under/plaid_skirt/green = 1,
/obj/item/clothing/glasses/regular = 1,
/obj/item/clothing/glasses/regular/jamjar = 1,
/obj/item/clothing/head/sombrero = 1,
/obj/item/clothing/suit/poncho = 1,
/obj/item/clothing/suit/ianshirt = 1,
/obj/item/clothing/shoes/laceup = 2,
/obj/item/clothing/shoes/sneakers/black = 4,
/obj/item/clothing/shoes/sandal = 1,
/obj/item/clothing/gloves/fingerless = 2,
/obj/item/clothing/glasses/orange = 1,
/obj/item/clothing/glasses/red = 1,
/obj/item/storage/belt/fannypack = 1,
/obj/item/storage/belt/fannypack/blue = 1,
/obj/item/storage/belt/fannypack/red = 1,
/obj/item/clothing/suit/jacket/letterman = 2,
/obj/item/clothing/head/beanie = 1,
/obj/item/clothing/head/beanie/black = 1,
/obj/item/clothing/head/beanie/red = 1,
/obj/item/clothing/head/beanie/green = 1,
/obj/item/clothing/head/beanie/darkblue = 1,
/obj/item/clothing/head/beanie/purple = 1,
/obj/item/clothing/head/beanie/yellow = 1,
/obj/item/clothing/head/beanie/orange = 1,
/obj/item/clothing/head/beanie/cyan = 1,
/obj/item/clothing/head/beanie/christmas = 1,
/obj/item/clothing/head/beanie/striped = 1,
/obj/item/clothing/head/beanie/stripedred = 1,
/obj/item/clothing/head/beanie/stripedblue = 1,
/obj/item/clothing/head/beanie/stripedgreen = 1,
/obj/item/clothing/suit/jacket/letterman_red = 1,
products = list(/obj/item/clothing/head/that = 4,
/obj/item/clothing/head/fedora = 3,
/obj/item/clothing/glasses/monocle = 3,
/obj/item/clothing/suit/jacket = 4,
/obj/item/clothing/suit/jacket/puffer/vest = 4,
/obj/item/clothing/suit/jacket/puffer = 4,
/obj/item/clothing/under/suit_jacket/navy = 3,
/obj/item/clothing/under/suit_jacket/really_black = 3,
/obj/item/clothing/under/suit_jacket/burgundy = 3,
/obj/item/clothing/under/suit_jacket/charcoal = 3,
/obj/item/clothing/under/suit_jacket/white = 3,
/obj/item/clothing/under/kilt = 3,
/obj/item/clothing/under/overalls = 3,
/obj/item/clothing/under/sl_suit = 3,
/obj/item/clothing/under/pants/jeans = 5,
/obj/item/clothing/under/pants/classicjeans = 5,
/obj/item/clothing/under/pants/camo = 3,
/obj/item/clothing/under/pants/blackjeans = 5,
/obj/item/clothing/under/pants/khaki = 5,
/obj/item/clothing/under/pants/white = 5,
/obj/item/clothing/under/pants/red = 3,
/obj/item/clothing/under/pants/black = 4,
/obj/item/clothing/under/pants/tan = 4,
/obj/item/clothing/under/pants/track = 3,
/obj/item/clothing/suit/jacket/miljacket = 5,
/obj/item/clothing/neck/tie/blue = 3,
/obj/item/clothing/neck/tie/red = 3,
/obj/item/clothing/neck/tie/black = 3,
/obj/item/clothing/neck/tie/horrible = 5,
/obj/item/clothing/neck/scarf/pink = 3,
/obj/item/clothing/neck/scarf/red = 3,
/obj/item/clothing/neck/scarf/green = 3,
/obj/item/clothing/neck/scarf/darkblue = 3,
/obj/item/clothing/neck/scarf/purple = 3,
/obj/item/clothing/neck/scarf/yellow = 3,
/obj/item/clothing/neck/scarf/orange = 3,
/obj/item/clothing/neck/scarf/cyan = 3,
/obj/item/clothing/neck/scarf = 3,
/obj/item/clothing/neck/scarf/black = 3,
/obj/item/clothing/neck/scarf/zebra = 3,
/obj/item/clothing/neck/scarf/christmas = 3,
/obj/item/clothing/neck/stripedredscarf = 3,
/obj/item/clothing/neck/stripedbluescarf = 3,
/obj/item/clothing/neck/stripedgreenscarf = 3,
/obj/item/clothing/accessory/waistcoat = 2,
/obj/item/clothing/under/skirt/black = 3,
/obj/item/clothing/under/skirt/blue = 3,
/obj/item/clothing/under/skirt/red = 3,
/obj/item/clothing/under/skirt/purple = 3,
/obj/item/clothing/under/sundress = 4,
/obj/item/clothing/under/stripeddress = 3,
/obj/item/clothing/under/sailordress = 3,
/obj/item/clothing/under/redeveninggown = 3,
/obj/item/clothing/under/blacktango = 3,
/obj/item/clothing/under/plaid_skirt = 3,
/obj/item/clothing/under/plaid_skirt/blue = 3,
/obj/item/clothing/under/plaid_skirt/purple = 3,
/obj/item/clothing/under/plaid_skirt/green = 3,
/obj/item/clothing/glasses/regular = 2,
/obj/item/clothing/glasses/regular/jamjar = 2,
/obj/item/clothing/head/sombrero = 3,
/obj/item/clothing/suit/poncho = 3,
/obj/item/clothing/suit/ianshirt = 3,
/obj/item/clothing/shoes/laceup = 5,
/obj/item/clothing/shoes/sneakers/black = 6,
/obj/item/clothing/shoes/sandal = 3,
/obj/item/clothing/gloves/fingerless = 3,
/obj/item/clothing/glasses/orange = 5,
/obj/item/clothing/glasses/red = 5,
/obj/item/storage/belt/fannypack = 3,
/obj/item/storage/belt/fannypack/blue = 3,
/obj/item/storage/belt/fannypack/red = 3,
/obj/item/clothing/suit/jacket/letterman = 5,
/obj/item/clothing/head/beanie = 3,
/obj/item/clothing/head/beanie/black = 3,
/obj/item/clothing/head/beanie/red = 3,
/obj/item/clothing/head/beanie/green = 3,
/obj/item/clothing/head/beanie/darkblue = 3,
/obj/item/clothing/head/beanie/purple = 3,
/obj/item/clothing/head/beanie/yellow = 3,
/obj/item/clothing/head/beanie/orange = 3,
/obj/item/clothing/head/beanie/cyan = 3,
/obj/item/clothing/head/beanie/christmas = 3,
/obj/item/clothing/head/beanie/striped = 3,
/obj/item/clothing/head/beanie/stripedred = 3,
/obj/item/clothing/head/beanie/stripedblue = 3,
/obj/item/clothing/head/beanie/stripedgreen = 3,
/obj/item/clothing/suit/jacket/letterman_red = 3,
/obj/item/clothing/ears/headphones = 10,
/obj/item/clothing/suit/apron/purple_bartender = 2,
/obj/item/clothing/under/rank/bartender/purple = 2)
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 1,
/obj/item/clothing/mask/balaclava = 1,
/obj/item/clothing/head/ushanka = 1,
/obj/item/clothing/under/soviet = 1,
/obj/item/storage/belt/fannypack/black = 2,
/obj/item/clothing/suit/jacket/letterman_syndie = 1,
/obj/item/clothing/under/jabroni = 1,
/obj/item/clothing/suit/vapeshirt = 1,
/obj/item/clothing/under/geisha = 1)
premium = list(/obj/item/clothing/under/suit_jacket/checkered = 1,
/obj/item/clothing/head/mailman = 1,
/obj/item/clothing/under/rank/mailman = 1,
/obj/item/clothing/suit/jacket/leather = 1,
/obj/item/clothing/suit/jacket/leather/overcoat = 1,
/obj/item/clothing/under/pants/mustangjeans = 1,
/obj/item/clothing/neck/necklace/dope = 3,
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 1)
/obj/item/clothing/suit/apron/purple_bartender = 4,
/obj/item/clothing/under/rank/bartender/purple = 4)
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
/obj/item/clothing/mask/balaclava = 3,
/obj/item/clothing/head/ushanka = 3,
/obj/item/clothing/under/soviet = 3,
/obj/item/storage/belt/fannypack/black = 3,
/obj/item/clothing/suit/jacket/letterman_syndie = 5,
/obj/item/clothing/under/jabroni = 2,
/obj/item/clothing/suit/vapeshirt = 2,
/obj/item/clothing/under/geisha = 4)
premium = list(/obj/item/clothing/under/suit_jacket/checkered = 4,
/obj/item/clothing/head/mailman = 2,
/obj/item/clothing/under/rank/mailman = 2,
/obj/item/clothing/suit/jacket/leather = 4,
/obj/item/clothing/suit/jacket/leather/overcoat = 4,
/obj/item/clothing/under/pants/mustangjeans = 3,
/obj/item/clothing/neck/necklace/dope = 5,
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 5)
refill_canister = /obj/item/vending_refill/clothing
/obj/item/vending_refill/clothing
+145 -145
View File
@@ -7,21 +7,21 @@
icon_state = "secdrobe"
product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
vend_reply = "Thank you for using the SecDrobe!"
products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 1,
/obj/item/storage/backpack/security = 1,
/obj/item/storage/backpack/satchel/sec = 1,
/obj/item/storage/backpack/duffelbag/sec = 2,
/obj/item/clothing/under/rank/security = 3,
/obj/item/clothing/shoes/jackboots = 3,
/obj/item/clothing/head/beret/sec = 3,
/obj/item/clothing/head/soft/sec = 3,
/obj/item/clothing/mask/bandana/red = 3,
/obj/item/clothing/under/rank/security/skirt = 3,
/obj/item/clothing/under/rank/security/grey = 3,
/obj/item/clothing/under/pants/khaki = 3)
premium = list(/obj/item/clothing/under/rank/security/navyblue = 3,
/obj/item/clothing/suit/security/officer = 3,
/obj/item/clothing/head/beret/sec/navyofficer = 3)
products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 2,
/obj/item/storage/backpack/security = 2,
/obj/item/storage/backpack/satchel/sec = 2,
/obj/item/storage/backpack/duffelbag/sec = 3,
/obj/item/clothing/under/rank/security = 5,
/obj/item/clothing/shoes/jackboots = 5,
/obj/item/clothing/head/beret/sec =5,
/obj/item/clothing/head/soft/sec = 5,
/obj/item/clothing/mask/bandana/red = 5,
/obj/item/clothing/under/rank/security/skirt = 5,
/obj/item/clothing/under/rank/security/grey = 5,
/obj/item/clothing/under/pants/khaki = 5)
premium = list(/obj/item/clothing/under/rank/security/navyblue = 5,
/obj/item/clothing/suit/security/officer = 5,
/obj/item/clothing/head/beret/sec/navyofficer = 5)
refill_canister = /obj/item/vending_refill/wardrobe/sec_wardrobe
/obj/item/vending_refill/wardrobe/sec_wardrobe
@@ -33,23 +33,23 @@
icon_state = "medidrobe"
product_ads = "Make those blood stains look fashionable!!"
vend_reply = "Thank you for using the MediDrobe!"
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
/obj/item/storage/backpack/duffelbag/med = 1,
/obj/item/storage/backpack/medic = 1,
/obj/item/storage/backpack/satchel/med = 1,
/obj/item/clothing/suit/hooded/wintercoat/medical = 1,
/obj/item/clothing/under/rank/nursesuit = 1,
/obj/item/clothing/head/nursehat = 1,
/obj/item/clothing/under/rank/medical/blue = 1,
/obj/item/clothing/under/rank/medical/green = 1,
/obj/item/clothing/under/rank/medical/purple = 1,
/obj/item/clothing/under/rank/medical = 3,
/obj/item/clothing/suit/toggle/labcoat = 3,
/obj/item/clothing/suit/toggle/labcoat/emt = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/head/soft/emt = 3,
/obj/item/clothing/suit/apron/surgical = 1,
/obj/item/clothing/mask/surgical = 1)
products = list(/obj/item/clothing/accessory/pocketprotector = 3,
/obj/item/storage/backpack/duffelbag/med = 3,
/obj/item/storage/backpack/medic = 3,
/obj/item/storage/backpack/satchel/med = 3,
/obj/item/clothing/suit/hooded/wintercoat/medical = 3,
/obj/item/clothing/under/rank/nursesuit = 3,
/obj/item/clothing/head/nursehat = 3,
/obj/item/clothing/under/rank/medical/blue = 2,
/obj/item/clothing/under/rank/medical/green = 2,
/obj/item/clothing/under/rank/medical/purple = 2,
/obj/item/clothing/under/rank/medical = 5,
/obj/item/clothing/suit/toggle/labcoat = 5,
/obj/item/clothing/suit/toggle/labcoat/emt = 5,
/obj/item/clothing/shoes/sneakers/white = 5,
/obj/item/clothing/head/soft/emt = 5,
/obj/item/clothing/suit/apron/surgical = 3,
/obj/item/clothing/mask/surgical = 5)
refill_canister = /obj/item/vending_refill/wardrobe/medi_wardrobe
/obj/item/vending_refill/wardrobe/medi_wardrobe
@@ -61,15 +61,15 @@
icon_state = "engidrobe"
product_ads = "Guaranteed to protect your feet from industrial accidents!;Afraid of radiation? Then wear yellow!"
vend_reply = "Thank you for using the EngiDrobe!"
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
/obj/item/storage/backpack/duffelbag/engineering = 1,
/obj/item/storage/backpack/industrial = 1,
/obj/item/storage/backpack/satchel/eng = 1,
/obj/item/clothing/suit/hooded/wintercoat/engineering = 1,
/obj/item/clothing/under/rank/engineer = 3,
/obj/item/clothing/suit/hazardvest = 3,
/obj/item/clothing/shoes/workboots = 3,
/obj/item/clothing/head/hardhat = 3)
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
/obj/item/storage/backpack/duffelbag/engineering = 2,
/obj/item/storage/backpack/industrial = 3,
/obj/item/storage/backpack/satchel/eng = 3,
/obj/item/clothing/suit/hooded/wintercoat/engineering = 3,
/obj/item/clothing/under/rank/engineer = 5,
/obj/item/clothing/suit/hazardvest = 5,
/obj/item/clothing/shoes/workboots = 5,
/obj/item/clothing/head/hardhat = 5)
refill_canister = /obj/item/vending_refill/wardrobe/engi_wardrobe
/obj/item/vending_refill/wardrobe/engi_wardrobe
@@ -81,13 +81,13 @@
icon_state = "atmosdrobe"
product_ads = "Get your inflammable clothing right here!!!"
vend_reply = "Thank you for using the AtmosDrobe!"
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
/obj/item/storage/backpack/duffelbag/engineering = 1,
/obj/item/storage/backpack/satchel/eng = 1,
/obj/item/storage/backpack/industrial = 1,
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3,
/obj/item/clothing/under/rank/atmospheric_technician = 3,
/obj/item/clothing/shoes/sneakers/black = 3)
products = list(/obj/item/clothing/accessory/pocketprotector = 3,
/obj/item/storage/backpack/duffelbag/engineering = 3,
/obj/item/storage/backpack/satchel/eng = 3,
/obj/item/storage/backpack/industrial = 3,
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 5,
/obj/item/clothing/under/rank/atmospheric_technician = 5,
/obj/item/clothing/shoes/sneakers/black = 5)
refill_canister = /obj/item/vending_refill/wardrobe/atmos_wardrobe
/obj/item/vending_refill/wardrobe/atmos_wardrobe
@@ -99,12 +99,12 @@
icon_state = "cargodrobe"
product_ads = "Upgraded Assistant Style! Pick yours today!;These shorts are comfy and easy to wear, get yours now!"
vend_reply = "Thank you for using the CargoDrobe!"
products = list(/obj/item/clothing/suit/hooded/wintercoat/cargo = 1,
/obj/item/clothing/under/rank/cargotech = 3,
/obj/item/clothing/shoes/sneakers/black = 3,
/obj/item/clothing/gloves/fingerless = 3,
/obj/item/clothing/head/soft = 3,
/obj/item/radio/headset/headset_cargo = 1)
products = list(/obj/item/clothing/suit/hooded/wintercoat/cargo = 3,
/obj/item/clothing/under/rank/cargotech = 5,
/obj/item/clothing/shoes/sneakers/black = 5,
/obj/item/clothing/gloves/fingerless = 5,
/obj/item/clothing/head/soft = 5,
/obj/item/radio/headset/headset_cargo = 3)
refill_canister = /obj/item/vending_refill/wardrobe/cargo_wardrobe
/obj/item/vending_refill/wardrobe/cargo_wardrobe
@@ -116,13 +116,13 @@
icon_state = "robodrobe"
product_ads = "You turn me TRUE, use defines!;0110001101101100011011110111010001101000011001010111001101101000011001010111001001100101"
vend_reply = "Thank you for using the RoboDrobe!"
products = list(/obj/item/clothing/glasses/hud/diagnostic = 2,
/obj/item/clothing/under/rank/roboticist = 2,
/obj/item/clothing/suit/toggle/labcoat = 2,
/obj/item/clothing/shoes/sneakers/black = 2,
/obj/item/clothing/gloves/fingerless = 2,
/obj/item/clothing/head/soft/black = 2,
/obj/item/clothing/mask/bandana/skull = 1)
products = list(/obj/item/clothing/glasses/hud/diagnostic = 3,
/obj/item/clothing/under/rank/roboticist = 3,
/obj/item/clothing/suit/toggle/labcoat = 3,
/obj/item/clothing/shoes/sneakers/black = 3,
/obj/item/clothing/gloves/fingerless = 3,
/obj/item/clothing/head/soft/black = 3,
/obj/item/clothing/mask/bandana/skull = 2)
premium = list(/obj/item/radio/headset/headset_rob = 2) //Cit change
refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe
@@ -135,15 +135,15 @@
icon_state = "scidrobe"
product_ads = "Longing for the smell of flesh plasma? Buy your science clothing now!;Made with 10% Auxetics, so you don't have to worry losing your arm!"
vend_reply = "Thank you for using the SciDrobe!"
products = list(/obj/item/clothing/accessory/pocketprotector = 1,
/obj/item/storage/backpack/science = 2,
/obj/item/storage/backpack/satchel/tox = 2,
/obj/item/clothing/suit/hooded/wintercoat/science = 1,
/obj/item/clothing/under/rank/scientist = 3,
/obj/item/clothing/suit/toggle/labcoat/science = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/radio/headset/headset_sci = 2,
/obj/item/clothing/mask/gas = 3)
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
/obj/item/storage/backpack/science = 3,
/obj/item/storage/backpack/satchel/tox = 3,
/obj/item/clothing/suit/hooded/wintercoat/science = 3,
/obj/item/clothing/under/rank/scientist = 4,
/obj/item/clothing/suit/toggle/labcoat/science = 4,
/obj/item/clothing/shoes/sneakers/white = 4,
/obj/item/radio/headset/headset_sci = 4,
/obj/item/clothing/mask/gas = 5)
refill_canister = /obj/item/vending_refill/wardrobe/science_wardrobe
/obj/item/vending_refill/wardrobe/science_wardrobe
@@ -155,13 +155,13 @@
icon_state = "hydrobe"
product_ads = "Do you love soil? Then buy our clothes!;Get outfits to match your green thumb here!"
vend_reply = "Thank you for using the Hydrobe!"
products = list(/obj/item/storage/backpack/botany = 2,
/obj/item/storage/backpack/satchel/hyd = 2,
/obj/item/clothing/suit/hooded/wintercoat/hydro = 1,
/obj/item/clothing/suit/apron = 2,
/obj/item/clothing/suit/apron/overalls = 3,
/obj/item/clothing/under/rank/hydroponics = 3,
/obj/item/clothing/mask/bandana = 3)
products = list(/obj/item/storage/backpack/botany = 3,
/obj/item/storage/backpack/satchel/hyd = 3,
/obj/item/clothing/suit/hooded/wintercoat/hydro = 2,
/obj/item/clothing/suit/apron = 3,
/obj/item/clothing/suit/apron/overalls = 5,
/obj/item/clothing/under/rank/hydroponics = 5,
/obj/item/clothing/mask/bandana = 4)
refill_canister = /obj/item/vending_refill/wardrobe/hydro_wardrobe
/obj/item/vending_refill/wardrobe/hydro_wardrobe
@@ -173,12 +173,12 @@
icon_state = "curadrobe"
product_ads = "Our clothes are endorsed by treasure hunters everywhere!"
vend_reply = "Thank you for using the CuraDrobe!"
products = list(/obj/item/clothing/head/fedora/curator = 1,
/obj/item/clothing/suit/curator = 1,
/obj/item/clothing/under/rank/curator/treasure_hunter = 1,
/obj/item/clothing/shoes/workboots/mining = 1,
/obj/item/storage/backpack/satchel/explorer = 1,
/obj/item/storage/bag/books = 1)
products = list(/obj/item/clothing/head/fedora/curator = 2,
/obj/item/clothing/suit/curator = 2,
/obj/item/clothing/under/rank/curator/treasure_hunter = 2,
/obj/item/clothing/shoes/workboots/mining = 2,
/obj/item/storage/backpack/satchel/explorer = 2,
/obj/item/storage/bag/books = 2)
refill_canister = /obj/item/vending_refill/wardrobe/curator_wardrobe
/obj/item/vending_refill/wardrobe/curator_wardrobe
@@ -190,21 +190,21 @@
icon_state = "bardrobe"
product_ads = "Guaranteed to prevent stains from spilled drinks!"
vend_reply = "Thank you for using the BarDrobe!"
products = list(/obj/item/clothing/head/that = 2,
/obj/item/radio/headset/headset_srv = 2,
/obj/item/clothing/under/sl_suit = 2,
/obj/item/clothing/under/rank/bartender = 2,
/obj/item/clothing/under/rank/bartender/purple = 1,
/obj/item/clothing/accessory/waistcoat = 2,
/obj/item/clothing/suit/apron/purple_bartender = 1,
/obj/item/clothing/head/soft/black = 2,
/obj/item/clothing/shoes/sneakers/black = 2,
/obj/item/reagent_containers/glass/rag = 2,
products = list(/obj/item/clothing/head/that = 3,
/obj/item/radio/headset/headset_srv = 3,
/obj/item/clothing/under/sl_suit = 3,
/obj/item/clothing/under/rank/bartender = 3,
/obj/item/clothing/under/rank/bartender/purple = 2,
/obj/item/clothing/accessory/waistcoat = 3,
/obj/item/clothing/suit/apron/purple_bartender = 2,
/obj/item/clothing/head/soft/black = 4,
/obj/item/clothing/shoes/sneakers/black = 4,
/obj/item/reagent_containers/glass/rag = 4,
/obj/item/storage/box/beanbag = 1,
/obj/item/clothing/suit/armor/vest/alt = 1,
/obj/item/circuitboard/machine/dish_drive = 1,
/obj/item/clothing/glasses/sunglasses/reagent = 1,
/obj/item/clothing/neck/petcollar = 1,
/obj/item/clothing/neck/petcollar = 3,
/obj/item/storage/belt/bandolier = 1)
refill_canister = /obj/item/vending_refill/wardrobe/bar_wardrobe
@@ -217,17 +217,17 @@
icon_state = "chefdrobe"
product_ads = "Our clothes are guaranteed to protect you from food splatters!"
vend_reply = "Thank you for using the ChefDrobe!"
products = list(/obj/item/clothing/under/waiter = 2,
/obj/item/radio/headset/headset_srv = 2,
/obj/item/clothing/accessory/waistcoat = 2,
products = list(/obj/item/clothing/under/waiter = 3,
/obj/item/radio/headset/headset_srv = 4,
/obj/item/clothing/accessory/waistcoat = 3,
/obj/item/clothing/suit/apron/chef = 3,
/obj/item/clothing/head/soft/mime = 2,
/obj/item/storage/box/mousetraps = 2,
/obj/item/circuitboard/machine/dish_drive = 1,
/obj/item/clothing/suit/toggle/chef = 1,
/obj/item/clothing/under/rank/chef = 1,
/obj/item/clothing/head/chefhat = 1,
/obj/item/reagent_containers/glass/rag = 1)
/obj/item/clothing/suit/toggle/chef = 2,
/obj/item/clothing/under/rank/chef = 2,
/obj/item/clothing/head/chefhat = 2,
/obj/item/reagent_containers/glass/rag = 3)
refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe
/obj/item/vending_refill/wardrobe/chef_wardrobe
@@ -239,21 +239,21 @@
icon_state = "janidrobe"
product_ads = "Come and get your janitorial clothing, now endorsed by lizard janitors everywhere!"
vend_reply = "Thank you for using the JaniDrobe!"
products = list(/obj/item/clothing/under/rank/janitor = 1,
/obj/item/cartridge/janitor = 1,
/obj/item/clothing/gloves/color/black = 1,
/obj/item/clothing/head/soft/purple = 1,
/obj/item/paint/paint_remover = 1,
products = list(/obj/item/clothing/under/rank/janitor = 2,
/obj/item/cartridge/janitor = 3,
/obj/item/clothing/gloves/color/black = 2,
/obj/item/clothing/head/soft/purple = 2,
/obj/item/paint/paint_remover = 2,
/obj/item/melee/flyswatter = 1,
/obj/item/flashlight = 1,
/obj/item/caution = 6,
/obj/item/flashlight = 2,
/obj/item/caution = 8,
/obj/item/holosign_creator = 1,
/obj/item/lightreplacer = 1,
/obj/item/soap = 1,
/obj/item/storage/bag/trash = 1,
/obj/item/clothing/shoes/galoshes = 1,
/obj/item/watertank/janitor = 1,
/obj/item/storage/belt/janitor = 1)
/obj/item/storage/belt/janitor = 2)
refill_canister = /obj/item/vending_refill/wardrobe/jani_wardrobe
/obj/item/vending_refill/wardrobe/jani_wardrobe
@@ -265,17 +265,17 @@
icon_state = "lawdrobe"
product_ads = "OBJECTION! Get the rule of law for yourself!"
vend_reply = "Thank you for using the LawDrobe!"
products = list(/obj/item/clothing/under/lawyer/female = 1,
/obj/item/clothing/under/lawyer/black = 1,
/obj/item/clothing/under/lawyer/red = 1,
/obj/item/clothing/under/lawyer/bluesuit = 1,
/obj/item/clothing/suit/toggle/lawyer = 1,
/obj/item/clothing/under/lawyer/purpsuit = 1,
/obj/item/clothing/suit/toggle/lawyer/purple = 1,
/obj/item/clothing/under/lawyer/blacksuit = 1,
/obj/item/clothing/suit/toggle/lawyer/black = 1,
/obj/item/clothing/shoes/laceup = 2,
/obj/item/clothing/accessory/lawyers_badge = 2)
products = list(/obj/item/clothing/under/lawyer/female = 3,
/obj/item/clothing/under/lawyer/black = 3,
/obj/item/clothing/under/lawyer/red = 3,
/obj/item/clothing/under/lawyer/bluesuit = 3,
/obj/item/clothing/suit/toggle/lawyer = 3,
/obj/item/clothing/under/lawyer/purpsuit = 3,
/obj/item/clothing/suit/toggle/lawyer/purple = 3,
/obj/item/clothing/under/lawyer/blacksuit = 3,
/obj/item/clothing/suit/toggle/lawyer/black = 3,
/obj/item/clothing/shoes/laceup = 3,
/obj/item/clothing/accessory/lawyers_badge = 3)
refill_canister = /obj/item/vending_refill/wardrobe/law_wardrobe
/obj/item/vending_refill/wardrobe/law_wardrobe
@@ -288,14 +288,14 @@
product_ads = "Are you being bothered by cultists or pesky revenants? Then come and dress like the holy man!;Clothes for men of the cloth!"
vend_reply = "Thank you for using the ChapDrobe!"
products = list(/obj/item/holybeacon = 1,
/obj/item/storage/backpack/cultpack = 1,
/obj/item/clothing/accessory/pocketprotector/cosmetology = 1,
/obj/item/clothing/under/rank/chaplain = 1,
/obj/item/clothing/shoes/sneakers/black = 1,
/obj/item/clothing/suit/nun = 1,
/obj/item/clothing/head/nun_hood = 1,
/obj/item/clothing/suit/holidaypriest = 1,
/obj/item/storage/fancy/candle_box = 2)
/obj/item/storage/backpack/cultpack = 2,
/obj/item/clothing/accessory/pocketprotector/cosmetology = 2,
/obj/item/clothing/under/rank/chaplain = 2,
/obj/item/clothing/shoes/sneakers/black = 2,
/obj/item/clothing/suit/nun = 2,
/obj/item/clothing/head/nun_hood = 2,
/obj/item/clothing/suit/holidaypriest = 2,
/obj/item/storage/fancy/candle_box = 3)
refill_canister = /obj/item/vending_refill/wardrobe/chap_wardrobe
/obj/item/vending_refill/wardrobe/chap_wardrobe
@@ -307,12 +307,12 @@
icon_state = "chemdrobe"
product_ads = "Our clothes are 0.5% more resistant to acid spills! Get yours now!"
vend_reply = "Thank you for using the ChemDrobe!"
products = list(/obj/item/clothing/under/rank/chemist = 2,
/obj/item/clothing/shoes/sneakers/white = 2,
/obj/item/clothing/suit/toggle/labcoat/chemist = 2,
/obj/item/storage/backpack/chemistry = 2,
/obj/item/storage/backpack/satchel/chem = 2,
/obj/item/storage/bag/chemistry = 2)
products = list(/obj/item/clothing/under/rank/chemist = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/chemist = 3,
/obj/item/storage/backpack/chemistry = 3,
/obj/item/storage/backpack/satchel/chem = 3,
/obj/item/storage/bag/chemistry = 3)
refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe
/obj/item/vending_refill/wardrobe/chem_wardrobe
@@ -324,11 +324,11 @@
icon_state = "genedrobe"
product_ads = "Perfect for the mad scientist in you!"
vend_reply = "Thank you for using the GeneDrobe!"
products = list(/obj/item/clothing/under/rank/geneticist = 2,
/obj/item/clothing/shoes/sneakers/white = 2,
/obj/item/clothing/suit/toggle/labcoat/genetics = 2,
/obj/item/storage/backpack/genetics = 2,
/obj/item/storage/backpack/satchel/gen = 2)
products = list(/obj/item/clothing/under/rank/geneticist = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/genetics = 3,
/obj/item/storage/backpack/genetics = 3,
/obj/item/storage/backpack/satchel/gen = 3)
refill_canister = /obj/item/vending_refill/wardrobe/gene_wardrobe
/obj/item/vending_refill/wardrobe/gene_wardrobe
@@ -340,12 +340,12 @@
icon_state = "virodrobe"
product_ads = " Viruses getting you down? Then upgrade to sterilized clothing today!"
vend_reply = "Thank you for using the ViroDrobe"
products = list(/obj/item/clothing/under/rank/virologist = 2,
/obj/item/clothing/shoes/sneakers/white = 2,
/obj/item/clothing/suit/toggle/labcoat/virologist = 2,
/obj/item/clothing/mask/surgical = 2,
/obj/item/storage/backpack/virology = 2,
/obj/item/storage/backpack/satchel/vir = 2)
products = list(/obj/item/clothing/under/rank/virologist = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/virologist = 3,
/obj/item/clothing/mask/surgical = 3,
/obj/item/storage/backpack/virology = 3,
/obj/item/storage/backpack/satchel/vir = 3)
refill_canister = /obj/item/vending_refill/wardrobe/viro_wardrobe
/obj/item/vending_refill/wardrobe/viro_wardrobe
@@ -0,0 +1,5 @@
author: "BurgerBB"
delete-after: True
changes:
- rscadd: "Added the following reagents to the common list of vent clog reagents: ~~Cooking Oil~~, ~~Frost Oil~~, Sodium Chloride, Corn Oil, Uranium, Carpet, Firefighting Foam, semen, femcum, tear juice, strange reagent, ~~spraytan~~."
- balance: "Vent Clog smoke emits the same transparent smoke as a smoke machine, including how much it transfers. Vent Clogs also do not trigger in areas deemed \"Safe\" in code, such as in the dorms or trusted areas where dangerous things shouldn't occur."
@@ -0,0 +1,5 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- rscadd: "syndicate phobia"
- tweak: "other phobia's"
@@ -0,0 +1,4 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- tweak: "makes collars only locked via key"
@@ -0,0 +1,4 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- tweak: "charging"
@@ -0,0 +1,4 @@
author: "dtfe3"
delete-after: True
changes:
- tweak: "Increased music maxlines from 300 to 600"
@@ -0,0 +1,5 @@
author: "BurgerBB"
delete-after: True
changes:
- rscadd: "Adds Stun Circuit and Pneumatic Cannon Integrated Circuits"
- bugfix: "Fixed extinguisher and smoke circuits not accepting any reagents."
@@ -0,0 +1,4 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- rscadd: "golden swag boxes"
@@ -0,0 +1,7 @@
author: "BurgerBB"
delete-after: True
changes:
- rscadd: "Adds a few important clockcult tips."
- rscadd: "Added Mech Sensors, a brass-created trap that activates when a mech not controlled by a cultist crosses it."
- rscadd: "Added power nullifiers, an emp trap that emps everything in a 3x3 area, with the center suffering a heavy EMP."
- tweak: "Brass Skewers now deal 50 damage to mechs."
@@ -0,0 +1,4 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- rscadd: "Crafting suitcases"
@@ -0,0 +1,4 @@
author: "deathride58"
delete-after: True
changes:
- bugfix: "Fixed a fairly huge server crash exploit"

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