Merge remote-tracking branch 'origin/master' into luciee

This commit is contained in:
Katherine Kiefer
2022-06-21 08:15:55 +10:00
93 changed files with 2066 additions and 628 deletions

View 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
"}

View File

@@ -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
"}

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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."

View File

@@ -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.")

View 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"

View File

@@ -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)

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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]"

View File

@@ -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

View File

@@ -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

View File

@@ -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."))

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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()
..()
..()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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()

View File

@@ -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."

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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!"))

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()
..()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View File

@@ -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."

View File

@@ -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."

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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"

View File

@@ -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"

View File

@@ -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)
..()

View 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)

View File

@@ -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")

View File

@@ -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)

View File

@@ -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,

View File

@@ -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

View File

@@ -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>

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

BIN
icons/obj/holosign.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@@ -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"

View File

@@ -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()

View File

@@ -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
)

File diff suppressed because it is too large Load Diff

View 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"

View File

@@ -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

View File

@@ -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
..()

View File

@@ -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>"

View File

@@ -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)

View File

@@ -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

View File

@@ -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."

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.