Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -1128,8 +1128,7 @@
|
||||
/area/security/prison)
|
||||
"acI" = (
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/general/hidden,
|
||||
/obj/machinery/door/firedoor,
|
||||
@@ -1280,8 +1279,7 @@
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/turf/open/floor/plating,
|
||||
@@ -1296,8 +1294,7 @@
|
||||
"acZ" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/turf/open/floor/plating,
|
||||
@@ -21317,8 +21314,7 @@
|
||||
name = "Privacy Shutters";
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/briefcase,
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"aYk" = (
|
||||
@@ -46725,12 +46721,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cjb" = (
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel{
|
||||
name = "floor"
|
||||
},
|
||||
/area/engine/engineering)
|
||||
"cjc" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
@@ -56119,7 +56109,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/airlock/maintenance/abandoned{
|
||||
name = "maintenance access";
|
||||
req_access_txt = "12"
|
||||
},
|
||||
/obj/structure/barricade/wooden,
|
||||
@@ -58287,7 +58276,6 @@
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen/toxins{
|
||||
dir = 1;
|
||||
network = list("toxins");
|
||||
pixel_y = -28
|
||||
},
|
||||
/obj/structure/chair{
|
||||
@@ -87415,8 +87403,8 @@ bVJ
|
||||
cay
|
||||
ccw
|
||||
cig
|
||||
cjb
|
||||
cjb
|
||||
cSV
|
||||
cSV
|
||||
cig
|
||||
cig
|
||||
cmG
|
||||
|
||||
@@ -8974,7 +8974,6 @@
|
||||
},
|
||||
/obj/machinery/turnstile{
|
||||
dir = 8;
|
||||
icon_state = "turnstile_map";
|
||||
name = "Genpop Entrance Turnstile";
|
||||
req_access_txt = "69"
|
||||
},
|
||||
@@ -9657,7 +9656,6 @@
|
||||
},
|
||||
/obj/machinery/turnstile{
|
||||
dir = 8;
|
||||
icon_state = "turnstile_map";
|
||||
name = "Genpop Entrance Turnstile";
|
||||
req_access_txt = "69"
|
||||
},
|
||||
@@ -28878,8 +28876,7 @@
|
||||
icon_state = "0-4"
|
||||
},
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "capblast";
|
||||
name = "blast door"
|
||||
id = "capblast"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/captain)
|
||||
@@ -33205,8 +33202,7 @@
|
||||
"bts" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/light_construct/small{
|
||||
dir = 1;
|
||||
icon_state = "bulb-construct-stage1"
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/maintenance/aft)
|
||||
@@ -33760,8 +33756,7 @@
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "capblast";
|
||||
name = "blast door"
|
||||
id = "capblast"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/captain)
|
||||
@@ -37603,7 +37598,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/maintenance/disposal)
|
||||
"bDc" = (
|
||||
/obj/machinery/vending/security,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
@@ -37611,6 +37605,7 @@
|
||||
/obj/effect/decal/cleanable/cobweb{
|
||||
icon_state = "cobweb2"
|
||||
},
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"bDd" = (
|
||||
@@ -46836,8 +46831,7 @@
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "capblast";
|
||||
name = "blast door"
|
||||
id = "capblast"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/captain)
|
||||
@@ -47893,8 +47887,7 @@
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "capblast";
|
||||
name = "blast door"
|
||||
id = "capblast"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/captain)
|
||||
@@ -49489,8 +49482,7 @@
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "capblast";
|
||||
name = "blast door"
|
||||
id = "capblast"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/captain)
|
||||
@@ -49570,8 +49562,7 @@
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "capblast";
|
||||
name = "blast door"
|
||||
id = "capblast"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/captain)
|
||||
|
||||
@@ -501,8 +501,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding/corner{
|
||||
dir = 8;
|
||||
icon_state = "yellowcornersiding"
|
||||
dir = 8
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aba" = (
|
||||
@@ -518,8 +517,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 4;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abb" = (
|
||||
@@ -612,8 +610,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 8;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 8
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abn" = (
|
||||
@@ -627,8 +624,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 4;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abo" = (
|
||||
@@ -712,8 +708,7 @@
|
||||
name = "pool camera"
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 4;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abv" = (
|
||||
@@ -732,8 +727,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 8;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 8
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aby" = (
|
||||
@@ -773,8 +767,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 4;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abC" = (
|
||||
@@ -912,8 +905,7 @@
|
||||
pixel_x = -23
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 4;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abP" = (
|
||||
@@ -980,8 +972,7 @@
|
||||
pixel_x = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding/corner{
|
||||
dir = 4;
|
||||
icon_state = "yellowcornersiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abW" = (
|
||||
@@ -990,8 +981,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 1;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 1
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abX" = (
|
||||
@@ -1003,8 +993,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding/corner{
|
||||
dir = 1;
|
||||
icon_state = "yellowcornersiding"
|
||||
dir = 1
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abY" = (
|
||||
@@ -9915,8 +9904,7 @@
|
||||
/area/engine/atmospherics_engine)
|
||||
"avi" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
|
||||
dir = 8;
|
||||
name = "scrubbers pipe"
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -50511,12 +50499,6 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/detectives_office)
|
||||
"bJn" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/briefcase{
|
||||
pixel_x = -3;
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/storage/secure/briefcase,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -50527,6 +50509,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/detectives_office)
|
||||
"bJo" = (
|
||||
@@ -63207,7 +63190,6 @@
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Library - Aft";
|
||||
dir = 2;
|
||||
name = "library camera"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -64373,8 +64355,7 @@
|
||||
/area/library)
|
||||
"cel" = (
|
||||
/obj/structure/chair/sofa/right{
|
||||
dir = 8;
|
||||
icon_state = "sofaend_right"
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/sign/painting/library{
|
||||
pixel_x = 32
|
||||
@@ -125710,7 +125691,6 @@
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Library - Aft";
|
||||
dir = 2;
|
||||
name = "library camera"
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
@@ -127863,8 +127843,7 @@
|
||||
/area/science/mixing)
|
||||
"xER" = (
|
||||
/obj/structure/chair/sofa/left{
|
||||
dir = 8;
|
||||
icon_state = "sofaend_left"
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/library)
|
||||
|
||||
@@ -10384,9 +10384,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/paper_bin,
|
||||
/obj/item/pen,
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/detectives_office)
|
||||
"ars" = (
|
||||
@@ -70077,8 +70075,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
|
||||
dir = 8;
|
||||
name = "scrubbers pipe"
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/stripes/white/line,
|
||||
|
||||
@@ -17522,22 +17522,14 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/prison)
|
||||
"aFo" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/briefcase{
|
||||
pixel_x = -3;
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/item/storage/secure/briefcase{
|
||||
pixel_x = 2;
|
||||
pixel_y = -2
|
||||
},
|
||||
/obj/item/camera/detective,
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"aFp" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/book/manual/wiki/security_space_law,
|
||||
/obj/machinery/light/small,
|
||||
/obj/item/camera/detective,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"aFq" = (
|
||||
|
||||
@@ -1136,8 +1136,7 @@
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -1155,8 +1154,7 @@
|
||||
"acB" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
@@ -1196,8 +1194,7 @@
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
@@ -9534,7 +9531,6 @@
|
||||
"arF" = (
|
||||
/obj/structure/pool/ladder{
|
||||
dir = 8;
|
||||
icon_state = "ladder";
|
||||
pixel_x = 4
|
||||
},
|
||||
/turf/open/pool,
|
||||
@@ -10230,7 +10226,6 @@
|
||||
/area/security/main)
|
||||
"asN" = (
|
||||
/obj/machinery/light/built{
|
||||
icon_state = "tube-empty";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -15691,15 +15686,7 @@
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"aDN" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/briefcase{
|
||||
pixel_x = -3;
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/item/storage/secure/briefcase{
|
||||
pixel_x = 2;
|
||||
pixel_y = -2
|
||||
},
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"aDO" = (
|
||||
@@ -63650,8 +63637,7 @@
|
||||
"cvL" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "researchrangeshutters";
|
||||
name = "blast door"
|
||||
id = "researchrangeshutters"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/science/misc_lab/range)
|
||||
@@ -66513,8 +66499,7 @@
|
||||
"cBm" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "researchrangeshutters";
|
||||
name = "blast door"
|
||||
id = "researchrangeshutters"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
|
||||
@@ -3061,7 +3061,6 @@
|
||||
pixel_x = 26
|
||||
},
|
||||
/obj/machinery/computer/card/minor/qm{
|
||||
icon_state = "computer";
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -3232,9 +3231,9 @@
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/turnstile{
|
||||
dir = 8;
|
||||
name = "Genpop Exit Turnstile";
|
||||
req_access_txt = "70";
|
||||
dir = 8
|
||||
req_access_txt = "70"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
@@ -4288,7 +4287,6 @@
|
||||
pixel_x = 30
|
||||
},
|
||||
/obj/machinery/computer/security/hos{
|
||||
icon_state = "computer";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
@@ -4821,7 +4819,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/computer/card/minor/hos{
|
||||
icon_state = "computer";
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -6388,9 +6385,9 @@
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/turnstile{
|
||||
dir = 4;
|
||||
name = "Genpop Entrance Turnstile";
|
||||
req_access_txt = "69";
|
||||
dir = 4
|
||||
req_access_txt = "69"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
@@ -8523,13 +8520,10 @@
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/atmos)
|
||||
"any" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/machinery/newscaster{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/item/clipboard,
|
||||
/obj/item/folder/red,
|
||||
/obj/item/hand_labeler,
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/wood,
|
||||
/area/security/detectives_office)
|
||||
"anz" = (
|
||||
@@ -9097,7 +9091,6 @@
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen/ce{
|
||||
dir = 1;
|
||||
icon_state = "telescreen";
|
||||
pixel_y = -24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -12534,20 +12527,6 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/detectives_office)
|
||||
"ats" = (
|
||||
/obj/item/clothing/suit/jacket{
|
||||
desc = "All the class of a trenchcoat without the security fibers.";
|
||||
icon_state = "greydet";
|
||||
name = "trenchcoat"
|
||||
},
|
||||
/obj/item/clothing/suit/jacket{
|
||||
desc = "All the class of a trenchcoat without the security fibers.";
|
||||
icon_state = "detective";
|
||||
name = "trenchcoat"
|
||||
},
|
||||
/obj/item/clothing/head/fedora,
|
||||
/obj/item/clothing/head/fedora{
|
||||
icon_state = "detective"
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
@@ -12687,7 +12666,6 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/computer/med_data/laptop{
|
||||
icon_state = "laptop";
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/requests_console{
|
||||
@@ -13264,7 +13242,6 @@
|
||||
/obj/structure/table/wood,
|
||||
/obj/machinery/computer/secure_data/laptop{
|
||||
dir = 1;
|
||||
icon_state = "laptop";
|
||||
pixel_y = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -16189,9 +16166,9 @@
|
||||
name = "Brig Blast door"
|
||||
},
|
||||
/obj/machinery/turnstile{
|
||||
dir = 8;
|
||||
name = "Genpop Exit Turnstile";
|
||||
req_access_txt = "70";
|
||||
dir = 8
|
||||
req_access_txt = "70"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -18134,9 +18111,8 @@
|
||||
"aCt" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/turnstile{
|
||||
name = "Genpop Exit Turnstile";
|
||||
icon_state = "turnstile_map";
|
||||
dir = 1;
|
||||
name = "Genpop Exit Turnstile";
|
||||
req_access_txt = "70"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
@@ -26149,7 +26125,6 @@
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen/cmo{
|
||||
dir = 1;
|
||||
icon_state = "telescreen";
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
@@ -26762,7 +26737,6 @@
|
||||
"aPC" = (
|
||||
/obj/machinery/computer/security/telescreen/entertainment,
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
icon_state = "morgue1";
|
||||
dir = 2
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -26806,7 +26780,6 @@
|
||||
/area/medical/medbay/zone3)
|
||||
"aPE" = (
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
icon_state = "morgue1";
|
||||
dir = 2
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -27105,7 +27078,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/computer/scan_consolenew{
|
||||
icon_state = "computer";
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -27733,7 +27705,6 @@
|
||||
/area/crew_quarters/heads/cmo)
|
||||
"aRp" = (
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
icon_state = "morgue1";
|
||||
dir = 2
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -27806,7 +27777,6 @@
|
||||
/area/science/research)
|
||||
"aRw" = (
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
icon_state = "morgue1";
|
||||
dir = 2
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -34455,7 +34425,6 @@
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/machinery/power/solar_control{
|
||||
dir = 2;
|
||||
id = "forestarboard";
|
||||
name = "Starboard Bow Solar Control"
|
||||
},
|
||||
@@ -35051,7 +35020,6 @@
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
areastring = "/area/maintenance/solars/starboard/fore";
|
||||
dir = 2;
|
||||
name = "Starboard Bow Solar APC";
|
||||
pixel_y = -26
|
||||
},
|
||||
@@ -35995,7 +35963,6 @@
|
||||
department = "Research Director's Desk";
|
||||
departmentType = 5;
|
||||
name = "Research Director RC";
|
||||
pixel_x = 0;
|
||||
pixel_y = -32;
|
||||
receive_ore_updates = 1
|
||||
},
|
||||
@@ -36304,7 +36271,6 @@
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen/rd{
|
||||
dir = 1;
|
||||
icon_state = "telescreen";
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
@@ -36546,7 +36512,6 @@
|
||||
/obj/machinery/shower{
|
||||
desc = "From what you understand it was put in rather recently, but the design looks right out of the 2510's. Weird.";
|
||||
dir = 1;
|
||||
icon_state = "shower";
|
||||
name = "Emergency Shower"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
|
||||
@@ -334,8 +334,7 @@
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aaM" = (
|
||||
/turf/open/floor/plasteel/yellowsiding/corner{
|
||||
dir = 8;
|
||||
icon_state = "yellowcornersiding"
|
||||
dir = 8
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aaN" = (
|
||||
@@ -354,8 +353,7 @@
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aaP" = (
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 8;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 8
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aaQ" = (
|
||||
@@ -433,8 +431,7 @@
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aaW" = (
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 1;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 1
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"aaX" = (
|
||||
@@ -550,8 +547,7 @@
|
||||
"abm" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 4;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abn" = (
|
||||
@@ -580,8 +576,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 4;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abr" = (
|
||||
@@ -595,8 +590,7 @@
|
||||
"abt" = (
|
||||
/obj/structure/pool/Rboard,
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 8;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 8
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abu" = (
|
||||
@@ -659,8 +653,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/yellowsiding/corner{
|
||||
dir = 4;
|
||||
icon_state = "yellowcornersiding"
|
||||
dir = 4
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abB" = (
|
||||
@@ -670,21 +663,18 @@
|
||||
pixel_y = -27
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 1;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 1
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abC" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
dir = 1;
|
||||
icon_state = "yellowsiding"
|
||||
dir = 1
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abD" = (
|
||||
/turf/open/floor/plasteel/yellowsiding/corner{
|
||||
dir = 1;
|
||||
icon_state = "yellowcornersiding"
|
||||
dir = 1
|
||||
},
|
||||
/area/crew_quarters/fitness/pool)
|
||||
"abE" = (
|
||||
@@ -2757,8 +2747,7 @@
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
|
||||
/turf/open/floor/plating,
|
||||
@@ -54863,6 +54852,10 @@
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
"gQo" = (
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"gSH" = (
|
||||
/turf/closed/wall,
|
||||
/area/lawoffice)
|
||||
@@ -57234,8 +57227,7 @@
|
||||
icon_state = "0-4"
|
||||
},
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plating,
|
||||
@@ -59204,8 +59196,7 @@
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "executionfireblast";
|
||||
name = "blast door"
|
||||
id = "executionfireblast"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/security/execution/transfer)
|
||||
@@ -85514,7 +85505,7 @@ aCo
|
||||
aCk
|
||||
aEr
|
||||
aGa
|
||||
aCk
|
||||
gQo
|
||||
oEA
|
||||
uoS
|
||||
uoS
|
||||
|
||||
@@ -197,12 +197,10 @@
|
||||
/obj/structure/closet/emcloset/anchored,
|
||||
/obj/structure/sign/directions/medical{
|
||||
dir = 8;
|
||||
icon_state = "direction_med";
|
||||
pixel_y = 36
|
||||
},
|
||||
/obj/structure/sign/directions/science{
|
||||
dir = 8;
|
||||
icon_state = "direction_sci";
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -247,7 +245,6 @@
|
||||
},
|
||||
/obj/structure/sign/directions/engineering{
|
||||
dir = 4;
|
||||
icon_state = "direction_eng";
|
||||
pixel_x = 32;
|
||||
pixel_y = -28
|
||||
},
|
||||
@@ -285,7 +282,6 @@
|
||||
},
|
||||
/obj/structure/sign/directions/engineering{
|
||||
dir = 4;
|
||||
icon_state = "direction_eng";
|
||||
pixel_y = 40
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -349,7 +345,6 @@
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/sign/directions/engineering{
|
||||
dir = 1;
|
||||
icon_state = "direction_eng";
|
||||
pixel_x = 32;
|
||||
pixel_y = 32
|
||||
},
|
||||
@@ -384,12 +379,10 @@
|
||||
"aaC" = (
|
||||
/obj/structure/sign/directions/medical{
|
||||
dir = 8;
|
||||
icon_state = "direction_med";
|
||||
pixel_y = 36
|
||||
},
|
||||
/obj/structure/sign/directions/science{
|
||||
dir = 8;
|
||||
icon_state = "direction_sci";
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -397,12 +390,10 @@
|
||||
"aaD" = (
|
||||
/obj/structure/sign/directions/engineering{
|
||||
dir = 4;
|
||||
icon_state = "direction_eng";
|
||||
pixel_y = 36
|
||||
},
|
||||
/obj/structure/sign/directions/supply{
|
||||
dir = 4;
|
||||
icon_state = "direction_supply";
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -444,12 +435,10 @@
|
||||
},
|
||||
/obj/structure/sign/directions/medical{
|
||||
dir = 8;
|
||||
icon_state = "direction_med";
|
||||
pixel_y = 40
|
||||
},
|
||||
/obj/structure/sign/directions/science{
|
||||
dir = 8;
|
||||
icon_state = "direction_sci";
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/structure/sign/directions/security{
|
||||
@@ -470,12 +459,10 @@
|
||||
},
|
||||
/obj/structure/sign/directions/engineering{
|
||||
dir = 4;
|
||||
icon_state = "direction_eng";
|
||||
pixel_y = 40
|
||||
},
|
||||
/obj/structure/sign/directions/supply{
|
||||
dir = 4;
|
||||
icon_state = "direction_supply";
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/structure/sign/directions/evac{
|
||||
@@ -525,12 +512,10 @@
|
||||
},
|
||||
/obj/structure/sign/directions/medical{
|
||||
dir = 8;
|
||||
icon_state = "direction_med";
|
||||
pixel_y = 36
|
||||
},
|
||||
/obj/structure/sign/directions/science{
|
||||
dir = 8;
|
||||
icon_state = "direction_sci";
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/structure/sign/directions/science{
|
||||
@@ -561,12 +546,10 @@
|
||||
/obj/machinery/computer/shuttle/snow_taxi,
|
||||
/obj/structure/sign/directions/supply{
|
||||
dir = 4;
|
||||
icon_state = "direction_supply";
|
||||
pixel_y = 36
|
||||
},
|
||||
/obj/structure/sign/directions/engineering{
|
||||
dir = 4;
|
||||
icon_state = "direction_eng";
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -600,16 +583,13 @@
|
||||
"aaV" = (
|
||||
/obj/structure/sign/directions/evac{
|
||||
dir = 1;
|
||||
icon_state = "direction_evac";
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/structure/sign/directions/security{
|
||||
dir = 8;
|
||||
icon_state = "direction_sec"
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/sign/directions/command{
|
||||
dir = 8;
|
||||
icon_state = "direction_bridge";
|
||||
pixel_y = -8
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -686,7 +666,6 @@
|
||||
},
|
||||
/obj/structure/sign/directions/supply{
|
||||
dir = 4;
|
||||
icon_state = "direction_supply";
|
||||
pixel_x = 32;
|
||||
pixel_y = -24
|
||||
},
|
||||
@@ -787,7 +766,6 @@
|
||||
},
|
||||
/obj/structure/sign/directions/evac{
|
||||
dir = 8;
|
||||
icon_state = "direction_evac";
|
||||
pixel_x = 32;
|
||||
pixel_y = 32
|
||||
},
|
||||
@@ -1158,13 +1136,11 @@
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/sign/directions/evac{
|
||||
dir = 8;
|
||||
icon_state = "direction_evac";
|
||||
pixel_x = 32;
|
||||
pixel_y = 40
|
||||
},
|
||||
/obj/structure/sign/directions/engineering{
|
||||
dir = 4;
|
||||
icon_state = "direction_eng";
|
||||
pixel_x = 32;
|
||||
pixel_y = 24
|
||||
},
|
||||
@@ -3934,7 +3910,7 @@
|
||||
name = "Privacy Shutters";
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/machinery/computer/med_data,
|
||||
/obj/machinery/vending/wardrobe/det_wardrobe,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/security/detectives_office)
|
||||
"aMR" = (
|
||||
@@ -20407,7 +20383,6 @@
|
||||
"iXZ" = (
|
||||
/obj/machinery/computer/security/telescreen/toxins{
|
||||
dir = 1;
|
||||
network = list("toxins");
|
||||
pixel_y = -28
|
||||
},
|
||||
/obj/structure/chair{
|
||||
@@ -43137,6 +43112,7 @@
|
||||
pixel_x = 6;
|
||||
pixel_y = 36
|
||||
},
|
||||
/obj/machinery/computer/med_data/laptop,
|
||||
/turf/open/floor/carpet,
|
||||
/area/security/detectives_office)
|
||||
"wtY" = (
|
||||
|
||||
@@ -143,11 +143,11 @@
|
||||
#define CUSTOM_SKINTONE 24 //adds a "_g" suffix to bodypart overlays icon states if a custom skintone is used.
|
||||
#define HORNCOLOR 25
|
||||
#define WINGCOLOR 26
|
||||
#define CAN_SCAR 27 // If this species can be scarred (fleshy)
|
||||
|
||||
#define ROBOTIC_LIMBS 27 //has robotic limbs that render like organic ones
|
||||
#define CAN_SCAR 28 // If this species can be scarred (fleshy)
|
||||
/// Used for determining which wounds are applicable to this species.
|
||||
#define HAS_FLESH 28 /// if we have flesh (can suffer slash/piercing/burn wounds, requires they don't have NOBLOOD)
|
||||
#define HAS_BONE 29 /// if we have bones (can suffer bone wounds)
|
||||
#define HAS_FLESH 29 /// if we have flesh (can suffer slash/piercing/burn wounds, requires they don't have NOBLOOD)
|
||||
#define HAS_BONE 30 /// if we have bones (can suffer bone wounds)
|
||||
|
||||
//organ slots
|
||||
#define ORGAN_SLOT_BRAIN "brain"
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
#define TRAY_NAME_UPDATE name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name)
|
||||
#define YIELD_WEED_MINIMUM 3
|
||||
#define YIELD_WEED_MAXIMUM 10
|
||||
#define STATIC_NUTRIENT_CAPACITY 10
|
||||
|
||||
//Both available scanning modes for the plant analyzer.
|
||||
#define PLANT_SCANMODE_STATS 0
|
||||
#define PLANT_SCANMODE_CHEMICALS 1
|
||||
|
||||
//Seed flags.
|
||||
#define MUTATE_EARLY (1<<0)
|
||||
@@ -76,6 +76,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
#define ismush(A) (is_species(A, /datum/species/mush))
|
||||
#define isshadow(A) (is_species(A, /datum/species/shadow))
|
||||
#define isskeleton(A) (is_species(A, /datum/species/skeleton))
|
||||
#define isrobotic(A) (is_species(A, /datum/species/ipc) || is_species(A, /datum/species/synthliz))
|
||||
#define isethereal(A) (is_species(A, /datum/species/ethereal))
|
||||
|
||||
// Citadel specific species
|
||||
|
||||
@@ -205,6 +205,7 @@
|
||||
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
|
||||
#define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing.
|
||||
#define TRAIT_FAST_PUMP "fast_pump"
|
||||
#define TRAIT_NO_PROCESS_FOOD "no-process-food" // You don't get benefits from nutriment, nor nutrition from reagent consumables
|
||||
#define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good...
|
||||
|
||||
// mobility flag traits
|
||||
|
||||
@@ -267,7 +267,7 @@ GLOBAL_LIST_INIT(redacted_strings, list("\[REDACTED\]", "\[CLASSIFIED\]", "\[ARC
|
||||
|
||||
GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt"))
|
||||
|
||||
GLOBAL_LIST_INIT(speech_verbs, list("default","says","gibbers", "states", "chitters", "chimpers", "declares", "bellows", "buzzes" ,"beeps", "chirps" ,"hisses" ,"poofs" , "puffs", "rattles", "mewls" ,"barks", "blorbles", "squeaks", "squawks", "flutters", "warbles"))
|
||||
GLOBAL_LIST_INIT(speech_verbs, list("default","says","gibbers", "states", "chitters", "chimpers", "declares", "bellows", "buzzes" ,"beeps", "chirps", "clicks", "hisses" ,"poofs" , "puffs", "rattles", "mewls" ,"barks", "blorbles", "squeaks", "squawks", "flutters", "warbles"))
|
||||
|
||||
GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc))
|
||||
|
||||
|
||||
@@ -128,6 +128,9 @@
|
||||
duration = set_duration
|
||||
. = ..()
|
||||
|
||||
/datum/status_effect/no_combat_mode/robotic_emp
|
||||
id = "emp_no_combat_mode"
|
||||
|
||||
/datum/status_effect/mesmerize
|
||||
id = "Mesmerize"
|
||||
alert_type = /obj/screen/alert/status_effect/mesmerized
|
||||
|
||||
@@ -110,13 +110,18 @@
|
||||
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
|
||||
|
||||
if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM)
|
||||
//only heal to 25 if limb is damaged to or past 25 brute, otherwise heal normally
|
||||
var/difference = affecting.brute_dam - 25
|
||||
var/heal_amount = 15
|
||||
if(difference >= 0)
|
||||
heal_amount = difference
|
||||
if(src.use_tool(H, user, 0, volume=50, amount=1))
|
||||
if(user == H)
|
||||
user.visible_message("<span class='notice'>[user] starts to fix some of the dents on [H]'s [affecting.name].</span>",
|
||||
"<span class='notice'>You start fixing some of the dents on [H]'s [affecting.name].</span>")
|
||||
if(!do_mob(user, H, 50))
|
||||
return
|
||||
item_heal_robotic(H, user, 15, 0)
|
||||
item_heal_robotic(H, user, heal_amount, 0)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
new /obj/item/clothing/neck/cloak/qm(src)
|
||||
new /obj/item/clothing/head/beret/qm(src)
|
||||
new /obj/item/storage/lockbox/medal/cargo(src)
|
||||
new /obj/item/clothing/suit/toggle/labcoat/depjacket/sup/qm(src)
|
||||
new /obj/item/clothing/under/rank/cargo/qm(src)
|
||||
new /obj/item/clothing/under/rank/cargo/qm/skirt(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
/obj/structure/closet/secure_closet/hop/PopulateContents()
|
||||
..()
|
||||
new /obj/item/clothing/neck/cloak/hop(src)
|
||||
new /obj/item/clothing/under/rank/civilian/head_of_personnel/whimsy(src)
|
||||
new /obj/item/clothing/under/rank/civilian/head_of_personnel(src)
|
||||
new /obj/item/clothing/under/rank/civilian/head_of_personnel/skirt(src)
|
||||
new /obj/item/clothing/head/hopcap(src)
|
||||
@@ -59,6 +60,7 @@
|
||||
new /obj/item/radio/headset/heads/hos(src)
|
||||
new /obj/item/clothing/under/rank/security/head_of_security/parade/female(src)
|
||||
new /obj/item/clothing/under/rank/security/head_of_security/parade(src)
|
||||
new /obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/hoscorp(src)
|
||||
new /obj/item/clothing/suit/armor/vest/leather(src)
|
||||
new /obj/item/clothing/suit/armor/hos(src)
|
||||
new /obj/item/clothing/under/rank/security/head_of_security/skirt(src)
|
||||
@@ -95,6 +97,7 @@
|
||||
new /obj/item/clothing/head/warden/drill(src)
|
||||
new /obj/item/clothing/head/beret/sec/navywarden(src)
|
||||
new /obj/item/clothing/suit/armor/vest/warden/alt(src)
|
||||
new /obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/wardencorp(src)
|
||||
new /obj/item/clothing/under/rank/security/warden/formal(src)
|
||||
new /obj/item/clothing/under/rank/security/warden/skirt(src)
|
||||
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
|
||||
@@ -156,17 +159,6 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/detective/PopulateContents()
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/security/detective(src)
|
||||
new /obj/item/clothing/under/rank/security/detective/skirt(src)
|
||||
new /obj/item/clothing/suit/det_suit(src)
|
||||
new /obj/item/clothing/head/fedora/det_hat(src)
|
||||
new /obj/item/clothing/gloves/color/black(src)
|
||||
new /obj/item/clothing/under/rank/security/detective/grey(src)
|
||||
new /obj/item/clothing/under/rank/security/detective/grey/skirt(src)
|
||||
new /obj/item/clothing/accessory/waistcoat(src)
|
||||
new /obj/item/clothing/suit/det_suit/grey(src)
|
||||
new /obj/item/clothing/head/fedora(src)
|
||||
new /obj/item/clothing/shoes/laceup(src)
|
||||
new /obj/item/storage/box/evidence(src)
|
||||
new /obj/item/radio/headset/headset_sec(src)
|
||||
new /obj/item/detective_scanner(src)
|
||||
|
||||
@@ -102,3 +102,20 @@
|
||||
/obj/item/clothing/neck/cloak/polychromic/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/polychromic, poly_colors, 3)
|
||||
|
||||
/obj/item/clothing/neck/cloak/alt
|
||||
name = "cloak"
|
||||
desc = "A ragged up white cloak. It reminds you of a place not far from here."
|
||||
icon_state = "cloak"
|
||||
item_state = "cloak"
|
||||
|
||||
/obj/item/clothing/neck/cloak/alt/polychromic
|
||||
name = "polychromic cloak"
|
||||
desc = "A ragged up cloak. It reminds you of a place not far from here."
|
||||
icon_state = "cloak"
|
||||
item_state = "cloak"
|
||||
var/list/poly_colors = list("#FFFFFF", "#676767", "#4C4C4C")
|
||||
|
||||
/obj/item/clothing/neck/cloak/alt/polychromic/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/polychromic, poly_colors, 3)
|
||||
|
||||
@@ -117,6 +117,27 @@
|
||||
icon_state = "greydet"
|
||||
item_state = "greydet"
|
||||
|
||||
/obj/item/clothing/suit/det_suit/forensicsred
|
||||
name = "red forensics coat"
|
||||
icon_state = "forensics_red"
|
||||
item_state = "forensics_red"
|
||||
|
||||
/obj/item/clothing/suit/det_suit/forensicsred/long
|
||||
name = "long red forensics coat"
|
||||
icon_state = "forensics_red_long"
|
||||
item_state = "forensics_red_long"
|
||||
|
||||
/obj/item/clothing/suit/det_suit/forensicsblue
|
||||
name = "blue forensics coat"
|
||||
icon_state = "forensics_blue"
|
||||
item_state = "forensics_blue"
|
||||
|
||||
/obj/item/clothing/suit/det_suit/forensicsblue/long
|
||||
name = "long blue forensics coat"
|
||||
icon_state = "forensics_blue_long"
|
||||
item_state = "forensics_blue_long"
|
||||
|
||||
|
||||
//Engineering
|
||||
/obj/item/clothing/suit/hazardvest
|
||||
name = "hazard vest"
|
||||
@@ -222,4 +243,16 @@
|
||||
desc = "A dark blue vest with reflective strips for emergency medical technicians."
|
||||
icon_state = "labcoat_emt"
|
||||
item_state = "labcoat_emt"
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/emt/red
|
||||
name = "red emt vest"
|
||||
desc = "A red vest with reflective strips for emergency medical technicians."
|
||||
icon_state = "labcoat_emtred"
|
||||
item_state = "labcoat_emtred"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/emt/highvis
|
||||
name = "high visibility emt vest"
|
||||
desc = "a high visibility vest for emergency medical technicians."
|
||||
icon_state = "labcoat_highvis"
|
||||
item_state = "labcoat_highvis"
|
||||
|
||||
@@ -62,3 +62,48 @@
|
||||
name = "scientist labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
|
||||
icon_state = "labcoat_tox"
|
||||
|
||||
// Departmental Jackets
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/depjacket/sci
|
||||
name = "science jacket"
|
||||
desc = "A comfortable jacket in science purple."
|
||||
icon_state = "sci_dep_jacket"
|
||||
item_state = "sci_dep_jacket"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/depjacket/med
|
||||
name = "medical jacket"
|
||||
desc = "A comfortable jacket in medical blue."
|
||||
icon_state = "med_dep_jacket"
|
||||
item_state = "med_dep_jacket"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/depjacket/sec
|
||||
name = "security jacket"
|
||||
desc = "A comfortable jacket in security red."
|
||||
icon_state = "sec_dep_jacket"
|
||||
item_state = "sec_dep_jacket"
|
||||
armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/depjacket/sup
|
||||
name = "supply jacket"
|
||||
desc = "A comfortable jacket in supply brown."
|
||||
icon_state = "supply_dep_jacket"
|
||||
item_state = "supply_dep_jacket"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/depjacket/sup/qm
|
||||
name = "quartermaster's jacket"
|
||||
desc = "A loose covering often warn by station quartermasters."
|
||||
icon_state = "qmjacket"
|
||||
item_state = "qmjacket"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/depjacket/eng
|
||||
name = "engineering jacket"
|
||||
desc = "A comfortable jacket in engineering yellow."
|
||||
icon_state = "engi_dep_jacket"
|
||||
item_state = "engi_dep_jacket"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
|
||||
|
||||
@@ -94,6 +94,23 @@
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
/obj/item/clothing/suit/tailcoat
|
||||
name = "tailcoat"
|
||||
desc = "A rather impractical, long coat."
|
||||
icon_state = "tailcoat"
|
||||
item_state = "tailcoat"
|
||||
|
||||
/obj/item/clothing/suit/vickyblack
|
||||
name = "black victorian coat"
|
||||
desc = "An overbearing black coat, it looks far older than you are."
|
||||
icon_state = "vickyblack"
|
||||
item_state = "vickyblack"
|
||||
|
||||
/obj/item/clothing/suit/vickyred
|
||||
name = "red victorian coat"
|
||||
desc = "An overbearing red coat, it looks far older than you are."
|
||||
icon_state = "vickyred"
|
||||
item_state = "vickyred"
|
||||
|
||||
/obj/item/clothing/suit/apron/overalls
|
||||
name = "coveralls"
|
||||
@@ -1064,3 +1081,9 @@
|
||||
desc = "An outfit used by traditional japanese warriors."
|
||||
icon_state = "samurai"
|
||||
item_state = "samurai"
|
||||
|
||||
/obj/item/clothing/suit/bomber
|
||||
name = "old bomber jacket"
|
||||
desc = "It looks like someone dragged this out of a muddy lake."
|
||||
icon_state = "bomberalt"
|
||||
item_state = "bomberalt"
|
||||
|
||||
@@ -23,6 +23,14 @@
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
alt_covers_chest = TRUE
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/util
|
||||
name = "cargo utility uniform"
|
||||
desc = "a utility uniform for cargo personnel"
|
||||
icon_state = "utilsupply"
|
||||
item_state = "utilsupply"
|
||||
can_adjust = FALSE
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/tech/skirt
|
||||
name = "cargo technician's jumpskirt"
|
||||
desc = "Skiiiiirts! They're comfy and easy to wear"
|
||||
|
||||
@@ -23,6 +23,68 @@
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/util
|
||||
name = "generic utility uniform"
|
||||
desc = "A utility uniform worn by various crew."
|
||||
icon_state = "utilgen"
|
||||
item_state = "utilgen"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/util/greyshirt
|
||||
name = "grey uniform"
|
||||
desc = "A bland, grey uniform."
|
||||
icon_state = "greyshirt"
|
||||
item_state = "greyshirt"
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/victorian_redsleeves
|
||||
name = "black vest red victorian suit"
|
||||
desc = "A stark red victorian suit with a black vest."
|
||||
icon_state = "victorianblred"
|
||||
item_state = "victorianblred"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/victorian_redvest
|
||||
name = "red-vested victorian suit"
|
||||
desc = "A victorian suit with a red vest."
|
||||
icon_state = "victorianredvest"
|
||||
item_state = "victorianredvest"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/victorian_vest
|
||||
name = "black victorian suit"
|
||||
desc = "A simple black victorian suit."
|
||||
icon_state = "victorianvest"
|
||||
item_state = "victorianvest"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/victorian_purple
|
||||
name = "purple victorian suit"
|
||||
desc = "A victorian suit in regal purple."
|
||||
icon_state = "victorianlightfire"
|
||||
item_state = "victorianlightfire"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/victorianreddress
|
||||
name = "red victorian dress"
|
||||
desc = "A flashy red victorian dress."
|
||||
icon_state = "victorianreddress"
|
||||
item_state = "victorianreddress"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/victorianblackdress
|
||||
name = "black victorian dress"
|
||||
desc = "A victorian dress in somber black."
|
||||
icon_state = "victorianblackdress"
|
||||
item_state = "victorianblackdress"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/dutch
|
||||
name = "dutch suit"
|
||||
desc = "A dapper dutch suit."
|
||||
icon_state = "dutch"
|
||||
item_state = "dutch"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/chaplain
|
||||
desc = "It's a black jumpsuit, often worn by religious folk."
|
||||
name = "chaplain's jumpsuit"
|
||||
@@ -62,6 +124,12 @@
|
||||
item_state = "b_suit"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/head_of_personnel/whimsy
|
||||
name = "casual head of personnel's jumpsuit"
|
||||
desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\", this one seems to be a bit more casual."
|
||||
icon_state = "hop_casual"
|
||||
item_state = "hop_casual"
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/head_of_personnel/skirt
|
||||
name = "head of personnel's jumpskirt"
|
||||
desc = "It's a jumpskirt worn by someone who works in the position of \"Head of Personnel\"."
|
||||
|
||||
@@ -6,6 +6,13 @@
|
||||
sensor_mode = SENSOR_COORDS
|
||||
random_sensor = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/captain/util
|
||||
name = "Command Utiltiy Uniform"
|
||||
desc = "A utility uniform for command personnel."
|
||||
icon_state = "utilcom"
|
||||
item_state = "utilcom"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/captain/skirt
|
||||
name = "captain's jumpskirt"
|
||||
desc = "It's a blue jumpskirt with some gold markings denoting the rank of \"Captain\"."
|
||||
|
||||
@@ -42,6 +42,20 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20, "wound" = 5)
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/under/rank/engineering/engineer/mechanic
|
||||
name = "mechanic's jumpsuit"
|
||||
desc = "an old mechanic's jumpsuit"
|
||||
icon_state = "mechanic"
|
||||
item_state = "mechanic"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/engineering/engineer/util
|
||||
name = "engineering utility uniform"
|
||||
desc = "a utility jumpsuit for engineering personnel"
|
||||
icon_state = "utileng"
|
||||
item_state = "utileng"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/engineering/engineer/hazard
|
||||
name = "engineer's hazard jumpsuit"
|
||||
desc = "A high visibility jumpsuit made from heat and radiation resistant materials."
|
||||
|
||||
@@ -86,6 +86,12 @@
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic/red
|
||||
name = "red paramedic jumpsuit"
|
||||
icon_state = "pmedred"
|
||||
item_state = "pmedred"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic/light
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
|
||||
icon_state = "paramedic-light"
|
||||
@@ -124,6 +130,13 @@
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
|
||||
|
||||
/obj/item/clothing/under/rank/medical/doctor/util
|
||||
name = "Medical Utility Uniform"
|
||||
desc = "Utility jumpsuit for medical personnel"
|
||||
icon_state = "utilmed"
|
||||
item_state = "utilmed"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/medical/doctor/blue
|
||||
name = "blue medical scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
|
||||
|
||||
@@ -61,6 +61,13 @@
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
|
||||
|
||||
/obj/item/clothing/under/rank/rnd/scientist/util
|
||||
name = "Science Utility Uniform"
|
||||
desc = "A utility uniform for science personnel"
|
||||
icon_state = "utilsci"
|
||||
item_state = "utilsci"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/rnd/scientist/skirt
|
||||
name = "scientist's jumpskirt"
|
||||
desc = "It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist."
|
||||
@@ -78,6 +85,12 @@
|
||||
item_state = "robotics"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/under/rank/rnd/roboticist/sleek
|
||||
name = "sleek roboticist's jumpsuit"
|
||||
icon_state = "robosleek"
|
||||
item_state = "robosleek"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/rnd/roboticist/skirt
|
||||
name = "roboticist's jumpskirt"
|
||||
desc = "It's a slimming black with reinforced seams; great for industrial work."
|
||||
|
||||
@@ -21,6 +21,13 @@
|
||||
item_state = "r_suit"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30, "wound" = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/security/officer/util
|
||||
name = "security utility uniform"
|
||||
desc = "a grey security uniform"
|
||||
icon_state = "utilsec"
|
||||
item_state = "utilsec"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/security/officer/grey
|
||||
name = "grey security jumpsuit"
|
||||
desc = "A tactical relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood."
|
||||
@@ -51,6 +58,28 @@
|
||||
item_state = "blueshift"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/security/officer/blueshirt/seccorp
|
||||
name = "corporate security uniform"
|
||||
desc = "How positively stuffy."
|
||||
icon_state = "seccorp"
|
||||
item_state = "seccorp"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/wardencorp
|
||||
name = "corporate warden uniform"
|
||||
icon_state = "wardencorp"
|
||||
item_state = "wardencorp"
|
||||
|
||||
/obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/hoscorp
|
||||
name = "corporate head of security's uniform"
|
||||
icon_state = "hoscorp"
|
||||
item_state = "hoscorp"
|
||||
|
||||
/obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/detcorp
|
||||
name = "corporate detective's uniform"
|
||||
icon_state = "detcorp"
|
||||
item_state = "detcorp"
|
||||
|
||||
/obj/item/clothing/under/rank/security/officer/spacepol
|
||||
name = "police uniform"
|
||||
desc = "Space not controlled by megacorporations, planets, or pirates is under the jurisdiction of Spacepol."
|
||||
@@ -103,6 +132,16 @@
|
||||
item_state = "det"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30, "wound" = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/security/detective/brown
|
||||
name = "dark boiled suit"
|
||||
icon_state = "detectivebrown"
|
||||
item_state = "detectivebrown"
|
||||
|
||||
/obj/item/clothing/under/rank/security/detective/brown/brown2
|
||||
name = "padded suit"
|
||||
icon_state = "detectivebrown2"
|
||||
item_state = "detectivebrown2"
|
||||
|
||||
/obj/item/clothing/under/rank/security/detective/skirt
|
||||
name = "detective's suitskirt"
|
||||
desc = "Someone who wears this means business."
|
||||
@@ -202,4 +241,4 @@
|
||||
desc = "Space not controlled by megacorporations, planets, or pirates is under the jurisdiction of Spacepol."
|
||||
icon_state = "spacepol"
|
||||
item_state = "spacepol"
|
||||
can_adjust = FALSE
|
||||
can_adjust = FALSE
|
||||
|
||||
@@ -116,3 +116,19 @@
|
||||
/obj/item/clothing/under/suit/polychromic/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/polychromic, list("#FFFFFF", "#FFFFFF", "#808080"), 3)
|
||||
|
||||
/obj/item/clothing/under/suit/turtle
|
||||
desc = "a debatably stylish turtleneck."
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/suit/turtle/teal
|
||||
name = "teal turtleneck"
|
||||
icon_state = "tealturtle"
|
||||
item_state = "tealturtle"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/suit/turtle/grey
|
||||
name = "grey turtleneck"
|
||||
icon_state = "greyturtle"
|
||||
item_state = "greyturtle"
|
||||
can_adjust = FALSE
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
endurance = 25
|
||||
yield = 6
|
||||
potency = 5
|
||||
instability = 30
|
||||
icon_dead = "ambrosia-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
mutatelist = list(/obj/item/seeds/ambrosia/deus)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/banana
|
||||
lifespan = 50
|
||||
endurance = 30
|
||||
instability = 10
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_dead = "banana-dead"
|
||||
genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/repeated_harvest)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
maturation = 5
|
||||
production = 5
|
||||
yield = 2
|
||||
instability = 30
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "berry-dead" // Same for the dead icon
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
maturation = 8
|
||||
potency = 20
|
||||
growthstages = 1
|
||||
instability = 40
|
||||
growing_icon = 'goon/icons/obj/hydroponics.dmi'
|
||||
icon_grow = "cannabis-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "cannabis-dead" // Same for the dead icon
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
production = 1
|
||||
yield = 4
|
||||
potency = 15
|
||||
instability = 20
|
||||
icon_dead = "wheat-dead"
|
||||
mutatelist = list(/obj/item/seeds/wheat/oat, /obj/item/seeds/wheat/meat)
|
||||
reagents_add = list(/datum/reagent/consumable/nutriment = 0.04)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
production = 5
|
||||
yield = 4
|
||||
potency = 20
|
||||
instability = 30
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
icon_grow = "chili-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "chili-dead" // Same for the dead icon
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
maturation = 5
|
||||
production = 5
|
||||
yield = 2
|
||||
instability = 20
|
||||
growthstages = 5
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "cocoapod-grow"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/corn
|
||||
maturation = 8
|
||||
potency = 20
|
||||
instability = 50 // Corn used to be wheatgrass, but through generations of selective cultivation...
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
icon_grow = "corn-grow" // Uses one growth icons set for all the subtypes
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
production = 1
|
||||
yield = 2
|
||||
potency = 50
|
||||
instability = 15
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing.dmi'
|
||||
icon_dead = "cotton-dead"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
maturation = 2
|
||||
production = 5
|
||||
yield = 5
|
||||
instability = 10
|
||||
growthstages = 2
|
||||
icon_grow = "grass-grow"
|
||||
icon_dead = "grass-dead"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
lifespan = 20
|
||||
endurance = 10
|
||||
yield = 4
|
||||
instability = 55
|
||||
growthstages = 4
|
||||
rarity = 30
|
||||
var/list/mutations = list()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/watermelon
|
||||
lifespan = 50
|
||||
endurance = 40
|
||||
instability = 20
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_dead = "watermelon-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
@@ -75,4 +76,4 @@
|
||||
to_chat(user, "<span class='warning'>[src] rapidly turns into ash!</span>")
|
||||
qdel(src)
|
||||
new /obj/effect/decal/cleanable/ash(drop_location())
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
production = 1
|
||||
yield = 6
|
||||
potency = 10
|
||||
instability = 35
|
||||
growthstages = 3
|
||||
grind_results = list(/datum/reagent/mustardgrind = 1)
|
||||
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
|
||||
@@ -111,6 +112,7 @@
|
||||
maturation = 3
|
||||
production = 5
|
||||
yield = 4
|
||||
instability = 10
|
||||
growthstages = 1
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
@@ -140,6 +142,7 @@
|
||||
endurance = 50
|
||||
maturation = 3
|
||||
yield = 4
|
||||
instability = 15
|
||||
growthstages = 2
|
||||
reagents_add = list(/datum/reagent/consumable/sugar = 0.25)
|
||||
mutatelist = list(/obj/item/seeds/bamboo)
|
||||
@@ -534,4 +537,4 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/aloe/microwave_act(obj/machinery/microwave/M)
|
||||
new /obj/item/stack/medical/aloe(drop_location(), 2)
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
production = 5
|
||||
yield = 4
|
||||
potency = 15
|
||||
instability = 30
|
||||
growthstages = 4
|
||||
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
|
||||
@@ -43,6 +44,7 @@
|
||||
maturation = 10
|
||||
production = 5
|
||||
yield = 4
|
||||
instability = 30
|
||||
growthstages = 3
|
||||
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
|
||||
@@ -187,6 +189,7 @@
|
||||
production = 1
|
||||
yield = 5
|
||||
potency = 15
|
||||
instability = 20
|
||||
growthstages = 3
|
||||
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
|
||||
@@ -244,6 +247,7 @@
|
||||
production = 1
|
||||
yield = 3 //-> spread
|
||||
potency = 30 //-> brightness
|
||||
instability = 20
|
||||
growthstages = 4
|
||||
rarity = 20
|
||||
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
@@ -334,4 +338,4 @@
|
||||
/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
investigate_log("was planted by [key_name(user)] at [AREACOORD(user)]", INVESTIGATE_BOTANY)
|
||||
investigate_log("was planted by [key_name(user)] at [AREACOORD(user)]", INVESTIGATE_BOTANY)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
lifespan = 30
|
||||
endurance = 40 // tuff like a toiger
|
||||
yield = 4
|
||||
instability = 25
|
||||
growthstages = 5
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy)
|
||||
mutatelist = list(/obj/item/seeds/nettle/death)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
production = 4
|
||||
yield = 6
|
||||
endurance = 25
|
||||
instability = 10
|
||||
growthstages = 3
|
||||
weed_chance = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/peas
|
||||
maturation = 3
|
||||
potency = 25
|
||||
instability = 15
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
icon_grow = "peas-grow"
|
||||
@@ -79,6 +80,7 @@
|
||||
potency = 75
|
||||
yield = 1
|
||||
production = 10
|
||||
instability = 45 //The world is a very unstable place. Constantly changing.
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
icon_grow = "worldpeas-grow"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
maturation = 10
|
||||
production = 1
|
||||
yield = 5
|
||||
instability = 15
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
mutatelist = list(/obj/item/seeds/carrot/parsnip)
|
||||
@@ -69,6 +70,7 @@
|
||||
lifespan = 60
|
||||
endurance = 50
|
||||
yield = 6
|
||||
instability = 10
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
icon_dead = "whitebeet-dead"
|
||||
mutatelist = list(/obj/item/seeds/redbeet)
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
maturation = 5
|
||||
production = 5
|
||||
yield = 5
|
||||
instability = 20
|
||||
growthstages = 5
|
||||
icon_dead = "coffee-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
species = "tomato"
|
||||
plantname = "Tomato Plants"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/tomato
|
||||
instability = 25
|
||||
maturation = 8
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "tomato-grow"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Plant analyzer
|
||||
/obj/item/plant_analyzer
|
||||
name = "plant analyzer"
|
||||
desc = "A scanner used to evaluate a plant's various areas of growth."
|
||||
desc = "A scanner used to evaluate a plant's various areas of growth, and genetic traits."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "hydro"
|
||||
item_state = "analyzer"
|
||||
@@ -10,6 +10,25 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
custom_materials = list(/datum/material/iron=30, /datum/material/glass=20)
|
||||
var/scan_mode = PLANT_SCANMODE_STATS
|
||||
|
||||
/obj/item/plant_analyzer/attack_self(mob/user)
|
||||
. = ..()
|
||||
scan_mode = !scan_mode
|
||||
to_chat(user, "<span class='notice'>You switch [src] to [scan_mode == PLANT_SCANMODE_CHEMICALS ? "scan for chemical reagents and traits" : "scan for plant growth statistics"].</span>")
|
||||
|
||||
/obj/item/plant_analyzer/attack(mob/living/M, mob/living/carbon/human/user)
|
||||
//Checks if target is a podman
|
||||
if(ispodperson(M))
|
||||
user.visible_message("<span class='notice'>[user] analyzes [M]'s vitals.</span>", \
|
||||
"<span class='notice'>You analyze [M]'s vitals.</span>")
|
||||
if(scan_mode== PLANT_SCANMODE_STATS)
|
||||
healthscan(user, M, advanced = TRUE)
|
||||
else
|
||||
chemscan(user, M)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
return ..()
|
||||
|
||||
// *************************************
|
||||
// Hydroponics Tools
|
||||
|
||||
@@ -6,9 +6,10 @@
|
||||
pixel_z = 8
|
||||
obj_flags = CAN_BE_HIT | UNIQUE_RENAME
|
||||
circuit = /obj/item/circuitboard/machine/hydroponics
|
||||
idle_power_usage = 0
|
||||
var/waterlevel = 100 //The amount of water in the tray (max 100)
|
||||
var/maxwater = 100 //The maximum amount of water in the tray
|
||||
var/nutrilevel = 10 //The amount of nutrient in the tray (max 10)
|
||||
var/nutridrain = 1 // How many units of nutrient will be drained in the tray
|
||||
var/maxnutri = 10 //The maximum nutrient of water in the tray
|
||||
var/pestlevel = 0 //The amount of pests in the tray (max 10)
|
||||
var/weedlevel = 0 //The amount of weeds in the tray (max 10)
|
||||
@@ -16,21 +17,25 @@
|
||||
var/mutmod = 1 //Nutriment's effect on mutations
|
||||
var/toxic = 0 //Toxicity in the tray?
|
||||
var/age = 0 //Current age
|
||||
var/dead = 0 //Is it dead?
|
||||
var/dead = FALSE //Is it dead?
|
||||
var/plant_health //Its health
|
||||
var/lastproduce = 0 //Last time it was harvested
|
||||
var/lastcycle = 0 //Used for timing of cycles.
|
||||
var/cycledelay = 200 //About 10 seconds / cycle
|
||||
var/harvest = 0 //Ready to harvest?
|
||||
var/harvest = FALSE //Ready to harvest?
|
||||
var/obj/item/seeds/myseed = null //The currently planted seed
|
||||
var/rating = 1
|
||||
var/unwrenchable = 1
|
||||
var/unwrenchable = TRUE
|
||||
var/recent_bee_visit = FALSE //Have we been visited by a bee recently, so bees dont overpollinate one plant
|
||||
var/using_irrigation = FALSE //If the tray is connected to other trays via irrigation hoses
|
||||
var/self_sufficiency_req = 20 //Required total dose to make a self-sufficient hydro tray. 1:1 with earthsblood.
|
||||
var/self_sufficiency_progress = 0
|
||||
var/mob/lastuser //Last user to add reagents to a tray. Mostly for logging.
|
||||
var/self_sustaining = FALSE //If the tray generates nutrients and water on its own
|
||||
var/canirrigate = TRUE //tin
|
||||
// Here lies irrigation. You won't be missed, because you were never used.
|
||||
|
||||
/obj/machinery/hydroponics/Initialize()
|
||||
//Here lies "nutrilevel", killed by ArcaneMusic 20??-2019. Finally, we strive for a better future. Please use "reagents" instead
|
||||
create_reagents(20)
|
||||
reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, 10) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland.
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/hydroponics/constructable
|
||||
name = "hydroponics tray"
|
||||
@@ -43,14 +48,18 @@
|
||||
tmp_capacity += M.rating
|
||||
for (var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
rating = M.rating
|
||||
maxwater = tmp_capacity * 50 // Up to 300
|
||||
maxnutri = tmp_capacity * 5 // Up to 30
|
||||
maxwater = tmp_capacity * 50 // Up to 400
|
||||
maxnutri = (tmp_capacity * 5) + STATIC_NUTRIENT_CAPACITY // Up to 50 Maximum
|
||||
reagents.maximum_volume = maxnutri
|
||||
nutridrain = 1/rating
|
||||
|
||||
/obj/machinery/hydroponics/constructable/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>Use <b>Ctrl-Click</b> to activate autogrow. <b>Alt-Click</b> to empty the tray's nutrients.</span>"
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
. += "<span class='notice'>The status display reads: Tray efficiency at <b>[rating*100]%</b>.</span>"
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/Destroy()
|
||||
if(myseed)
|
||||
qdel(myseed)
|
||||
@@ -62,34 +71,11 @@
|
||||
// handle opening the panel
|
||||
if(default_deconstruction_screwdriver(user, icon_state, icon_state, I))
|
||||
return
|
||||
|
||||
// handle deconstructing the machine, if permissible
|
||||
if (I.tool_behaviour == TOOL_CROWBAR && using_irrigation)
|
||||
to_chat(user, "<span class='warning'>Disconnect the hoses first!</span>")
|
||||
return
|
||||
else if(default_deconstruction_crowbar(I))
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/hydroponics/proc/FindConnected()
|
||||
var/list/connected = list()
|
||||
var/list/processing_atoms = list(src)
|
||||
|
||||
while(processing_atoms.len)
|
||||
var/atom/a = processing_atoms[1]
|
||||
for(var/step_dir in GLOB.cardinals)
|
||||
var/obj/machinery/hydroponics/h = locate() in get_step(a, step_dir)
|
||||
// Soil plots aren't dense
|
||||
if(h && h.using_irrigation && h.density && !(h in connected) && !(h in processing_atoms))
|
||||
processing_atoms += h
|
||||
|
||||
processing_atoms -= a
|
||||
connected += a
|
||||
|
||||
return connected
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(!myseed)
|
||||
return ..()
|
||||
@@ -107,12 +93,16 @@
|
||||
if(myseed && (myseed.loc != src))
|
||||
myseed.forceMove(src)
|
||||
|
||||
if(self_sustaining)
|
||||
adjustNutri(1)
|
||||
adjustWater(rand(3,5))
|
||||
adjustWeeds(-2)
|
||||
adjustPests(-2)
|
||||
adjustToxic(-2)
|
||||
if(!powered() && self_sustaining)
|
||||
visible_message("<span class='warning'>[name]'s auto-grow functionality shuts off!</span>")
|
||||
idle_power_usage = 0
|
||||
self_sustaining = FALSE
|
||||
update_icon()
|
||||
|
||||
else if(self_sustaining)
|
||||
adjustWater(rand(1,2))
|
||||
adjustWeeds(-1)
|
||||
adjustPests(-1)
|
||||
|
||||
if(world.time > (lastcycle + cycledelay))
|
||||
lastcycle = world.time
|
||||
@@ -124,13 +114,17 @@
|
||||
|
||||
needs_update = 1
|
||||
|
||||
//Nutrients//////////////////////////////////////////////////////////////
|
||||
// Nutrients deplete slowly
|
||||
if(prob(50))
|
||||
adjustNutri(-1 / rating)
|
||||
|
||||
//Nutrients//////////////////////////////////////////////////////////////
|
||||
// Nutrients deplete at a constant rate, since new nutrients can boost stats far easier.
|
||||
apply_chemicals(lastuser)
|
||||
if(self_sustaining)
|
||||
reagents.remove_any(min(0.5, nutridrain))
|
||||
else
|
||||
reagents.remove_any(nutridrain)
|
||||
|
||||
// Lack of nutrients hurts non-weeds
|
||||
if(nutrilevel <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
|
||||
if(reagents.total_volume <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
|
||||
adjustHealth(-rand(1,3))
|
||||
|
||||
//Photosynthesis/////////////////////////////////////////////////////////
|
||||
@@ -156,7 +150,7 @@
|
||||
adjustHealth(-rand(0,2) / rating)
|
||||
|
||||
// Sufficient water level and nutrient level = plant healthy but also spawns weeds
|
||||
else if(waterlevel > 10 && nutrilevel > 0)
|
||||
else if(waterlevel > 10 && reagents.total_volume > 0)
|
||||
adjustHealth(rand(1,2) / rating)
|
||||
if(myseed && prob(myseed.weed_chance))
|
||||
adjustWeeds(myseed.weed_rate)
|
||||
@@ -201,6 +195,21 @@
|
||||
if(weedlevel >= 5 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
|
||||
adjustHealth(-1 / rating)
|
||||
|
||||
//This is where stability mutations exist now.
|
||||
if(myseed.instability >= 80)
|
||||
var/mutation_chance = myseed.instability - 75
|
||||
mutate(0, 0, 0, 0, 0, 0, 0, mutation_chance, 0) //Scaling odds of a random trait or chemical
|
||||
if(myseed.instability >= 60)
|
||||
if(prob((myseed.instability)/2) && !self_sustaining && length(myseed.mutatelist)) //Minimum 30%, Maximum 50% chance of mutating every age tick when not on autogrow.
|
||||
mutatespecie()
|
||||
myseed.instability = myseed.instability/2
|
||||
if(myseed.instability >= 40)
|
||||
if(prob(myseed.instability))
|
||||
hardmutate()
|
||||
if(myseed.instability >= 20 )
|
||||
if(prob(myseed.instability))
|
||||
mutate()
|
||||
|
||||
//Health & Age///////////////////////////////////////////////////////////
|
||||
|
||||
// Plant dies if plant_health <= 0
|
||||
@@ -214,15 +223,14 @@
|
||||
|
||||
// Harvest code
|
||||
if(age > myseed.production && (age - lastproduce) > myseed.production && (!harvest && !dead))
|
||||
nutrimentMutation()
|
||||
if(myseed && myseed.yield != -1) // Unharvestable shouldn't be harvested
|
||||
harvest = 1
|
||||
harvest = TRUE
|
||||
else
|
||||
lastproduce = age
|
||||
if(prob(5)) // On each tick, there's a 5 percent chance the pest population will increase
|
||||
adjustPests(1 / rating)
|
||||
else
|
||||
if(waterlevel > 10 && nutrilevel > 0 && prob(10)) // If there's no plant, the percentage chance is 10%
|
||||
if(waterlevel > 10 && reagents.total_volume > 0 && prob(10)) // If there's no plant, the percentage chance is 10%
|
||||
adjustWeeds(1 / rating)
|
||||
|
||||
// Weeeeeeeeeeeeeeedddssss
|
||||
@@ -243,25 +251,6 @@
|
||||
selectedtrait.on_grow(src)
|
||||
return
|
||||
|
||||
/obj/machinery/hydroponics/proc/nutrimentMutation()
|
||||
if (mutmod == 0)
|
||||
return
|
||||
if (mutmod == 1)
|
||||
if(prob(80)) //80%
|
||||
mutate()
|
||||
else if(prob(75)) //15%
|
||||
hardmutate()
|
||||
return
|
||||
if (mutmod == 2)
|
||||
if(prob(50)) //50%
|
||||
mutate()
|
||||
else if(prob(50)) //25%
|
||||
hardmutate()
|
||||
else if(prob(50)) //12.5%
|
||||
mutatespecie()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/hydroponics/update_icon()
|
||||
//Refreshes the icon and sets the luminosity
|
||||
cut_overlays()
|
||||
@@ -273,8 +262,6 @@
|
||||
add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "gaia_blessing"))
|
||||
set_light(3)
|
||||
|
||||
update_icon_hoses()
|
||||
|
||||
if(myseed)
|
||||
update_icon_plant()
|
||||
update_icon_lights()
|
||||
@@ -288,15 +275,6 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/hydroponics/proc/update_icon_hoses()
|
||||
var/n = 0
|
||||
for(var/Dir in GLOB.cardinals)
|
||||
var/obj/machinery/hydroponics/t = locate() in get_step(src,Dir)
|
||||
if(t && t.using_irrigation && using_irrigation)
|
||||
n += Dir
|
||||
|
||||
icon_state = "hoses-[n]"
|
||||
|
||||
/obj/machinery/hydroponics/proc/update_icon_plant()
|
||||
var/mutable_appearance/plant_overlay = mutable_appearance(myseed.growing_icon, layer = OBJ_LAYER + 0.01)
|
||||
if(dead)
|
||||
@@ -314,7 +292,7 @@
|
||||
/obj/machinery/hydroponics/proc/update_icon_lights()
|
||||
if(waterlevel <= 10)
|
||||
add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowwater3"))
|
||||
if(nutrilevel <= 2)
|
||||
if(reagents.total_volume <= 2)
|
||||
add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lownutri3"))
|
||||
if(plant_health <= (myseed.endurance / 2))
|
||||
add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowhealth3"))
|
||||
@@ -337,19 +315,17 @@
|
||||
else
|
||||
. += "<span class='info'>It's empty.</span>"
|
||||
|
||||
if(!self_sustaining)
|
||||
. += "<span class='info'>Water: [waterlevel]/[maxwater].</span>"
|
||||
. += "<span class='info'>Nutrient: [nutrilevel]/[maxnutri].</span>"
|
||||
if(self_sufficiency_progress > 0)
|
||||
var/percent_progress = round(self_sufficiency_progress * 100 / self_sufficiency_req)
|
||||
. += "<span class='info'>Treatment for self-sustenance are [percent_progress]% complete.</span>"
|
||||
else
|
||||
. += "<span class='info'>It doesn't require any water or nutrients.</span>"
|
||||
. += "<span class='info'>Water: [waterlevel]/[maxwater].</span>\n"+\
|
||||
"<span class='info'>Nutrient: [reagents.total_volume]/[maxnutri].</span>"
|
||||
if(self_sustaining)
|
||||
. += "<span class='info'>The tray's autogrow is active, halving active reagent drain, and actively maintaning the plant.</span>"
|
||||
|
||||
if(weedlevel >= 5)
|
||||
. += "<span class='warning'>It's filled with weeds!</span>"
|
||||
to_chat(user, "<span class='warning'>It's filled with weeds!</span>")
|
||||
if(pestlevel >= 5)
|
||||
. += "<span class='warning'>It's filled with tiny worms!</span>"
|
||||
to_chat(user, "<span class='warning'>It's filled with tiny worms!</span>")
|
||||
to_chat(user, "" )
|
||||
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens.
|
||||
@@ -424,11 +400,7 @@
|
||||
sleep(5) // Wait a while
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>[oldPlantName] suddenly mutates into [myseed.plantname]!</span>")
|
||||
name = "hydroponics tray ([myseed.plantname])"
|
||||
if(myseed.product)
|
||||
desc = initial(myseed.product.desc)
|
||||
else
|
||||
desc = initial(desc)
|
||||
TRAY_NAME_UPDATE
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant
|
||||
if( weedlevel > 5 )
|
||||
@@ -448,18 +420,23 @@
|
||||
sleep(5) // Wait a while
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>The mutated weeds in [src] spawn some [myseed.plantname]!</span>")
|
||||
TRAY_NAME_UPDATE
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>The few weeds in [src] seem to react, but only for a moment...</span>")
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier
|
||||
/**
|
||||
* Plant Death Proc.
|
||||
* Cleans up various stats for the plant upon death, including pests, harvestability, and plant health.
|
||||
*/
|
||||
/obj/machinery/hydroponics/proc/plantdies()
|
||||
plant_health = 0
|
||||
harvest = 0
|
||||
harvest = FALSE
|
||||
pestlevel = 0 // Pests die
|
||||
lastproduce = 0
|
||||
if(!dead)
|
||||
update_icon()
|
||||
dead = 1
|
||||
|
||||
dead = TRUE
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutatepest(mob/user)
|
||||
@@ -471,250 +448,6 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>")
|
||||
|
||||
/obj/machinery/hydroponics/proc/applyChemicals(datum/reagents/S, mob/user)
|
||||
if(myseed)
|
||||
myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines
|
||||
|
||||
// Requires 5 mutagen to possibly change species.// Poor man's mutagen.
|
||||
if(S.has_reagent(/datum/reagent/toxin/mutagen, 5) || S.has_reagent(/datum/reagent/radium, 10) || S.has_reagent(/datum/reagent/uranium, 10))
|
||||
switch(rand(100))
|
||||
if(91 to 100)
|
||||
adjustHealth(-10)
|
||||
to_chat(user, "<span class='warning'>The plant shrivels and burns.</span>")
|
||||
if(81 to 90)
|
||||
mutatespecie()
|
||||
if(66 to 80)
|
||||
hardmutate()
|
||||
if(41 to 65)
|
||||
mutate()
|
||||
if(21 to 41)
|
||||
to_chat(user, "<span class='notice'>The plants don't seem to react...</span>")
|
||||
if(11 to 20)
|
||||
mutateweed()
|
||||
if(1 to 10)
|
||||
mutatepest(user)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Nothing happens...</span>")
|
||||
|
||||
// 2 or 1 units is enough to change the yield and other stats.// Can change the yield and other stats, but requires more than mutagen
|
||||
else if(S.has_reagent(/datum/reagent/toxin/mutagen, 2) || S.has_reagent(/datum/reagent/radium, 5) || S.has_reagent(/datum/reagent/uranium, 5))
|
||||
hardmutate()
|
||||
else if(S.has_reagent(/datum/reagent/toxin/mutagen, 1) || S.has_reagent(/datum/reagent/radium, 2) || S.has_reagent(/datum/reagent/uranium, 2))
|
||||
mutate()
|
||||
|
||||
// After handling the mutating, we now handle the damage from adding crude radioactives...
|
||||
if(S.has_reagent(/datum/reagent/uranium, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/uranium) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/uranium) * 2))
|
||||
if(S.has_reagent(/datum/reagent/radium, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/radium) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/radium) * 3)) // Radium is harsher (OOC: also easier to produce)
|
||||
|
||||
// Nutriments
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/eznutriment, 1))
|
||||
yieldmod = 1
|
||||
mutmod = 1
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/eznutriment) * 1))
|
||||
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/left4zednutriment, 1))
|
||||
yieldmod = 0
|
||||
mutmod = 2
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/left4zednutriment) * 1))
|
||||
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/robustharvestnutriment, 1))
|
||||
yieldmod = 1.3
|
||||
mutmod = 0
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/robustharvestnutriment) *1 ))
|
||||
|
||||
// Ambrosia Gaia produces earthsblood.
|
||||
if(S.has_reagent(/datum/reagent/medicine/earthsblood))
|
||||
self_sufficiency_progress += S.get_reagent_amount(/datum/reagent/medicine/earthsblood)
|
||||
if(self_sufficiency_progress >= self_sufficiency_req)
|
||||
become_self_sufficient()
|
||||
else if(!self_sustaining)
|
||||
to_chat(user, "<span class='notice'>[src] warms as it might on a spring day under a genuine Sun.</span>")
|
||||
|
||||
// Antitoxin binds shit pretty well. So the tox goes significantly down
|
||||
if(S.has_reagent(/datum/reagent/medicine/charcoal, 1))
|
||||
adjustToxic(-round(S.get_reagent_amount(/datum/reagent/medicine/charcoal) * 2))
|
||||
|
||||
// Toxins, not good for anything
|
||||
if(S.has_reagent(/datum/reagent/toxin, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin) * 2))
|
||||
|
||||
// Milk is good for humans, but bad for plants. The sugars canot be used by plants, and the milk fat fucks up growth. Not shrooms though. I can't deal with this now...
|
||||
if(S.has_reagent(/datum/reagent/consumable/milk, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/milk) * 0.1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/milk) * 0.9))
|
||||
|
||||
// Beer is a chemical composition of alcohol and various other things. It's a shitty nutrient but hey, it's still one. Also alcohol is bad, mmmkay?
|
||||
if(S.has_reagent(/datum/reagent/consumable/ethanol/beer, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.05))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.25))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.7))
|
||||
|
||||
// Fluorine one of the most corrosive and deadly gasses
|
||||
if(S.has_reagent(/datum/reagent/fluorine, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/fluorine) * 2))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/fluorine) * 2.5))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/fluorine) * 0.5))
|
||||
adjustWeeds(-rand(1,4))
|
||||
|
||||
// Chlorine one of the most corrosive and deadly gasses
|
||||
if(S.has_reagent(/datum/reagent/chlorine, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/chlorine) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/chlorine) * 1.5))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/chlorine) * 0.5))
|
||||
adjustWeeds(-rand(1,3))
|
||||
|
||||
// White Phosphorous + water -> phosphoric acid. That's not a good thing really.
|
||||
// Phosphoric salts are beneficial though. And even if the plant suffers, in the long run the tray gets some nutrients. The benefit isn't worth that much.
|
||||
if(S.has_reagent(/datum/reagent/phosphorus, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.75))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.1))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.5))
|
||||
adjustWeeds(-rand(1,2))
|
||||
|
||||
// Plants should not have sugar, they can't use it and it prevents them getting water/nutients, it is good for mold though...
|
||||
if(S.has_reagent(/datum/reagent/consumable/sugar, 1))
|
||||
adjustWeeds(rand(1,2))
|
||||
adjustPests(rand(1,2))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/sugar) * 0.1))
|
||||
|
||||
// It is water!
|
||||
if(S.has_reagent(/datum/reagent/water, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/water) * 1))
|
||||
|
||||
// Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits~
|
||||
if(S.has_reagent(/datum/reagent/water/holywater, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/water/holywater) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/water/holywater) * 0.1))
|
||||
|
||||
// A variety of nutrients are dissolved in club soda, without sugar.
|
||||
// These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth.
|
||||
if(S.has_reagent(/datum/reagent/consumable/sodawater, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 0.1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 0.1))
|
||||
|
||||
// Sulphuric Acid
|
||||
if(S.has_reagent(/datum/reagent/toxin/acid, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/acid) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/acid) * 1.5))
|
||||
adjustWeeds(-rand(1,2))
|
||||
|
||||
// Acid
|
||||
if(S.has_reagent(/datum/reagent/toxin/acid/fluacid, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/acid/fluacid) * 2))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/acid/fluacid) * 3))
|
||||
adjustWeeds(-rand(1,4))
|
||||
|
||||
// Plant-B-Gone is just as bad
|
||||
if(S.has_reagent(/datum/reagent/toxin/plantbgone, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone) * 5))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone) * 6))
|
||||
adjustWeeds(-rand(4,8))
|
||||
|
||||
// Napalm, not known for being good for anything organic
|
||||
if(S.has_reagent(/datum/reagent/napalm, 1))
|
||||
if(!(myseed.resistance_flags & FIRE_PROOF))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/napalm) * 6))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/napalm) * 7))
|
||||
adjustWeeds(-rand(5,9))
|
||||
|
||||
//Weed Spray
|
||||
if(S.has_reagent(/datum/reagent/toxin/plantbgone/weedkiller, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone/weedkiller) * 0.5))
|
||||
//old toxicity was 4, each spray is default 10 (minimal of 5) so 5 and 2.5 are the new ammounts
|
||||
adjustWeeds(-rand(1,2))
|
||||
|
||||
//Pest Spray
|
||||
if(S.has_reagent(/datum/reagent/toxin/pestkiller, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/pestkiller) * 0.5))
|
||||
adjustPests(-rand(1,2))
|
||||
|
||||
// Healing
|
||||
if(S.has_reagent(/datum/reagent/medicine/cryoxadone, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/medicine/cryoxadone) * 3))
|
||||
adjustToxic(-round(S.get_reagent_amount(/datum/reagent/medicine/cryoxadone) * 3))
|
||||
|
||||
// Ammonia is bad ass.
|
||||
if(S.has_reagent(/datum/reagent/ammonia, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/ammonia) * 0.5))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/ammonia) * 1))
|
||||
if(myseed)
|
||||
myseed.adjust_yield(round(S.get_reagent_amount(/datum/reagent/ammonia) * 0.01))
|
||||
|
||||
// Saltpetre is used for gardening IRL, to simplify highly, it speeds up growth and strengthens plants
|
||||
if(S.has_reagent(/datum/reagent/saltpetre, 1))
|
||||
var/salt = S.get_reagent_amount(/datum/reagent/saltpetre)
|
||||
adjustHealth(round(salt * 0.25))
|
||||
if (myseed)
|
||||
myseed.adjust_production(-round(salt/100)-prob(salt%100))
|
||||
myseed.adjust_potency(round(salt*0.5))
|
||||
|
||||
// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer
|
||||
if(S.has_reagent(/datum/reagent/ash, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/ash) * 0.25))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/ash) * 0.5))
|
||||
adjustWeeds(-1)
|
||||
|
||||
// Diethylamine is more bad ass, and pests get hurt by the corrosive nature of it, not the plant.
|
||||
if(S.has_reagent(/datum/reagent/diethylamine, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 2))
|
||||
if(myseed)
|
||||
myseed.adjust_yield(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 0.02))
|
||||
adjustPests(-rand(1,2))
|
||||
|
||||
// Nutriment Compost, effectively
|
||||
if(S.has_reagent(/datum/reagent/consumable/nutriment, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/nutriment) * 0.5))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/nutriment) * 1))
|
||||
|
||||
// Virusfood Compost for EVERYTHING
|
||||
if(S.has_reagent(/datum/reagent/toxin/mutagen/mutagenvirusfood, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/toxin/mutagen/mutagenvirusfood) * 0.5))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/mutagen/mutagenvirusfood) * 0.5))
|
||||
|
||||
// Blood
|
||||
if(S.has_reagent(/datum/reagent/blood, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/blood) * 1))
|
||||
adjustPests(rand(2,4))
|
||||
|
||||
// Strange reagent
|
||||
if(S.has_reagent(/datum/reagent/medicine/strange_reagent, 1))
|
||||
spawnplant()
|
||||
|
||||
// Honey, Pests are dieing of sugar, so is the plant
|
||||
if(S.has_reagent(/datum/reagent/consumable/honey, 1))
|
||||
adjustPests(-rand(2,5))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/consumable/honey) * 1))
|
||||
|
||||
// Buzz Fuzz, a drink seemingly made for plants...
|
||||
if(S.has_reagent(/datum/reagent/consumable/buzz_fuzz, 1))
|
||||
adjustPests(-rand(2,5))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/buzz_fuzz) * 0.1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/buzz_fuzz) * 0.5))
|
||||
|
||||
// Adminordrazine the best stuff there is. For testing/debugging.
|
||||
if(S.has_reagent(/datum/reagent/medicine/adminordrazine, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustPests(-rand(1,5))
|
||||
adjustWeeds(-rand(1,5))
|
||||
if(S.has_reagent(/datum/reagent/medicine/adminordrazine, 5))
|
||||
switch(rand(100))
|
||||
if(66 to 100)
|
||||
mutatespecie()
|
||||
if(33 to 65)
|
||||
mutateweed()
|
||||
if(1 to 32)
|
||||
mutatepest(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Nothing happens...</span>")
|
||||
|
||||
/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params)
|
||||
//Called when mob user "attacks" it with object O
|
||||
if(istype(O, /obj/item/reagent_containers) ) // Syringe stuff (and other reagent containers now too)
|
||||
@@ -730,13 +463,20 @@
|
||||
to_chat(user, "<span class='notice'>[reagent_source] is empty.</span>")
|
||||
return 1
|
||||
|
||||
if(reagents.total_volume >= reagents.maximum_volume && !reagent_source.reagents.has_reagent(/datum/reagent/water, 1))
|
||||
to_chat(user, "<span class='notice'>[src] is full.</span>")
|
||||
return
|
||||
|
||||
var/list/trays = list(src)//makes the list just this in cases of syringes and compost etc
|
||||
var/target = myseed ? myseed.plantname : src
|
||||
var/visi_msg = ""
|
||||
var/irrigate = 0 //How am I supposed to irrigate pill contents?
|
||||
var/transfer_amount
|
||||
|
||||
if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/reagent_containers/pill))
|
||||
if(istype(reagent_source, /obj/item/reagent_containers/food/snacks))
|
||||
var/obj/item/reagent_containers/food/snacks/R = reagent_source
|
||||
if (R.trash)
|
||||
R.generate_trash(get_turf(user))
|
||||
visi_msg="[user] composts [reagent_source], spreading it through [target]"
|
||||
transfer_amount = reagent_source.reagents.total_volume
|
||||
else
|
||||
@@ -746,41 +486,27 @@
|
||||
visi_msg="[user] injects [target] with [syr]"
|
||||
if(syr.reagents.total_volume <= syr.amount_per_transfer_from_this)
|
||||
syr.mode = 0
|
||||
else if(istype(reagent_source, /obj/item/reagent_containers/spray/))
|
||||
visi_msg="[user] sprays [target] with [reagent_source]"
|
||||
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
|
||||
irrigate = 1
|
||||
else if(transfer_amount) // Droppers, cans, beakers, what have you.
|
||||
visi_msg="[user] uses [reagent_source] on [target]"
|
||||
irrigate = 1
|
||||
// Beakers, bottles, buckets, etc.
|
||||
if(reagent_source.is_drainable())
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
|
||||
if(irrigate && transfer_amount > 30 && reagent_source.reagents.total_volume >= 30 && using_irrigation)
|
||||
trays = FindConnected()
|
||||
if (trays.len > 1)
|
||||
visi_msg += ", setting off the irrigation system"
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE)
|
||||
|
||||
if(visi_msg)
|
||||
visible_message("<span class='notice'>[visi_msg].</span>")
|
||||
|
||||
var/split = round(transfer_amount/trays.len)
|
||||
|
||||
|
||||
for(var/obj/machinery/hydroponics/H in trays)
|
||||
//cause I don't want to feel like im juggling 15 tamagotchis and I can get to my real work of ripping flooring apart in hopes of validating my life choices of becoming a space-gardener
|
||||
|
||||
var/datum/reagents/S = new /datum/reagents() //This is a strange way, but I don't know of a better one so I can't fix it at the moment...
|
||||
S.my_atom = H
|
||||
|
||||
reagent_source.reagents.trans_to(S,split)
|
||||
//This was originally in apply_chemicals, but due to apply_chemicals only holding nutrients, we handle it here now.
|
||||
if(reagent_source.reagents.has_reagent(/datum/reagent/water, 1))
|
||||
var/water_amt = reagent_source.reagents.get_reagent_amount(/datum/reagent/water) * transfer_amount / reagent_source.reagents.total_volume
|
||||
H.adjustWater(round(water_amt))
|
||||
reagent_source.reagents.remove_reagent(/datum/reagent/water, water_amt)
|
||||
reagent_source.reagents.trans_to(H.reagents, transfer_amount)
|
||||
if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/reagent_containers/pill))
|
||||
qdel(reagent_source)
|
||||
|
||||
H.applyChemicals(S, user)
|
||||
|
||||
S.clear_reagents()
|
||||
qdel(S)
|
||||
lastuser = user
|
||||
H.update_icon()
|
||||
return 1
|
||||
H.update_icon()
|
||||
if(reagent_source) // If the source wasn't composted and destroyed
|
||||
reagent_source.update_icon()
|
||||
@@ -793,39 +519,43 @@
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You plant [O].</span>")
|
||||
dead = 0
|
||||
dead = FALSE
|
||||
myseed = O
|
||||
name = "hydroponics tray ([myseed.plantname])"
|
||||
if(!myseed.productdesc) //we haven't changed our produce's description
|
||||
if(myseed.product)
|
||||
myseed.productdesc = initial(myseed.product.desc)
|
||||
else if(myseed.desc)
|
||||
myseed.productdesc = myseed.desc
|
||||
else
|
||||
myseed.productdesc = "A fascinating specimen."
|
||||
desc = myseed.productdesc
|
||||
TRAY_NAME_UPDATE
|
||||
age = 1
|
||||
plant_health = myseed.endurance
|
||||
lastcycle = world.time
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] already has seeds in it!</span>")
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/plant_analyzer))
|
||||
var/obj/item/plant_analyzer/P_analyzer = O
|
||||
if(myseed)
|
||||
to_chat(user, "*** <B>[myseed.plantname]</B> ***" )
|
||||
to_chat(user, "- Plant Age: <span class='notice'>[age]</span>")
|
||||
var/list/text_string = myseed.get_analyzer_text()
|
||||
if(text_string)
|
||||
to_chat(user, text_string)
|
||||
if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS)
|
||||
to_chat(user, "*** <B>[myseed.plantname]</B> ***" )
|
||||
to_chat(user, "- Plant Age: <span class='notice'>[age]</span>")
|
||||
var/list/text_string = myseed.get_analyzer_text()
|
||||
if(text_string)
|
||||
to_chat(user, text_string)
|
||||
to_chat(user, "*---------*")
|
||||
if(myseed.reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS)
|
||||
to_chat(user, "- <B>Plant Reagents</B> -")
|
||||
to_chat(user, "*---------*")
|
||||
for(var/datum/plant_gene/reagent/G in myseed.genes)
|
||||
to_chat(user, "<span class='notice'>- [G.get_name()] -</span>")
|
||||
to_chat(user, "*---------*")
|
||||
else
|
||||
to_chat(user, "<B>No plant found.</B>")
|
||||
to_chat(user, "- Weed level: <span class='notice'>[weedlevel] / 10</span>")
|
||||
to_chat(user, "- Pest level: <span class='notice'>[pestlevel] / 10</span>")
|
||||
to_chat(user, "- Toxicity level: <span class='notice'>[toxic] / 100</span>")
|
||||
to_chat(user, "- Water level: <span class='notice'>[waterlevel] / [maxwater]</span>")
|
||||
to_chat(user, "- Nutrition level: <span class='notice'>[nutrilevel] / [maxnutri]</span>")
|
||||
to_chat(user, "- Nutrition level: <span class='notice'>[reagents.total_volume] / [maxnutri]</span>")
|
||||
to_chat(user, "")
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/cultivator))
|
||||
if(weedlevel > 0)
|
||||
@@ -843,18 +573,6 @@
|
||||
else if(default_unfasten_wrench(user, O))
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/wirecutters) && unwrenchable)
|
||||
if (!anchored)
|
||||
to_chat(user, "<span class='warning'>Anchor the tray first!</span>")
|
||||
return
|
||||
if(canirrigate)
|
||||
using_irrigation = !using_irrigation
|
||||
O.play_tool_sound(src)
|
||||
user.visible_message("<span class='notice'>[user] [using_irrigation ? "" : "dis"]connects [src]'s irrigation hoses.</span>", \
|
||||
"<span class='notice'>You [using_irrigation ? "" : "dis"]connect [src]'s irrigation hoses.</span>")
|
||||
for(var/obj/machinery/hydroponics/h in range(1,src))
|
||||
h.update_icon()
|
||||
|
||||
else if(istype(O, /obj/item/shovel/spade))
|
||||
if(!myseed && !weedlevel)
|
||||
to_chat(user, "<span class='warning'>[src] doesn't have any plants or weeds!</span>")
|
||||
@@ -882,14 +600,12 @@
|
||||
if (!unwrenchable) // case also covered by NODECONSTRUCT checks in default_unfasten_wrench
|
||||
return CANT_UNFASTEN
|
||||
|
||||
if (using_irrigation)
|
||||
if (!silent)
|
||||
to_chat(user, "<span class='warning'>Disconnect the hoses first!</span>")
|
||||
return FAILED_UNFASTEN
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/hydroponics/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
/obj/machinery/hydroponics/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(issilicon(user)) //How does AI know what plant is?
|
||||
return
|
||||
if(harvest)
|
||||
@@ -897,41 +613,62 @@
|
||||
return
|
||||
|
||||
else if(dead)
|
||||
dead = 0
|
||||
dead = FALSE
|
||||
to_chat(user, "<span class='notice'>You remove the dead plant from [src].</span>")
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
update_icon()
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
TRAY_NAME_UPDATE
|
||||
else
|
||||
if(user)
|
||||
examine(user)
|
||||
|
||||
/obj/machinery/hydroponics/CtrlClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
return
|
||||
if(!powered())
|
||||
to_chat(user, "<span class='warning'>[name] has no power.</span>")
|
||||
return
|
||||
if(!anchored)
|
||||
return
|
||||
self_sustaining = !self_sustaining
|
||||
idle_power_usage = self_sustaining ? 2500 : 0
|
||||
to_chat(user, "<span class='notice'>You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].")
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/hydroponics/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!anchored)
|
||||
update_icon()
|
||||
return FALSE
|
||||
var/warning = alert(user, "Are you sure you wish to empty the tray's nutrient beaker?","Empty Tray Nutrients?", "Yes", "No")
|
||||
if(warning == "Yes" && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
reagents.clear_reagents()
|
||||
to_chat(user, "<span class='warning'>You empty [src]'s nutrient tank.</span>")
|
||||
|
||||
/obj/machinery/hydroponics/proc/update_tray(mob/user)
|
||||
harvest = 0
|
||||
harvest = FALSE
|
||||
lastproduce = age
|
||||
if(istype(myseed, /obj/item/seeds/replicapod))
|
||||
if(user)//runtimes
|
||||
to_chat(user, "<span class='notice'>You harvest from the [myseed.plantname].</span>")
|
||||
to_chat(user, "<span class='notice'>You harvest from the [myseed.plantname].</span>")
|
||||
else if(myseed.getYield() <= 0)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>You fail to harvest anything useful!</span>")
|
||||
to_chat(user, "<span class='warning'>You fail to harvest anything useful!</span>")
|
||||
else
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>")
|
||||
to_chat(user, "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>")
|
||||
if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest))
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
dead = 0
|
||||
dead = FALSE
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
TRAY_NAME_UPDATE
|
||||
if(self_sustaining) //No reason to pay for an empty tray.
|
||||
idle_power_usage = 0
|
||||
self_sustaining = FALSE
|
||||
update_icon()
|
||||
|
||||
|
||||
/// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds.///
|
||||
/obj/machinery/hydroponics/proc/adjustNutri(adjustamt)
|
||||
nutrilevel = clamp(nutrilevel + adjustamt, 0, maxnutri)
|
||||
|
||||
/obj/machinery/hydroponics/proc/adjustWater(adjustamt)
|
||||
waterlevel = clamp(waterlevel + adjustamt, 0, maxwater)
|
||||
|
||||
@@ -957,11 +694,6 @@
|
||||
var/mob/living/simple_animal/hostile/C = new chosen
|
||||
C.faction = list("plants")
|
||||
|
||||
/obj/machinery/hydroponics/proc/become_self_sufficient() // Ambrosia Gaia effect
|
||||
visible_message("<span class='boldnotice'>[src] begins to glow with a beautiful light!</span>")
|
||||
self_sustaining = TRUE
|
||||
update_icon()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk!
|
||||
name = "soil"
|
||||
@@ -974,9 +706,6 @@
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
unwrenchable = FALSE
|
||||
|
||||
/obj/machinery/hydroponics/soil/update_icon_hoses()
|
||||
return // Has no hoses
|
||||
|
||||
/obj/machinery/hydroponics/soil/update_icon_lights()
|
||||
return // Has no lights
|
||||
|
||||
@@ -986,3 +715,6 @@
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/hydroponics/soil/CtrlClick(mob/user)
|
||||
return //Dirt doesn't have electricity, last I checked.
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
*This is NOW the gradual affects that each chemical applies on every process() proc. Nutrients now use a more robust reagent holder in order to apply less insane
|
||||
* stat changes as opposed to 271 lines of individual statline effects. Shoutout to the original comments on chems, I just cleaned a few up.
|
||||
*/
|
||||
/obj/machinery/hydroponics/proc/apply_chemicals(mob/user)
|
||||
///Contains the reagents within the tray.
|
||||
if(myseed)
|
||||
myseed.on_chem_reaction(reagents) //In case seeds have some special interactions with special chems, currently only used by vines
|
||||
for(var/c in reagents.reagent_list)
|
||||
var/datum/reagent/chem = c
|
||||
chem.on_hydroponics_apply(myseed, reagents, src, user)
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutation_roll(mob/user)
|
||||
switch(rand(100))
|
||||
if(91 to 100)
|
||||
adjustHealth(-10)
|
||||
visible_message("<span class='warning'>\The [myseed.plantname] starts to wilt and burn!</span>")
|
||||
return
|
||||
if(41 to 90)
|
||||
if(myseed && !self_sustaining) //Stability
|
||||
myseed.adjust_instability(5)
|
||||
return
|
||||
if(21 to 40)
|
||||
visible_message("<span class='notice'>\The [myseed.plantname] appears unusually reactive...</span>")
|
||||
return
|
||||
if(11 to 20)
|
||||
mutateweed()
|
||||
return
|
||||
if(1 to 10)
|
||||
mutatepest(user)
|
||||
return
|
||||
@@ -89,6 +89,12 @@
|
||||
/datum/plant_gene/core/potency/apply_stat(obj/item/seeds/S)
|
||||
S.potency = value
|
||||
|
||||
/datum/plant_gene/core/instability
|
||||
name = "Stability"
|
||||
value = 10
|
||||
|
||||
/datum/plant_gene/core/instability/apply_stat(obj/item/seeds/S)
|
||||
S.instability = value
|
||||
|
||||
/datum/plant_gene/core/weed_rate
|
||||
name = "Weed Growth Rate"
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested.
|
||||
var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways.
|
||||
var/growthstages = 6 // Amount of growth sprites the plant has.
|
||||
var/instability = 5 //Chance that a plant will mutate in each stage of it's life.
|
||||
var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to CentCom.
|
||||
var/list/mutatelist = list() // The type of plants that this plant can mutate into.
|
||||
var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info.
|
||||
@@ -36,6 +37,7 @@
|
||||
|
||||
var/weed_rate = 1 //If the chance below passes, then this many weeds sprout during growth
|
||||
var/weed_chance = 5 //Percentage chance per tray update to grow weeds
|
||||
var/seed_flags = MUTATE_EARLY //Determines if a plant is allowed to mutate early at 30+ instability
|
||||
|
||||
/obj/item/seeds/Initialize(mapload, nogenes = 0)
|
||||
. = ..()
|
||||
@@ -61,6 +63,7 @@
|
||||
genes += new /datum/plant_gene/core/production(production)
|
||||
if(potency != -1)
|
||||
genes += new /datum/plant_gene/core/potency(potency)
|
||||
genes += new /datum/plant_gene/core/instability(instability)
|
||||
|
||||
for(var/p in genes)
|
||||
if(ispath(p))
|
||||
@@ -74,6 +77,10 @@
|
||||
/obj/item/seeds/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>Use a pen on it to rename it or change its description.</span>"
|
||||
if(reagents_add && user.can_see_reagents())
|
||||
. += "<span class='notice'>- Plant Reagents -</span>"
|
||||
for(var/datum/plant_gene/reagent/G in genes)
|
||||
. += "<span class='notice'>- [G.get_name()] -</span>"
|
||||
|
||||
/obj/item/seeds/proc/Copy()
|
||||
var/obj/item/seeds/S = new type(null, 1)
|
||||
@@ -85,6 +92,7 @@
|
||||
S.yield = yield
|
||||
S.potency = potency
|
||||
S.weed_rate = weed_rate
|
||||
S.instability = instability
|
||||
S.weed_chance = weed_chance
|
||||
S.name = name
|
||||
S.plantname = plantname
|
||||
@@ -121,18 +129,20 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
if(g)
|
||||
g.mutability_flags &= ~mutability
|
||||
|
||||
/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0)
|
||||
/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0, stabmut = 3)
|
||||
adjust_lifespan(rand(-lifemut,lifemut))
|
||||
adjust_endurance(rand(-endmut,endmut))
|
||||
adjust_production(rand(-productmut,productmut))
|
||||
adjust_yield(rand(-yieldmut,yieldmut))
|
||||
adjust_potency(rand(-potmut,potmut))
|
||||
adjust_instability(rand(-stabmut,stabmut))
|
||||
adjust_weed_rate(rand(-wrmut, wrmut))
|
||||
adjust_weed_chance(rand(-wcmut, wcmut))
|
||||
if(prob(traitmut))
|
||||
add_random_traits(1, 1)
|
||||
|
||||
|
||||
if(prob(50))
|
||||
add_random_traits(1, 1)
|
||||
else
|
||||
add_random_reagents(1, 1)
|
||||
|
||||
/obj/item/seeds/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(istype(Proj, /obj/item/projectile/energy/florayield))
|
||||
@@ -165,13 +175,40 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
|
||||
|
||||
/obj/item/seeds/proc/harvest(mob/user)
|
||||
///Reference to the tray/soil the seeds are planted in.
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
///Count used for creating the correct amount of results to the harvest.
|
||||
var/t_amount = 0
|
||||
///List of plants all harvested from the same batch.
|
||||
var/list/result = list()
|
||||
///Tile of the harvester to deposit the growables.
|
||||
var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK
|
||||
///Name of the grown products.
|
||||
var/product_name
|
||||
while(t_amount < getYield())
|
||||
var/obj/item/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, src)
|
||||
///The Number of products produced by the plant, typically the yield.
|
||||
var/product_count = getYield()
|
||||
|
||||
while(t_amount < product_count)
|
||||
var/obj/item/reagent_containers/food/snacks/grown/t_prod
|
||||
if(instability >= 30 && (seed_flags & MUTATE_EARLY) && LAZYLEN(mutatelist) && prob(instability/3))
|
||||
var/obj/item/seeds/new_prod = pick(mutatelist)
|
||||
t_prod = initial(new_prod.product)
|
||||
if(!t_prod)
|
||||
continue
|
||||
t_prod = new t_prod(output_loc, src)
|
||||
t_prod.seed = new new_prod
|
||||
t_prod.seed.name = initial(new_prod.name)
|
||||
t_prod.seed.desc = initial(new_prod.desc)
|
||||
t_prod.seed.plantname = initial(new_prod.plantname)
|
||||
t_prod.transform = initial(t_prod.transform)
|
||||
t_prod.transform *= TRANSFORM_USING_VARIABLE(t_prod.seed.potency, 100) + 0.5
|
||||
t_amount++
|
||||
if(t_prod.seed)
|
||||
//t_prod.seed = new new_prod
|
||||
t_prod.seed.instability = round(instability * 0.5)
|
||||
continue
|
||||
else
|
||||
t_prod = new product(output_loc, src)
|
||||
if(parent.myseed.plantname != initial(parent.myseed.plantname))
|
||||
t_prod.name = lowertext(parent.myseed.plantname)
|
||||
if(productdesc)
|
||||
@@ -186,8 +223,8 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
product_name = parent.myseed.plantname
|
||||
if(getYield() >= 1)
|
||||
SSblackbox.record_feedback("tally", "food_harvested", getYield(), product_name)
|
||||
parent.investigate_log("[user] harvested [getYield()] of [src], with seed traits [english_list(genes)] and reagents_add [english_list(reagents_add)] and potency [potency].", INVESTIGATE_BOTANY)
|
||||
parent.update_tray(user)
|
||||
|
||||
return result
|
||||
|
||||
/obj/item/seeds/proc/harvest_userless()
|
||||
@@ -263,6 +300,14 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
if(C)
|
||||
C.value = production
|
||||
|
||||
/obj/item/seeds/proc/adjust_instability(adjustamt)
|
||||
if(instability == -1)
|
||||
return
|
||||
instability = clamp(instability + adjustamt, 0, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/instability)
|
||||
if(C)
|
||||
C.value = instability
|
||||
|
||||
/obj/item/seeds/proc/adjust_potency(adjustamt)
|
||||
if(potency != -1)
|
||||
potency = clamp(potency + adjustamt, 0, 100)
|
||||
@@ -320,6 +365,14 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
if(C)
|
||||
C.value = potency
|
||||
|
||||
/obj/item/seeds/proc/set_instability(adjustamt)
|
||||
if(instability == -1)
|
||||
return
|
||||
instability = clamp(adjustamt, 0, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/instability)
|
||||
if(C)
|
||||
C.value = instability
|
||||
|
||||
/obj/item/seeds/proc/set_weed_rate(adjustamt)
|
||||
weed_rate = clamp(adjustamt, 0, 10)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate)
|
||||
@@ -352,6 +405,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
text += "- Production speed: [production]\n"
|
||||
text += "- Endurance: [endurance]\n"
|
||||
text += "- Lifespan: [lifespan]\n"
|
||||
text += "- Instability: [instability]\n"
|
||||
text += "- Weed Growth Rate: [weed_rate]\n"
|
||||
text += "- Weed Vulnerability: [weed_chance]\n"
|
||||
if(rarity)
|
||||
@@ -362,9 +416,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
continue
|
||||
all_traits += " [traits.get_name()]"
|
||||
text += "- Plant Traits:[all_traits]\n"
|
||||
|
||||
text += "*---------*"
|
||||
|
||||
return text
|
||||
|
||||
/obj/item/seeds/proc/on_chem_reaction(datum/reagents/S) //in case seeds have some special interaction with special chems
|
||||
@@ -373,9 +425,19 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
|
||||
if (istype(O, /obj/item/plant_analyzer))
|
||||
to_chat(user, "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.</span>")
|
||||
var/text = get_analyzer_text()
|
||||
if(text)
|
||||
to_chat(user, "<span class='notice'>[text]</span>")
|
||||
var/text
|
||||
var/obj/item/plant_analyzer/P_analyzer = O
|
||||
if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS)
|
||||
text = get_analyzer_text()
|
||||
if(text)
|
||||
to_chat(user, "<span class='notice'>[text]</span>")
|
||||
if(reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS)
|
||||
to_chat(user, "<span class='notice'>- Plant Reagents -</span>")
|
||||
to_chat(user, "<span class='notice'>*---------*</span>")
|
||||
for(var/datum/plant_gene/reagent/G in genes)
|
||||
to_chat(user, "<span class='notice'>- [G.get_name()] -</span>")
|
||||
to_chat(user, "<span class='notice'>*---------*</span>")
|
||||
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -261,13 +261,11 @@
|
||||
set_pin_data(IC_OUTPUT, 12, H.pestlevel)
|
||||
set_pin_data(IC_OUTPUT, 13, H.toxic)
|
||||
set_pin_data(IC_OUTPUT, 14, H.waterlevel)
|
||||
set_pin_data(IC_OUTPUT, 15, H.nutrilevel)
|
||||
set_pin_data(IC_OUTPUT, 15, H.reagents.total_volume)
|
||||
set_pin_data(IC_OUTPUT, 16, H.harvest)
|
||||
set_pin_data(IC_OUTPUT, 17, H.dead)
|
||||
set_pin_data(IC_OUTPUT, 18, H.plant_health)
|
||||
set_pin_data(IC_OUTPUT, 19, H.self_sustaining)
|
||||
set_pin_data(IC_OUTPUT, 20, H.using_irrigation)
|
||||
set_pin_data(IC_OUTPUT, 21, H.FindConnected())
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
|
||||
|
||||
@@ -19,30 +19,26 @@
|
||||
// Hydroponics trays have no reagents holder and handle reagents in their own snowflakey way.
|
||||
// This is a dirty hack to make injecting reagents into them work.
|
||||
// TODO: refactor that.
|
||||
/obj/item/integrated_circuit/reagent/proc/inject_tray(obj/machinery/hydroponics/tray, atom/movable/source, amount)
|
||||
var/atom/movable/acting_object = get_object()
|
||||
var/list/trays = list(tray)
|
||||
var/visi_msg = "[acting_object] transfers fluid into [tray]"
|
||||
//Time for someone to refactor this. Trays can now hold reagents.
|
||||
//obj/item/integrated_circuit/reagent/proc/inject_tray(obj/machinery/hydroponics/tray, atom/movable/source, amount)
|
||||
//var/atom/movable/acting_object = get_object()
|
||||
//var/list/trays = list(tray)
|
||||
//var/visi_msg = "[acting_object] transfers fluid into [tray]"
|
||||
|
||||
if(amount > 30 && source.reagents.total_volume >= 30 && tray.using_irrigation)
|
||||
trays = tray.FindConnected()
|
||||
if (trays.len > 1)
|
||||
visi_msg += ", setting off the irrigation system"
|
||||
//acting_object.visible_message("<span class='notice'>[visi_msg].</span>")
|
||||
//playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
|
||||
acting_object.visible_message("<span class='notice'>[visi_msg].</span>")
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
//var/split = round(amount/trays.len)
|
||||
|
||||
var/split = round(amount/trays.len)
|
||||
//for(var/obj/machinery/hydroponics/H in trays)
|
||||
//var/datum/reagents/temp_reagents = new /datum/reagents()
|
||||
//temp_reagents.my_atom = H
|
||||
|
||||
for(var/obj/machinery/hydroponics/H in trays)
|
||||
var/datum/reagents/temp_reagents = new /datum/reagents()
|
||||
temp_reagents.my_atom = H
|
||||
//source.reagents.trans_to(temp_reagents, split)
|
||||
//H.on_hydroponics_apply(temp_reagents)
|
||||
|
||||
source.reagents.trans_to(temp_reagents, split)
|
||||
H.applyChemicals(temp_reagents)
|
||||
|
||||
temp_reagents.clear_reagents()
|
||||
qdel(temp_reagents)
|
||||
//temp_reagents.clear_reagents()
|
||||
//qdel(temp_reagents)
|
||||
|
||||
/obj/item/integrated_circuit/reagent/injector
|
||||
name = "integrated hypo-injector"
|
||||
@@ -116,10 +112,10 @@
|
||||
return
|
||||
|
||||
if(!AM.reagents)
|
||||
if(istype(AM, /obj/machinery/hydroponics) && direction_mode == SYRINGE_INJECT && reagents.total_volume && transfer_amount)//injection into tray.
|
||||
inject_tray(AM, src, transfer_amount)
|
||||
activate_pin(2)
|
||||
return
|
||||
//if(istype(AM, /obj/machinery/hydroponics) && direction_mode == SYRINGE_INJECT && reagents.total_volume && transfer_amount)//injection into tray.
|
||||
//inject_tray(AM, src, transfer_amount)
|
||||
//activate_pin(2)
|
||||
//return
|
||||
activate_pin(3)
|
||||
return
|
||||
|
||||
@@ -242,13 +238,14 @@
|
||||
if(!source.reagents)
|
||||
return
|
||||
|
||||
if(!target.reagents)
|
||||
//if(!target.reagents)
|
||||
// Hydroponics trays have no reagents holder and handle reagents in their own snowflakey way.
|
||||
// This is a dirty hack to make injecting reagents into them work.
|
||||
if(istype(target, /obj/machinery/hydroponics) && source.reagents.total_volume)
|
||||
inject_tray(target, source, transfer_amount)
|
||||
activate_pin(2)
|
||||
return
|
||||
//Someone should redo this. Trays should hold reagents now.
|
||||
//if(istype(target, /obj/machinery/hydroponics) && source.reagents.total_volume)
|
||||
//inject_tray(target, source, transfer_amount)
|
||||
//activate_pin(2)
|
||||
//return
|
||||
|
||||
if(!source.is_drainable() || !target.is_refillable())
|
||||
return
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
/datum/sprite_accessory/xeno_head/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return (!H.dna.features["xenohead"] || H.dna.features["xenohead"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
return (!H.dna.features["xenohead"] || H.dna.features["xenohead"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic))
|
||||
|
||||
/datum/sprite_accessory/xeno_head/standard
|
||||
name = "Standard"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
/datum/sprite_accessory/ears/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return (!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
return (!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic))
|
||||
|
||||
/datum/sprite_accessory/ears/none
|
||||
name = "None"
|
||||
@@ -187,7 +187,7 @@
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return (!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
return (!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic))
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/none
|
||||
name = "None"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
/datum/sprite_accessory/horns/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return (!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
return (!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic))
|
||||
|
||||
/datum/sprite_accessory/horns/none
|
||||
name = "None"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
/datum/sprite_accessory/snouts/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic))
|
||||
|
||||
/datum/sprite_accessory/snout/guilmon
|
||||
name = "Guilmon"
|
||||
@@ -163,7 +163,7 @@
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic))
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/none
|
||||
name = "None"
|
||||
|
||||
@@ -284,11 +284,19 @@
|
||||
QDEL_LIST(traumas)
|
||||
return ..()
|
||||
|
||||
//other types of brains
|
||||
|
||||
/obj/item/organ/brain/alien
|
||||
name = "alien brain"
|
||||
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
|
||||
icon_state = "brain-x"
|
||||
|
||||
/obj/item/organ/brain/ipc
|
||||
name = "positronic brain"
|
||||
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has an IPC serial number engraved on the top. It is usually slotted into the head of synthetic crewmembers."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "posibrain-ipc"
|
||||
|
||||
|
||||
////////////////////////////////////TRAUMAS////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -407,6 +407,9 @@
|
||||
if(. & EMP_PROTECT_CONTENTS)
|
||||
return
|
||||
var/informed = FALSE
|
||||
if(isrobotic(src))
|
||||
apply_status_effect(/datum/status_effect/no_combat_mode/robotic_emp, severity / 20)
|
||||
severity *= 0.5
|
||||
for(var/obj/item/bodypart/L in src.bodyparts)
|
||||
if(L.status == BODYPART_ROBOTIC)
|
||||
if(!informed)
|
||||
|
||||
@@ -362,7 +362,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
if(H.client && has_field_of_vision && CONFIG_GET(flag/use_field_of_vision))
|
||||
H.LoadComponent(/datum/component/field_of_vision, H.field_of_vision_type)
|
||||
|
||||
update_species_slowdown(C)
|
||||
C.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/species, TRUE, multiplicative_slowdown = speedmod)
|
||||
|
||||
if(ROBOTIC_LIMBS in species_traits)
|
||||
for(var/obj/item/bodypart/B in C.bodyparts)
|
||||
B.change_bodypart_status(BODYPART_ROBOTIC, FALSE, TRUE) // Makes all Bodyparts robotic.
|
||||
B.render_like_organic = TRUE
|
||||
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
|
||||
|
||||
/datum/species/proc/update_species_slowdown(mob/living/carbon/human/H)
|
||||
@@ -403,6 +409,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
if(F)
|
||||
qdel(F)
|
||||
|
||||
|
||||
if(ROBOTIC_LIMBS in species_traits)
|
||||
for(var/obj/item/bodypart/B in C.bodyparts)
|
||||
B.change_bodypart_status(BODYPART_ORGANIC, FALSE, TRUE)
|
||||
B.render_like_organic = FALSE
|
||||
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src)
|
||||
|
||||
/datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour)
|
||||
@@ -423,7 +435,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
var/dynamic_fhair_suffix = ""
|
||||
|
||||
//for augmented heads
|
||||
if(HD.status == BODYPART_ROBOTIC)
|
||||
if(HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)
|
||||
return
|
||||
|
||||
//we check if our hat or helmet hides our facial hair.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Android"
|
||||
id = "android"
|
||||
say_mod = "states"
|
||||
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
|
||||
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL,ROBOTIC_LIMBS)
|
||||
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 = MOB_ROBOTIC|MOB_HUMANOID
|
||||
meat = null
|
||||
|
||||
@@ -5,19 +5,26 @@
|
||||
default_color = "00FF00"
|
||||
blacklisted = 0
|
||||
sexes = 0
|
||||
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING,HAS_FLESH,HAS_BONE,HAIR)
|
||||
inherent_traits = list(TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NO_PROCESS_FOOD)
|
||||
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING,HAS_FLESH,HAS_BONE,HAIR,ROBOTIC_LIMBS)
|
||||
hair_alpha = 210
|
||||
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
|
||||
mutant_bodyparts = list("ipc_screen" = "Blank", "ipc_antenna" = "None")
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
|
||||
gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless)
|
||||
mutanttongue = /obj/item/organ/tongue/robot/ipc
|
||||
//Just robo looking parts.
|
||||
|
||||
//Just robo looking parts.
|
||||
mutant_heart = /obj/item/organ/heart/ipc
|
||||
mutantlungs = /obj/item/organ/lungs/ipc
|
||||
mutantliver = /obj/item/organ/liver/ipc
|
||||
mutantstomach = /obj/item/organ/stomach/ipc
|
||||
mutanteyes = /obj/item/organ/eyes/ipc
|
||||
mutantears = /obj/item/organ/ears/ipc
|
||||
mutanttongue = /obj/item/organ/tongue/robot/ipc
|
||||
mutant_brain = /obj/item/organ/brain/ipc
|
||||
|
||||
//special cybernetic organ for getting power from apcs
|
||||
mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord)
|
||||
|
||||
exotic_bloodtype = "HF"
|
||||
exotic_blood_color = BLOOD_COLOR_OIL
|
||||
|
||||
@@ -3,18 +3,24 @@
|
||||
id = "synthliz"
|
||||
say_mod = "beeps"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,HAS_FLESH,HAS_BONE)
|
||||
species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,ROBOTIC_LIMBS,HAS_FLESH,HAS_BONE)
|
||||
inherent_traits = list(TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NO_PROCESS_FOOD)
|
||||
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
|
||||
mutant_bodyparts = list("ipc_antenna" = "Synthetic Lizard - Antennae","mam_tail" = "Synthetic Lizard", "mam_snouts" = "Synthetic Lizard - Snout", "legs" = "Digitigrade", "mam_body_markings" = "Synthetic Lizard - Plates", "taur" = "None")
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
|
||||
gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless)
|
||||
mutanttongue = /obj/item/organ/tongue/robot/ipc
|
||||
//Just robo looking parts.
|
||||
mutant_heart = /obj/item/organ/heart/ipc
|
||||
mutantlungs = /obj/item/organ/lungs/ipc
|
||||
mutantliver = /obj/item/organ/liver/ipc
|
||||
mutantstomach = /obj/item/organ/stomach/ipc
|
||||
mutanteyes = /obj/item/organ/eyes/ipc
|
||||
mutantears = /obj/item/organ/ears/ipc
|
||||
mutanttongue = /obj/item/organ/tongue/robot/ipc
|
||||
mutant_brain = /obj/item/organ/brain/ipc
|
||||
|
||||
//special cybernetic organ for getting power from apcs
|
||||
mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord)
|
||||
|
||||
exotic_bloodtype = "S"
|
||||
exotic_blood_color = BLOOD_COLOR_OIL
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
icon_state = "hydrotray4"
|
||||
obj_flags = CAN_BE_HIT | UNIQUE_RENAME
|
||||
circuit = /obj/item/circuitboard/machine/hydroponics/automagic
|
||||
self_sufficiency_req = 400 //automating hydroponics makes gaia sad so she needs more drugs to turn they tray godly.
|
||||
canirrigate = FALSE
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/constructable/automagic/attackby(obj/item/O, mob/user, params)
|
||||
@@ -44,7 +42,7 @@
|
||||
|
||||
/obj/machinery/hydroponics/constructable/automagic/process()
|
||||
if(reagents)
|
||||
applyChemicals(reagents)
|
||||
reagents.add_reagent(reagents)
|
||||
reagents.clear_reagents()
|
||||
if(dead)
|
||||
dead = 0
|
||||
|
||||
@@ -549,11 +549,16 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
|
||||
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
|
||||
if(affecting && affecting.status == BODYPART_ROBOTIC)
|
||||
//only heal to 25 if limb is damaged to or past 25 burn, otherwise heal normally
|
||||
var/difference = affecting.burn_dam - 25
|
||||
var/heal_amount = 15
|
||||
if(difference >= 0)
|
||||
heal_amount = difference
|
||||
if(user == H)
|
||||
user.visible_message("<span class='notice'>[user] starts to fix some of the wires in [H]'s [affecting.name].</span>", "<span class='notice'>You start fixing some of the wires in [H]'s [affecting.name].</span>")
|
||||
if(!do_mob(user, H, 50))
|
||||
return
|
||||
if(item_heal_robotic(H, user, 0, 15))
|
||||
if(item_heal_robotic(H, user, 0, heal_amount))
|
||||
use(1)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -185,6 +185,23 @@
|
||||
/obj/item/stock_parts/cell/get_part_rating()
|
||||
return rating * maxcharge
|
||||
|
||||
// stuff so ipcs and synthlizards can eat power cells, taken from how moths can eat clothing
|
||||
/obj/item/reagent_containers/food/snacks/cell
|
||||
name = "oops"
|
||||
desc = "If you're reading this it means I messed up. This is related to ipcs/synths eating cells and I didn't know a better way to do it than making a new food object."
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 0.5)
|
||||
tastes = list("electricity" = 1, "metal" = 1)
|
||||
|
||||
/obj/item/stock_parts/cell/attack(mob/M, mob/user, def_zone)
|
||||
if(user.a_intent != INTENT_HARM && isrobotic(M))
|
||||
var/obj/item/reagent_containers/food/snacks/cell/cell_as_food = new
|
||||
cell_as_food.name = name
|
||||
if(cell_as_food.attack(M, user, def_zone))
|
||||
take_damage(40, sound_effect=FALSE)
|
||||
qdel(cell_as_food)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/* Cell variants*/
|
||||
/obj/item/stock_parts/cell/empty
|
||||
start_charged = FALSE
|
||||
|
||||
@@ -213,6 +213,16 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
|
||||
if(prob(30))
|
||||
to_chat(M, "<span class='boldannounce'>You're not feeling good at all! You really need some [name].</span>")
|
||||
|
||||
/**
|
||||
* New, standardized method for chemicals to affect hydroponics trays.
|
||||
* Defined on a per-chem level as opposed to by the tray.
|
||||
* Can affect plant's health, stats, or cause the plant to react in certain ways.
|
||||
*/
|
||||
/datum/reagent/proc/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
if(!mytray || !chems)
|
||||
return
|
||||
return
|
||||
|
||||
/proc/pretty_string_from_reagent_list(list/reagent_list)
|
||||
//Convert reagent list to a printable string for logging etc
|
||||
var/list/rs = list()
|
||||
|
||||
@@ -90,6 +90,13 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "A freezing pint of beer."
|
||||
pH = 4
|
||||
|
||||
// Beer is a chemical composition of alcohol and various other things. It's a garbage nutrient but hey, it's still one. Also alcohol is bad, mmmkay?
|
||||
/datum/reagent/consumable/ethanol/beer/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 0.05))
|
||||
mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 0.7))
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/light
|
||||
name = "Light Beer"
|
||||
description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety has reduced calorie and alcohol content."
|
||||
|
||||
@@ -214,6 +214,14 @@
|
||||
pH = 6.5
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
// Milk is good for humans, but bad for plants. The sugars cannot be used by plants, and the milk fat harms growth. Not shrooms though. I can't deal with this now...
|
||||
/datum/reagent/consumable/milk/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustWater(round(chems.get_reagent_amount(type) * 0.3))
|
||||
if(myseed)
|
||||
myseed.adjust_potency(-chems.get_reagent_amount(type) * 0.5)
|
||||
|
||||
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
|
||||
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
|
||||
M.heal_bodypart_damage(1.5,0, 0)
|
||||
@@ -607,6 +615,15 @@
|
||||
glass_name = "honeycomb of Buzz Fuzz"
|
||||
glass_desc = "Stinging with flavour."
|
||||
|
||||
//This drink seems to be just made for plants.. how curious.
|
||||
/datum/reagent/consumable/buzz_fuzz/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src,1))
|
||||
mytray.adjustPests(-rand(2,5))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
if(myseed)
|
||||
myseed.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.5))
|
||||
|
||||
/datum/reagent/consumable/buzz_fuzz/on_mob_life(mob/living/carbon/M)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/sugar,1)
|
||||
if(prob(5))
|
||||
@@ -678,6 +695,15 @@
|
||||
glass_name = "glass of soda water"
|
||||
glass_desc = "Soda water. Why not make a scotch and soda?"
|
||||
|
||||
|
||||
// A variety of nutrients are dissolved in club soda, without sugar.
|
||||
// These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth.
|
||||
/datum/reagent/consumable/sodawater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustWater(round(chems.get_reagent_amount(type) * 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(type) * 0.1))
|
||||
|
||||
/datum/reagent/consumable/sodawater/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
M.drowsyness = max(0,M.drowsyness-3)
|
||||
|
||||
@@ -17,8 +17,9 @@
|
||||
var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes
|
||||
|
||||
/datum/reagent/consumable/on_mob_life(mob/living/carbon/M)
|
||||
current_cycle++
|
||||
M.adjust_nutrition(nutriment_factor, max_nutrition)
|
||||
if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD))
|
||||
current_cycle++
|
||||
M.adjust_nutrition(nutriment_factor, max_nutrition)
|
||||
M.CheckBloodsuckerEatFood(nutriment_factor)
|
||||
holder.remove_reagent(type, metabolization_rate)
|
||||
|
||||
@@ -49,10 +50,11 @@
|
||||
var/burn_heal = 0
|
||||
|
||||
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(50))
|
||||
M.heal_bodypart_damage(brute_heal,burn_heal, 0)
|
||||
. = 1
|
||||
..()
|
||||
if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD))
|
||||
if(prob(50))
|
||||
M.heal_bodypart_damage(brute_heal,burn_heal, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/nutriment/on_new(list/supplied_data)
|
||||
// taste data can sometimes be ("salt" = 3, "chips" = 1)
|
||||
@@ -157,6 +159,13 @@
|
||||
taste_description = "sweetness"
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
// Plants should not have sugar, they can't use it and it prevents them getting water/ nutients, it is good for mold though...
|
||||
/datum/reagent/consumable/sugar/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustWeeds(rand(2,3))
|
||||
mytray.adjustPests(rand(1,2))
|
||||
|
||||
/datum/reagent/consumable/sugar/overdose_start(mob/living/M)
|
||||
to_chat(M, "<span class='userdanger'>You go into hyperglycaemic shock! Lay off the twinkies!</span>")
|
||||
M.AdjustSleeping(600, FALSE)
|
||||
@@ -174,6 +183,12 @@
|
||||
color = "#899613" // rgb: 137, 150, 19
|
||||
taste_description = "watery milk"
|
||||
|
||||
// Compost for EVERYTHING
|
||||
/datum/reagent/consumable/virus_food/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 0.5))
|
||||
|
||||
/datum/reagent/consumable/soysauce
|
||||
name = "Soysauce"
|
||||
description = "A salty sauce made from the soy plant."
|
||||
|
||||
@@ -36,6 +36,25 @@
|
||||
taste_description = "badmins"
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
// The best stuff there is. For testing/debugging.
|
||||
/datum/reagent/medicine/adminordrazine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustWater(round(chems.get_reagent_amount(type) * 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(type) * 1))
|
||||
mytray.adjustPests(-rand(1,5))
|
||||
mytray.adjustWeeds(-rand(1,5))
|
||||
if(chems.has_reagent(type, 3))
|
||||
switch(rand(100))
|
||||
if(66 to 100)
|
||||
mytray.mutatespecie()
|
||||
if(33 to 65)
|
||||
mytray.mutateweed()
|
||||
if(1 to 32)
|
||||
mytray.mutatepest(user)
|
||||
else if(prob(20))
|
||||
mytray.visible_message("<span class='warning'>Nothing happens...</span>")
|
||||
|
||||
/datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M)
|
||||
M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1)
|
||||
M.setCloneLoss(0, 0)
|
||||
@@ -1168,6 +1187,11 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
// Antitoxin binds plants pretty well. So the tox goes significantly down
|
||||
/datum/reagent/medicine/antitoxin/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
mytray.adjustToxic(-round(chems.get_reagent_amount(type) * 2))
|
||||
|
||||
/datum/reagent/medicine/inaprovaline
|
||||
name = "Inaprovaline"
|
||||
description = "Stabilizes the breathing of patients. Good for those in critical condition."
|
||||
@@ -1297,6 +1321,21 @@
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already.
|
||||
|
||||
|
||||
//Earthsblood is still a wonderdrug. Just... don't expect to be able to mutate something that makes plants so healthy.
|
||||
/datum/reagent/medicine/earthsblood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustPests(-rand(1,3))
|
||||
mytray.adjustWeeds (-rand(1,3))
|
||||
if(myseed)
|
||||
myseed.adjust_instability(-round(chems.get_reagent_amount(src.type) * 1.3))
|
||||
myseed.adjust_potency(round(chems.get_reagent_amount(src.type) *1))
|
||||
myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1))
|
||||
myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.5))
|
||||
myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.5))
|
||||
|
||||
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-3 * REM, FALSE)
|
||||
M.adjustFireLoss(-3 * REM, FALSE)
|
||||
|
||||
@@ -13,6 +13,12 @@
|
||||
shot_glass_icon_state = "shotglassred"
|
||||
pH = 7.4
|
||||
|
||||
// FEED ME,SEYMOUR!
|
||||
/datum/reagent/blood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustPests(rand(2,3))
|
||||
|
||||
/datum/reagent/blood/reaction_mob(mob/living/L, method = TOUCH, reac_volume)
|
||||
if(data && data["viruses"])
|
||||
for(var/thing in data["viruses"])
|
||||
@@ -313,6 +319,13 @@
|
||||
metabolization_rate = 45 * REAGENTS_METABOLISM
|
||||
. = 1
|
||||
|
||||
///For weird backwards situations where water manages to get added to trays nutrients, as opposed to being snowflaked away like usual.
|
||||
/datum/reagent/water/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 1))
|
||||
//You don't belong in this world, monster!
|
||||
chems.remove_reagent(/datum/reagent/water, chems.get_reagent_amount(src.type))
|
||||
|
||||
/datum/reagent/water/hollowwater
|
||||
name = "Hollow Water"
|
||||
description = "An ubiquitous chemical substance that is composed of hydrogen and oxygen, but it looks kinda hollow."
|
||||
@@ -329,6 +342,14 @@
|
||||
glass_desc = "A glass of holy water."
|
||||
pH = 7.5 //God is alkaline
|
||||
|
||||
// Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits. Also ALSO increases instability.
|
||||
/datum/reagent/water/holywater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
if(myseed)
|
||||
myseed.adjust_instability(round(chems.get_reagent_amount(src.type) * 0.15))
|
||||
|
||||
/datum/reagent/water/holywater/on_mob_metabolize(mob/living/L)
|
||||
. = ..()
|
||||
ADD_TRAIT(L, TRAIT_HOLY, type)
|
||||
@@ -401,6 +422,13 @@
|
||||
qdel(R)
|
||||
T.Bless()
|
||||
|
||||
/datum/reagent/water/holywater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
. = ..()
|
||||
mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
if(myseed)
|
||||
myseed.adjust_instability(round(chems.get_reagent_amount(src.type) * 0.15))
|
||||
|
||||
/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke
|
||||
name = "Unholy Water"
|
||||
overdose_threshold = 150 //Same as normal water
|
||||
@@ -973,6 +1001,15 @@
|
||||
taste_description = "chlorine"
|
||||
pH = 7.4
|
||||
|
||||
// You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial
|
||||
/datum/reagent/chlorine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 1.5))
|
||||
mytray.adjustWater(-round(chems.get_reagent_amount(src.type) * 0.5))
|
||||
mytray.adjustWeeds(-rand(1,3))
|
||||
|
||||
/datum/reagent/chlorine/on_mob_life(mob/living/carbon/M)
|
||||
M.take_bodypart_damage(1*REM, 0, 0, 0)
|
||||
. = 1
|
||||
@@ -986,6 +1023,15 @@
|
||||
taste_description = "acid"
|
||||
pH = 2
|
||||
|
||||
// You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial
|
||||
/datum/reagent/fluorine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 2))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 2.5))
|
||||
mytray.adjustWater(-round(chems.get_reagent_amount(src.type) * 0.5))
|
||||
mytray.adjustWeeds(-rand(1,4))
|
||||
|
||||
/datum/reagent/fluorine/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(1*REM, 0)
|
||||
. = 1
|
||||
@@ -1037,6 +1083,12 @@
|
||||
taste_description = "the colour blue and regret"
|
||||
pH = 10
|
||||
|
||||
/datum/reagent/radium/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 1))
|
||||
|
||||
/datum/reagent/radium/on_mob_life(mob/living/carbon/M)
|
||||
M.apply_effect(2*REM/M.metabolism_efficiency,EFFECT_IRRADIATE,0)
|
||||
..()
|
||||
@@ -1148,6 +1200,14 @@
|
||||
GG = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
GG.reagents.add_reagent(/datum/reagent/uranium, reac_volume)
|
||||
|
||||
//Mutagenic chem side-effects.
|
||||
/datum/reagent/uranium/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
mytray.mutation_roll(user)
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 2))
|
||||
|
||||
/datum/reagent/bluespace
|
||||
name = "Bluespace Dust"
|
||||
description = "A dust composed of microscopic bluespace crystals, with minor space-warping properties."
|
||||
@@ -1406,6 +1466,15 @@
|
||||
taste_description = "mordant"
|
||||
pH = 11.6
|
||||
|
||||
/datum/reagent/ammonia/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
// Ammonia is bad ass.
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.12))
|
||||
if(myseed && prob(10))
|
||||
myseed.adjust_yield(1)
|
||||
myseed.adjust_instability(1)
|
||||
|
||||
/datum/reagent/diethylamine
|
||||
name = "Diethylamine"
|
||||
description = "A secondary amine, mildly corrosive."
|
||||
@@ -1413,6 +1482,16 @@
|
||||
taste_description = "iron"
|
||||
pH = 12
|
||||
|
||||
// This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. The new trade off is it culls stability.
|
||||
/datum/reagent/diethylamine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustPests(-rand(1,2))
|
||||
if(myseed)
|
||||
myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1))
|
||||
myseed.adjust_instability(-round(chems.get_reagent_amount(src.type) * 1))
|
||||
|
||||
/datum/reagent/carbondioxide
|
||||
name = "Carbon Dioxide"
|
||||
reagent_state = GAS
|
||||
@@ -1606,24 +1685,68 @@
|
||||
|
||||
/datum/reagent/plantnutriment/eznutriment
|
||||
name = "E-Z-Nutrient"
|
||||
description = "Cheap and extremely common type of plant nutriment."
|
||||
description = "Contains electrolytes. It's what plants crave."
|
||||
color = "#376400" // RBG: 50, 100, 0
|
||||
tox_prob = 10
|
||||
pH = 2.5
|
||||
|
||||
/datum/reagent/plantnutriment/eznutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
. = ..()
|
||||
if(myseed && chems.has_reagent(src.type, 1))
|
||||
myseed.adjust_instability(0.2)
|
||||
myseed.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.3))
|
||||
myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
|
||||
/datum/reagent/plantnutriment/left4zednutriment
|
||||
name = "Left 4 Zed"
|
||||
description = "Unstable nutriment that makes plants mutate more often than usual."
|
||||
color = "#1A1E4D" // RBG: 26, 30, 77
|
||||
tox_prob = 25
|
||||
pH = 3.5
|
||||
|
||||
/datum/reagent/plantnutriment/left4zednutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
. = ..()
|
||||
if(myseed && chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
myseed.adjust_instability(round(chems.get_reagent_amount(src.type) * 0.2))
|
||||
|
||||
/datum/reagent/plantnutriment/robustharvestnutriment
|
||||
name = "Robust Harvest"
|
||||
description = "Very potent nutriment that prevents plants from mutating."
|
||||
description = "Very potent nutriment that slows plants from mutating."
|
||||
color = "#9D9D00" // RBG: 157, 157, 0
|
||||
tox_prob = 15
|
||||
pH = 2.5
|
||||
|
||||
/datum/reagent/plantnutriment/robustharvestnutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
. = ..()
|
||||
if(myseed && chems.has_reagent(src.type, 1))
|
||||
myseed.adjust_instability(-0.25)
|
||||
myseed.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 0.2))
|
||||
|
||||
/datum/reagent/plantnutriment/endurogrow
|
||||
name = "Enduro Grow"
|
||||
description = "A specialized nutriment, which decreases product quantity and potency, but strengthens the plants endurance."
|
||||
color = "#a06fa7" // RBG: 160, 111, 167
|
||||
tox_prob = 15
|
||||
|
||||
/datum/reagent/plantnutriment/endurogrow/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
. = ..()
|
||||
if(myseed && chems.has_reagent(src.type, 1))
|
||||
myseed.adjust_potency(-round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
myseed.adjust_yield(-round(chems.get_reagent_amount(src.type) * 0.075))
|
||||
myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.35))
|
||||
|
||||
/datum/reagent/plantnutriment/liquidearthquake
|
||||
name = "Liquid Earthquake"
|
||||
description = "A specialized nutriment, which increases the plant's production speed, as well as it's susceptibility to weeds."
|
||||
color = "#912e00" // RBG: 145, 46, 0
|
||||
tox_prob = 25
|
||||
|
||||
/datum/reagent/plantnutriment/liquidearthquake/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
|
||||
. = ..()
|
||||
if(myseed && chems.has_reagent(src.type, 1))
|
||||
myseed.adjust_weed_rate(round(chems.get_reagent_amount(src.type) * 0.1))
|
||||
myseed.adjust_weed_chance(round(chems.get_reagent_amount(src.type) * 0.3))
|
||||
myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.075))
|
||||
|
||||
|
||||
// GOON OTHERS
|
||||
|
||||
@@ -1679,6 +1802,13 @@
|
||||
taste_description = "ash"
|
||||
pH = 6.5
|
||||
|
||||
// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer
|
||||
/datum/reagent/ash/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 1))
|
||||
mytray.adjustWeeds(-1)
|
||||
|
||||
/datum/reagent/acetone
|
||||
name = "Acetone"
|
||||
description = "A slick, slightly carcinogenic liquid. Has a multitude of mundane uses in everyday life."
|
||||
@@ -1799,6 +1929,16 @@
|
||||
taste_description = "alkali" //who put ACID for NaOH ????
|
||||
pH = 11.9
|
||||
|
||||
// Saltpetre is used for gardening IRL, to simplify highly, it speeds up growth and strengthens plants
|
||||
/datum/reagent/saltpetre/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(src.type, 1))
|
||||
var/salt = chems.get_reagent_amount(src.type)
|
||||
mytray.adjustHealth(round(salt * 0.18))
|
||||
if(myseed)
|
||||
myseed.adjust_production(-round(salt/10)-prob(salt%10))
|
||||
myseed.adjust_potency(round(salt*1))
|
||||
|
||||
/datum/reagent/drying_agent
|
||||
name = "Drying agent"
|
||||
description = "A desiccant. Can be used to dry things."
|
||||
|
||||
@@ -10,6 +10,12 @@
|
||||
value = REAGENT_VALUE_COMMON //Encouraging people to mix toxins for reasons beyond harming each other or mixing reagents such as pen acid.
|
||||
var/toxpwr = 1.5
|
||||
|
||||
// Are you a bad enough dude to poison your own plants?
|
||||
/datum/reagent/toxin/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 2))
|
||||
|
||||
/datum/reagent/toxin/on_mob_life(mob/living/carbon/M)
|
||||
if(toxpwr)
|
||||
M.adjustToxLoss(toxpwr*REM, 0)
|
||||
@@ -54,6 +60,11 @@
|
||||
C.apply_effect(5,EFFECT_IRRADIATE,0)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/toxin/mutagen/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
mytray.mutation_roll(user)
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustToxic(1.5) //It is still toxic, mind you, but not to the same degree.
|
||||
|
||||
/datum/reagent/toxin/plasma
|
||||
name = "Plasma"
|
||||
description = "Plasma in its liquid form."
|
||||
@@ -245,6 +256,13 @@
|
||||
pH = 2.7
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/toxin/plantbgone/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 10))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 6))
|
||||
mytray.adjustWeeds(-rand(4,8))
|
||||
|
||||
/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O, /obj/structure/alien/weeds))
|
||||
var/obj/structure/alien/weeds/alien_weeds = O
|
||||
@@ -270,6 +288,14 @@
|
||||
pH = 3
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
//Weed Spray
|
||||
/datum/reagent/toxin/plantbgone/weedkiller/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
if(!mytray)
|
||||
return
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 0.5))
|
||||
mytray.adjustWeeds(-rand(1,2))
|
||||
|
||||
/datum/reagent/toxin/pestkiller
|
||||
name = "Pest Killer"
|
||||
description = "A harmful toxic mixture to kill pests. Do not ingest!"
|
||||
@@ -278,6 +304,14 @@
|
||||
pH = 3.2
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
//Pest Spray
|
||||
/datum/reagent/toxin/pestkiller/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
if(!mytray)
|
||||
return
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 1))
|
||||
mytray.adjustPests(-rand(1,2))
|
||||
|
||||
/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
..()
|
||||
if(M.mob_biotypes & MOB_BUG)
|
||||
@@ -838,6 +872,14 @@
|
||||
pH = 2.75
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
// Sure, go ahead and pour acid on your precious plants. What's the worst that could happen?
|
||||
/datum/reagent/toxin/acid/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 1))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 1.5))
|
||||
mytray.adjustWeeds(-rand(1,2))
|
||||
|
||||
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
|
||||
if(!istype(C))
|
||||
return
|
||||
@@ -870,6 +912,14 @@
|
||||
acidpwr = 42.0
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
// ACID II: UNHEEDED WARNINGS
|
||||
/datum/reagent/toxin/acid/fluacid/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
if(chems.has_reagent(type, 1))
|
||||
mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 2))
|
||||
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 3))
|
||||
mytray.adjustWeeds(-rand(1,4))
|
||||
|
||||
/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustFireLoss(current_cycle/10, 0)
|
||||
. = 1
|
||||
|
||||
@@ -77,6 +77,22 @@
|
||||
make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 10)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/end_gro
|
||||
name = "30u Enduro Grow"
|
||||
id = "end_gro"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass= 30)
|
||||
make_reagents = list(/datum/reagent/plantnutriment/endurogrow = 30)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/liq_earth
|
||||
name = "30u Liquid Earthquake"
|
||||
id = "liq_earth"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass= 30)
|
||||
make_reagents = list(/datum/reagent/plantnutriment/liquidearthquake = 30)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/weed_killer
|
||||
name = "Weed Killer"
|
||||
id = "weed_killer"
|
||||
|
||||
@@ -71,6 +71,8 @@
|
||||
var/medium_burn_msg = "blistered"
|
||||
var/heavy_burn_msg = "peeling away"
|
||||
|
||||
var/render_like_organic = FALSE // forces limb to render as if it were an organic limb
|
||||
|
||||
/// The wounds currently afflicting this body part
|
||||
var/list/wounds
|
||||
|
||||
@@ -555,7 +557,7 @@
|
||||
if(status == BODYPART_ORGANIC)
|
||||
icon = base_bp_icon || DEFAULT_BODYPART_ICON_ORGANIC
|
||||
else if(status == BODYPART_ROBOTIC)
|
||||
icon = DEFAULT_BODYPART_ICON_ROBOTIC
|
||||
icon = base_bp_icon || DEFAULT_BODYPART_ICON_ROBOTIC
|
||||
|
||||
if(owner)
|
||||
owner.updatehealth()
|
||||
@@ -669,8 +671,9 @@
|
||||
|
||||
if(status == BODYPART_ROBOTIC)
|
||||
dmg_overlay_type = "robotic"
|
||||
body_markings = null
|
||||
aux_marking = null
|
||||
if(!render_like_organic)
|
||||
body_markings = null
|
||||
aux_marking = null
|
||||
|
||||
if(dropping_limb)
|
||||
no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner.
|
||||
@@ -736,7 +739,7 @@
|
||||
if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST))
|
||||
should_draw_gender = FALSE
|
||||
|
||||
if(is_organic_limb())
|
||||
if(is_organic_limb() || render_like_organic)
|
||||
limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi'
|
||||
if(should_draw_gender)
|
||||
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = 0
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
/datum/surgery_step/fix_brain
|
||||
name = "fix brain"
|
||||
implements = list(TOOL_HEMOSTAT = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/incise_heart, /datum/surgery_step/coronary_bypass, /datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
/datum/surgery/coronary_bypass/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
|
||||
var/obj/item/organ/heart/H = target.getorganslot(ORGAN_SLOT_HEART)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "dental implant"
|
||||
steps = list(/datum/surgery_step/drill, /datum/surgery_step/insert_pill)
|
||||
possible_locs = list(BODY_ZONE_PRECISE_MOUTH)
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
/datum/surgery_step/insert_pill
|
||||
name = "insert pill"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = 0
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
/datum/surgery_step/embalming
|
||||
name = "embalming body"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/incise_heart, /datum/surgery_step/ventricular_electrotherapy, /datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
/datum/surgery_step/ventricular_electrotherapy
|
||||
name = "ventricular electrotherapy"
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_PRECISE_EYES)
|
||||
requires_bodypart_type = 0
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
//fix eyes
|
||||
/datum/surgery_step/fix_eyes
|
||||
name = "fix eyes"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = FALSE
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
replaced_by = /datum/surgery
|
||||
ignore_clothes = TRUE
|
||||
var/healing_step_type
|
||||
|
||||
@@ -2,10 +2,13 @@
|
||||
name = "Lipoplasty"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/cut_fat, /datum/surgery_step/remove_fat, /datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
/datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
|
||||
if(HAS_TRAIT(target, TRAIT_FAT))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//cut fat
|
||||
/datum/surgery_step/cut_fat
|
||||
name = "cut excess fat"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/lobectomy, /datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
/datum/surgery/lobectomy/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
|
||||
var/obj/item/organ/lungs/L = target.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
|
||||
@@ -85,3 +85,107 @@
|
||||
display_results(user, target, "<span class='notice'>You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]...</span>",
|
||||
"[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].",
|
||||
"[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].")
|
||||
|
||||
//cut wires
|
||||
/datum/surgery_step/cut_wires
|
||||
name = "cut wires"
|
||||
implements = list(
|
||||
TOOL_WIRECUTTER = 100,
|
||||
TOOL_SCALPEL = 75,
|
||||
/obj/item/kitchen/knife = 50,
|
||||
/obj/item = 10) // 10% success with any sharp item.
|
||||
time = 24
|
||||
|
||||
/datum/surgery_step/cut_wires/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to cut loose wires in [target]'s [parse_zone(target_zone)]...</span>",
|
||||
"[user] begins to cut loose wires in [target]'s [parse_zone(target_zone)].",
|
||||
"[user] begins to cut loose wires in [target]'s [parse_zone(target_zone)].")
|
||||
|
||||
/datum/surgery_step/cut_wires/tool_check(mob/user, obj/item/tool)
|
||||
if(implement_type == /obj/item && !tool.get_sharpness())
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
//pry off plating
|
||||
/datum/surgery_step/pry_off_plating
|
||||
name = "pry off plating"
|
||||
implements = list(
|
||||
TOOL_CROWBAR = 100,
|
||||
TOOL_HEMOSTAT = 10)
|
||||
time = 24
|
||||
|
||||
/datum/surgery_step/pry_off_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
do_sparks(rand(5, 9), FALSE, target.loc)
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/pry_off_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to pry off [target]'s [parse_zone(target_zone)] plating...</span>",
|
||||
"[user] begins to pry off [target]'s [parse_zone(target_zone)] plating.",
|
||||
"[user] begins to pry off [target]'s [parse_zone(target_zone)] plating.")
|
||||
|
||||
//weld plating
|
||||
/datum/surgery_step/weld_plating
|
||||
name = "weld plating"
|
||||
implements = list(
|
||||
TOOL_WELDER = 100)
|
||||
time = 24
|
||||
|
||||
/datum/surgery_step/weld_plating/tool_check(mob/user, obj/item/tool)
|
||||
if(implement_type == TOOL_WELDER && !tool.use_tool(user, user, 0, volume=50, amount=1))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/weld_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to weld [target]'s [parse_zone(target_zone)] plating...</span>",
|
||||
"[user] begins to weld [target]'s [parse_zone(target_zone)] plating.",
|
||||
"[user] begins to weld [target]'s [parse_zone(target_zone)] plating.")
|
||||
|
||||
//replace wires
|
||||
/datum/surgery_step/replace_wires
|
||||
name = "replace wires"
|
||||
implements = list(/obj/item/stack/cable_coil = 100)
|
||||
time = 24
|
||||
var/cableamount = 5
|
||||
|
||||
/datum/surgery_step/replace_wires/tool_check(mob/user, obj/item/tool)
|
||||
var/obj/item/stack/cable_coil/coil = tool
|
||||
if(coil.get_amount() < cableamount)
|
||||
to_chat(user, "<span class='warning'>Not enough cable!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/replace_wires/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
var/obj/item/stack/cable_coil/coil = tool
|
||||
if(coil && !(coil.get_amount()<cableamount)) //failproof
|
||||
coil.use(cableamount)
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/replace_wires/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to replace [target]'s [parse_zone(target_zone)] wiring...</span>",
|
||||
"[user] begins to replace [target]'s [parse_zone(target_zone)] wiring.",
|
||||
"[user] begins to replace [target]'s [parse_zone(target_zone)] wiring.")
|
||||
|
||||
//add plating
|
||||
/datum/surgery_step/add_plating
|
||||
name = "add plating"
|
||||
implements = list(/obj/item/stack/sheet/metal = 100)
|
||||
time = 24
|
||||
var/metalamount = 5
|
||||
|
||||
/datum/surgery_step/add_plating/tool_check(mob/user, obj/item/tool)
|
||||
var/obj/item/stack/sheet/metal/plat = tool
|
||||
if(plat.get_amount() < metalamount)
|
||||
to_chat(user, "<span class='warning'>Not enough metal!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/add_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
var/obj/item/stack/sheet/metal/plat = tool
|
||||
if(plat && !(plat.get_amount()<metalamount)) //failproof
|
||||
plat.use(metalamount)
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/add_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to add plating to [target]'s [parse_zone(target_zone)]...</span>",
|
||||
"[user] begins to add plating to [target]'s [parse_zone(target_zone)].",
|
||||
"[user] begins to add plating to [target]'s [parse_zone(target_zone)].")
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "organ manipulation"
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
requires_real_bodypart = 1
|
||||
steps = list(
|
||||
/datum/surgery_step/incise,
|
||||
|
||||
@@ -306,3 +306,69 @@
|
||||
var/obj/item/assembly/flash/armimplant/F = new(src)
|
||||
items_list += F
|
||||
F.I = src
|
||||
|
||||
/////////////////
|
||||
|
||||
|
||||
//IPC/Synth Arm//
|
||||
|
||||
|
||||
/////////////////
|
||||
|
||||
/obj/item/organ/cyberimp/arm/power_cord
|
||||
name = "power cord implant"
|
||||
desc = "An internal power cord hooked up to a battery. Useful if you run on volts."
|
||||
contents = newlist(/obj/item/apc_powercord)
|
||||
zone = "l_arm"
|
||||
|
||||
/obj/item/apc_powercord
|
||||
name = "power cord"
|
||||
desc = "An internal power cord hooked up to a battery. Useful if you run on electricity. Not so much otherwise."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "wire1"
|
||||
|
||||
/obj/item/apc_powercord/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
if(!istype(target, /obj/machinery/power/apc) || !ishuman(user) || !proximity_flag)
|
||||
return ..()
|
||||
user.DelayNextAction(CLICK_CD_MELEE)
|
||||
var/obj/machinery/power/apc/A = target
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/organ/stomach/ipc/cell = locate(/obj/item/organ/stomach/ipc) in H.internal_organs
|
||||
if(!cell)
|
||||
to_chat(H, "<span class='warning'>You try to siphon energy from the [A], but your power cell is gone!</span>")
|
||||
return
|
||||
|
||||
if(A.cell && A.cell.charge > 0)
|
||||
if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(user, "<span class='warning'>You are already fully charged!</span>")
|
||||
return
|
||||
else
|
||||
powerdraw_loop(A, H)
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='warning'>There is no charge to draw from that APC.</span>")
|
||||
|
||||
/obj/item/apc_powercord/proc/powerdraw_loop(obj/machinery/power/apc/A, mob/living/carbon/human/H)
|
||||
H.visible_message("<span class='notice'>[H] inserts a power connector into the [A].</span>", "<span class='notice'>You begin to draw power from the [A].</span>")
|
||||
while(do_after(H, 10, target = A))
|
||||
if(loc != H)
|
||||
to_chat(H, "<span class='warning'>You must keep your connector out while charging!</span>")
|
||||
break
|
||||
if(A.cell.charge == 0)
|
||||
to_chat(H, "<span class='warning'>The [A] doesn't have enough charge to spare.</span>")
|
||||
break
|
||||
A.charging = 1
|
||||
if(A.cell.charge >= 500)
|
||||
do_sparks(1, FALSE, A)
|
||||
H.nutrition += 50
|
||||
A.cell.charge -= 150
|
||||
to_chat(H, "<span class='notice'>You siphon off some of the stored charge for your own use.</span>")
|
||||
else
|
||||
H.nutrition += A.cell.charge/10
|
||||
A.cell.charge = 0
|
||||
to_chat(H, "<span class='notice'>You siphon off as much as the [A] can spare.</span>")
|
||||
break
|
||||
if(H.nutrition > NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(H, "<span class='notice'>You are now fully charged.</span>")
|
||||
break
|
||||
H.visible_message("<span class='notice'>[H] unplugs from the [A].</span>", "<span class='notice'>You unplug from the [A].</span>")
|
||||
|
||||
@@ -131,4 +131,31 @@
|
||||
. = ..()
|
||||
if(. & EMP_PROTECT_SELF)
|
||||
return
|
||||
damage += 0.5 * severity
|
||||
damage += 0.15 * severity
|
||||
|
||||
/obj/item/organ/ears/ipc
|
||||
name = "auditory sensors"
|
||||
icon_state = "ears-c"
|
||||
desc = "A pair of microphones intended to be installed in an IPC head, that grant the ability to hear."
|
||||
zone = BODY_ZONE_HEAD
|
||||
slot = ORGAN_SLOT_EARS
|
||||
gender = PLURAL
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
|
||||
/obj/item/organ/ears/ipc/emp_act(severity)
|
||||
. = ..()
|
||||
if(!owner || . & EMP_PROTECT_SELF)
|
||||
return
|
||||
to_chat(owner, "<span class='warning'>Alert: Auditory systems corrupted!.</span>")
|
||||
switch(severity)
|
||||
if(1)
|
||||
owner.Jitter(30)
|
||||
owner.Dizzy(30)
|
||||
owner.DefaultCombatKnockdown(80)
|
||||
deaf = 30
|
||||
|
||||
if(2)
|
||||
owner.Jitter(15)
|
||||
owner.Dizzy(15)
|
||||
owner.DefaultCombatKnockdown(40)
|
||||
damage += 0.15 * severity
|
||||
|
||||
@@ -421,6 +421,15 @@
|
||||
name = "ipc eyes"
|
||||
icon_state = "cybernetic_eyeballs"
|
||||
|
||||
/obj/item/organ/eyes/ipc/emp_act(severity)
|
||||
. = ..()
|
||||
if(!owner || . & EMP_PROTECT_SELF)
|
||||
return
|
||||
to_chat(owner, "<span class='warning'>Alert: Perception visuals damaged!</span>")
|
||||
owner.flash_act(visual = 1)
|
||||
if(severity >= 70)
|
||||
owner.adjustOrganLoss(ORGAN_SLOT_EYES, 20)
|
||||
|
||||
#undef BLURRY_VISION_ONE
|
||||
#undef BLURRY_VISION_TWO
|
||||
#undef BLIND_VISION_THREE
|
||||
|
||||
@@ -521,9 +521,20 @@
|
||||
failed = FALSE
|
||||
|
||||
/obj/item/organ/lungs/ipc
|
||||
name = "ipc lungs"
|
||||
name = "ipc cooling system"
|
||||
icon_state = "lungs-c"
|
||||
|
||||
/obj/item/organ/lungs/ipc/emp_act(severity) //Should probably put it somewhere else later
|
||||
. = ..()
|
||||
if(. & EMP_PROTECT_SELF)
|
||||
return
|
||||
to_chat(owner, "<span class='warning'>Alert: Critical cooling system failure!</span>")
|
||||
switch(severity)
|
||||
if(1)
|
||||
owner.adjust_bodytemperature(100*TEMPERATURE_DAMAGE_COEFFICIENT)
|
||||
if(2)
|
||||
owner.adjust_bodytemperature(30*TEMPERATURE_DAMAGE_COEFFICIENT)
|
||||
|
||||
/obj/item/organ/lungs/plasmaman
|
||||
name = "plasma filter"
|
||||
desc = "A spongy rib-shaped mass for filtering plasma from the air."
|
||||
|
||||
Executable → Regular
+12
-1
@@ -89,9 +89,20 @@
|
||||
desc = "A strange crystal that is responsible for metabolizing the unseen energy force that feeds plasmamen."
|
||||
|
||||
/obj/item/organ/stomach/ipc
|
||||
name = "ipc stomach"
|
||||
name = "ipc cell"
|
||||
icon_state = "stomach-ipc"
|
||||
|
||||
/obj/item/organ/stomach/ipc/emp_act(severity)
|
||||
. = ..()
|
||||
if(!owner || . & EMP_PROTECT_SELF)
|
||||
return
|
||||
switch(severity)
|
||||
if(1)
|
||||
owner.nutrition = min(owner.nutrition - 50, 0)
|
||||
to_chat(owner, "<span class='warning'>Alert: Detected severe battery discharge!</span>")
|
||||
if(2)
|
||||
owner.nutrition = min(owner.nutrition - 100, 0)
|
||||
to_chat(owner, "<span class='warning'>Alert: Minor battery discharge!</span>")
|
||||
|
||||
/obj/item/organ/stomach/ethereal
|
||||
name = "biological battery"
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
name = "Plastic surgery"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/reshape_face, /datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = BODYPART_ORGANIC
|
||||
|
||||
//reshape_face
|
||||
/datum/surgery_step/reshape_face
|
||||
name = "reshape face"
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/datum/surgery/robot_brain_surgery
|
||||
name = "Reset posibrain logic (Brain surgery)"
|
||||
steps = list(
|
||||
/datum/surgery_step/mechanic_open,
|
||||
/datum/surgery_step/mechanic_unwrench,
|
||||
/datum/surgery_step/pry_off_plating,
|
||||
/datum/surgery_step/prepare_electronics,
|
||||
/datum/surgery_step/fix_robot_brain,
|
||||
/datum/surgery_step/mechanic_close)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = BODYPART_ROBOTIC
|
||||
desc = "A surgical procedure that restores the default behavior logic and personality matrix of an IPC posibrain."
|
||||
|
||||
/datum/surgery_step/fix_robot_brain
|
||||
name = "fix posibrain (multitool)"
|
||||
implements = list(TOOL_MULTITOOL = 100, TOOL_HEMOSTAT = 35, TOOL_SCREWDRIVER = 15)
|
||||
time = 120 //long and complicated
|
||||
|
||||
/datum/surgery/robot_brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
|
||||
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(!B)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/fix_robot_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to fix [target]'s posibrain...</span>",
|
||||
"[user] begins to fix [target]'s posibrain.",
|
||||
"[user] begins to perform surgery on [target]'s posibrain.")
|
||||
|
||||
/datum/surgery_step/fix_robot_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You succeed in fixing [target]'s posibrain.</span>",
|
||||
"[user] successfully fixes [target]'s posibrain!",
|
||||
"[user] completes the surgery on [target]'s posibrain.")
|
||||
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
|
||||
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
|
||||
target.setOrganLoss(ORGAN_SLOT_BRAIN, target.getOrganLoss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag
|
||||
target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY) //Lobotomy tier fix cause you can't clone this!
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/fix_robot_brain/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.getorganslot(ORGAN_SLOT_BRAIN))
|
||||
display_results(user, target, "<span class='warning'>You screw up, causing more damage!</span>",
|
||||
"<span class='warning'>[user] screws up, causing damage to the circuits!</span>",
|
||||
"[user] completes the surgery on [target]'s posibrain.")
|
||||
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 60)
|
||||
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY)
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore.", "<span class='warning'>You suddenly notice that the posibrain you were working on is not there anymore.</span>")
|
||||
return FALSE
|
||||
@@ -0,0 +1,125 @@
|
||||
//Almost copypaste of tend wounds, with some changes
|
||||
|
||||
/datum/surgery/robot_healing
|
||||
name = "Repair robotic limbs (basic)"
|
||||
desc = "A surgical procedure that provides repairs and maintenance to robotic limbs. Is slightly more efficient when the patient is severely damaged."
|
||||
|
||||
steps = list(/datum/surgery_step/mechanic_open,
|
||||
/datum/surgery_step/pry_off_plating,
|
||||
/datum/surgery_step/cut_wires,
|
||||
/datum/surgery_step/robot_heal,
|
||||
/datum/surgery_step/mechanic_close)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = BODYPART_ROBOTIC
|
||||
ignore_clothes = TRUE
|
||||
var/antispam = FALSE
|
||||
var/healing_step_type = /datum/surgery_step/robot_heal/basic
|
||||
|
||||
/datum/surgery/robot_healing/New(surgery_target, surgery_location, surgery_bodypart)
|
||||
..()
|
||||
if(healing_step_type)
|
||||
steps = list(/datum/surgery_step/mechanic_open,
|
||||
/datum/surgery_step/pry_off_plating,
|
||||
/datum/surgery_step/cut_wires,
|
||||
healing_step_type,
|
||||
/datum/surgery_step/mechanic_close)
|
||||
|
||||
/datum/surgery_step/robot_heal
|
||||
name = "repair body (welder/cable)"
|
||||
implements = list(TOOL_WELDER = 100, /obj/item/stack/cable_coil = 100)
|
||||
repeatable = TRUE
|
||||
time = 15
|
||||
var/healsbrute = FALSE
|
||||
var/healsburn = FALSE
|
||||
var/brutehealing = 0
|
||||
var/burnhealing = 0
|
||||
var/missinghpbonus = 0 //heals an extra point of damager per X missing damage of type (burn damage for burn healing, brute for brute). Smaller Number = More Healing!
|
||||
|
||||
/datum/surgery_step/robot_heal/tool_check(mob/user, obj/item/tool)
|
||||
if(implement_type == TOOL_WELDER && !tool.tool_use_check(user, 1))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/robot_heal/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
var/woundtype
|
||||
if(implement_type == TOOL_WELDER)
|
||||
healsbrute = TRUE
|
||||
healsburn = FALSE
|
||||
woundtype = "dents"
|
||||
else
|
||||
healsbrute = FALSE
|
||||
healsburn = TRUE
|
||||
woundtype = "wiring"
|
||||
|
||||
if(istype(surgery,/datum/surgery/robot_healing))
|
||||
var/datum/surgery/robot_healing/the_surgery = surgery
|
||||
if(!the_surgery.antispam)
|
||||
display_results(user, target, "<span class='notice'>You attempt to fix some of [target]'s [woundtype].</span>",
|
||||
"<span class='notice'>[user] attempts to fix some of [target]'s [woundtype].</span>",
|
||||
"<span class='notice'>[user] attempts to fix some of [target]'s [woundtype].</span>")
|
||||
|
||||
/datum/surgery_step/robot_heal/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
|
||||
if(..())
|
||||
while((healsbrute && target.getBruteLoss() && tool.tool_use_check(user,1)) || (healsburn && target.getFireLoss() && tool))
|
||||
if(!..())
|
||||
break
|
||||
|
||||
/datum/surgery_step/robot_heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
var/umsg = "You succeed in fixing some of [target]'s damage" //no period, add initial space to "addons"
|
||||
var/tmsg = "[user] fixes some of [target]'s damage" //see above
|
||||
var/urhealedamt_brute = 0
|
||||
if(healsbrute)
|
||||
urhealedamt_brute = brutehealing
|
||||
tool.use_tool(target, user, 0, volume=50, amount=1)
|
||||
var/urhealedamt_burn = 0
|
||||
if(healsburn)
|
||||
urhealedamt_burn = burnhealing
|
||||
if(tool)
|
||||
tool.use(1)
|
||||
if(missinghpbonus)
|
||||
if(target.stat != DEAD)
|
||||
urhealedamt_brute += round((target.getBruteLoss()/ missinghpbonus),0.1)
|
||||
urhealedamt_burn += round((target.getFireLoss()/ missinghpbonus),0.1)
|
||||
else //less healing bonus for the dead since they're expected to have lots of damage to begin with (to make TW into defib not TOO simple)
|
||||
urhealedamt_brute += round((target.getBruteLoss()/ (missinghpbonus*5)),0.1)
|
||||
urhealedamt_burn += round((target.getFireLoss()/ (missinghpbonus*5)),0.1)
|
||||
if(!get_location_accessible(target, target_zone))
|
||||
urhealedamt_brute *= 0.55
|
||||
urhealedamt_burn *= 0.55
|
||||
umsg += " as best as you can while they have clothing on"
|
||||
tmsg += " as best as they can while [target] has clothing on"
|
||||
target.heal_bodypart_damage(urhealedamt_brute,urhealedamt_burn, only_organic = FALSE, only_robotic = TRUE)
|
||||
display_results(user, target, "<span class='notice'>[umsg].</span>",
|
||||
"[tmsg].",
|
||||
"[tmsg].")
|
||||
if(istype(surgery, /datum/surgery/robot_healing))
|
||||
var/datum/surgery/robot_healing/the_surgery = surgery
|
||||
the_surgery.antispam = TRUE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/robot_heal/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='warning'>You screwed up!</span>",
|
||||
"<span class='warning'>[user] screws up!</span>",
|
||||
"<span class='notice'>[user] fixes some of [target]'s damage.</span>", TRUE)
|
||||
var/urdamageamt_brute = 0
|
||||
if(healsbrute)
|
||||
urdamageamt_brute = brutehealing * 0.8
|
||||
var/urdamageamt_burn = 0
|
||||
if(healsburn)
|
||||
urdamageamt_burn = burnhealing * 0.8
|
||||
if(missinghpbonus)
|
||||
urdamageamt_brute += round((target.getBruteLoss()/ (missinghpbonus*2)),0.1)
|
||||
urdamageamt_burn += round((target.getFireLoss()/ (missinghpbonus*2)),0.1)
|
||||
|
||||
target.take_bodypart_damage(urdamageamt_brute, urdamageamt_burn)
|
||||
return FALSE
|
||||
|
||||
/***************************STEPS***************************/
|
||||
|
||||
/datum/surgery_step/robot_heal/basic
|
||||
name = "repair damage"
|
||||
brutehealing = 10
|
||||
burnhealing = 10
|
||||
missinghpbonus = 15
|
||||
@@ -29,6 +29,16 @@
|
||||
/obj/item/clothing/glasses/monocle =1,
|
||||
/obj/item/clothing/head/bowler = 1,
|
||||
/obj/item/cane = 1,
|
||||
/obj/item/clothing/under/rank/civilian/victorian_redsleeves = 1,
|
||||
/obj/item/clothing/under/rank/civilian/victorian_redvest = 1,
|
||||
/obj/item/clothing/under/rank/civilian/victorian_vest = 1,
|
||||
/obj/item/clothing/under/rank/civilian/victorian_purple = 1,
|
||||
/obj/item/clothing/suit/tailcoat = 1,
|
||||
/obj/item/clothing/under/rank/civilian/victorianreddress = 1,
|
||||
/obj/item/clothing/suit/vickyred = 1,
|
||||
/obj/item/clothing/under/rank/civilian/victorianblackdress = 1,
|
||||
/obj/item/clothing/suit/vickyblack =1,
|
||||
/obj/item/clothing/under/rank/civilian/dutch = 2,
|
||||
/obj/item/clothing/under/suit/sl = 1,
|
||||
/obj/item/clothing/mask/fakemoustache = 1,
|
||||
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1,
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
/obj/item/clothing/suit/jacket/puffer/vest = 4,
|
||||
/obj/item/clothing/suit/jacket/puffer = 4,
|
||||
/obj/item/clothing/suit/hooded/cloak/david = 4,
|
||||
/obj/item/clothing/suit/bomber = 5,
|
||||
/obj/item/clothing/under/suit/turtle/teal = 3,
|
||||
/obj/item/clothing/under/suit/turtle/grey = 3,
|
||||
/obj/item/clothing/under/rank/civilian/util = 5,
|
||||
/obj/item/clothing/under/rank/civilian/util/greyshirt = 5,
|
||||
/obj/item/clothing/under/suit/navy = 3,
|
||||
/obj/item/clothing/under/suit/black_really = 3,
|
||||
/obj/item/clothing/under/suit/burgundy = 3,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user