Merge remote-tracking branch 'origin/master' into hedges
@@ -3792,8 +3792,7 @@
|
||||
"ahU" = (
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/structure/table,
|
||||
/obj/item/stock_parts/manipulator,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"ahV" = (
|
||||
@@ -7488,17 +7487,13 @@
|
||||
/area/maintenance/starboard/fore)
|
||||
"ape" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/belt{
|
||||
desc = "Can hold quite a lot of stuff.";
|
||||
name = "multi-belt"
|
||||
},
|
||||
/obj/item/clothing/gloves/color/fyellow,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/structure/sink/kitchen{
|
||||
desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
|
||||
name = "old sink";
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"apf" = (
|
||||
@@ -7675,13 +7670,10 @@
|
||||
/area/maintenance/port/fore)
|
||||
"apD" = (
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/flashlight{
|
||||
pixel_x = 1;
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"apE" = (
|
||||
@@ -8590,8 +8582,7 @@
|
||||
/area/maintenance/starboard/fore)
|
||||
"arH" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/extinguisher,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"arI" = (
|
||||
@@ -8602,9 +8593,8 @@
|
||||
/area/maintenance/starboard/fore)
|
||||
"arJ" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/suit/poncho,
|
||||
/obj/item/clothing/head/sombrero,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/costume,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"arK" = (
|
||||
@@ -10617,7 +10607,7 @@
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/item/storage/box/donkpockets,
|
||||
/obj/effect/spawner/lootdrop/donkpockets,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"awB" = (
|
||||
@@ -10752,7 +10742,7 @@
|
||||
/area/maintenance/port/fore)
|
||||
"awS" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/coin/silver,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"awT" = (
|
||||
@@ -13297,12 +13287,6 @@
|
||||
"aDb" = (
|
||||
/turf/closed/wall,
|
||||
/area/construction/mining/aux_base)
|
||||
"aDc" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/coin/silver,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"aDh" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
@@ -15325,8 +15309,8 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"aHV" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/storage/box/donkpockets,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/obj/effect/spawner/lootdrop/donkpockets,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"aHX" = (
|
||||
@@ -16397,9 +16381,7 @@
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/item/wirecutters,
|
||||
/obj/item/weldingtool,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"aKx" = (
|
||||
@@ -16894,7 +16876,7 @@
|
||||
/area/crew_quarters/locker)
|
||||
"aLJ" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/stock_parts/matter_bin,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg2"
|
||||
},
|
||||
@@ -18825,6 +18807,7 @@
|
||||
},
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/item/storage/belt/utility,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"aQd" = (
|
||||
@@ -32467,9 +32450,8 @@
|
||||
},
|
||||
/area/maintenance/starboard)
|
||||
"btu" = (
|
||||
/obj/item/storage/toolbox/emergency,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"btv" = (
|
||||
@@ -35581,8 +35563,7 @@
|
||||
/area/crew_quarters/toilet/auxiliary)
|
||||
"bBq" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"bBr" = (
|
||||
@@ -35989,6 +35970,7 @@
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/storage/belt/utility,
|
||||
/turf/open/floor/plasteel/dark/corner{
|
||||
dir = 1
|
||||
},
|
||||
@@ -39651,8 +39633,7 @@
|
||||
/area/maintenance/port)
|
||||
"bLd" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"bLe" = (
|
||||
@@ -40073,6 +40054,7 @@
|
||||
/area/storage/tcom)
|
||||
"bLX" = (
|
||||
/obj/structure/closet,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "panelscorched"
|
||||
},
|
||||
@@ -41697,6 +41679,7 @@
|
||||
"bPJ" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/mask/horsehead,
|
||||
/obj/effect/spawner/lootdrop/costume,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"bPK" = (
|
||||
@@ -43174,8 +43157,8 @@
|
||||
/area/maintenance/port)
|
||||
"bTv" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/paper,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/item/paper,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"bTw" = (
|
||||
@@ -43838,9 +43821,9 @@
|
||||
/area/maintenance/port)
|
||||
"bUR" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/storage/box/donkpockets,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/donkpockets,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"bUS" = (
|
||||
@@ -44143,8 +44126,7 @@
|
||||
/area/maintenance/starboard)
|
||||
"bVE" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"bVF" = (
|
||||
@@ -45028,7 +45010,7 @@
|
||||
/area/maintenance/port)
|
||||
"bXy" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"bXz" = (
|
||||
@@ -45078,16 +45060,7 @@
|
||||
/area/maintenance/port)
|
||||
"bXH" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/coin/silver,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"bXI" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/neck/stethoscope,
|
||||
/obj/item/hemostat,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"bXJ" = (
|
||||
@@ -45549,8 +45522,8 @@
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/item/storage/box/donkpockets,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/donkpockets,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"bYQ" = (
|
||||
@@ -47692,7 +47665,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cdk" = (
|
||||
/obj/item/trash/semki,
|
||||
/obj/effect/spawner/lootdrop/grille_or_trash,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cdl" = (
|
||||
@@ -48689,11 +48662,9 @@
|
||||
/turf/open/space,
|
||||
/area/space/nearstation)
|
||||
"cfC" = (
|
||||
/obj/item/trash/pistachios,
|
||||
/obj/structure/closet,
|
||||
/obj/item/stack/sheet/glass,
|
||||
/obj/item/extinguisher,
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cfD" = (
|
||||
@@ -48703,6 +48674,7 @@
|
||||
"cfE" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/reagent_containers/dropper,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cfF" = (
|
||||
@@ -49805,23 +49777,20 @@
|
||||
/area/maintenance/starboard)
|
||||
"chC" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance/four,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"chD" = (
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/item/cane,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"chE" = (
|
||||
@@ -51034,17 +51003,16 @@
|
||||
/area/science/genetics)
|
||||
"cku" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/storage/box/donkpockets,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/effect/spawner/lootdrop/donkpockets,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/secondary)
|
||||
"ckv" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/item/assembly/infra,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/secondary)
|
||||
"ckw" = (
|
||||
@@ -55659,18 +55627,14 @@
|
||||
/area/maintenance/port/aft)
|
||||
"cuh" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/grenade/chem_grenade,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/obj/effect/spawner/lootdrop/maintenance/five,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cui" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/coin/silver,
|
||||
/obj/item/reagent_containers/spray/weedspray,
|
||||
/obj/item/paper,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/obj/effect/spawner/lootdrop/maintenance/four,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cuj" = (
|
||||
@@ -56035,10 +55999,8 @@
|
||||
"cuY" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/extinguisher,
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/four,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/secondary)
|
||||
"cuZ" = (
|
||||
@@ -56462,7 +56424,7 @@
|
||||
"cwn" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/flashlight/pen,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cwo" = (
|
||||
@@ -56801,10 +56763,6 @@
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space,
|
||||
/area/solar/port/aft)
|
||||
"cxc" = (
|
||||
/obj/item/trash/chips,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cxd" = (
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
/obj/effect/landmark/blobstart,
|
||||
@@ -60643,7 +60601,7 @@
|
||||
/area/science/mixing)
|
||||
"cGo" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"cGp" = (
|
||||
@@ -61759,11 +61717,11 @@
|
||||
"cIh" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/structure/sign/warning/biohazard{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"cIi" = (
|
||||
@@ -62326,9 +62284,8 @@
|
||||
},
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/clothing/gloves/color/fyellow,
|
||||
/obj/item/wrench,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/obj/structure/cable,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"cJs" = (
|
||||
@@ -62341,11 +62298,8 @@
|
||||
/area/maintenance/aft)
|
||||
"cJt" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/screwdriver{
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/crowbar,
|
||||
/obj/item/storage/pill_bottle,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"cJu" = (
|
||||
@@ -62685,9 +62639,8 @@
|
||||
/area/maintenance/starboard/aft)
|
||||
"cKa" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/glasses/science,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"cKb" = (
|
||||
@@ -63685,6 +63638,7 @@
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/machinery/power/apc/auto_name/south,
|
||||
/obj/structure/cable,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft/secondary)
|
||||
"cMl" = (
|
||||
@@ -64252,9 +64206,8 @@
|
||||
/area/maintenance/port/aft)
|
||||
"cNg" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/machinery/light/small,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cNh" = (
|
||||
@@ -64895,11 +64848,10 @@
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
"cOA" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"cOB" = (
|
||||
@@ -65240,8 +65192,7 @@
|
||||
/area/maintenance/starboard/aft)
|
||||
"cPz" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/obj/effect/spawner/lootdrop/maintenance/four,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"cPA" = (
|
||||
@@ -66945,6 +66896,7 @@
|
||||
/area/chapel/main)
|
||||
"cTp" = (
|
||||
/obj/structure/closet,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/science/xenobiology)
|
||||
"cTq" = (
|
||||
@@ -68572,6 +68524,7 @@
|
||||
/area/maintenance/department/science/xenobiology)
|
||||
"ddi" = (
|
||||
/obj/structure/rack,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/science/xenobiology)
|
||||
"ddj" = (
|
||||
@@ -69568,15 +69521,13 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/coin/silver,
|
||||
/obj/item/grenade/chem_grenade,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/watertank,
|
||||
/obj/item/storage/box/donkpockets,
|
||||
/obj/item/poster/random_contraband,
|
||||
/obj/item/poster/random_contraband,
|
||||
/obj/item/poster/random_contraband,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/four,
|
||||
/obj/effect/spawner/lootdrop/donkpockets,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"dhp" = (
|
||||
@@ -69725,10 +69676,9 @@
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/crew_quarters/dorms)
|
||||
"dhB" = (
|
||||
/obj/item/clothing/glasses/meson,
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/poster/random_contraband,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"dhC" = (
|
||||
@@ -71114,7 +71064,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"dAh" = (
|
||||
/obj/item/storage/box,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"dAn" = (
|
||||
@@ -72755,8 +72705,7 @@
|
||||
/area/crew_quarters/kitchen)
|
||||
"hEP" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "panelscorched"
|
||||
},
|
||||
@@ -73215,10 +73164,10 @@
|
||||
/obj/structure/rack,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = 27
|
||||
},
|
||||
/obj/item/storage/belt/utility,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/break_room)
|
||||
"jYJ" = (
|
||||
@@ -73414,10 +73363,10 @@
|
||||
/area/science/misc_lab/range)
|
||||
"kPN" = (
|
||||
/obj/structure/rack,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/structure/sign/poster/contraband/random{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"kRO" = (
|
||||
@@ -73676,6 +73625,10 @@
|
||||
/obj/effect/turf_decal/tile/yellow,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/chemistry)
|
||||
"lVD" = (
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"lWY" = (
|
||||
/obj/machinery/door/airlock/hatch{
|
||||
name = "Telecomms Server Room"
|
||||
@@ -74489,13 +74442,11 @@
|
||||
/area/security/warden)
|
||||
"oXP" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/crowbar/red,
|
||||
/obj/item/pen,
|
||||
/obj/item/flashlight/pen{
|
||||
pixel_x = 4;
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/spawner/lootdrop/maintenance/three,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg1"
|
||||
},
|
||||
@@ -75331,9 +75282,8 @@
|
||||
"sfQ" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/extinguisher,
|
||||
/obj/item/flashlight,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"sfR" = (
|
||||
@@ -75906,6 +75856,11 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/research)
|
||||
"uYd" = (
|
||||
/obj/structure/rack,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"uYk" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
@@ -76016,9 +75971,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/break_room)
|
||||
"vAs" = (
|
||||
/obj/structure/rack,
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/obj/item/wrench,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg2"
|
||||
@@ -76223,11 +76176,10 @@
|
||||
/area/security/prison)
|
||||
"wkM" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/item/mop,
|
||||
/obj/effect/spawner/lootdrop/maintenance/two,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"wmt" = (
|
||||
@@ -76673,6 +76625,13 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating,
|
||||
/area/security/warden)
|
||||
"yeM" = (
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"yfM" = (
|
||||
/obj/machinery/vending/engivend,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
@@ -90420,7 +90379,7 @@ dne
|
||||
aip
|
||||
dne
|
||||
dst
|
||||
aDc
|
||||
awS
|
||||
dhE
|
||||
aRG
|
||||
aRG
|
||||
@@ -95369,8 +95328,8 @@ cia
|
||||
cuh
|
||||
cvm
|
||||
cvl
|
||||
cxc
|
||||
cxR
|
||||
cdk
|
||||
uYd
|
||||
dux
|
||||
aaa
|
||||
aaa
|
||||
@@ -96382,7 +96341,7 @@ dux
|
||||
dux
|
||||
dux
|
||||
dux
|
||||
cfD
|
||||
dyw
|
||||
dwb
|
||||
cic
|
||||
cia
|
||||
@@ -97147,7 +97106,7 @@ bSB
|
||||
bPR
|
||||
bue
|
||||
div
|
||||
bXI
|
||||
bLd
|
||||
dux
|
||||
dux
|
||||
cbD
|
||||
@@ -115647,7 +115606,7 @@ bNL
|
||||
bPh
|
||||
bKr
|
||||
bSd
|
||||
bPm
|
||||
yeM
|
||||
alq
|
||||
bVC
|
||||
bWY
|
||||
@@ -116417,7 +116376,7 @@ bKr
|
||||
bKr
|
||||
bKr
|
||||
bKr
|
||||
apc
|
||||
lVD
|
||||
apc
|
||||
alq
|
||||
alq
|
||||
@@ -117187,7 +117146,7 @@ bBt
|
||||
atm
|
||||
bLZ
|
||||
bPm
|
||||
apc
|
||||
lVD
|
||||
bSf
|
||||
apc
|
||||
bxc
|
||||
|
||||
@@ -50,7 +50,6 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
|
||||
/obj/item/reagent_containers/food/snacks/urinalcake = 1,
|
||||
|
||||
/obj/item/airlock_painter = 1,
|
||||
/obj/item/pipe = 1,
|
||||
/obj/item/rack_parts = 1,
|
||||
/obj/item/clothing/mask/breath = 1,
|
||||
/obj/item/shard = 1,
|
||||
@@ -84,10 +83,6 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
|
||||
/obj/item/toy/crayon/spraycan = 1,
|
||||
) = 1,
|
||||
|
||||
list(//strange objects
|
||||
/obj/item/relic = 5,
|
||||
) = 1,
|
||||
|
||||
list(//equipment
|
||||
/obj/item/clothing/mask/gas = 1,
|
||||
/obj/item/radio/headset = 1,
|
||||
@@ -169,7 +164,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
|
||||
/obj/item/grenade/iedcasing = 1,
|
||||
/obj/item/melee/baton/cattleprod = 1,
|
||||
/obj/item/throwing_star = 1,
|
||||
) = 1,
|
||||
) = 8,
|
||||
|
||||
list(//equipment
|
||||
/obj/item/clothing/head/welding = 1,
|
||||
@@ -184,14 +179,18 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
|
||||
/obj/item/clothing/mask/muzzle = 1,
|
||||
/obj/item/clothing/ears/earmuffs = 1,
|
||||
/obj/item/clothing/gloves/color/black = 1,
|
||||
) = 1,
|
||||
) = 8,
|
||||
|
||||
list(//strange objects
|
||||
/obj/item/relic = 5,
|
||||
) = 8,
|
||||
|
||||
list(//construction and crafting
|
||||
/obj/item/stock_parts/cell/high = 1,
|
||||
/obj/item/stack/sheet/mineral/wood/fifty = 1,
|
||||
/obj/item/beacon = 1,
|
||||
/obj/item/weaponcrafting/receiver = 1,
|
||||
) = 1,
|
||||
) = 8,
|
||||
|
||||
list(//medical and chemicals
|
||||
list(//basic healing items
|
||||
@@ -212,7 +211,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
|
||||
/obj/item/watertank = 1,
|
||||
/obj/item/watertank/janitor = 1,
|
||||
) = 1,
|
||||
) = 1,
|
||||
) = 8,
|
||||
|
||||
list(//food
|
||||
/obj/item/reagent_containers/food/snacks/canned/peaches/maint = 1,
|
||||
@@ -223,15 +222,27 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
|
||||
/obj/item/storage/box/donkpockets/donkpocketpizza = 1,
|
||||
/obj/item/storage/box/donkpockets/donkpocketberry = 1,
|
||||
/obj/item/storage/box/donkpockets/donkpockethonk = 1,
|
||||
) = 1,
|
||||
) = 1,
|
||||
/obj/item/reagent_containers/food/snacks/monkeycube = 1,
|
||||
) = 8,
|
||||
|
||||
list(//fakeout items, keep this list at low relative weight
|
||||
/obj/item/dice/d20 = 1, //To balance out the stealth die of fates in oddities
|
||||
/obj/item/clothing/shoes/jackboots = 1,
|
||||
) = 1,
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items
|
||||
//keeping commented out until there are more, otherwise the same ones may appear too often
|
||||
// /obj/effect/rune/teleport = 1,
|
||||
"" = 1 //nothing, so loot spawner doesn't break while nothing else is here
|
||||
/obj/effect/rune/teleport = 1,
|
||||
/obj/item/clothing/gloves/color/yellow = 1,
|
||||
/obj/item/clothing/head/helmet/abductor = 1,
|
||||
/obj/item/clothing/head/helmet/justice =1,
|
||||
/obj/item/clothing/suit/space/hardsuit/carp = 1,
|
||||
/obj/item/dice/d20/fate/stealth/one_use = 1, //Looks like a d20, keep the d20 in the uncommon pool.
|
||||
/obj/item/dice/d20/fate/stealth/cursed = 1, //Only rolls 1
|
||||
/obj/item/clothing/shoes/jackboots/fast = 1,
|
||||
/obj/item/clothing/suit/armor/reactive/table = 1,
|
||||
/obj/item/storage/box/donkpockets/donkpocketgondola = 1
|
||||
))
|
||||
|
||||
//Maintenance loot spawner pools
|
||||
|
||||
@@ -224,3 +224,10 @@
|
||||
icon = 'icons/effects/confetti_and_decor.dmi'
|
||||
icon_state = "confetti"
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT //the confetti itself might be annoying enough
|
||||
|
||||
/obj/effect/decal/cleanable/plastic
|
||||
name = "plastic shreds"
|
||||
desc = "Bits of torn, broken, worthless plastic."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "shards"
|
||||
color = "#c6f4ff"
|
||||
|
||||
@@ -1202,6 +1202,15 @@
|
||||
)
|
||||
generate_items_inside(items_inside,src)
|
||||
|
||||
/obj/item/storage/box/plastic
|
||||
name = "plastic box"
|
||||
desc = "It's a solid, plastic shell box."
|
||||
icon_state = "plasticbox"
|
||||
foldable = null
|
||||
illustration = "writing"
|
||||
custom_materials = list(/datum/material/plastic = 1000) //You lose most if recycled.
|
||||
|
||||
|
||||
/obj/item/storage/box/fireworks
|
||||
name = "box of fireworks"
|
||||
desc = "Contains an assortment of fireworks."
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/obj/item/storage/cans
|
||||
name = "can ring"
|
||||
desc = "Holds up to six drink cans, and select bottles."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "canholder"
|
||||
item_state = "cola"
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
custom_materials = list(/datum/material/plastic = 1200)
|
||||
max_integrity = 500
|
||||
|
||||
/obj/item/storage/cans/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins popping open a final cold one with the boys! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/storage/cans/update_icon()
|
||||
var/icon_status = 0
|
||||
icon_status = contents.len
|
||||
icon_state = "[initial(icon_state)][icon_status]"
|
||||
|
||||
/obj/item/storage/cans/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/cans/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_SMALL
|
||||
STR.max_combined_w_class = 12
|
||||
STR.max_items = 6
|
||||
STR.set_holdable(list(
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans,
|
||||
/obj/item/reagent_containers/food/drinks/beer,
|
||||
/obj/item/reagent_containers/food/drinks/ale,
|
||||
/obj/item/reagent_containers/food/drinks/waterbottle
|
||||
))
|
||||
|
||||
/obj/item/storage/cans/sixsoda
|
||||
name = "soda bottle ring"
|
||||
desc = "Holds six soda cans. Remember to recycle when you're done!"
|
||||
|
||||
/obj/item/storage/cans/sixsoda/PopulateContents()
|
||||
for(var/i in 1 to 6)
|
||||
new /obj/item/reagent_containers/food/drinks/soda_cans/cola(src)
|
||||
|
||||
/obj/item/storage/cans/sixbeer
|
||||
name = "beer bottle ring"
|
||||
desc = "Holds six beer bottles. Remember to recycle when you're done!"
|
||||
|
||||
/obj/item/storage/cans/sixbeer/PopulateContents()
|
||||
for(var/i in 1 to 6)
|
||||
new /obj/item/reagent_containers/food/drinks/beer(src)
|
||||
@@ -464,6 +464,7 @@
|
||||
to_chat(Mob, "<span class='warning'>The chair begins to pop and crack, you're too heavy!</span>")
|
||||
if(do_after(Mob, 60, 1, Mob, 0))
|
||||
Mob.visible_message("<span class='notice'>The plastic chair snaps under [Mob]'s weight!</span>")
|
||||
new /obj/effect/decal/cleanable/plastic(loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/chair/plastic
|
||||
|
||||
@@ -354,6 +354,15 @@
|
||||
light_color = "#2cb2e8"
|
||||
light_range = 3
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/fullysynthetic
|
||||
name = "plastic potted plant"
|
||||
desc = "A fake, cheap looking, plastic tree. Perfect for people who kill every plant they touch."
|
||||
icon_state = "plant-26"
|
||||
custom_materials = (list(/datum/material/plastic = 8000))
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/fullysynthetic/Initialize()
|
||||
. = ..()
|
||||
icon_state = "plant-[rand(26, 29)]"
|
||||
|
||||
//a rock is flora according to where the icon file is
|
||||
//and now these defines
|
||||
@@ -438,3 +447,4 @@
|
||||
/obj/structure/flora/rock/pile/largejungle/Initialize()
|
||||
. = ..()
|
||||
icon_state = "[initial(icon_state)][rand(1,3)]"
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon_state = "bus"
|
||||
density = TRUE
|
||||
circuit = /obj/item/circuitboard/machine/ntnet_relay
|
||||
ui_x = 500
|
||||
ui_x = 400
|
||||
ui_y = 300
|
||||
|
||||
var/datum/ntnet/NTNet = null // This is mostly for backwards reference and to allow varedit modifications from ingame.
|
||||
@@ -91,10 +91,12 @@
|
||||
dos_failure = 0
|
||||
update_icon()
|
||||
SSnetworks.station_network.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.")
|
||||
return TRUE
|
||||
if("toggle")
|
||||
enabled = !enabled
|
||||
SSnetworks.station_network.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].")
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/ntnet_relay/Initialize()
|
||||
uid = gl_uid++
|
||||
|
||||
@@ -171,17 +171,9 @@
|
||||
var/reusable = TRUE
|
||||
var/used = FALSE
|
||||
|
||||
/obj/item/dice/d20/fate/stealth
|
||||
name = "d20"
|
||||
desc = "A die with twenty sides. The preferred die to throw at the GM."
|
||||
|
||||
/obj/item/dice/d20/fate/one_use
|
||||
reusable = FALSE
|
||||
|
||||
/obj/item/dice/d20/fate/one_use/stealth
|
||||
name = "d20"
|
||||
desc = "A die with twenty sides. The preferred die to throw at the GM."
|
||||
|
||||
/obj/item/dice/d20/fate/cursed
|
||||
name = "cursed Die of Fate"
|
||||
desc = "A die with twenty sides. You feel that rolling this is a REALLY bad idea."
|
||||
@@ -190,6 +182,23 @@
|
||||
rigged = DICE_TOTALLY_RIGGED
|
||||
rigged_value = 1
|
||||
|
||||
/obj/item/dice/d20/fate/cursed/one_use
|
||||
reusable = FALSE
|
||||
|
||||
/obj/item/dice/d20/fate/stealth
|
||||
name = "d20"
|
||||
desc = "A die with twenty sides. The preferred die to throw at the GM."
|
||||
|
||||
/obj/item/dice/d20/fate/stealth/one_use
|
||||
reusable = FALSE
|
||||
|
||||
/obj/item/dice/d20/fate/stealth/cursed
|
||||
rigged = DICE_TOTALLY_RIGGED
|
||||
rigged_value = 1
|
||||
|
||||
/obj/item/dice/d20/fate/stealth/cursed/one_use
|
||||
reusable = FALSE
|
||||
|
||||
/obj/item/dice/d20/fate/diceroll(mob/user)
|
||||
. = ..()
|
||||
if(!used)
|
||||
|
||||
@@ -1486,18 +1486,16 @@
|
||||
|
||||
/datum/supply_pack/service/party
|
||||
name = "Party Equipment"
|
||||
desc = "Celebrate both life and death on the station with Nanotrasen's Party Essentials(tm)! Contains seven colored glowsticks, four beers, two ales, and a bottle of patron, goldschlager, and shaker!"
|
||||
cost = 2000
|
||||
desc = "Celebrate both life and death on the station with Nanotrasen's Party Essentials(tm)! Contains seven colored glowsticks, six beers, six sodas, two ales, and a bottle of patron, goldschlager, and shaker!"
|
||||
cost = 2500
|
||||
contains = list(/obj/item/storage/box/drinkingglasses,
|
||||
/obj/item/reagent_containers/food/drinks/shaker,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/patron,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/goldschlager,
|
||||
/obj/item/reagent_containers/food/drinks/ale,
|
||||
/obj/item/reagent_containers/food/drinks/ale,
|
||||
/obj/item/reagent_containers/food/drinks/beer,
|
||||
/obj/item/reagent_containers/food/drinks/beer,
|
||||
/obj/item/reagent_containers/food/drinks/beer,
|
||||
/obj/item/reagent_containers/food/drinks/beer,
|
||||
/obj/item/storage/cans/sixbeer,
|
||||
/obj/item/storage/cans/sixsoda,
|
||||
/obj/item/flashlight/glowstick,
|
||||
/obj/item/flashlight/glowstick/red,
|
||||
/obj/item/flashlight/glowstick/blue,
|
||||
|
||||
@@ -257,3 +257,16 @@
|
||||
user.visible_message("<span class='notice'>You untie [oldName] back into a [newBand.name].</span>", "<span class='notice'>[user] unties [oldName] back into a [newBand.name].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You must be holding [src] in order to untie it!</span>")
|
||||
|
||||
/obj/item/clothing/neck/beads
|
||||
name = "plastic bead necklace"
|
||||
desc = "A cheap, plastic bead necklace. Show team spirit! Collect them! Throw them away! The posibilites are endless!"
|
||||
icon = 'icons/obj/clothing/neck.dmi'
|
||||
icon_state = "beads"
|
||||
color = "#ffffff"
|
||||
custom_price = 10
|
||||
custom_materials = (list(/datum/material/plastic = 500))
|
||||
|
||||
/obj/item/clothing/neck/beads/Initialize()
|
||||
. = ..()
|
||||
color = color = pick("#ff0077","#d400ff","#2600ff","#00ccff","#00ff2a","#e5ff00","#ffae00","#ff0000", "#ffffff")
|
||||
|
||||
@@ -176,8 +176,11 @@
|
||||
if(!parts.len)
|
||||
return
|
||||
var/obj/item/bodypart/picked = pick(parts)
|
||||
var/damage_calculator = picked.get_damage(TRUE) //heal_damage returns update status T/F instead of amount healed so we dance gracefully around this
|
||||
if(picked.heal_damage(brute, burn, stamina, required_status))
|
||||
update_damage_overlays()
|
||||
return max(damage_calculator - picked.get_damage(TRUE), 0)
|
||||
|
||||
|
||||
//Damages ONE bodypart randomly selected from damagable ones.
|
||||
//It automatically updates damage overlays if necessary
|
||||
|
||||
@@ -241,10 +241,9 @@
|
||||
return
|
||||
|
||||
// heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/// needs to return amount healed in order to calculate things like tend wounds xp gain
|
||||
/mob/living/proc/heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)
|
||||
adjustBruteLoss(-brute, FALSE) //zero as argument for no instant health update
|
||||
adjustFireLoss(-burn, FALSE)
|
||||
adjustStaminaLoss(-stamina, FALSE)
|
||||
. = (adjustBruteLoss(-brute, FALSE) + adjustFireLoss(-burn, FALSE) + adjustStaminaLoss(-stamina, FALSE)) //zero as argument for no instant health update
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
spacewalk = TRUE
|
||||
search_objects = 1
|
||||
wanted_objects = list(/obj/item/storage/cans)
|
||||
|
||||
harm_intent_damage = 8
|
||||
obj_damage = 50
|
||||
@@ -43,6 +45,7 @@
|
||||
|
||||
var/random_color = TRUE //if the carp uses random coloring
|
||||
var/rarechance = 1 //chance for rare color variant
|
||||
var/snack_distance = 0
|
||||
|
||||
var/static/list/carp_colors = list(\
|
||||
"lightpurple" = "#c3b9f1", \
|
||||
@@ -96,6 +99,21 @@
|
||||
base_dead_overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(base_dead_overlay)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/proc/chomp_plastic()
|
||||
var/obj/item/storage/cans/tasty_plastic = locate(/obj/item/storage/cans) in oview(src, 9)
|
||||
if(tasty_plastic)
|
||||
snack_distance = get_dist(src.loc,tasty_plastic.loc)
|
||||
if(snack_distance <= 1)
|
||||
src.visible_message("<span class='notice'>[src] gets its head stuck in [tasty_plastic], and gets cut breaking free from it!</span>", "<span class='notice'>You try to avoid [tasty_plastic], but it looks so... delicious... Ow! It cuts the inside of your mouth!</span>")
|
||||
new /obj/effect/decal/cleanable/plastic(src.loc)
|
||||
adjustBruteLoss(5)
|
||||
qdel(tasty_plastic)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/Life()
|
||||
. = ..()
|
||||
if(stat == CONSCIOUS)
|
||||
chomp_plastic()
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/death(gibbed)
|
||||
. = ..()
|
||||
cut_overlays()
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
unsendable = 1
|
||||
undeletable = 1
|
||||
size = 4
|
||||
ui_x = 420
|
||||
ui_y = 630
|
||||
available_on_ntnet = 0
|
||||
requires_ntnet = 0
|
||||
tgui_id = "ntos_configuration"
|
||||
|
||||
@@ -1028,3 +1028,35 @@
|
||||
materials = list(/datum/material/iron = 20, /datum/material/glass = 5)
|
||||
build_path = /obj/item/toy/ammo/gun
|
||||
category = list("hacked", "Misc")
|
||||
|
||||
/datum/design/plastic_tree
|
||||
name = "Plastic Potted Plant"
|
||||
id = "plastic_trees"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic = 8000)
|
||||
build_path = /obj/item/twohanded/required/kirbyplants/fullysynthetic
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/beads
|
||||
name = "Plastic Bead Necklace"
|
||||
id = "plastic_necklace"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic = 500)
|
||||
build_path = /obj/item/clothing/neck/beads
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/plastic_ring
|
||||
name = "Plastic Can Rings"
|
||||
id = "ring_holder"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic = 1200)
|
||||
build_path = /obj/item/storage/cans
|
||||
category = list("initial", "Dinnerware")
|
||||
|
||||
/datum/design/plastic_box
|
||||
name = "Plastic Box"
|
||||
id = "plastic_box"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/plastic = 1000)
|
||||
build_path = /obj/item/storage/box/plastic
|
||||
category = list("initial", "Misc")
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
"<span class='notice'>[user] starts reshaping [target]'s ligaments into a hook-like shape.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s ligaments.</span>")
|
||||
|
||||
/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You reshape [target]'s ligaments into a connective hook!</span>",
|
||||
"<span class='notice'>[user] reshapes [target]'s ligaments into a connective hook!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s ligaments.</span>")
|
||||
new /datum/bioware/hooked_ligaments(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/hooked_ligaments
|
||||
name = "Hooked Ligaments"
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
"<span class='notice'>[user] starts reinforce [target]'s ligaments.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s ligaments.</span>")
|
||||
|
||||
/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You reinforce [target]'s ligaments!</span>",
|
||||
"<span class='notice'>[user] reinforces [target]'s ligaments!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s ligaments.</span>")
|
||||
new /datum/bioware/reinforced_ligaments(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/reinforced_ligaments
|
||||
name = "Reinforced Ligaments"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts wrapping muscles around [target]'s circulatory system.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s circulatory system.</span>")
|
||||
|
||||
/datum/surgery_step/muscled_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/muscled_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You reshape [target]'s circulatory system, adding a muscled membrane!</span>",
|
||||
"<span class='notice'>[user] reshapes [target]'s circulatory system, adding a muscled membrane!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s circulatory system.</span>")
|
||||
new /datum/bioware/muscled_veins(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/muscled_veins
|
||||
name = "Threaded Veins"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts rerouting [target]'s nerves.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s nervous system.</span>")
|
||||
|
||||
/datum/surgery_step/ground_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/ground_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You successfully reroute [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] successfully reroutes [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s nervous system.</span>")
|
||||
new /datum/bioware/grounded_nerves(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/grounded_nerves
|
||||
name = "Grounded Nerves"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts splicing together [target]'s nerves.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s nervous system.</span>")
|
||||
|
||||
/datum/surgery_step/splice_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/splice_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You successfully splice [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] successfully splices [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s nervous system.</span>")
|
||||
new /datum/bioware/spliced_nerves(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/spliced_nerves
|
||||
name = "Spliced Nerves"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts weaving [target]'s circulatory system.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s circulatory system.</span>")
|
||||
|
||||
/datum/surgery_step/thread_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/thread_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You weave [target]'s circulatory system into a resistant mesh!</span>",
|
||||
"<span class='notice'>[user] weaves [target]'s circulatory system into a resistant mesh!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s circulatory system.</span>")
|
||||
new /datum/bioware/threaded_veins(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/threaded_veins
|
||||
name = "Threaded Veins"
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"<span class='notice'>[user] begins to sever [target]'s [parse_zone(target_zone)]!</span>",
|
||||
"<span class='notice'>[user] begins to sever [target]'s [parse_zone(target_zone)]!</span>")
|
||||
|
||||
/datum/surgery_step/sever_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/sever_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/mob/living/carbon/human/L = target
|
||||
display_results(user, target, "<span class='notice'>You sever [L]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] severs [L]'s [parse_zone(target_zone)]!</span>",
|
||||
@@ -28,4 +28,4 @@
|
||||
target_limb.drop_limb()
|
||||
if(user.mind)
|
||||
user.mind.adjust_experience(/datum/skill/medical, experience_given)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"<span class='notice'>[user] begins to fix [target]'s brain.</span>",
|
||||
"<span class='notice'>[user] begins to perform surgery on [target]'s brain.</span>")
|
||||
|
||||
/datum/surgery_step/fix_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/fix_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You succeed in fixing [target]'s brain.</span>",
|
||||
"<span class='notice'>[user] successfully fixes [target]'s brain!</span>",
|
||||
"<span class='notice'>[user] completes the surgery on [target]'s brain.</span>")
|
||||
@@ -38,7 +38,7 @@
|
||||
target.setOrganLoss(ORGAN_SLOT_BRAIN, target.getOrganLoss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag
|
||||
var/cured_num = target.cure_all_traumas(TRAUMA_RESILIENCE_SURGERY)
|
||||
experience_given = 2*cured_num
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/fix_brain/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.getorganslot(ORGAN_SLOT_BRAIN))
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"<span class='notice'>[user] checks for items in [target]'s [target_zone].</span>",
|
||||
"<span class='notice'>[user] looks for something in [target]'s [target_zone].</span>")
|
||||
|
||||
/datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
/datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery = FALSE)
|
||||
var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
if(tool)
|
||||
if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || HAS_TRAIT(tool, TRAIT_NODROP) || istype(tool, /obj/item/organ))
|
||||
@@ -43,7 +43,7 @@
|
||||
"<span class='notice'>[user] stuffs [tool.w_class > WEIGHT_CLASS_SMALL ? tool : "something"] into [target]'s [target_zone].</span>")
|
||||
user.transferItemToLoc(tool, target, TRUE)
|
||||
CH.cavity_item = tool
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
else
|
||||
if(IC)
|
||||
display_results(user, target, "<span class='notice'>You pull [IC] out of [target]'s [target_zone].</span>",
|
||||
@@ -51,7 +51,7 @@
|
||||
"<span class='notice'>[user] pulls [IC.w_class > WEIGHT_CLASS_SMALL ? IC : "something"] out of [target]'s [target_zone].</span>")
|
||||
user.put_in_hands(IC)
|
||||
CH.cavity_item = null
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You don't find anything in [target]'s [target_zone].</span>")
|
||||
return 0
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"<span class='notice'>[user] begins to extract a core from [target].</span>",
|
||||
"<span class='notice'>[user] begins to extract a core from [target].</span>")
|
||||
|
||||
/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/mob/living/simple_animal/slime/slime = target
|
||||
if(slime.cores > 0)
|
||||
slime.cores--
|
||||
@@ -34,9 +34,9 @@
|
||||
|
||||
if(slime.cores <= 0)
|
||||
slime.icon_state = "[slime.colour] baby slime dead-nocore"
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
else
|
||||
return 0
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There aren't any cores left in [target]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"<span class='notice'>[user] begins to make an incision in [target]'s heart.</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target]'s heart.</span>")
|
||||
|
||||
/datum/surgery_step/incise_heart/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/incise_heart/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if (!(NOBLOOD in H.dna.species.species_traits))
|
||||
@@ -33,7 +33,7 @@
|
||||
"")
|
||||
H.bleed_rate += 10
|
||||
H.adjustBruteLoss(10)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/incise_heart/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(ishuman(target))
|
||||
@@ -50,13 +50,14 @@
|
||||
name = "graft coronary bypass"
|
||||
implements = list(TOOL_HEMOSTAT = 90, TOOL_WIRECUTTER = 35, /obj/item/stack/packageWrap = 15, /obj/item/stack/cable_coil = 5)
|
||||
time = 90
|
||||
experience_given = 20
|
||||
|
||||
/datum/surgery_step/coronary_bypass/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 graft a bypass onto [target]'s heart...</span>",
|
||||
"<span class='notice'>[user] begins to graft something onto [target]'s heart!</span>",
|
||||
"<span class='notice'>[user] begins to graft something onto [target]'s heart!</span>")
|
||||
|
||||
/datum/surgery_step/coronary_bypass/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/coronary_bypass/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
target.setOrganLoss(ORGAN_SLOT_HEART, 60)
|
||||
var/obj/item/organ/heart/heart = target.getorganslot(ORGAN_SLOT_HEART)
|
||||
if(heart) //slightly worrying if we lost our heart mid-operation, but that's life
|
||||
@@ -64,7 +65,7 @@
|
||||
display_results(user, target, "<span class='notice'>You successfully graft a bypass onto [target]'s heart.</span>",
|
||||
"<span class='notice'>[user] finishes grafting something onto [target]'s heart.</span>",
|
||||
"<span class='notice'>[user] finishes grafting something onto [target]'s heart.</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/coronary_bypass/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(ishuman(target))
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"<span class='notice'>[user] begins to wedge \the [tool] in [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] begins to wedge something in [target]'s [parse_zone(target_zone)].</span>")
|
||||
|
||||
/datum/surgery_step/insert_pill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/reagent_containers/pill/tool, datum/surgery/surgery)
|
||||
/datum/surgery_step/insert_pill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/reagent_containers/pill/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(!istype(tool))
|
||||
return 0
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
display_results(user, target, "<span class='notice'>You wedge [tool] into [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] wedges \the [tool] into [target]'s [parse_zone(target_zone)]!</span>",
|
||||
"<span class='notice'>[user] wedges something into [target]'s [parse_zone(target_zone)]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/hands_free/activate_pill
|
||||
name = "Activate Pill"
|
||||
|
||||
@@ -73,26 +73,32 @@
|
||||
cost *= ED.value_multiplier
|
||||
return (cost-multi_surgery_adjust)
|
||||
|
||||
/datum/surgery_step/dissection/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, display_results = TRUE)
|
||||
/datum/surgery_step/dissection/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/points_earned = check_value(target, surgery)
|
||||
user.visible_message("<span class='notice'>[user] dissects [target], discovering [points_earned] point\s of data!</span>", "<span class='notice'>You dissect [target], finding [points_earned] point\s worth of discoveries, you also write a few notes.</span>")
|
||||
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points_earned*PUBLIC_TECHWEB_GAIN))
|
||||
new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
var/obj/item/research_notes/the_dossier =new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
if(!user.put_in_hands(the_dossier) && istype(user.get_inactive_held_item(), /obj/item/research_notes))
|
||||
var/obj/item/research_notes/hand_dossier = user.get_inactive_held_item()
|
||||
hand_dossier.merge(the_dossier)
|
||||
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
ADD_TRAIT(target, TRAIT_DISSECTED, "[surgery.name]")
|
||||
repeatable = FALSE
|
||||
experience_given = 1+(points_earned/BASE_HUMAN_REWARD)
|
||||
return ..(default_display_results = FALSE)
|
||||
experience_given = 1+(points_earned/(BASE_HUMAN_REWARD/10))//if BHR = 500, 10 XP on base surgery
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
var/points_earned = round(check_value(target, surgery) * 0.01)
|
||||
user.visible_message("<span class='notice'>[user] dissects [target]!</span>", EXPDIS_FAIL_MSG)
|
||||
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points_earned*PUBLIC_TECHWEB_GAIN))
|
||||
new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
var/obj/item/research_notes/the_dossier =new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
if(!user.put_in_hands(the_dossier) && istype(user.get_inactive_held_item(), /obj/item/research_notes))
|
||||
var/obj/item/research_notes/hand_dossier = user.get_inactive_held_item()
|
||||
hand_dossier.merge(the_dossier)
|
||||
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
name = "fix eyes"
|
||||
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 45, /obj/item/pen = 25)
|
||||
time = 64
|
||||
experience_given = 5
|
||||
|
||||
/datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target)
|
||||
var/obj/item/organ/eyes/E = target.getorganslot(ORGAN_SLOT_EYES)
|
||||
@@ -23,7 +24,7 @@
|
||||
"<span class='notice'>[user] begins to fix [target]'s eyes.</span>",
|
||||
"<span class='notice'>[user] begins to perform surgery on [target]'s eyes.</span>")
|
||||
|
||||
/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/obj/item/organ/eyes/E = target.getorganslot(ORGAN_SLOT_EYES)
|
||||
user.visible_message("<span class='notice'>[user] successfully fixes [target]'s eyes!</span>", "<span class='notice'>You succeed in fixing [target]'s eyes.</span>")
|
||||
display_results(user, target, "<span class='notice'>You succeed in fixing [target]'s eyes.</span>",
|
||||
@@ -34,7 +35,7 @@
|
||||
target.cure_nearsighted(list(EYE_DAMAGE))
|
||||
target.blur_eyes(35) //this will fix itself slowly.
|
||||
E.setOrganDamage(0)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.getorgan(/obj/item/organ/brain))
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#define PER_ITERATION_XP_CAP 3 //TW XP gain scales with repeated iterations.
|
||||
|
||||
/datum/surgery/healing
|
||||
steps = list(/datum/surgery_step/incise,
|
||||
/datum/surgery_step/retract_skin,
|
||||
@@ -26,7 +28,7 @@
|
||||
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 65, /obj/item/pen = 55)
|
||||
repeatable = TRUE
|
||||
time = 25
|
||||
experience_given = 2
|
||||
experience_given = 1 //scales with repeated iterations
|
||||
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!
|
||||
@@ -48,11 +50,13 @@
|
||||
|
||||
/datum/surgery_step/heal/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
|
||||
if(..())
|
||||
experience_given = min(experience_given+0.25,PER_ITERATION_XP_CAP)
|
||||
while((brutehealing && target.getBruteLoss()) || (burnhealing && target.getFireLoss()))
|
||||
if(!..())
|
||||
break
|
||||
experience_given = min(experience_given+0.25,PER_ITERATION_XP_CAP)
|
||||
|
||||
/datum/surgery_step/heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/umsg = "You succeed in fixing some of [target]'s wounds" //no period, add initial space to "addons"
|
||||
var/tmsg = "[user] fixes some of [target]'s wounds" //see above
|
||||
var/urhealedamt_brute = brutehealing
|
||||
@@ -76,7 +80,7 @@
|
||||
if(istype(surgery, /datum/surgery/healing))
|
||||
var/datum/surgery/healing/the_surgery = surgery
|
||||
the_surgery.antispam = TRUE
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/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>",
|
||||
@@ -214,3 +218,5 @@
|
||||
"<span class='warning'>[user] screws up!</span>",
|
||||
"<span class='notice'>[user] fixes some of [target]'s wounds.</span>", TRUE)
|
||||
target.take_bodypart_damage(5,5)
|
||||
|
||||
#undef PER_ITERATION_XP_CAP
|
||||
|
||||
@@ -24,19 +24,20 @@
|
||||
implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45,
|
||||
/obj/item/shard = 35)
|
||||
time = 52
|
||||
experience_given = 10
|
||||
|
||||
/datum/surgery_step/hepatectomy/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 out a damaged peice of [target]'s liver...</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>")
|
||||
|
||||
/datum/surgery_step/hepatectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/hepatectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.setOrganLoss(ORGAN_SLOT_LIVER, 10) //not bad, not great
|
||||
display_results(user, target, "<span class='notice'>You successfully remove the damaged part of [target]'s liver.</span>",
|
||||
"<span class='notice'>[user] successfully removes the damaged part of [target]'s liver.</span>",
|
||||
"<span class='notice'>[user] successfully removes the damaged part of [target]'s liver.</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/hepatectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery)
|
||||
var/mob/living/carbon/human/H = target
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"<span class='notice'>[user] looks for an implant in [target]'s [target_zone].</span>",
|
||||
"<span class='notice'>[user] looks for something in [target]'s [target_zone].</span>")
|
||||
|
||||
/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(I)
|
||||
display_results(user, target, "<span class='notice'>You successfully remove [I] from [target]'s [target_zone].</span>",
|
||||
"<span class='notice'>[user] successfully removes [I] from [target]'s [target_zone]!</span>",
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't find anything in [target]'s [target_zone]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery/implant_removal/mechanic
|
||||
name = "implant removal"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
name = "replace limb"
|
||||
implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100)
|
||||
time = 32
|
||||
experience_given = 10
|
||||
var/obj/item/bodypart/L = null // L because "limb"
|
||||
|
||||
|
||||
@@ -41,7 +42,7 @@
|
||||
|
||||
//SURGERY STEP SUCCESSES
|
||||
|
||||
/datum/surgery_step/replace_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery)
|
||||
/datum/surgery_step/replace_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(L)
|
||||
if(istype(tool, /obj/item/organ_storage))
|
||||
tool.icon_state = initial(tool.icon_state)
|
||||
@@ -56,4 +57,4 @@
|
||||
log_combat(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[target] has no organic [parse_zone(target_zone)] there!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
|
||||
/datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target)
|
||||
if(HAS_TRAIT(target, TRAIT_FAT))
|
||||
if(HAS_TRAIT(target, TRAIT_FAT) && target.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
name = "cut excess fat"
|
||||
implements = list(TOOL_SAW = 100, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25)
|
||||
time = 64
|
||||
experience_given = 2
|
||||
|
||||
/datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("<span class='notice'>[user] begins to cut away [target]'s excess fat.</span>", "<span class='notice'>You begin to cut away [target]'s excess fat...</span>")
|
||||
@@ -32,20 +33,22 @@
|
||||
name = "remove loose fat"
|
||||
implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35)
|
||||
time = 32
|
||||
experience_given = 0 //scales with fat removed
|
||||
|
||||
/datum/surgery_step/remove_fat/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 extract [target]'s loose fat...</span>",
|
||||
"<span class='notice'>[user] begins to extract [target]'s loose fat!</span>",
|
||||
"<span class='notice'>[user] begins to extract something from [target]'s [target_zone].</span>")
|
||||
|
||||
/datum/surgery_step/remove_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/remove_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You extract [target]'s fat.</span>",
|
||||
"<span class='notice'>[user] extracts [target]'s fat!</span>",
|
||||
"<span class='notice'>[user] extracts [target]'s fat!</span>")
|
||||
target.overeatduration = 0 //patient is unfatted
|
||||
var/removednutriment = target.nutrition
|
||||
target.set_nutrition(NUTRITION_LEVEL_WELL_FED)
|
||||
removednutriment -= 450 //whatever was removed goes into the meat
|
||||
removednutriment -= NUTRITION_LEVEL_WELL_FED //whatever was removed goes into the meat
|
||||
experience_given = (round(removednutriment/30))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/typeofmeat = /obj/item/reagent_containers/food/snacks/meat/slab/human
|
||||
|
||||
@@ -59,4 +62,4 @@
|
||||
newmeat.subjectjob = H.job
|
||||
newmeat.reagents.add_reagent (/datum/reagent/consumable/nutriment, (removednutriment / 15)) //To balance with nutriment_factor of nutriment
|
||||
newmeat.forceMove(target.loc)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -18,13 +18,14 @@
|
||||
implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45,
|
||||
/obj/item/shard = 35)
|
||||
time = 42
|
||||
experience_given = 10
|
||||
|
||||
/datum/surgery_step/lobectomy/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 make an incision in [target]'s lungs...</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>")
|
||||
|
||||
/datum/surgery_step/lobectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/lobectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/lungs/L = H.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
@@ -33,7 +34,7 @@
|
||||
display_results(user, target, "<span class='notice'>You successfully excise [H]'s most damaged lobe.</span>",
|
||||
"<span class='notice'>Successfully removes a piece of [H]'s lungs.</span>",
|
||||
"")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/lobectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(ishuman(target))
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/incise/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/incise/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if ishuman(target)
|
||||
var/mob/living/carbon/human/H = target
|
||||
if (!(NOBLOOD in H.dna.species.species_traits))
|
||||
@@ -25,9 +25,10 @@
|
||||
"<span class='notice'>Blood pools around the incision in [H]'s [parse_zone(target_zone)].</span>",
|
||||
"")
|
||||
H.bleed_rate += 3
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/incise/nobleed //silly friendly!
|
||||
experience_given = 1 //safer so not as much XP
|
||||
|
||||
/datum/surgery_step/incise/nobleed/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 <i>carefully</i> make an incision in [target]'s [parse_zone(target_zone)]...</span>",
|
||||
@@ -110,12 +111,12 @@
|
||||
"<span class='notice'>[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].</span>")
|
||||
|
||||
/datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
target.apply_damage(50, BRUTE, "[target_zone]")
|
||||
display_results(user, target, "<span class='notice'>You saw [target]'s [parse_zone(target_zone)] open.</span>",
|
||||
"<span class='notice'>[user] saws [target]'s [parse_zone(target_zone)] open!</span>",
|
||||
"<span class='notice'>[user] saws [target]'s [parse_zone(target_zone)] open!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
//drill bone
|
||||
/datum/surgery_step/drill
|
||||
@@ -128,8 +129,8 @@
|
||||
"<span class='notice'>[user] begins to drill into the bone in [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] begins to drill into the bone in [target]'s [parse_zone(target_zone)].</span>")
|
||||
|
||||
/datum/surgery_step/drill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/drill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You drill into [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] drills into [target]'s [parse_zone(target_zone)]!</span>",
|
||||
"<span class='notice'>[user] drills into [target]'s [parse_zone(target_zone)]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
name = "reshape face"
|
||||
implements = list(TOOL_SCALPEL = 100, /obj/item/kitchen/knife = 50, TOOL_WIRECUTTER = 35)
|
||||
time = 64
|
||||
experience_given = 5
|
||||
|
||||
/datum/surgery_step/reshape_face/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("<span class='notice'>[user] begins to alter [target]'s appearance.</span>", "<span class='notice'>You begin to alter [target]'s appearance...</span>")
|
||||
@@ -15,7 +16,7 @@
|
||||
"<span class='notice'>[user] begins to alter [target]'s appearance.</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target]'s face.</span>")
|
||||
|
||||
/datum/surgery_step/reshape_face/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/reshape_face/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(HAS_TRAIT_FROM(target, TRAIT_DISFIGURED, TRAIT_GENERIC))
|
||||
REMOVE_TRAIT(target, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
display_results(user, target, "<span class='notice'>You successfully restore [target]'s appearance.</span>",
|
||||
@@ -42,7 +43,7 @@
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.sec_hud_set_ID()
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/reshape_face/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='warning'>You screw up, leaving [target]'s appearance disfigured!</span>",
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
name = "add prosthetic"
|
||||
implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100, /obj/item/twohanded/required/chainsaw = 100, /obj/item/melee/synthetic_arm_blade = 100)
|
||||
time = 32
|
||||
experience_given = 5 //won't get full XP if rejected
|
||||
var/organ_rejection_dam = 0
|
||||
|
||||
/datum/surgery_step/add_prosthetic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
@@ -62,8 +63,8 @@
|
||||
to_chat(user, "<span class='warning'>[tool] must be installed onto an arm.</span>")
|
||||
return -1
|
||||
|
||||
/datum/surgery_step/add_prosthetic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
. = ..(default_display_results = FALSE)
|
||||
/datum/surgery_step/add_prosthetic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
. = ..()
|
||||
if(istype(tool, /obj/item/organ_storage))
|
||||
tool.icon_state = initial(tool.icon_state)
|
||||
tool.desc = initial(tool.desc)
|
||||
@@ -74,6 +75,7 @@
|
||||
L.attach_limb(target)
|
||||
if(organ_rejection_dam)
|
||||
target.adjustToxLoss(organ_rejection_dam)
|
||||
experience_given -= (round(organ_rejection_dam/10))
|
||||
display_results(user, target, "<span class='notice'>You succeed in replacing [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] successfully replaces [target]'s [parse_zone(target_zone)] with [tool]!</span>",
|
||||
"<span class='notice'>[user] successfully replaces [target]'s [parse_zone(target_zone)]!</span>")
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
name = "remove embedded objects"
|
||||
time = 32
|
||||
accept_hand = 1
|
||||
experience_given = 5
|
||||
var/obj/item/bodypart/L = null
|
||||
|
||||
|
||||
@@ -22,7 +23,7 @@
|
||||
user.visible_message("<span class='notice'>[user] looks for [target]'s [parse_zone(user.zone_selected)].</span>", "<span class='notice'>You look for [target]'s [parse_zone(user.zone_selected)]...</span>")
|
||||
|
||||
|
||||
/datum/surgery_step/remove_object/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/remove_object/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(L)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
@@ -45,4 +46,4 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't find [target]'s [parse_zone(user.zone_selected)], let alone any objects embedded in it!</span>")
|
||||
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/list/chems_needed = list() //list of chems needed to complete the step. Even on success, the step will have no effect if there aren't the chems required in the mob.
|
||||
var/require_all_chems = TRUE //any on the list or all on the list?
|
||||
var/silicons_obey_prob = FALSE
|
||||
/// The amount of a experience given for successfully completing the step.
|
||||
var/experience_given = 1
|
||||
|
||||
/datum/surgery_step/proc/try_op(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
|
||||
@@ -99,8 +100,7 @@
|
||||
if(failure(user, target, target_zone, tool, surgery, fail_prob))
|
||||
advance = TRUE
|
||||
if(chem_check_result)
|
||||
if(.(user, target, target_zone, tool, surgery, try_to_fail)) //automatically re-attempt if failed for reason other than lack of required chemical
|
||||
advance = TRUE
|
||||
return .(user, target, target_zone, tool, surgery, try_to_fail) //automatically re-attempt if failed for reason other than lack of required chemical
|
||||
if(advance && !repeatable)
|
||||
surgery.status++
|
||||
if(surgery.status > surgery.steps.len)
|
||||
@@ -122,7 +122,7 @@
|
||||
display_results(user, target, "<span class='notice'>You succeed.</span>",
|
||||
"<span class='notice'>[user] succeeds!</span>",
|
||||
"<span class='notice'>[user] finishes.</span>")
|
||||
user?.mind.adjust_experience(/datum/skill/medical, experience_given)
|
||||
user?.mind.adjust_experience(/datum/skill/medical, round(experience_given))
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/proc/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, var/fail_prob = 0)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "Cobby Touches Medical Again"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Ups a variety of surgeries to give more XP"
|
||||
- bugfix: "Surgeries not giving XP"
|
||||
- bugfix: "Failing surgeries causing the rest of the surgery (specifically TW) to act up."
|
||||
@@ -0,0 +1,7 @@
|
||||
author: "ArcaneMusic"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Nanotrasen Plastic Labs has sat down and developed new designs exclusively using plastic for station use. Station productivity has dropped by 2.7 percent."
|
||||
- rscadd: "Adds Plastic Potted Trees, Plastic Can holders, Plastic Bead Necklaces, and Plastic Boxes."
|
||||
- tweak: "Space Carp have been noticed to actively lunge after and attack Plastic Can holders, as though they were Space Jellyfish, leading to incremental population decline."
|
||||
- tweak: "Adds 6 packs of cola and beer to the Party Crate, increasing the price to 2500."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "actioninja"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "tgui next hardware confguration and ntnet relay"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Skoglol"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Metastation maint loot overhauled. Most static loot spawns have been replaced with random spawners instead."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Skoglol"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Maint loot table has been adjusted, may now contain some special stuff. Get hunting!"
|
||||
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 70 KiB |
@@ -1060,6 +1060,7 @@
|
||||
#include "code\game\objects\items\storage\firstaid.dm"
|
||||
#include "code\game\objects\items\storage\lockbox.dm"
|
||||
#include "code\game\objects\items\storage\secure.dm"
|
||||
#include "code\game\objects\items\storage\sixpack.dm"
|
||||
#include "code\game\objects\items\storage\storage.dm"
|
||||
#include "code\game\objects\items\storage\toolbox.dm"
|
||||
#include "code\game\objects\items\storage\uplink_kits.dm"
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import { useBackend } from '../backend';
|
||||
import { Box, Button, ProgressBar, Section, AnimatedNumber } from '../components';
|
||||
|
||||
export const NtnetRelay = props => {
|
||||
const { act, data } = useBackend(props);
|
||||
|
||||
const {
|
||||
enabled,
|
||||
dos_capacity,
|
||||
dos_overload,
|
||||
dos_crashed,
|
||||
} = data;
|
||||
|
||||
return (
|
||||
<Section
|
||||
title="Network Buffer"
|
||||
buttons={(
|
||||
<Button
|
||||
icon="power-off"
|
||||
selected={enabled}
|
||||
content={enabled ? 'ENABLED' : 'DISABLED'}
|
||||
onClick={() => act('toggle')}
|
||||
/>
|
||||
)}>
|
||||
{!dos_crashed ? (
|
||||
<ProgressBar
|
||||
value={dos_overload}
|
||||
minValue={0}
|
||||
maxValue={dos_capacity}>
|
||||
<AnimatedNumber value={dos_overload} /> GQ
|
||||
{' / '}
|
||||
{dos_capacity} GQ
|
||||
</ProgressBar>
|
||||
) : (
|
||||
<Box fontFamily="monospace">
|
||||
<Box fontSize="20px">
|
||||
NETWORK BUFFER OVERFLOW
|
||||
</Box>
|
||||
<Box fontSize="16px">
|
||||
OVERLOAD RECOVERY MODE
|
||||
</Box>
|
||||
<Box>
|
||||
This system is suffering temporary outage due to overflow
|
||||
of traffic buffers. Until buffered traffic is processed,
|
||||
all further requests will be dropped. Frequent occurences
|
||||
of this error may indicate insufficient hardware capacity
|
||||
of your network. Please contact your network planning
|
||||
department for instructions on how to resolve this issue.
|
||||
</Box>
|
||||
<Box fontSize="20px" color="bad">
|
||||
ADMINISTRATOR OVERRIDE
|
||||
</Box>
|
||||
<Box fontSize="16px" color="bad">
|
||||
CAUTION - DATA LOSS MAY OCCUR
|
||||
</Box>
|
||||
<Button
|
||||
icon="signal"
|
||||
content="PURGE BUFFER"
|
||||
mt={1}
|
||||
color="bad"
|
||||
onClick={() => act('restart')} />
|
||||
</Box>
|
||||
)}
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,90 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { Box, Button, Flex, Icon, LabeledList, NoticeBox, ProgressBar, Section, ColorBox } from '../components';
|
||||
|
||||
export const NtosConfiguration = props => {
|
||||
const { act, data } = useBackend(props);
|
||||
|
||||
const {
|
||||
power_usage,
|
||||
battery_exists,
|
||||
battery = {},
|
||||
disk_size,
|
||||
disk_used,
|
||||
hardware = [],
|
||||
} = data;
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<Section
|
||||
title="Power Supply"
|
||||
buttons={(
|
||||
<Box
|
||||
inline
|
||||
bold
|
||||
mr={1}>
|
||||
Power Draw: {power_usage}W
|
||||
</Box>
|
||||
)}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item
|
||||
label="Battery Status"
|
||||
color={!battery_exists && 'average'}>
|
||||
{battery_exists ? (
|
||||
<ProgressBar
|
||||
value={battery.charge}
|
||||
minValue={0}
|
||||
maxValue={battery.max}
|
||||
ranges={{
|
||||
good: [battery.max / 2, Infinity],
|
||||
average: [battery.max / 4, battery.max / 2],
|
||||
bad: [-Infinity, battery.max / 4],
|
||||
}}>
|
||||
{battery.charge} / {battery.max}
|
||||
</ProgressBar>
|
||||
) : 'Not Availible'}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Section title="File System">
|
||||
<ProgressBar
|
||||
value={disk_used}
|
||||
minValue={0}
|
||||
maxValue={disk_size}
|
||||
color="good">
|
||||
{disk_used} GQ / {disk_size} GQ
|
||||
</ProgressBar>
|
||||
</Section>
|
||||
<Section title="Hardware Components">
|
||||
{hardware.map(component => (
|
||||
<Section
|
||||
key={component.name}
|
||||
title={component.name}
|
||||
level={2}
|
||||
buttons={(
|
||||
<Fragment>
|
||||
{!component.critical && (
|
||||
<Button.Checkbox
|
||||
content="Enabled"
|
||||
checked={component.enabled}
|
||||
mr={1}
|
||||
onClick={() => act('PC_toggle_component', {
|
||||
name: component.name,
|
||||
})}
|
||||
/>
|
||||
)}
|
||||
<Box
|
||||
inline
|
||||
bold
|
||||
mr={1}>
|
||||
Power Usage: {component.powerusage}W
|
||||
</Box>
|
||||
</Fragment>
|
||||
)}>
|
||||
{component.desc}
|
||||
</Section>
|
||||
))}
|
||||
</Section>
|
||||
</Fragment>
|
||||
);
|
||||
};
|
||||
@@ -52,7 +52,9 @@ import { NaniteCloudControl } from './interfaces/NaniteCloudControl';
|
||||
import { NaniteProgramHub } from './interfaces/NaniteProgramHub';
|
||||
import { NaniteProgrammer } from './interfaces/NaniteProgrammer';
|
||||
import { NaniteRemote } from './interfaces/NaniteRemote';
|
||||
import { NtnetRelay } from './interfaces/NtnetRelay';
|
||||
import { NtosArcade } from './interfaces/NtosArcade';
|
||||
import { NtosConfiguration } from './interfaces/NtosConfiguration';
|
||||
import { NtosMain } from './interfaces/NtosMain';
|
||||
import { NtosNetDownloader } from './interfaces/NtosNetDownloader';
|
||||
import { NtosSupermatterMonitor } from './interfaces/NtosSupermatterMonitor';
|
||||
@@ -309,6 +311,22 @@ const ROUTES = {
|
||||
component: () => NaniteRemote,
|
||||
scrollable: true,
|
||||
},
|
||||
ntnet_relay: {
|
||||
component: () => NtnetRelay,
|
||||
scrollable: false,
|
||||
},
|
||||
ntos_arcade: {
|
||||
component: () => NtosArcade,
|
||||
wrapper: () => NtosWrapper,
|
||||
scrollable: false,
|
||||
theme: 'ntos',
|
||||
},
|
||||
ntos_configuration: {
|
||||
component: () => NtosConfiguration,
|
||||
wrapper: () => NtosWrapper,
|
||||
scrollable: true,
|
||||
theme: 'ntos',
|
||||
},
|
||||
ntos_main: {
|
||||
component: () => NtosMain,
|
||||
wrapper: () => NtosWrapper,
|
||||
@@ -321,18 +339,18 @@ const ROUTES = {
|
||||
scrollable: true,
|
||||
theme: 'ntos',
|
||||
},
|
||||
ntos_arcade: {
|
||||
component: () => NtosArcade,
|
||||
wrapper: () => NtosWrapper,
|
||||
scrollable: false,
|
||||
theme: 'ntos',
|
||||
},
|
||||
ntos_power_monitor: {
|
||||
component: () => PowerMonitor,
|
||||
wrapper: () => NtosWrapper,
|
||||
scrollable: true,
|
||||
theme: 'ntos',
|
||||
},
|
||||
ntos_station_alert: {
|
||||
component: () => StationAlertConsole,
|
||||
wrapper: () => NtosWrapper,
|
||||
scrollable: true,
|
||||
theme: 'ntos',
|
||||
},
|
||||
ntos_supermatter_monitor: {
|
||||
component: () => NtosSupermatterMonitor,
|
||||
wrapper: () => NtosWrapper,
|
||||
|
||||