Merge remote-tracking branch 'origin/master' into luciee
648
_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm
Normal file
@@ -0,0 +1,648 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"ag" = (
|
||||
/obj/effect/decal/cleanable/glass,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/chair/stool/bamboo,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"ak" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/trashbin,
|
||||
/obj/effect/turf_decal/pool,
|
||||
/obj/structure/railing/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"bv" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"eW" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"hn" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/chair/stool/bamboo,
|
||||
/obj/structure/chair/stool/bamboo,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"kF" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"lf" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/railing/corner,
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"li" = (
|
||||
/turf/open/water/safe,
|
||||
/area/template_noop)
|
||||
"nH" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/light/broken,
|
||||
/obj/machinery/vending/dinnerware,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"of" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/trashbin,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"oW" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"pj" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/trimline/green/filled/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"qR" = (
|
||||
/obj/effect/spawner/lootdrop/trashbin,
|
||||
/turf/open/water/safe,
|
||||
/area/template_noop)
|
||||
"rS" = (
|
||||
/obj/effect/decal/cleanable/vomit/old,
|
||||
/obj/effect/decal/cleanable/blood/footprints{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"sb" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/structure/railing,
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"tg" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/twohanded/fishingrod,
|
||||
/obj/structure/rack,
|
||||
/obj/item/poster/random_contraband,
|
||||
/obj/item/picket_sign,
|
||||
/obj/item/picket_sign,
|
||||
/obj/item/picket_sign,
|
||||
/obj/item/picket_sign,
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/checker,
|
||||
/area/template_noop)
|
||||
"tw" = (
|
||||
/obj/machinery/griddle,
|
||||
/obj/item/reagent_containers/food/snacks/deadmouse,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"tO" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/table/glass,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"uj" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"vX" = (
|
||||
/obj/effect/decal/cleanable/vomit/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"wk" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/vending/coffee,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"xi" = (
|
||||
/obj/item/reagent_containers/food/snacks/fish/goldfish{
|
||||
bitecount = 0;
|
||||
length = 1;
|
||||
weight = 2
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood/footprints{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"xG" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/grill,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"yw" = (
|
||||
/obj/effect/decal/cleanable/blood/footprints{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"zC" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/table,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"AR" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"BO" = (
|
||||
/obj/machinery/smartfridge/food,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/reagent_containers/food/snacks/carpmeat/fish,
|
||||
/obj/item/reagent_containers/food/snacks/carpmeat/fish,
|
||||
/obj/item/reagent_containers/food/snacks/carpmeat/fish,
|
||||
/obj/item/reagent_containers/food/snacks/carpmeat/fish,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"Cj" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"Ei" = (
|
||||
/obj/machinery/vending/fishing,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/light/broken{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/checker,
|
||||
/area/template_noop)
|
||||
"ED" = (
|
||||
/obj/effect/decal/cleanable/blood/footprints{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool/corner,
|
||||
/obj/structure/railing/corner,
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"EH" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/smartfridge/drying_rack,
|
||||
/turf/open/floor/plasteel/checker,
|
||||
/area/template_noop)
|
||||
"EQ" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/vending/cola/random{
|
||||
tilted = 1
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/green/filled/line,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"FV" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"GH" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/table,
|
||||
/turf/open/floor/plasteel/checker,
|
||||
/area/template_noop)
|
||||
"GJ" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool/corner{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"GL" = (
|
||||
/obj/effect/decal/cleanable/blood/footprints{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"He" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"Ig" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/railing/corner,
|
||||
/obj/structure/railing/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"JM" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"Ke" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"KU" = (
|
||||
/obj/effect/landmark/blobstart,
|
||||
/turf/open/water/safe,
|
||||
/area/template_noop)
|
||||
"LT" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/radio,
|
||||
/obj/item/relic,
|
||||
/obj/item/twohanded/fishingrod,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"Mq" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/blood/gibs/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool/corner{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"Mw" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"MA" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/turf_decal/pool,
|
||||
/obj/structure/railing/corner{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/railing/corner,
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"MI" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/twohanded/fishingrod,
|
||||
/obj/structure/rack,
|
||||
/obj/item/pet_carrier,
|
||||
/turf/open/floor/plasteel/checker,
|
||||
/area/template_noop)
|
||||
"Ng" = (
|
||||
/obj/machinery/smartfridge/drinks,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/beer/stout,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/light,
|
||||
/obj/item/reagent_containers/food/drinks/beer/stout,
|
||||
/turf/open/floor/plasteel/blackwhite,
|
||||
/area/template_noop)
|
||||
"Og" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"Ou" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plasteel/checker,
|
||||
/area/template_noop)
|
||||
"OV" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"Pj" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing,
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"Qj" = (
|
||||
/obj/effect/landmark/xeno_spawn,
|
||||
/turf/open/water/safe,
|
||||
/area/template_noop)
|
||||
"Rc" = (
|
||||
/obj/machinery/vending/fishing,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"RS" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing,
|
||||
/obj/effect/turf_decal/pool,
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"SA" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/chair/stool/bamboo,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"SM" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/trashbin,
|
||||
/obj/structure/railing{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"Tw" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/railing{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"Uj" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/soap/homemade,
|
||||
/obj/item/soap/homemade,
|
||||
/obj/item/twohanded/fishingrod,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"Wi" = (
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/table/glass,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/template_noop)
|
||||
"Xp" = (
|
||||
/obj/effect/decal/cleanable/blood/footprints{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"YR" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"Ze" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/light/broken,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
"ZB" = (
|
||||
/obj/effect/decal/cleanable/blood/footprints{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/turf_decal/pool{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/railing/corner{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/railing/corner,
|
||||
/turf/open/floor/wood,
|
||||
/area/template_noop)
|
||||
"ZO" = (
|
||||
/obj/effect/decal/cleanable/vomit/old,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/mob/living/simple_animal/mouse,
|
||||
/turf/open/floor/plasteel/checker,
|
||||
/area/template_noop)
|
||||
|
||||
(1,1,1) = {"
|
||||
Wi
|
||||
tO
|
||||
tO
|
||||
uj
|
||||
FV
|
||||
Pj
|
||||
Ng
|
||||
BO
|
||||
of
|
||||
xG
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
SA
|
||||
SA
|
||||
ag
|
||||
hn
|
||||
FV
|
||||
sb
|
||||
JM
|
||||
of
|
||||
of
|
||||
tw
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
Cj
|
||||
rS
|
||||
ED
|
||||
yw
|
||||
Xp
|
||||
ZB
|
||||
xi
|
||||
Mq
|
||||
AR
|
||||
zC
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
Rc
|
||||
GL
|
||||
RS
|
||||
qR
|
||||
li
|
||||
li
|
||||
li
|
||||
eW
|
||||
AR
|
||||
nH
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
oW
|
||||
oW
|
||||
ak
|
||||
li
|
||||
Qj
|
||||
li
|
||||
li
|
||||
bv
|
||||
oW
|
||||
oW
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
Og
|
||||
Og
|
||||
MA
|
||||
li
|
||||
li
|
||||
KU
|
||||
li
|
||||
Ig
|
||||
Og
|
||||
Og
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
Ei
|
||||
Ou
|
||||
RS
|
||||
li
|
||||
li
|
||||
li
|
||||
qR
|
||||
eW
|
||||
Mw
|
||||
Ze
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
EH
|
||||
Ou
|
||||
GJ
|
||||
Tw
|
||||
OV
|
||||
lf
|
||||
Tw
|
||||
YR
|
||||
vX
|
||||
kF
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
EH
|
||||
Ou
|
||||
ZO
|
||||
Ou
|
||||
FV
|
||||
Pj
|
||||
He
|
||||
Ke
|
||||
pj
|
||||
kF
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
GH
|
||||
Ou
|
||||
MI
|
||||
tg
|
||||
SM
|
||||
Pj
|
||||
Uj
|
||||
LT
|
||||
wk
|
||||
EQ
|
||||
"}
|
||||
@@ -0,0 +1,76 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/obj/machinery/vending/snack/random,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"c" = (
|
||||
/obj/machinery/vending/autodrobe/all_access,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"i" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/decal/cleanable/vomit/old,
|
||||
/obj/effect/spawner/lootdrop/trashbin,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"p" = (
|
||||
/obj/machinery/vending/cola/random{
|
||||
tilted = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"s" = (
|
||||
/obj/effect/decal/cleanable/ash,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/trashbin,
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"B" = (
|
||||
/obj/item/holochip{
|
||||
credits = 50
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"I" = (
|
||||
/obj/machinery/vending/cigarette,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"P" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/glowstick,
|
||||
/obj/effect/spawner/lootdrop/gloves,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"W" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/spawner/lootdrop/organ_spawner,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/decal/cleanable/blood/gibs/old,
|
||||
/obj/effect/decal/remains/human,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
|
||||
(1,1,1) = {"
|
||||
I
|
||||
s
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
P
|
||||
B
|
||||
i
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
p
|
||||
W
|
||||
c
|
||||
"}
|
||||
@@ -79,7 +79,7 @@
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/item/organ/eyes,
|
||||
/obj/item/organ/eyes/moth,
|
||||
/obj/item/organ/eyes/preternis,
|
||||
/obj/item/organ/eyes/robotic/preternis,
|
||||
/obj/item/organ/eyes/snail,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/template_noop)
|
||||
|
||||
@@ -29646,27 +29646,6 @@
|
||||
/obj/effect/landmark/start/roboticist,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/robotics/lab)
|
||||
"aZU" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/surgical_drapes,
|
||||
/obj/item/retractor,
|
||||
/obj/item/cautery,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1;
|
||||
pixel_y = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/robotics/lab)
|
||||
"aZV" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
|
||||
@@ -29867,28 +29846,6 @@
|
||||
/obj/effect/spawner/structure/window,
|
||||
/turf/open/floor/plating,
|
||||
/area/science/robotics/lab)
|
||||
"baj" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/circular_saw,
|
||||
/obj/item/scalpel{
|
||||
pixel_y = 16
|
||||
},
|
||||
/obj/item/hemostat,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1;
|
||||
pixel_y = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/robotics/lab)
|
||||
"bak" = (
|
||||
/obj/machinery/computer/operating{
|
||||
dir = 1;
|
||||
@@ -95909,6 +95866,25 @@
|
||||
icon_state = "panelscorched"
|
||||
},
|
||||
/area/security/prison)
|
||||
"pmX" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1;
|
||||
pixel_y = 1
|
||||
},
|
||||
/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/robotics/lab)
|
||||
"pnQ" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/structure/girder/reinforced,
|
||||
@@ -98541,6 +98517,25 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/chemistry)
|
||||
"saU" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1;
|
||||
pixel_y = 1
|
||||
},
|
||||
/obj/item/tank/internals/anesthetic,
|
||||
/obj/item/clothing/mask/breath/medical,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/robotics/lab)
|
||||
"sbr" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 2
|
||||
@@ -139712,7 +139707,7 @@ cHi
|
||||
waG
|
||||
bhC
|
||||
aCK
|
||||
baj
|
||||
saU
|
||||
bak
|
||||
aZS
|
||||
bOL
|
||||
@@ -140226,7 +140221,7 @@ azN
|
||||
aAo
|
||||
aBw
|
||||
aHM
|
||||
aZU
|
||||
pmX
|
||||
bgB
|
||||
bez
|
||||
aJV
|
||||
|
||||
@@ -21633,6 +21633,36 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/checkpoint/engineering)
|
||||
"bUA" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Operating Theatre";
|
||||
req_access_txt = "45"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/unres{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/holosign/surgery,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"bVa" = (
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 4
|
||||
@@ -26746,6 +26776,26 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/central)
|
||||
"dDo" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "surgery_shutters";
|
||||
name = "Surgery shutters";
|
||||
pixel_x = 26;
|
||||
pixel_y = 6;
|
||||
req_access_txt = "45";
|
||||
req_one_access_txt = null
|
||||
},
|
||||
/obj/machinery/computer/operating,
|
||||
/obj/machinery/button/holosign{
|
||||
id = "surgery";
|
||||
pixel_x = 26;
|
||||
pixel_y = -4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dDp" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/portable_atmospherics/canister/water_vapor,
|
||||
@@ -32595,21 +32645,6 @@
|
||||
/obj/item/pen/red,
|
||||
/turf/open/floor/wood,
|
||||
/area/vacant_room)
|
||||
"gKi" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "surgery_shutters";
|
||||
name = "Surgery shutters";
|
||||
pixel_x = 26;
|
||||
pixel_y = 6;
|
||||
req_access_txt = "45";
|
||||
req_one_access_txt = null
|
||||
},
|
||||
/obj/machinery/computer/operating,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"gKy" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -45552,6 +45587,26 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/hallway/secondary/exit)
|
||||
"mYj" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only,
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Operating Theatre";
|
||||
req_access_txt = "45"
|
||||
},
|
||||
/obj/machinery/holosign/surgery{
|
||||
id = "surgery"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"mYS" = (
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Atmospherics South West";
|
||||
@@ -56967,26 +57022,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"sKm" = (
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Operating Theatre";
|
||||
req_access_txt = "45"
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line,
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/sleeper)
|
||||
"sKs" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
|
||||
dir = 4
|
||||
@@ -58814,23 +58849,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/storage/tech)
|
||||
"tEa" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only,
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Operating Theatre";
|
||||
req_access_txt = "45"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"tEk" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -61908,35 +61926,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/chief)
|
||||
"vhN" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Operating Theatre";
|
||||
req_access_txt = "45"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/unres{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"vhP" = (
|
||||
/obj/structure/sign/poster/contraband/power{
|
||||
pixel_y = 32
|
||||
@@ -63806,6 +63795,29 @@
|
||||
"wkN" = (
|
||||
/turf/closed/wall,
|
||||
/area/science/nanite)
|
||||
"wls" = (
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Operating Theatre";
|
||||
req_access_txt = "45"
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/firedoor/border_only{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line,
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/holosign/surgery{
|
||||
id = "surgery"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/sleeper)
|
||||
"wlG" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
|
||||
dir = 6
|
||||
@@ -106188,7 +106200,7 @@ bvj
|
||||
bvj
|
||||
bvj
|
||||
shz
|
||||
sKm
|
||||
wls
|
||||
bvj
|
||||
tDe
|
||||
tVV
|
||||
@@ -106961,7 +106973,7 @@ urv
|
||||
uMu
|
||||
vYV
|
||||
oQs
|
||||
tEa
|
||||
mYj
|
||||
tzM
|
||||
ulL
|
||||
oEY
|
||||
@@ -107470,7 +107482,7 @@ hoP
|
||||
kub
|
||||
hLI
|
||||
iYd
|
||||
gKi
|
||||
dDo
|
||||
gQe
|
||||
doF
|
||||
hnj
|
||||
@@ -107730,7 +107742,7 @@ adK
|
||||
adK
|
||||
adK
|
||||
adK
|
||||
vhN
|
||||
bUA
|
||||
adK
|
||||
adK
|
||||
jrP
|
||||
|
||||
@@ -12704,11 +12704,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/fore)
|
||||
"aDU" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced/tinted/fulltile,
|
||||
/turf/open/floor/plating,
|
||||
/area/security/courtroom)
|
||||
"aDV" = (
|
||||
/obj/machinery/vending/cigarette,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -112066,7 +112061,7 @@ aHD
|
||||
aHD
|
||||
aHD
|
||||
aHD
|
||||
aDU
|
||||
aTk
|
||||
aRX
|
||||
aTk
|
||||
aUF
|
||||
|
||||
@@ -47,7 +47,7 @@ GLOBAL_LIST_INIT(ai_project_categories, list(
|
||||
#define AI_MAX_RAM_PER_RACK 4
|
||||
|
||||
///How many AI research points does 1 THz generate?
|
||||
#define AI_RESEARCH_PER_CPU 7.5
|
||||
#define AI_RESEARCH_PER_CPU 8.5
|
||||
|
||||
//How long between each data core being able to send a warning. Wouldn't want any spam if we had jittery temps would we?
|
||||
#define AI_DATA_CORE_WARNING_COOLDOWN (5 MINUTES)
|
||||
|
||||
@@ -259,6 +259,7 @@
|
||||
#define TRAIT_ANOREXIC "anorexic"
|
||||
#define TRAIT_SHIFTY_EYES "shifty_eyes"
|
||||
#define TRAIT_ANXIOUS "anxious"
|
||||
#define TRAIT_SEE_REAGENTS "see_reagents"
|
||||
|
||||
// common trait sources
|
||||
#define TRAIT_GENERIC "generic"
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
#define STATUS_EFFECT_VOIDED /datum/status_effect/voided //originally the void spell where you disappear and leave an invincible shadow guy but now it's a status effect
|
||||
|
||||
#define STATUS_EFFECT_DODGING /datum/status_effect/dodging //granted by using the dodge roll, grants 1.5 seconds of godmode to replicate invincibility frames
|
||||
|
||||
@@ -73,6 +73,10 @@ SUBSYSTEM_DEF(research)
|
||||
science_tech.last_bitcoins = bitcoins // Doesn't take tick drift into account
|
||||
for(var/i in bitcoins)
|
||||
bitcoins[i] *= income_time_difference / 10
|
||||
if(science_tech.stored_research_points[i])
|
||||
var/boost_amt = clamp(0, bitcoins[i], science_tech.stored_research_points[i]) //up to 2x research speed when burning stored research
|
||||
bitcoins[i] += boost_amt
|
||||
science_tech.remove_stored_point_type(i, boost_amt)
|
||||
science_tech.add_point_list(bitcoins)
|
||||
last_income = world.time
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
special_screen_obj = "honked_nose"
|
||||
special_screen_replace = FALSE
|
||||
|
||||
/datum/mood_event/perform_cpr
|
||||
/datum/mood_event/saved_life
|
||||
description = "<span class='nicegreen'>It feels good to save a life.</span>\n"
|
||||
mood_change = 6
|
||||
timeout = 5 MINUTES
|
||||
|
||||
@@ -302,6 +302,11 @@
|
||||
/obj/machinery/button/crematorium/indestructible
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/machinery/button/holosign
|
||||
name = "holosign button"
|
||||
desc = "A remote control switch for a holosign."
|
||||
device_type = /obj/item/assembly/control/holosign
|
||||
|
||||
/obj/item/wallframe/button
|
||||
name = "button frame"
|
||||
desc = "Used for building buttons."
|
||||
|
||||
@@ -126,8 +126,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
|
||||
var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR)
|
||||
if(D)
|
||||
D.adjust_money(point_gain)
|
||||
linked_techweb.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, point_gain)
|
||||
say("Explosion details and mixture analyzed and sold to the highest bidder for $[point_gain], with a reward of [point_gain] points.")
|
||||
linked_techweb.add_stored_point_type(TECHWEB_POINT_TYPE_DEFAULT, point_gain)
|
||||
say("Explosion details and mixture analyzed and sold to the highest bidder for $[point_gain], with a reward of [point_gain] points to be processed by research servers.")
|
||||
|
||||
else //you've made smaller bombs
|
||||
say("Data already captured. Aborting.")
|
||||
|
||||
35
code/game/machinery/holosign.dm
Normal file
@@ -0,0 +1,35 @@
|
||||
////////////////////HOLOSIGN///////////////////////////////////////
|
||||
/obj/machinery/holosign
|
||||
name = "holosign"
|
||||
desc = "Small wall-mounted holographic projector"
|
||||
icon = 'icons/obj/holosign.dmi'
|
||||
icon_state = "sign_off"
|
||||
layer = 4
|
||||
var/lit = FALSE
|
||||
var/id = null
|
||||
var/on_icon = "sign_on"
|
||||
|
||||
/obj/machinery/holosign/proc/toggle()
|
||||
if(!is_operational())
|
||||
lit = FALSE
|
||||
else
|
||||
lit = !lit
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/holosign/update_icon()
|
||||
if(!lit)
|
||||
icon_state = initial(icon_state)
|
||||
set_light(0)
|
||||
else
|
||||
icon_state = on_icon
|
||||
set_light(1, 0.5, l_color = COLOR_BLUE_LIGHT)
|
||||
|
||||
/obj/machinery/holosign/power_change()
|
||||
if(!is_operational())
|
||||
lit = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/holosign/surgery
|
||||
name = "surgery holosign"
|
||||
desc = "Small wall-mounted holographic projector. This one reads SURGERY."
|
||||
on_icon = "surgery"
|
||||
@@ -624,6 +624,7 @@
|
||||
H.emote("gasp")
|
||||
H.Jitter(100)
|
||||
SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "saved_life", /datum/mood_event/saved_life)
|
||||
log_combat(user, H, "revived", defib)
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
desc = "Can hold security gear like handcuffs and flashes."
|
||||
icon_state = "securitybelt"
|
||||
item_state = "security"//Could likely use a better one.
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
content_overlays = TRUE
|
||||
|
||||
/obj/item/storage/belt/security/ComponentInitialize()
|
||||
@@ -246,6 +246,10 @@
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_box,
|
||||
/obj/item/storage/box/rubbershot,
|
||||
/obj/item/storage/box/lethalshot,
|
||||
/obj/item/storage/box/breacherslug,
|
||||
/obj/item/storage/box/beanbag,
|
||||
/obj/item/reagent_containers/food/snacks/donut,
|
||||
/obj/item/kitchen/knife/combat,
|
||||
/obj/item/flashlight/seclite,
|
||||
@@ -254,6 +258,7 @@
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/restraints/legcuffs/bola,
|
||||
/obj/item/holosign_creator/security,
|
||||
/obj/item/shield/riot/tele,
|
||||
/obj/item/barrier_taperoll/police
|
||||
))
|
||||
|
||||
@@ -272,6 +277,11 @@
|
||||
icon_state = "securitybelt_hos"
|
||||
item_state = "security_hos"
|
||||
|
||||
/obj/item/storage/belt/security/chief/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 7
|
||||
|
||||
/obj/item/storage/belt/security/chief/full/PopulateContents()
|
||||
new /obj/item/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/restraints/handcuffs(src)
|
||||
@@ -279,6 +289,7 @@
|
||||
new /obj/item/assembly/flash/handheld(src)
|
||||
new /obj/item/melee/baton/loaded(src)
|
||||
new /obj/item/barrier_taperoll/police(src)
|
||||
new /obj/item/shield/riot/tele(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/belt/security/webbing
|
||||
@@ -292,7 +303,7 @@
|
||||
/obj/item/storage/belt/security/webbing/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 6
|
||||
STR.max_items = 7
|
||||
|
||||
/obj/item/storage/belt/mining
|
||||
name = "explorer's webbing"
|
||||
@@ -545,11 +556,6 @@
|
||||
icon_state = "assaultbelt"
|
||||
item_state = "security"
|
||||
|
||||
/obj/item/storage/belt/military/assault/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 6
|
||||
|
||||
/obj/item/storage/belt/grenade
|
||||
name = "grenadier belt"
|
||||
desc = "A belt for holding grenades."
|
||||
@@ -657,7 +663,7 @@
|
||||
/obj/item/storage/belt/bandolier/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 18
|
||||
STR.max_items = 24
|
||||
STR.display_numerical_stacking = TRUE
|
||||
STR.set_holdable(list(
|
||||
/obj/item/ammo_casing/shotgun
|
||||
@@ -668,6 +674,7 @@
|
||||
desc = "A holster to carry a handgun and ammo. WARNING: Badasses only."
|
||||
icon_state = "holster"
|
||||
item_state = "holster"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
alternate_worn_layer = UNDER_SUIT_LAYER
|
||||
|
||||
/obj/item/storage/belt/holster/ComponentInitialize()
|
||||
|
||||
@@ -802,42 +802,66 @@
|
||||
|
||||
/obj/item/storage/box/rubbershot
|
||||
name = "box of rubber shots"
|
||||
desc = "A box full of rubber shots, designed for riot shotguns."
|
||||
desc = "A box full of rubber shots designed for shotguns. The box itself is designed for holding any kind of shotgun shell."
|
||||
icon_state = "rubbershot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/rubbershot/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 7
|
||||
STR.set_holdable(list(/obj/item/ammo_casing/shotgun))
|
||||
|
||||
/obj/item/storage/box/rubbershot/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
|
||||
/obj/item/storage/box/lethalshot
|
||||
name = "box of lethal shotgun shots"
|
||||
desc = "A box full of lethal shots, designed for riot shotguns."
|
||||
desc = "A box full of lethal shots designed for shotguns. The box itself is designed for holding any kind of shotgun shell."
|
||||
icon_state = "lethalshot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/lethalshot/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 7
|
||||
STR.set_holdable(list(/obj/item/ammo_casing/shotgun))
|
||||
|
||||
/obj/item/storage/box/lethalshot/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
|
||||
/obj/item/storage/box/breacherslug
|
||||
name = "box of breaching shotgun shells"
|
||||
desc = "A box full of breaching slugs, designed for rapid entry."
|
||||
desc = "A box full of breaching slugs designed for rapid entry. The box itself is designed for holding any kind of shotgun shell."
|
||||
icon_state = "breachershot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/breacherslug/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 7
|
||||
STR.set_holdable(list(/obj/item/ammo_casing/shotgun))
|
||||
|
||||
/obj/item/storage/box/breacherslug/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/breacher(src)
|
||||
|
||||
/obj/item/storage/box/beanbag
|
||||
name = "box of beanbags"
|
||||
desc = "A box full of beanbag shells."
|
||||
desc = "A box full of beanbag shells designed for shotguns. The box itself is designed for holding any kind of shotgun shell."
|
||||
icon_state = "rubbershot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/beanbag/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 7
|
||||
STR.set_holdable(list(/obj/item/ammo_casing/shotgun))
|
||||
|
||||
/obj/item/storage/box/beanbag/PopulateContents()
|
||||
for(var/i in 1 to 6)
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
|
||||
/obj/item/storage/box/actionfigure
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "Red Reverse"
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "sc_Red Reverse_uno"
|
||||
desc = "a card."
|
||||
desc = "A card."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/used = FALSE //has this been used before? If not, give no hints about it's nature
|
||||
|
||||
|
||||
@@ -944,7 +944,7 @@
|
||||
|
||||
/obj/item/toy/cards/singlecard
|
||||
name = "card"
|
||||
desc = "a card"
|
||||
desc = "A card."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "singlecard_down_nanotrasen"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
@@ -231,14 +231,16 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
|
||||
/obj/item/katana/cursed/basalt
|
||||
name = "basalt katana"
|
||||
desc = "a katana made out of hardened basalt. Deals more damage to lavaland mobs."
|
||||
desc = "a katana made out of hardened basalt. Particularly damaging to lavaland fauna. (Activate this item in hand to dodge roll in the direction you're facing)"
|
||||
icon_state = "basalt_katana"
|
||||
item_state = "basalt_katana"
|
||||
force = 25
|
||||
force = 18
|
||||
block_chance = 20
|
||||
|
||||
var/fauna_damage_bonus = 35
|
||||
var/fauna_damage_type = BURN
|
||||
var/fauna_damage_bonus = 52
|
||||
var/fauna_damage_type = BRUTE
|
||||
var/next_roll
|
||||
var/roll_dist = 3
|
||||
|
||||
/obj/item/katana/cursed/basalt/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
@@ -250,6 +252,33 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
L.apply_damage(fauna_damage_bonus,fauna_damage_type)
|
||||
playsound(L, 'sound/weapons/sear.ogg', 100, 1)
|
||||
|
||||
/obj/item/katana/cursed/basalt/attack_self(mob/living/user)
|
||||
if(world.time > next_roll)
|
||||
var/stam_cost = 15
|
||||
var/turf/T = get_turf(user)
|
||||
if(is_mining_level(T.z))
|
||||
stam_cost = 5
|
||||
var/turf/landing_turf = get_ranged_target_turf(user, user.dir, roll_dist)
|
||||
var/spin_direction = FALSE
|
||||
user.adjustStaminaLoss(stam_cost)
|
||||
if (user.getStaminaLoss() >= 100)
|
||||
user.throw_at(landing_turf, 2, 2)
|
||||
user.Paralyze(4 SECONDS)
|
||||
user.visible_message(span_warning("You're too tired tired to finish the roll!"))
|
||||
else
|
||||
playsound(user, 'yogstation/sound/items/dodgeroll.ogg', 50, TRUE)
|
||||
user.apply_status_effect(STATUS_EFFECT_DODGING)
|
||||
if(user.dir == EAST || user.dir == NORTH)
|
||||
spin_direction = TRUE
|
||||
passtable_on(user, src)
|
||||
user.setMovetype(user.movement_type | FLYING)
|
||||
user.safe_throw_at(landing_turf, 4, 1, spin = FALSE)
|
||||
user.SpinAnimation(speed = 3, loops = 1, clockwise = spin_direction, segments = 3, parallel = TRUE)
|
||||
passtable_off(user, src)
|
||||
user.setMovetype(user.movement_type & ~FLYING)
|
||||
next_roll = world.time + 1 SECONDS
|
||||
else
|
||||
to_chat(user, span_notice("You need to catch your breath before you can roll again!"))
|
||||
|
||||
|
||||
/obj/item/katana/suicide_act(mob/user)
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
|
||||
/obj/structure/closet/bluespace/external/Destroy()
|
||||
SSbluespace_locker.external_locker = null
|
||||
SSbluespace_locker.bluespaceify_random_locker()
|
||||
SSbluespace_locker.redistribute_locker()
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/bluespace/external/can_open()
|
||||
|
||||
@@ -63,8 +63,9 @@
|
||||
new /obj/item/storage/lockbox/loyalty(src)
|
||||
new /obj/item/clothing/mask/gas/sechailer/swat(src)
|
||||
new /obj/item/storage/box/flashbangs(src)
|
||||
new /obj/item/shield/riot/tele(src)
|
||||
new /obj/item/storage/belt/security/chief/full(src)
|
||||
new /obj/item/restraints/handcuffs(src)
|
||||
new /obj/item/assembly/flash/handheld(src)
|
||||
new /obj/item/melee/baton/loaded(src)
|
||||
new /obj/item/gun/energy/e_gun/hos(src)
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
new /obj/item/pinpointer/nuke(src)
|
||||
|
||||
@@ -531,7 +531,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
||||
/turf/AllowDrop()
|
||||
return TRUE
|
||||
|
||||
/turf/proc/add_vomit_floor(mob/living/M, toxvomit = NONE)
|
||||
/turf/proc/add_vomit_floor(mob/living/M, toxvomit = NONE, purge_ratio = 0.1)
|
||||
|
||||
var/obj/effect/decal/cleanable/vomit/V = new /obj/effect/decal/cleanable/vomit(src, M.get_static_viruses())
|
||||
|
||||
@@ -540,19 +540,21 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
||||
V = locate() in src
|
||||
if(!V)
|
||||
return
|
||||
// Make toxins and blazaam vomit look different
|
||||
// Apply the proper icon set based on vomit type
|
||||
if(toxvomit == VOMIT_PURPLE)
|
||||
V.icon_state = "vomitpurp_[pick(1,4)]"
|
||||
else if (toxvomit == VOMIT_TOXIC)
|
||||
V.icon_state = "vomittox_[pick(1,4)]"
|
||||
if (iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(C.reagents)
|
||||
clear_reagents_to_vomit_pool(C,V)
|
||||
if (purge_ratio && iscarbon(M))
|
||||
clear_reagents_to_vomit_pool(M, V, purge_ratio)
|
||||
|
||||
/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V)
|
||||
M.reagents.trans_to(V, M.reagents.total_volume / 10, transfered_by = M)
|
||||
for(var/datum/reagent/R in M.reagents.reagent_list) //clears the stomach of anything that might be digested as food
|
||||
/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V, purge_ratio = 0.1)
|
||||
var/chemicals_lost = M.reagents.total_volume * purge_ratio
|
||||
if(V.reagents.total_volume + chemicals_lost > V.reagents.maximum_volume)
|
||||
V.reagents.total_volume -= chemicals_lost
|
||||
M.reagents.trans_to(V, chemicals_lost, transfered_by = M)
|
||||
//clear the stomach of anything even not food
|
||||
for(var/datum/reagent/R in M.reagents.reagent_list)
|
||||
if(istype(R, /datum/reagent/consumable))
|
||||
var/datum/reagent/consumable/nutri_check = R
|
||||
if(nutri_check.nutriment_factor >0)
|
||||
|
||||
@@ -200,6 +200,8 @@
|
||||
//omg this is dumb, just fill in both their tickets
|
||||
// yogs start - Yog Tickets
|
||||
admin_ticket_log(src, msg, FALSE)
|
||||
if(!recipient.current_ticket) // creates a ticket if there is no ticket of this user
|
||||
new /datum/admin_help(msg, recipient, TRUE) // yogs - Yog Tickets
|
||||
if(recipient.current_ticket && !recipient.current_ticket.handling_admin)
|
||||
recipient.current_ticket.Administer()
|
||||
// yogs end - Yog Tickets
|
||||
|
||||
@@ -106,15 +106,15 @@
|
||||
if(bloodsucker_minds.current)
|
||||
switch(danger_level)
|
||||
if(1)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_3.ogg', 50 + danger_level, 1)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_3.ogg', 50 + danger_level, TRUE)
|
||||
if(2)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_5.ogg', 50 + danger_level, 1)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_5.ogg', 50 + danger_level, TRUE)
|
||||
if(3)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/effects/alert.ogg', 75, TRUE)
|
||||
if(4)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, 1)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, TRUE)
|
||||
if(5)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, 1)
|
||||
bloodsucker_minds.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, TRUE)
|
||||
if(vassalwarn != "")
|
||||
for(var/datum/mind/vassal_minds as anything in get_antag_minds(/datum/antagonist/vassal))
|
||||
if(!istype(vassal_minds))
|
||||
@@ -136,7 +136,7 @@
|
||||
var/datum/antagonist/bloodsucker/bloodsuckerdatum = bloodsucker_minds.has_antag_datum(/datum/antagonist/bloodsucker)
|
||||
if(!istype(bloodsuckerdatum))
|
||||
continue
|
||||
if(istype(bloodsucker_minds.current.loc, /obj/structure))
|
||||
if(isstructure(bloodsucker_minds.current.loc))
|
||||
if(istype(bloodsucker_minds.current.loc, /obj/structure/closet/crate/coffin)) // Coffins offer the BEST protection
|
||||
SEND_SIGNAL(bloodsucker_minds.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/coffinsleep)
|
||||
continue
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
// Give the other Frenzy effects
|
||||
ADD_TRAIT(owner, TRAIT_MUTE, FRENZY_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_DEAF, FRENZY_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_REDUCED_DAMAGE_SLOWDOWN, FRENZY_TRAIT)
|
||||
if(user.IsAdvancedToolUser())
|
||||
was_tooluser = TRUE
|
||||
ADD_TRAIT(owner, TRAIT_MONKEYLIKE, SPECIES_TRAIT)
|
||||
@@ -80,6 +81,7 @@
|
||||
to_chat(owner, span_warning("You come back to your senses."))
|
||||
REMOVE_TRAIT(owner, TRAIT_MUTE, FRENZY_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_DEAF, FRENZY_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_REDUCED_DAMAGE_SLOWDOWN, FRENZY_TRAIT)
|
||||
if(was_tooluser)
|
||||
REMOVE_TRAIT(owner, TRAIT_MONKEYLIKE, SPECIES_TRAIT)
|
||||
was_tooluser = FALSE
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(/datum/antagonist/bloodsucker)
|
||||
if(bloodsuckerdatum)
|
||||
. += ""
|
||||
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + (bloodsuckerdatum.humanity_lost * 10)]"
|
||||
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + (bloodsuckerdatum.humanity_lost * 10)]"
|
||||
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + bloodsuckerdatum.humanity_lost * 10]"
|
||||
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10]"
|
||||
. += "Blood Drank: [bloodsuckerdatum.total_blood_drank]"
|
||||
if(bloodsuckerdatum.current_task)
|
||||
. += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
|
||||
|
||||
@@ -196,7 +196,8 @@
|
||||
if(bloodsucker)
|
||||
if(ishuman(bloodsucker))
|
||||
var/mob/living/carbon/human/user = bloodsucker
|
||||
if(user.blood_volume < 560)
|
||||
var/datum/antagonist/bloodsucker/bloodsuckerdatum = src.mind.has_antag_datum(/datum/antagonist/bloodsucker)
|
||||
if(user.blood_volume < FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10)
|
||||
user.blood_volume += 10
|
||||
adjustFireLoss(2.5)
|
||||
updatehealth() //3 minutes to die
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
var/humanity_lost = 0
|
||||
///Have we been broken the Masquerade?
|
||||
var/broke_masquerade = FALSE
|
||||
///Blood required to enter Frenzy
|
||||
var/frenzy_threshold = FRENZY_THRESHOLD_ENTER
|
||||
///If we are currently in a Frenzy
|
||||
var/frenzied = FALSE
|
||||
///If we have a task assigned
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
if(DIGITIGRADE in user_species.species_traits)
|
||||
user_species.species_traits -= DIGITIGRADE
|
||||
minortransformdone = TRUE
|
||||
user_species.punchdamagelow += 5.0
|
||||
user_species.punchdamagehigh += 5.0 //stronk
|
||||
user_species.armor += 30
|
||||
user.dna.species.punchdamagelow += 5.0
|
||||
user.dna.species.punchdamagehigh += 5.0 //stronk
|
||||
user.dna.species.armor += 30
|
||||
to_chat(user, span_notice("You aren't strong enough to morph into something stronger! But you do certainly feel more feral and stronger than before."))
|
||||
else
|
||||
to_chat(user, span_notice("You still haven't evolved your ability yet."))
|
||||
@@ -56,9 +56,9 @@
|
||||
if(DIGITIGRADE in user_species.species_traits)
|
||||
user_species.species_traits -= DIGITIGRADE
|
||||
mediumtransformdone = TRUE
|
||||
user_species.punchdamagelow += 7.5
|
||||
user_species.punchdamagehigh += 7.5 //very stronk
|
||||
user_species.armor += 35
|
||||
user.dna.species.punchdamagelow += 7.5
|
||||
user.dna.species.punchdamagehigh += 7.5 //very stronk
|
||||
user.dna.species.armor += 35
|
||||
to_chat(owner, span_notice("You transform into a gorrila-ey beast, you feel stronger!"))
|
||||
else
|
||||
to_chat(owner, span_notice("You still haven't evolved your ability yet."))
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
if(GOHOME_FLICKER_TWO)
|
||||
INVOKE_ASYNC(src, .proc/flicker_lights, 4, 60)
|
||||
if(GOHOME_TELEPORT)
|
||||
do_mob(user, user, 1 SECONDS, TRUE)
|
||||
INVOKE_ASYNC(src, .proc/teleport_to_coffin, user)
|
||||
teleporting_stage++
|
||||
|
||||
@@ -64,24 +65,24 @@
|
||||
. = ..()
|
||||
if(!.)
|
||||
return FALSE
|
||||
if(!isturf(owner.loc))
|
||||
if(!isturf(user.loc))
|
||||
return FALSE
|
||||
if(!bloodsuckerdatum_power.coffin)
|
||||
to_chat(owner, span_warning("Your coffin has been destroyed! You no longer have a destination."))
|
||||
to_chat(user, span_warning("Your coffin has been destroyed! You no longer have a destination."))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/action/bloodsucker/gohome/proc/flicker_lights(flicker_range, beat_volume)
|
||||
for(var/obj/machinery/light/nearby_lights in view(flicker_range, get_turf(owner)))
|
||||
nearby_lights.flicker(5)
|
||||
playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, 1)
|
||||
playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, TRUE)
|
||||
|
||||
/datum/action/bloodsucker/gohome/proc/teleport_to_coffin(mob/living/carbon/user)
|
||||
var/drop_item = FALSE
|
||||
var/turf/current_turf = get_turf(owner)
|
||||
var/turf/current_turf = get_turf(user)
|
||||
// If we aren't in the dark, anyone watching us will cause us to drop out stuff
|
||||
if(current_turf && current_turf.lighting_object && current_turf.get_lumcount() >= 0.2)
|
||||
for(var/mob/living/watchers in viewers(world.view, get_turf(owner)) - owner)
|
||||
for(var/mob/living/watchers in viewers(world.view, get_turf(user)) - user)
|
||||
if(!watchers.client)
|
||||
continue
|
||||
if(watchers.has_unlimited_silicon_privilege)
|
||||
@@ -99,10 +100,10 @@
|
||||
var/obj/item/legcuffs = user.legcuffed
|
||||
user.dropItemToGround(legcuffs)
|
||||
if(drop_item)
|
||||
for(var/obj/item/literally_everything in owner)
|
||||
owner.dropItemToGround(literally_everything, TRUE)
|
||||
for(var/obj/item/literally_everything in user)
|
||||
user.dropItemToGround(literally_everything, TRUE)
|
||||
|
||||
playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, 1)
|
||||
playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, TRUE)
|
||||
var/datum/effect_system/steam_spread/bloodsucker/puff = new /datum/effect_system/steam_spread/bloodsucker()
|
||||
puff.set_up(3, 0, current_turf)
|
||||
puff.start()
|
||||
@@ -112,13 +113,13 @@
|
||||
new new_mob(current_turf)
|
||||
/// TELEPORT: Move to Coffin & Close it!
|
||||
user.set_resting(TRUE, TRUE, FALSE)
|
||||
do_teleport(owner, bloodsuckerdatum_power.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
do_teleport(user, bloodsuckerdatum_power.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
user.Stun(3 SECONDS, TRUE)
|
||||
// Puts me inside.
|
||||
if(!bloodsuckerdatum_power.coffin.insert(owner))
|
||||
if(!bloodsuckerdatum_power.coffin.close(user))
|
||||
// CLOSE LID: If fail, force me in.
|
||||
bloodsuckerdatum_power.coffin.close(owner)
|
||||
playsound(bloodsuckerdatum_power.coffin.loc, bloodsuckerdatum_power.coffin.close_sound, 15, 1, -3)
|
||||
bloodsuckerdatum_power.coffin.insert(user)
|
||||
playsound(bloodsuckerdatum_power.coffin.loc, bloodsuckerdatum_power.coffin.close_sound, 15, TRUE, -3)
|
||||
|
||||
DeactivatePower()
|
||||
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
if(!istype(closet))
|
||||
return FALSE
|
||||
closet.visible_message(
|
||||
span_warning("closet] tears apart as [user] bashes it open from within!"),
|
||||
span_warning("closet] tears apart as you bash it open from within!"),
|
||||
span_warning("[closet] tears apart as [user] bashes it open from within!"),
|
||||
span_warning("[closet] tears apart as you bash it open from within!"),
|
||||
)
|
||||
to_chat(user, span_warning("We bash [closet] wide open!"))
|
||||
addtimer(CALLBACK(src, .proc/break_closet, user, closet), 1)
|
||||
@@ -80,7 +80,7 @@
|
||||
|
||||
// Did we end up using our ability? If so, play the sound effect and return TRUE
|
||||
if(used)
|
||||
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, 1, -1)
|
||||
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, TRUE, -1)
|
||||
return used
|
||||
|
||||
// This is its own proc because its done twice, to repeat code copypaste.
|
||||
@@ -96,7 +96,7 @@
|
||||
return FALSE
|
||||
var/mob/pulled_mob = owner.pulledby
|
||||
var/pull_power = pulled_mob.grab_state
|
||||
playsound(get_turf(pulled_mob), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
playsound(get_turf(pulled_mob), 'sound/effects/woodhit.ogg', 75, TRUE, -1)
|
||||
// Knock Down (if Living)
|
||||
if(isliving(pulled_mob))
|
||||
var/mob/living/hit_target = pulled_mob
|
||||
@@ -133,7 +133,7 @@
|
||||
target.Knockdown(min(5, rand(10, 10 * powerlevel)))
|
||||
// Attack!
|
||||
to_chat(owner, span_warning("You punch [target]!"))
|
||||
playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1)
|
||||
playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, TRUE, -1)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_SMASH)
|
||||
var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected))
|
||||
target.apply_damage(hitStrength, BRUTE, affecting)
|
||||
@@ -153,11 +153,11 @@
|
||||
return FALSE
|
||||
target_closet.visible_message(span_danger("[target_closet] breaks open as [user] bashes it!"))
|
||||
addtimer(CALLBACK(src, .proc/break_closet, user, target_closet), 1)
|
||||
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, 1, -1)
|
||||
playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, TRUE, -1)
|
||||
// Target Type: Door
|
||||
else if(istype(target_atom, /obj/machinery/door) && level_current >= 4)
|
||||
var/obj/machinery/door/target_airlock = target_atom
|
||||
playsound(get_turf(user), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1)
|
||||
playsound(get_turf(user), 'sound/machines/airlock_alien_prying.ogg', 40, TRUE, -1)
|
||||
to_chat(owner, span_warning("You prepare to tear open [target_airlock]..."))
|
||||
if(!do_mob(user, target_airlock, 2.5 SECONDS))
|
||||
return FALSE
|
||||
@@ -165,7 +165,7 @@
|
||||
target_airlock.visible_message(span_danger("[target_airlock] breaks open as [user] bashes it!"))
|
||||
user.Stun(10)
|
||||
user.do_attack_animation(target_airlock, ATTACK_EFFECT_SMASH)
|
||||
playsound(get_turf(target_airlock), 'sound/effects/bang.ogg', 30, 1, -1)
|
||||
playsound(get_turf(target_airlock), 'sound/effects/bang.ogg', 30, TRUE, -1)
|
||||
target_airlock.open(2) // open(2) is like a crowbar or jaws of life.
|
||||
|
||||
/datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/target_atom)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
to_chat(owner.current, span_warning("You hit the maximum amount of lost Humanity, you are far from Human."))
|
||||
return
|
||||
humanity_lost += value
|
||||
to_chat(owner.current, span_warning("You feel as if you lost some of your humanity, you will now enter Frenzy at [FRENZY_THRESHOLD_ENTER + (humanity_lost * 10)] Blood."))
|
||||
to_chat(owner.current, span_warning("You feel as if you lost some of your humanity, you will now enter Frenzy at [FRENZY_THRESHOLD_ENTER + humanity_lost * 10] Blood."))
|
||||
|
||||
/// mult: SILENT feed is 1/3 the amount
|
||||
/datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1, power_level)
|
||||
@@ -236,7 +236,7 @@
|
||||
// BLOOD_VOLUME_GOOD: [336] - Pale
|
||||
// handled in bloodsucker_integration.dm
|
||||
// BLOOD_VOLUME_EXIT: [560] - Exit Frenzy (If in one) This is high because we want enough to kill the poor soul they feed off of.
|
||||
if(owner.current.blood_volume >= FRENZY_THRESHOLD_EXIT && frenzied)
|
||||
if(owner.current.blood_volume >= (FRENZY_THRESHOLD_EXIT + humanity_lost * 10) && frenzied)
|
||||
owner.current.remove_status_effect(STATUS_EFFECT_FRENZY)
|
||||
// BLOOD_VOLUME_BAD: [224] - Jitter
|
||||
if(owner.current.blood_volume < BLOOD_VOLUME_BAD(owner.current) && prob(0.5) && !HAS_TRAIT(owner.current, TRAIT_NODEATH) && !HAS_TRAIT(owner.current, TRAIT_MASQUERADE))
|
||||
@@ -246,7 +246,7 @@
|
||||
owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD(owner.current)))
|
||||
|
||||
// The more blood, the better the Regeneration, get too low blood, and you enter Frenzy.
|
||||
if(owner.current.blood_volume < (FRENZY_THRESHOLD_ENTER + (humanity_lost * 10)) && !frenzied)
|
||||
if(owner.current.blood_volume < (FRENZY_THRESHOLD_ENTER + humanity_lost * 10) && !frenzied)
|
||||
if(!iscarbon(owner.current))
|
||||
return
|
||||
if(owner.current.stat == DEAD)
|
||||
@@ -276,18 +276,18 @@
|
||||
owner.current.apply_status_effect(STATUS_EFFECT_FRENZY)
|
||||
return
|
||||
if(2 to INFINITY)
|
||||
AddBloodVolume(560 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again
|
||||
AddBloodVolume(FRENZY_THRESHOLD_EXIT + humanity_lost * 10 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again
|
||||
if(!do_mob(user, user, 2 SECONDS, TRUE))
|
||||
return
|
||||
playsound(user.loc, 'sound/weapons/slash.ogg', 25, 1)
|
||||
playsound(user.loc, 'sound/weapons/slash.ogg', 25, TRUE)
|
||||
to_chat(user, span_warning("<i><b>You skin rips and tears.</b></i>"))
|
||||
if(!do_mob(user, user, 1 SECONDS, TRUE))
|
||||
return
|
||||
playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, 1)
|
||||
playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, TRUE)
|
||||
to_chat(user, span_warning("<i><b>You heart pumps blackened blood into your veins as your skin turns into fur.</b></i>"))
|
||||
if(!do_mob(user, user, 1 SECONDS, TRUE))
|
||||
return
|
||||
playsound(user.loc, 'sound/weapons/slice.ogg', 25, 1)
|
||||
playsound(user.loc, 'sound/weapons/slice.ogg', 25, TRUE)
|
||||
to_chat(user, span_boldnotice("<i><b><FONT size = 3>YOU HAVE AWOKEN.</b></i>"))
|
||||
var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww
|
||||
if(!ww || ww.stat == DEAD)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES)
|
||||
if (E)
|
||||
E.flash_protect = 2 //Adjust the user's eyes' flash protection
|
||||
if(istype(E, /obj/item/organ/eyes/preternis))
|
||||
if(istype(E, /obj/item/organ/eyes/robotic/preternis))
|
||||
E.Remove(user, 1)
|
||||
var/obj/item/organ/eyes/neweyes = new(user)
|
||||
neweyes.Insert(user, 1)
|
||||
@@ -54,4 +54,4 @@
|
||||
else
|
||||
E.flash_protect = 0
|
||||
user.update_sight()
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
H.leave_victim()
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.vomit(0, toxic = TRUE)
|
||||
C.vomit(0)
|
||||
to_chat(user, span_notice("A parasite exits our form."))
|
||||
..()
|
||||
var/list/bad_organs = list(
|
||||
@@ -30,7 +30,7 @@
|
||||
O.Remove(user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.vomit(0, toxic = TRUE)
|
||||
C.vomit(0)
|
||||
O.forceMove(get_turf(user))
|
||||
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10)
|
||||
|
||||
@@ -145,3 +145,18 @@
|
||||
C.cremate(usr)
|
||||
|
||||
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50)
|
||||
|
||||
|
||||
/obj/item/assembly/control/holosign
|
||||
name = "holosign controller"
|
||||
desc = "A remote controller for a holosign."
|
||||
|
||||
/obj/item/assembly/control/holosign/activate()
|
||||
if(cooldown)
|
||||
return
|
||||
cooldown = TRUE
|
||||
for(var/obj/machinery/holosign/H in GLOB.machines)
|
||||
if(H.id == id)
|
||||
H.toggle()
|
||||
|
||||
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50)
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
/obj/item/clothing/gloves/bracer/cuffs
|
||||
name = "rabid cuffs"
|
||||
desc = "Chainless manacles fashioned after one of the hungriest slaughter demons. Wearing these invokes a hunger in the wearer that can only be sated by bloodshed."
|
||||
desc = "Wristbands fashioned after one of the hungriest slaughter demons. Wearing these invokes a hunger in the wearer that can only be sated by bloodshed."
|
||||
icon_state = "cuff"
|
||||
item_state = "cuff"
|
||||
var/obj/effect/proc_holder/swipe/swipe_ability
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
obj/effect/proc_holder/swipe
|
||||
name = "Swipe"
|
||||
desc = "Swipe at a target area, dealing damage and consuming dead entities to heal yourself. Creatures take 30 damage while people and cyborgs take 10 damage. Consumed creatures explode into gibs and give the most healing, and people and cyborgs heal for the least. People and cyborgs who have been thoroughly burned and bruised heal you for slightly more! People are ineligible for total consumption."
|
||||
desc = "Swipe at a target area, dealing damage to heal yourself. Creatures take 60 damage while people and cyborgs take 20 damage. Living creatures hit with this ability will heal the user for 13 brute/burn/poison while dead ones heal for 20 and get butchered, while killing a creature with a swipe will heal the user for 33. People and cyborgs hit will heal for 5."
|
||||
action_background_icon_state = "bg_demon"
|
||||
action_icon = 'icons/mob/actions/actions_items.dmi'
|
||||
action_icon_state = "cuff"
|
||||
@@ -154,32 +154,33 @@ obj/effect/proc_holder/swipe
|
||||
return
|
||||
if(!istype(T))
|
||||
return
|
||||
if(!(T in range(9, caller)))
|
||||
to_chat(caller, warning("The target is too far!"))
|
||||
return
|
||||
new /obj/effect/temp_visual/bubblegum_hands/rightpaw(T)
|
||||
new /obj/effect/temp_visual/bubblegum_hands/rightthumb(T)
|
||||
to_chat(L, span_userdanger("A claw swipes at you!"))
|
||||
to_chat(L, span_userdanger("Claws reach out from the floor and maul you!"))
|
||||
to_chat(ranged_ability_user, "You summon claws at [L]'s location!")
|
||||
L.visible_message(span_warning("[caller] rends [L]!"))
|
||||
for(L in range(0,T))
|
||||
playsound(T, 'sound/magic/demon_attack1.ogg', 80, 5, -1)
|
||||
if(isanimal(L))
|
||||
L.adjustBruteLoss(30)
|
||||
L.adjustBruteLoss(60)
|
||||
if(L.stat != DEAD)
|
||||
caller.adjustBruteLoss(-13)
|
||||
caller.adjustFireLoss(-13)
|
||||
caller.adjustToxLoss(-13)
|
||||
if(L.stat == DEAD)
|
||||
L.gib()
|
||||
to_chat(caller, span_notice("You're able to consume the body entirely!"))
|
||||
caller.adjustBruteLoss(-20)
|
||||
caller.adjustFireLoss(-20)
|
||||
caller.adjustToxLoss(-20)
|
||||
caller.blood_volume = BLOOD_VOLUME_NORMAL(caller)*1.10
|
||||
L.adjustBruteLoss(10)
|
||||
if(L.getBruteLoss()+L.getFireLoss() >= 299)
|
||||
to_chat(caller, span_notice("You're able to consume a bit more of the body, as it was previously softened up!"))
|
||||
caller.adjustBruteLoss(-15)
|
||||
caller.adjustFireLoss(-15)
|
||||
caller.adjustToxLoss(-15)
|
||||
caller.blood_volume = BLOOD_VOLUME_NORMAL(caller)*1.05
|
||||
if(L.stat == DEAD)
|
||||
if(iscarbon(L))
|
||||
L.adjustBruteLoss(20)
|
||||
caller.adjustBruteLoss(-5)
|
||||
caller.adjustFireLoss(-5)
|
||||
caller.adjustToxLoss(-5)
|
||||
caller.blood_volume = BLOOD_VOLUME_NORMAL(caller)*1.01
|
||||
COOLDOWN_START(src, scan_cooldown, cooldown)
|
||||
addtimer(CALLBACK(src, .proc/cooldown_over, ranged_ability_user), cooldown)
|
||||
remove_ranged_ability()
|
||||
|
||||
@@ -469,6 +469,18 @@
|
||||
list_reagents = list(/datum/reagent/consumable/space_cola = 30)
|
||||
foodtype = SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/rootbeer
|
||||
name = "Root Beer"
|
||||
desc = "A soft drink made from roots. Non-Alcoholic."
|
||||
custom_price = 10
|
||||
icon_state = "Rootbeer_Mug"
|
||||
list_reagents = list(/datum/reagent/consumable/rootbeer = 30)
|
||||
foodtype = SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/rootbeer/Initialize()
|
||||
icon_state = pick("Rootbeer_Mug","Rootbeer_AW","Rootbeer_Barq")
|
||||
. = ..()
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/tonic
|
||||
name = "T-Borg's tonic water"
|
||||
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
|
||||
|
||||
@@ -118,6 +118,7 @@
|
||||
new V(podman)
|
||||
podman.hardset_dna(null,null,null,podman.real_name,blood_type, new /datum/species/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman
|
||||
podman.set_cloned_appearance()
|
||||
podman.dna.species.exotic_blood = max(reagents_add) || /datum/reagent/water
|
||||
log_cloning("[key_name(mind)] cloned as a podman via [src] in [parent] at [AREACOORD(parent)].")
|
||||
to_chat(podman, span_notice("You do not remember your death, how you died, or who killed you. <a href='https://forums.yogstation.net/help/rules/#rule-1_6'>See rule 1.6</a>.")) //yogs
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
id_type = /obj/item/card/id/silver
|
||||
pda_type = /obj/item/pda/heads/hos
|
||||
|
||||
belt = /obj/item/storage/belt/security/chief/full
|
||||
ears = /obj/item/radio/headset/heads/hos/alt
|
||||
uniform = /obj/item/clothing/under/rank/head_of_security
|
||||
uniform_skirt = /obj/item/clothing/under/rank/head_of_security/skirt
|
||||
@@ -56,9 +57,7 @@
|
||||
head = /obj/item/clothing/head/HoS/beret
|
||||
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
|
||||
suit_store = /obj/item/gun/energy/e_gun
|
||||
r_pocket = /obj/item/assembly/flash/handheld
|
||||
l_pocket = /obj/item/restraints/handcuffs
|
||||
backpack_contents = list(/obj/item/melee/baton/loaded=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removed departmental budget ID //come here often?
|
||||
backpack_contents = list(/obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removed departmental budget ID //come here often?
|
||||
|
||||
backpack = /obj/item/storage/backpack/security
|
||||
satchel = /obj/item/storage/backpack/satchel/sec
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
/datum/outfit/job/miner
|
||||
name = "Shaft Miner"
|
||||
var/static/gps_number = 1
|
||||
jobtype = /datum/job/mining
|
||||
|
||||
pda_type = /obj/item/pda/shaftminer
|
||||
@@ -59,6 +60,16 @@
|
||||
|
||||
chameleon_extras = /obj/item/gun/energy/kinetic_accelerator
|
||||
|
||||
/datum/outfit/job/miner/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
if(H.stat == DEAD)
|
||||
return
|
||||
for(var/obj/item/gps/G in H.contents)
|
||||
G.gpstag = "MINE[gps_number]"
|
||||
gps_number ++
|
||||
|
||||
/datum/outfit/job/miner/equipped
|
||||
name = "Shaft Miner (Equipment)"
|
||||
suit = /obj/item/clothing/suit/hooded/explorer
|
||||
|
||||
@@ -1136,9 +1136,10 @@ GLOBAL_LIST_EMPTY(bloodmen_list)
|
||||
#define COOLDOWN 150
|
||||
#define COOLDOWN_HUMAN 100
|
||||
#define COOLDOWN_ANIMAL 60
|
||||
#define COOLDOWN_SPLASH 100
|
||||
/obj/item/melee/knuckles
|
||||
name = "bloody knuckles"
|
||||
desc = "Knuckles born of a desire for violence. Made to ensure their victims stay in the fight until there's a winner."
|
||||
desc = "Knuckles born of a desire for violence. Made to ensure their victims stay in the fight until there's a winner. Activating these knuckles covers several meters ahead of the user with blood."
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
icon_state = "bloodyknuckle"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
||||
@@ -1148,7 +1149,9 @@ GLOBAL_LIST_EMPTY(bloodmen_list)
|
||||
force = 18
|
||||
var/next_reach = 0
|
||||
var/next_grip = 0
|
||||
var/next_splash = 0
|
||||
var/next_knuckle = 0
|
||||
var/splash_range = 9
|
||||
attack_verb = list("thrashed", "pummeled", "walloped")
|
||||
actions_types = list(/datum/action/item_action/reach, /datum/action/item_action/visegrip)
|
||||
|
||||
@@ -1168,6 +1171,19 @@ GLOBAL_LIST_EMPTY(bloodmen_list)
|
||||
return
|
||||
next_knuckle = world.time + COOLDOWN_ANIMAL
|
||||
|
||||
/obj/item/melee/knuckles/attack_self(mob/living/user)
|
||||
var/turf/T = get_turf(user)
|
||||
if(next_splash > world.time)
|
||||
to_chat(user, span_warning("You can't do that yet!"))
|
||||
return
|
||||
user.visible_message(span_warning("[user] splashes blood from their knuckles!"))
|
||||
playsound(T, 'sound/effects/splat.ogg', 80, 5, -1)
|
||||
for(var/i = 0 to splash_range)
|
||||
if(T)
|
||||
user.add_splatter_floor(T)
|
||||
T = get_step(T,user.dir)
|
||||
next_splash = world.time + COOLDOWN
|
||||
|
||||
/obj/item/melee/knuckles/ui_action_click(mob/living/user, action)
|
||||
var/mob/living/U = user
|
||||
if(istype(action, /datum/action/item_action/reach))
|
||||
@@ -1575,15 +1591,15 @@ GLOBAL_LIST_EMPTY(bloodmen_list)
|
||||
|
||||
/obj/item/organ/grandcore/Remove(mob/living/carbon/H, special = 0)
|
||||
H.faction -= "blooded"
|
||||
H.RemoveSpell (/obj/effect/proc_holder/spell/targeted/touch/raise, /obj/effect/proc_holder/spell/aoe_turf/horde)
|
||||
H.RemoveSpell (new /obj/effect/proc_holder/spell/aoe_turf/horde)
|
||||
H.RemoveSpell (/obj/effect/proc_holder/spell/targeted/touch/raise)
|
||||
H.RemoveSpell (/obj/effect/proc_holder/spell/aoe_turf/horde)
|
||||
..()
|
||||
|
||||
/datum/action/item_action/organ_action/threebloodlings
|
||||
name = "Summon bloodlings"
|
||||
desc = "Summon a conjure a few bloodlings at the cost of 13% blood (8 brain damage for those without blood)."
|
||||
desc = "Summon a conjure a few bloodlings at the cost of 6% blood or 8 brain damage for races without blood."
|
||||
var/next_expulsion = 0
|
||||
var/cooldown = 10 //wheres the risk if it has a reasonable cooldown?
|
||||
var/cooldown = 10
|
||||
|
||||
/datum/action/item_action/organ_action/threebloodlings/Trigger()
|
||||
var/mob/living/carbon/H = owner
|
||||
@@ -1596,6 +1612,6 @@ GLOBAL_LIST_EMPTY(bloodmen_list)
|
||||
to_chat(H, "<span class ='userdanger'>Your head pounds as you produce bloodlings!</span>")
|
||||
else
|
||||
to_chat(H, "<span class ='userdanger'>You spill your blood, and it comes to life as bloodlings!</span>")
|
||||
H.blood_volume -= 70 //like 13% of your blood taken
|
||||
H.blood_volume -= 35
|
||||
spawn_atom_to_turf(/mob/living/simple_animal/hostile/asteroid/hivelordbrood/bloodling, owner, 3, TRUE) //think 1 in 4 is a good chance of not being targeted by fauna
|
||||
next_expulsion = world.time + cooldown
|
||||
|
||||
@@ -498,8 +498,8 @@
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, toxic = FALSE)
|
||||
if(HAS_TRAIT(src, TRAIT_NOHUNGER))
|
||||
/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, vomit_type = VOMIT_TOXIC, harm = TRUE, force = FALSE, purge_ratio = 0.1)
|
||||
if((HAS_TRAIT(src, TRAIT_NOHUNGER) || HAS_TRAIT(src, TRAIT_TOXINLOVER)) && !force)
|
||||
return TRUE
|
||||
|
||||
if(istype(src.loc, /obj/effect/dummy)) //cannot vomit while phasing/vomitcrawling
|
||||
@@ -539,12 +539,9 @@
|
||||
add_splatter_floor(T)
|
||||
if(stun)
|
||||
adjustBruteLoss(3)
|
||||
else if(src.reagents.has_reagent(/datum/reagent/consumable/ethanol/blazaam, needs_metabolizing = TRUE))
|
||||
if(T)
|
||||
T.add_vomit_floor(src, VOMIT_PURPLE)
|
||||
else
|
||||
if(T)
|
||||
T.add_vomit_floor(src, VOMIT_TOXIC)//toxic barf looks different
|
||||
T.add_vomit_floor(src, vomit_type, purge_ratio) //toxic barf looks different || call purge when doing detoxicfication to pump more chems out of the stomach.
|
||||
T = get_step(T, dir)
|
||||
if (is_blocked_turf(T))
|
||||
break
|
||||
|
||||
@@ -627,7 +627,7 @@
|
||||
return
|
||||
|
||||
src.visible_message("[src] performs CPR on [C.name]!", span_notice("You perform CPR on [C.name]."))
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "saved_life", /datum/mood_event/saved_life)
|
||||
C.cpr_time = world.time
|
||||
log_combat(src, C, "CPRed")
|
||||
SSachievements.unlock_achievement(/datum/achievement/cpr, client)
|
||||
@@ -869,8 +869,8 @@
|
||||
override = dna.species.override_float
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/vomit(lost_nutrition = 10, blood = 0, stun = 1, distance = 0, message = 1, toxic = 0)
|
||||
if(blood && (NOBLOOD in dna.species.species_traits))
|
||||
/mob/living/carbon/human/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, vomit_type = VOMIT_TOXIC, harm = TRUE, force = FALSE, purge_ratio = 0.1)
|
||||
if(blood && (NOBLOOD in dna.species.species_traits) && !HAS_TRAIT(src, TRAIT_TOXINLOVER))
|
||||
if(message)
|
||||
visible_message(span_warning("[src] dry heaves!"), \
|
||||
span_userdanger("You try to throw up, but there's nothing in your stomach!"))
|
||||
|
||||
@@ -178,6 +178,8 @@
|
||||
return TRUE
|
||||
if(isclothing(wear_mask) && (wear_mask.clothing_flags & SCAN_REAGENTS))
|
||||
return TRUE
|
||||
if(HAS_TRAIT(src, TRAIT_SEE_REAGENTS))
|
||||
return TRUE
|
||||
|
||||
/// When we're joining the game in [/mob/dead/new_player/proc/create_character], we increment our scar slot then store the slot in our mind datum.
|
||||
/mob/living/carbon/human/proc/increment_scar_slot()
|
||||
|
||||
@@ -286,7 +286,7 @@
|
||||
if(getToxLoss() >= 45 && nutrition > 20)
|
||||
lastpuke += prob(50)
|
||||
if(lastpuke >= 50) // about 25 second delay I guess
|
||||
vomit(20, toxic = TRUE)
|
||||
vomit(20)
|
||||
lastpuke = 0
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ DISREGUARD THIS FILE IF YOU'RE INTENDING TO CHANGE ASPECTS OF PLAYER CONTROLLED
|
||||
punchstunthreshold = 9 //TF2 no-crits special
|
||||
payday_modifier = 0.7 //Neutrally viewed by NT
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
|
||||
exotic_blood = /datum/reagent/water
|
||||
disliked_food = MEAT | DAIRY | SEAFOOD | MICE
|
||||
liked_food = VEGETABLES | FRUIT | GRAIN
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
|
||||
@@ -13,6 +13,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
|
||||
idle_power_usage = 1000
|
||||
use_power = IDLE_POWER_USE
|
||||
|
||||
critical_machine = TRUE
|
||||
|
||||
var/primary = FALSE
|
||||
|
||||
var/valid_ticks = MAX_AI_DATA_CORE_TICKS //Limited to MAX_AI_DATA_CORE_TICKS. Decrement by 1 every time we have an invalid tick, opposite when valid
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon_state = "46x30mmt-20"
|
||||
ammo_type = /obj/item/ammo_casing/c46x30mm
|
||||
caliber = "4.6x30mm"
|
||||
max_ammo = 20
|
||||
max_ammo = 22
|
||||
|
||||
/obj/item/ammo_box/magazine/wt550m9/update_icon()
|
||||
..()
|
||||
|
||||
@@ -83,12 +83,13 @@
|
||||
|
||||
/obj/item/gun/ballistic/automatic/wt550
|
||||
name = "security auto rifle"
|
||||
desc = "An outdated personal defence weapon. Uses 4.6x30mm rounds and is designated the WT-550 Automatic Rifle. Has a single fire burst mode, but you still can't figure out what advantage that has over semi automatic."
|
||||
desc = "An outdated personal defence weapon. Uses 4.6x30mm rounds and is designated the WT-550 Automatic Rifle. Has a two-round burst or a semi-automatic firing mode."
|
||||
icon_state = "wt550"
|
||||
item_state = "arg"
|
||||
mag_type = /obj/item/ammo_box/magazine/wt550m9
|
||||
fire_delay = 2
|
||||
burst_size = 1
|
||||
burst_size = 2
|
||||
weapon_weight = WEAPON_MEDIUM
|
||||
can_suppress = FALSE
|
||||
can_bayonet = TRUE
|
||||
knife_x_offset = 25
|
||||
|
||||
@@ -579,6 +579,8 @@
|
||||
else
|
||||
var/mob/living/L = target
|
||||
if(!direct_target)
|
||||
if(!CHECK_BITFIELD(L.mobility_flags, MOBILITY_STAND) && (L in range(2, starting))) //if we're shooting over someone who's prone and nearby bc formations are cool and not going to be unbalanced
|
||||
return FALSE
|
||||
if(!CHECK_BITFIELD(L.mobility_flags, MOBILITY_USE | MOBILITY_STAND | MOBILITY_MOVE) || !(L.stat == CONSCIOUS)) //If they're able to 1. stand or 2. use items or 3. move, AND they are not softcrit, they are not stunned enough to dodge projectiles passing over.
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
/obj/item/projectile/bullet/pellet
|
||||
var/tile_dropoff = 0.45
|
||||
var/tile_dropoff_s = 0.5
|
||||
var/tile_dropoff_s = 0.35
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun_buckshot
|
||||
name = "buckshot pellet"
|
||||
@@ -80,7 +80,7 @@
|
||||
/obj/item/projectile/bullet/pellet/shotgun_rubbershot
|
||||
name = "rubbershot pellet"
|
||||
damage = 3
|
||||
stamina = 11
|
||||
stamina = 13
|
||||
sharpness = SHARP_NONE
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun_cryoshot
|
||||
|
||||
@@ -10,22 +10,22 @@
|
||||
|
||||
/obj/item/projectile/bullet/c46x30mm
|
||||
name = "4.6x30mm bullet"
|
||||
damage = 20
|
||||
damage = 13
|
||||
wound_bonus = -5
|
||||
bare_wound_bonus = 5
|
||||
armour_penetration = 20
|
||||
|
||||
/obj/item/projectile/bullet/c46x30mm_ap
|
||||
name = "4.6x30mm armor-piercing bullet"
|
||||
damage = 15
|
||||
damage = 10
|
||||
armour_penetration = 50
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/c46x30mm
|
||||
name = "4.6x30mm incendiary bullet"
|
||||
damage = 10
|
||||
damage = 7
|
||||
fire_stacks = 1
|
||||
|
||||
/obj/item/projectile/bullet/c46x30mm_rubber
|
||||
name = "4.6x30mm rubber bullet"
|
||||
damage = 5
|
||||
stamina = 20 //slightly more effective than the detective's revolver when fired in bursts
|
||||
damage = 4
|
||||
stamina = 21 //slightly more effective than the detective's revolver when fired in bursts
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
flag = MELEE
|
||||
icon_state = "arrow"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow
|
||||
var/embed_chance = 0.5
|
||||
var/embed_chance = 0.4
|
||||
var/break_chance = 10
|
||||
var/fauna_damage_bonus = 20
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
name = "Ashen arrow"
|
||||
desc = "Fire Hardened arrow."
|
||||
damage = 25
|
||||
embed_chance = 0.3
|
||||
embed_chance = 0.25
|
||||
break_chance = 0
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/ash
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
desc = "An arrow made from bone, wood, and sinew."
|
||||
damage = 30
|
||||
armour_penetration = 20
|
||||
embed_chance = 0.4
|
||||
embed_chance = 0.33
|
||||
break_chance = 0
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/bone_tipped
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
damage = 25
|
||||
fauna_damage_bonus = 40
|
||||
armour_penetration = 35
|
||||
embed_chance = 0.5
|
||||
embed_chance = 0.4
|
||||
break_chance = 0
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/chitin
|
||||
|
||||
@@ -76,8 +76,8 @@
|
||||
name = "Bamboo arrow"
|
||||
desc = "An arrow made from bamboo."
|
||||
damage = 10
|
||||
embed_chance = 0.7
|
||||
break_chance = 67
|
||||
embed_chance = 0.5
|
||||
break_chance = 50
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/bamboo
|
||||
|
||||
/obj/item/projectile/bullet/reusable/arrow/bronze //Inferior metal. Slightly better than ashen
|
||||
@@ -93,16 +93,16 @@
|
||||
name = "Glass arrow"
|
||||
desc = "Glass tipped arrow"
|
||||
damage = 15
|
||||
embed_chance = 0.5
|
||||
break_chance = 33
|
||||
embed_chance = 0.3
|
||||
break_chance = 25
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/glass
|
||||
|
||||
/obj/item/projectile/bullet/reusable/arrow/glass/plasma //Immensely capable of puncturing through materials; plasma is a robust material, more capable of slicing through protection
|
||||
name = "Plasma Glass arrow"
|
||||
desc = "Plasma Glass tipped arrow"
|
||||
damage = 15
|
||||
armour_penetration = 50
|
||||
embed_chance = 0.5
|
||||
damage = 18
|
||||
armour_penetration = 60
|
||||
embed_chance = 0.4
|
||||
break_chance = 0
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow/glass/plasma
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
M.apply_damage(10, BURN)
|
||||
M.apply_damage(8, BURN)
|
||||
M.adjust_fire_stacks(1)
|
||||
M.IgniteMob()
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
icon_state = "arrow_energy"
|
||||
damage = 25
|
||||
damage_type = BURN
|
||||
var/embed_chance = 0.5
|
||||
var/embed_chance = 0.4
|
||||
var/obj/item/embed_type = /obj/item/ammo_casing/caseless/arrow/energy
|
||||
|
||||
/obj/item/projectile/energy/arrow/on_hit(atom/target, blocked = FALSE)
|
||||
@@ -163,7 +163,7 @@
|
||||
name = "disabler bolt"
|
||||
icon_state = "arrow_disable"
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
damage = 20
|
||||
damage = 40
|
||||
damage_type = STAMINA
|
||||
embed_type = /obj/item/ammo_casing/caseless/arrow/energy/disabler
|
||||
|
||||
|
||||
@@ -469,6 +469,7 @@
|
||||
/datum/reagent/consumable/tea,
|
||||
/datum/reagent/consumable/icetea,
|
||||
/datum/reagent/consumable/space_cola,
|
||||
/datum/reagent/consumable/rootbeer,
|
||||
/datum/reagent/consumable/spacemountainwind,
|
||||
/datum/reagent/consumable/dr_gibb,
|
||||
/datum/reagent/consumable/space_up,
|
||||
|
||||
@@ -479,6 +479,20 @@
|
||||
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/rootbeer
|
||||
name = "Root Beer"
|
||||
description = "Beer, but not."
|
||||
color = "#251505" // rgb: 16, 8, 0
|
||||
taste_description = "root and beer"
|
||||
glass_icon_state = "glass_brown"
|
||||
glass_name = "glass of root beer"
|
||||
glass_desc = "A glass of refreshing fizzing root beer."
|
||||
|
||||
/datum/reagent/consumable/rootbeer/on_mob_life(mob/living/carbon/M)
|
||||
M.drowsyness = max(0,M.drowsyness-5)
|
||||
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/nuka_cola
|
||||
name = "Nuka Cola"
|
||||
description = "Cola, cola never changes."
|
||||
|
||||
@@ -343,6 +343,17 @@
|
||||
category = list("Implants", "Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_science_analyzer
|
||||
name = "Chemical Analyzer Implant"
|
||||
desc = "These cybernetic eye implants will allow rapid identification of reagents. Wiggle eyes to control."
|
||||
id = "ci-scihud"
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 50
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600, /datum/material/plastic = 150)
|
||||
build_path = /obj/item/organ/cyberimp/eyes/hud/science
|
||||
category = list("Implants", "Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_xray
|
||||
name = "X-ray Eyes"
|
||||
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
|
||||
/datum/design/mag_oldsmg
|
||||
name = "WT-550 Auto Gun Magazine (4.6x30mm)"
|
||||
desc = "A 20 round magazine for the out of date security WT-550 Auto Rifle."
|
||||
desc = "A 22 round magazine for the out of date security WT-550 Auto Rifle."
|
||||
id = "mag_oldsmg"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 4000)
|
||||
@@ -320,7 +320,7 @@
|
||||
|
||||
/datum/design/mag_oldsmg/ap_mag
|
||||
name = "WT-550 Auto Gun Armour Piercing Magazine (4.6x30mm AP)"
|
||||
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Auto Rifle."
|
||||
desc = "A 22 round armour piercing magazine for the out of date security WT-550 Auto Rifle."
|
||||
id = "mag_oldsmg_ap"
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/silver = 600)
|
||||
build_path = /obj/item/ammo_box/magazine/wt550m9/wtap
|
||||
@@ -328,7 +328,7 @@
|
||||
|
||||
/datum/design/mag_oldsmg/ic_mag
|
||||
name = "WT-550 Auto Gun Incendiary Magazine (4.6x30mm IC)"
|
||||
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Auto Rifle."
|
||||
desc = "A 22 round armour piercing magazine for the out of date security WT-550 Auto Rifle."
|
||||
id = "mag_oldsmg_ic"
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/silver = 600, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/ammo_box/magazine/wt550m9/wtic
|
||||
@@ -336,7 +336,7 @@
|
||||
|
||||
/datum/design/mag_oldsmg/rubber_mag
|
||||
name = "WT-550 Auto Gun Rubber Bullet Magazine (4.6x30mm Rubber)"
|
||||
desc = "A 20 round rubber bullet magazine for the out of date security WT-550 Auto Rifle."
|
||||
desc = "A 22 round rubber bullet magazine for the out of date security WT-550 Auto Rifle."
|
||||
id = "mag_oldsmg_rubber"
|
||||
materials = list(/datum/material/iron = 4000)
|
||||
build_path = /obj/item/ammo_box/magazine/wt550m9/wtr
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var/list/hidden_nodes = list() //Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node.
|
||||
var/list/deconstructed_items = list() //items already deconstructed for a generic point boost. path = list(point_type = points)
|
||||
var/list/research_points = list() //Available research points. type = number
|
||||
var/list/stored_research_points = list() //Stored research, up to doubles server mining when present. type = number
|
||||
var/list/obj/machinery/computer/rdconsole/consoles_accessing = list()
|
||||
var/id = "generic"
|
||||
var/list/research_logs = list() //IC logs.
|
||||
@@ -142,6 +143,7 @@
|
||||
/datum/techweb/proc/get_researched_nodes()
|
||||
return researched_nodes - hidden_nodes
|
||||
|
||||
/// procs for modifying a specific point type amount
|
||||
/datum/techweb/proc/add_point_type(type, amount)
|
||||
if(!SSresearch.point_types[type] || (amount <= 0))
|
||||
return FALSE
|
||||
@@ -160,6 +162,25 @@
|
||||
research_points[type] = max(0, research_points[type] - amount)
|
||||
return TRUE
|
||||
|
||||
/// procs for modifying a specific point type's stored research amount
|
||||
/datum/techweb/proc/add_stored_point_type(type, amount)
|
||||
if(!SSresearch.point_types[type] || (amount <= 0))
|
||||
return FALSE
|
||||
stored_research_points[type] = max(0, stored_research_points[type] + amount)
|
||||
return TRUE
|
||||
|
||||
/datum/techweb/proc/modify_stored_point_type(type, amount)
|
||||
if(!SSresearch.point_types[type])
|
||||
return FALSE
|
||||
stored_research_points[type] = max(0, stored_research_points[type] + amount)
|
||||
return TRUE
|
||||
|
||||
/datum/techweb/proc/remove_stored_point_type(type, amount)
|
||||
if(!SSresearch.point_types[type] || (amount <= 0))
|
||||
return FALSE
|
||||
stored_research_points[type] = max(0, stored_research_points[type] - amount)
|
||||
return TRUE
|
||||
|
||||
/datum/techweb/proc/add_design_by_id(id, custom = FALSE)
|
||||
return add_design(SSresearch.techweb_design_by_id(id), custom)
|
||||
|
||||
|
||||
@@ -547,7 +547,7 @@
|
||||
display_name = "Cybernetic Implants"
|
||||
description = "Electronic implants that improve humans."
|
||||
prereq_ids = list("adv_biotech", "datatheory")
|
||||
design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-diaghud")
|
||||
design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-scihud", "ci-diaghud")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
|
||||
@@ -75,10 +75,6 @@
|
||||
ui_x = 288
|
||||
ui_y = -96
|
||||
|
||||
/datum/techweb_node/xenoorgan_biotech
|
||||
ui_x = 256
|
||||
ui_y = -64
|
||||
|
||||
/datum/techweb_node/bio_process
|
||||
ui_x = 224
|
||||
ui_y = -224
|
||||
@@ -219,6 +215,10 @@
|
||||
ui_x = 32
|
||||
ui_y = -832
|
||||
|
||||
/datum/techweb_node/xenoorgan_biotech
|
||||
ui_x = 256
|
||||
ui_y = -64
|
||||
|
||||
/datum/techweb_node/cyborg_upg_med
|
||||
ui_x = 352
|
||||
ui_y = -160
|
||||
@@ -287,6 +287,14 @@
|
||||
ui_x = 480
|
||||
ui_y = -32
|
||||
|
||||
/datum/techweb_node/ai_cpu_advanced
|
||||
ui_x = 992
|
||||
ui_y = 64
|
||||
|
||||
/datum/techweb_node/ai_ram_high_cap
|
||||
ui_x = 544
|
||||
ui_y = 64
|
||||
|
||||
/datum/techweb_node/spacepod_storage
|
||||
ui_x = 96
|
||||
ui_y = -832
|
||||
@@ -327,10 +335,6 @@
|
||||
ui_x = 96
|
||||
ui_y = -448
|
||||
|
||||
/datum/techweb_node/magmite_mining
|
||||
ui_x = 160
|
||||
ui_y = -512
|
||||
|
||||
/datum/techweb_node/janitor
|
||||
ui_x = -320
|
||||
ui_y = -160
|
||||
@@ -371,6 +375,18 @@
|
||||
ui_x = -256
|
||||
ui_y = -224
|
||||
|
||||
/datum/techweb_node/ai_cpu_bluespace
|
||||
ui_x = 992
|
||||
ui_y = 192
|
||||
|
||||
/datum/techweb_node/ai_ram_bluespace
|
||||
ui_x = 544
|
||||
ui_y = 192
|
||||
|
||||
/datum/techweb_node/ai_architecture_bluespace
|
||||
ui_x = 768
|
||||
ui_y = 160
|
||||
|
||||
/datum/techweb_node/adv_plasma
|
||||
ui_x = 32
|
||||
ui_y = -384
|
||||
@@ -395,6 +411,14 @@
|
||||
ui_x = -576
|
||||
ui_y = -96
|
||||
|
||||
/datum/techweb_node/ai_cpu_1
|
||||
ui_x = 896
|
||||
ui_y = 64
|
||||
|
||||
/datum/techweb_node/ai_ram_1
|
||||
ui_x = 640
|
||||
ui_y = 64
|
||||
|
||||
/datum/techweb_node/emp_super
|
||||
ui_x = -224
|
||||
ui_y = -128
|
||||
@@ -435,6 +459,18 @@
|
||||
ui_x = -416
|
||||
ui_y = -256
|
||||
|
||||
/datum/techweb_node/ai_cpu_experimental
|
||||
ui_x = 992
|
||||
ui_y = 128
|
||||
|
||||
/datum/techweb_node/ai_ram_hyper
|
||||
ui_x = 544
|
||||
ui_y = 128
|
||||
|
||||
/datum/techweb_node/magmite_mining
|
||||
ui_x = 160
|
||||
ui_y = -512
|
||||
|
||||
/datum/techweb_node/mech_diamond_drill
|
||||
ui_x = 96
|
||||
ui_y = -512
|
||||
@@ -479,6 +515,14 @@
|
||||
ui_x = -416
|
||||
ui_y = -320
|
||||
|
||||
/datum/techweb_node/ai_cpu_3
|
||||
ui_x = 896
|
||||
ui_y = 192
|
||||
|
||||
/datum/techweb_node/ai_ram_3
|
||||
ui_x = 640
|
||||
ui_y = 192
|
||||
|
||||
/datum/techweb_node/spacepod_advplasmacutter
|
||||
ui_x = 160
|
||||
ui_y = -640
|
||||
@@ -499,6 +543,18 @@
|
||||
ui_x = -576
|
||||
ui_y = -32
|
||||
|
||||
/datum/techweb_node/ai_architecture_256
|
||||
ui_x = 768
|
||||
ui_y = 96
|
||||
|
||||
/datum/techweb_node/ai_cpu_2
|
||||
ui_x = 896
|
||||
ui_y = 128
|
||||
|
||||
/datum/techweb_node/ai_ram_2
|
||||
ui_x = 640
|
||||
ui_y = 128
|
||||
|
||||
/datum/techweb_node/xenology
|
||||
ui_x = 480
|
||||
ui_y = -96
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/horde
|
||||
name = "Horde"
|
||||
desc = "Bring all your existing bloodmen to you at the cost of 18% blood (15 brain damage for those without blood)."
|
||||
desc = "Bring all your existing bloodmen to you at the cost of 3% blood per bloodman or 5 brain damage per bloodman if you're a bloodless race."
|
||||
action_icon = 'icons/mob/actions/actions_cult.dmi'
|
||||
action_icon_state = "horde"
|
||||
var/list/summon_type = list("/mob/living/simple_animal/hostile/asteroid/hivelord/legion/bloodman")
|
||||
@@ -123,7 +123,7 @@
|
||||
user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
|
||||
to_chat(usr, span_notice("<span class ='userdanger'>You can almost feel your brain writhing as you call your bloodmen to you.</span>"))
|
||||
else
|
||||
user.blood_volume -= 30
|
||||
user.blood_volume -= 15
|
||||
to_chat(usr, span_notice("<span class ='userdanger'>You feel yourself becoming paler with every minion called.</span>"))
|
||||
if(T)
|
||||
bloodman.forceMove(T)
|
||||
|
||||
@@ -141,18 +141,19 @@
|
||||
|
||||
/obj/item/melee/touch_attack/raisehand
|
||||
name = "\improper raise bloodman"
|
||||
desc = "Blood covers your hand like a glove as it waits for a new host."
|
||||
desc = "Prepare to raise a bloodman for about 5% of your blood or 5 brain damage if you're a bloodless race."
|
||||
on_use_sound = 'sound/magic/wandodeath.ogg'
|
||||
icon_state = "flagellation"
|
||||
item_state = "hivehand"
|
||||
color = "#FF0000"
|
||||
|
||||
/obj/item/melee/touch_attack/raisehand/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
var/mob/living/carbon/human/M = target
|
||||
if(!ishuman(M) || M.stat != DEAD)
|
||||
to_chat(M, span_notice("You must be targeting a dead humanoid!"))
|
||||
to_chat(user, span_notice("You must be targeting a dead humanoid!"))
|
||||
return
|
||||
if(GLOB.bloodmen_list.len > 2)
|
||||
to_chat(M, span_notice("You can't control that many minions!"))
|
||||
to_chat(user, span_notice("You can't control that many minions!"))
|
||||
return
|
||||
if(NOBLOOD in M.dna.species.species_traits)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
|
||||
@@ -163,9 +164,8 @@
|
||||
L.stored_mob = M
|
||||
M.forceMove(L)
|
||||
qdel(src)
|
||||
user.blood_volume -= 50 // 9% blood cost, cheaper than the other spell because its not like you can stop near a corpse or find one near you in a fight
|
||||
to_chat(user, "<span class ='userdanger'>You curse the body with your blood, leaving you feeling a bit light-headed.</span>")
|
||||
|
||||
user.blood_volume -= 25
|
||||
to_chat(user, span_notice("You curse the body with your blood, leaving you feeling a bit light-headed."))
|
||||
|
||||
/obj/item/melee/touch_attack/pacifism
|
||||
name = "\improper pacifism touch"
|
||||
|
||||
@@ -104,9 +104,9 @@
|
||||
hand_path = /obj/item/melee/touch_attack/pacifism
|
||||
|
||||
school = "evocation"
|
||||
charge_max = 600
|
||||
charge_max = 1 MINUTES
|
||||
clothes_req = FALSE
|
||||
cooldown_min = 2 MINUTES
|
||||
cooldown_min = 20 SECONDS
|
||||
action_icon ='icons/mob/gondolas.dmi'
|
||||
|
||||
action_icon_state = "gondola"
|
||||
|
||||
@@ -45,3 +45,15 @@
|
||||
name = "Contraband Security HUD Implant"
|
||||
desc = "A Cybersun Industries brand Security HUD Implant. These illicit cybernetic eye implants will display a security HUD over everything you see."
|
||||
syndicate_implant = TRUE
|
||||
|
||||
/obj/item/organ/cyberimp/eyes/hud/science
|
||||
name = "Chemical Analyzer implant"
|
||||
desc = "These cybernetic eye implants will allow rapid identification of reagents."
|
||||
|
||||
/obj/item/organ/cyberimp/eyes/hud/science/Insert(var/mob/living/carbon/M, var/special = 0, drop_if_replaced = FALSE)
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_SEE_REAGENTS, src)
|
||||
|
||||
/obj/item/organ/cyberimp/eyes/hud/science/Remove(var/mob/living/carbon/M, var/special = 0)
|
||||
REMOVE_TRAIT(owner, TRAIT_SEE_REAGENTS, src)
|
||||
..()
|
||||
|
||||
53
code/modules/surgery/stomachpump.dm
Normal file
@@ -0,0 +1,53 @@
|
||||
/datum/surgery/stomach_pump
|
||||
name = "Stomach Pump"
|
||||
steps = list(
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/retract_skin,
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/stomach_pump,
|
||||
/datum/surgery_step/close)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = TRUE
|
||||
ignore_clothes = FALSE
|
||||
|
||||
/datum/surgery/stomach_pump/can_start(mob/user, mob/living/carbon/target)
|
||||
var/obj/item/organ/stomach/target_stomach = target.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if(HAS_TRAIT(target, TRAIT_HUSK))
|
||||
return FALSE
|
||||
if(!target_stomach)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
//Working the stomach by hand in such a way that you induce vomiting.
|
||||
/datum/surgery_step/stomach_pump
|
||||
name = "Pump Stomach"
|
||||
accept_hand = TRUE
|
||||
repeatable = TRUE
|
||||
time = 2 SECONDS
|
||||
|
||||
/datum/surgery_step/stomach_pump/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, span_notice("You begin pumping [target]'s stomach..."),
|
||||
span_notice("[user] begins to pump [target]'s stomach."),
|
||||
span_notice("[user] begins to press on [target]'s chest."))
|
||||
display_pain(target, "You feel a horrible sloshing feeling in your gut! You're going to be sick!")
|
||||
|
||||
/datum/surgery_step/stomach_pump/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/target_human = target
|
||||
display_results(user, target, span_notice("[user] forces [target_human] to vomit, cleansing their stomach of some chemicals!"),
|
||||
span_notice("[user] forces [target_human] to vomit, cleansing their stomach of some chemicals!"),
|
||||
"[user] forces [target_human] to vomit!")
|
||||
target_human.vomit(20, FALSE, TRUE, 1, TRUE, FALSE, purge_ratio = 0.67) //higher purge ratio than regular vomiting
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/stomach_pump/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/target_human = target
|
||||
display_results(user, target, span_warning("You screw up, brusing [target_human]'s chest!"),
|
||||
span_warning("[user] screws up, brusing [target_human]'s abdomen!"),
|
||||
span_warning("[user] screws up!"))
|
||||
target_human.adjustOrganLoss(ORGAN_SLOT_STOMACH, 10)
|
||||
target_human.adjustBruteLoss(5)
|
||||
@@ -104,6 +104,8 @@
|
||||
if(IS_MEDICAL(user))
|
||||
user_speed_mod = 0.8
|
||||
|
||||
var/previous_loc = user.loc
|
||||
|
||||
if(do_after(user, time * tool_speed_mod * user_speed_mod, target))
|
||||
var/prob_chance = 100
|
||||
|
||||
@@ -129,7 +131,9 @@
|
||||
surgery.status++
|
||||
if(surgery.status > surgery.steps.len)
|
||||
surgery.complete()
|
||||
|
||||
else
|
||||
if(!(previous_loc == user.loc))
|
||||
move_ouchie(user, target, target_zone, tool, advance)
|
||||
surgery.step_in_progress = FALSE
|
||||
return advance
|
||||
|
||||
@@ -248,8 +252,27 @@
|
||||
var/final_ouchie_chance = SURGERY_FUCKUP_CHANCE * ouchie_mod
|
||||
if(!prob(final_ouchie_chance))
|
||||
return
|
||||
user.visible_message(span_boldwarning("[target] flinches, bumping [user]'s [tool ? tool.name : "hand"] into something important!"), span_boldwarning("[target] flinches, bumping your [tool ? tool.name : "hand"] into something important!"))
|
||||
user.visible_message(span_boldwarning("[target] flinches, bumping [user]'s [tool ? tool.name : "hand"] into something important!"), span_boldwarning("[target] flinches, bumping your [tool ? tool.name : "hand"] into something important!"))
|
||||
target.apply_damage(fuckup_damage, fuckup_damage_type, target_zone)
|
||||
//if(ishuman(target) &&fuckup_damage_type == BRUTE && prob(final_ouchie_chance/2))
|
||||
//var/mob/living/carbon/human/H = target
|
||||
//H.bleed_rate += min(fuckup_damage/4, 10)
|
||||
|
||||
///Deal damage if the user moved during the op
|
||||
/datum/surgery_step/proc/move_ouchie(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, success)
|
||||
user.visible_message(span_boldwarning("[user] bumps [p_their(FALSE, user)] [tool ? tool.name : "hand"] into something important!"), span_boldwarning("You move, bumping your [tool ? tool.name : "hand"] into something important!"))
|
||||
target.apply_damage(fuckup_damage, fuckup_damage_type, target_zone)
|
||||
|
||||
/**
|
||||
* Sends a pain message to the target, including a chance of screaming.
|
||||
*
|
||||
* Arguments:
|
||||
* * target - Who the message will be sent to
|
||||
* * pain_message - The message to be displayed
|
||||
* * mechanical_surgery - Boolean flag that represents if a surgery step is done on a mechanical limb (therefore does not force scream)
|
||||
*/
|
||||
/datum/surgery_step/proc/display_pain(mob/living/target, pain_message, mechanical_surgery = FALSE)
|
||||
if(!HAS_TRAIT(target, TRAIT_SURGERY_PREPARED))
|
||||
to_chat(target, span_userdanger(pain_message))
|
||||
if(prob(30) && !mechanical_surgery)
|
||||
target.emote("scream")
|
||||
|
||||
@@ -465,6 +465,9 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
break
|
||||
|
||||
/obj/machinery/vending/proc/tilt(mob/fatty, crit=FALSE)
|
||||
var/no_tipper = FALSE
|
||||
if(!fatty)
|
||||
no_tipper = TRUE
|
||||
visible_message("<span class='danger'>[src] tips over!</span>")
|
||||
tilted = TRUE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
@@ -476,7 +479,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
if(forcecrit)
|
||||
crit_case = forcecrit
|
||||
|
||||
if(in_range(fatty, src))
|
||||
if(no_tipper || in_range(fatty, src))
|
||||
for(var/mob/living/L in get_turf(fatty))
|
||||
var/mob/living/carbon/C = L
|
||||
|
||||
@@ -544,7 +547,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
M.Turn(pick(90, 270))
|
||||
transform = M
|
||||
|
||||
if(get_turf(fatty) != get_turf(src))
|
||||
if(fatty && get_turf(fatty) != get_turf(src))
|
||||
throw_at(get_turf(fatty), 1, 1, spin=FALSE)
|
||||
|
||||
/obj/machinery/vending/proc/untilt(mob/user)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/sol_dry = 10,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/rootbeer=10,
|
||||
/obj/item/reagent_containers/glass/beaker/waterbottle = 10)
|
||||
contraband = list(/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6,
|
||||
|
||||
@@ -20,7 +20,7 @@ REVIVAL_BRAIN_LIFE -1
|
||||
JOB_SPECIES_WHITELIST /datum/job/captain human
|
||||
JOB_SPECIES_WHITELIST /datum/job/hop human
|
||||
JOB_SPECIES_WHITELIST /datum/job/hos human,lizard
|
||||
JOB_SPECIES_WHITELIST /datum/job/chief_engineer human,plasmaman,moth,ethereal,preternis, polysmorph
|
||||
JOB_SPECIES_WHITELIST /datum/job/chief_engineer human,plasmaman,moth,ethereal,preternis,polysmorph
|
||||
JOB_SPECIES_WHITELIST /datum/job/rd human,pod,plasmaman,ethereal,preternis,polysmorph
|
||||
JOB_SPECIES_WHITELIST /datum/job/cmo human,lizard,pod,moth
|
||||
|
||||
|
||||
@@ -58,6 +58,156 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">19 June 2022</h2>
|
||||
<h3 class="author"> @LazennG, @ToasterBiome, Chubbygummibear updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Basalt Katana gets an activatable dodge roll mechanic</li>
|
||||
<li class="rscadd">Dodge roll costs 5 stamina on lavaland and 15 on station but gives you .5 seconds of iframes and flying. Dodge rolling into a wall or another person will bonk and stun you, same with stam-critting yourself. i-frames only block straight up damage numbers, explosions still throw and deafen you, cc effects like a bola will still stick</li>
|
||||
<li class="tweak">Basalt katana force down to 18 to avoid miner ninjas tearing up the crew</li>
|
||||
<li class="tweak">Basalt katana damage on lavaland fauna up to 70, including megafauna</li>
|
||||
<li class="soundadd">dodge roll sound effect</li>
|
||||
<li class="imageadd">evasion icon to go with the popup letting you know you're in i-frames</li>
|
||||
</ul>
|
||||
<h3 class="author"> Galacticruler, @Chubbygummibear, @Hopekz updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added new eye implant for reagent scanning, the chemical analyzer implant</li>
|
||||
<li class="tweak">added new implant to the tech node with the other HUD implants</li>
|
||||
<li class="tweak">added third mob-level check to allow for the new implant to work</li>
|
||||
</ul>
|
||||
<h3 class="author"> comma, orelbon updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added holosigns from Baystation</li>
|
||||
</ul>
|
||||
<h3 class="author">00ze-cyclone updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscdel">Removed a space in the species whitelisting</li>
|
||||
<li class="bugfix">maybe fixed polys not being able to be CE (I hope it's not actually something as stupid as a singular space that broke everything though it would be nice because it would mean that it's easy to fix)</li>
|
||||
</ul>
|
||||
<h3 class="author">@ToasterBiome @Chubbygummibear @LazennG updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added inhand ability for bloody knuckles</li>
|
||||
<li class="tweak">tweaked some recent loot to hopefully be less useless</li>
|
||||
</ul>
|
||||
<h3 class="author">Chubbygummibear updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Preternis eyes no longer delete themselves when in a non preternis host</li>
|
||||
<li class="tweak">Preternis eyes use their organ health as a charge meter. They drain (take damage at .5 eye damage per tick) in a non-preternis and recharge quickly (.5 eye healing per tick) in an actual preternis.</li>
|
||||
<li class="tweak">Preternis eyes depend on being high organ health to use their night vision rather than preternis charge meter.</li>
|
||||
<li class="tweak">Preternis eyes are naturally cybernetic, so they don't decay outside of a body and you get flashed if emp'd. although your eyes are probably the least of your worries if emp'd as a preternis</li>
|
||||
<li class="rscadd">Stomach Pumping surgery. A quick way to deal with someone, living or dead who has way too many reagents in their system.</li>
|
||||
<li class="tweak">I updated our vomit code and i don't want to talk about it. players won't notice a difference</li>
|
||||
</ul>
|
||||
<h3 class="author">GalacticRuler updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds new Fishing themed 10x10 maint ruin.</li>
|
||||
<li class="tweak">Adds new ruin to station.dmm</li>
|
||||
</ul>
|
||||
<h3 class="author">Skrem7 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">WT has 2-rnd burst back, bullets do less individual damage, magazine size increased</li>
|
||||
<li class="tweak">Arrows are now slightly more sensible considering they can be produced and used by just about anyone as a ranged weapon that does more damage than most station weaponry such as the welder or saw.</li>
|
||||
<li class="tweak">Secbelt + variants can hold shotgun shell boxes and teleshields, bulky now.</li>
|
||||
<li class="tweak">Shotgun shell boxes can now only carry shotgun shells.</li>
|
||||
<li class="tweak">Beanbag boxes spawn with 7 beanbags, rather than 6.</li>
|
||||
<li class="tweak">Security webbing and HoS belt storage buffed.</li>
|
||||
<li class="tweak">HoS now spawns with their belt and teleshield from the locker, extra baton/flash/cuffs moved to locker.</li>
|
||||
<li class="tweak">Assault belt now identical to tactical webbing.</li>
|
||||
<li class="tweak">Shoulder holster normal-sized again.</li>
|
||||
<li class="tweak">Bandolier holds more shells.</li>
|
||||
</ul>
|
||||
<h3 class="author">SomeguyManperson updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">toxins bombs no longer give direct research, instead doubling research speed for the amount of points they are worth</li>
|
||||
<li class="tweak">bloodsucker frenzy now provides reduced damage slowdown for its duration</li>
|
||||
<li class="tweak">adds line battles, you can now shoot over people who are both prone and within 2 tiles of you</li>
|
||||
<li class="tweak">this also means you can combat flop to matrix bullets at close range</li>
|
||||
</ul>
|
||||
<h3 class="author">TheBonded, ported to YogStation by SuperSlayer updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">podpeople from replica pods now have water blood by default, and inherit their blood chemical from the most abundant chemical trait in their seeds if applicable.</li>
|
||||
</ul>
|
||||
<h3 class="author">TheGamerdk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">AI gets 1 more research point per CPU</li>
|
||||
<li class="rscadd">AI techs are no longer hiding in the techweb</li>
|
||||
<li class="tweak">AI cores should no longer turn off due to grid failure events</li>
|
||||
</ul>
|
||||
<h3 class="author">ToasterBiome updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds collapsable fishing rod</li>
|
||||
<li class="bugfix">fixes fishing rod right inhand</li>
|
||||
<li class="bugfix">eating fish now works</li>
|
||||
<li class="tweak">make fishing loot datums make a bit more sense</li>
|
||||
</ul>
|
||||
<h3 class="author">TymurShatillo updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixes pacifism touch cooldown</li>
|
||||
</ul>
|
||||
<h3 class="author">jachlompsky updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">gangrel transform now gives the user armor and increased punch damage</li>
|
||||
</ul>
|
||||
<h3 class="author">nmajask updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">moving while doing a surgery now hurts the patient</li>
|
||||
</ul>
|
||||
<h3 class="author">ynot01 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Destroying the bluespace locker now teleports everything inside to the station</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">18 June 2022</h2>
|
||||
<h3 class="author">Mothblocks, ported to YogStation by SuperSlayer updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Defibing people now gives positive mood</li>
|
||||
</ul>
|
||||
<h3 class="author">Skrem7 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Rubber shot more damage and less damage falloff</li>
|
||||
</ul>
|
||||
<h3 class="author">tattax updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">vanishing act now works, frenzy exit is now setup properly</li>
|
||||
</ul>
|
||||
<h3 class="author">ynot01 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">fixed fish descriptions</li>
|
||||
<li class="spellcheck">fixed card descriptions</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">17 June 2022</h2>
|
||||
<h3 class="author">AlvCyktor updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Barq is good apparently</li>
|
||||
</ul>
|
||||
<h3 class="author">JamieD1 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscdel">Removes ALL button from investigate.</li>
|
||||
</ul>
|
||||
<h3 class="author">nmajask updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixed wigs using a different sprite than it should</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">16 June 2022</h2>
|
||||
<h3 class="author">GalacticRuler updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added one new 3x3 maint ruin themed around vending machines</li>
|
||||
<li class="bugfix">Corrected missing spaces in station.dm</li>
|
||||
</ul>
|
||||
<h3 class="author">ToasterBiome updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">tinted window in metastation courtroom is now a proper window spawner</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">15 June 2022</h2>
|
||||
<h3 class="author">SomeguyManperson updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">no more ruin spawned corpses with gpses because people with gpses dont get not recovered (this is canon shut up)</li>
|
||||
<li class="tweak">gpses on miners now properly iterate numbers i.e. MINE1 2 3 4 rather than just all being MINE0. The mining medic isn't included because they suck</li>
|
||||
<li class="tweak">mining medic no longer gets 2 gpses</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">14 June 2022</h2>
|
||||
<h3 class="author"> @GalacticRuler, Chubbygummibear updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
@@ -2328,106 +2478,6 @@
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">swarmers are no longer narsie's worst enemy</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">21 March 2022</h2>
|
||||
<h3 class="author">Simplehorror updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">Fix capitalisation in malf round report</li>
|
||||
</ul>
|
||||
<h3 class="author">Sniblet updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">slightly expanded the tooltip for pass</li>
|
||||
</ul>
|
||||
<h3 class="author">TheGamerdk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">AI Control Console no longer shows 'G2' no matter which AI you're downloading</li>
|
||||
</ul>
|
||||
<h3 class="author">maxion12345 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">pool ladders are anchored now</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">20 March 2022</h2>
|
||||
<h3 class="author">TheGamerdk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">AI Control Console passwords should no longer sporadically fail</li>
|
||||
</ul>
|
||||
<h3 class="author">maxion12345 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">RGB project no longer flashes to one color and stops</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">19 March 2022</h2>
|
||||
<h3 class="author">00ze-cyclone updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">an implant case for the syndie surgery duffel</li>
|
||||
<li class="tweak">cheaper syndie surgery duffel</li>
|
||||
</ul>
|
||||
<h3 class="author">Chubbygummibear updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">cooldown on health analyzer beep so medbay isn't constant beeping</li>
|
||||
</ul>
|
||||
<h3 class="author">MenacingManatee updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Sentient diseases now start with 2 stealth 2 resistance</li>
|
||||
</ul>
|
||||
<h3 class="author">Skrem7 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds a new druidic lawset focused on cultivating the organics</li>
|
||||
</ul>
|
||||
<h3 class="author">Sniblet updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">climbing things doesn't discourage waggers</li>
|
||||
<li class="tweak">felinids can now oppress other species</li>
|
||||
</ul>
|
||||
<h3 class="author">ToasterBiome updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">cyborgs now get an "eject hat" button that will take off their hat and drop it</li>
|
||||
<li class="bugfix">fixes shitty minesweeper formatting</li>
|
||||
</ul>
|
||||
<h3 class="author">cuackles updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added new simple mob (snail)</li>
|
||||
<li class="imageadd">added some icons and images of said simple mob (snail)</li>
|
||||
</ul>
|
||||
<h3 class="author">nmajask updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixed deleting files from disks</li>
|
||||
<li class="tweak">TRAC implant now lasts 15 minutes</li>
|
||||
<li class="tweak">Detectives now start with a modular PDA</li>
|
||||
<li class="tweak">Radar programs now work on PDAs and the implant tracking program now only requires brig access</li>
|
||||
<li class="tweak">captain starts with a phone round start</li>
|
||||
<li class="tweak">CE's phone starts with a sensor package</li>
|
||||
</ul>
|
||||
<h3 class="author">zen373 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Fixes atmos airlock pipes</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">18 March 2022</h2>
|
||||
<h3 class="author"> ToasterBiome, TheGamerdk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixes engine template failing 28% of the time and picking weird weights for engines</li>
|
||||
<li class="rscadd">legitimizes weird engine weights</li>
|
||||
</ul>
|
||||
<h3 class="author">Sniblet updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">made the code slightly less illiterate</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">17 March 2022</h2>
|
||||
<h3 class="author"> Identification updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="imageadd">Telescopic batons are now a discernible shape</li>
|
||||
</ul>
|
||||
<h3 class="author">Chubbygummibear updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Throwing Mjolnier into someone with anti-magic makes it go bye bye in a big boom</li>
|
||||
</ul>
|
||||
<h3 class="author">ToasterBiome updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">removes erroneous admin logging that is not needed</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<b>GoonStation 13 Development Team</b>
|
||||
|
||||
@@ -32080,3 +32080,121 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
ynot01:
|
||||
- tweak: Internal Affairs Agents are now equipped with dusting implants instead
|
||||
of cyanide capsules
|
||||
2022-06-15:
|
||||
SomeguyManperson:
|
||||
- bugfix: no more ruin spawned corpses with gpses because people with gpses dont
|
||||
get not recovered (this is canon shut up)
|
||||
- tweak: gpses on miners now properly iterate numbers i.e. MINE1 2 3 4 rather than
|
||||
just all being MINE0. The mining medic isn't included because they suck
|
||||
- tweak: mining medic no longer gets 2 gpses
|
||||
2022-06-16:
|
||||
GalacticRuler:
|
||||
- rscadd: Added one new 3x3 maint ruin themed around vending machines
|
||||
- bugfix: Corrected missing spaces in station.dm
|
||||
ToasterBiome:
|
||||
- bugfix: tinted window in metastation courtroom is now a proper window spawner
|
||||
2022-06-17:
|
||||
AlvCyktor:
|
||||
- rscadd: Barq is good apparently
|
||||
JamieD1:
|
||||
- rscdel: Removes ALL button from investigate.
|
||||
nmajask:
|
||||
- bugfix: fixed wigs using a different sprite than it should
|
||||
2022-06-18:
|
||||
Mothblocks, ported to YogStation by SuperSlayer:
|
||||
- rscadd: Defibing people now gives positive mood
|
||||
Skrem7:
|
||||
- tweak: Rubber shot more damage and less damage falloff
|
||||
tattax:
|
||||
- bugfix: vanishing act now works, frenzy exit is now setup properly
|
||||
ynot01:
|
||||
- spellcheck: fixed fish descriptions
|
||||
- spellcheck: fixed card descriptions
|
||||
2022-06-19:
|
||||
' @LazennG, @ToasterBiome, Chubbygummibear':
|
||||
- rscadd: Basalt Katana gets an activatable dodge roll mechanic
|
||||
- rscadd: Dodge roll costs 5 stamina on lavaland and 15 on station but gives you
|
||||
.5 seconds of iframes and flying. Dodge rolling into a wall or another person
|
||||
will bonk and stun you, same with stam-critting yourself. i-frames only block
|
||||
straight up damage numbers, explosions still throw and deafen you, cc effects
|
||||
like a bola will still stick
|
||||
- tweak: Basalt katana force down to 18 to avoid miner ninjas tearing up the crew
|
||||
- tweak: Basalt katana damage on lavaland fauna up to 70, including megafauna
|
||||
- soundadd: dodge roll sound effect
|
||||
- imageadd: evasion icon to go with the popup letting you know you're in i-frames
|
||||
' Galacticruler, @Chubbygummibear, @Hopekz':
|
||||
- rscadd: Added new eye implant for reagent scanning, the chemical analyzer implant
|
||||
- tweak: added new implant to the tech node with the other HUD implants
|
||||
- tweak: added third mob-level check to allow for the new implant to work
|
||||
' comma, orelbon':
|
||||
- rscadd: Added holosigns from Baystation
|
||||
00ze-cyclone:
|
||||
- rscdel: Removed a space in the species whitelisting
|
||||
- bugfix: maybe fixed polys not being able to be CE (I hope it's not actually something
|
||||
as stupid as a singular space that broke everything though it would be nice
|
||||
because it would mean that it's easy to fix)
|
||||
'@ToasterBiome @Chubbygummibear @LazennG':
|
||||
- rscadd: Added inhand ability for bloody knuckles
|
||||
- tweak: tweaked some recent loot to hopefully be less useless
|
||||
Chubbygummibear:
|
||||
- tweak: Preternis eyes no longer delete themselves when in a non preternis host
|
||||
- tweak: Preternis eyes use their organ health as a charge meter. They drain (take
|
||||
damage at .5 eye damage per tick) in a non-preternis and recharge quickly (.5
|
||||
eye healing per tick) in an actual preternis.
|
||||
- tweak: Preternis eyes depend on being high organ health to use their night vision
|
||||
rather than preternis charge meter.
|
||||
- tweak: Preternis eyes are naturally cybernetic, so they don't decay outside of
|
||||
a body and you get flashed if emp'd. although your eyes are probably the least
|
||||
of your worries if emp'd as a preternis
|
||||
- rscadd: Stomach Pumping surgery. A quick way to deal with someone, living or dead
|
||||
who has way too many reagents in their system.
|
||||
- tweak: I updated our vomit code and i don't want to talk about it. players won't
|
||||
notice a difference
|
||||
GalacticRuler:
|
||||
- rscadd: Adds new Fishing themed 10x10 maint ruin.
|
||||
- tweak: Adds new ruin to station.dmm
|
||||
Skrem7:
|
||||
- tweak: WT has 2-rnd burst back, bullets do less individual damage, magazine size
|
||||
increased
|
||||
- tweak: Arrows are now slightly more sensible considering they can be produced
|
||||
and used by just about anyone as a ranged weapon that does more damage than
|
||||
most station weaponry such as the welder or saw.
|
||||
- tweak: Secbelt + variants can hold shotgun shell boxes and teleshields, bulky
|
||||
now.
|
||||
- tweak: Shotgun shell boxes can now only carry shotgun shells.
|
||||
- tweak: Beanbag boxes spawn with 7 beanbags, rather than 6.
|
||||
- tweak: Security webbing and HoS belt storage buffed.
|
||||
- tweak: HoS now spawns with their belt and teleshield from the locker, extra baton/flash/cuffs
|
||||
moved to locker.
|
||||
- tweak: Assault belt now identical to tactical webbing.
|
||||
- tweak: Shoulder holster normal-sized again.
|
||||
- tweak: Bandolier holds more shells.
|
||||
SomeguyManperson:
|
||||
- tweak: toxins bombs no longer give direct research, instead doubling research
|
||||
speed for the amount of points they are worth
|
||||
- tweak: bloodsucker frenzy now provides reduced damage slowdown for its duration
|
||||
- tweak: adds line battles, you can now shoot over people who are both prone and
|
||||
within 2 tiles of you
|
||||
- tweak: this also means you can combat flop to matrix bullets at close range
|
||||
TheBonded, ported to YogStation by SuperSlayer:
|
||||
- rscadd: podpeople from replica pods now have water blood by default, and inherit
|
||||
their blood chemical from the most abundant chemical trait in their seeds if
|
||||
applicable.
|
||||
TheGamerdk:
|
||||
- tweak: AI gets 1 more research point per CPU
|
||||
- rscadd: AI techs are no longer hiding in the techweb
|
||||
- tweak: AI cores should no longer turn off due to grid failure events
|
||||
ToasterBiome:
|
||||
- rscadd: Adds collapsable fishing rod
|
||||
- bugfix: fixes fishing rod right inhand
|
||||
- bugfix: eating fish now works
|
||||
- tweak: make fishing loot datums make a bit more sense
|
||||
TymurShatillo:
|
||||
- bugfix: Fixes pacifism touch cooldown
|
||||
jachlompsky:
|
||||
- bugfix: gangrel transform now gives the user armor and increased punch damage
|
||||
nmajask:
|
||||
- tweak: moving while doing a surgery now hurts the patient
|
||||
ynot01:
|
||||
- tweak: Destroying the bluespace locker now teleports everything inside to the
|
||||
station
|
||||
|
||||
|
Before Width: | Height: | Size: 453 B |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
BIN
icons/obj/holosign.dmi
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
@@ -746,6 +746,7 @@
|
||||
#include "code\game\machinery\gulag_teleporter.dm"
|
||||
#include "code\game\machinery\harvester.dm"
|
||||
#include "code\game\machinery\hologram.dm"
|
||||
#include "code\game\machinery\holosign.dm"
|
||||
#include "code\game\machinery\igniter.dm"
|
||||
#include "code\game\machinery\iv_drip.dm"
|
||||
#include "code\game\machinery\launch_pad.dm"
|
||||
@@ -3164,6 +3165,7 @@
|
||||
#include "code\modules\surgery\prosthetic_replacement.dm"
|
||||
#include "code\modules\surgery\remove_embedded_object.dm"
|
||||
#include "code\modules\surgery\repair_puncture.dm"
|
||||
#include "code\modules\surgery\stomachpump.dm"
|
||||
#include "code\modules\surgery\surgery.dm"
|
||||
#include "code\modules\surgery\surgery_step.dm"
|
||||
#include "code\modules\surgery\tools.dm"
|
||||
@@ -3350,6 +3352,7 @@
|
||||
#include "yogstation\code\datums\mutations\extendoarm.dm"
|
||||
#include "yogstation\code\datums\ruins\free_miners.dm"
|
||||
#include "yogstation\code\datums\ruins\station.dm"
|
||||
#include "yogstation\code\datums\status_effects\buffs.dm"
|
||||
#include "yogstation\code\datums\status_effects\neutral.dm"
|
||||
#include "yogstation\code\datums\traits\negative.dm"
|
||||
#include "yogstation\code\datums\wires\disposals.dm"
|
||||
|
||||
@@ -67,3 +67,15 @@ SUBSYSTEM_DEF(bluespace_locker)
|
||||
internal_locker.dump_contents()
|
||||
internal_locker.update_icon()
|
||||
external_locker.update_icon()
|
||||
|
||||
/datum/controller/subsystem/bluespace_locker/proc/redistribute_locker()
|
||||
if(!internal_locker)
|
||||
return
|
||||
var/area/A = get_area(internal_locker)
|
||||
for(var/atom/movable/M in A)
|
||||
if(M == internal_locker)
|
||||
continue
|
||||
if(istype(M, /obj/machinery/light))
|
||||
continue
|
||||
M.forceMove(find_safe_turf())
|
||||
bluespaceify_random_locker()
|
||||
|
||||
@@ -1,28 +1,67 @@
|
||||
#define FISHING_LOOT_NOTHING "nothing"
|
||||
#define FISHING_LOOT_JUNK "junk"
|
||||
#define FISHING_LOOT_COMMON "common"
|
||||
#define FISHING_LOOT_UNCOMMON "uncommon"
|
||||
#define FISHING_LOOT_RARE "rare"
|
||||
|
||||
/datum/component/fishable
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE
|
||||
var/datum/fishing_loot/common_loot = new /datum/fishing_loot/water/common
|
||||
var/datum/fishing_loot/loot = new /datum/fishing_loot/water
|
||||
|
||||
/datum/component/fishable/proc/getCommonLoot()
|
||||
return pick(common_loot.rewards)
|
||||
|
||||
/datum/component/fishable/Initialize()
|
||||
if(!istype(parent, /turf))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
/datum/component/fishable/proc/get_reward(var/fishing_power = 0)
|
||||
var/chance = list(
|
||||
FISHING_LOOT_NOTHING = min(max(0,100 - fishing_power),50),
|
||||
FISHING_LOOT_JUNK = min(max(0,50 - fishing_power),25),
|
||||
FISHING_LOOT_COMMON = min(fishing_power / 5,50),
|
||||
FISHING_LOOT_UNCOMMON = min(fishing_power / 10,33),
|
||||
FISHING_LOOT_RARE = min(fishing_power / 20,25)
|
||||
)
|
||||
|
||||
var/chosen_rank = pickweight(chance)
|
||||
switch(chosen_rank)
|
||||
if(FISHING_LOOT_JUNK)
|
||||
return pick(loot.junk_loot)
|
||||
if(FISHING_LOOT_COMMON)
|
||||
return pick(loot.common_loot)
|
||||
if(FISHING_LOOT_UNCOMMON)
|
||||
return pick(loot.uncommon_loot)
|
||||
if(FISHING_LOOT_RARE)
|
||||
return pick(loot.rare_loot)
|
||||
return FISHING_LOOT_NOTHING
|
||||
|
||||
|
||||
//LOOT TABLES
|
||||
|
||||
/datum/fishing_loot
|
||||
var/list/rewards = list()
|
||||
var/list/junk_loot
|
||||
var/list/common_loot
|
||||
var/list/uncommon_loot
|
||||
var/list/rare_loot
|
||||
|
||||
/datum/fishing_loot/water/common
|
||||
rewards = list(
|
||||
/datum/fishing_loot/water
|
||||
junk_loot = list(
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/cola,
|
||||
/obj/item/shard
|
||||
)
|
||||
common_loot = list(
|
||||
/obj/item/reagent_containers/food/snacks/fish/goldfish,
|
||||
/obj/item/reagent_containers/food/snacks/fish/goldfish/giant,
|
||||
/obj/item/reagent_containers/food/snacks/fish/salmon,
|
||||
/obj/item/reagent_containers/food/snacks/fish/bass,
|
||||
/obj/item/reagent_containers/food/snacks/fish/tuna,
|
||||
/obj/item/reagent_containers/food/snacks/fish/shrimp,
|
||||
/obj/item/reagent_containers/food/snacks/fish/squid,
|
||||
/obj/item/reagent_containers/food/snacks/fish/puffer,
|
||||
/obj/item/reagent_containers/food/snacks/bait/leech
|
||||
)
|
||||
uncommon_loot = list(
|
||||
/obj/item/reagent_containers/food/snacks/fish/goldfish/giant,
|
||||
/obj/item/reagent_containers/food/snacks/fish/shrimp,
|
||||
/obj/item/reagent_containers/food/snacks/fish/puffer,
|
||||
/obj/item/reagent_containers/food/snacks/fish/tuna
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/reagent_containers/food/snacks/fish/squid,
|
||||
/obj/item/stack/sheet/bluespace_crystal
|
||||
)
|
||||
|
||||
19
yogstation/code/datums/status_effects/buffs.dm
Normal file
@@ -0,0 +1,19 @@
|
||||
/datum/status_effect/dodging
|
||||
id = "dodging"
|
||||
duration = 0.5 SECONDS
|
||||
examine_text = span_notice("They're deftly dodging all incoming attacks!")
|
||||
alert_type = /obj/screen/alert/status_effect/dodging
|
||||
|
||||
/datum/status_effect/dodging/on_apply()
|
||||
owner.visible_message(span_notice("[owner] dodges!"))
|
||||
owner.status_flags |= GODMODE
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/dodging/on_remove()
|
||||
owner.status_flags &= ~GODMODE
|
||||
owner.visible_message(span_warning("[owner] returns to a neutral stance."))
|
||||
|
||||
/obj/screen/alert/status_effect/dodging
|
||||
name = "Dodging"
|
||||
desc = "You're sure to win because your speed is superior!"
|
||||
icon_state = "evading"
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/reagent_containers/food/snacks/fish
|
||||
name = "development fish"
|
||||
desc = "if you see this, get help"
|
||||
name = "debug fish"
|
||||
desc = "If you see this, get help!"
|
||||
icon = 'yogstation/icons/obj/fishing/fishing.dmi'
|
||||
icon_state = "bass"
|
||||
|
||||
@@ -23,17 +23,17 @@
|
||||
var/mutable_appearance/showoff_overlay
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/Initialize(mapload)
|
||||
. = ..()
|
||||
length = rand(min_length,max_length)
|
||||
weight = rand(min_weight,max_weight)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = (3 * slices_num), /datum/reagent/consumable/nutriment/vitamin = (2 * slices_num))
|
||||
. = ..()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/proc/GetChumValue()
|
||||
return //not used yet
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/examine(mob/user)
|
||||
. = ..()
|
||||
. += "It's [length] inches and [weight] ounces!"
|
||||
. += "It's [length] inch[length > 1 ? "es" : ""] and [weight] ounce[weight > 1 ? "s" : ""]!"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/attack_self(mob/M)
|
||||
if(showoff_overlay)
|
||||
@@ -44,8 +44,8 @@
|
||||
showoff_overlay = mutable_appearance(icon,icon_state)
|
||||
M.add_overlay(showoff_overlay)
|
||||
showoffer = M
|
||||
M.visible_message("[M] shows off [src]. It's [length] inches long and weighs [weight] ounces!", \
|
||||
span_notice("You show off [src]. It's [length] inches long and weighs [weight] ounces!"))
|
||||
M.visible_message("[M] shows off [src]. It's [length] inch[length > 1 ? "es" : ""] long and weighs [weight] ounce[weight > 1 ? "s" : ""]!", \
|
||||
span_notice("You show off [src]. It's [length] inch[length > 1 ? "es" : ""] long and weighs [weight] ounce[weight > 1 ? "s" : ""]!"))
|
||||
RegisterSignal(M,COMSIG_ATOM_DIR_CHANGE,.proc/stop_overlay,TRUE)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/proc/stop_overlay()
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/goldfish
|
||||
name = "galactic goldfish"
|
||||
desc = "it's so... small!"
|
||||
desc = "It's so... small!"
|
||||
icon_state = "fish_goldfish"
|
||||
min_length = 1
|
||||
max_length = 2
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/goldfish/giant
|
||||
name = "giant galactic goldfish"
|
||||
desc = "it's so... big!"
|
||||
desc = "It's so... big!"
|
||||
icon_state = "fish_goldfish_big"
|
||||
min_length = 6
|
||||
max_length = 19
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/salmon
|
||||
name = "space salmon"
|
||||
desc = "i thought they were supposed to be red"
|
||||
desc = "I thought they were supposed to be red..."
|
||||
icon_state = "fish_salmon"
|
||||
min_length = 28
|
||||
max_length = 32
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/bass
|
||||
name = "big bang bass"
|
||||
desc = "how am I supposed to play this thing?"
|
||||
desc = "How am I supposed to play this thing?"
|
||||
icon_state = "fish_bass"
|
||||
min_length = 12
|
||||
max_length = 32
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/tuna
|
||||
name = "temporal tuna"
|
||||
desc = "you can tune a piano but you can't tuna fish"
|
||||
desc = "You can tune a piano but you can't tuna fish!"
|
||||
icon_state = "fish_tuna"
|
||||
min_length = 15
|
||||
max_length = 79
|
||||
@@ -107,7 +107,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/shrimp
|
||||
name = "space shrimp"
|
||||
desc = "he looks a little shrimpy"
|
||||
desc = "He looks a little shrimpy."
|
||||
icon_state = "fish_shrimp"
|
||||
min_length = 1
|
||||
max_length = 6
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/squid
|
||||
name = "space squid"
|
||||
desc = "like the game?"
|
||||
desc = "Like the game?"
|
||||
icon_state = "fish_squid"
|
||||
min_length = 18
|
||||
max_length = 24
|
||||
@@ -127,7 +127,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fish/puffer
|
||||
name = "plasma pufferfish"
|
||||
desc = "it doesn't look like it's made of plasma..."
|
||||
desc = "It doesn't look like it's made of plasma..."
|
||||
icon_state = "fish_puffer"
|
||||
min_length = 1
|
||||
max_length = 1.4
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
desc = "A rod used for fishing. Despite ordinary appearances, fishing has evolved to suit the cosmos with various features, like auto-reeling."
|
||||
icon = 'yogstation/icons/obj/fishing/fishing.dmi'
|
||||
icon_state = "fishing_rod"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/fishing_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
lefthand_file = 'yogstation/icons/mob/inhands/equipment/fishing_lefthand.dmi'
|
||||
righthand_file = 'yogstation/icons/mob/inhands/equipment/fishing_righthand.dmi'
|
||||
usesound = 'sound/items/crowbar.ogg'
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
force = 2
|
||||
throwforce = 5
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(/datum/material/iron=50)
|
||||
|
||||
var/fishing_power = 10
|
||||
@@ -78,7 +78,11 @@
|
||||
/obj/item/twohanded/fishingrod/proc/reel_in(var/forced = FALSE)
|
||||
if(!forced && bite) // we got something!!!
|
||||
playsound(fishing_component, 'sound/effects/water_emerge.ogg', 50, FALSE, -5)
|
||||
spawn_reward()
|
||||
var/power = 0
|
||||
if(iscarbon(fisher)) //sorry, non-carbons don't get to wear cool fishing outfits
|
||||
var/mob/living/carbon/carbonfisher = fisher
|
||||
power = carbonfisher.fishing_power
|
||||
spawn_reward(fishing_power + power)
|
||||
if(bait && prob(max(50 - bait.fishing_power,0))) //50 - bait.fishing_power% chance to lose your bait
|
||||
to_chat(fisher, span_notice("Your [bait] is lost!"))
|
||||
cut_overlays()
|
||||
@@ -112,15 +116,18 @@
|
||||
I.alpha = 0
|
||||
animate(I, pixel_z = 32, alpha = 255, time = 2, easing = ELASTIC_EASING)
|
||||
|
||||
/obj/item/twohanded/fishingrod/proc/spawn_reward()
|
||||
var/obj/picked_reward = fishing_component.getCommonLoot()
|
||||
/obj/item/twohanded/fishingrod/proc/spawn_reward(var/fishing_power = 0)
|
||||
var/picked_reward = fishing_component.get_reward(fishing_power)
|
||||
if(!picked_reward || picked_reward == FISHING_LOOT_NOTHING) //nothing or something messed up
|
||||
fisher.visible_message(span_notice("[fisher] reels in ... nothing!"), span_notice("You reel in... nothing! Better luck next time!"))
|
||||
return
|
||||
var/obj/reward_item = new picked_reward(fishing_component.parent)
|
||||
reward_item.alpha = 0
|
||||
reward_item.pixel_y = -12
|
||||
animate(reward_item,time = 0.25 SECONDS,pixel_y = 0,alpha = 255,easing = SINE_EASING)
|
||||
if(!fisher) //uh oh
|
||||
return
|
||||
fisher.visible_message(span_notice("[fisher] reels in a [reward_item]!"), span_notice("You reel in a [reward_item]!"))
|
||||
fisher.visible_message(span_notice("[fisher] reels in [reward_item]!"), span_notice("You reel in [reward_item]!"))
|
||||
if(fisher.Adjacent(fishing_component.parent))
|
||||
unwield(fisher,show_message = FALSE)
|
||||
if(fisher.put_in_hands(reward_item))
|
||||
@@ -147,6 +154,7 @@
|
||||
if(bait)
|
||||
user.put_in_hands(bait)
|
||||
to_chat(user, span_notice("You take the [bait] off the fishing rod."))
|
||||
cut_overlays()
|
||||
bait = null
|
||||
recalculate_power()
|
||||
|
||||
@@ -154,3 +162,52 @@
|
||||
fishing_power = initial(fishing_power)
|
||||
if(bait)
|
||||
fishing_power += bait.fishing_power
|
||||
|
||||
/obj/item/twohanded/fishingrod/collapsable
|
||||
name = "collapsable fishing rod"
|
||||
icon_state = "fishing_rod_collapse_c"
|
||||
desc = "A collapsable fishing rod! This one can fit into your backpack for space hikes and the like."
|
||||
var/opened = FALSE
|
||||
fishing_power = 15
|
||||
|
||||
/obj/item/twohanded/fishingrod/collapsable/attackby(obj/item/B, mob/user, params)
|
||||
if(!istype(B,/obj/item/reagent_containers/food/snacks/bait))
|
||||
return
|
||||
if(!opened)
|
||||
to_chat(user,"You can't put bait on a collapsed rod!")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/twohanded/fishingrod/collapsable/AltClick(mob/living/user)
|
||||
if(bait)
|
||||
return ..()
|
||||
toggle(user)
|
||||
|
||||
/obj/item/twohanded/fishingrod/collapsable/proc/toggle(mob/user)
|
||||
if(wielded)
|
||||
to_chat(user,"You can't collapse the rod if you are holding it with both hands")
|
||||
return
|
||||
if(fishing)
|
||||
to_chat(user,"You can't collapse the fishing rod if you are currently using it!")
|
||||
return
|
||||
if(!user.is_holding(src)) //no uncollapsing in your backpack or pockets
|
||||
return
|
||||
opened = !opened
|
||||
w_class = opened ? WEIGHT_CLASS_BULKY : WEIGHT_CLASS_SMALL
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
|
||||
update_icon()
|
||||
|
||||
/obj/item/twohanded/fishingrod/collapsable/update_icon()
|
||||
icon_state = "fishing_rod_collapse[opened ? "" : "_c"]"
|
||||
|
||||
/obj/item/twohanded/fishingrod/collapsable/attack_self(mob/user)
|
||||
if(!opened)
|
||||
toggle(user)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/twohanded/fishingrod/collapsable/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
if(!opened)
|
||||
to_chat(user,"The collapsable rod has to be open before you can do anything!")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
return
|
||||
var/list/output = list()
|
||||
var/ruler = "<hr style='background:#000000; border:0; height:3px'>"
|
||||
var/list/navbar = list("<a href='?_src_=holder;[HrefToken()];nonalpha=1'>\[All\]</a>|<a href='?_src_=holder;[HrefToken()];nonalpha=2'>\[#\]</a>")
|
||||
var/list/navbar = list("<a href='?_src_=holder;[HrefToken()];nonalpha=2'>\[#\]</a>")
|
||||
for(var/letter in GLOB.alphabet)
|
||||
navbar += "|<a href='?_src_=holder;[HrefToken()];showmessages=[letter]'>\[[letter]\]</a>"
|
||||
navbar += "|<a href='?_src_=holder;[HrefToken()];showmemo=1'>\[Memos\]</a>|<a href='?_src_=holder;[HrefToken()];showwatch=1'>\[Watchlist\]</a>"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
alternate_worn_icon = 'yogstation/icons/mob/head.dmi'
|
||||
icon = 'yogstation/icons/obj/clothing/hats.dmi'
|
||||
|
||||
/obj/item/clothing/head/fishingcap/Initialize()
|
||||
/obj/item/clothing/head/fishing/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/fishingbonus,5)
|
||||
|
||||
|
||||
@@ -34,8 +34,7 @@
|
||||
pda_type = /obj/item/pda/miningmed
|
||||
|
||||
backpack_contents = list(/obj/item/roller = 1,\
|
||||
/obj/item/kitchen/knife/combat/survival = 1,\
|
||||
/obj/item/gps/mining = 1)
|
||||
/obj/item/kitchen/knife/combat/survival = 1)
|
||||
belt = /obj/item/storage/belt/medical/mining
|
||||
ears = /obj/item/radio/headset/headset_medcargo
|
||||
glasses = /obj/item/clothing/glasses/hud/health/meson
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
/obj/item/organ/eyes/preternis
|
||||
/obj/item/organ/eyes/robotic/preternis
|
||||
name = "preternis eyes"
|
||||
desc = "An experimental upgraded version of eyes that can see in the dark.They are designed to fit preternis"
|
||||
desc = "An experimental upgraded version of eyes that can see in the dark. They are designed to fit preternis"
|
||||
see_in_dark = PRETERNIS_NV_ON
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
//preternis eyes need to be powered by a preternis to function, in a non preternis they slowly power down to blindness
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
|
||||
low_threshold_passed = span_info("Your Preternis eyes switch to battery saver mode.")
|
||||
high_threshold_passed = span_info("Your Preternis eyes only show a sliver of battery life left!")
|
||||
now_failing = span_warning("An empty battery icon is all you can see as your eyes shut off!")
|
||||
now_fixed = span_info("Lines of text scroll in your vision as your eyes begin rebooting.")
|
||||
high_threshold_cleared = span_info("Your Preternis eyes have recharged enough to re-enable most functionality.")
|
||||
low_threshold_cleared = span_info("Your Preternis eyes have almost fully recharged.")
|
||||
var/powered = TRUE
|
||||
actions_types = list(/datum/action/item_action/organ_action/use)
|
||||
var/night_vision = TRUE
|
||||
|
||||
/obj/item/organ/eyes/preternis/ui_action_click()
|
||||
var/datum/species/preternis/S = owner.dna.species
|
||||
if(S.charge < PRETERNIS_LEVEL_FED)
|
||||
/obj/item/organ/eyes/robotic/preternis/ui_action_click()
|
||||
if(damage > low_threshold)
|
||||
//no nightvision if your eyes are hurt
|
||||
return
|
||||
sight_flags = initial(sight_flags)
|
||||
switch(lighting_alpha)
|
||||
@@ -23,17 +33,29 @@
|
||||
sight_flags &= ~SEE_BLACKNESS
|
||||
owner.update_sight()
|
||||
|
||||
/obj/item/organ/eyes/preternis/on_life()
|
||||
/obj/item/organ/eyes/robotic/preternis/on_life()
|
||||
. = ..()
|
||||
if(!ispreternis(owner))
|
||||
qdel(src) //these eyes depend on being inside a preternis
|
||||
if(!owner)
|
||||
return
|
||||
var/datum/species/preternis/S = owner.dna.species
|
||||
if(S.charge >= PRETERNIS_LEVEL_FED)
|
||||
if(ispreternis(owner) && !powered)
|
||||
powered = TRUE
|
||||
to_chat(owner, span_notice("A battery icon disappears from your vision as your [src] switch to external power."))
|
||||
if(!ispreternis(owner) && powered) //these eyes depend on being inside a preternis for power
|
||||
powered = FALSE
|
||||
to_chat(owner, span_boldwarning("Your [src] flash warnings that they've lost their power source, and are running on emergency power!"))
|
||||
if(powered)
|
||||
//when powered, they recharge by healing
|
||||
owner.adjustOrganLoss(ORGAN_SLOT_EYES,-0.5)
|
||||
else
|
||||
//to simulate running out of power, they take damage
|
||||
owner.adjustOrganLoss(ORGAN_SLOT_EYES,0.5)
|
||||
|
||||
if(damage < low_threshold)
|
||||
if(see_in_dark == PRETERNIS_NV_OFF)
|
||||
see_in_dark = PRETERNIS_NV_ON
|
||||
owner.update_sight()
|
||||
else
|
||||
//if your eyes start getting hurt no more nightvision
|
||||
if(see_in_dark == PRETERNIS_NV_ON)
|
||||
see_in_dark = PRETERNIS_NV_OFF
|
||||
owner.update_sight()
|
||||
@@ -42,6 +64,17 @@
|
||||
sight_flags &= ~SEE_BLACKNESS
|
||||
owner.update_sight()
|
||||
|
||||
/obj/item/organ/eyes/robotic/preternis/examine(mob/user)
|
||||
. = ..()
|
||||
if(status == ORGAN_ROBOTIC && (organ_flags & ORGAN_FAILING))
|
||||
. += span_warning("[src] appears to be completely out of charge. However, that's nothing popping them back in a Preternis wouldn't fix.")
|
||||
|
||||
else if(organ_flags & ORGAN_FAILING)
|
||||
. += span_warning("[src] appears to be completely out of charge. If they were put back in a Preternis they would surely recharge in time.")
|
||||
|
||||
else if(damage > high_threshold)
|
||||
. += span_warning("[src] seem to flicker on and off. They must be pretty low on charge without being in a Preternis")
|
||||
|
||||
/obj/item/organ/lungs/preternis
|
||||
name = "preternis lungs"
|
||||
desc = "An experimental set of lungs.Due to the cybernetic nature of these lungs,they are less resistant to heat and cold but are more efficent at filtering oxygen."
|
||||
|
||||
@@ -25,7 +25,7 @@ adjust_charge - take a positive or negative value to adjust the charge level
|
||||
siemens_coeff = 1.75 //Computers REALLY don't like being shorted out
|
||||
payday_modifier = 0.8 //Useful to NT for engineering + very close to Human
|
||||
yogs_draw_robot_hair = TRUE
|
||||
mutanteyes = /obj/item/organ/eyes/preternis
|
||||
mutanteyes = /obj/item/organ/eyes/robotic/preternis
|
||||
mutantlungs = /obj/item/organ/lungs/preternis
|
||||
yogs_virus_infect_chance = 20
|
||||
virus_resistance_boost = 10 //YEOUTCH,good luck getting it out
|
||||
|
||||
BIN
yogstation/icons/mob/inhands/equipment/fishing_lefthand.dmi
Normal file
|
After Width: | Height: | Size: 433 B |
BIN
yogstation/icons/mob/inhands/equipment/fishing_righthand.dmi
Normal file
|
After Width: | Height: | Size: 431 B |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 6.9 KiB |