@@ -29620,10 +29620,10 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/robotics/lab)
|
||||
"bsU" = (
|
||||
/mob/living/simple_animal/hostile/retaliate/ghost,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/simple_animal/hostile/retaliate/ghost,
|
||||
/turf/open/floor/wood,
|
||||
/area/maintenance/port/fore)
|
||||
"bsV" = (
|
||||
@@ -53488,6 +53488,10 @@
|
||||
},
|
||||
/turf/closed/wall,
|
||||
/area/science/circuit)
|
||||
"dxF" = (
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/wood,
|
||||
/area/maintenance/bar)
|
||||
"dyE" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-4"
|
||||
@@ -56505,6 +56509,10 @@
|
||||
},
|
||||
/turf/open/floor/wood/wood_diagonal,
|
||||
/area/maintenance/port/fore)
|
||||
"kqy" = (
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness)
|
||||
"kqI" = (
|
||||
/obj/structure/window,
|
||||
/turf/open/floor/wood,
|
||||
@@ -58551,6 +58559,7 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"pqR" = (
|
||||
@@ -86334,7 +86343,7 @@ oKh
|
||||
oKh
|
||||
iiW
|
||||
iiW
|
||||
iiW
|
||||
dxF
|
||||
izv
|
||||
nfm
|
||||
bCq
|
||||
@@ -98349,7 +98358,7 @@ awB
|
||||
att
|
||||
azh
|
||||
fHG
|
||||
fHG
|
||||
kqy
|
||||
kxf
|
||||
ufD
|
||||
alP
|
||||
|
||||
@@ -33604,6 +33604,10 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/kirbyplants{
|
||||
icon_state = "plant-20";
|
||||
pixel_y = 3
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"bvu" = (
|
||||
@@ -38936,10 +38940,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/kirbyplants{
|
||||
icon_state = "plant-20";
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"bGN" = (
|
||||
@@ -52867,7 +52868,7 @@
|
||||
dir = 4;
|
||||
pixel_x = -28
|
||||
},
|
||||
/obj/item/kirbyplants/random,
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/office)
|
||||
"cjB" = (
|
||||
@@ -71256,6 +71257,13 @@
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/router/aux)
|
||||
"stP" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/kirbyplants/random,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/office)
|
||||
"sAm" = (
|
||||
/obj/structure/plasticflaps,
|
||||
/obj/machinery/door/poddoor{
|
||||
@@ -114255,7 +114263,7 @@ ckq
|
||||
bgf
|
||||
beB
|
||||
cxC
|
||||
bgq
|
||||
stP
|
||||
cjA
|
||||
biy
|
||||
bjN
|
||||
|
||||
@@ -3535,9 +3535,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/item/kirbyplants{
|
||||
icon_state = "plant-21"
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/secondary/entry)
|
||||
"ajL" = (
|
||||
@@ -3823,6 +3821,9 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/kirbyplants{
|
||||
icon_state = "plant-21"
|
||||
},
|
||||
/turf/open/floor/plasteel/white/corner,
|
||||
/area/hallway/secondary/entry)
|
||||
"akn" = (
|
||||
@@ -79384,6 +79385,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel{
|
||||
heat_capacity = 1e+006
|
||||
},
|
||||
|
||||
@@ -48007,8 +48007,9 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/wardrobe/mixed,
|
||||
/obj/machinery/light/small,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"bzo" = (
|
||||
@@ -48767,7 +48768,6 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"bAA" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -48777,11 +48777,6 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/storage/backpack{
|
||||
pixel_x = 4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/storage/backpack,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
pixel_x = 26
|
||||
@@ -49398,6 +49393,7 @@
|
||||
dir = 1;
|
||||
name = "recreation camera"
|
||||
},
|
||||
/obj/structure/closet/wardrobe/mixed,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"bBy" = (
|
||||
@@ -54797,11 +54793,6 @@
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
"bKn" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/paper_bin{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/pen,
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
@@ -54810,6 +54801,11 @@
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 22
|
||||
},
|
||||
/obj/item/storage/backpack{
|
||||
pixel_x = 4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/storage/backpack,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"bKo" = (
|
||||
@@ -55425,6 +55421,12 @@
|
||||
pixel_x = 28;
|
||||
pixel_y = 22
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/paper_bin{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/pen,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"bLd" = (
|
||||
@@ -60844,6 +60846,11 @@
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/toy/figure/assistant{
|
||||
pixel_x = 8;
|
||||
pixel_y = 6
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/secondary/entry)
|
||||
"bTD" = (
|
||||
@@ -61021,6 +61028,12 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 10
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/paper_bin{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/pen,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/secondary/entry)
|
||||
"bTO" = (
|
||||
@@ -61259,19 +61272,8 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/paper_bin{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/pen,
|
||||
/obj/item/toy/figure/assistant{
|
||||
pixel_x = 8;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/hallway/secondary/entry)
|
||||
"bUi" = (
|
||||
@@ -71325,15 +71327,16 @@
|
||||
icon_gib = "magicarp_gib";
|
||||
icon_living = "magicarp";
|
||||
icon_state = "magicarp";
|
||||
maxHealth = 200;
|
||||
max_co2 = 5;
|
||||
max_tox = 2;
|
||||
maxHealth = 200;
|
||||
melee_damage_lower = 15;
|
||||
melee_damage_upper = 20;
|
||||
min_oxy = 5;
|
||||
name = "Lia";
|
||||
real_name = "Lia";
|
||||
response_help = "pets";
|
||||
response_help_continuous = "pets";
|
||||
response_help_simple = "pet";
|
||||
turns_per_move = 10
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
|
||||
@@ -13764,6 +13764,7 @@
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/corner{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"Jp" = (
|
||||
|
||||
@@ -4826,6 +4826,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel/white/corner,
|
||||
/area/hallway/secondary/entry)
|
||||
"aiU" = (
|
||||
@@ -23177,6 +23178,9 @@
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/machinery/newscaster{
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"aTy" = (
|
||||
@@ -23190,17 +23194,6 @@
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"aTz" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/newscaster{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"aTA" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 9
|
||||
@@ -81348,6 +81341,21 @@
|
||||
/obj/structure/closet/firecloset,
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
"foN" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"fpa" = (
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_y = -30
|
||||
@@ -81974,6 +81982,16 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/cryopod)
|
||||
"lFR" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/vending/clothing,
|
||||
/turf/open/floor/plasteel/white/corner,
|
||||
/area/hallway/secondary/entry)
|
||||
"lGS" = (
|
||||
/obj/docking_port/stationary/public_mining_dock,
|
||||
/turf/open/floor/plating,
|
||||
@@ -97543,7 +97561,7 @@ blU
|
||||
aiT
|
||||
bEs
|
||||
bHJ
|
||||
aiT
|
||||
lFR
|
||||
iSt
|
||||
mcS
|
||||
alK
|
||||
@@ -118601,8 +118619,8 @@ aOD
|
||||
aPK
|
||||
aQV
|
||||
aOu
|
||||
aTz
|
||||
aUM
|
||||
aTt
|
||||
foN
|
||||
aUM
|
||||
aYe
|
||||
dnh
|
||||
|
||||
@@ -15268,6 +15268,9 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/kirbyplants{
|
||||
icon_state = "plant-21"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/dorms)
|
||||
"axG" = (
|
||||
@@ -19618,9 +19621,6 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/dorms)
|
||||
"aEL" = (
|
||||
/obj/item/kirbyplants{
|
||||
icon_state = "plant-21"
|
||||
},
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -19635,6 +19635,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/dorms)
|
||||
"aEM" = (
|
||||
|
||||
@@ -511,10 +511,10 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"abi" = (
|
||||
/obj/machinery/disposal/bin,
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 8
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 10
|
||||
},
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"abj" = (
|
||||
@@ -2337,9 +2337,12 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/prison)
|
||||
"afJ" = (
|
||||
/obj/effect/landmark/carpspawn,
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/central)
|
||||
"afK" = (
|
||||
/obj/machinery/atmospherics/components/unary/tank/air{
|
||||
dir = 1
|
||||
@@ -20027,9 +20030,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/crew_quarters/bar)
|
||||
"aUQ" = (
|
||||
@@ -20044,6 +20045,9 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/hydroponics)
|
||||
"aUR" = (
|
||||
@@ -20485,8 +20489,16 @@
|
||||
/turf/closed/wall,
|
||||
/area/janitor)
|
||||
"aVT" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/closed/wall,
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/poddoor/shutters{
|
||||
id = "jangarage";
|
||||
name = "Custodial Closet Shutters"
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/janitor)
|
||||
"aVU" = (
|
||||
/obj/machinery/door/window/eastright{
|
||||
@@ -20510,6 +20522,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/janitor)
|
||||
"aVV" = (
|
||||
@@ -20892,9 +20905,6 @@
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Custodial Quarters"
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
@@ -20915,6 +20925,9 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/janitor)
|
||||
"aWO" = (
|
||||
@@ -20934,6 +20947,9 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/janitor)
|
||||
"aWP" = (
|
||||
@@ -23004,9 +23020,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/central)
|
||||
"baW" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "jangarage";
|
||||
name = "Custodial Closet Shutters Control";
|
||||
@@ -23014,14 +23027,12 @@
|
||||
req_access_txt = "26"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/central)
|
||||
"baX" = (
|
||||
/obj/vehicle/ridden/janicart,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
@@ -23034,6 +23045,9 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/janitor)
|
||||
"baY" = (
|
||||
@@ -23398,6 +23412,9 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/janitor)
|
||||
"bbY" = (
|
||||
@@ -31173,17 +31190,26 @@
|
||||
"bup" = (
|
||||
/obj/machinery/rnd/destructive_analyzer,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/lab)
|
||||
"buq" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/lab)
|
||||
"bur" = (
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/rnd/production/protolathe/department/science,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/lab)
|
||||
"bus" = (
|
||||
@@ -31202,6 +31228,9 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"but" = (
|
||||
@@ -31664,6 +31693,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"bvA" = (
|
||||
@@ -32372,6 +32402,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"bxh" = (
|
||||
@@ -33056,12 +33087,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"byD" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 6
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/machinery/door/airlock/research{
|
||||
name = "R&D Lab";
|
||||
req_one_access_txt = "7;29;30"
|
||||
@@ -33070,6 +33095,12 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 6
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/lab)
|
||||
"byE" = (
|
||||
@@ -33091,7 +33122,6 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"byG" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
@@ -33919,10 +33949,6 @@
|
||||
/area/hallway/primary/aft)
|
||||
"bAm" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/hallway/primary/aft)
|
||||
"bAo" = (
|
||||
@@ -33952,7 +33978,6 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
@@ -34404,17 +34429,14 @@
|
||||
name = "RD Office APC";
|
||||
pixel_x = -25
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-4"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hor)
|
||||
@@ -34425,8 +34447,8 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hor)
|
||||
@@ -34434,6 +34456,9 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hor)
|
||||
"bBt" = (
|
||||
@@ -34441,6 +34466,9 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hor)
|
||||
"bBu" = (
|
||||
@@ -34478,6 +34506,9 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hor)
|
||||
"bBw" = (
|
||||
@@ -35240,6 +35271,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/hor)
|
||||
"bCK" = (
|
||||
@@ -44248,9 +44280,11 @@
|
||||
/turf/open/floor/engine/co2,
|
||||
/area/engine/atmos)
|
||||
"bWh" = (
|
||||
/obj/effect/turf_decal/sand,
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/chapel/office)
|
||||
/area/hallway/primary/aft)
|
||||
"bWi" = (
|
||||
/obj/structure/flora/ausbushes/leafybush,
|
||||
/obj/structure/flora/ausbushes/reedbush,
|
||||
@@ -52824,6 +52858,9 @@
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/science/lab)
|
||||
"cCt" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"cCB" = (
|
||||
@@ -53058,6 +53095,9 @@
|
||||
freq = 1400;
|
||||
location = "Research Division"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/lab)
|
||||
"cXW" = (
|
||||
@@ -53151,10 +53191,6 @@
|
||||
/area/maintenance/department/security/brig)
|
||||
"dhz" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/chair{
|
||||
dir = 8;
|
||||
name = "Defense"
|
||||
@@ -53163,9 +53199,6 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"dir" = (
|
||||
@@ -53960,11 +53993,11 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 1
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
@@ -55488,6 +55521,12 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 6
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"ioj" = (
|
||||
@@ -55591,6 +55630,9 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"iyg" = (
|
||||
@@ -56345,9 +56387,13 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/mixing)
|
||||
"koz" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
/obj/effect/turf_decal/tile/purple,
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"kpK" = (
|
||||
@@ -56634,10 +56680,14 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/xenobiology)
|
||||
"kSb" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/structure/grille,
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
/obj/structure/chair/office/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"kSF" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
@@ -56711,6 +56761,10 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"lcU" = (
|
||||
@@ -57121,6 +57175,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"meF" = (
|
||||
@@ -57128,8 +57183,9 @@
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"mfC" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
@@ -59138,6 +59194,13 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/engine)
|
||||
"qAx" = (
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/disposal/bin,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"qAM" = (
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/item/cigbutt,
|
||||
@@ -59336,6 +59399,7 @@
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
"qVk" = (
|
||||
/obj/machinery/door/poddoor/incinerator_atmos_aux,
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space/basic,
|
||||
/area/maintenance/disposal/incinerator)
|
||||
"qVP" = (
|
||||
@@ -60486,6 +60550,9 @@
|
||||
id = "research_shutters_2";
|
||||
name = "research shutters"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/lab)
|
||||
"tLP" = (
|
||||
@@ -60808,12 +60875,6 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/chair{
|
||||
dir = 8;
|
||||
name = "Defense"
|
||||
@@ -60933,6 +60994,10 @@
|
||||
/obj/effect/turf_decal/plaque,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/engine)
|
||||
"uNA" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"uQR" = (
|
||||
/obj/item/ammo_casing/shotgun/beanbag,
|
||||
/turf/open/floor/plating,
|
||||
@@ -61489,12 +61554,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/xenobiology)
|
||||
"wfG" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/crew_quarters/heads/hor)
|
||||
"wfO" = (
|
||||
/mob/living/simple_animal/hostile/retaliate/poison/snake,
|
||||
/turf/open/floor/plating,
|
||||
@@ -76958,7 +77017,7 @@ aaa
|
||||
bOv
|
||||
bNs
|
||||
bNs
|
||||
bWh
|
||||
bQg
|
||||
bQg
|
||||
bQg
|
||||
bQg
|
||||
@@ -84165,7 +84224,7 @@ bIZ
|
||||
cbb
|
||||
bDi
|
||||
ccO
|
||||
bIZ
|
||||
bva
|
||||
cjm
|
||||
cjm
|
||||
xgh
|
||||
@@ -84425,8 +84484,8 @@ bva
|
||||
bva
|
||||
aht
|
||||
aht
|
||||
kSb
|
||||
kSb
|
||||
fon
|
||||
fon
|
||||
aht
|
||||
aht
|
||||
mau
|
||||
@@ -86680,7 +86739,7 @@ aXL
|
||||
aYL
|
||||
aZN
|
||||
baW
|
||||
aKI
|
||||
afJ
|
||||
aKI
|
||||
beb
|
||||
aKI
|
||||
@@ -86936,8 +86995,8 @@ aVS
|
||||
aXM
|
||||
aVS
|
||||
aVS
|
||||
aXM
|
||||
bbW
|
||||
aVS
|
||||
aVT
|
||||
bbW
|
||||
aVS
|
||||
aVS
|
||||
@@ -87138,7 +87197,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
afJ
|
||||
cFB
|
||||
aby
|
||||
aaa
|
||||
agQ
|
||||
@@ -87445,7 +87504,7 @@ aRJ
|
||||
aSz
|
||||
aSz
|
||||
aUP
|
||||
aVT
|
||||
aVS
|
||||
aWN
|
||||
aXO
|
||||
aYM
|
||||
@@ -89457,7 +89516,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
afJ
|
||||
cFB
|
||||
aaa
|
||||
aaa
|
||||
abI
|
||||
@@ -94921,12 +94980,12 @@ jcT
|
||||
xje
|
||||
tTl
|
||||
tTl
|
||||
tTl
|
||||
bWh
|
||||
gkS
|
||||
tTl
|
||||
tTl
|
||||
tTl
|
||||
koz
|
||||
tTl
|
||||
dgg
|
||||
phJ
|
||||
phJ
|
||||
@@ -95178,7 +95237,7 @@ bjm
|
||||
mhn
|
||||
cqi
|
||||
cqi
|
||||
cqi
|
||||
koz
|
||||
cqi
|
||||
cqi
|
||||
imE
|
||||
@@ -95697,7 +95756,7 @@ duF
|
||||
bxa
|
||||
byE
|
||||
bBp
|
||||
wfG
|
||||
bBp
|
||||
bBp
|
||||
bBp
|
||||
bBp
|
||||
@@ -95950,7 +96009,7 @@ cCl
|
||||
brq
|
||||
byF
|
||||
cCt
|
||||
byF
|
||||
kSb
|
||||
bxc
|
||||
nIU
|
||||
bAo
|
||||
@@ -104126,8 +104185,8 @@ aaY
|
||||
awB
|
||||
abe
|
||||
abi
|
||||
axw
|
||||
axw
|
||||
uNA
|
||||
qAx
|
||||
axw
|
||||
axw
|
||||
aBX
|
||||
|
||||
@@ -10524,6 +10524,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/control)
|
||||
"yl" = (
|
||||
/obj/machinery/gear_painter,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/centcom/holding)
|
||||
"yn" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/structure/sign/warning/vacuum,
|
||||
@@ -43992,7 +43996,7 @@ NS
|
||||
Nd
|
||||
ZL
|
||||
NS
|
||||
NS
|
||||
yl
|
||||
Nd
|
||||
CU
|
||||
NS
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
"bg" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/toolbox/mechanical{
|
||||
pixel_y = 8;
|
||||
pixel_x = -2
|
||||
pixel_x = -2;
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/item/storage/toolbox/electrical,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
@@ -43,8 +43,8 @@
|
||||
"bS" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/box/lights/mixed{
|
||||
pixel_y = 9;
|
||||
pixel_x = -5
|
||||
pixel_x = -5;
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/storage/box/matches{
|
||||
pixel_y = 5
|
||||
@@ -413,8 +413,8 @@
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy{
|
||||
pixel_y = 5;
|
||||
pixel_x = 6
|
||||
pixel_x = 6;
|
||||
pixel_y = 5
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/escape)
|
||||
@@ -494,8 +494,8 @@
|
||||
/area/shuttle/escape)
|
||||
"rg" = (
|
||||
/obj/item/clothing/glasses/welding{
|
||||
pixel_y = 8;
|
||||
pixel_x = 3
|
||||
pixel_x = 3;
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/item/weldingtool/largetank{
|
||||
pixel_x = -3
|
||||
@@ -882,8 +882,8 @@
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_y = 10;
|
||||
pixel_x = 5
|
||||
pixel_x = 5;
|
||||
pixel_y = 10
|
||||
},
|
||||
/obj/item/reagent_containers/food/snacks/cube/monkey{
|
||||
pixel_x = 5
|
||||
@@ -1156,8 +1156,8 @@
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/clothing/suit/monkeysuit{
|
||||
pixel_y = 4;
|
||||
pixel_x = -2
|
||||
pixel_x = -2;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/clothing/mask/gas/monkeymask{
|
||||
pixel_x = 5;
|
||||
@@ -1169,6 +1169,7 @@
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Emergency Shuttle Airlock"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/escape)
|
||||
"ST" = (
|
||||
@@ -1319,6 +1320,7 @@
|
||||
name = "Emergency Shuttle Airlock"
|
||||
},
|
||||
/obj/docking_port/mobile/emergency,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/escape)
|
||||
"Yu" = (
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
#define BODYPART_NANITES 4
|
||||
|
||||
#define HYBRID_BODYPART_DAMAGE_THRESHHOLD 25 //How much damage has to be suffered until the damage threshhold counts as passed
|
||||
#define HYBRID_BODYPART_THESHHOLD_MINDAMAGE 15 //Which damage value this limb cannot be healed out of via easy nonsurgical means if the threshhold has been passed, state resets if damage value goes below mindamage.
|
||||
#define HYBRID_BODYPART_THESHHOLD_MINDAMAGE 10 //Which damage value this limb cannot be healed out of via easy nonsurgical means if the threshhold has been passed, state resets if damage value goes below mindamage.
|
||||
|
||||
#define BODYPART_NOT_DISABLED 0
|
||||
#define BODYPART_DISABLED_DAMAGE 1
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
|
||||
#define STATUS_EFFECT_DETERMINED /datum/status_effect/determined //currently in a combat high from being seriously wounded
|
||||
|
||||
#define STATUS_EFFECT_MANTRA /datum/status_effect/mantra // a toggled self buff that makes you stronger and more resilient, but drains stamina over time
|
||||
#define STATUS_EFFECT_ASURA /datum/status_effect/asura // like a weaker version of mantra, drains HP instead of stamina and has no armor
|
||||
|
||||
/////////////
|
||||
// DEBUFFS //
|
||||
/////////////
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define APPROVAL_VOTING "APPROVAL"
|
||||
#define SCHULZE_VOTING "SCHULZE"
|
||||
#define SCORE_VOTING "SCORE"
|
||||
#define MAJORITY_JUDGEMENT_VOTING "MAJORITY_JUDGEMENT"
|
||||
#define HIGHEST_MEDIAN_VOTING "HIGHEST_MEDIAN"
|
||||
#define INSTANT_RUNOFF_VOTING "IRV"
|
||||
|
||||
#define SHOW_RESULTS (1<<0)
|
||||
@@ -18,7 +18,7 @@ GLOBAL_LIST_INIT(vote_type_names,list(\
|
||||
"IRV (single winner ranked choice)" = INSTANT_RUNOFF_VOTING,\
|
||||
"Schulze (ranked choice, higher result=better)" = SCHULZE_VOTING,\
|
||||
"Raw Score (returns results from 0 to 1, winner is 1)" = SCORE_VOTING,\
|
||||
"Majority Judgement (single-winner score voting)" = MAJORITY_JUDGEMENT_VOTING,\
|
||||
"Highest Median (single-winner score voting)" = HIGHEST_MEDIAN_VOTING,\
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(display_vote_settings, list(\
|
||||
|
||||
@@ -271,7 +271,7 @@ Turf and target are separate in case you want to teleport some distance from a t
|
||||
if(skip_mindless && (!M.mind && !M.ckey))
|
||||
if(!isbot(M) && !iscameramob(M) && !ismegafauna(M))
|
||||
continue
|
||||
if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins
|
||||
if(M.client?.holder?.fakekey && isobserver(M))
|
||||
continue
|
||||
var/name = avoid_assoc_duplicate_keys(M.name, namecounts)
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/effect/spawner/lootdrop/welder_tools = 3,
|
||||
/obj/effect/spawner/lootdrop/low_tools = 5,
|
||||
/obj/item/relic = 3,
|
||||
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 2,
|
||||
/obj/item/weaponcrafting/receiver = 2,
|
||||
/obj/item/clothing/head/cone = 2,
|
||||
/obj/item/grenade/smokebomb = 2,
|
||||
/obj/item/geiger_counter = 3,
|
||||
|
||||
@@ -141,8 +141,8 @@ SUBSYSTEM_DEF(vote)
|
||||
choices[choices[i]]++ // higher shortest path = better candidate, so we add to choices here
|
||||
// choices[choices[i]] is the schulze ranking, here, rather than raw vote numbers
|
||||
|
||||
/datum/controller/subsystem/vote/proc/calculate_majority_judgement_vote(var/blackbox_text)
|
||||
// https://en.wikipedia.org/wiki/Majority_judgment
|
||||
/datum/controller/subsystem/vote/proc/calculate_highest_median(var/blackbox_text)
|
||||
// https://en.wikipedia.org/wiki/Highest_median_voting_rules
|
||||
var/list/scores_by_choice = list()
|
||||
for(var/choice in choices)
|
||||
scores_by_choice += "[choice]"
|
||||
@@ -161,33 +161,24 @@ SUBSYSTEM_DEF(vote)
|
||||
// END BALLOT GATHERING
|
||||
for(var/score_name in scores_by_choice)
|
||||
var/list/score = scores_by_choice[score_name]
|
||||
for(var/indiv_score in score)
|
||||
SSblackbox.record_feedback("nested tally","voting",1,list(blackbox_text,"Scores",score_name,GLOB.vote_score_options[indiv_score]))
|
||||
if(score.len == 0)
|
||||
scores_by_choice -= score_name
|
||||
while(scores_by_choice.len > 1)
|
||||
var/highest_median = 0
|
||||
for(var/score_name in scores_by_choice) // first get highest median
|
||||
var/list/score = scores_by_choice[score_name]
|
||||
if(!score.len)
|
||||
scores_by_choice -= score_name
|
||||
continue
|
||||
if(!score.len)
|
||||
choices[score_name] = 0
|
||||
else
|
||||
var/median = score[max(1,round(score.len/2))]
|
||||
if(median >= highest_median)
|
||||
highest_median = median
|
||||
for(var/score_name in scores_by_choice) // then, remove
|
||||
var/list/score = scores_by_choice[score_name]
|
||||
var/median = score[max(1,round(score.len/2))]
|
||||
if(median < highest_median)
|
||||
scores_by_choice -= score_name
|
||||
for(var/score_name in scores_by_choice) // after removals
|
||||
var/list/score = scores_by_choice[score_name]
|
||||
if(score.len == 0)
|
||||
choices[score_name] += 100 // we're in a tie situation--just go with the first one
|
||||
return
|
||||
var/median_pos = max(1,round(score.len/2))
|
||||
score.Cut(median_pos,median_pos+1)
|
||||
choices[score_name]++
|
||||
var/p = 0 // proponents (those with higher than median)
|
||||
var/q = 0 // opponents (lower than median)
|
||||
var/list/this_score_list = scores_by_choice[score_name]
|
||||
for(var/indiv_score in score)
|
||||
SSblackbox.record_feedback("nested tally","voting",1,list(blackbox_text,"Scores",score_name,GLOB.vote_score_options[indiv_score]))
|
||||
if(indiv_score < median) // this is possible to do in O(logn) but n is never more than 200 so this is fine
|
||||
q += 1
|
||||
else if(indiv_score > median)
|
||||
p += 1
|
||||
p /= this_score_list.len
|
||||
q /= this_score_list.len
|
||||
choices[score_name] = median + (((p - q) / (1 - p - q)) * 0.5) // usual judgement
|
||||
// choices[score_name] = median + p - q // typical judgement
|
||||
// choices[score_name] = median + (((p - q) / (p + q)) * 0.5) // central judgement
|
||||
|
||||
/datum/controller/subsystem/vote/proc/calculate_scores(var/blackbox_text)
|
||||
for(var/choice in choices)
|
||||
@@ -245,8 +236,8 @@ SUBSYSTEM_DEF(vote)
|
||||
calculate_condorcet_votes(vote_title_text)
|
||||
if(vote_system == SCORE_VOTING)
|
||||
calculate_scores(vote_title_text)
|
||||
if(vote_system == MAJORITY_JUDGEMENT_VOTING)
|
||||
calculate_majority_judgement_vote(vote_title_text) // nothing uses this at the moment
|
||||
if(vote_system == HIGHEST_MEDIAN_VOTING)
|
||||
calculate_highest_median(vote_title_text) // nothing uses this at the moment
|
||||
var/list/winners = vote_system == INSTANT_RUNOFF_VOTING ? get_runoff_results() : get_result()
|
||||
var/was_roundtype_vote = mode == "roundtype" || mode == "dynamic"
|
||||
if(winners.len > 0)
|
||||
@@ -255,8 +246,8 @@ SUBSYSTEM_DEF(vote)
|
||||
if(display_votes & SHOW_RESULTS)
|
||||
if(vote_system == SCHULZE_VOTING)
|
||||
text += "\nIt should be noted that this is not a raw tally of votes (impossible in ranked choice) but the score determined by the schulze method of voting, so the numbers will look weird!"
|
||||
if(vote_system == MAJORITY_JUDGEMENT_VOTING)
|
||||
text += "\nIt should be noted that this is not a raw tally of votes but the number of runoffs done by majority judgement!"
|
||||
if(vote_system == HIGHEST_MEDIAN_VOTING)
|
||||
text += "\nThis is the highest median score plus the tiebreaker!"
|
||||
for(var/i=1,i<=choices.len,i++)
|
||||
var/votes = choices[choices[i]]
|
||||
if(!votes)
|
||||
@@ -302,7 +293,7 @@ SUBSYSTEM_DEF(vote)
|
||||
if(vote_system != SCORE_VOTING)
|
||||
if(vote_system == SCHULZE_VOTING)
|
||||
admintext += "\nIt should be noted that this is not a raw tally of votes (impossible in ranked choice) but the score determined by the schulze method of voting, so the numbers will look weird!"
|
||||
else if(vote_system == MAJORITY_JUDGEMENT_VOTING)
|
||||
else if(vote_system == HIGHEST_MEDIAN_VOTING)
|
||||
admintext += "\nIt should be noted that this is not a raw tally of votes but the number of runoffs done by majority judgement!"
|
||||
for(var/i=1,i<=choices.len,i++)
|
||||
var/votes = choices[choices[i]]
|
||||
@@ -429,7 +420,7 @@ SUBSYSTEM_DEF(vote)
|
||||
voted[usr.ckey] = list()
|
||||
voted[usr.ckey] += vote
|
||||
saved -= usr.ckey
|
||||
if(SCORE_VOTING,MAJORITY_JUDGEMENT_VOTING)
|
||||
if(SCORE_VOTING,HIGHEST_MEDIAN_VOTING)
|
||||
if(!(usr.ckey in voted))
|
||||
voted += usr.ckey
|
||||
voted[usr.ckey] = list()
|
||||
@@ -584,7 +575,7 @@ SUBSYSTEM_DEF(vote)
|
||||
. += "<h3>Vote any number of choices.</h3>"
|
||||
if(SCHULZE_VOTING,INSTANT_RUNOFF_VOTING)
|
||||
. += "<h3>Vote by order of preference. Revoting will demote to the bottom. 1 is your favorite, and higher numbers are worse.</h3>"
|
||||
if(SCORE_VOTING,MAJORITY_JUDGEMENT_VOTING)
|
||||
if(SCORE_VOTING,HIGHEST_MEDIAN_VOTING)
|
||||
. += "<h3>Grade the candidates by how much you like them.</h3>"
|
||||
. += "<h3>No-votes have no power--your opinion is only heard if you vote!</h3>"
|
||||
. += "Time Left: [DisplayTimeText(end_time-world.time)]<hr><ul>"
|
||||
@@ -621,7 +612,7 @@ SUBSYSTEM_DEF(vote)
|
||||
. += "(Saved!)"
|
||||
. += "(<a href='?src=[REF(src)];vote=load'>Load vote from save</a>)"
|
||||
. += "(<a href='?src=[REF(src)];vote=reset'>Reset votes</a>)"
|
||||
if(SCORE_VOTING,MAJORITY_JUDGEMENT_VOTING)
|
||||
if(SCORE_VOTING,HIGHEST_MEDIAN_VOTING)
|
||||
var/list/myvote = voted[C.ckey]
|
||||
for(var/i=1,i<=choices.len,i++)
|
||||
. += "<li><b>[choices[i]]</b>"
|
||||
@@ -724,7 +715,7 @@ SUBSYSTEM_DEF(vote)
|
||||
voted[usr.ckey] = SSpersistence.saved_votes[usr.ckey][mode]
|
||||
if(islist(voted[usr.ckey]))
|
||||
var/malformed = FALSE
|
||||
if(vote_system == SCORE_VOTING || vote_system == MAJORITY_JUDGEMENT_VOTING)
|
||||
if(vote_system == SCORE_VOTING || vote_system == HIGHEST_MEDIAN_VOTING)
|
||||
for(var/thing in voted[usr.ckey])
|
||||
if(!(thing in choices))
|
||||
malformed = TRUE
|
||||
@@ -738,7 +729,7 @@ SUBSYSTEM_DEF(vote)
|
||||
to_chat(usr,"Your saved vote was malformed! Start over!")
|
||||
voted -= usr.ckey
|
||||
else
|
||||
if(vote_system == SCORE_VOTING || vote_system == MAJORITY_JUDGEMENT_VOTING)
|
||||
if(vote_system == SCORE_VOTING || vote_system == HIGHEST_MEDIAN_VOTING)
|
||||
submit_vote(round(text2num(href_list["vote"])),round(text2num(href_list["score"])))
|
||||
else
|
||||
submit_vote(round(text2num(href_list["vote"])))
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
/obj/item/weaponcrafting
|
||||
icon = 'icons/obj/improvised.dmi'
|
||||
|
||||
/obj/item/weaponcrafting/receiver
|
||||
name = "modular receiver"
|
||||
desc = "A prototype modular receiver and trigger assembly for a firearm."
|
||||
icon = 'icons/obj/improvised.dmi'
|
||||
icon_state = "receiver"
|
||||
|
||||
/obj/item/weaponcrafting/stock
|
||||
name = "rifle stock"
|
||||
desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood."
|
||||
@@ -12,41 +18,3 @@
|
||||
name = "wound thread"
|
||||
desc = "A long piece of thread with some resemblance to cable coil."
|
||||
icon_state = "durastring"
|
||||
|
||||
////////////////////////////////
|
||||
// IMPROVISED WEAPON PARTS//
|
||||
////////////////////////////////
|
||||
|
||||
/obj/item/weaponcrafting/improvised_parts
|
||||
name = "Debug Improvised Gun Part"
|
||||
desc = "A badly coded gun part. You should report coders if you see this."
|
||||
icon = 'icons/obj/guns/gun_parts.dmi'
|
||||
icon_state = "palette"
|
||||
|
||||
// RECEIVERS
|
||||
|
||||
/obj/item/weaponcrafting/improvised_parts/rifle_receiver
|
||||
name = "rifle receiver"
|
||||
desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle." // removed some text implying that the item had more uses than it does
|
||||
icon_state = "receiver_rifle"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
|
||||
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver
|
||||
name = "shotgun reciever"
|
||||
desc = "An improvised receiver to create a break-action breechloaded shotgun." // removed some text implying that the item had more uses than it does
|
||||
icon_state = "receiver_shotgun"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
// MISC
|
||||
|
||||
/obj/item/weaponcrafting/improvised_parts/trigger_assembly
|
||||
name = "firearm trigger assembly"
|
||||
desc = "A modular trigger assembly with a firing pin, this can be used to make a whole bunch of improvised firearss."
|
||||
icon_state = "trigger_assembly"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/weaponcrafting/improvised_parts/wooden_body
|
||||
name = "wooden firearm body"
|
||||
desc = "A crudely fashioned wooden body to help keep higher calibre improvised weapons from blowing themselves apart."
|
||||
icon_state = "wooden_body"
|
||||
|
||||
@@ -172,11 +172,11 @@
|
||||
///////////////////
|
||||
|
||||
/datum/crafting_recipe/upgraded_gauze
|
||||
name = "Improved Gauze"
|
||||
name = "Sterilized Gauze"
|
||||
result = /obj/item/stack/medical/gauze/adv/one
|
||||
time = 1
|
||||
reqs = list(/obj/item/stack/medical/gauze = 1,
|
||||
/datum/reagent/space_cleaner/sterilizine = 10)
|
||||
/datum/reagent/space_cleaner/sterilizine = 5)
|
||||
category = CAT_MISC
|
||||
subcategory = CAT_TOOL
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
name = "Suture Pack"
|
||||
result = /obj/item/stack/medical/suture/five
|
||||
time = 1
|
||||
reqs = list(/obj/item/stack/medical/gauze = 1,
|
||||
reqs = list(/obj/item/stack/medical/gauze/adv = 1,
|
||||
/datum/reagent/medicine/styptic_powder = 10)
|
||||
category = CAT_MISC
|
||||
subcategory = CAT_TOOL
|
||||
@@ -193,7 +193,7 @@
|
||||
name = "Regenerative Mesh"
|
||||
result = /obj/item/stack/medical/mesh/five
|
||||
time = 1
|
||||
reqs = list(/obj/item/stack/medical/gauze = 1,
|
||||
reqs = list(/obj/item/stack/medical/gauze/adv = 1,
|
||||
/datum/reagent/medicine/silver_sulfadiazine = 10)
|
||||
category = CAT_MISC
|
||||
subcategory = CAT_TOOL
|
||||
|
||||
@@ -297,30 +297,15 @@
|
||||
/datum/crafting_recipe/ishotgun
|
||||
name = "Improvised Shotgun"
|
||||
result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised
|
||||
reqs = list(/obj/item/pipe = 2, // putting a large amount of meaningless timegates by forcing people to turn base resources into upgraded resources kinda sucks
|
||||
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1,
|
||||
/obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1,
|
||||
/obj/item/weaponcrafting/improvised_parts/wooden_body = 1,
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/irifle // larger and less versatile gun, but a bit easier to make
|
||||
name = "Improvised Rifle (7.62mm)"
|
||||
result = /obj/item/gun/ballistic/shotgun/boltaction/improvised
|
||||
reqs = list(/obj/item/pipe = 2, // above
|
||||
/obj/item/weaponcrafting/improvised_parts/rifle_receiver = 1,
|
||||
/obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1,
|
||||
/obj/item/weaponcrafting/improvised_parts/wooden_body = 1,
|
||||
reqs = list(/obj/item/pipe = 1,
|
||||
/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
//the Improvised Rifle will not be missed. Rest in Pieces 2019-2021
|
||||
|
||||
//////////////////
|
||||
///AMMO CRAFTING//
|
||||
@@ -449,38 +434,6 @@
|
||||
// PARTS CRAFTING //
|
||||
////////////////////
|
||||
|
||||
// RECEIVERS
|
||||
|
||||
/datum/crafting_recipe/rifle_receiver
|
||||
name = "Improvised Rifle Receiver"
|
||||
result = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
|
||||
reqs = list(/obj/item/stack/sheet/metal = 15)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 25
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_PARTS
|
||||
|
||||
/datum/crafting_recipe/shotgun_receiver
|
||||
name = "Improvised Shotgun Receiver"
|
||||
result = /obj/item/weaponcrafting/improvised_parts/shotgun_receiver
|
||||
reqs = list(/obj/item/stack/sheet/metal = 10) // shotgun does less damage than the rifle and can't 1shot but is more portable
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 20
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_PARTS
|
||||
|
||||
// MISC
|
||||
|
||||
/datum/crafting_recipe/trigger_assembly
|
||||
name = "Trigger Assembly"
|
||||
result = /obj/item/weaponcrafting/improvised_parts/trigger_assembly
|
||||
reqs = list(/obj/item/stack/sheet/metal = 3,
|
||||
/obj/item/assembly/igniter = 1)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 20
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_PARTS
|
||||
|
||||
// BOKKEN CRAFTING
|
||||
|
||||
/datum/crafting_recipe/bokken_blade
|
||||
|
||||
@@ -573,13 +573,17 @@
|
||||
duration = 1 MINUTES
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = /obj/screen/alert/status_effect/regenerative_core
|
||||
var/heal_amount = 25
|
||||
|
||||
/datum/status_effect/regenerative_core/on_apply()
|
||||
. = ..()
|
||||
ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core")
|
||||
owner.adjustBruteLoss(-25)
|
||||
|
||||
if(HAS_TRAIT(owner, TRAIT_ROBOTIC_ORGANISM)) //Robots can heal from cores, but only get 1/5th of the healing. They can use this to get past the damage threshhold however, and then regularely heal from there.
|
||||
heal_amount *= 0.2
|
||||
owner.adjustBruteLoss(-heal_amount, only_organic = FALSE)
|
||||
if(!AmBloodsucker(owner)) //use your coffin you lazy bastard
|
||||
owner.adjustFireLoss(-25)
|
||||
owner.adjustFireLoss(-heal_amount, only_organic = FALSE)
|
||||
owner.remove_CC()
|
||||
owner.bodytemperature = BODYTEMP_NORMAL
|
||||
return TRUE
|
||||
@@ -647,3 +651,120 @@
|
||||
if(D.severity == DISEASE_SEVERITY_POSITIVE)
|
||||
continue
|
||||
D.cure()
|
||||
|
||||
/datum/status_effect/mantra // available to wizards and admins alone, currently
|
||||
id = "Mantra"
|
||||
examine_text = "<span class='notice'>Their aura is filled with yellow energy!</span>"
|
||||
alert_type = null
|
||||
var/damageboost = 10
|
||||
var/woundboost = 5
|
||||
var/prev_hair_color
|
||||
var/powerup
|
||||
var/powerdown
|
||||
|
||||
/datum/status_effect/mantra/on_apply()
|
||||
. = ..()
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
playsound(H, 'sound/magic/powerup.ogg', 50, 1)
|
||||
H.add_filter("mantra_glow", 2, list("type" = "outline", "color" = "#edfa347a", "size" = 2))
|
||||
prev_hair_color = H.hair_color
|
||||
H.hair_color = "ffe11e"
|
||||
H.update_hair()
|
||||
ADD_TRAIT(H, TRAIT_PUGILIST, "Mantra")
|
||||
ADD_TRAIT(H, TRAIT_NOSOFTCRIT, "Mantra")
|
||||
ADD_TRAIT(H, TRAIT_STUNIMMUNE, "Mantra")
|
||||
ADD_TRAIT(H, TRAIT_PUSHIMMUNE, "Mantra")
|
||||
ADD_TRAIT(H, TRAIT_NOGUNS, "Mantra")
|
||||
H.dna.species.punchdamagehigh += damageboost
|
||||
H.dna.species.punchdamagelow += damageboost
|
||||
H.dna.species.punchwoundbonus += woundboost
|
||||
H.physiology.brute_mod *= 0.9 // slightly resilient against lethal damage, but...
|
||||
H.physiology.burn_mod *= 0.9
|
||||
H.physiology.stamina_mod *= 0.5 // very resistant to non-lethal damage, because they're already draining stamina every second
|
||||
to_chat(H, "<span class='notice'>Your inner mantra coalesces around you, granting you incredible strength and durability - but at what cost?</span>")
|
||||
|
||||
/datum/status_effect/mantra/tick()
|
||||
. = ..()
|
||||
if(owner.health < HEALTH_THRESHOLD_FULLCRIT)
|
||||
owner.remove_status_effect(STATUS_EFFECT_MANTRA)
|
||||
return
|
||||
if(owner.combat_flags & COMBAT_FLAG_HARD_STAMCRIT)
|
||||
owner.remove_status_effect(STATUS_EFFECT_MANTRA)
|
||||
return
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/human/C = owner
|
||||
C.adjustBruteLoss(-1) // slightly resilient against lethal damage
|
||||
C.adjustFireLoss(-1)
|
||||
C.adjustStaminaLoss(3) // in testing i personally found that 2/sec was too minimal and 4/sec was too much
|
||||
/*if(SEND_SIGNAL(owner, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) // turning on combat mode flares up your aura
|
||||
|
||||
else*/
|
||||
|
||||
/datum/status_effect/mantra/on_remove()
|
||||
. = ..()
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/human/M = owner
|
||||
playsound(M, 'sound/magic/powerdown.ogg', 50, 1)
|
||||
M.remove_filter("mantra_glow")
|
||||
M.hair_color = prev_hair_color
|
||||
M.update_hair()
|
||||
REMOVE_TRAIT(M, TRAIT_PUGILIST, "Mantra")
|
||||
REMOVE_TRAIT(M, TRAIT_NOSOFTCRIT, "Mantra")
|
||||
REMOVE_TRAIT(M, TRAIT_STUNIMMUNE, "Mantra")
|
||||
REMOVE_TRAIT(M, TRAIT_PUSHIMMUNE, "Mantra")
|
||||
REMOVE_TRAIT(M, TRAIT_NOGUNS, "Mantra")
|
||||
M.dna.species.punchdamagehigh -= damageboost
|
||||
M.dna.species.punchdamagelow -= damageboost
|
||||
M.dna.species.punchwoundbonus -= woundboost
|
||||
M.physiology.brute_mod /= 0.9
|
||||
M.physiology.burn_mod /= 0.9
|
||||
M.physiology.stamina_mod /= 0.5
|
||||
to_chat(M, "<span class='notice'>Your inner mantra collapses, for now.</span>")
|
||||
|
||||
/datum/status_effect/asura // mfw miner gear
|
||||
id = "Asura"
|
||||
examine_text = "<span class='notice'>Their aura is filled with red-hot rage!</span>"
|
||||
alert_type = null
|
||||
var/damageboost = 10
|
||||
var/woundboost = 5
|
||||
|
||||
/datum/status_effect/asura/on_apply()
|
||||
. = ..()
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
playsound(H, 'sound/magic/powerup.ogg', 50, 1)
|
||||
H.add_filter("asura_glow", 2, list("type" = "outline", "color" = "#fc21217a", "size" = 2))
|
||||
ADD_TRAIT(H, TRAIT_PUGILIST, "Asura")
|
||||
H.dna.species.punchdamagehigh += damageboost
|
||||
H.dna.species.punchdamagelow += damageboost
|
||||
H.dna.species.punchwoundbonus += woundboost
|
||||
to_chat(H, "<span class='notice'>Your anger unleashes in a crimson blaze around you and corrosive power fills your muscles.</span>")
|
||||
|
||||
/datum/status_effect/asura/tick()
|
||||
. = ..()
|
||||
if(owner.health < HEALTH_THRESHOLD_CRIT)
|
||||
owner.remove_status_effect(STATUS_EFFECT_ASURA)
|
||||
return
|
||||
if(owner.combat_flags & COMBAT_FLAG_HARD_STAMCRIT)
|
||||
owner.remove_status_effect(STATUS_EFFECT_ASURA)
|
||||
return
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/human/C = owner
|
||||
C.adjustBruteLoss(1) // drains 1 hp per second. You're gonna need some Senzu Cores.
|
||||
C.adjustStaminaLoss(-2) // angry man punch a lot
|
||||
/*if(SEND_SIGNAL(owner, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) // turning on combat mode flares up your aura
|
||||
|
||||
else*/
|
||||
|
||||
/datum/status_effect/asura/on_remove()
|
||||
. = ..()
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/human/M = owner
|
||||
playsound(M, 'sound/magic/powerdown.ogg', 50, 1)
|
||||
M.remove_filter("asura_glow")
|
||||
REMOVE_TRAIT(M, TRAIT_PUGILIST, "Asura")
|
||||
M.dna.species.punchdamagehigh -= damageboost
|
||||
M.dna.species.punchdamagelow -= damageboost
|
||||
M.dna.species.punchwoundbonus -= woundboost
|
||||
to_chat(M, "<span class='notice'>You calm yourself, and your unnatural strength dissipates.</span>")
|
||||
|
||||
@@ -74,13 +74,19 @@
|
||||
|
||||
/datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed; do note that at the point this is called, it is out of the owner's status_effects but owner is not yet null
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
REMOVE_TRAIT(owner, TRAIT_COMBAT_MODE_LOCKED, src)
|
||||
REMOVE_TRAIT(owner, TRAIT_SPRINT_LOCKED, src)
|
||||
if(blocks_combatmode)
|
||||
REMOVE_TRAIT(owner, TRAIT_COMBAT_MODE_LOCKED, src)
|
||||
if(blocks_sprint)
|
||||
REMOVE_TRAIT(owner, TRAIT_SPRINT_LOCKED, src)
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself or when a status effect with on_remove_on_mob_delete = FALSE has its mob deleted
|
||||
owner.clear_alert(id)
|
||||
LAZYREMOVE(owner.status_effects, src)
|
||||
if(blocks_combatmode)
|
||||
REMOVE_TRAIT(owner, TRAIT_COMBAT_MODE_LOCKED, src)
|
||||
if(blocks_sprint)
|
||||
REMOVE_TRAIT(owner, TRAIT_SPRINT_LOCKED, src)
|
||||
owner = null
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
if(.)
|
||||
return
|
||||
if(can_buckle && has_buckled_mobs())
|
||||
if(ishuman(src)) //prevent people from unbuckling fireman-carried/piggybacked people unless on disarm or harm intents
|
||||
if(act_intent == INTENT_HELP || act_intent == INTENT_GRAB)
|
||||
return
|
||||
if(buckled_mobs.len > 1)
|
||||
var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in buckled_mobs
|
||||
if(user_unbuckle_mob(unbuckled,user))
|
||||
|
||||
@@ -664,9 +664,8 @@
|
||||
lootcount = 1
|
||||
spawn_on_turf = FALSE
|
||||
loot = list("" = 50,
|
||||
/obj/item/weaponcrafting/improvised_parts/rifle_receiver = 13,
|
||||
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 13,
|
||||
/obj/item/weaponcrafting/improvised_parts/trigger_assembly = 12,
|
||||
/obj/item/weaponcrafting/receiver = 25,
|
||||
/obj/item/weaponcrafting/stock = 25,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/weapon_parts
|
||||
@@ -674,8 +673,8 @@
|
||||
lootcount = 1
|
||||
spawn_on_turf = FALSE
|
||||
loot = list("" = 80,
|
||||
/obj/item/weaponcrafting/improvised_parts/rifle_receiver = 5,
|
||||
/obj/item/weaponcrafting/improvised_parts/trigger_assembly = 5,
|
||||
/obj/item/weaponcrafting/receiver = 5,
|
||||
/obj/item/weaponcrafting/stock = 5,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/ammo
|
||||
|
||||
@@ -263,6 +263,7 @@
|
||||
/obj/machinery/vending/cola = "Robust Softdrinks",
|
||||
/obj/machinery/vending/cigarette = "ShadyCigs Deluxe",
|
||||
/obj/machinery/vending/games = "\improper Good Clean Fun",
|
||||
/obj/machinery/vending/kink = "KinkMate",
|
||||
/obj/machinery/vending/autodrobe = "AutoDrobe",
|
||||
/obj/machinery/vending/assist = "\improper Vendomat",
|
||||
/obj/machinery/vending/engivend = "\improper Engi-Vend",
|
||||
|
||||
@@ -803,6 +803,7 @@
|
||||
force = 4
|
||||
throwforce = 0
|
||||
attack_verb = list("whipped", "repented", "lashed", "flagellated")
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
var/praying = FALSE
|
||||
var/deity_name = "Coderbus" //This is the default, hopefully won't actually appear if the religion subsystem is running properly
|
||||
|
||||
|
||||
@@ -173,11 +173,11 @@
|
||||
"<span class='italics'>You hear cutting.</span>")
|
||||
use(2)
|
||||
else if(I.is_drainable() && I.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine))
|
||||
if(!I.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine, 10))
|
||||
if(!I.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine, 5))
|
||||
to_chat(user, "<span class='warning'>There's not enough sterilizine in [I] to sterilize [src]!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] pours the contents of [I] onto [src], sterilizing it.</span>", "<span class='notice'>You pour the contents of [I] onto [src], sterilizing it.</span>")
|
||||
I.reagents.remove_reagent(/datum/reagent/space_cleaner/sterilizine, 10)
|
||||
user.visible_message("<span class='notice'>[user] sterilizes [src] with the contents of [I].</span>", "<span class='notice'>You pour the contents of [I] onto [src], sterilizing it.</span>")
|
||||
I.reagents.remove_reagent(/datum/reagent/space_cleaner/sterilizine, 5)
|
||||
new /obj/item/stack/medical/gauze/adv/one(user.drop_location())
|
||||
use(1)
|
||||
else
|
||||
@@ -187,6 +187,9 @@
|
||||
user.visible_message("<span class='suicide'>[user] begins tightening \the [src] around [user.p_their()] neck! It looks like [user.p_they()] forgot how to use medical supplies!</span>")
|
||||
return OXYLOSS
|
||||
|
||||
/obj/item/stack/medical/gauze/one
|
||||
amount = 1
|
||||
|
||||
/obj/item/stack/medical/gauze/improvised
|
||||
name = "improvised gauze"
|
||||
singular_name = "improvised gauze"
|
||||
@@ -204,8 +207,9 @@
|
||||
heal_brute = 6
|
||||
self_delay = 45
|
||||
other_delay = 15
|
||||
absorption_rate = 0.4
|
||||
absorption_capacity = 6
|
||||
absorption_rate = 0.5
|
||||
absorption_capacity = 12
|
||||
splint_factor = 0.15
|
||||
|
||||
/obj/item/stack/medical/gauze/adv/one
|
||||
amount = 1
|
||||
@@ -472,3 +476,51 @@
|
||||
return TRUE
|
||||
|
||||
to_chat(user, "<span class='warning'>You can't heal [M] with the \the [src]!</span>")
|
||||
|
||||
/obj/item/stack/medical/nanogel
|
||||
name = "nanogel"
|
||||
singular_name = "nanogel"
|
||||
desc = "A highly advanced gel that when applied on a sufficiently repaired robotic limb will neutralize internal damage if present, allowing further repairs without the need for surgery."
|
||||
self_delay = 150 //Agonizingly slow if used on self, but, not completely forbidden because antags with robolimbs need a way to handle their thresholds.
|
||||
other_delay = 30 //Pretty fast if used on others.
|
||||
amount = 12
|
||||
max_amount = 12 //Two synths worth of fixing, if every single bodypart of them has internal damage. Usually, probably more like 6-12.
|
||||
icon_state = "nanogel"
|
||||
var/being_applied = FALSE //No doafter stacking.
|
||||
|
||||
/obj/item/stack/medical/nanogel/try_heal(mob/living/M, mob/user, silent = FALSE)
|
||||
if(being_applied)
|
||||
to_chat(user, "<span class='warning'>You are already applying [src]!</span>")
|
||||
return
|
||||
if(!iscarbon(M))
|
||||
to_chat(user, "<span class='warning'>This won't work on [M]!</span>")
|
||||
return
|
||||
being_applied = TRUE
|
||||
..()
|
||||
being_applied = FALSE
|
||||
|
||||
/obj/item/stack/medical/nanogel/heal(mob/living/M, mob/user)
|
||||
var/mob/living/carbon/C = M //Only carbons should be able to get here
|
||||
if(!C)
|
||||
return
|
||||
var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected))
|
||||
if(!affecting) //Missing limb?
|
||||
to_chat(user, "<span class='warning'>[C] doesn't have \a [parse_zone(user.zone_selected)]!</span>")
|
||||
return
|
||||
if(!affecting.is_robotic_limb())
|
||||
to_chat(user, "<span class='warning'>This won't work on nonrobotic limbs!</span>")
|
||||
return
|
||||
if(!affecting.threshhold_brute_passed && !affecting.threshhold_burn_passed)
|
||||
to_chat(user, "<span class='warning'>There is no need to use this on [affecting]</span>")
|
||||
return
|
||||
if(affecting.threshhold_brute_passed && affecting.brute_dam == affecting.threshhold_passed_mindamage)
|
||||
. = TRUE
|
||||
affecting.threshhold_brute_passed = FALSE
|
||||
if(affecting.threshhold_burn_passed && affecting.burn_dam == affecting.threshhold_passed_mindamage)
|
||||
. = TRUE
|
||||
affecting.threshhold_burn_passed = FALSE
|
||||
if(.)
|
||||
user.visible_message("<span class='green'>The nanogel gets to work on [C], repairing [affecting]'s internal damage.</span>", "<span_class='green'>You watch as the nanogel gets to work on fixing the internal damage in [affecting]</span>")
|
||||
return
|
||||
//If it gets here: It failed, lets tell the user why.
|
||||
to_chat(user, "<span class='warning'>[src] fails to work on [affecting] due to residual [(affecting.threshhold_burn_passed && affecting.threshhold_burn_passed) ? "brute and burn" : "[affecting.threshhold_burn_passed ? "burn" : "brute"]"] damage! Perform some external repairs before using this.</span>")
|
||||
|
||||
@@ -246,7 +246,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE),\
|
||||
)),
|
||||
null, \
|
||||
new/datum/stack_recipe("wooden firearm body", /obj/item/weaponcrafting/improvised_parts/wooden_body, 10, time = 20), \
|
||||
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 20), \
|
||||
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
|
||||
new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 30), \
|
||||
@@ -391,7 +390,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4), \
|
||||
null, \
|
||||
new/datum/stack_recipe("string", /obj/item/weaponcrafting/string, 1, time = 10), \
|
||||
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \
|
||||
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 10), \
|
||||
new/datum/stack_recipe("rag", /obj/item/reagent_containers/rag, 1), \
|
||||
new/datum/stack_recipe("towel", /obj/item/reagent_containers/rag/towel, 3), \
|
||||
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
return FALSE
|
||||
stunpwr *= round(stuncharge/hitcost, 0.1)
|
||||
|
||||
if(!user.UseStaminaBuffer(getweight(user, STAM_COST_BATON_MOB_MULT), warn = TRUE))
|
||||
if(user && !user.UseStaminaBuffer(getweight(user, STAM_COST_BATON_MOB_MULT), warn = TRUE))
|
||||
return FALSE
|
||||
|
||||
if(!disarming)
|
||||
@@ -314,12 +314,12 @@
|
||||
/obj/item/melee/baton/boomerang
|
||||
name = "\improper OZtek Boomerang"
|
||||
desc = "A device invented in 2486 for the great Space Emu War by the confederacy of Australicus, these high-tech boomerangs also work exceptionally well at stunning crewmembers. Just be careful to catch it when thrown!"
|
||||
throw_speed = 1
|
||||
throw_speed = 1.5
|
||||
icon_state = "boomerang"
|
||||
item_state = "boomerang"
|
||||
force = 5
|
||||
throwforce = 5
|
||||
throw_range = 5
|
||||
throw_range = 10
|
||||
hitcost = 2000
|
||||
throw_hit_chance = 99 //Have you prayed today?
|
||||
custom_materials = list(/datum/material/iron = 10000, /datum/material/glass = 4000, /datum/material/silver = 10000, /datum/material/gold = 2000)
|
||||
@@ -328,7 +328,7 @@
|
||||
if(turned_on)
|
||||
if(ishuman(thrower))
|
||||
var/mob/living/carbon/human/H = thrower
|
||||
H.throw_mode_off() //so they can catch it on the return.
|
||||
H.throw_mode_on() //so they can catch it on the return.
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/baton/boomerang/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/analyzer(src)
|
||||
new /obj/item/holosign_creator/atmos(src)
|
||||
new /obj/item/holosign_creator/firelock(src)
|
||||
new /obj/item/holosign_creator/firelock(src) //what if atmos techs could test things they are meant to test, wild, innit?
|
||||
new /obj/item/watertank/atmos(src)
|
||||
new /obj/item/clothing/suit/fire/atmos(src)
|
||||
new /obj/item/clothing/head/hardhat/atmos(src)
|
||||
|
||||
+2
-1
@@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
|
||||
var/endspanpart = "</span>"
|
||||
|
||||
//Message
|
||||
var/messagepart = " <span class='message'>[say_emphasis(lang_treat(speaker, message_language, raw_message, spans, message_mode))]</span></span>"
|
||||
var/messagepart = " <span class='message'>[lang_treat(speaker, message_language, raw_message, spans, message_mode)]</span></span>"
|
||||
|
||||
var/languageicon = ""
|
||||
var/datum/language/D = GLOB.language_datum_instances[message_language]
|
||||
@@ -116,6 +116,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
|
||||
/atom/movable/proc/lang_treat(atom/movable/speaker, datum/language/language, raw_message, list/spans, message_mode, no_quote = FALSE)
|
||||
if(has_language(language))
|
||||
var/atom/movable/AM = speaker.GetSource()
|
||||
raw_message = say_emphasis(raw_message)
|
||||
if(AM) //Basically means "if the speaker is virtual"
|
||||
return no_quote ? AM.quoteless_say_quote(raw_message, spans, message_mode) : AM.say_quote(raw_message, spans, message_mode)
|
||||
else
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
if(M.client && (is_servant_of_ratvar(M) || isobserver(M) || M.stat == DEAD))
|
||||
viewing += M.client
|
||||
flick_overlay(I, viewing, 8)
|
||||
L.adjustToxLoss(-3, TRUE, TRUE)
|
||||
L.adjustToxLoss(-3, TRUE, TRUE, toxins_type = TOX_OMNI)
|
||||
|
||||
/turf/open/floor/clockwork/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
|
||||
return
|
||||
@@ -278,4 +278,4 @@
|
||||
heavyfootstep = FOOTSTEP_RUST
|
||||
|
||||
/turf/open/floor/plating/rust/rust_heretic_act()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_ROBELESS]'>Robeless</A><BR>"
|
||||
dat += "<I>Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.</I><BR>"
|
||||
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_MARTIAL]'>Martial Artist</a><BR>"
|
||||
dat += "<I>Your apprentice is training in ancient martial arts. They know the Plasmafist and Nuclear Fist.</I><BR>"
|
||||
dat += "<I>Your apprentice is training in ancient martial arts. They know an Inner Mantra and the Nuclear Fist technique.</I><BR>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
@@ -69,6 +69,7 @@ GLOBAL_LIST_INIT(abductor_gear, subtypesof(/datum/abductor_gear))
|
||||
build_path = /obj/item/abductor_machine_beacon/chem_dispenser
|
||||
category = "Advanced Gear"
|
||||
|
||||
/*
|
||||
/datum/abductor_gear/shrink_ray
|
||||
name = "Shrink Ray Blaster"
|
||||
description = "This is a piece of frightening alien tech that enhances the magnetic pull of atoms in a localized space to temporarily make an object shrink. \
|
||||
@@ -77,3 +78,4 @@ GLOBAL_LIST_INIT(abductor_gear, subtypesof(/datum/abductor_gear))
|
||||
cost = 2
|
||||
build_path = /obj/item/gun/energy/shrink_ray
|
||||
category = "Advanced Gear"
|
||||
*/
|
||||
|
||||
@@ -348,9 +348,9 @@
|
||||
L.dust()
|
||||
else if(L.health > min_drain_health)
|
||||
if(!GLOB.ratvar_awakens && L.stat == CONSCIOUS)
|
||||
vitality_drained = L.adjustToxLoss(1, forced = TRUE)
|
||||
vitality_drained = L.adjustToxLoss(1, forced = TRUE, toxins_type = TOX_OMNI)
|
||||
else
|
||||
vitality_drained = L.adjustToxLoss(1.5, forced = TRUE)
|
||||
vitality_drained = L.adjustToxLoss(1.5, forced = TRUE, toxins_type = TOX_OMNI)
|
||||
if(vitality_drained)
|
||||
GLOB.clockwork_vitality += vitality_drained
|
||||
else
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
if(totaldamage)
|
||||
L.heal_overall_damage(brutedamage, burndamage, only_organic = FALSE) //Maybe a machine god shouldn't murder augmented followers instead of healing them
|
||||
L.adjustOxyLoss(-oxydamage)
|
||||
L.adjustToxLoss(totaldamage * 0.5, TRUE, TRUE)
|
||||
L.adjustToxLoss(totaldamage * 0.5, TRUE, TRUE, toxins_type = TOX_OMNI)
|
||||
clockwork_say(ranged_ability_user, text2ratvar("[has_holy_water ? "Heal tainted" : "Mend wounded"] flesh!"))
|
||||
log_combat(ranged_ability_user, L, "healed with Sentinel's Compromise")
|
||||
L.visible_message("<span class='warning'>A blue light washes over [L], [has_holy_water ? "causing [L.p_them()] to briefly glow as it mends" : " mending"] [L.p_their()] bruises and burns!</span>", \
|
||||
|
||||
@@ -717,9 +717,9 @@
|
||||
uses = 0
|
||||
ratio *= -1
|
||||
H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0)
|
||||
H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0)
|
||||
H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0)
|
||||
H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0)
|
||||
H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0, toxins_type = TOX_OMNI)
|
||||
H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0, only_organic = FALSE)
|
||||
H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0, only_organic = FALSE)
|
||||
H.updatehealth()
|
||||
playsound(get_turf(H), 'sound/magic/staff_healing.ogg', 25)
|
||||
new /obj/effect/temp_visual/cult/sparks(get_turf(H))
|
||||
|
||||
@@ -214,8 +214,8 @@
|
||||
if(L.health != L.maxHealth)
|
||||
new /obj/effect/temp_visual/heal(get_turf(src), "#960000")
|
||||
if(ishuman(L))
|
||||
L.adjustBruteLoss(-1, 0)
|
||||
L.adjustFireLoss(-1, 0)
|
||||
L.adjustBruteLoss(-1, 0, only_organic = FALSE)
|
||||
L.adjustFireLoss(-1, 0, only_organic = FALSE)
|
||||
L.updatehealth()
|
||||
if(isshade(L) || isconstruct(L))
|
||||
var/mob/living/simple_animal/M = L
|
||||
|
||||
@@ -189,6 +189,10 @@
|
||||
name = "Mutate"
|
||||
spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate
|
||||
|
||||
/datum/spellbook_entry/mantra
|
||||
name = "Inner Mantra"
|
||||
spell_type = /obj/effect/proc_holder/spell/self/mantra
|
||||
|
||||
/datum/spellbook_entry/jaunt
|
||||
name = "Ethereal Jaunt"
|
||||
spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt
|
||||
|
||||
@@ -181,8 +181,8 @@
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
|
||||
if(APPRENTICE_MARTIAL)
|
||||
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist(null))
|
||||
H.put_in_hands(new /obj/item/book/granter/martial/plasma_fist(H))
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned mystical martial abilities. You are also able to use the Nuclear Fist at will.")
|
||||
owner.AddSpell(new /obj/effect/proc_holder/spell/self/mantra(null))
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned to control your Inner Mantra. You are also able to use the Nuclear Fist at will.")
|
||||
|
||||
/datum/antagonist/wizard/apprentice/create_objectives()
|
||||
var/datum/objective/protect/new_objective = new /datum/objective/protect
|
||||
|
||||
@@ -123,6 +123,7 @@ obj/item/dildo/flared/huge
|
||||
desc = "THIS THING IS HUGE!"
|
||||
dildo_size = 4
|
||||
force = 10
|
||||
hitsound = 'sound/weapons/klonk.ogg'
|
||||
|
||||
obj/item/dildo/custom
|
||||
name = "customizable dildo"
|
||||
|
||||
@@ -510,12 +510,12 @@ Contains:
|
||||
name = "paramedic EVA suit"
|
||||
icon_state = "paramedic-eva"
|
||||
item_state = "paramedic-eva"
|
||||
desc = "A deep blue space suit decorated with red and white crosses to indicate that the wearer is trained emergency medical personnel."
|
||||
desc = "A deep blue space suit decorated with medical insignia to indicate that the wearer is trained emergency medical personnel."
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/roller)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/paramedic
|
||||
name = "paramedic EVA helmet"
|
||||
desc = "A deep blue space helmet with a large red cross on the faceplate to designate the wearer as trained emergency medical personnel."
|
||||
desc = "A deep blue space helmet decorated with medical insignia to designate the wearer as trained emergency medical personnel."
|
||||
icon_state = "paramedic-eva-helmet"
|
||||
item_state = "paramedic-eva-helmet"
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/virologist
|
||||
name = "virologist labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
|
||||
desc = "A suit that protects against minor chemical spills. Has a green stripe on the shoulder."
|
||||
icon_state = "labcoat_vir"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/science
|
||||
@@ -63,6 +63,11 @@
|
||||
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
|
||||
icon_state = "labcoat_tox"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/roboticist
|
||||
name = "roboticist labcoat"
|
||||
desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads."
|
||||
icon_state = "labcoat_robo"
|
||||
|
||||
// Departmental Jackets
|
||||
/obj/item/clothing/suit/toggle/labcoat/depjacket
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
@@ -58,6 +58,11 @@
|
||||
RemoveHood()
|
||||
|
||||
/obj/item/clothing/suit/hooded/proc/ToggleHood()
|
||||
if(!hood)
|
||||
to_chat(loc, "<span class='warning'>[src] seems to be missing its hood..</span>")
|
||||
return
|
||||
hood.atom_colours = atom_colours.Copy()
|
||||
hood.update_atom_colour()
|
||||
if(!suittoggled)
|
||||
if(ishuman(src.loc))
|
||||
var/mob/living/carbon/human/H = src.loc
|
||||
@@ -191,7 +196,10 @@
|
||||
if(!helmettype)
|
||||
return
|
||||
if(!helmet)
|
||||
to_chat(H, "<span class='warning'>[src] seems to be missing its helmet..</span>")
|
||||
return
|
||||
helmet.atom_colours = atom_colours.Copy()
|
||||
helmet.update_atom_colour()
|
||||
if(!suittoggled)
|
||||
if(ishuman(src.loc))
|
||||
if(H.wear_suit != src)
|
||||
|
||||
@@ -596,7 +596,7 @@
|
||||
name = "Buzz Fuzz"
|
||||
desc = "The sister drink of Shambler's Juice! Uses real honey, making it a sweet tooth's dream drink. The slogan reads ''A Hive of Flavour'', there's also a label about how it is adddicting."
|
||||
icon_state = "honeysoda_can"
|
||||
list_reagents = list(/datum/reagent/consumable/buzz_fuzz = 25, /datum/reagent/consumable/honey = 5)
|
||||
list_reagents = list(/datum/reagent/consumable/buzz_fuzz = 30)
|
||||
foodtype = SUGAR | JUNKFOOD
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
/obj/item/weldingtool = 3,
|
||||
/obj/item/wirecutters = 2,
|
||||
/obj/item/wrench = 4,
|
||||
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1,
|
||||
/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/geiger_counter = 3,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 5,
|
||||
/obj/item/assembly/infra = 1,
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
l_pocket = /obj/item/pda/roboticist
|
||||
ears = /obj/item/radio/headset/headset_sci
|
||||
uniform = /obj/item/clothing/under/rank/rnd/roboticist
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/roboticist
|
||||
|
||||
backpack = /obj/item/storage/backpack/science
|
||||
satchel = /obj/item/storage/backpack/satchel/tox
|
||||
|
||||
@@ -1104,7 +1104,7 @@
|
||||
if(1)
|
||||
new /obj/item/mayhem(src)
|
||||
if(2)
|
||||
new /obj/item/gun/ballistic/revolver/doublebarrel/super(src)
|
||||
new /obj/item/book/granter/spell/asura(src)
|
||||
if(3)
|
||||
new /obj/item/guardiancreator(src)
|
||||
|
||||
@@ -1187,6 +1187,13 @@
|
||||
unique_reskin = null
|
||||
sawn_off = TRUE
|
||||
|
||||
/obj/item/book/granter/spell/asura
|
||||
spell = /obj/effect/proc_holder/spell/self/asura
|
||||
spellname = "asuras wrath"
|
||||
icon_state = "bookasura"
|
||||
desc = "This crimson novel emanates rage incarnate."
|
||||
remarks = list("Kaio-What?", "It can only be sustained for a short time...", "It's like a massive upsurge of energy...", "Takes a heavy toll on the user's body...?", "Extra arms not included...", "There's stronger levels? Why aren't they in the book...")
|
||||
|
||||
//Colossus
|
||||
/obj/structure/closet/crate/necropolis/colossus
|
||||
name = "colossus chest"
|
||||
|
||||
@@ -243,6 +243,10 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/brown
|
||||
name = "Brown"
|
||||
icon_state = "brown"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/punished
|
||||
name = "Burnt Off"
|
||||
icon_state = "punished"
|
||||
@@ -271,6 +275,10 @@
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/featherymoth
|
||||
name = "Feathery Moth"
|
||||
icon_state = "featherymoth"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
@@ -291,18 +299,22 @@
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/plasmafire
|
||||
name = "Plasma Fire"
|
||||
icon_state = "plasmafire"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
@@ -311,6 +323,10 @@
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/rosy
|
||||
name = "Rosy"
|
||||
icon_state = "rosy"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
@@ -325,4 +341,4 @@
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
icon_state = "witchwing"
|
||||
@@ -58,9 +58,7 @@
|
||||
dimension_y = 34
|
||||
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
|
||||
/datum/sprite_accessory/deco_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
//nonmoth wings
|
||||
|
||||
/datum/sprite_accessory/deco_wings/bat
|
||||
name = "Bat"
|
||||
@@ -70,18 +68,76 @@
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
/datum/sprite_accessory/deco_wings/bee2
|
||||
name = "Small Bee"
|
||||
icon_state = "beewings"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/dragon
|
||||
name = "Dragon"
|
||||
icon_state = "dragon"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/dragonfly
|
||||
name = "Dragonfly"
|
||||
icon_state = "dragonfly"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/feathery
|
||||
/datum/sprite_accessory/deco_wings/featheredwing
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/featheredwingmedium
|
||||
name = "Medium Feathered"
|
||||
icon_state = "feathered3"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/featheredwinglarge
|
||||
name = "Large Feathered"
|
||||
icon_state = "feathered2"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/harpywings
|
||||
name = "Harpy"
|
||||
icon_state = "harpywings"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/roboticwing
|
||||
name = "Robotic"
|
||||
icon_state = "drago"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/succubusblack
|
||||
name = "Succubus Black"
|
||||
icon_state = "succubusblack"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/succubuspurple
|
||||
name = "Succubus Purple"
|
||||
icon_state = "succubuspurple"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/succubusred
|
||||
name = "Succubus Red"
|
||||
icon_state = "succubusred"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/xenobackplate
|
||||
name = "Xenomorph Backplate"
|
||||
icon_state = "snagbackplate"
|
||||
|
||||
//moth wings
|
||||
|
||||
/datum/sprite_accessory/deco_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/brown
|
||||
name = "Brown"
|
||||
icon_state = "brown"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/featherymoth
|
||||
name = "Feathery Moth Wings"
|
||||
icon_state = "featherymoth"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
@@ -90,6 +146,10 @@
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
@@ -106,10 +166,18 @@
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/plasmafire
|
||||
name = "Plasma Fire"
|
||||
icon_state = "plasmafire"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
@@ -126,6 +194,10 @@
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/rosy
|
||||
name = "Rosy"
|
||||
icon_state = "rosy"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
@@ -138,18 +210,10 @@
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
//INSECT WINGS
|
||||
|
||||
/datum/sprite_accessory/insect_wings
|
||||
@@ -157,6 +221,69 @@
|
||||
color_src = WINGCOLOR
|
||||
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
|
||||
|
||||
//non insect wings
|
||||
/datum/sprite_accessory/deco_wings/bat
|
||||
name = "Bat"
|
||||
icon_state = "bat"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee2
|
||||
name = "Small Bee"
|
||||
icon_state = "beewings"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/dragon
|
||||
name = "Dragon"
|
||||
icon_state = "dragon"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/dragonfly
|
||||
name = "Dragonfly"
|
||||
icon_state = "dragonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/featheredwing
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/featheredwingmedium
|
||||
name = "Medium Feathered"
|
||||
icon_state = "feathered3"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/featheredwinglarge
|
||||
name = "Large Feathered"
|
||||
icon_state = "feathered2"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/harpywings
|
||||
name = "Harpy"
|
||||
icon_state = "harpywings"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/roboticwing
|
||||
name = "Robotic"
|
||||
icon_state = "drago"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/succubusblack
|
||||
name = "Succubus Black"
|
||||
icon_state = "succubusblack"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/succubuspurple
|
||||
name = "Succubus Purple"
|
||||
icon_state = "succubuspurple"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/succubusred
|
||||
name = "Succubus Red"
|
||||
icon_state = "succubusred"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/xenobackplate
|
||||
name = "Xenomorph Backplate"
|
||||
icon_state = "snagbackplate"
|
||||
|
||||
//moth wings
|
||||
|
||||
/datum/sprite_accessory/insect_wings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
@@ -166,25 +293,17 @@
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bat
|
||||
name = "Bat"
|
||||
icon_state = "bat"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
/datum/sprite_accessory/insect_wings/brown
|
||||
name = "Brown"
|
||||
icon_state = "brown"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/feathery
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
/datum/sprite_accessory/insect_wings/featherymoth
|
||||
name = "Feathery Moth Wings"
|
||||
icon_state = "featherymoth"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/firewatch
|
||||
name = "Firewatch"
|
||||
@@ -222,6 +341,10 @@
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/plasmafire
|
||||
name = "Plasma Fire"
|
||||
icon_state = "plasmafire"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
@@ -238,6 +361,10 @@
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/rosy
|
||||
name = "Rosy"
|
||||
icon_state = "rosy"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
@@ -265,45 +392,25 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/insect_markings/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "reddish"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/punished
|
||||
name = "Punished"
|
||||
icon_state = "punished"
|
||||
/datum/sprite_accessory/insect_markings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
/datum/sprite_accessory/insect_markings/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
/datum/sprite_accessory/insect_markings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
/datum/sprite_accessory/insect_markings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/moonfly
|
||||
name = "Moon Fly"
|
||||
@@ -313,10 +420,42 @@
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
/datum/sprite_accessory/insect_markings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/punished
|
||||
name = "Punished"
|
||||
icon_state = "punished"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "reddish"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
|
||||
//DONATOR WINGS
|
||||
|
||||
/datum/sprite_accessory/deco_wings/eyestalks
|
||||
name = "gazer eyestalks"
|
||||
icon_state = "eyestalks"
|
||||
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
|
||||
|
||||
/datum/sprite_accessory/insect_wings/eyestalks
|
||||
name = "gazer eyestalks"
|
||||
icon_state = "eyestalks"
|
||||
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
|
||||
|
||||
@@ -304,10 +304,16 @@
|
||||
emote("wag")
|
||||
|
||||
else if(check_zone(M.zone_selected) == BODY_ZONE_R_ARM || check_zone(M.zone_selected) == BODY_ZONE_L_ARM)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] shakes [src]'s hand.</span>", \
|
||||
"<span class='notice'>You shake [src]'s hand.</span>", target = src,
|
||||
target_message = "<span class='notice'>[M] shakes your hand.</span>")
|
||||
if((pulling == M) && (grab_state == GRAB_PASSIVE))
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] squeezes [src]'s hand.</span>", \
|
||||
"<span class='notice'>You squeeze [src]'s hand.</span>", target = src,
|
||||
target_message = "<span class='notice'>[M] squeezes your hand.</span>")
|
||||
else
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] shakes [src]'s hand.</span>", \
|
||||
"<span class='notice'>You shake [src]'s hand.</span>", target = src,
|
||||
target_message = "<span class='notice'>[M] shakes your hand.</span>")
|
||||
|
||||
else
|
||||
M.visible_message("<span class='notice'>[M] hugs [src] to make [p_them()] feel better!</span>", \
|
||||
|
||||
@@ -62,8 +62,8 @@
|
||||
amount += BP.burn_dam
|
||||
return amount
|
||||
|
||||
|
||||
/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
//In both these procs, only_organic / only_robotic are only used for healing, not for damaging. For now at least.
|
||||
/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL))
|
||||
return FALSE
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
@@ -71,10 +71,10 @@
|
||||
if(amount > 0)
|
||||
take_overall_damage(amount, 0, 0, updating_health)
|
||||
else
|
||||
heal_overall_damage(abs(amount), 0, 0, FALSE, TRUE, updating_health)
|
||||
heal_overall_damage(abs(amount), 0, 0, only_robotic, only_organic, updating_health)
|
||||
return amount
|
||||
|
||||
/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) //Vamps don't heal naturally.
|
||||
return FALSE
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
@@ -82,7 +82,7 @@
|
||||
if(amount > 0)
|
||||
take_overall_damage(0, amount, 0, updating_health)
|
||||
else
|
||||
heal_overall_damage(0, abs(amount), 0, FALSE, TRUE, updating_health)
|
||||
heal_overall_damage(0, abs(amount), 0, only_robotic, only_organic, updating_health)
|
||||
return amount
|
||||
|
||||
|
||||
|
||||
@@ -80,10 +80,11 @@
|
||||
if("shortlimbdisable")
|
||||
var/disabled_type = pick(list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM, TRAIT_PARALYSIS_L_LEG, TRAIT_PARALYSIS_R_LEG))
|
||||
ADD_TRAIT(src, disabled_type, CORRUPTED_SYSTEM)
|
||||
update_disabled_bodyparts()
|
||||
addtimer(CALLBACK(src, .proc/reenable_limb, disabled_type), 5 SECONDS)
|
||||
to_chat(src, "<span class='warning'>Error - Limb control subsystem partially shutdown, rebooting.</span>")
|
||||
if("shortblind")
|
||||
ADD_TRAIT(src, TRAIT_BLIND, CORRUPTED_SYSTEM)
|
||||
become_blind(CORRUPTED_SYSTEM)
|
||||
addtimer(CALLBACK(src, .proc/reenable_vision), 5 SECONDS)
|
||||
to_chat(src, "<span class='warning'>Visual receptor shutdown detected - Initiating reboot.</span>")
|
||||
if("shortstun")
|
||||
@@ -105,10 +106,11 @@
|
||||
if("longlimbdisable")
|
||||
var/disabled_type = pick(list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM, TRAIT_PARALYSIS_L_LEG, TRAIT_PARALYSIS_R_LEG))
|
||||
ADD_TRAIT(src, disabled_type, CORRUPTED_SYSTEM)
|
||||
update_disabled_bodyparts()
|
||||
addtimer(CALLBACK(src, .proc/reenable_limb, disabled_type), 25 SECONDS)
|
||||
to_chat(src, "<span class='warning'>Fatal error in limb control subsystem - rebooting.</span>")
|
||||
if("blindmutedeaf")
|
||||
ADD_TRAIT(src, TRAIT_BLIND, CORRUPTED_SYSTEM)
|
||||
become_blind(CORRUPTED_SYSTEM)
|
||||
addtimer(CALLBACK(src, .proc/reenable_vision), (rand(10, 25)) SECONDS)
|
||||
ADD_TRAIT(src, TRAIT_DEAF, CORRUPTED_SYSTEM)
|
||||
addtimer(CALLBACK(src, .proc/reenable_hearing), (rand(15, 35)) SECONDS)
|
||||
@@ -140,6 +142,7 @@
|
||||
|
||||
/mob/living/carbon/proc/reenable_limb(disabled_limb)
|
||||
REMOVE_TRAIT(src, disabled_limb, CORRUPTED_SYSTEM)
|
||||
update_disabled_bodyparts()
|
||||
to_chat(src, "<span class='notice'>Limb control subsystem successfully rebooted.</span>")
|
||||
|
||||
/mob/living/carbon/proc/reenable_hearing()
|
||||
@@ -147,7 +150,7 @@
|
||||
to_chat(src, "<span class='notice'>Hearing restored.</span>")
|
||||
|
||||
/mob/living/carbon/proc/reenable_vision()
|
||||
REMOVE_TRAIT(src, TRAIT_BLIND, CORRUPTED_SYSTEM)
|
||||
cure_blind(CORRUPTED_SYSTEM)
|
||||
to_chat(src, "<span class='notice'>Visual receptors back online.</span>")
|
||||
|
||||
/mob/living/carbon/proc/reenable_speech()
|
||||
|
||||
@@ -411,15 +411,18 @@
|
||||
if(isrobotic(src))
|
||||
apply_status_effect(/datum/status_effect/no_combat_mode/robotic_emp, severity / 20)
|
||||
severity *= 0.5
|
||||
var/do_not_stun = FALSE
|
||||
if(HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM))
|
||||
severity *= 0.5 //Robotpeople take less limb damage, but instead suffer system corruption (see carbon emp_act)
|
||||
do_not_stun = TRUE
|
||||
for(var/obj/item/bodypart/L in src.bodyparts)
|
||||
if(L.is_robotic_limb())
|
||||
if(!informed)
|
||||
to_chat(src, "<span class='userdanger'>You feel a sharp pain as your robotic limbs overload.</span>")
|
||||
informed = TRUE
|
||||
L.receive_damage(0,severity/10)
|
||||
Stun(severity*2)
|
||||
if(!do_not_stun) //Tiny bit better than checking for the trait another six times in succession
|
||||
Stun(severity*2)
|
||||
|
||||
/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit)
|
||||
var/list/damaged = list()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
override_bp_icon = 'icons/mob/arachnid_parts.dmi'
|
||||
say_mod = "chitters"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(LIPS, NOEYES, NO_UNDERWEAR)
|
||||
species_traits = list(LIPS, NOEYES, NO_UNDERWEAR, HAS_FLESH, HAS_BONE)
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
|
||||
mutant_bodyparts = list("arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain")
|
||||
attack_verb = "slash"
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
name = "Xenobiological Slime Entity"
|
||||
id = SPECIES_SLIME
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,HAS_FLESH)
|
||||
say_mod = "says"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 150
|
||||
@@ -404,7 +404,7 @@
|
||||
id = SPECIES_SLIME_HYBRID
|
||||
limbs_id = SPECIES_SLIME
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,HAS_FLESH)
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None", "legs" = "Plantigrade")
|
||||
say_mod = "says"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
id = SPECIES_LIZARD
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
|
||||
mutanttongue = /obj/item/organ/tongue/lizard
|
||||
mutanttail = /obj/item/organ/tail/lizard
|
||||
@@ -48,7 +48,7 @@
|
||||
name = "Ash Walker"
|
||||
id = SPECIES_ASHWALKER
|
||||
limbs_id = SPECIES_LIZARD
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
inherent_traits = list(TRAIT_CHUNKYFINGERS)
|
||||
mutantlungs = /obj/item/organ/lungs/ashwalker
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
/datum/species/pod/pseudo_weak
|
||||
name = "Anthromorphic Plant"
|
||||
id = SPECIES_POD_WEAK
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS)
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs")
|
||||
limbs_id = SPECIES_POD
|
||||
light_nutrition_gain_factor = 3
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
id = SPECIES_XENOHYBRID
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
|
||||
@@ -141,7 +141,8 @@
|
||||
/mob/living/proc/getBruteLoss()
|
||||
return bruteloss
|
||||
|
||||
/mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
//only_robotic and only_organic arg only relevant for carbons
|
||||
/mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
return FALSE
|
||||
bruteloss = clamp((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
|
||||
@@ -215,7 +216,8 @@
|
||||
/mob/living/proc/getFireLoss()
|
||||
return fireloss
|
||||
|
||||
/mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
//only_robotic and only_organic arg only relevant for carbons
|
||||
/mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
return FALSE
|
||||
fireloss = clamp((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
|
||||
|
||||
@@ -426,6 +426,10 @@
|
||||
//Misc
|
||||
.["Cyborg - Misc (dog - blade)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/widerobot.dmi', "blade"), HOLOFORM_FILTER_PAI, FALSE)
|
||||
|
||||
// Gorillas
|
||||
.["Gorilla (standing)"] = process_holoform_icon_filter(icon('icons/mob/gorilla.dmi', "standing"), HOLOFORM_FILTER_PAI, FALSE)
|
||||
.["Gorilla (crawling)"] = process_holoform_icon_filter(icon('icons/mob/gorilla.dmi', "crawling"), HOLOFORM_FILTER_PAI, FALSE)
|
||||
|
||||
/mob/living/silicon/pai/proc/default_chassis_pixel_offsets_x()
|
||||
. = list()
|
||||
//Engi
|
||||
|
||||
@@ -81,10 +81,10 @@
|
||||
to_chat(src, "<span class='userdanger'>The impact degrades your holochassis!</span>")
|
||||
return amount
|
||||
|
||||
/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
return take_holo_damage(amount)
|
||||
|
||||
/mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
return take_holo_damage(amount)
|
||||
|
||||
/mob/living/silicon/pai/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, toxins_type = TOX_DEFAULT)
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
updatehealth()
|
||||
return amount
|
||||
|
||||
/mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(forced)
|
||||
. = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
else if(damage_coeff[BRUTE])
|
||||
. = adjustHealth(amount * damage_coeff[BRUTE] * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
|
||||
/mob/living/simple_animal/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/simple_animal/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(forced)
|
||||
. = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
else if(damage_coeff[BURN])
|
||||
|
||||
@@ -94,16 +94,17 @@
|
||||
consume_bait()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/proc/consume_bait()
|
||||
var/obj/item/stack/ore/diamond/diamonds = locate(/obj/item/stack/ore/diamond) in oview(src, 9)
|
||||
var/obj/item/pen/survival/bait = locate(/obj/item/pen/survival) in oview(src, 9)
|
||||
if(!diamonds && !bait)
|
||||
return
|
||||
var/list/L = list()
|
||||
for(var/obj/O in view(src, 9))
|
||||
L += O
|
||||
var/obj/item/stack/ore/diamond/diamonds = locate(/obj/item/stack/ore/diamond) in L
|
||||
if(diamonds)
|
||||
var/distanced = 0
|
||||
distanced = get_dist(loc,diamonds.loc)
|
||||
if(distanced <= 1 && diamonds)
|
||||
qdel(diamonds)
|
||||
src.visible_message("<span class='notice'>[src] consumes [diamonds], and it disappears! ...At least, you think.</span>")
|
||||
var/obj/item/pen/survival/bait = locate(/obj/item/pen/survival) in L
|
||||
if(bait)
|
||||
var/distanceb = 0
|
||||
distanceb = get_dist(loc,bait.loc)
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
. += "Power Level: [powerlevel]"
|
||||
|
||||
|
||||
/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced)
|
||||
amount = -abs(amount)
|
||||
return ..() //Heals them
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
computer.visible_message("<span class='notice'>\The [computer] prints out paper.</span>")
|
||||
if(ticket_count >= 1)
|
||||
new /obj/item/stack/arcadeticket((get_turf(computer)), 1)
|
||||
to_chat(usr, "<span class='notice'>[src] dispenses a ticket!</span>")
|
||||
to_chat(usr, "<span class='notice'>[computer] dispenses a ticket!</span>")
|
||||
ticket_count -= 1
|
||||
printer.stored_paper -= 1
|
||||
else
|
||||
|
||||
@@ -373,7 +373,6 @@
|
||||
sawn_off = TRUE
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course.
|
||||
clumsy_check = 0
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
pump()
|
||||
return TRUE
|
||||
|
||||
// DOUBLE BARRELED SHOTGUN and IMPROVISED SHOTGUN are in revolver.dm
|
||||
//due to code weirdness, and the fact that a refactor is coming soon anyway, the barman's shotgun and maint shotgun are in revolver.dm
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/doublebarrel/hook
|
||||
name = "hook modified sawn-off shotgun"
|
||||
|
||||
@@ -173,18 +173,60 @@
|
||||
force = 15
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv)
|
||||
|
||||
//Sci guns
|
||||
|
||||
/obj/item/gun/energy/gravity_gun
|
||||
name = "one-point gravitational manipulator"
|
||||
desc = "An experimental, multi-mode device that fires bolts of Zero-Point Energy, causing local distortions in gravity. Requires an anomaly core to function."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/gravity/repulse, /obj/item/ammo_casing/energy/gravity/attract, /obj/item/ammo_casing/energy/gravity/chaos)
|
||||
item_state = "gravity_gun"
|
||||
icon_state = "gravity_gun"
|
||||
var/power = 4
|
||||
var/firing_core = FALSE
|
||||
|
||||
/obj/item/gun/energy/gravity_gun/attackby(obj/item/C, mob/user)
|
||||
if(istype(C, /obj/item/assembly/signaler/anomaly))
|
||||
to_chat(user, "<span class='notice'>You insert [C] into the gravitational manipulator and the weapon gently hums to life.</span>")
|
||||
firing_core = TRUE
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
|
||||
qdel(C)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/energy/gravity_gun/can_shoot()
|
||||
if(!firing_core)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector
|
||||
name = "bluespace wormhole projector"
|
||||
desc = "A projector that emits high density quantum-coupled bluespace beams."
|
||||
desc = "A projector that emits high density quantum-coupled bluespace beams. Requires an anomaly core to function."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/wormhole, /obj/item/ammo_casing/energy/wormhole/orange)
|
||||
item_state = null
|
||||
icon_state = "wormhole_projector"
|
||||
pin = null
|
||||
inaccuracy_modifier = 0.25
|
||||
automatic_charge_overlays = FALSE
|
||||
var/obj/effect/portal/p_blue
|
||||
var/obj/effect/portal/p_orange
|
||||
var/atmos_link = FALSE
|
||||
var/firing_core = FALSE
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/attackby(obj/item/C, mob/user)
|
||||
if(istype(C, /obj/item/assembly/signaler/anomaly))
|
||||
to_chat(user, "<span class='notice'>You insert [C] into the wormhole projector and the weapon gently hums to life.</span>")
|
||||
firing_core = TRUE
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
|
||||
qdel(C)
|
||||
return
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/can_shoot()
|
||||
if(!firing_core)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/shoot_with_empty_chamber(mob/living/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='danger'>The display says, 'NO CORE INSTALLED'.</span>")
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/update_icon_state()
|
||||
icon_state = "[initial(icon_state)][current_firemode_index]"
|
||||
@@ -243,6 +285,9 @@
|
||||
p_blue = P
|
||||
crosslink()
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/core_inserted
|
||||
firing_core = TRUE
|
||||
|
||||
/* 3d printer 'pseudo guns' for borgs */
|
||||
|
||||
/obj/item/gun/energy/printer
|
||||
@@ -298,18 +343,6 @@
|
||||
/obj/item/gun/energy/laser/instakill/emp_act() //implying you could stop the instagib
|
||||
return
|
||||
|
||||
/obj/item/gun/energy/gravity_gun
|
||||
name = "one-point bluespace-gravitational manipulator"
|
||||
desc = "An experimental, multi-mode device that fires bolts of Zero-Point Energy, causing local distortions in gravity."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/gravity/repulse, /obj/item/ammo_casing/energy/gravity/attract, /obj/item/ammo_casing/energy/gravity/chaos)
|
||||
item_state = "gravity_gun"
|
||||
icon_state = "gravity_gun"
|
||||
pin = null
|
||||
var/power = 4
|
||||
|
||||
/obj/item/gun/energy/gravity_gun/security
|
||||
pin = /obj/item/firing_pin
|
||||
|
||||
//Emitter Gun
|
||||
|
||||
/obj/item/gun/energy/emitter
|
||||
|
||||
@@ -20,8 +20,9 @@
|
||||
newcasing.modified = modified
|
||||
var/obj/item/projectile/bullet/reusable/foam_dart/newdart = newcasing.BB
|
||||
newdart.modified = modified
|
||||
newdart.damage = damage
|
||||
newdart.nodamage = nodamage
|
||||
if(modified)
|
||||
newdart.damage = 5
|
||||
newdart.nodamage = FALSE
|
||||
newdart.damage_type = damage_type
|
||||
if(pen)
|
||||
newdart.pen = pen
|
||||
|
||||
@@ -625,8 +625,9 @@
|
||||
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))
|
||||
if(prob(33))
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/sugar,1)
|
||||
if(prob(1))
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/honey,1)
|
||||
..()
|
||||
|
||||
|
||||
@@ -1125,8 +1125,8 @@
|
||||
/datum/reagent/space_cleaner/sterilizine/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O, /obj/item/stack/medical/gauze))
|
||||
var/obj/item/stack/medical/gauze/G = O
|
||||
reac_volume = min((reac_volume / 10), G.amount)
|
||||
new/obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
|
||||
reac_volume = min((reac_volume / 5), G.amount)
|
||||
new /obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
|
||||
G.use(reac_volume)
|
||||
|
||||
|
||||
|
||||
@@ -74,12 +74,12 @@
|
||||
build_path = /obj/item/restraints/handcuffs
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/rifle_receiver
|
||||
name = "Rifle Receiver"
|
||||
id = "rifle_receiver"
|
||||
/datum/design/reciever
|
||||
name = "Modular Receiver"
|
||||
id = "modular_receiver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/iron = 24000)
|
||||
build_path = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
|
||||
build_path = /obj/item/weaponcrafting/receiver
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/shotgun_slug
|
||||
|
||||
@@ -282,10 +282,3 @@
|
||||
build_path = /obj/item/vending_refill/custom
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/trigger_assembly
|
||||
name = "Trigger Assembly"
|
||||
id = "trigger_assembly"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/iron = 6500, /datum/material/glass = 50)
|
||||
build_path = /obj/item/weaponcrafting/improvised_parts/trigger_assembly
|
||||
category = list("initial", "Misc")
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000)
|
||||
build_path = /obj/item/disk/medical/defib_heal
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_shock
|
||||
@@ -319,7 +319,7 @@
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000)
|
||||
build_path = /obj/item/disk/medical/defib_shock
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_decay
|
||||
@@ -330,7 +330,7 @@
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 16000, /datum/material/silver = 6000, /datum/material/titanium = 2000)
|
||||
build_path = /obj/item/disk/medical/defib_decay
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_speed
|
||||
@@ -341,7 +341,7 @@
|
||||
build_path = /obj/item/disk/medical/defib_speed
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 8000, /datum/material/gold = 26000, /datum/material/silver = 26000)
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defibrillator_compact
|
||||
|
||||
@@ -481,7 +481,7 @@
|
||||
build_path = /obj/item/holosign_creator/atmos
|
||||
category = list("Tool Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/*
|
||||
/datum/design/holosignfirelock
|
||||
name = "ATMOS Holofirelock Projector"
|
||||
desc = "A holographic projector that creates holographic barriers that prevent changes in temperature conditions."
|
||||
@@ -491,7 +491,7 @@
|
||||
build_path = /obj/item/holosign_creator/firelock
|
||||
category = list("Tool Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
*/
|
||||
/datum/design/holosigncombifan
|
||||
name = "ATMOS Holo-Combifan Projector"
|
||||
desc = "A holographic projector that creates holographic barriers that prevent changes in atmospheric and temperature conditions."
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
display_name = "Electromagnetic Theory"
|
||||
description = "Study into usage of frequencies in the electromagnetic spectrum."
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("holosign", "holosignsec", "holosignengi", "holosignatmos", "holosignfirelock", "inducer", "tray_goggles", "holopad")
|
||||
design_ids = list("holosign", "holosignsec", "holosignengi", "holosignatmos",/* "holosignfirelock",*/ "inducer", "tray_goggles", "holopad")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
|
||||
/datum/techweb_node/emp_adv
|
||||
@@ -75,15 +75,14 @@
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("sticky_tape")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
hidden = TRUE
|
||||
experimental = TRUE
|
||||
starting_node = TRUE
|
||||
|
||||
// Can be researched after getting the basic sticky technology from the BEPIS major reward
|
||||
// now a BEPIS locked thing
|
||||
/datum/techweb_node/sticky_advanced
|
||||
id = "sticky_advanced"
|
||||
display_name = "Advanced Sticky Technology"
|
||||
description = "Taking a good joke too far? Nonsense!"
|
||||
prereq_ids = list("sticky_basic")
|
||||
design_ids = list("super_sticky_tape", "pointy_tape")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
|
||||
hidden = TRUE
|
||||
experimental = TRUE
|
||||
|
||||
@@ -136,10 +136,13 @@
|
||||
return
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(user.real_name != H.dna.real_name)
|
||||
user.real_name = H.dna.real_name
|
||||
H.dna.transfer_identity(user, transfer_SE=1)
|
||||
user.updateappearance(mutcolor_update=1)
|
||||
user.domutcheck()
|
||||
user.visible_message("<span class='warning'>[user]'s appearance shifts into [H]'s!</span>", \
|
||||
"<span class='boldannounce'>[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] <i>sooo</i> much better than you. Not anymore, [H.p_they()] won't.</span>")
|
||||
if(!(NOTRANSSTING in H.dna.species.species_traits))
|
||||
if(user.real_name != H.dna.real_name)
|
||||
user.real_name = H.dna.real_name
|
||||
H.dna.transfer_identity(user, transfer_SE=1)
|
||||
user.updateappearance(mutcolor_update=1)
|
||||
user.domutcheck()
|
||||
user.visible_message("<span class='warning'>[user]'s appearance shifts into [H]'s!</span>", \
|
||||
"<span class='boldannounce'>[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] <i>sooo</i> much better than you. Not anymore, [H.p_they()] won't.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You are unable to transform into [H]!</span>")
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/obj/effect/proc_holder/spell/self/mantra
|
||||
name = "Inner Mantra"
|
||||
desc = "Control your Inner Mantra, gaining strength and durability for a cost."
|
||||
clothes_req = NONE
|
||||
mobs_whitelist = list(/mob/living/carbon/human)
|
||||
charge_max = 100
|
||||
antimagic_allowed = TRUE
|
||||
invocation = "SU'UP'AH S'EI YEN"
|
||||
invocation_type = "shout"
|
||||
level_max = 0
|
||||
cooldown_min = 100
|
||||
action_icon = 'icons/obj/magic.dmi'
|
||||
action_icon_state = "iconmantra"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/mantra/cast(mob/living/carbon/human/user)
|
||||
if(user.has_status_effect(STATUS_EFFECT_MANTRA))
|
||||
user.remove_status_effect(STATUS_EFFECT_MANTRA)
|
||||
else
|
||||
user.apply_status_effect(STATUS_EFFECT_MANTRA)
|
||||
|
||||
/obj/effect/proc_holder/spell/self/asura
|
||||
name = "Asura's Wrath"
|
||||
desc = "Unleash your rage as corrosive power fills your muscles."
|
||||
clothes_req = NONE
|
||||
mobs_whitelist = list(/mob/living/carbon/human)
|
||||
charge_max = 100
|
||||
antimagic_allowed = TRUE
|
||||
invocation = "KYE Y'O'KEN"
|
||||
invocation_type = "shout"
|
||||
level_max = 0
|
||||
cooldown_min = 100
|
||||
action_icon = 'icons/obj/magic.dmi'
|
||||
action_icon_state = "iconasura"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/asura/cast(mob/living/carbon/human/user)
|
||||
if(user.has_status_effect(STATUS_EFFECT_ASURA))
|
||||
user.remove_status_effect(STATUS_EFFECT_ASURA)
|
||||
else
|
||||
user.apply_status_effect(STATUS_EFFECT_ASURA)
|
||||
@@ -297,6 +297,7 @@
|
||||
owner.update_stamina()
|
||||
consider_processing()
|
||||
update_disabled()
|
||||
update_threshhold_state()
|
||||
return update_bodypart_damage_state()
|
||||
|
||||
/// Allows us to roll for and apply a wound without actually dealing damage. Used for aggregate wounding power with pellet clouds
|
||||
@@ -475,6 +476,7 @@
|
||||
owner.updatehealth()
|
||||
consider_processing()
|
||||
update_disabled()
|
||||
update_threshhold_state()
|
||||
return update_bodypart_damage_state()
|
||||
|
||||
//Returns total damage.
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
//Emergency Reboot: A surgery that allows for revival of Synthetics without the need for a defib. Doesn't all all the organs like the Revival surgery though.
|
||||
|
||||
/datum/surgery/emergency_reboot
|
||||
name = "Emergency Reboot"
|
||||
desc = "A surgery forcing the posibrain of a robot to begin it's reboot procedure, if their body can sustain its operation."
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = BODYPART_ROBOTIC //If you are a Synth with a organic head (somehow), this won't work.
|
||||
steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/open_hatch, /datum/surgery_step/mechanic_unwrench, /datum/surgery_step/force_reboot, /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close)
|
||||
|
||||
/datum/surgery/emergency_reboot/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(target.stat != DEAD)
|
||||
return FALSE
|
||||
if(target.suiciding || HAS_TRAIT(target, TRAIT_NOCLONE) || target.hellbound)
|
||||
return FALSE
|
||||
if(!HAS_TRAIT(target, TRAIT_ROBOTIC_ORGANISM))
|
||||
return FALSE
|
||||
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(!B || !istype(B, /obj/item/organ/brain/ipc))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/force_reboot
|
||||
name = "initiate system reboot"
|
||||
implements = list(TOOL_MULTITOOL = 100, /obj/item/borg/upgrade/restart = 100)
|
||||
time = 100
|
||||
|
||||
/datum/surgery_step/force_reboot/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You prepare to begin rebooting [target]'s posibrain.</span>",
|
||||
"[user] prepares to reboot [target]'s posibrain with [tool].",
|
||||
"[user] prepares to reboot [target]'s posibrain with [tool].")
|
||||
target.notify_ghost_cloning("Someone is trying to reboot you! Re-enter your corpse if you want to be revived!", source = target)
|
||||
|
||||
/datum/surgery_step/force_reboot/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You successfully initiate a reboot in [target]'s posibrain...</span>",
|
||||
"[user] initiates a reboot in [target]'s posibrain...",
|
||||
"[user] initiates a reboot in [target]'s posibrain...")
|
||||
target.adjustOxyLoss(-50, 0)
|
||||
target.updatehealth()
|
||||
var/tplus = world.time - target.timeofdeath
|
||||
if(target.revive())
|
||||
target.visible_message("...[target]'s posibrain flickers to life once again!")
|
||||
target.emote("ping")
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
if(policy)
|
||||
to_chat(target, policy)
|
||||
target.log_message("revived using surgical revival, [tplus] deciseconds from time of death, considered [late? "late" : "memory-intact"] revival under configured policy limits.", LOG_GAME)
|
||||
return TRUE
|
||||
else
|
||||
target.visible_message("...[target]'s posibrain flickers a few times, before the lights fade yet again...")
|
||||
return FALSE
|
||||
|
||||
/datum/surgery_step/force_reboot/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You attempt to reboot [target]'s posibrain, but [target.p_they()] doesn't react.</span>",
|
||||
"[user] attempts to reboot [target]'s posibrain, but [target.p_they()] doesn't react.",
|
||||
"[user] attempts to reboot [target]'s posibrain, but [target.p_they()] doesn't react")
|
||||
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 199)
|
||||
return FALSE
|
||||
@@ -31,6 +31,12 @@
|
||||
target_mobtypes = list(/mob/living/carbon/human)
|
||||
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
|
||||
requires_real_bodypart = TRUE
|
||||
|
||||
//The augmentation surgery for synthetic limbs
|
||||
/datum/surgery/augmentation/synth
|
||||
requires_bodypart_type = BODYPART_HYBRID
|
||||
steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/pry_off_plating, /datum/surgery_step/cut_wires, /datum/surgery_step/prepare_electronics, /datum/surgery_step/replace_limb)
|
||||
|
||||
//SURGERY STEP SUCCESSES
|
||||
/datum/surgery_step/replace_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery)
|
||||
if(L)
|
||||
|
||||
@@ -2,11 +2,17 @@
|
||||
name = "removal of embedded objects"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/remove_object)
|
||||
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
|
||||
|
||||
/datum/surgery/embedded_removal/robot
|
||||
requires_bodypart_type = BODYPART_ROBOTIC
|
||||
steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/open_hatch, /datum/surgery_step/remove_object)
|
||||
|
||||
/datum/surgery_step/remove_object
|
||||
name = "remove embedded objects"
|
||||
time = 32
|
||||
accept_hand = 1
|
||||
var/obj/item/bodypart/L = null
|
||||
|
||||
/datum/surgery_step/remove_object/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
L = surgery.operated_bodypart
|
||||
if(L)
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
|
||||
/obj/vehicle/sealed/car/clowncar/twitch_plays
|
||||
key_type = null
|
||||
explode_on_death = FALSE
|
||||
|
||||
/obj/vehicle/sealed/car/clowncar/twitch_plays/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/vehicle/sealed
|
||||
enclosed = TRUE // you're in a sealed vehicle dont get dinked idiot
|
||||
var/enter_delay = 20
|
||||
var/explode_on_death = TRUE
|
||||
flags_1 = BLOCK_FACE_ATOM_1
|
||||
|
||||
/obj/vehicle/sealed/generate_actions()
|
||||
@@ -87,7 +88,8 @@
|
||||
|
||||
/obj/vehicle/sealed/Destroy()
|
||||
DumpMobs()
|
||||
explosion(loc, 0, 1, 2, 3, 0)
|
||||
if(explode_on_death)
|
||||
explosion(loc, 0, 1, 2, 3, 0)
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/sealed/proc/DumpMobs(randomstep = TRUE)
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "KinkMate"
|
||||
desc = "A vending machine for all your unmentionable desires."
|
||||
icon_state = "kink"
|
||||
circuit = /obj/item/circuitboard/machine/kinkmate
|
||||
product_slogans = "Kinky!;Sexy!;Check me out, big boy!"
|
||||
vend_reply = "Have fun, you shameless pervert!"
|
||||
products = list(
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
/obj/item/healthanalyzer/wound = 4,
|
||||
/obj/item/stack/medical/ointment = 2,
|
||||
/obj/item/stack/medical/suture = 2,
|
||||
/obj/item/stack/medical/bone_gel = 4)
|
||||
/obj/item/stack/medical/bone_gel = 4,
|
||||
/obj/item/stack/medical/nanogel = 4)
|
||||
contraband = list(/obj/item/reagent_containers/pill/tox = 3,
|
||||
/obj/item/reagent_containers/pill/morphine = 4,
|
||||
/obj/item/reagent_containers/pill/charcoal = 6)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
/obj/item/reagent_containers/medspray/sterilizine = 1,
|
||||
/obj/item/healthanalyzer/wound = 2,
|
||||
/obj/item/stack/medical/bone_gel = 2,
|
||||
/obj/item/stack/medical/nanogel = 2,
|
||||
/obj/item/reagent_containers/syringe/dart = 10)
|
||||
contraband = list(/obj/item/reagent_containers/pill/tox = 2,
|
||||
/obj/item/reagent_containers/pill/morphine = 2)
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
/obj/item/tank/internals/anesthetic = 2,
|
||||
/obj/item/clothing/mask/breath/medical = 5,
|
||||
/obj/item/screwdriver = 5,
|
||||
/obj/item/crowbar = 5)
|
||||
/obj/item/crowbar = 6,
|
||||
/obj/item/stack/medical/nanogel = 5)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = PRICE_EXPENSIVE
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
|
||||
vend_reply = "Thank you for using the SecDrobe!"
|
||||
products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 2,
|
||||
/obj/item/storage/backpack/security = 2,
|
||||
/obj/item/storage/backpack/satchel/sec = 2,
|
||||
/obj/item/storage/backpack/security = 3,
|
||||
/obj/item/storage/backpack/satchel/sec = 3,
|
||||
/obj/item/storage/backpack/duffelbag/sec = 3,
|
||||
/obj/item/clothing/under/rank/security/officer = 5,
|
||||
/obj/item/clothing/shoes/jackboots = 5,
|
||||
@@ -88,9 +88,9 @@
|
||||
vend_reply = "Thank you for using the MediDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
|
||||
/obj/item/clothing/head/beret/med = 5,
|
||||
/obj/item/storage/backpack/duffelbag/med = 5,
|
||||
/obj/item/storage/backpack/medic = 5,
|
||||
/obj/item/storage/backpack/satchel/med = 5,
|
||||
/obj/item/storage/backpack/duffelbag/med = 5,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/medical = 5,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/paramedic = 2,
|
||||
/obj/item/clothing/under/rank/medical/doctor/nurse = 5,
|
||||
@@ -131,9 +131,9 @@
|
||||
vend_reply = "Thank you for using the EngiDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
|
||||
/obj/item/clothing/head/beret/eng = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/storage/backpack/industrial = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering = 3,
|
||||
/obj/item/clothing/under/rank/engineering/engineer = 5,
|
||||
/obj/item/clothing/under/rank/engineering/engineer/skirt = 5,
|
||||
@@ -162,9 +162,9 @@
|
||||
vend_reply = "Thank you for using the AtmosDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 3,
|
||||
/obj/item/clothing/head/beret/atmos = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/storage/backpack/industrial = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/clothing/head/hardhat/weldhat/dblue = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3,
|
||||
/obj/item/clothing/under/rank/engineering/atmospheric_technician = 5,
|
||||
@@ -212,7 +212,7 @@
|
||||
/obj/item/clothing/under/rank/rnd/roboticist/sleek = 3,
|
||||
/obj/item/clothing/under/rank/rnd/roboticist/skirt = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/robotics = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/roboticist = 3,
|
||||
/obj/item/clothing/shoes/sneakers/black = 3,
|
||||
/obj/item/clothing/gloves/fingerless = 3,
|
||||
/obj/item/clothing/head/soft/black = 3,
|
||||
@@ -238,6 +238,7 @@
|
||||
/obj/item/clothing/head/beret/sci = 3,
|
||||
/obj/item/storage/backpack/science = 3,
|
||||
/obj/item/storage/backpack/satchel/tox = 3,
|
||||
/obj/item/storage/backpack/duffelbag = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/science = 3,
|
||||
/obj/item/clothing/under/rank/rnd/scientist = 4,
|
||||
/obj/item/clothing/under/rank/rnd/scientist/util = 4,
|
||||
@@ -261,7 +262,9 @@
|
||||
product_ads = "Do you love soil? Then buy our clothes!;Get outfits to match your green thumb here!"
|
||||
vend_reply = "Thank you for using the Hydrobe!"
|
||||
products = list(/obj/item/storage/backpack/botany = 3,
|
||||
/obj/item/storage/backpack = 3,
|
||||
/obj/item/storage/backpack/satchel/hyd = 3,
|
||||
/obj/item/storage/backpack/duffelbag = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hydro = 2,
|
||||
/obj/item/clothing/suit/apron = 3,
|
||||
/obj/item/clothing/suit/apron/overalls = 5,
|
||||
@@ -468,7 +471,7 @@
|
||||
/obj/item/storage/backpack/chemistry = 3,
|
||||
/obj/item/storage/backpack/satchel/chem = 3,
|
||||
/obj/item/storage/bag/chemistry = 3,
|
||||
/obj/item/fermichem/pHbooklet = 3)//pH indicator)
|
||||
/obj/item/fermichem/pHbooklet = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
@@ -359,6 +359,10 @@
|
||||
if(QDELETED(tasted) || (tasted.ckey && !(tasted.client?.prefs.vore_flags & LICKABLE)) || !Adjacent(tasted) || incapacitated(ignore_restraints = TRUE))
|
||||
return
|
||||
|
||||
if(ishuman(tasted))
|
||||
var/mob/living/carbon/human/H = tasted
|
||||
H.wash_cream()
|
||||
|
||||
visible_message("<span class='warning'>[src] licks [tasted]!</span>","<span class='notice'>You lick [tasted]. They taste rather like [tasted.get_taste_message()].</span>","<b>Slurp!</b>")
|
||||
|
||||
/mob/living/proc/get_taste_message(allow_generic = TRUE, datum/species/mrace)
|
||||
|
||||
+2
-2
@@ -25,5 +25,5 @@ RESPAWN_MINIMUM_DELAY_ROUNDSTART 30.0
|
||||
## Gamemode (config tags!) banlist for respawn
|
||||
RESPAWN_CHAOS_GAMEMODES WIZARD
|
||||
RESPAWN_CHAOS_GAMEMODES NUCLEAR
|
||||
RESPAWN_CHAOS_GAMEMODES CLONWOPS
|
||||
RESPAWN_CHOAS_GAMEMODES REVOLUTION
|
||||
RESPAWN_CHAOS_GAMEMODES CLOWNOPS
|
||||
RESPAWN_CHAOS_GAMEMODES REVOLUTION
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "necromanceranne"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds new roboticist labcoat sprites!"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "zeroisthebiggay"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "fuck the r*d cr*ss"
|
||||
@@ -0,0 +1,7 @@
|
||||
author: "shellspeed1"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Wings from Cit RP have been ported over"
|
||||
- rscadd: "Moth wings from cit have been ported over"
|
||||
- bugfix: "Cleaned up some pixels on existing moth wings."
|
||||
- tweak: "Organized the lists for wings by if they are for moths or not and than by alphabetical."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "DeltaFire15"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Some synth damage stuff has been a bit rebalanced, see the PR for details."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "timothyteakettle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "species with NOTRANSSTING cannot have envy's knife used on them"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "DeltaFire15"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Combat mode now will not stay permanently disabled due to status effects not working as intended."
|
||||
@@ -0,0 +1,7 @@
|
||||
author: "DeltaFire15"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "A new surgery, allowing revival of synths without a defib at hand."
|
||||
- balance: "Semi-permanent damage of Synth limbs caused by passing the damage threshold: 10 <- 15."
|
||||
- tweak: "The embed removal surgery now has a version for Synths."
|
||||
- balance: "EMPs no longer hardstun Synths."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "HeroWithYay"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Wormhole Projector and Gravity Gun now require anomaly cores to function instead of firing pins."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Putnam3145"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Replaces majority judgement with usual judgement."
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user