Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Dahlular
2021-04-17 21:05:19 -06:00
165 changed files with 9717 additions and 130362 deletions
@@ -1,678 +0,0 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/obj/structure/lattice,
/turf/template_noop,
/area/space/nearstation)
"c" = (
/turf/closed/wall,
/area/ruin/space/has_grav/gasthelizard)
"d" = (
/obj/machinery/light{
dir = 1
},
/obj/structure/bed,
/obj/effect/decal/remains/human,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"e" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"f" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/light{
dir = 1
},
/obj/structure/bed,
/obj/effect/decal/remains/human,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"g" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/light{
dir = 1
},
/obj/structure/bed,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"h" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"i" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"j" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/machinery/atmospherics/components/unary/outlet_injector,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"k" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"l" = (
/obj/machinery/atmospherics/components/unary/outlet_injector,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/airless/dark,
/area/ruin/space/has_grav/gasthelizard)
"m" = (
/obj/structure/closet/crate/freezer,
/obj/item/stack/sheet/animalhide/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/turf/open/floor/plasteel/freezer,
/area/ruin/space/has_grav/gasthelizard)
"n" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/machinery/light{
dir = 1
},
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/turf/open/floor/plasteel/freezer,
/area/ruin/space/has_grav/gasthelizard)
"o" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/clothing/under/rank/prisoner,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/turf/open/floor/plasteel/freezer,
/area/ruin/space/has_grav/gasthelizard)
"p" = (
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/effect/turf_decal/tile/blue{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"q" = (
/obj/machinery/door/window/brigdoor/northleft,
/obj/machinery/atmospherics/components/binary/pump{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"r" = (
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"s" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
},
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"t" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 1
},
/obj/machinery/power/apc{
dir = 1;
name = "Worn-out APC";
pixel_x = 1;
pixel_y = 26
},
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"u" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"v" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"w" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 9
},
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"x" = (
/obj/structure/kitchenspike,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"y" = (
/obj/structure/table/reinforced,
/obj/item/kitchen/knife/butcher,
/obj/item/restraints/handcuffs,
/obj/item/reagent_containers/spray/pepper,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"z" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
},
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"A" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"B" = (
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"C" = (
/obj/machinery/gibber,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"D" = (
/obj/structure/table/reinforced,
/obj/item/clothing/suit/straight_jacket,
/obj/item/reagent_containers/syringe/lethal,
/obj/item/reagent_containers/syringe/lethal/choral,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"E" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
},
/obj/machinery/portable_atmospherics/canister/toxins,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"F" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 9
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"G" = (
/obj/structure/chair/office/dark,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"H" = (
/obj/machinery/door/airlock/security,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"I" = (
/obj/item/reagent_containers/glass/bottle/morphine{
pixel_x = -4;
pixel_y = 1
},
/obj/item/reagent_containers/glass/bottle/chloralhydrate{
name = "chloral hydrate bottle"
},
/obj/item/reagent_containers/glass/bottle/toxin{
pixel_x = 6;
pixel_y = 8
},
/obj/item/reagent_containers/glass/bottle/morphine{
pixel_x = 5;
pixel_y = 1
},
/obj/item/reagent_containers/glass/bottle/facid{
name = "fluorosulfuric acid bottle";
pixel_x = -3;
pixel_y = 6
},
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"J" = (
/obj/structure/rack,
/obj/item/storage/toolbox/drone,
/obj/item/melee/baton/cattleprod,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"K" = (
/obj/structure/table,
/obj/item/pen/red,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"L" = (
/obj/structure/table,
/obj/item/paper_bin,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"M" = (
/obj/structure/table,
/obj/item/storage/box/prisoner,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"N" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/machinery/light,
/obj/structure/table,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"O" = (
/obj/machinery/portable_atmospherics/scrubber,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"P" = (
/obj/structure/table/reinforced,
/obj/item/surgicaldrill,
/obj/item/hemostat,
/obj/item/scalpel,
/obj/item/surgical_drapes,
/obj/item/retractor,
/obj/item/cautery,
/obj/item/circular_saw,
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"Q" = (
/obj/structure/table/optable,
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"R" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/glass/bottle/mutagen,
/obj/item/reagent_containers/glass/bottle/mutagen,
/obj/item/razor,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"S" = (
/obj/machinery/suit_storage_unit/security,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"T" = (
/obj/machinery/light,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"U" = (
/obj/structure/closet/emcloset,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"V" = (
/obj/machinery/door/airlock/external,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/ruin/space/has_grav/gasthelizard)
"W" = (
/turf/open/floor/plating,
/area/ruin/space/has_grav/gasthelizard)
"Z" = (
/obj/machinery/door/airlock/external,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
/turf/open/floor/plating,
/area/ruin/space/has_grav/gasthelizard)
(1,1,1) = {"
a
a
a
a
a
a
a
a
b
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
b
b
b
b
a
b
b
b
a
a
a
"}
(3,1,1) = {"
a
a
a
b
b
c
c
c
c
c
c
c
b
a
"}
(4,1,1) = {"
a
b
b
b
b
c
s
z
E
J
S
c
b
b
"}
(5,1,1) = {"
b
a
c
c
c
c
t
A
F
B
T
c
c
c
"}
(6,1,1) = {"
a
b
c
d
i
p
u
B
B
B
B
V
W
Z
"}
(7,1,1) = {"
b
b
c
e
j
q
v
B
B
B
U
c
c
c
"}
(8,1,1) = {"
a
b
c
f
k
p
u
B
B
K
c
c
b
b
"}
(9,1,1) = {"
b
b
c
e
j
q
v
B
G
L
c
b
b
a
"}
(10,1,1) = {"
a
a
c
g
k
p
u
B
B
M
c
b
a
a
"}
(11,1,1) = {"
b
b
c
e
j
q
v
B
B
N
c
b
a
a
"}
(12,1,1) = {"
b
a
c
f
k
p
u
B
B
O
c
b
a
a
"}
(13,1,1) = {"
a
b
c
h
l
q
w
B
B
O
c
b
a
a
"}
(14,1,1) = {"
a
b
c
c
c
c
c
c
H
c
c
b
a
a
"}
(15,1,1) = {"
a
b
b
c
m
r
x
C
r
P
c
a
a
a
"}
(16,1,1) = {"
a
b
b
c
n
r
r
r
r
Q
c
a
a
a
"}
(17,1,1) = {"
a
a
b
c
o
r
y
D
I
R
c
b
b
a
"}
(18,1,1) = {"
a
a
b
c
c
c
c
c
c
c
c
b
a
a
"}
(19,1,1) = {"
a
a
a
a
b
b
a
a
b
b
b
a
a
a
"}
File diff suppressed because it is too large Load Diff
+284 -78
View File
@@ -5503,12 +5503,8 @@
/turf/open/floor/plasteel,
/area/xenoarch/gen)
"nx" = (
/obj/structure/chair/comfy/black{
dir = 8
},
/obj/item/toy/plush/borgplushie/secdrake,
/turf/open/floor/plasteel/dark,
/area/xenoarch/gen)
/turf/closed/wall/r_wall/syndicate/nodiagonal,
/area/xenoarch/nothinghere)
"ny" = (
/obj/item/toy/plush/catgirl/fermis,
/turf/open/floor/plasteel/white,
@@ -6204,10 +6200,12 @@
/turf/closed/wall,
/area/lavaland/surface/outdoors)
"ph" = (
/obj/structure/flora/rock/pile,
/obj/effect/decal/remains/xeno,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
/obj/effect/decal/cleanable/cobweb,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"pi" = (
/obj/structure/girder,
/turf/open/floor/plating{
@@ -6588,18 +6586,226 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/lavaland/surface/outdoors)
"qp" = (
/obj/machinery/computer{
desc = "This screen is broken beyond repairs... What little you can make out of it reads as follows... '-The skin of employee 228, mimicking them after consuming them.'";
name = "chamber 27 monitoring console";
obj_integrity = 20;
pixel_y = 2
},
/obj/structure/tubes{
pixel_y = 4
},
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"qK" = (
/obj/machinery/door/airlock/vault{
name = "secured door";
req_access = 207
},
/obj/effect/mapping_helpers/airlock/locked,
/obj/effect/turf_decal/stripes/full,
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"qS" = (
/obj/structure/filingcabinet,
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
"qZ" = (
/obj/structure/table/reinforced,
/obj/item/paper/crumpled/robertsworkjournal{
info = "<h4>Most boring job in the universe.</h4>Starting to reconsider things around here... Sure, it pays the bills at home but, is it really worth it? I'm supposed to make sure no one enters through that door without permission from CentCom but, what's even so important about it? Why not just put a robot or something...<br><h4>Weird.</h4>The outpost is kind of okay but... A little too warm for my taste... Not that I can do much about it given how we're right next to so much lava. I just wish the supplies were actual food instead of... Junk food and donk pockets. I know this stuff is tailored to make people survive even in the deepest reaches of space, but is it too much to ask for actual meat for once?<br><h4>Shrug?</h4>CC provided a small communications relay that I could use. It's not that strong but it helps me stay sane.<br> Earlier I messaged them asking about this place and why is it so important, but to my surprise, the only answer I got was that there's 'Nothing there.' Can you believe that?<br> I can't say I'm not curious... I have the keys and all but should I? I've one job and one job only, failing on something like that would probably not look good on my profile.<br> But the weirdest part?<br> Sometimes I hear an echo of myself when I talk to myself or laugh at something in here... And it comes from, you guessed it, behind that damned door. Might I'm just going crazy here by myself... Hallucinating because I don't really have anyone to talk to in real time other than myself...<br> Might be time to quit or to just... Have a look, you know? Can't be that bad if there's nothing there after all... It would certainly put me at ease.";
name = "Journal"
},
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
"rf" = (
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"so" = (
/turf/closed/wall/r_wall,
/area/xenoarch/nothinghere)
"tG" = (
/obj/structure/chair/office,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
"wZ" = (
/obj/machinery/door/airlock/highsecurity{
req_access = 207
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plasteel/rockvault,
/area/xenoarch/nothinghere)
"xG" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"xJ" = (
/obj/structure/disposalpipe/broken{
dir = 4
},
/obj/effect/turf_decal/loading_area/red{
dir = 8
},
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"AF" = (
/obj/structure/closet/firecloset,
/turf/open/floor/plating{
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/xenoarch/gen)
"ED" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/rockvault,
/area/xenoarch/nothinghere)
"EP" = (
/obj/decal/stencil/left/seven{
pixel_y = 36
},
/obj/decal/stencil/left/two{
pixel_x = -15;
pixel_y = 36
},
/obj/item/stack/cable_coil/cut/red{
pixel_y = -6
},
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"FE" = (
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
"FT" = (
/obj/machinery/light/broken{
dir = 4
},
/turf/open/floor/plasteel/rockvault,
/area/xenoarch/nothinghere)
"GR" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
"Hx" = (
/turf/open/floor/carpet,
/area/xenoarch/gen)
"Ku" = (
/turf/closed/wall/r_wall/rust,
/area/xenoarch/nothinghere)
"LP" = (
/obj/machinery/porta_turret/aux_base{
dir = 5;
icon_state = "standard_broken";
obj_integrity = 20;
stat = 1
},
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"Mb" = (
/obj/machinery/light/small/broken{
dir = 8
},
/obj/effect/decal/cleanable/blood/old,
/obj/item/clockwork/alloy_shards,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"Ne" = (
/obj/item/stack/cable_coil/cut/red{
pixel_x = 2;
pixel_y = 11
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"Nj" = (
/obj/structure/table/reinforced,
/obj/item/pen{
pixel_x = -4;
pixel_y = 3
},
/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
pixel_x = 11
},
/obj/item/lighter{
pixel_x = 3;
pixel_y = 5
},
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
"Od" = (
/obj/effect/decal/cleanable/oil{
icon_state = "floor5"
},
/turf/open/floor/plasteel/rockvault,
/area/xenoarch/nothinghere)
"RA" = (
/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"Sa" = (
/obj/item/shard{
pixel_x = -6;
pixel_y = 8
},
/obj/effect/decal/cleanable/glass,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"St" = (
/obj/machinery/light/broken{
dir = 1
},
/obj/effect/decal/cleanable/ash,
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
"Sy" = (
/turf/closed/wall,
/area/xenoarch/gen)
"Sz" = (
/obj/item/twohanded/required/kirbyplants/random,
/turf/open/floor/plasteel/rockvault,
/area/xenoarch/nothinghere)
"Us" = (
/obj/effect/decal/cleanable/greenglow/radioactive,
/turf/open/floor/plasteel/grimy{
icon_state = "engine"
},
/area/xenoarch/nothinghere)
"Ws" = (
/obj/structure/flora/rock/pile,
/obj/effect/decal/remains/xeno,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"ZK" = (
/obj/machinery/door/window/eastleft{
dir = 2
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/grimy,
/area/xenoarch/nothinghere)
(1,1,1) = {"
ms
@@ -12217,7 +12423,7 @@ aG
aW
Sy
bf
nx
ax
el
fL
co
@@ -66657,18 +66863,18 @@ ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
nx
nx
nx
nx
nx
nx
so
so
Ku
Ku
so
Ku
oU
ab
ab
@@ -66914,20 +67120,20 @@ ab
ab
ab
ab
nx
ph
Sa
Mb
LP
nx
St
FE
ZK
ED
Sz
so
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
lQ
ab
ab
jY
@@ -67171,21 +67377,21 @@ ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ph
nx
EP
xG
rf
RA
qK
FE
GR
Nj
ED
ED
wZ
lQ
lQ
lQ
lQ
lQ
lQ
@@ -67428,21 +67634,21 @@ ab
ab
ab
ab
nx
qp
xJ
Ne
Us
nx
qS
tG
qZ
FT
Od
so
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
lQ
lQ
oV
lQ
jV
@@ -67685,20 +67891,20 @@ ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
nx
nx
nx
nx
nx
nx
so
so
Ku
so
Ku
Ku
oU
ab
Ws
ab
oU
ab
+31 -26
View File
@@ -9239,7 +9239,9 @@
pixel_x = -17;
pixel_y = 3
},
/obj/machinery/recharger,
/obj/machinery/recharger{
pixel_y = 4
},
/turf/open/floor/plasteel/grimy,
/area/centcom/ferry)
"tR" = (
@@ -9518,6 +9520,7 @@
id_tag = "CCDormChemlight";
name = "Kenshin Midori's Bunk"
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"uy" = (
@@ -11091,7 +11094,13 @@
/area/centcom/evac)
"yh" = (
/obj/structure/table/wood,
/obj/item/paper/monitorkey,
/obj/item/paper/monitorkey{
pixel_x = 10;
pixel_y = -3
},
/obj/machinery/recharger{
pixel_y = 4
},
/turf/open/floor/plasteel/dark,
/area/centcom/ferry)
"yi" = (
@@ -14324,12 +14333,22 @@
/turf/open/floor/plasteel/white,
/area/centcom/holding)
"Fk" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom";
opacity = 1
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/turf/open/floor/carpet/black,
/area/centcom/ferry)
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/recharger{
pixel_y = 4
},
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/dark,
/area/centcom/control)
"Fm" = (
/obj/machinery/shower{
dir = 4
@@ -17854,7 +17873,6 @@
/area/centcom/ferry)
"MY" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/glass/bowl,
/turf/open/floor/plasteel/cafeteria,
/area/centcom/ferry)
"Nc" = (
@@ -20271,21 +20289,6 @@
name = "plating"
},
/area/centcom/control)
"Wm" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/recharger,
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/dark,
/area/centcom/control)
"Wn" = (
/obj/effect/turf_decal/loading_area{
dir = 6;
@@ -21287,10 +21290,12 @@
damtype = "stamina";
desc = "An old and dusty book, the pages look faded from time while looking at the pages alone makes you tired.";
force = 80;
hitsound = punch;
hitsound = "punch";
name = "very heavy book";
throwforce = 160
},
/obj/item/storage/box/zipties,
/obj/item/clothing/mask/gas/sechailer,
/turf/open/floor/wood,
/area/centcom/ferry)
"Zz" = (
@@ -55028,7 +55033,7 @@ mD
oe
mD
mD
Fk
ZT
mD
mD
mD
@@ -63234,7 +63239,7 @@ iu
io
rN
CX
Wm
Fk
DF
DT
io
+1
View File
@@ -66,6 +66,7 @@
#define ACCESS_CLONING 68 //Cloning room and clone pod ejection
#define ACCESS_ENTER_GENPOP 69
#define ACCESS_LEAVE_GENPOP 70
#define ACCESS_PSYCH 71
//BEGIN CENTCOM ACCESS
/*Should leave plenty of room if we need to add more access levels.
+3
View File
@@ -89,6 +89,9 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isxenoperson(A) (is_species(A, /datum/species/xeno))
#define isstartjelly(A) (is_species(A, /datum/species/jelly/roundstartslime))
// Hyperstation Carbon Stuff
#define iswendigo(A) (istype(A, /mob/living/carbon/wendigo))
//more carbon mobs
#define ismonkey(A) (istype(A, /mob/living/carbon/monkey))
+1
View File
@@ -27,6 +27,7 @@
#define VIROLOGIST (1<<6)
#define JR_DOCTOR (1<<7)
#define JR_SCIENTIST (1<<9)
#define MED_PSYCH (1<<14)
#define CIVILIAN (1<<2)
-2
View File
@@ -226,5 +226,3 @@
#define FORCE_BOOLEAN(x) ((x)? TRUE : FALSE)
#define TILES_TO_PIXELS(tiles) (tiles * PIXELS)
#define CLAMP(CLVALUE,CLMIN,CLMAX) clamp(CLVALUE, CLMIN, CLMAX)
+1
View File
@@ -69,6 +69,7 @@
#define ALIEN_BODYPART "alien"
#define LARVA_BODYPART "larva"
#define DEVIL_BODYPART "devil"
#define WENDIGO_BODYPART "wendigo"
/*see __DEFINES/inventory.dm for bodypart bitflag defines*/
// Health/damage defines for carbon mobs
+58 -4
View File
@@ -5,10 +5,11 @@
#define CHANNEL_JUKEBOX 1021
#define CHANNEL_JUKEBOX_START 1016 //The gap between this and CHANNEL_JUKEBOX determines the amount of free jukebox channels. This currently allows 6 jukebox channels to exist.
#define CHANNEL_JUSTICAR_ARK 1015
#define CHANNEL_HEARTBEAT 1014 //sound channel for heartbeats
#define CHANNEL_AMBIENCE 1013
#define CHANNEL_BUZZ 1012
#define CHANNEL_BICYCLE 1011
#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats
#define CHANNEL_AMBIENCE 1019
#define CHANNEL_BUZZ 1018
#define CHANNEL_BICYCLE 1017
//CIT CHANNELS - TRY NOT TO REGRESS
#define CHANNEL_PRED 1010
@@ -79,3 +80,56 @@
'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\
'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\
'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg')
//default byond sound environments
#define SOUND_ENVIRONMENT_NONE -1
#define SOUND_ENVIRONMENT_GENERIC 0
#define SOUND_ENVIRONMENT_PADDED_CELL 1
#define SOUND_ENVIRONMENT_ROOM 2
#define SOUND_ENVIRONMENT_BATHROOM 3
#define SOUND_ENVIRONMENT_LIVINGROOM 4
#define SOUND_ENVIRONMENT_STONEROOM 5
#define SOUND_ENVIRONMENT_AUDITORIUM 6
#define SOUND_ENVIRONMENT_CONCERT_HALL 7
#define SOUND_ENVIRONMENT_CAVE 8
#define SOUND_ENVIRONMENT_ARENA 9
#define SOUND_ENVIRONMENT_HANGAR 10
#define SOUND_ENVIRONMENT_CARPETED_HALLWAY 11
#define SOUND_ENVIRONMENT_HALLWAY 12
#define SOUND_ENVIRONMENT_STONE_CORRIDOR 13
#define SOUND_ENVIRONMENT_ALLEY 14
#define SOUND_ENVIRONMENT_FOREST 15
#define SOUND_ENVIRONMENT_CITY 16
#define SOUND_ENVIRONMENT_MOUNTAINS 17
#define SOUND_ENVIRONMENT_QUARRY 18
#define SOUND_ENVIRONMENT_PLAIN 19
#define SOUND_ENVIRONMENT_PARKING_LOT 20
#define SOUND_ENVIRONMENT_SEWER_PIPE 21
#define SOUND_ENVIRONMENT_UNDERWATER 22
#define SOUND_ENVIRONMENT_DRUGGED 23
#define SOUND_ENVIRONMENT_DIZZY 24
#define SOUND_ENVIRONMENT_PSYCHOTIC 25
//If we ever make custom ones add them here
//"sound areas": easy way of keeping different types of areas consistent.
#define SOUND_AREA_STANDARD_STATION SOUND_ENVIRONMENT_PARKING_LOT
#define SOUND_AREA_LARGE_ENCLOSED SOUND_ENVIRONMENT_QUARRY
#define SOUND_AREA_SMALL_ENCLOSED SOUND_ENVIRONMENT_BATHROOM
#define SOUND_AREA_TUNNEL_ENCLOSED SOUND_ENVIRONMENT_STONEROOM
#define SOUND_AREA_LARGE_SOFTFLOOR SOUND_ENVIRONMENT_CARPETED_HALLWAY
#define SOUND_AREA_MEDIUM_SOFTFLOOR SOUND_ENVIRONMENT_LIVINGROOM
#define SOUND_AREA_SMALL_SOFTFLOOR SOUND_ENVIRONMENT_ROOM
#define SOUND_AREA_ASTEROID SOUND_ENVIRONMENT_CAVE
#define SOUND_AREA_SPACE SOUND_ENVIRONMENT_UNDERWATER
#define SOUND_AREA_LAVALAND SOUND_ENVIRONMENT_MOUNTAINS
#define SOUND_AREA_ICEMOON SOUND_ENVIRONMENT_CAVE
#define SOUND_AREA_WOODFLOOR SOUND_ENVIRONMENT_CITY
#define INTERACTION_SOUND_RANGE_MODIFIER -3
#define EQUIP_SOUND_VOLUME 30
#define PICKUP_SOUND_VOLUME 40
#define DROP_SOUND_VOLUME 50
#define YEET_SOUND_VOLUME 90
+3 -5
View File
@@ -522,10 +522,8 @@
used_key_list[input_key] = 1
return input_key
#if DM_VERSION > 513
#error Remie said that lummox was adding a way to get a lists
#error contents via list.values, if that is true remove this
#error otherwise, update the version and bug lummox
#if DM_VERSION < 513
#error For the love of god do not compile the server below 513
#endif
//Flattens a keyed list into a list of it's contents
/proc/flatten_list(list/key_list)
@@ -578,4 +576,4 @@
var/list/ret = list()
for(var/key in input)
ret += key
return ret
return ret
+2 -5
View File
@@ -444,11 +444,8 @@ Turf and target are separate in case you want to teleport some distance from a t
var/y = min(world.maxy, max(1, A.y + dy))
return locate(x,y,A.z)
#if DM_VERSION > 513
#warn if you're getting this warning it means 513 is stable
#warn and you should remove this tidbit
#endif
#if DM_VERSION < 513
#warn what the fuck are you doing? Compile on 513+ not below.
/proc/arctan(x)
var/y=arcsin(x/sqrt(1+x*x))
return y
@@ -1616,4 +1613,4 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
if(190)
return "."
if(189)
return "-"
return "-"
+4 -4
View File
@@ -33,10 +33,10 @@ SUBSYSTEM_DEF(input)
"Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
"O" = "ooc",
"Ctrl+O" = "looc",
"Ctrl+T" = "say",
"Ctrl+T" = "say_indicator",
"T" = "say_indicator",
"Y" = "whisper",
"Ctrl+M" = "me",
"Ctrl+M" = "me_indicato",
"M" = "me_indicator",
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
"Any" = "\"KeyDown \[\[*\]\]\"",
@@ -50,9 +50,9 @@ SUBSYSTEM_DEF(input)
"old_hotkeys" = list(
"Tab" = "\".winset \\\"mainwindow.macro=old_default input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
"O" = "ooc",
"T" = "say",
"T" = "say_indicator",
"Ctrl+T" = "say_indicator",
"M" = "me",
"M" = "me_indicator",
"Ctrl+M" = "me_indicator",
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
"Any" = "\"KeyDown \[\[*\]\]\"",
+8 -3
View File
@@ -149,9 +149,14 @@ SUBSYSTEM_DEF(vote)
if("5")
v += winners[option] //Add the number votes to the pool
numbers += (winners[option]*5) //Add the value of the vote to numbers
while (v < DYNAMIC_VOTE_NORMALIZATION) //For low low pop, low vote rounds.
numbers += DYNAMIC_DEFAULT_CHAOS //stops the one person voting from setting the chaos to five and flooding the station with anomalies
v += 1
if(v < DYNAMIC_VOTE_NORMALIZATION)
while (v < DYNAMIC_VOTE_NORMALIZATION) //For low low pop, low vote rounds.
numbers += DYNAMIC_DEFAULT_CHAOS //stops the one person voting from setting the chaos to five and flooding the station with anomalies
v += 1
else if (voted.len < GLOB.clients.len) //Have non-voters "vote" 2, if we're not lowpop
for(var/I in 1 to (GLOB.clients.len - voted.len))
v += 1
numbers += 2
var/total = 0
for (var/i in numbers)
total += i
@@ -134,7 +134,7 @@
if(ismob(parent.loc) && isitem(AM))
var/obj/item/I = AM
var/mob/M = parent.loc
I.dropped(M)
I.dropped(M, TRUE)
if(new_location)
//Reset the items values
_removal_reset(AM)
-6
View File
@@ -105,12 +105,6 @@
name = "Empty Shell"
description = "Cosy, rural property availible for young professional couple. Only twelve parsecs from the nearest hyperspace lane!"
/datum/map_template/ruin/space/gas_the_lizards
id = "gas-the-lizards"
suffix = "gasthelizards.dmm"
name = "Disposal Facility 17"
description = "Gas efficiency at 95.6%, fluid elimination at 96.2%. Will require renewed supplies of 'carpet' before the end of the quarter."
/datum/map_template/ruin/space/intact_empty_ship
id = "intact-empty-ship"
suffix = "intactemptyship.dmm"
+9
View File
@@ -792,6 +792,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Chemistry"
icon_state = "chem"
/area/medical/psych
name = "Psychology Office"
icon_state = "medbay"
/area/medical/surgery
name = "Surgery"
icon_state = "surgery"
@@ -1371,3 +1375,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/crew_quarters/fitness/pool
name = "Pool Area"
icon_state = "pool"
/area/xenoarch/nothinghere
name = "Nothing Here"
icon_state = "yellow"
ambientsounds = SPOOKY
@@ -22,7 +22,7 @@
required_enemies = 2
recommended_enemies = 4
reroll_friendly = FALSE
enemy_minimum_age = 7
enemy_minimum_age = 21
round_ends_with_antag_death = FALSE
+1 -1
View File
@@ -136,7 +136,7 @@ Credit where due:
required_players = 35
required_enemies = 3
recommended_enemies = 5
enemy_minimum_age = 7
enemy_minimum_age = 28
protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted
restricted_jobs = list("Chaplain", "Captain")
announce_span = "brass"
+1 -1
View File
@@ -43,7 +43,7 @@
required_players = 30
required_enemies = 3
recommended_enemies = 5
enemy_minimum_age = 7
enemy_minimum_age = 28
announce_span = "cult"
announce_text = "Some crew members are trying to start a cult to Nar'Sie!\n\
@@ -275,7 +275,7 @@
// LEWD //
// //
//////////////////////////////////////////
/* //Putting Lewd traitor on the backburner until we can buffer it a bit.
/datum/dynamic_ruleset/midround/autotraitor/lewd
name = "Horny Traitor"
persistent = TRUE
@@ -375,7 +375,7 @@
var/datum/antagonist/traitor/lewd/newTraitor = new
M.mind.add_antag_datum(newTraitor)
return TRUE
*/
//////////////////////////////////////////////
// //
// Malfunctioning AI //
@@ -66,7 +66,7 @@
// LEWD //
// //
//////////////////////////////////////////
/* //Putting Lewd traitor on the backburner until we can buffer it a bit.
/datum/dynamic_ruleset/roundstart/traitor/lewd
name = "Horny Traitor"
persistent = TRUE
@@ -115,7 +115,7 @@
M.mind.restricted_roles = restricted_roles
return TRUE
*/
//////////////////////////////////////////
// //
// BLOOD BROTHERS //
+1 -1
View File
@@ -34,7 +34,7 @@
var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted
var/reroll_friendly //During mode conversion only these are in the running
var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die
var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist
var/enemy_minimum_age = 21 //How many days must players have been playing before they can play this antagonist
var/announce_span = "warning" //The gamemode's name will be in this span during announcement.
var/announce_text = "This gamemode forgot to set a descriptive text! Uh oh!" //Used to describe a gamemode when it's announced.
+1 -1
View File
@@ -6,7 +6,7 @@
required_enemies = 2
recommended_enemies = 5
antag_flag = ROLE_OPERATIVE
enemy_minimum_age = 7
enemy_minimum_age = 21
announce_span = "danger"
announce_text = "Syndicate forces are approaching the station in an attempt to destroy it!\n\
+1 -1
View File
@@ -16,7 +16,7 @@
required_players = 30
required_enemies = 2
recommended_enemies = 3
enemy_minimum_age = 14
enemy_minimum_age = 28
announce_span = "danger"
announce_text = "Some crewmembers are attempting a coup!\n\
+1 -1
View File
@@ -16,7 +16,7 @@
required_enemies = 1
recommended_enemies = 4
reroll_friendly = 1
enemy_minimum_age = 0
enemy_minimum_age = 21
announce_span = "danger"
announce_text = "There are Syndicate agents on the station!\n\
+1 -1
View File
@@ -10,7 +10,7 @@
required_players = 20
required_enemies = 1
recommended_enemies = 1
enemy_minimum_age = 7
enemy_minimum_age = 21
round_ends_with_antag_death = 1
announce_span = "danger"
announce_text = "There is a space wizard attacking the station!\n\
@@ -285,7 +285,7 @@
// OMG CENTCOM LETTERHEAD
if("MessageCentCom")
if(authenticated==2)
if(authenticated)
if(!checkCCcooldown())
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
return
@@ -301,7 +301,7 @@
// OMG SYNDICATE ...LETTERHEAD
if("MessageSyndicate")
if((authenticated==2) && (obj_flags & EMAGGED))
if((authenticated) && (obj_flags & EMAGGED))
if(!checkCCcooldown())
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
@@ -483,6 +483,11 @@
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=cancelshuttle'>Cancel Shuttle Call</A> \]"
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=status'>Set Status Display</A> \]"
if(!(obj_flags & EMAGGED))
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageCentCom'>Send Message to CentCom</A> \]"
else
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageSyndicate'>Send Message to \[UNKNOWN\]</A> \]"
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
if (authenticated==2)
dat += "<BR><BR><B>Captain Functions</B>"
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=announce'>Make a Captain's Announcement</A> \]"
@@ -494,11 +499,6 @@
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=changeseclevel'>Change Alert Level</A> \]"
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=emergencyaccess'>Emergency Maintenance Access</A> \]"
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=nukerequest'>Request Nuclear Authentication Codes</A> \]"
if(!(obj_flags & EMAGGED))
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageCentCom'>Send Message to CentCom</A> \]"
else
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=MessageSyndicate'>Send Message to \[UNKNOWN\]</A> \]"
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
else
dat += "<BR>\[ <A HREF='?src=[REF(src)];operation=login'>Log In</A> \]"
if(STATE_CALLSHUTTLE)
+4 -4
View File
@@ -79,8 +79,8 @@
var/doorOpen = 'sound/machines/airlock.ogg'
var/doorClose = 'sound/machines/airlockclose.ogg'
var/doorDeni = 'sound/machines/deniedbeep.ogg' // i'm thinkin' Deni's
var/boltUp = 'sound/machines/boltsup.ogg'
var/boltDown = 'sound/machines/boltsdown.ogg'
var/boltUp = 'hyperstation/sound/machines/BoltsUp.ogg'
var/boltDown = 'hyperstation/sound/machines/BoltsDown.ogg'
var/noPower = 'sound/machines/doorclick.ogg'
var/previous_airlock = /obj/structure/door_assembly //what airlock assembly mineral plating was applied to
var/airlock_material //material of inner filling; if its an airlock with glass, this should be set to "glass"
@@ -1155,7 +1155,7 @@
if(obj_flags & EMAGGED)
return FALSE
use_power(50)
playsound(src, doorOpen, 30, 1)
playsound(src, doorOpen, 40, 0)
if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
src.closeOther.close()
else
@@ -1202,7 +1202,7 @@
if(obj_flags & EMAGGED)
return
use_power(50)
playsound(src.loc, doorClose, 30, 1)
playsound(src.loc, doorClose, 40, 0)
else
playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1)
+4 -2
View File
@@ -15,6 +15,8 @@
resistance_flags = FIRE_PROOF
damage_deflection = 70
poddoor = TRUE
var/openSound = 'hyperstation/sound/machines/blastDoorOpen.ogg'
var/closeSound = 'hyperstation/sound/machines/blastDoorClose.ogg'
/obj/machinery/door/poddoor/preopen
icon_state = "open"
@@ -72,10 +74,10 @@
switch(animation)
if("opening")
flick("opening", src)
playsound(src, 'sound/machines/blastdoor.ogg', 30, 1)
playsound(src, openSound, 20, 0)
if("closing")
flick("closing", src)
playsound(src, 'sound/machines/blastdoor.ogg', 30, 1)
playsound(src, closeSound, 20, 0)
/obj/machinery/door/poddoor/update_icon()
if(density)
+2
View File
@@ -8,6 +8,8 @@
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
damage_deflection = 20
max_integrity = 100
openSound = 'hyperstation/sound/machines/shutter.ogg'
closeSound = 'hyperstation/sound/machines/shutter.ogg'
/obj/machinery/door/poddoor/shutters/preopen
icon_state = "open"
+2 -2
View File
@@ -141,7 +141,7 @@
if(!src.operating) //in case of emag
operating = TRUE
do_animate("opening")
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
playsound(src.loc, 'hyperstation/sound/machines/windowdoor.ogg', 70, 0)
src.icon_state ="[src.base_state]open"
sleep(10)
@@ -165,7 +165,7 @@
return 0
operating = TRUE
do_animate("closing")
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
playsound(src.loc, 'hyperstation/sound/machines/windowdoor.ogg', 70, 0)
src.icon_state = src.base_state
density = TRUE
+4
View File
@@ -171,6 +171,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
name = "Geneticist"
icon_state = "Geneticist"
/obj/effect/landmark/start/psychologist
name = "Psychologist"
icon_state = "Medical Doctor"
/obj/effect/landmark/start/chief_medical_officer
name = "Chief Medical Officer"
icon_state = "Chief Medical Officer"
+37 -5
View File
@@ -29,9 +29,19 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
obj_flags = NONE
var/item_flags = NONE
var/hitsound = null
var/usesound = null
var/throwhitsound = null
var/hitsound
var/usesound
var/mob_throw_hit_sound
///Sound uses when picking the item up (into your hands)
var/pickup_sound
///Sound uses when dropping the item, or when its thrown.
var/drop_sound
///Sound used when equipping the item into a valid slot
var/equip_sound
var/w_class = WEIGHT_CLASS_NORMAL
var/total_mass //Total mass in arbitrary pound-like values. If there's no balance reasons for an item to have otherwise, this var should be the item's weight in pounds.
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
@@ -372,7 +382,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
/obj/item/proc/talk_into(mob/M, input, channel, spans, datum/language/language)
return ITALICS | REDUCE_RANGE
/obj/item/proc/dropped(mob/user)
/obj/item/proc/dropped(mob/user, silent)
for(var/X in actions)
var/datum/action/A = X
A.Remove(user)
@@ -380,6 +390,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
qdel(src)
item_flags &= ~IN_INVENTORY
SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user)
if(!silent)
playsound(src, drop_sound, DROP_SOUND_VOLUME, ignore_walls = FALSE)
// called just as an item is picked up (loc is not yet changed)
/obj/item/proc/pickup(mob/user)
@@ -423,6 +435,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
A.Grant(user)
item_flags |= IN_INVENTORY
if(equip_sound &&(slot_flags & slotdefine2slotbit(slot)))
playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE)
else if(slot == SLOT_HANDS)
playsound(src, pickup_sound, PICKUP_SOUND_VOLUME, ignore_walls = FALSE)
//sometimes we only want to grant the item's action if it's equipped in a specific slot.
/obj/item/proc/item_action_slot_check(slot, mob/user)
if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there
@@ -575,6 +592,21 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/itempush = 1
if(w_class < 4)
itempush = 0 //too light to push anything
if(istype(hit_atom, /mob/living)) //Living mobs handle hit sounds differently.
var/volume = get_volume_by_throwforce_and_or_w_class()
if (throwforce > 0)
if (mob_throw_hit_sound)
playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1)
else if(hitsound)
playsound(hit_atom, hitsound, volume, TRUE, -1)
else
playsound(hit_atom, 'sound/weapons/genhit.ogg',volume, TRUE, -1)
else
playsound(hit_atom, 'sound/weapons/throwtap.ogg', 1, volume, -1)
else
playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE)
return hit_atom.hitby(src, 0, itempush, throwingdatum=throwingdatum)
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, messy_throw = TRUE)
@@ -846,7 +878,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
layer = initial(layer)
plane = initial(plane)
appearance_flags &= ~NO_CLIENT_COLOR
dropped(M)
dropped(M, FALSE)
return ..()
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback)
-1
View File
@@ -232,7 +232,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(lit)
user.visible_message("<span class='notice'>[user] calmly drops and treads on \the [src], putting it out instantly.</span>")
new type_butt(user.loc)
new /obj/effect/decal/cleanable/ash(user.loc)
qdel(src)
. = ..()
@@ -32,6 +32,9 @@
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
var/mode = 0
drop_sound = 'sound/items/handling/multitool_drop.ogg'
pickup_sound = 'sound/items/handling/multitool_pickup.ogg'
/obj/item/multitool/examine(mob/user)
. = ..()
if(selected_io)
@@ -200,6 +200,7 @@
if(!language)
language = M.get_default_language()
INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans.Copy(), language)
playsound(src, 'sound/voice/radioin.ogg', 25, 0)
return ITALICS | REDUCE_RANGE
/obj/item/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language)
@@ -50,6 +50,9 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
//END OF CIT CHANGES
new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \
null, \
//add this when I can find a way to make them easily constructible > new/datum/stack_recipe("sink", /obj/structure/sink, 2, one_per_turf = TRUE, on_floor = TRUE),
new/datum/stack_recipe("shower", /obj/machinery/shower/crafted, 2, one_per_turf = TRUE, on_floor = TRUE), \
null, \
new/datum/stack_recipe("rack parts", /obj/item/rack_parts), \
new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
null, \
@@ -355,6 +358,9 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
merge_type = /obj/item/stack/sheet/cloth
grind_results = list(/datum/reagent/cellulose = 4)
drop_sound = 'sound/items/handling/cloth_drop.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
/obj/item/stack/sheet/cloth/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.cloth_recipes
return ..()
@@ -400,6 +406,11 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
merge_type = /obj/item/stack/sheet/durathread
grind_results = list(/datum/reagent/cellulose = 10)
drop_sound = 'sound/items/handling/cloth_drop.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
/obj/item/stack/sheet/durathread/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.durathread_recipes
return ..()
+13
View File
@@ -11,6 +11,9 @@
max_integrity = 300
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
var/worn_overlays = FALSE //worn counterpart of the above.
equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -888,6 +891,16 @@ obj/item/storage/belt/slut/ComponentInitialize()
final_block_chance = 0 //Too thin to block bullets
return ..()
/obj/item/storage/belt/sabre/chloesabre
name = "Ornate Sheath"
desc = "An ornate and rather sinister looking sabre sheathe."
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
icon_state = "darksheath"
item_state = "darksheath"
fitting_swords = list(/obj/item/toy/sword/chloesabre, /obj/item/melee/sabre, /obj/item/melee/baton/stunsword)
starting_sword = /obj/item/toy/sword/chloesabre
/obj/item/storage/belt/botany
name = "botanical belt"
desc = "A belt made for holding hydroponics supplies."
+5
View File
@@ -35,6 +35,9 @@
var/illustration = "writing"
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //exploits ahoy
drop_sound = 'sound/items/handling/cardboardbox_drop.ogg'
pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg'
/obj/item/storage/box/Initialize(mapload)
. = ..()
update_icon()
@@ -643,6 +646,8 @@
w_class = WEIGHT_CLASS_TINY
slot_flags = ITEM_SLOT_BELT
price = 2
drop_sound = 'sound/items/handling/matchbox_drop.ogg'
pickup_sound = 'sound/items/handling/matchbox_pickup.ogg'
/obj/item/storage/box/matches/ComponentInitialize()
. = ..()
@@ -389,3 +389,28 @@
/obj/item/organ_storage
))
//Psych Pillbottles
/obj/item/storage/pill_bottle/happinesspsych
name = "happiness pill bottle"
desc = "Contains pills used as a last resort means to temporarily stabilize depression and anxiety. WARNING: side effects may include slurred speech, drooling, and severe addiction."
/obj/item/storage/pill_bottle/happinesspsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/pill/happinesspsych(src)
/obj/item/storage/pill_bottle/lsdpsych
name = "mindbreaker toxin pill bottle"
desc = "!FOR THERAPEUTIC USE ONLY! Contains pills used to alleviate the symptoms of Reality Dissociation Syndrome."
/obj/item/storage/pill_bottle/lsdpsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/pill/lsdpsych(src)
/obj/item/storage/pill_bottle/paxpsych
name = "pacification pill"
desc = "Contains pills used to temporarily pacify patients that are deemed a harm to themselves or others."
/obj/item/storage/pill_bottle/paxpsych/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/pill/paxpsych(src)
@@ -16,6 +16,8 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
materials = list(MAT_METAL = 500)
attack_verb = list("robusted")
hitsound = 'sound/weapons/smash.ogg'
drop_sound = 'sound/items/handling/toolbox_drop.ogg'
pickup_sound = 'sound/items/handling/toolbox_pickup.ogg'
var/latches = "single_latch"
var/has_latches = TRUE
var/can_rubberify = TRUE
+3
View File
@@ -13,6 +13,9 @@
w_class = WEIGHT_CLASS_SMALL
materials = list(MAT_METAL=50)
drop_sound = 'sound/items/handling/crowbar_drop.ogg'
pickup_sound = 'sound/items/handling/crowbar_pickup.ogg'
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
tool_behaviour = TOOL_CROWBAR
toolspeed = 1
@@ -19,6 +19,8 @@
usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
tool_behaviour = TOOL_SCREWDRIVER
toolspeed = 1
drop_sound = 'sound/items/handling/screwdriver_drop.ogg'
pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg'
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
var/random_color = TRUE //if the screwdriver uses random coloring
var/static/list/screwdriver_colors = list(
@@ -34,6 +34,9 @@
tool_behaviour = TOOL_WELDER
toolspeed = 1
drop_sound = 'sound/items/handling/weldingtool_drop.ogg'
pickup_sound = 'sound/items/handling/weldingtool_pickup.ogg'
/obj/item/weldingtool/Initialize()
. = ..()
create_reagents(max_fuel)
@@ -17,6 +17,9 @@
hitsound = 'sound/items/wirecutter.ogg'
usesound = 'sound/items/wirecutter.ogg'
drop_sound = 'sound/items/handling/wirecutter_drop.ogg'
pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg'
tool_behaviour = TOOL_WIRECUTTER
toolspeed = 1
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+3
View File
@@ -13,6 +13,9 @@
usesound = 'sound/items/ratchet.ogg'
materials = list(MAT_METAL=150)
drop_sound = 'sound/items/handling/wrench_drop.ogg'
pickup_sound = 'sound/items/handling/wrench_pickup.ogg'
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
tool_behaviour = TOOL_WRENCH
toolspeed = 1
@@ -27,8 +27,8 @@
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
var/cutting_tool = /obj/item/weldingtool
var/open_sound = 'sound/machines/click.ogg'
var/close_sound = 'sound/machines/click.ogg'
var/open_sound = 'sound/effects/locker_open.ogg'
var/close_sound = 'sound/effects/locker_close.ogg'
var/material_drop = /obj/item/stack/sheet/metal
var/material_drop_amount = 2
var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable.
@@ -0,0 +1,17 @@
/obj/structure/closet/secure_closet/psychology
name = "psychology locker"
req_access = list(ACCESS_PSYCH)
icon_state = "cabinet"
/obj/structure/closet/secure_closet/psychology/PopulateContents()
..()
new /obj/item/clothing/under/lawyer/blacksuit(src)
new /obj/item/clothing/under/lawyer/blacksuit/skirt(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/storage/backpack/medic(src)
new /obj/item/radio/headset/headset_med(src)
new /obj/item/clipboard(src)
new /obj/item/clothing/suit/straight_jacket(src)
new /obj/item/clothing/ears/earmuffs(src)
new /obj/item/clothing/mask/muzzle(src)
new /obj/item/clothing/glasses/sunglasses/blindfold(src)
@@ -727,3 +727,9 @@
qdel(src)
building = FALSE
/obj/structure/rack/shelf
name = "shelving"
desc = "Some nice metal shelves."
icon = 'hyperstation/icons/obj/objects.dmi'
icon_state = "shelf"
+40 -16
View File
@@ -219,8 +219,8 @@
var/watertemp = "normal" //freezing, normal, or boiling
var/datum/looping_sound/showering/soundloop
/*/obj/machinery/shower/crafted //When created from sheets of metal
anchored = FALSE */ //Stop exploiting this ree
/obj/machinery/shower/crafted //When created from sheets of metal
anchored = FALSE
/obj/machinery/shower/Initialize()
. = ..()
@@ -292,19 +292,43 @@
if (user.a_intent != INTENT_HELP)
return ..()
if (I.tool_behaviour == TOOL_WRENCH)
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with \the [I]...</span>")
if(I.use_tool(src, user, 50))
switch(watertemp)
if("normal")
watertemp = "freezing"
if("freezing")
watertemp = "boiling"
if("boiling")
watertemp = "normal"
user.visible_message("<span class='notice'>[user] adjusts the shower with \the [I].</span>", "<span class='notice'>You adjust the shower with \the [I] to [watertemp] temperature.</span>")
log_game("[key_name(user)] has wrenched a shower to [watertemp] at ([x],[y],[z])")
add_hiddenprint(user)
switch (I.tool_behaviour)
if (TOOL_WRENCH)
if (!anchored)
user.visible_message("<span class='notice'>[user] starts to take apart [src]...</span>", "<span class='notice'>You start dismantling [src]...</span>")
I.play_tool_sound(src)
if(I.use_tool(src, user, 20))
deconstruct(TRUE)
else
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with \the [I]...</span>")
if(I.use_tool(src, user, 50))
switch(watertemp)
if("normal")
watertemp = "freezing"
if("freezing")
watertemp = "boiling"
if("boiling")
watertemp = "normal"
user.visible_message("<span class='notice'>[user] adjusts the shower with \the [I].</span>", "<span class='notice'>You adjust the shower with \the [I] to [watertemp] temperature.</span>")
log_game("[key_name(user)] has wrenched a shower to [watertemp] at ([x],[y],[z])")
add_hiddenprint(user)
if (TOOL_SCREWDRIVER)
if (!anchored)
to_chat(user, "<span class='notice'>You begin screwing in [src] to the floor...</span>")
I.play_tool_sound(src)
if(I.use_tool(src, user, 30))
user.visible_message("<span class='notice'>[user] connects [src] to the floor.</span>", "<span class='notice'>You connect [src] to the floor.</span>")
anchored = TRUE
else
to_chat(user, "<span class='notice'>You start to take out [src]'s screws...</span>")
on = FALSE
soundloop.stop()
update_icon()
I.play_tool_sound(src)
if(I.use_tool(src, user, 20))
user.visible_message("<span class='notice'>[user] disconnects [src] from the floor.</span>", "<span class='notice'>You disconnect [src] from the floor.</span>")
anchored = FALSE
/obj/machinery/shower/examine()
. += ..()
@@ -468,7 +492,7 @@
return PROCESS_KILL
/obj/machinery/shower/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/metal (loc, 3)
new /obj/item/stack/sheet/metal (loc, 2)
qdel(src)
/obj/machinery/shower/proc/check_heat(mob/living/carbon/C)
@@ -609,6 +609,8 @@ This is here to make the tiles around the station mininuke change when it's arme
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
icon_state = "datadisk0"
drop_sound = 'sound/items/handling/disk_drop.ogg'
pickup_sound = 'sound/items/handling/disk_pickup.ogg'
/obj/item/disk/nuclear
name = "nuclear authentication disk"
-26
View File
@@ -94,32 +94,6 @@
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/stalhelm
name = "Stalhelm"
desc = "Ein Helm, um die Nazi-Interesse an fremden Raumstationen zu sichern."
icon_state = "stalhelm"
item_state = "stalhelm"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/panzer
name = "Panzer Cap"
desc = "Command any mech in style."
icon_state = "panzercap"
item_state = "panzercap"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/naziofficer
name = "Officer Cap"
desc = "Style is all that matters."
icon_state = "officercap"
item_state = "officercap"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/russobluecamohat
name = "russian blue camo beret"
desc = "A symbol of discipline, honor, and lots and lots of removal of some type of skewered food."
@@ -1,25 +1,5 @@
//VG Ports
/obj/item/clothing/head/helmet/space/hardsuit/nazi
name = "nazi hardhelmet"
desc = "This is the face of das vaterland's top elite. Gas or energy are your only escapes."
item_state = "hardsuit0-nazi"
icon_state = "hardsuit0-nazi"
armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 20)
item_color = "nazi"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
/obj/item/clothing/suit/space/hardsuit/nazi
name = "nazi hardsuit"
desc = "The attire of a true krieger. All shall fall, and only das vaterland will remain."
item_state = "hardsuit-nazi"
icon_state = "hardsuit-nazi"
slowdown = 1
armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 20)
allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/nazi
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
/obj/item/clothing/head/helmet/space/hardsuit/soviet
name = "soviet hardhelmet"
desc = "Crafted with the pride of the proletariat. The vengeful gaze of the visor roots out all fascists and capitalists."
+2
View File
@@ -10,6 +10,8 @@
var/togglename = null
var/suittoggled = FALSE
drop_sound = 'sound/items/handling/cloth_drop.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
var/adjusted = NORMAL_STYLE
mutantrace_variation = MUTANTRACE_VARIATION
var/tauric = FALSE //Citadel Add for tauric hardsuits
+5 -1
View File
@@ -16,6 +16,10 @@
var/obj/item/clothing/accessory/attached_accessory
var/mutable_appearance/accessory_overlay
mutantrace_variation = MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to.
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
drop_sound = 'sound/items/handling/cloth_drop.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
/obj/item/clothing/under/worn_overlays(isinhands = FALSE)
. = list()
@@ -156,4 +160,4 @@
if(SENSOR_COORDS)
. += "Its vital tracker and tracking beacon appear to be enabled."
if(attached_accessory)
. += "\A [attached_accessory] is attached to it."
. += "\A [attached_accessory] is attached to it."
@@ -12,6 +12,9 @@
resistance_flags = ACID_PROOF
obj_flags = UNIQUE_RENAME
drop_sound = 'sound/items/handling/drinkglass_drop.ogg'
pickup_sound = 'sound/items/handling/drinkglass_pickup.ogg'
/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype)
cut_overlays()
if(reagents.reagent_list.len)
+5 -3
View File
@@ -137,7 +137,7 @@
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING)
ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING, ACCESS_PSYCH)
/proc/get_all_centcom_access()
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN)
@@ -165,7 +165,7 @@
if(2) //security
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP)
if(3) //medbay
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO)
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH)
if(4) //research
return list(ACCESS_RESEARCH, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_GENETICS, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_MINISAT, ACCESS_RD, ACCESS_NETWORK)
if(5) //engineering and maintenance
@@ -332,6 +332,8 @@
return "Network Access"
if(ACCESS_CLONING)
return "Cloning Room"
if(ACCESS_PSYCH)
return "Psychology Office"
/proc/get_centcom_access_desc(A)
switch(A)
@@ -357,7 +359,7 @@
/proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern",
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Medical Resident",
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Psychologist", "Medical Resident",
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie")
/proc/get_all_job_icons() //For all existing HUD icons
+3 -3
View File
@@ -50,7 +50,7 @@ Captain
suit = /obj/item/clothing/suit/armor/vest/capcarapace
shoes = /obj/item/clothing/shoes/sneakers/brown
head = /obj/item/clothing/head/caphat
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
backpack = /obj/item/storage/backpack/captain
satchel = /obj/item/storage/backpack/satchel/cap
@@ -95,13 +95,13 @@ Head of Personnel
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH)
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity)
+16 -13
View File
@@ -5,16 +5,16 @@
alt_titles = list("Head Engineer", "Construction Coordinator", "Project Manager")
/datum/job/engineer
alt_titles = list("Maintenance Technician", "Engine Technician", "Electrician", "Structural Engineer", "Station Architect")
alt_titles = list("Maintenance Technician", "Engine Technician", "Electrician", "Structural Engineer", "Mechanic", "Station Architect")
/datum/job/atmos
alt_titles = list("Firefighter", "Life Support Specialist")
alt_titles = list("Firefighter", "Life Support Specialist", "Disposals Technician")
/datum/job/junior_engineer
//Service
/datum/job/assistant
alt_titles = list("Civilian", "Visitor", "Businessman", "Trader", "Entertainer", "Tourist")
alt_titles = list("Civilian", "Morale Officer", "Stripper", "Off-Duty", "Escort", "Visitor", "Businessman", "Trader", "Entertainer", "Tourist")
/datum/job/cook
alt_titles = list("Cook", "Culinary Artist", "Butcher", "Chef de partie")
@@ -23,7 +23,7 @@
alt_titles = list("Gardener", "Herbalist", "Botanical Researcher", "Hydroponicist", "Farmer", "Beekeeper")
/datum/job/curator
alt_titles = list("Journalist", "Librarian")
alt_titles = list("Journalist", "Librarian", "Keeper")
/datum/job/chaplain
alt_titles = list("Priest", "Priestess", "Bishop", "Prior", "Monk", "Nun", "Counselor")
@@ -38,10 +38,10 @@
alt_titles = list("Jester", "Comedian")
/datum/job/mime
alt_titles = list("Performer")
alt_titles = list("Performer", "Pantomime", "Mimic")
/datum/job/bartender
alt_titles = list("Mixologist", "Bar Owner")
alt_titles = list("Mixologist", "Bar Owner", "Barmaid")
//Science
/datum/job/rd
@@ -57,7 +57,7 @@
//Medical
/datum/job/cmo
alt_titles = list("Medical Director")
alt_titles = list("Medical Director", "Medical Administrator")
/datum/job/doctor
alt_titles = list("Nurse", "Surgeon", "Physician", "Paramedic")
@@ -69,19 +69,22 @@
alt_titles = list("Microbiologist", "Biochemist", "Pathologist")
/datum/job/geneticist
alt_titles = list("Gene Therapist")
alt_titles = list("Gene Therapist", "Genetics Researcher")
/datum/job/psychologist
alt_titles = list("Therapist", "Psychiatrist")
/datum/job/junior_doctor
//Security
/datum/job/hos
alt_titles = list("Chief of Security", "Security Commander")
alt_titles = list("Chief of Security", "Security Commander", "Sheriff")
/datum/job/warden
alt_titles = list("Prison Chief", "Armory Manager", "Prison Administrator")
alt_titles = list("Prison Chief", "Armory Manager", "Prison Administrator", "Brig Superintendent")
/datum/job/officer
alt_titles = list("Security Agent", "Probation Officer", "Security Peacekeeper", "Security Cadet")
alt_titles = list("Security Agent", "Probation Officer", "Security Peacekeeper", "Security Guard", "Guardsman", "Security Cadet")
/datum/job/detective
alt_titles = list("Forensics Technician", "Private Investigator", "Gumshoe")
@@ -100,7 +103,7 @@
//Command
/datum/job/captain
alt_titles = list("Station Director", "Station Commander", "Station Overseer")
alt_titles = list("Station Director", "Station Commander", "Station Overseer", "Stationmaster", "Commissar")
/datum/job/hop
alt_titles = list("Personnel Manager", "Staff Administrator")
alt_titles = list("Personnel Manager", "Staff Administrator", "Records Administrator")
+41 -4
View File
@@ -22,10 +22,10 @@ Chief Medical Officer
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_PSYCH)
minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_PSYCH)
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
@@ -42,7 +42,7 @@ Chief Medical Officer
suit = /obj/item/clothing/suit/toggle/labcoat/cmo
l_hand = /obj/item/storage/firstaid/regular
suit_store = /obj/item/flashlight/pen
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1)
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
backpack = /obj/item/storage/backpack/medic
satchel = /obj/item/storage/backpack/satchel/med
@@ -221,7 +221,6 @@ Virologist
satchel = /obj/item/storage/backpack/satchel/vir
duffelbag = /obj/item/storage/backpack/duffelbag/med
/*
Junior Doctor
*/
@@ -262,3 +261,41 @@ Junior Doctor
duffelbag = /obj/item/storage/backpack/duffelbag/med
chameleon_extras = /obj/item/gun/syringe
/*
Psychologist
*/
/datum/job/psychologist
title = "Psychologist"
flag = MED_PSYCH
department_head = list("Chief Medical Officer", "Head of Personnel")
department_flag = MEDSCI
faction = "Station"
total_positions = 1
spawn_positions = 1
minimal_player_age = 1
supervisors = "the chief medical officer, and head of personnel"
selection_color = "#ffeef0"
exp_requirements = 240
exp_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/doctor/psychologist
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH)
minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH)
/datum/outfit/job/doctor/psychologist
name = "Psychologist"
jobtype = /datum/job/psychologist
belt = /obj/item/pda/medical
ears = /obj/item/radio/headset/headset_med
uniform = /obj/item/clothing/under/lawyer/blacksuit
shoes = /obj/item/clothing/shoes/laceup
l_hand = /obj/item/clipboard
backpack_contents = list(/obj/item/storage/pill_bottle/mannitol, /obj/item/storage/pill_bottle/psicodine, /obj/item/storage/pill_bottle/paxpsych, /obj/item/storage/pill_bottle/happinesspsych, /obj/item/storage/pill_bottle/lsdpsych)
backpack = /obj/item/storage/backpack/medic
satchel = /obj/item/storage/backpack/satchel/med
duffelbag = /obj/item/storage/backpack/duffelbag/med
+1 -1
View File
@@ -55,7 +55,7 @@ Head of Security
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/classic_baton/telescopic=1)
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
backpack = /obj/item/storage/backpack/security
satchel = /obj/item/storage/backpack/satchel/sec
+1
View File
@@ -20,6 +20,7 @@ GLOBAL_LIST_INIT(medical_positions, list(
"Geneticist",
"Virologist",
"Chemist",
"Psychologist",
"Medical Resident"))
+2
View File
@@ -193,6 +193,8 @@
var/unique = 0 //0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
var/title //The real name of the book.
var/window_size = null // Specific window size for the book, i.e: "1920x1080", Size x Width
drop_sound = 'sound/items/handling/book_drop.ogg'
pickup_sound = 'sound/items/handling/book_pickup.ogg'
/obj/item/book/attack_self(mob/user)
if(is_blind(user))
@@ -81,7 +81,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/fixed_mut_color2 = ""
var/fixed_mut_color3 = ""
var/whitelisted = 0 //Is this species restricted to certain players?
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
var/icon_limbs //Overrides the icon used for the limbs of this species. Mainly for downstream, and also because hardcoded icons disgust me. Implemented and maintained as a favor in return for a downstream's implementation of synths.
+3 -15
View File
@@ -105,7 +105,7 @@
return
/mob/living/proc/can_embed(obj/item/I)
return FALSE
return FALSE
/mob/living/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum)
var/obj/item/I
@@ -126,22 +126,10 @@
return TRUE
var/zone = ran_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest
var/dtype = BRUTE
var/volume = I.get_volume_by_throwforce_and_or_w_class()
SEND_SIGNAL(I, COMSIG_MOVABLE_IMPACT_ZONE, src, zone)
dtype = I.damtype
if (I.throwforce > 0) //If the weapon's throwforce is greater than zero...
if (I.throwhitsound) //...and throwhitsound is defined...
playsound(loc, I.throwhitsound, volume, 1, -1) //...play the weapon's throwhitsound.
else if(I.hitsound) //Otherwise, if the weapon's hitsound is defined...
playsound(loc, I.hitsound, volume, 1, -1) //...play the weapon's hitsound.
else if(!I.throwhitsound) //Otherwise, if throwhitsound isn't defined...
playsound(loc, 'sound/weapons/genhit.ogg',volume, 1, -1) //...play genhit.ogg.
else if(!I.throwhitsound && I.throwforce > 0) //Otherwise, if the item doesn't have a throwhitsound and has a throwforce greater than zero...
playsound(loc, 'sound/weapons/genhit.ogg', volume, 1, -1)//...play genhit.ogg
if(!I.throwforce)// Otherwise, if the item's throwforce is 0...
playsound(loc, 'sound/weapons/throwtap.ogg', 1, volume, -1)//...play throwtap.ogg.
if(!blocked)
visible_message("<span class='danger'>[src] has been hit by [I].</span>", \
"<span class='userdanger'>[src] has been hit by [I].</span>")
@@ -397,7 +385,7 @@
if (INTENT_GRAB)
grabbedby(M)
return FALSE
if(INTENT_HARM)
if(INTENT_HARM)
if(HAS_TRAIT(M, TRAIT_PACIFISM))
to_chat(M, "<span class='notice'>You don't want to hurt anyone!</span>")
return FALSE
+1 -1
View File
@@ -252,7 +252,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
if (client?.prefs.chat_on_map && stat != UNCONSCIOUS && (client.prefs.see_chat_non_mob || ismob(speaker)) && can_hear())
create_chat_message(speaker, message_language, raw_message, spans, message_mode)
if (client?.prefs.radiosounds && stat != UNCONSCIOUS && can_hear() && radio_freq)
playsound_local(src,'sound/voice/radio.ogg', 30, 1)
playsound_local(src,'sound/voice/radio.ogg', 30, 0)
// Recompose message for AI hrefs, language incomprehension.
message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode, FALSE, source)
+4
View File
@@ -23,6 +23,9 @@
dog_fashion = /datum/dog_fashion/head
grind_results = list(/datum/reagent/cellulose = 2)
drop_sound = 'sound/items/handling/paper_drop.ogg'
pickup_sound = 'sound/items/handling/paper_pickup.ogg'
var/info //What's actually written on the paper.
var/info_links //A different version of the paper which includes html links at fields and EOF
var/stamps //The (text for the) stamps on the paper.
@@ -143,6 +146,7 @@
var/locid = 0
var/laststart = 1
var/textindex = 1
playsound(src, 'sound/items/handling/writing.ogg', 50, 1, -1)
while(locid < 15) //hey whoever decided a while(1) was a good idea here, i hate you
var/istart = 0
if(links)
@@ -2065,7 +2065,7 @@
color = "#AAAAAA55"
taste_description = "water"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
pH = 15
pH = 9.75
/datum/reagent/pax/on_mob_metabolize(mob/living/L)
..()
@@ -327,11 +327,11 @@
/obj/item/reagent_containers/glass/beaker/waterbottle
name = "bottle of water"
desc = "A bottle of water filled at an old Earth bottling facility."
desc = "A bottle of water filled at some factory in space."
icon = 'icons/obj/drinks.dmi'
icon_state = "smallbottle"
item_state = "bottle"
list_reagents = list(/datum/reagent/water = 49.5, /datum/reagent/fluorine = 0.5)//see desc, don't think about it too hard
list_reagents = list(/datum/reagent/water = 50)//see desc, don't think about it too hard
materials = list(MAT_GLASS=0)
volume = 50
amount_per_transfer_from_this = 10
@@ -204,7 +204,25 @@
icon_state = "pill9"
color = "#454545"
list_reagents = list(/datum/reagent/mutationtoxin/shadow = 1)
//////////////////////////////////////// drugs
//////////////////////////////////////// drugs#
/obj/item/reagent_containers/pill/lsdpsych
name = "antipsychotic pill"
desc = "Talk to your healthcare provider immediately if hallucinations worsen or new hallucinations emerge."
icon_state = "pill14"
list_reagents = list(/datum/reagent/toxin/mindbreaker = 5)
/obj/item/reagent_containers/pill/happinesspsych
name = "mood stabilizer pill"
desc = "Used to temporarily alleviate anxiety and depression, take only as prescribed."
icon_state = "pill_happy"
list_reagents = list(/datum/reagent/drug/happiness = 5)
/obj/item/reagent_containers/pill/paxpsych
name = "pacification pill"
desc = "Used to temporarily suppress violent, homicidal, or suicidal behavior in patients."
list_reagents = list(/datum/reagent/pax = 5)
icon_state = "pill12"
/obj/item/reagent_containers/pill/zoom
name = "zoom pill"
list_reagents = list(/datum/reagent/medicine/synaptizine = 10, /datum/reagent/drug/nicotine = 10, /datum/reagent/drug/methamphetamine = 1)
@@ -257,3 +275,4 @@
name = "breast enlargement pill"
list_reagents = list(/datum/reagent/fermi/breast_enlarger = 10)
price = 4
+1 -2
View File
@@ -238,7 +238,6 @@
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
hitsound = 'sound/weapons/circsawhit.ogg'
throwhitsound = 'sound/weapons/pierce.ogg'
item_flags = SURGICAL_TOOL
flags_1 = CONDUCT_1
force = 15
@@ -251,6 +250,7 @@
sharpness = IS_SHARP
tool_behaviour = TOOL_SAW
toolspeed = 1
mob_throw_hit_sound = 'sound/weapons/pierce.ogg'
/obj/item/circular_saw/Initialize()
. = ..()
@@ -263,7 +263,6 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "saw"
hitsound = 'sound/weapons/circsawhit.ogg'
throwhitsound = 'sound/weapons/pierce.ogg'
flags_1 = CONDUCT_1
force = 10
w_class = WEIGHT_CLASS_SMALL
+3
View File
@@ -129,6 +129,9 @@
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
/obj/item/clothing/mask/balaclava = 3,
/obj/item/clothing/head/ushanka = 3,
/obj/item/clothing/suit/gcvest = 2,
/obj/item/clothing/suit/gcvest/alt = 2,
/obj/item/clothing/gloves/guncaster = 4,
/obj/item/clothing/under/soviet = 3,
/obj/item/storage/belt/fannypack/black = 3,
/obj/item/clothing/suit/jacket/letterman_syndie = 5,
+1
View File
@@ -34,6 +34,7 @@ Medical Doctor=5,3
Chemist=2,2
Geneticist=2,2
Virologist=1,1
Psychologist=1,1
Scientist=5,3
Roboticist=2,2
-1
View File
@@ -25,7 +25,6 @@
#_maps/RandomRuins/SpaceRuins/derelict6.dmm
#_maps/RandomRuins/SpaceRuins/djstation.dmm
#_maps/RandomRuins/SpaceRuins/emptyshell.dmm
#_maps/RandomRuins/SpaceRuins/gasthelizards.dmm
#_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm
#_maps/RandomRuins/SpaceRuins/intactemptyship.dmm
#_maps/RandomRuins/SpaceRuins/listeningstation.dmm
+1 -1
View File
@@ -4993,7 +4993,7 @@ Standard issue Engineering cyborgs now come equipped with replacement floor tile
<BR><BR>How they get on-board: The quartermaster can now set the receiver frequency of his supplycomp circuit board. A bit simplistic as of now, will work on it later. Building a supplycomp with a properly set up circuitboard will give access to the Contraband crate.
<BR><BR>How they're used: Unfold the rolled poster on any wall or r_wall to create the poster. There are currently 17 designs, with the possibility of me adding more.
<BR><BR>How to get rid of them: You can rip them using your hand... To cleanly extract them and not ruin them for future use, however, you can use a pair of wirecutters.
<BR><BR>How they're classified: They're contraband, so it's perfectly okay for security officers to confiscate them. Punishment for contraband-providers (or end-users, if you want to go full nazi) is up to the situational commanding officers.
<BR><BR>How they're classified: They're contraband, so it's perfectly okay for security officers to confiscate them. Punishment for contraband-providers is up to the situational commanding officers.
</ul>
<h3 class="author">Nodrak updated:</h3>
+26 -9
View File
@@ -87,7 +87,7 @@ li a:hover:not(.active) {
font-size: 12px;
margin: 2px 2px;
cursor: pointer;
border-radius: 10%;
border-radius: 0%;
transition-duration: 0.25s;
order: 3;
}
@@ -954,26 +954,26 @@ function draw_verbs(cat){
function set_theme(which) {
if (which == "light") {
document.body.style.backgroundColor = "white";
document.body.style.color = "black";
document.body.className = "";
set_style_sheet("browserOutput_white");
setCookie("theme", "white", 365);
} else if (which == "dark") {
document.body.style.backgroundColor = "#171717";
document.body.style.color = "#a4bad6";
document.body.className = "dark";
set_style_sheet("browserOutput");
setCookie("theme", "dark", 365);
}
}
function set_light_theme() {
document.body.style.backgroundColor = "white";
document.body.style.color = "black";
document.body.className = "";
set_style_sheet("browserOutput_white")
set_theme("light");
}
function set_dark_theme() {
document.body.style.backgroundColor = "#171717";
document.body.style.color = "#a4bad6";
document.body.className = "dark";
set_style_sheet("browserOutput")
set_theme("dark");
}
function set_style_sheet(sheet) {
@@ -1008,6 +1008,22 @@ function create_debug(){
}
}
function checkCookie() {
var stylecookie=getCookie("theme");
if (stylecookie == "dark") {
set_dark_theme();
} else {
set_light_theme();
}
}
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + '=';
var ca = document.cookie.split(';');
@@ -1021,5 +1037,6 @@ function getCookie(cname) {
return '';
}
</script>
<body onload="checkCookie()"></body>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
GLOBAL_LIST_EMPTY(wendigo_soul_storages)
@@ -0,0 +1,277 @@
/*
Holds things like antag datums, game modes, abilities, and everything
related to the antag that could be a datum
*/
//ANTAGONIST
/datum/antagonist/wendigo
name = "wendigo"
antagpanel_category = "Wendigo"
/datum/antagonist/wendigo/on_gain()
if(istype(owner.current, /mob/living/carbon/human))
var/mob/living/carbon/wendigo/new_owner = new/mob/living/carbon/wendigo(get_turf(owner.current))
var/mob/current_body = owner.current
current_body.transfer_ckey(new_owner)
current_body.Destroy()
owner = new_owner.mind
owner.current = new_owner
..()
//HUD
//Contents: Intentions, Hands, Dropping/Throwing/Pulling, Inventory Equip
// Health + Souls on the bottom of screen
//TODO: Health doll, Soul counter (not devil)
/datum/hud/wendigo/New(mob/living/carbon/wendigo/owner)
..()
var/obj/screen/using
var/obj/screen/inventory/inv_box
var/widescreenlayout = FALSE //adds support for different hud layouts depending on widescreen pref
if(owner.client && owner.client.prefs && owner.client.prefs.widescreenpref)
widescreenlayout = FALSE
//CRAFTING
using = new /obj/screen/craft
using.icon = ui_style
if(!widescreenlayout)
using.screen_loc = ui_boxcraft
static_inventory += using
//LANG MENU
using = new/obj/screen/language_menu
using.icon = ui_style
if(!widescreenlayout)
using.screen_loc = ui_boxlang
static_inventory += using
//AREA EDITOR
using = new /obj/screen/area_creator
using.icon = ui_style
if(!widescreenlayout)
using.screen_loc = ui_boxarea
static_inventory += using
using = new /obj/screen/voretoggle()
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.screen_loc = ui_voremode
if(!widescreenlayout)
using.screen_loc = ui_boxvore
static_inventory += using
//INTENTS & ACTIONS
action_intent = new /obj/screen/act_intent/segmented
action_intent.icon_state = mymob.a_intent
static_inventory += action_intent
using = new /obj/screen/human/equip()
using.icon = ui_style
using.screen_loc = ui_equip_position(mymob)
static_inventory += using
using = new /obj/screen/mov_intent
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
using.screen_loc = ui_movi
static_inventory += using
using = new /obj/screen/resist()
using.icon = ui_style
using.screen_loc = ui_overridden_resist
hotkeybuttons += using
using = new /obj/screen/restbutton()
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.screen_loc = ui_pull_resist
static_inventory += using
using = new /obj/screen/combattoggle()
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.screen_loc = ui_combat_toggle
static_inventory += using
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drop_throw
static_inventory += using
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
pull_icon.update_icon(mymob)
pull_icon.screen_loc = ui_pull_resist
static_inventory += pull_icon
throw_icon = new /obj/screen/throw_catch()
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
hotkeybuttons += throw_icon
//////
//INVENTORY
//////
build_hand_slots()
using = new /obj/screen/human/toggle()
using.icon = ui_style
using.screen_loc = ui_inventory
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand_position(owner,1)
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "neck"
inv_box.icon = ui_style
inv_box.icon_state = "neck"
inv_box.screen_loc = ui_neck
inv_box.slot_id = SLOT_NECK
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "back"
inv_box.icon = ui_style
inv_box.icon_state = "back"
inv_box.screen_loc = ui_back
inv_box.slot_id = SLOT_BACK
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "gloves"
inv_box.icon = ui_style
inv_box.icon_state = "gloves"
inv_box.screen_loc = ui_gloves
inv_box.slot_id = SLOT_GLOVES
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "eyes"
inv_box.icon = ui_style
inv_box.icon_state = "glasses"
inv_box.screen_loc = ui_glasses
inv_box.slot_id = SLOT_GLASSES
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "ears"
inv_box.icon = ui_style
inv_box.icon_state = "ears"
inv_box.screen_loc = ui_ears
inv_box.slot_id = SLOT_EARS
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "head"
inv_box.icon = ui_style
inv_box.icon_state = "head"
inv_box.screen_loc = ui_head
inv_box.slot_id = SLOT_HEAD
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "belt"
inv_box.icon = ui_style
inv_box.icon_state = "belt"
inv_box.screen_loc = ui_belt
inv_box.slot_id = SLOT_BELT
static_inventory += inv_box
//INFO DISPLAY
internals = new /obj/screen/internals()
infodisplay += internals
healths = new /obj/screen/healths()
infodisplay += healths
healthdoll = new /obj/screen/healthdoll()
infodisplay += healthdoll
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
zone_select.update_icon(mymob)
static_inventory += zone_select
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[inv.slot_id] = inv
inv.update_icon()
/datum/hud/wendigo/hidden_inventory_update(mob/viewer)
if(!mymob)
return
var/mob/living/carbon/wendigo/W = mymob
var/mob/screenmob = viewer || W
if(screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown)
if(W.gloves)
W.gloves.screen_loc = ui_gloves
screenmob.client.screen += W.gloves
if(W.ears)
W.ears.screen_loc = ui_ears
screenmob.client.screen += W.ears
if(W.glasses)
W.glasses.screen_loc = ui_glasses
screenmob.client.screen += W.glasses
if(W.wear_neck)
W.wear_neck.screen_loc = ui_neck
screenmob.client.screen += W.wear_neck
if(W.head)
W.head.screen_loc = ui_head
screenmob.client.screen += W.head
else
if(W.gloves) screenmob.client.screen -= W.gloves
if(W.ears) screenmob.client.screen -= W.ears
if(W.glasses) screenmob.client.screen -= W.glasses
if(W.wear_neck) screenmob.client.screen -= W.wear_neck
if(W.head) screenmob.client.screen -= W.head
/datum/hud/wendigo/persistent_inventory_update(mob/viewer)
if(!mymob)
return
..()
var/mob/living/carbon/wendigo/W = mymob
var/mob/screenmob = viewer || W
if(screenmob.hud_used)
if(screenmob.hud_used.hud_shown)
if(W.belt)
W.belt.screen_loc = ui_belt
screenmob.client.screen += W.belt
if(W.back)
W.back.screen_loc = ui_back
screenmob.client.screen += W.back
else
if(W.belt)
screenmob.client.screen -= W.belt
if(W.back)
screenmob.client.screen -= W.back
if(hud_version != HUD_STYLE_NOHUD)
for(var/obj/item/I in W.held_items)
I.screen_loc = ui_hand_position(W.get_held_index_of_item(I))
screenmob.client.screen += I
else
for(var/obj/item/I in W.held_items)
I.screen_loc = null
screenmob.client.screen -= I
/datum/hud/wendigo/show_hud(version = 0,mob/viewmob)
. = ..()
if(!.)
return
var/mob/screenmob = viewmob || mymob
hidden_inventory_update(screenmob)
@@ -0,0 +1,14 @@
/obj/structure/soul_storage
name = "soul storage"
desc = "Stores souls!"
var/list/souls = list()
//This is a big WIP. I don't even want it having the name "soul storage" but it'll do for now
/obj/structure/soul_storage/Initialize()
. = ..()
GLOB.wendigo_soul_storages += src
/obj/structure/soul_storage/Destroy()
GLOB.wendigo_soul_storages -= src
return ..()
@@ -0,0 +1,11 @@
/mob/living/carbon/wendigo/UnarmedAttack(atom/A, proximity)
A.attack_hand(src)
/mob/living/carbon/wendigo/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
if(incapacitated() || lying)
to_chat(src, "<span class='warning'>You can't do that right now!</span>")
return FALSE
if(be_close && !in_range(M, src))
to_chat(src, "<span class='warning'>You are too far away!</span>")
return FALSE
return TRUE
@@ -0,0 +1,115 @@
#define DEFAULT_MOVESPEED 1.5
//The mob itself
/mob/living/carbon/wendigo
name = "wendigo"
gender = FEMALE
unique_name = FALSE
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD)
hud_type = /datum/hud/wendigo
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
appearance_flags = TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
status_flags = CANSTUN //cant be knocked down, unconscious, or be pushed
maxHealth = 200
icon = 'hyperstation/icons/mobs/wendigo.dmi'
icon_state = "reference"
bodyparts = list(/obj/item/bodypart/chest/wendigo, /obj/item/bodypart/head/wendigo,
/obj/item/bodypart/l_arm/wendigo, /obj/item/bodypart/r_arm/wendigo,
/obj/item/bodypart/l_leg/wendigo, /obj/item/bodypart/r_leg/wendigo)
var/obj/item/belt = null
var/datum/physiology/physiology
var/obj/structure/soul_storage/connected_link
var/fake_breast_size = 5 //She doesn't actually have the organ, but we cache her breast size for rp reasons
var/fake_penis_size = 8
/mob/living/carbon/wendigo/Initialize()
. = ..()
/* //TODO: Uncomment when objectives + forest get finished
if(!connected_link)
if(!GLOB.wendigo_soul_storages.len)
connected_link = new /obj/structure/soul_storage(get_turf(src))
else
connected_link = pick(GLOB.wendigo_soul_storages)
gender = pick(FEMALE, MALE)
*/
if(gender == MALE)
fake_breast_size = 0
else
fake_penis_size = 0
real_name = name
//DAMAGE RESISTANCE
physiology = new()
physiology.brute_mod = 0.7
physiology.burn_mod = 1.25
physiology.tox_mod = -1
physiology.oxy_mod = 1
physiology.clone_mod = 0
physiology.stamina_mod = 0 //Running and attacking, prods
physiology.heat_mod = 2 //IM MELTIIINNNGGGG-!
physiology.cold_mod = 0
physiology.siemens_coeff = 0.2
physiology.stun_mod = 0 //prods n aggressive grab
//physiology.bleed_mod = 2
physiology.speed_mod = 0.9 //Should be faster than a normal person's walking speed
physiology.hunger_mod = 2 //We're gonna have a FEAST TONIGHT!
physiology.do_after_speed = 1
//Traits & Bodyparts
create_bodyparts()
create_internal_organs()
ADD_TRAIT(src, TRAIT_NOCLONE, "initialize")
add_verb(src, /mob/living/proc/mob_sleep)
add_verb(src, /mob/living/proc/lay_down)
add_movespeed_modifier("MOVESPEED_DEFAULT", multiplicative_slowdown=DEFAULT_MOVESPEED)
update_body_parts()
/mob/living/carbon/wendigo/Destroy()
QDEL_NULL(physiology)
return ..()
/mob/living/carbon/wendigo/update_body_parts()
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
BP.update_limb()
/mob/living/carbon/wendigo/update_move_intent_slowdown()
var/mod = 0
if(m_intent == MOVE_INTENT_WALK)
mod = (CONFIG_GET(number/movedelay/walk_delay) / 2) //complete copy besides this part
else
mod = 1.30
if(!isnum(mod))
mod = 1
add_movespeed_modifier(MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED, TRUE, 100, override = TRUE, multiplicative_slowdown = mod)
/mob/living/carbon/wendigo/update_movespeed(resort=TRUE)
return (..() * physiology.speed_mod)
/mob/living/carbon/wendigo/can_hold_items()
return TRUE
/mob/living/carbon/wendigo/IsAdvancedToolUser()
return TRUE
/mob/living/carbon/wendigo/can_be_pulled()
return FALSE
/mob/living/carbon/wendigo/is_literate()
return TRUE
/mob/living/carbon/wendigo/canBeHandcuffed()
return TRUE
/mob/living/carbon/wendigo/update_inv_handcuffed()
return
/mob/living/carbon/wendigo/update_inv_legcuffed()
return
//
//ORGANS
//
/mob/living/carbon/wendigo/create_internal_organs()
internal_organs += new /obj/item/organ/eyes/wendigo
internal_organs += new /obj/item/organ/liver/wendigo
internal_organs += new /obj/item/organ/tongue
internal_organs += new /obj/item/organ/lungs
internal_organs += new /obj/item/organ/heart
internal_organs += new /obj/item/organ/stomach
internal_organs += new /obj/item/organ/ears
..()
@@ -0,0 +1,86 @@
/mob/living/carbon/wendigo/examine(mob/user)
var/t_He = p_they(TRUE)
var/t_His = p_their(TRUE)
var/t_his = p_their()
var/t_him = p_them()
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>!")
if(handcuffed)
. += "<span class='warning'>[t_He] is [icon2html(handcuffed, user)] handcuffed!</span>"
if(legcuffed)
. += "<span class='warning'>[t_He] has [icon2html(legcuffed, user)] leg cuffs!</span>"
if(head)
. += "[t_He] is wearing [head.get_examine_string(user)] on [t_his] head."
if(wear_neck)
. += "[t_He] is wearing [wear_neck.get_examine_string(user)] around [t_his] neck."
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
. += "[t_He] is holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]."
if(back)
. += "[t_He] has [back.get_examine_string(user)] on [t_his] back."
if(stat == DEAD)
. += "<span class='deadsay'>[t_He] is limp and unresponsive, with no signs of life.</span>"
var/list/msg = ("<span class='warning'>")
var/temp_hp = getBruteLoss()
if(!(user == src && src.hal_screwyhud == SCREWYHUD_HEALTHY))
if(temp_hp)
if(temp_hp <= 25) msg += "[t_He] has minor bruising.\n"
else if(temp_hp <= 75) msg += "[t_He] has <B>moderate</B> bruising!\n"
else msg += "<B>[t_He] has severe bruising!</B>\n"
temp_hp = getFireLoss()
if(temp_hp)
if(temp_hp <= 25) msg += "[t_He] has minor burns.\n"
else if(temp_hp <= 50) msg += "[t_He] has <B>moderate</B> burns!\n"
else msg += "<B>[t_He] has severe burns!</B>\n"
if(fire_stacks > 0)
msg += "[t_He] is covered in something flammable.\n"
if(fire_stacks < 0)
msg += "[t_He] looks a little soaked.\n"
if(pulledby)
if(pulledby.grab_state)
msg += "[t_He] is restrained by [pulledby]'s grip.\n"
msg += "</span>"
. += msg
if(stat == UNCONSCIOUS)
. += "[t_He] isn't responding to anything around [t_him] and seems to be asleep."
else if(InCritical())
. += "[t_His] breathing is shallow and labored."
if(fake_breast_size < 16)
. += "You see a pair of breasts. You estimate them to be [ascii2text(round(fake_breast_size)+63)]-cups."
else if(!fake_breast_size && gender == FEMALE)
. += "You see a pair of breasts. They're small and flatchested, however."
else
. += "You see [pick("some serious honkers", "a real set of badonkers", "some dobonhonkeros", "massive dohoonkabhankoloos", "two big old tonhongerekoogers", "a couple of giant bonkhonagahoogs", "a pair of humongous hungolomghnonoloughongous")]. Their volume is way beyond cupsize now, measuring in about [round(fake_breast_size)]cm in diameter."
if(fake_penis_size)
. += "You see a flaccid human penis. You estimate it's about [round(fake_penis_size, 0.25)] inch[round(fake_penis_size, 0.25) != 1 ? "es" : ""] long." //would put girth here but lazy
if(connected_link)
if(connected_link.souls.len > 5)
. += "<span class='warning'><B>[t_His] eyes are glowing a deadly red.</B></span>"
else
var/A = "<span class='deadsay'>"
switch(connected_link.souls.len)
if(0)
A += "[t_He] looks malnourished and weak."
if(1)
A += "[t_He] looks hungry."
if(2 to 4)
A += "[t_He] is salivating."
if(5)
A += "[t_His] eyes are glowing red."
. += "[A]</span>"
else
. += "<span class='deadsay'>[t_He] looks lost.</span>"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, .)
. += "*---------*</span>"
@@ -0,0 +1,55 @@
//Snowflake metabolization with naughty organ manipulation
/mob/living/carbon/wendigo/proc/metabolize_hunger()
if(HAS_TRAIT(src, TRAIT_NOHUNGER))
return
if(connected_link)
if(connected_link.souls.len > 3)
nutrition = min(800, nutrition + (HUNGER_FACTOR*connected_link.souls.len))
nutrition = max(0, nutrition - (HUNGER_FACTOR / (physiology.hunger_mod / (connected_link.souls.len + 1))))
else
nutrition = max(0, nutrition - (HUNGER_FACTOR / physiology.hunger_mod))
switch(nutrition)
if(NUTRITION_LEVEL_FULL to INFINITY)
throw_alert("nutrition", /obj/screen/alert/fat)
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FULL)
clear_alert("nutrition")
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_STARVING)
throw_alert("nutrition", /obj/screen/alert/hungry)
if(0 to NUTRITION_LEVEL_STARVING)
throw_alert("nutrition", /obj/screen/alert/starving)
/mob/living/carbon/wendigo/reagent_check(datum/reagent/R)
if(istype(R, /datum/reagent/fermi))
var/had_changed = FALSE
if(R.type == /datum/reagent/fermi/penis_enlarger)
fake_penis_size += 0.25
had_changed = "penis_enlarger"
if(R.type == /datum/reagent/fermi/PEsmaller)
fake_penis_size = max(0, fake_penis_size - 0.25)
had_changed = "PEsmaller"
if(R.type == /datum/reagent/fermi/breast_enlarger)
fake_breast_size += 0.25
had_changed = "breast_enlarger"
if(R.type == /datum/reagent/fermi/BEsmaller)
fake_breast_size = max(0, fake_breast_size - 0.25)
had_changed = "BEsmaller"
if(had_changed)
R.volume -= R.metabolization_rate
if(round(fake_penis_size, 1) == fake_penis_size && fake_penis_size)
switch(had_changed)
if("penis_enlarger")
to_chat(src, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [fake_penis_size] inch penis.</b></span>")
if("PEsmaller")
if(fake_penis_size > 0)
to_chat(src, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [fake_penis_size] inch penis.</b></span>")
else if(round(fake_breast_size, 1) == fake_breast_size && fake_breast_size)
switch(had_changed)
if("breast_enlarger")
to_chat(src, "<span class='warning'>Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a [ascii2text(round(fake_breast_size)+63)]-cup.</b></span>")
if("BEsmaller)")
if(fake_breast_size > 0)
to_chat(src, "<span class='warning'>Your breasts [pick("shrink down to", "decrease into", "diminish into", "deflate into", "shrivel regretfully into", "contracts into")] a [ascii2text(round(fake_breast_size)+63)]-cup.</b></span>")
return TRUE
@@ -0,0 +1,125 @@
/mob/living/carbon/wendigo/handle_environment(datum/gas_mixture/environment)
if(!environment)
return
var/loc_temp = get_temperature(environment)
if(stat != DEAD)
adjust_bodytemperature(natural_bodytemperature_stabilization())
if(!on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases
if(loc_temp < bodytemperature)
adjust_bodytemperature(max((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR, BODYTEMP_COOLING_MAX))
else
adjust_bodytemperature(min((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX))
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTHEAT))
switch(bodytemperature)
if(280 to 300)
throw_alert("temp", /obj/screen/alert/hot, 1)
apply_damage(HEAT_DAMAGE_LEVEL_1*physiology.heat_mod, BURN)
if(300 to 350)
throw_alert("temp", /obj/screen/alert/hot, 2)
apply_damage(HEAT_DAMAGE_LEVEL_2*physiology.heat_mod, BURN)
if(350 to INFINITY)
throw_alert("temp", /obj/screen/alert/hot, 3)
if(on_fire)
apply_damage(HEAT_DAMAGE_LEVEL_3*physiology.heat_mod, BURN)
else
apply_damage(HEAT_DAMAGE_LEVEL_2*physiology.heat_mod, BURN)
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTCOLD))
if(!istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
switch(bodytemperature)
if(200 to 260)
throw_alert("temp", /obj/screen/alert/cold, 1)
apply_damage(COLD_DAMAGE_LEVEL_1*physiology.cold_mod, BURN)
if(0 to 120)
throw_alert("temp", /obj/screen/alert/cold, 2)
apply_damage(COLD_DAMAGE_LEVEL_2*physiology.cold_mod, BURN)
if(-INFINITY to 0)
throw_alert("temp", /obj/screen/alert/cold, 3)
apply_damage(COLD_DAMAGE_LEVEL_3*physiology.cold_mod, BURN)
else
clear_alert("temp")
else
clear_alert("temp")
//Account for massive pressure differences
var/pressure = environment.return_pressure()
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
switch(adjusted_pressure)
if(HAZARD_HIGH_PRESSURE to INFINITY)
adjustBruteLoss(min((((adjusted_pressure / HAZARD_HIGH_PRESSURE)-1)*PRESSURE_DAMAGE_COEFFICIENT)*physiology.pressure_mod, MAX_HIGH_PRESSURE_DAMAGE))
throw_alert("pressure", /obj/screen/alert/highpressure, 2)
if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE)
throw_alert("pressure", /obj/screen/alert/highpressure, 1)
if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE)
clear_alert("pressure")
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
throw_alert("pressure", /obj/screen/alert/lowpressure, 1)
else
adjustBruteLoss( LOW_PRESSURE_DAMAGE*physiology.pressure_mod )
throw_alert("pressure", /obj/screen/alert/lowpressure, 2)
return
/mob/living/carbon/wendigo/handle_breath_temperature(datum/gas_mixture/breath)
if(abs(BODYTEMP_NORMAL - breath.temperature) > 50)
switch(breath.temperature)
if(-INFINITY to 0)
adjustFireLoss(3)
if(0 to 120) //We flourish in a cold environment
adjustFireLoss(1.5)
if(298 to 350) //But hoo boy do we not like the heat
adjustFireLoss(2)
if(350 to 800)
adjustFireLoss(3)
if(800 to INFINITY)
adjustFireLoss(8)
/mob/living/carbon/wendigo/handle_fire()
if(..())
return
adjust_bodytemperature(BODYTEMP_HEATING_MAX*physiology.heat_mod)
return
/mob/living/carbon/wendigo/adjustBruteLoss(amount, updating_health, forced)
return ..(amount*physiology.brute_mod, updating_health, forced)
/mob/living/carbon/wendigo/adjustFireLoss(amount, updating_health, forced)
return ..(amount*physiology.burn_mod, updating_health, forced)
/mob/living/carbon/wendigo/adjustToxLoss(amount, updating_health, forced)
return ..(amount*physiology.tox_mod, updating_health, forced)
/mob/living/carbon/wendigo/adjustOxyLoss(amount, updating_health, forced)
return ..(amount*physiology.oxy_mod, updating_health, forced)
/mob/living/carbon/wendigo/adjustCloneLoss(amount, updating_health, forced)
return ..(amount*physiology.clone_mod, updating_health, forced)
/mob/living/carbon/wendigo/adjustStaminaLoss(amount, updating_health, forced)
return ..(amount*physiology.stamina_mod, updating_health, forced)
/mob/living/carbon/wendigo/do_after_coefficent()
. = ..()
. *= physiology.do_after_speed
/mob/living/carbon/wendigo/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, override = 0, tesla_shock = 0, illusion = 0, stun = TRUE)
return ..(shock_damage, source, physiology.siemens_coeff, safety, override, tesla_shock, illusion, stun)
/mob/living/carbon/wendigo/Stun(amount, updating, ignore_canstun)
return ..(amount*physiology.stun_mod, updating, ignore_canstun)
/mob/living/carbon/wendigo/Knockdown(amount, updating, ignore_canknockdown, override_hardstun, override_stamdmg)
return ..(amount*physiology.stun_mod, updating, ignore_canknockdown, override_hardstun, override_stamdmg)
/mob/living/carbon/wendigo/Unconscious(amount, updating, ignore_canunconscious)
return ..(amount*physiology.stun_mod, updating, ignore_canunconscious)
/mob/living/carbon/wendigo/bleed(amt)
return ..(amt*physiology.bleed_mod)
@@ -0,0 +1,100 @@
/mob/living/carbon/wendigo/can_equip(obj/item/I, slot, disable_warning)
switch(slot)
if(SLOT_HANDS)
if(get_empty_held_indexes())
return TRUE
return FALSE
if(SLOT_GLASSES)
if(glasses)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_EYES))
return FALSE
return TRUE
if(SLOT_NECK)
if(wear_neck)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_NECK))
return FALSE
return TRUE
if(SLOT_EARS)
if(ears)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_EARS))
return FALSE
return TRUE
if(SLOT_GLOVES)
if(gloves)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_GLOVES))
return FALSE
return TRUE
if(SLOT_BACK)
if(back)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_BACK))
return FALSE
return TRUE
if(SLOT_IN_BACKPACK)
if(back)
if(SEND_SIGNAL(back, COMSIG_TRY_STORAGE_CAN_INSERT, I, src, TRUE))
return TRUE
return FALSE
if(SLOT_HEAD)
if(head)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_HEAD))
return FALSE
return TRUE
if(SLOT_BELT)
if(belt)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_BELT))
return FALSE
return TRUE
return FALSE
/mob/living/carbon/wendigo/equip_to_slot(obj/item/I, slot)
if(!..())
return
switch(slot)
if(SLOT_GLASSES)
glasses = I
update_inv_glasses()
if(SLOT_EARS)
ears = I
update_inv_ears()
if(SLOT_GLOVES)
gloves = I
update_inv_gloves()
return TRUE
/mob/living/carbon/wendigo/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE)
. = ..()
if(!. || !I)
return
else if(I == gloves)
gloves = null
if(!QDELETED(src))
update_inv_gloves()
else if(I == glasses)
glasses = null
var/obj/item/clothing/glasses/G = I
if(G.tint)
update_tint()
if(G.vision_correction)
if(HAS_TRAIT(src, TRAIT_NEARSIGHT))
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
adjust_eye_damage(0)
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
update_sight()
if(!QDELETED(src))
update_inv_glasses()
else if(I == ears)
ears = null
if(!QDELETED(src))
update_inv_ears()
else if(I == belt)
belt = null
if(!QDELETED(src))
update_inv_belt()
@@ -0,0 +1,58 @@
/obj/item/organ/liver/wendigo
name = "rotten liver"
desc = "A liver from a wendigo. It looks like a spoiled tomato."
decay_factor = 0
/obj/item/organ/liver/wendigo/on_life()
var/mob/living/carbon/C = owner
if(istype(C))
damage = initial(maxHealth)
if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
//handle liver toxin filtration
for(var/datum/reagent/toxin/T in C.reagents.reagent_list)
var/thisamount = C.reagents.get_reagent_amount(T.type)
if (thisamount && thisamount <= toxTolerance)
C.reagents.remove_reagent(T.type, 1)
C.reagents.metabolize(C, can_overdose=FALSE)
if(istype(C, /mob/living/carbon/wendigo))
var/mob/living/carbon/wendigo/A = C
A.metabolize_hunger()
/obj/item/organ/eyes/wendigo
sight_flags = SEE_MOBS
/obj/item/bodypart/head/wendigo
dismemberable = FALSE
max_damage = INFINITY
animal_origin = WENDIGO_BODYPART
/obj/item/bodypart/chest/wendigo
dismemberable = FALSE
max_damage = INFINITY
animal_origin = WENDIGO_BODYPART
/obj/item/bodypart/l_arm/wendigo
dismemberable = FALSE
max_damage = INFINITY
attack_verb = list("slashed", "clawed", "mauled")
animal_origin = WENDIGO_BODYPART
/obj/item/bodypart/r_arm/wendigo
dismemberable = FALSE
max_damage = INFINITY
attack_verb = list("slashed", "clawed", "mauled")
animal_origin = WENDIGO_BODYPART
/obj/item/bodypart/l_leg/wendigo
dismemberable = FALSE
max_damage = INFINITY
attack_verb = list("pounded", "stomped", "stamped", "kicked")
animal_origin = WENDIGO_BODYPART
/obj/item/bodypart/r_leg/wendigo
dismemberable = FALSE
max_damage = INFINITY
attack_verb = list("pounded", "stomped", "stamped", "kicked")
animal_origin = WENDIGO_BODYPART
@@ -0,0 +1,370 @@
#define HEAD_X_OFFSET_NORTH 2
#define HEAD_Y_OFFSET_NORTH 8
#define HEAD_X_OFFSET_EAST 2
#define HEAD_Y_OFFSET_EAST 8
#define HEAD_X_OFFSET_SOUTH 8
#define HEAD_Y_OFFSET_SOUTH 2
#define HEAD_X_OFFSET_WEST 8
#define HEAD_Y_OFFSET_WEST -2
#define LHAND_X_OFFSET_NORTH -5
#define LHAND_Y_OFFSET_NORTH 3
#define LHAND_X_OFFSET_EAST -2
#define LHAND_Y_OFFSET_EAST 3
#define LHAND_X_OFFSET_SOUTH 8
#define LHAND_Y_OFFSET_SOUTH 3
#define LHAND_X_OFFSET_WEST -2
#define LHAND_Y_OFFSET_WEST 3
#define RHAND_X_OFFSET_NORTH 8
#define RHAND_Y_OFFSET_NORTH 3
#define RHAND_X_OFFSET_EAST 2
#define RHAND_Y_OFFSET_EAST 3
#define RHAND_X_OFFSET_SOUTH -5
#define RHAND_Y_OFFSET_SOUTH 3
#define RHAND_X_OFFSET_WEST 2
#define RHAND_Y_OFFSET_WEST 3
#define EARS_X_OFFSET_NORTH 0
#define EARS_Y_OFFSET_NORTH 0
#define EARS_X_OFFSET_EAST 0
#define EARS_Y_OFFSET_EAST 0
#define EARS_X_OFFSET_SOUTH 0
#define EARS_Y_OFFSET_SOUTH 0
#define EARS_X_OFFSET_WEST 0
#define EARS_Y_OFFSET_WEST 0
#define GLASSES_X_OFFSET_NORTH 5
#define GLASSES_Y_OFFSET_NORTH 10
#define GLASSES_X_OFFSET_EAST 1
#define GLASSES_Y_OFFSET_EAST 10
#define GLASSES_X_OFFSET_SOUTH -2
#define GLASSES_Y_OFFSET_SOUTH 10
#define GLASSES_X_OFFSET_WEST -1
#define GLASSES_Y_OFFSET_WEST 10
#define BELT_X_OFFSET_NORTH 0
#define BELT_Y_OFFSET_NORTH 10
#define BELT_X_OFFSET_EAST 0
#define BELT_Y_OFFSET_EAST 0
#define BELT_X_OFFSET_SOUTH 0
#define BELT_Y_OFFSET_SOUTH 0
#define BELT_X_OFFSET_WEST 0
#define BELT_Y_OFFSET_WEST 0
#define BACK_X_OFFSET_NORTH 1
#define BACK_Y_OFFSET_NORTH 8
#define BACK_X_OFFSET_EAST 0
#define BACK_Y_OFFSET_EAST 8
#define BACK_X_OFFSET_SOUTH 1
#define BACK_Y_OFFSET_SOUTH 8
#define BACK_X_OFFSET_WEST 0
#define BACK_Y_OFFSET_WEST 8
#define NECK_X_OFFSET_NORTH 2
#define NECK_Y_OFFSET_NORTH 10
#define NECK_X_OFFSET_EAST 0
#define NECK_Y_OFFSET_EAST 10
#define NECK_X_OFFSET_SOUTH 2
#define NECK_Y_OFFSET_SOUTH 10
#define NECK_X_OFFSET_WEST 0
#define NECK_Y_OFFSET_WEST 10
/mob/living/carbon/wendigo/setDir(newdir, ismousemovement)
if(dir == newdir)
return //Don't spend time regenerating icons when we don't move
. = ..()
regenerate_icons()
/mob/living/carbon/wendigo/regenerate_icons()
if(!..())
update_inv_head()
update_inv_gloves()
update_inv_ears()
update_inv_glasses()
update_inv_belt()
update_inv_back()
update_inv_neck()
update_transform()
/mob/living/carbon/wendigo/update_inv_gloves()
if(gloves)
gloves.screen_loc = ui_gloves
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += gloves
//GLASSES
/mob/living/carbon/wendigo/update_inv_glasses()
if(glasses)
glasses.screen_loc = ui_glasses
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += glasses
//EARS
/mob/living/carbon/wendigo/update_inv_ears()
remove_overlay(EARS_LAYER)
if(ears)
if(client && hud_used)
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS]
inv.update_icon()
ears.screen_loc = ui_ears //move the item to the appropriate screen loc
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += ears
overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = ((ears.alternate_worn_icon) ? ears.alternate_worn_icon : 'icons/mob/ears.dmi'))
var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER]
switch(dir)
if(NORTH)
ears_overlay.pixel_x += EARS_X_OFFSET_NORTH
ears_overlay.pixel_y += EARS_Y_OFFSET_NORTH
if(EAST)
ears_overlay.pixel_x += EARS_X_OFFSET_EAST
ears_overlay.pixel_y += EARS_Y_OFFSET_EAST
if(SOUTH)
ears_overlay.pixel_x += EARS_X_OFFSET_SOUTH
ears_overlay.pixel_y += EARS_Y_OFFSET_SOUTH
if(WEST)
ears_overlay.pixel_x += EARS_X_OFFSET_WEST
ears_overlay.pixel_y += EARS_Y_OFFSET_WEST
overlays_standing[EARS_LAYER] = ears_overlay
apply_overlay(EARS_LAYER)
//BELT
/mob/living/carbon/wendigo/update_inv_belt()
remove_overlay(BELT_LAYER)
if(belt)
belt.screen_loc = ui_belt
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += belt
var/t_state = belt.item_state
if(!t_state)
t_state = belt.icon_state
overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = ((belt.alternate_worn_icon) ? belt.alternate_worn_icon : 'icons/mob/belt.dmi'))
var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER]
switch(dir)
if(NORTH)
belt_overlay.pixel_x += BELT_X_OFFSET_NORTH
belt_overlay.pixel_y += BELT_Y_OFFSET_NORTH
if(EAST)
belt_overlay.pixel_x += BELT_X_OFFSET_EAST
belt_overlay.pixel_y += BELT_Y_OFFSET_EAST
if(SOUTH)
belt_overlay.pixel_x += BELT_X_OFFSET_SOUTH
belt_overlay.pixel_y += BELT_Y_OFFSET_SOUTH
if(WEST)
belt_overlay.pixel_x += BELT_X_OFFSET_WEST
belt_overlay.pixel_y += BELT_Y_OFFSET_WEST
overlays_standing[BELT_LAYER] = belt_overlay
apply_overlay(BELT_LAYER)
//BACK
/mob/living/carbon/wendigo/update_inv_back()
..()
if(back)
back.screen_loc = ui_back
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += back
var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER]
if(back_overlay)
remove_overlay(BACK_LAYER)
switch(dir)
if(NORTH)
back_overlay.pixel_x += BACK_X_OFFSET_NORTH
back_overlay.pixel_y += BACK_Y_OFFSET_NORTH
if(EAST)
back_overlay.pixel_x += BACK_X_OFFSET_EAST
back_overlay.pixel_y += BACK_Y_OFFSET_EAST
if(SOUTH)
back_overlay.pixel_x += BACK_X_OFFSET_SOUTH
back_overlay.pixel_y += BACK_Y_OFFSET_SOUTH
if(WEST)
back_overlay.pixel_x += BACK_X_OFFSET_WEST
back_overlay.pixel_y += BACK_Y_OFFSET_WEST
overlays_standing[BACK_LAYER] = back_overlay
apply_overlay(BACK_LAYER)
//NECK
/mob/living/carbon/wendigo/update_inv_neck()
..()
if(wear_neck)
wear_neck.screen_loc = ui_neck
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += wear_neck
var/mutable_appearance/neck_overlay = overlays_standing[NECK_LAYER]
if(neck_overlay)
remove_overlay(NECK_LAYER)
switch(dir)
if(NORTH)
neck_overlay.pixel_x += NECK_X_OFFSET_NORTH
neck_overlay.pixel_y += NECK_Y_OFFSET_NORTH
if(EAST)
neck_overlay.pixel_x += NECK_X_OFFSET_EAST
neck_overlay.pixel_y += NECK_Y_OFFSET_EAST
if(SOUTH)
neck_overlay.pixel_x += NECK_X_OFFSET_SOUTH
neck_overlay.pixel_y += NECK_Y_OFFSET_SOUTH
if(WEST)
neck_overlay.pixel_x += NECK_X_OFFSET_WEST
neck_overlay.pixel_y += NECK_Y_OFFSET_WEST
overlays_standing[NECK_LAYER] = neck_overlay
apply_overlay(NECK_LAYER)
//HANDS
/mob/living/carbon/wendigo/update_inv_hands()
remove_overlay(HANDS_LAYER)
if (handcuffed)
drop_all_held_items()
return
var/list/hands = list()
for(var/obj/item/I in held_items)
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
I.screen_loc = ui_hand_position(get_held_index_of_item(I))
client.screen += I
if(observers && observers.len)
for(var/M in observers)
var/mob/dead/observe = M
if(observe.client && observe.client.eye == src)
observe.client.screen += I
else
observers -= observe
if(!observers.len)
observers = null
break
var/t_state = I.item_state
if(!t_state)
t_state = I.icon_state
var/icon_file = I.lefthand_file
var/righthand = 0
if(get_held_index_of_item(I) % 2 == 0)
icon_file = I.righthand_file
righthand = 1
var/mutable_appearance/thing = I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE)
if(righthand)
switch(dir)
if(NORTH)
thing.pixel_x += RHAND_X_OFFSET_NORTH
thing.pixel_y += RHAND_Y_OFFSET_NORTH
if(EAST)
thing = null //ghetto
if(SOUTH)
thing.pixel_x += RHAND_X_OFFSET_SOUTH
thing.pixel_y += RHAND_Y_OFFSET_SOUTH
if(WEST)
thing.pixel_x += RHAND_X_OFFSET_WEST
thing.pixel_y += RHAND_Y_OFFSET_WEST
else
switch(dir)
if(NORTH)
thing.pixel_x += LHAND_X_OFFSET_NORTH
thing.pixel_y += LHAND_Y_OFFSET_NORTH
if(EAST)
thing.pixel_x += LHAND_X_OFFSET_EAST
thing.pixel_y += LHAND_Y_OFFSET_EAST
if(SOUTH)
thing.pixel_x += LHAND_X_OFFSET_SOUTH
thing.pixel_y += LHAND_Y_OFFSET_SOUTH
if(WEST)
thing = null //ghetto
hands += thing
overlays_standing[HANDS_LAYER] = hands
apply_overlay(HANDS_LAYER)
//HEAD
/mob/living/carbon/wendigo/update_inv_head()
remove_overlay(HEAD_LAYER)
if(head)
head.screen_loc = ui_head
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += head
var/mutable_appearance/head_icon = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi')
switch(dir)
if(NORTH)
head_icon.pixel_x += HEAD_X_OFFSET_NORTH
head_icon.pixel_y += HEAD_Y_OFFSET_NORTH
if(EAST)
head_icon.pixel_x += HEAD_X_OFFSET_EAST
head_icon.pixel_y += HEAD_Y_OFFSET_EAST
if(SOUTH)
head_icon.pixel_x += HEAD_X_OFFSET_SOUTH
head_icon.pixel_y += HEAD_Y_OFFSET_SOUTH
if(WEST)
head_icon.pixel_x += HEAD_X_OFFSET_WEST
head_icon.pixel_y += HEAD_Y_OFFSET_WEST
overlays_standing[SLOT_HEAD] = head_icon
update_hud_head(head)
apply_overlay(HEAD_LAYER)
#undef LHAND_X_OFFSET_NORTH
#undef LHAND_Y_OFFSET_NORTH
#undef LHAND_X_OFFSET_EAST
#undef LHAND_Y_OFFSET_EAST
#undef LHAND_X_OFFSET_SOUTH
#undef LHAND_Y_OFFSET_SOUTH
#undef LHAND_X_OFFSET_WEST
#undef LHAND_Y_OFFSET_WEST
#undef RHAND_X_OFFSET_NORTH
#undef RHAND_Y_OFFSET_NORTH
#undef RHAND_X_OFFSET_EAST
#undef RHAND_Y_OFFSET_EAST
#undef RHAND_X_OFFSET_SOUTH
#undef RHAND_Y_OFFSET_SOUTH
#undef RHAND_X_OFFSET_WEST
#undef RHAND_Y_OFFSET_WEST
#undef EARS_X_OFFSET_NORTH
#undef EARS_Y_OFFSET_NORTH
#undef EARS_X_OFFSET_EAST
#undef EARS_Y_OFFSET_EAST
#undef EARS_X_OFFSET_SOUTH
#undef EARS_Y_OFFSET_SOUTH
#undef EARS_X_OFFSET_WEST
#undef EARS_Y_OFFSET_WEST
#undef GLASSES_X_OFFSET_NORTH
#undef GLASSES_Y_OFFSET_NORTH
#undef GLASSES_X_OFFSET_EAST
#undef GLASSES_Y_OFFSET_EAST
#undef GLASSES_X_OFFSET_SOUTH
#undef GLASSES_Y_OFFSET_SOUTH
#undef GLASSES_X_OFFSET_WEST
#undef GLASSES_Y_OFFSET_WEST
#undef BELT_X_OFFSET_NORTH
#undef BELT_Y_OFFSET_NORTH
#undef BELT_X_OFFSET_EAST
#undef BELT_Y_OFFSET_EAST
#undef BELT_X_OFFSET_SOUTH
#undef BELT_Y_OFFSET_SOUTH
#undef BELT_X_OFFSET_WEST
#undef BELT_Y_OFFSET_WEST
#undef BACK_X_OFFSET_NORTH
#undef BACK_Y_OFFSET_NORTH
#undef BACK_X_OFFSET_EAST
#undef BACK_Y_OFFSET_EAST
#undef BACK_X_OFFSET_SOUTH
#undef BACK_Y_OFFSET_SOUTH
#undef BACK_X_OFFSET_WEST
#undef BACK_Y_OFFSET_WEST
#undef NECK_X_OFFSET_NORTH
#undef NECK_Y_OFFSET_NORTH
#undef NECK_X_OFFSET_EAST
#undef NECK_Y_OFFSET_EAST
#undef NECK_X_OFFSET_SOUTH
#undef NECK_Y_OFFSET_SOUTH
#undef NECK_X_OFFSET_WEST
#undef NECK_Y_OFFSET_WEST
@@ -0,0 +1,13 @@
/obj/item/clothing/gloves/guncaster
name = "fingerless leather gloves"
desc = "Sturdy leather gloves with no fingertips, buckled at the wrist."
icon_state = "guncaster"
item_state = "guncaster"
icon = 'hyperstation/icons/obj/clothing/gloves.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/gloves.dmi'
item_color = null //So they don't wash.
transfer_prints = TRUE
strip_delay = 40
equip_delay_other = 20
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
@@ -7,3 +7,18 @@
icon = 'hyperstation/icons/obj/clothing/suits.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/suits.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/suit/gcvest
name = "\improper Guncaster's Vest"
desc = "An open leather vest with battlescarred metal shoulderpads, perfect for hunting interdimensional wazards. Smells of gunpowder and plasma."
icon_state = "guncaster"
item_state = "guncaster"
icon = 'hyperstation/icons/obj/clothing/suits.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/suits.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/suit/gcvest/alt
name = "\improper Hellraider's Vest"
desc = "An open leather vest with battlescarred metal shoulderpads, discovered in a dimensional anomaly. Smells of gunpowder and plasma."
icon_state = "guncaster_alt"
item_state = "guncaster_alt"
+73
View File
@@ -0,0 +1,73 @@
//Hyperstation 13 fleshlight
//dont forget to credit us!
/obj/item/fleshlight
name = "fleshlight"
desc = "A sex toy disguised as a flashlight, used to stimulate someones penis, complete with colour changing sleeve."
icon = 'hyperstation/icons/obj/fleshlight.dmi'
icon_state = "fleshlight_base"
item_state = "fleshlight"
w_class = WEIGHT_CLASS_SMALL
var/sleevecolor = "#ffcbd4" //pink
price = 12
var/mutable_appearance/sleeve
var/inuse = 0
/obj/item/fleshlight/examine(mob/user)
. = ..()
. += "<span class='notice'>Alt-Click \the [src.name] to customize it.</span>"
/obj/item/fleshlight/Initialize()
. = ..()
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "vagina")
sleeve.color = sleevecolor
add_overlay(sleeve)
/obj/item/fleshlight/AltClick(mob/user)
. = ..()
var/style = input(usr, "Choose style", "Customize Fleshlight", "vagina") in list("vagina", "anus")
var/new_color = input(user, "Choose color.", "Customize Fleshlight", sleevecolor) as color|null
if(new_color)
cut_overlays()
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', style)
sleevecolor = new_color
sleeve.color = new_color
add_overlay(sleeve)
return TRUE
/obj/item/fleshlight/attack(mob/living/carbon/C, mob/living/user)
var/obj/item/organ/genital/penis/P = C.getorganslot("penis")
if(inuse == 1) //just to stop stacking and causing people to cum instantly
return
if(P&&P.is_exposed())
inuse = 1
if(!(C == user)) //if we are targeting someone else.
C.visible_message("<span class='userlove'>[user] is trying to use [src] on [C]'s penis.</span>", "<span class='userlove'>[user] is trying to use [src] on your penis.</span>")
if(!do_mob(user, C, 3 SECONDS)) //3 second delay
inuse = 0
return
//checked if not used on yourself, if not, carry on.
playsound(src, 'sound/lewd/slaps.ogg', 30, 1, -1) //slapping sound
inuse = 0
if(!(C == user)) //lewd flavour text
C.visible_message("<span class='userlove'>[user] pumps [src] on [C]'s penis.</span>", "<span class='userlove'>[user] pumps [src] up and down on your penis.</span>")
else
user.visible_message("<span class='userlove'>[user] pumps [src] on their penis.</span>", "<span class='userlove'>You pump the fleshlight on your penis.</span>")
if(prob(30)) //30% chance to make them moan.
C.emote("moan")
C.do_jitter_animation()
C.adjustArousalLoss(20) //make the target more aroused.
if (C.getArousalLoss() >= 100 && ishuman(C) && C.has_dna())
C.mob_climax(forced_climax=TRUE) //make them cum if they are over the edge.
return
else
to_chat(user, "<span class='notice'>You don't see anywhere to use this on.</span>")
inuse = 0
..()
+2 -19
View File
@@ -29,20 +29,7 @@
squeak_override = list('sound/weapons/plasma_cutter.ogg' = 1) // The sound the crusher uses is the same as the plasma cutter :P
/obj/item/toy/plush/slimeplushie/tania
desc = "An adorable stuffed toy of a slimegirl. She seems oddly damp..." // Milky slime
icon = 'hyperstation/icons/obj/plushes.dmi'
icon_state = "tania"
item_state = "tania"
attack_verb = list("hugged", "cuddled", "embraced")
squeak_override = list('sound/weapons/thudswoosh.ogg' = 1)
/obj/item/toy/plush/slimeplushie/tania/love(obj/item/toy/plush/Kisser, mob/living/user)
/* if (istype(Kisser, /obj/item/toy/plush/vladin) ) // Vladin plushie isn't real, Vladin plushie cannot hug you ;-;
..()
else */
user.show_message("<span class='notice'>[src] hugs [Kisser]!</span>", 1,
"<span class='notice'>[src] hugs [Kisser]!</span>", 0)
//society has progressed past the need for Tania
/obj/item/toy/plush/mammal/grug
name = "Grug S. Cavemannington Plushie"
@@ -53,7 +40,7 @@
attack_verb = list("thomped", "ook'd", "stoned")
squeak_override = list('sound/voice/gorillaplush.ogg' = 1)
/obj/item/toy/plush/mammal/lyricalpaws
/obj/item/toy/plush/mammal/winterdawn
name = "hyena plushie"
desc = "An adorable stuffed toy of a mammal that seems to resemble a crew member! She's a little yeen in a big labcoat."
gender = FEMALE //probably a girl
@@ -66,10 +53,6 @@
'modular_citadel/sound/voice/bark2.ogg' = 1
)
/obj/item/toy/plush/mammal/lyricalpaws/attack_self(mob/user)
to_chat(user, "<span class='notice'>You pet [src]. You swear she looks up at you.</span>")
/obj/item/toy/plush/mammal/chemlight
desc = "An adorable stuffed toy of a mammal that seems to resemble a crew member! It looks to glow and sport four arms."
gender = MALE //he's a boy, right?
+25 -5
View File
@@ -105,9 +105,9 @@
flags_inv = HIDEFACE|HIDEFACIALHAIR
w_class = WEIGHT_CLASS_SMALL
/obj/item/clothing/suit/hooded/wintercoat/chloe
/obj/item/clothing/suit/chloe
name = "Fleet Commander's Overcoat"
desc = "Custom tailored to warm the cold commanding hearts of the Syndicate's feared XIV'th battle group. Its armour plating has been removed, but its beret remains inside."
desc = "Custom tailored to warm the cold commanding hearts of the Syndicate's feared XIV'th battle group. Its armour plating has been removed."
icon_state = "commissar_greatcoat"
item_state = "commissar_greatcoat"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/screwdriver, /obj/item/crowbar, /obj/item/wrench, /obj/item/stack/cable_coil, /obj/item/weldingtool, /obj/item/multitool)
@@ -115,12 +115,32 @@
body_parts_covered = CHEST|GROIN|ARMS|LEGS
mutantrace_variation = MUTANTRACE_VARIATION
tauric = TRUE
hoodtype = /obj/item/clothing/head/hooded/winterhood/chloe
/obj/item/clothing/head/hooded/winterhood/chloe
/obj/item/clothing/head/chloe
name = "Fleet Commander's Beret"
desc = "A beret bearing a worn golden symbol that stikes fear in the hearts of many. It smells faintly of plasma and gunpowder."
icon = 'hyperstation/icons/obj/clothing/rewards.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/rewards.dmi'
icon_state = "commissar_beret"
item_state = "commissar_beret"
item_state = "commissar_beret"
/obj/item/toy/sword/chloesabre
name = "Fleet Commander's Sabre"
desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a syndicate twist."
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
icon_state = "darksabre"
item_state = "darksabre"
force = 5
throwforce = 5
hitsound = 'sound/weapons/rapierhit.ogg'
lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi'
obj_flags = UNIQUE_RENAME
attack_verb = list("slashed", "cut")
/obj/item/toy/sword/chloesabre/get_belt_overlay()
return mutable_appearance('icons/obj/custom.dmi', "darksheath-darksabre")
/obj/item/toy/sword/chloesabre/get_worn_belt_overlay(icon_file)
return mutable_appearance(icon_file, "darksheath-darksabre")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 520 B

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 501 B

After

Width:  |  Height:  |  Size: 894 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 552 B

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Some files were not shown because too many files have changed in this diff Show More