MultiZ Layenia Base

This commit is contained in:
Dahlular
2022-09-04 10:32:31 -06:00
parent ec54fb9c05
commit f45b4bfb4c
187 changed files with 260225 additions and 124296 deletions
+9 -1
View File
@@ -10,8 +10,16 @@
},
"traits":[
{
"Up": 1,
"Gravity":true,
"Baseturf":"/turf/open/chasm/cloud"
"Baseturf":"/turf/open/chasm/cloud",
"Linkage" : "Cross"
},
{
"Down": -1,
"Gravity":true,
"Baseturf":"/turf/open/transparent/openspace",
"Linkage" : "Cross"
}
]
}
File diff suppressed because it is too large Load Diff
+40 -43
View File
@@ -2482,11 +2482,6 @@
name = "Bartenders Back Room"
},
/area/centcom/control)
"cnW" = (
/obj/structure/fans/tiny,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"coE" = (
/obj/machinery/light{
dir = 4
@@ -3701,6 +3696,20 @@
/obj/item/stack/packageWrap,
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
"dzb" = (
/obj/machinery/door/airlock/external{
name = "Ferry Airlock"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/obj/structure/fans/tiny,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"dzX" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-21"
@@ -4251,18 +4260,6 @@
},
/turf/closed/indestructible/riveted,
/area/space)
"dUw" = (
/obj/machinery/door/airlock/external{
name = "Ferry Airlock"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/turf/open/floor/plasteel,
/area/centcom/ferry)
"dUD" = (
/obj/structure/chair{
dir = 1
@@ -4637,10 +4634,6 @@
/area/abductor_ship)
"ejO" = (
/obj/structure/table,
/obj/item/razor{
pixel_x = 2;
pixel_y = 5
},
/turf/open/floor/plasteel/white,
/area/centcom/ferry)
"ejW" = (
@@ -9340,17 +9333,12 @@
/turf/open/floor/plasteel/dark,
/area/centcom/ferry)
"iFk" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 2;
height = 13;
id = "ferry_away";
json_key = "ferry";
name = "CentCom Ferry Dock";
width = 5
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/space,
/area/space)
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"iFv" = (
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -12939,6 +12927,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"mei" = (
@@ -13080,9 +13069,6 @@
/obj/item/storage/pill_bottle/mutarad{
pixel_x = -7
},
/obj/item/razor{
pixel_y = 12
},
/obj/machinery/light/small{
dir = 4;
pixel_x = 10;
@@ -16184,6 +16170,18 @@
},
/turf/open/floor/plasteel/dark,
/area/ctf)
"oXv" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 5;
height = 13;
id = "ferry_away";
json_key = "ferry";
name = "CentCom Ferry Dock";
width = 11
},
/turf/open/space,
/area/space)
"oXF" = (
/obj/structure/table/wood/fancy,
/obj/item/camera/spooky,
@@ -16861,7 +16859,6 @@
"pFm" = (
/obj/structure/table/glass,
/obj/item/surgical_drapes,
/obj/item/razor,
/turf/open/floor/holofloor{
icon_state = "white"
},
@@ -59745,7 +59742,7 @@ fWS
fWS
fWS
fWS
fWS
oXv
fWS
fWS
fWS
@@ -60001,9 +59998,9 @@ cJc
eRA
eRA
fWS
fWS
fWS
fWS
eRA
dzb
eRA
fWS
fWS
fWS
@@ -60258,9 +60255,9 @@ txL
iyB
eRA
fWS
fWS
eRA
iFk
fWS
eRA
fWS
fWS
fWS
@@ -60516,7 +60513,7 @@ hFM
eDP
fWS
eRA
dUw
iFk
eRA
fWS
eDP
@@ -60773,7 +60770,7 @@ uYp
eDP
cQu
eRA
cnW
iFk
eRA
pMV
eDP
+689 -226
View File
@@ -1,292 +1,755 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
"cn" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals22"
},
/area/shuttle/arrival)
"cw" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals38"
},
/area/shuttle/arrival)
"cO" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals29"
},
/area/shuttle/arrival)
"de" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals33"
},
/area/shuttle/arrival)
"dO" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals42"
},
/area/shuttle/arrival)
"eb" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals45"
},
/area/shuttle/arrival)
"fF" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"fS" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals1"
},
/area/shuttle/arrival)
"gu" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals15"
},
/area/shuttle/arrival)
"gC" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals35"
},
/area/shuttle/arrival)
"gK" = (
/obj/structure/window/reinforced/fulltile,
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/brflowers,
/obj/structure/flora/ausbushes/grassybush,
/obj/machinery/light{
pixel_y = -1
},
/turf/open/floor/grass,
/area/shuttle/arrival)
"gN" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals20"
},
/area/shuttle/arrival)
"jg" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals47"
},
/area/shuttle/arrival)
"kq" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals10"
},
/area/shuttle/arrival)
"ks" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals25"
},
/area/shuttle/arrival)
"kF" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/item/radio/intercom{
pixel_x = -30
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"lo" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals46"
},
/area/shuttle/arrival)
"lt" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals49"
},
/area/shuttle/arrival)
"lE" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals44"
},
/area/shuttle/arrival)
"mi" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals2"
},
/area/shuttle/arrival)
"mA" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_tile";
name = "tile"
},
/area/shuttle/arrival)
"nC" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals41"
},
/area/shuttle/arrival)
"nO" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals4"
},
/area/shuttle/arrival)
"ov" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals48"
},
/area/shuttle/arrival)
"oD" = (
/obj/structure/fans/tiny,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"ph" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals3"
},
/area/shuttle/arrival)
"pB" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals37"
},
/area/shuttle/arrival)
"pZ" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals9"
},
/area/shuttle/arrival)
"qa" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals26"
},
/area/shuttle/arrival)
"qw" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"qz" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals53"
},
/area/shuttle/arrival)
"qS" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals21"
},
/area/shuttle/arrival)
"rC" = (
/obj/structure/window/reinforced/fulltile,
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/ppflowers,
/obj/structure/flora/ausbushes/sparsegrass,
/turf/open/floor/grass,
/area/shuttle/arrival)
"sd" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/item/radio/intercom{
pixel_x = -30
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"sk" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals39"
},
/area/shuttle/arrival)
"uf" = (
/obj/machinery/light{
dir = 1
},
/obj/structure/chair/comfy/shuttle,
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"uC" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals13"
},
/area/shuttle/arrival)
"vk" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"xW" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals27"
},
/area/shuttle/arrival)
"yl" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals51"
},
/area/shuttle/arrival)
"yU" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals28"
},
/area/shuttle/arrival)
"ze" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals31"
},
/area/shuttle/arrival)
"zV" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals40"
},
/area/shuttle/arrival)
"Al" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals32"
},
/area/shuttle/arrival)
"CA" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals12"
},
/area/shuttle/arrival)
"Dm" = (
/obj/machinery/light{
pixel_y = -1
},
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/obj/structure/closet/emcloset{
anchored = 1
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"EA" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals6"
},
/area/shuttle/arrival)
"HU" = (
/obj/structure/fans/tiny,
/obj/effect/turf_decal/stripes/line,
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"Il" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals18"
},
/area/shuttle/arrival)
"JU" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"Kb" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals52"
},
/area/shuttle/arrival)
"KB" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/closed/wall/mineral/titanium,
"KN" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals16"
},
/area/shuttle/arrival)
"c" = (
"Lv" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals19"
},
/area/shuttle/arrival)
"My" = (
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/obj/structure/fans/tiny,
/turf/open/floor/plating,
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"d" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
"Ov" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals7"
},
/area/shuttle/arrival)
"e" = (
"OQ" = (
/obj/structure/window/reinforced/fulltile,
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/brflowers,
/obj/structure/flora/ausbushes/leafybush,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/grass,
/area/shuttle/arrival)
"OT" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals50"
},
/area/shuttle/arrival)
"Pb" = (
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/structure/table,
/obj/item/storage/firstaid/regular,
/turf/open/floor/mineral/titanium/blue,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"f" = (
/turf/open/floor/mineral/titanium/blue,
"Pr" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals24"
},
/area/shuttle/arrival)
"g" = (
/obj/machinery/computer/arcade,
"PR" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals23"
},
/area/shuttle/arrival)
"Qd" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals34"
},
/area/shuttle/arrival)
"QB" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 8;
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_tile";
name = "tile"
},
/area/shuttle/arrival)
"QK" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"Sb" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals0"
},
/area/shuttle/arrival)
"Sp" = (
/obj/machinery/light{
dir = 1
pixel_y = -1
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"h" = (
/obj/structure/closet/wardrobe/green,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"i" = (
/obj/structure/closet/wardrobe/black,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"j" = (
/obj/structure/closet/wardrobe/mixed,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"k" = (
/obj/structure/closet/wardrobe/grey,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"l" = (
/obj/machinery/requests_console{
department = "Arrival shuttle";
name = "Arrivals Shuttle console";
pixel_y = 30
},
/obj/machinery/light{
dir = 1
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"m" = (
/obj/structure/shuttle/engine/heater{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"n" = (
/obj/structure/shuttle/engine/propulsion/burst/right{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"o" = (
/obj/structure/window/shuttle,
/obj/structure/grille,
/turf/open/floor/plating,
/area/shuttle/arrival)
"p" = (
/obj/structure/chair/comfy/shuttle,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"q" = (
/obj/structure/chair/comfy/shuttle,
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"r" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
dir = 1
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/turf/open/floor/mineral/titanium,
/area/shuttle/arrival)
"s" = (
/obj/structure/shuttle/engine/propulsion{
dir = 4
"SE" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals5"
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"t" = (
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
"TW" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals11"
},
/turf/open/floor/mineral/titanium,
/area/shuttle/arrival)
"u" = (
/obj/structure/shuttle/engine/propulsion{
dir = 4
"UU" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 4;
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_tile";
name = "tile"
},
/area/shuttle/arrival)
"VR" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals17"
},
/area/shuttle/arrival)
"We" = (
/obj/docking_port/mobile/arrivals,
/turf/open/floor/plating/airless,
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals30"
},
/area/shuttle/arrival)
"v" = (
"Wi" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals14"
},
/area/shuttle/arrival)
"WM" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals8"
},
/area/shuttle/arrival)
"WO" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"w" = (
"YZ" = (
/obj/structure/chair/comfy/shuttle,
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"Zg" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals36"
},
/area/shuttle/arrival)
"Zm" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"Zu" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
dir = 8
},
/obj/machinery/light/small{
dir = 4
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"x" = (
/obj/structure/closet/emcloset,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"y" = (
/obj/machinery/light,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"z" = (
/obj/item/radio/intercom{
name = "Station Intercom (General)";
pixel_y = -29
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/machinery/light,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"A" = (
/obj/structure/shuttle/engine/propulsion/burst/left{
dir = 4
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"S" = (
/turf/open/floor/mineral/titanium,
"Zw" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"ZT" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals43"
},
/area/shuttle/arrival)
"ZZ" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
(1,1,1) = {"
a
b
o
d
d
b
a
KB
TW
cn
ks
cO
Al
KB
"}
(2,1,1) = {"
a
b
p
S
v
b
a
KB
Wi
YZ
vk
fF
gC
KB
"}
(3,1,1) = {"
a
b
q
S
w
b
a
mi
uC
uf
vk
Sp
cw
ZT
"}
(4,1,1) = {"
b
b
b
t
b
b
b
fS
CA
qS
My
yU
pB
lo
"}
(5,1,1) = {"
b
e
S
S
S
x
b
Sb
gu
Pb
QB
Dm
Zg
eb
"}
(6,1,1) = {"
c
f
r
r
r
f
c
oD
kF
ZZ
mA
Zm
sd
HU
"}
(7,1,1) = {"
b
g
f
f
f
y
b
ph
Zu
JU
mA
Zw
WO
lE
"}
(8,1,1) = {"
d
h
r
r
r
f
d
EA
Zu
JU
mA
Zw
WO
jg
"}
(9,1,1) = {"
d
i
f
f
f
f
d
SE
Zu
JU
mA
Zw
WO
Kb
"}
(10,1,1) = {"
d
j
r
r
r
f
d
nO
Zu
JU
mA
Zw
WO
yl
"}
(11,1,1) = {"
d
k
f
f
f
f
d
oD
qw
ZZ
UU
Zm
QK
HU
"}
(12,1,1) = {"
b
l
r
r
r
z
b
Ov
Il
OQ
rC
gK
sk
OT
"}
(13,1,1) = {"
c
f
S
S
S
f
c
kq
VR
gN
Pr
ze
dO
lt
"}
(14,1,1) = {"
b
m
m
m
m
m
b
pZ
KN
PR
xW
Qd
nC
ov
"}
(15,1,1) = {"
b
n
s
u
s
A
b
WM
Lv
qa
We
de
zV
qz
"}
File diff suppressed because it is too large Load Diff
+65 -26
View File
@@ -4,57 +4,96 @@
name = "Escape Pod Airlock"
},
/obj/docking_port/mobile/pod{
port_direction = 2;
dwidth = 1;
width = 3;
height = 4
height = 4;
port_direction = 2;
width = 3
},
/obj/structure/fans/tiny,
/turf/open/floor/mineral/titanium/blue,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/pod_1)
"d" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod6"
},
/area/shuttle/pod_1)
"f" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod8"
},
/area/shuttle/pod_1)
"g" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod3"
},
/area/shuttle/pod_1)
"j" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod4"
},
/area/shuttle/pod_1)
"B" = (
/turf/closed/wall/mineral/titanium,
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod2"
},
/area/shuttle/pod_1)
"G" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/machinery/status_display/evac{
pixel_x = 32
},
/obj/machinery/computer/shuttle/pod{
pixel_x = -32
dir = 4;
pixel_x = -19
},
/obj/item/radio/intercom{
pixel_x = 26
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/pod_1)
"J" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod0"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_1)
"Q" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/turf/closed/wall/mineral/titanium/custom/window/pod{
icon_state = "pod1"
},
/area/shuttle/pod_1)
"U" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/item/radio/intercom{
pixel_x = 25
},
/obj/item/storage/pod{
pixel_x = -26
dir = 8;
pixel_x = 30
},
/obj/machinery/light/small{
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/titanium/blue,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/pod_1)
"W" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod5"
},
/area/shuttle/pod_1)
"Z" = (
/obj/structure/shuttle/engine/propulsion/burst,
/turf/closed/wall/mineral/titanium,
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod7"
},
/area/shuttle/pod_1)
(1,1,1) = {"
B
B
B
g
W
Z
"}
(2,1,1) = {"
@@ -64,8 +103,8 @@ U
a
"}
(3,1,1) = {"
B
B
B
Z
J
d
j
f
"}
+614 -136
View File
@@ -1,196 +1,674 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"c" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"d" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"e" = (
/obj/structure/shuttle/engine/propulsion/left{
dir = 8
"bx" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry41"
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"f" = (
/obj/structure/shuttle/engine/heater{
dir = 8
"bF" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry17"
},
/obj/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"g" = (
/obj/structure/chair/comfy/shuttle,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"h" = (
/obj/machinery/light{
dir = 1
"cB" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry2"
},
/turf/open/floor/pod/light,
/area/shuttle/transport)
"i" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"j" = (
/obj/structure/shuttle/engine/heater{
dir = 8
"fd" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry29"
},
/obj/structure/window/reinforced{
/area/shuttle/transport)
"gv" = (
/obj/effect/turf_decal/loading_area/white{
dir = 4;
icon_state = "loadingarea_white_flip"
},
/turf/open/floor/plasteel/dark{
dir = 4;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"hh" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry37"
},
/area/shuttle/transport)
"hF" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/open/floor/plating/airless,
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/structure/window/reinforced/survival_pod,
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
icon_state = "floor_whole_alt"
},
/area/shuttle/transport)
"k" = (
/obj/machinery/light/small,
/turf/open/floor/pod/light,
"hP" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry32"
},
/area/shuttle/transport)
"l" = (
/obj/machinery/door/airlock/titanium,
/turf/open/floor/pod/light,
"iS" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry28"
},
/area/shuttle/transport)
"m" = (
"jH" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry3"
},
/area/shuttle/transport)
"jI" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry19"
},
/area/shuttle/transport)
"kh" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 5;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"kD" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/structure/window/reinforced/survival_pod{
dir = 4
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 5;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"mw" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry33"
},
/area/shuttle/transport)
"mA" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry34"
},
/area/shuttle/transport)
"oc" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry7"
},
/area/shuttle/transport)
"of" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry1"
},
/area/shuttle/transport)
"oN" = (
/turf/template_noop,
/area/template_noop)
"oZ" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry24"
},
/area/shuttle/transport)
"pc" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry36"
},
/area/shuttle/transport)
"qx" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry8"
},
/area/shuttle/transport)
"qC" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry22"
},
/area/shuttle/transport)
"qE" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry35"
},
/area/shuttle/transport)
"qF" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry20"
},
/area/shuttle/transport)
"ry" = (
/obj/machinery/computer/shuttle/ferry/request{
dir = 8
},
/turf/open/floor/pod/dark,
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain_corner";
name = "drain"
},
/obj/structure/window/reinforced/survival_pod,
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
icon_state = "floor_whole_alt"
},
/area/shuttle/transport)
"n" = (
/obj/machinery/door/airlock/titanium,
"uw" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry21"
},
/area/shuttle/transport)
"vp" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry23"
},
/area/shuttle/transport)
"vy" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry25"
},
/area/shuttle/transport)
"wR" = (
/obj/machinery/door/airlock/shuttle{
name = "ferry airlock";
req_access_txt = "101"
},
/obj/structure/fans/tiny,
/obj/docking_port/mobile{
dir = 8;
dwidth = 2;
dwidth = 3;
height = 13;
id = "ferry";
name = "ferry shuttle";
port_direction = 1;
preferred_direction = 4;
width = 5
preferred_direction = 8;
width = 7
},
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/turf/open/floor/pod/light,
/area/shuttle/transport)
"o" = (
"xZ" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry13"
},
/area/shuttle/transport)
"yR" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry14"
},
/area/shuttle/transport)
"zV" = (
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/palebush,
/obj/structure/window/reinforced/fulltile,
/turf/open/floor/grass,
/area/shuttle/transport)
"Ax" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry15"
},
/area/shuttle/transport)
"AD" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry40"
},
/area/shuttle/transport)
"AS" = (
/obj/machinery/door/airlock/shuttle{
name = "ferry storage";
req_access_txt = "101"
},
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/transport)
"CX" = (
/obj/structure/shuttle/engine/heater{
dir = 8
},
/obj/structure/window/reinforced{
dir = 1;
pixel_y = 1
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"p" = (
/obj/structure/chair/comfy/shuttle{
/obj/structure/window/reinforced/survival_pod{
dir = 1
},
/obj/structure/window/reinforced/survival_pod,
/obj/structure/window/reinforced/survival_pod{
dir = 4
},
/obj/structure/flora/crystal/medium/growth{
icon_state = "crystalgrowth2"
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"q" = (
/obj/machinery/light,
/turf/open/floor/pod/light,
"Fq" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/obj/machinery/light{
pixel_y = -1
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"r" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
/turf/open/floor/pod/light,
"Fr" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry16"
},
/area/shuttle/transport)
"GK" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry30"
},
/area/shuttle/transport)
"GN" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry31"
},
/area/shuttle/transport)
"IB" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry12"
},
/area/shuttle/transport)
"IR" = (
/obj/effect/turf_decal/bot,
/obj/structure/closet/crate,
/obj/item/storage/toolbox/mechanical,
/obj/item/toy/plush/lizardplushie/arctaisia,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/transport)
"LT" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"Mu" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/obj/structure/window/reinforced/survival_pod{
dir = 8
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 9;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"MI" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "trim";
name = "trim"
},
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/dark{
dir = 8;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"MY" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry11"
},
/area/shuttle/transport)
"Na" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry5"
},
/area/shuttle/transport)
"OB" = (
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/transport)
"Qx" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry4"
},
/area/shuttle/transport)
"Rt" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry38"
},
/area/shuttle/transport)
"Sg" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "half_stairs";
name = "steps"
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain_corner";
name = "drain"
},
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "steel_decals_central6_corner";
name = "maintenance hatch"
},
/turf/open/floor/plasteel{
dir = 1;
icon_state = "floor_plate"
},
/area/shuttle/transport)
"SB" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry26"
},
/area/shuttle/transport)
"Tb" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry0"
},
/area/shuttle/transport)
"Tr" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "trim";
name = "trim"
},
/obj/machinery/light{
pixel_y = -1
},
/turf/open/floor/plasteel/dark{
dir = 8;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"TT" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry10"
},
/area/shuttle/transport)
"Uu" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "trim";
name = "trim"
},
/turf/open/floor/plasteel/dark{
dir = 8;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"UV" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry9"
},
/area/shuttle/transport)
"Vq" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry18"
},
/area/shuttle/transport)
"VV" = (
/obj/machinery/computer{
dir = 4
},
/turf/open/floor/plasteel/dark{
dir = 4;
icon_state = "darkfull_whole"
},
/area/shuttle/transport)
"WS" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry27"
},
/area/shuttle/transport)
"Yi" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry6"
},
/area/shuttle/transport)
"Zj" = (
/obj/item/radio/intercom{
freerange = 1;
listening = 0;
name = "Custom Channel";
pixel_y = 19
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/transport)
"ZJ" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry39"
},
/area/shuttle/transport)
(1,1,1) = {"
a
a
e
a
a
oN
oN
oN
oN
oN
oN
oN
"}
(2,1,1) = {"
a
e
j
e
a
oN
hh
WS
SB
jI
Ax
oN
"}
(3,1,1) = {"
a
f
i
o
a
bx
Rt
VV
CX
IR
Fr
Qx
"}
(4,1,1) = {"
a
b
k
b
a
mw
ZJ
MI
Uu
Tr
bF
Tb
"}
(5,1,1) = {"
b
b
l
b
b
mA
AD
qF
AS
xZ
Vq
of
"}
(6,1,1) = {"
c
g
i
p
c
qE
hP
Sg
OB
LT
IB
cB
"}
(7,1,1) = {"
b
g
i
p
b
pc
iS
hF
OB
Fq
Na
jH
"}
(8,1,1) = {"
b
h
i
i
b
oN
fd
ry
OB
kD
Yi
oN
"}
(9,1,1) = {"
d
i
m
i
r
oN
GK
uw
OB
Mu
oc
oN
"}
(10,1,1) = {"
b
i
i
q
b
oN
GN
qC
OB
Fq
qx
oN
"}
(11,1,1) = {"
b
g
i
p
b
oN
oN
vp
Zj
kh
UV
oN
"}
(12,1,1) = {"
c
g
i
p
c
oN
oN
oZ
gv
zV
TT
oN
"}
(13,1,1) = {"
b
c
n
c
b
oN
oN
vy
wR
yR
MY
oN
"}
+4
View File
@@ -67,6 +67,10 @@
#define ACCESS_ENTER_GENPOP 69
#define ACCESS_LEAVE_GENPOP 70
#define ACCESS_PSYCH 71
#define ACCESS_LAMBENT 72
#define ACCESS_BARBER 73
#define ACCESS_BARISTA 74
//BEGIN CENTCOM ACCESS
/*Should leave plenty of room if we need to add more access levels.
+4 -1
View File
@@ -14,6 +14,7 @@
#define CYBORG (1<<10)
#define JR_OFFICER (1<<11)
#define JR_ENGINEER (1<<12)
#define LAMBENT (1<<13)
#define MEDSCI (1<<1)
@@ -46,6 +47,8 @@
#define CLOWN (1<<11)
#define MIME (1<<12)
#define ASSISTANT (1<<13)
#define BARBER (1<<14)
#define BARISTA (1<<15)
#define JOB_AVAILABLE 0
#define JOB_UNAVAILABLE_GENERIC 1
@@ -53,4 +56,4 @@
#define JOB_UNAVAILABLE_PLAYTIME 3
#define JOB_UNAVAILABLE_ACCOUNTAGE 4
#define JOB_UNAVAILABLE_SLOTFULL 5
#define JOB_UNAVAILABLE_WHITELIST 6
#define JOB_UNAVAILABLE_WHITELIST 6
+24 -6
View File
@@ -446,7 +446,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/crew_quarters/lounge
name = "Lounge"
icon_state = "yellow"
icon_state = "lounge"
/area/crew_quarters/fitness
name = "Fitness Room"
@@ -495,6 +495,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Theatre"
icon_state = "Theatre"
/area/crew_quarters/theatre/main
name = "Entertainment Theatre"
icon_state = "Theatre"
/area/crew_quarters/theatre/abandoned
name = "Abandoned Theatre"
icon_state = "Theatre"
@@ -1372,7 +1376,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Xenoarchaeology Medical"
icon_state = "xenomed"
//Pool
//Pool and Hyper additions
/area/crew_quarters/fitness/pool
name = "Pool Area"
icon_state = "pool"
@@ -1384,11 +1388,25 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/arcade
name = "Arcade"
icon_state = "yellow"
icon_state = "arcade"
/area/artatrium
name = "Art Atrium"
icon_state = "library"
/area/medical/psych/ward
name = "Psychology Ward"
/area/medical/psych/therapy
name = "Therapy Office"
/area/medical/psych/rec
name = "Psychology Recreation"
/area/medical/psych/lobby
name = "Psychology Lobby"
/area/medical/psych/roomA
name = "Physchology Dorm A"
/area/medical/psych/roomB
name = "Physchology Dorm A"
//Diner
/area/diner
+6
View File
@@ -10,6 +10,12 @@ area/layenia
atmos = FALSE
flags_1 = NONE
area/layenia/cave
name = "Layenia Caves"
icon_state = "mining"
outdoors = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
area/layenia/cloudlayer
name = "Layenia clouds"
icon_state = "space"
@@ -102,6 +102,13 @@ GLOBAL_LIST_EMPTY(announcement_systems)
else if(message_type == "ARRIVALS_BROKEN")
message = "The arrivals shuttle has been damaged. Docking for repairs..."
//Hyper edit
else if (message_type == "ONDUTY")
message = CompileText(onduty, user, rank)
else if (message_type == "OFFDUTY")
message = CompileText(offduty, user, rank)
//Hyper edit end
if(channels.len == 0)
radio.talk_into(src, message, null)
else
+7 -1
View File
@@ -11,8 +11,9 @@
openSound = 'hyperstation/sound/machines/shutter.ogg'
closeSound = 'hyperstation/sound/machines/shutter.ogg'
// temporarily changing it to open alt so you can see things on tables that also have shutters above them until I can figure some alternatives out.
/obj/machinery/door/poddoor/shutters/preopen
icon_state = "open"
icon_state = "open_alt"
density = FALSE
opacity = 0
@@ -68,3 +69,8 @@
/obj/machinery/door/poddoor/shutters/window/preopen
icon_state = "open"
density = FALSE
//my not so successful attempt to make the new shutters let you see what's under them when above tables.
/obj/machinery/door/poddoor/shutters/preopen/alt
icon_state = "open_alt"
density = FALSE
+40
View File
@@ -408,6 +408,21 @@
desc = "A poster advertising a movie about some masked men."
icon_state = "poster44"
/obj/structure/sign/poster/contraband/moffuchis_pizza
name = "Moffy's Pizzeria"
desc = "Moffy's Pizzeria™: family style pizza for 2 centuries."
icon_state = "poster45"
/obj/structure/sign/poster/contraband/donk_co
name = "DONK CO. BRAND MICROWAVEABLE FOOD"
desc = "DONK CO. BRAND MICROWAVABLE FOOD: MADE BY STARVING COLLEGE STUDENTS, FOR STARVING COLLEGE STUDENTS."
icon_state = "poster46"
/obj/structure/sign/poster/contraband/cybersun_six_hundred
name = "Saibāsan: 600 Years Commemorative Poster"
desc = "An artistic poster commemorating 600 years of continual business for Cybersun Industries."
icon_state = "poster47"
/obj/structure/sign/poster/official
poster_item_name = "motivational poster"
poster_item_desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface."
@@ -594,4 +609,29 @@
desc = "This informational poster teaches the viewer what carbon dioxide is."
icon_state = "poster35_legit"
/obj/structure/sign/poster/official/moth_hardhat
name = "Safety Moth - Hardhats"
desc = "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\""
icon_state = "poster36_legit"
/obj/structure/sign/poster/official/moth_piping
name = "Safety Moth - Piping"
desc = "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\""
icon_state = "poster37_legit"
/obj/structure/sign/poster/official/moth_meth
name = "Safety Moth - Methamphetamine"
desc = "This informational poster uses Safety Moth™ to tell the viewer to seek CMO approval before cooking methamphetamine. \"Stay close to the target temperature, and never go over!\" ...You shouldn't ever be making this."
icon_state = "poster38_legit"
/obj/structure/sign/poster/official/moth_epi
name = "Safety Moth - Epinephrine"
desc = "This informational poster uses Safety Moth™ to inform the viewer to help injured/deceased crewmen with their epinephrine injectors. \"Prevent organ rot with this one simple trick!\""
icon_state = "poster39_legit"
/obj/structure/sign/poster/official/corporate_perks_vacation
name = "Nanotrasen Corporate Perks: Vacation"
desc = "You wish you were here? You can be, Plan today and get 10% off your next vacation on us."
icon_state = "poster40_legit"
#undef PLACE_SPEED
@@ -9,4 +9,24 @@
/obj/effect/turf_decal/weather/snow/corner
name = "snow corner piece"
icon = 'icons/turf/snow.dmi'
icon_state = "snow_corner"
icon_state = "snow_corner"
/obj/effect/turf_decal/weather/grass
name = "grass box piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_box"
/obj/effect/turf_decal/weather/grass/line
name = "grass line piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_line"
/obj/effect/turf_decal/weather/grass/corner
name = "grass corner piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_corner"
/obj/effect/turf_decal/weather/grass/surround
name = "grass surround piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_surround"
+3 -2
View File
@@ -126,7 +126,7 @@
H.update_body()
else
..()
/* SKYRAT EDIT REMOVAL
/obj/item/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
@@ -216,4 +216,5 @@
else
..()
else
..()
..()
*/
+16 -1
View File
@@ -4,6 +4,8 @@
icon = 'icons/obj/dyespray.dmi'
icon_state = "dyespray"
var/uses = 10 //SKYRAT EDIT ADDITION
/obj/item/dyespray/attack_self(mob/user)
dye(user)
@@ -21,6 +23,10 @@
/obj/item/dyespray/proc/dye(mob/target)
if(!ishuman(target))
return
if(!uses) //SKYRAT EDIT ADDITION
return //SKYRAT EDIT ADDITION
var/mob/living/carbon/human/human_target = target
var/new_hair_color = input(usr, "Choose a base hair color:", "Character Preference","#"+human_target.hair_color) as color|null
@@ -42,4 +48,13 @@
if(!do_after(usr, 30, target = human_target))
return
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
human_target.update_hair()
human_target.update_hair()
//SKYRAT EDIT ADDITION
uses--
/obj/item/dyespray/examine(mob/user)
. = ..()
. += "It has [uses] uses left."
//SKYRAT EDIT END
+44
View File
@@ -657,6 +657,34 @@
item_state = "moffplush"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/safetymoth
name = "Safety Moth"
desc = "A limited edition Safety Moth™ plush, Can you collect them all?"
icon_state = "safetymoth"
item_state = "safetymoth"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/safetymoth_engineer
name = "Engineer Safety Moth"
desc = "A limited edition Engineer Safety Moth™ plush, Can you collect them all?"
icon_state = "safetymoth_engineer"
item_state = "safetymoth_engineer"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/safetymoth_doctor
name = "Doctor Safety Moth"
desc = "A limited edition Doctor Safety Moth™ plush, Can you collect them all?"
icon_state = "safetymoth_doctor"
item_state = "safetymoth_doctor"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/Moffy
name = "Chef Moffy plushie"
desc = "A rebranded Safety Moth™ plush by there sister company Moffy's Pizzeria Entertainment™"
icon_state = "Moffy"
item_state = "Moffy"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/xeno
name = "xenohybrid plushie"
desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
@@ -766,6 +794,15 @@
item_state = "kenk"
squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
/obj/item/toy/plush/enchanted
name = "glowing book plushie"
desc = "This book is so powerful, you can't open it."
young = TRUE
icon_state = "bookenchanted"
item_state = "bookenchanted"
squeak_override = list('hyperstation/sound/effects/enchant.ogg' = 1)
attack_verb = list("enchants", "mystifies", "disenchants", "fails to enchant", "doesn't have enough XP to enchant", "bonks")
/obj/item/toy/plush/sergal
name = "sergal plushie"
desc = "An adorable stuffed plushie that resembles a sagaru."
@@ -948,6 +985,13 @@
icon_state = "marisol"
item_state = "marisol"
/obj/item/toy/plush/mammal/freddy
name = "felix fastbear plushie"
desc = "An adorable bear plushie that resembles felix fastbear from Moffy's Pizzeria Entertainment™"
icon_state = "freddy"
item_state = "freddy"
squeak_override = list('sound/items/toysqueak1.ogg' = 1)
/obj/item/toy/plush/catgirl
name = "feline plushie"
desc = "An adorable stuffed toy that resembles a feline."
@@ -49,6 +49,13 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, one_per_turf = TRUE, on_floor = TRUE) \
)), \
//END OF CIT CHANGES
new/datum/stack_recipe_list("bench", \
list( \
new/datum/stack_recipe("bench (middle)", /obj/structure/chair/bench/metal, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("bench (left)", /obj/structure/chair/bench/metal/left, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("bench (right)", /obj/structure/chair/bench/metal/right, one_per_turf = TRUE, on_floor = TRUE), \
)), \
null, \
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),
+53 -1
View File
@@ -177,6 +177,24 @@
icon_state = "cheeseburgerbackpack"
item_state = "cheeseburgerbackpack"
/obj/item/storage/backpack/lambent
name = "holostorage drone"
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
icon_state = "lambentbackpack"
item_state = "lambentbackpack"
//component_type
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
/obj/item/storage/backpack/lambent/dropped(mob/user)
src.icon_state = "lambentbackpack_off"
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
/obj/item/storage/backpack/lambent/pickup(mob/living/user)
src.icon_state = "lambentbackpack"
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
/*
* Satchel Types
*/
@@ -195,6 +213,23 @@
/obj/item/storage/backpack/satchel/leather/withwallet/PopulateContents()
new /obj/item/storage/wallet/random(src)
/obj/item/storage/backpack/satchel/lambent
name = "holostorage drone"
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
icon_state = "lambentsatchel"
item_state = "lambentsatchel"
//component_type
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
/obj/item/storage/backpack/satchel/lambent/dropped(mob/user)
src.icon_state = "lambentsatchel_off"
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
/obj/item/storage/backpack/satchel/lambent/pickup(mob/living/user)
src.icon_state = "lambentsatchel"
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
/obj/item/storage/backpack/satchel/eng
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
@@ -340,6 +375,23 @@
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_combined_w_class = 30
/obj/item/storage/backpack/duffelbag/lambent
name = "holostorage drone"
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
icon_state = "lambentduffel"
item_state = "lambentduffel"
//component_type
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
/obj/item/storage/backpack/duffelbag/lambent/dropped(mob/user)
src.icon_state = "lambentduffel_off"
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
/obj/item/storage/backpack/duffelbag/lambent/pickup(mob/living/user)
src.icon_state = "lambentduffel"
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
/obj/item/storage/backpack/duffelbag/captain
name = "captain's duffel bag"
desc = "A large duffel bag for holding extra captainly goods."
@@ -365,7 +417,7 @@
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/razor(src)
//new /obj/item/razor(src)
new /obj/item/reagent_containers/medspray/sterilizine(src)
/obj/item/storage/backpack/duffelbag/sec
@@ -299,6 +299,7 @@
name = "industrial welding tool"
desc = "A slightly larger welder with a larger tank."
icon_state = "indwelder"
item_state = "indwelder"
max_fuel = 40
materials = list(MAT_GLASS=60)
@@ -315,6 +316,7 @@
name = "emergency welding tool"
desc = "A miniature welder used during emergencies."
icon_state = "miniwelder"
item_state = "miniwelder"
max_fuel = 10
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL=30, MAT_GLASS=10)
+2 -1
View File
@@ -14,6 +14,7 @@
if(icon_state == "mirror_broke" && !broken)
obj_break(null, mapload)
/* SKYRAT EDIT REMOVAL
/obj/structure/mirror/attack_hand(mob/user)
. = ..()
if(.)
@@ -44,7 +45,7 @@
H.hair_style = new_style
H.update_hair()
*/
/obj/structure/mirror/examine_status(mob/user)
if(broken)
return // no message spam
+6 -1
View File
@@ -133,4 +133,9 @@
/obj/structure/sign/logo/kinaris
name = "kinaris logo"
desc = "The Kinaris corprate logo. Radiant."
icon_state = "kinaris_sign1"
icon_state = "kinaris_sign1"
/obj/structure/sign/logo/cpr
name = "Challenge Pissing Room"
desc = "The league of challenge pissing"
icon_state = "CPR_sign1"
+1
View File
@@ -129,6 +129,7 @@
planetary_atmos = TRUE
initial_gas_mix = FROZEN_ATMOS
density = FALSE
vis_flags = 8
/turf/open/chasm/cloud/Initialize()
. = ..()
@@ -85,10 +85,16 @@
var/ore_type = /obj/item/stack/ore/glass
var/turfverb = "uproot"
tiled_dirt = FALSE
var/floor_variance = 50
var/quantity_of_available_tiles = 2
var/environment_type = "grass"
/turf/open/floor/grass/Initialize()
var/proper_name = name
. = ..()
update_icon()
name = proper_name
if(prob(floor_variance))
icon_state = "[environment_type][rand(0,quantity_of_available_tiles)]"
/turf/open/floor/grass/attackby(obj/item/C, mob/user, params)
if((C.tool_behaviour == TOOL_SHOVEL) && params)
@@ -387,7 +387,7 @@
bullet_bounce_sound = null
digResult = /obj/item/stack/ore/glass/basalt
floor_variance = 50 //This means 50% chance of variating from the default tile.
quantity_of_available_tiles = 4
quantity_of_available_tiles = 5
//light_range = 2
//light_power = 0.15
//light_color = LIGHT_COLOR_WHITE
+5
View File
@@ -1336,9 +1336,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(jobban_isbanned(user, rank))
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> BANNED</a></td></tr>"
continue
//Hyperstation Edit - Whitelisted roles
if((rank in GLOB.silly_positions) && (!sillyroles))
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> WHITELIST</a></td></tr>"
continue
if((rank in GLOB.important_positions) && (!importantroles)) //TODO: make whitelists a bit more accurate than "silly" and "important"
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> WHITELIST</a></td></tr>"
continue
//Hyperstation Edit end
var/required_playtime_remaining = job.required_playtime_remaining(user.client)
if(required_playtime_remaining)
HTML += "<font color=red>[rank]</font></td><td><font color=red> \[ [get_exp_format(required_playtime_remaining)] as [job.get_exp_req_type()] \] </font></td></tr>"
@@ -28,6 +28,46 @@
allowed = list (/obj/item/gun/energy/laser/redtag)
resistance_flags = NONE
/*
* Posshim's Corpus atire
*/
/obj/item/clothing/suit/hooded/corpus/
name = "Standard Voidsuit"
desc = "Standard issue voidsuit in the name of Grofit!"
icon_state = "corpus"
item_state = "armor"
body_parts_covered = CHEST|GROIN|LEGS|ARMS|FEET|HANDS
hoodtype = /obj/item/clothing/head/hooded/corpus
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT //"Hide shoes" but digi shoes dont get hidden, too bad!
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
mutantrace_variation = NO_MUTANTRACE_VARIATION //There is no need for a digi variant, it's a costume
/obj/item/clothing/suit/hooded/corpus/s //sec
name = "Enforcer Voidsuit"
desc = "Delux issue grofit voidsuit. Let the middle class know You're in charge."
icon_state = "corpuss"
hoodtype = /obj/item/clothing/head/hooded/corpus/s //Enjoy this nice red outfit Kinaris! There is NO NEED for a pink one! xoxo -VivI Fanteriso
/obj/item/clothing/suit/hooded/corpus/c //command
name = "Commander Voidsuit"
desc = "Premium issue correctional worker attire. Grease the gears of production."
icon_state = "corpusc"
hoodtype = /obj/item/clothing/head/hooded/corpus/c
/obj/item/clothing/head/hooded/corpus
name = "Voidsuit helmet"
desc = "galvanized reinforced helm to protect against the elements"
icon_state = "corpus"
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK|HIDESNOUT|HIDENECK //hide your ugly face with this one simple trick!
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
/obj/item/clothing/head/hooded/corpus/s //sec
icon_state = "corpuss"
/obj/item/clothing/head/hooded/corpus/c //command
icon_state = "corpusc"
/*
* Costume
*/
+12 -6
View File
@@ -127,13 +127,13 @@
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
/proc/get_all_accesses()
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT,
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION, ACCESS_BARISTA, ACCESS_BARBER,
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,
@@ -161,9 +161,9 @@
if(0)
return get_all_accesses()
if(1) //station general
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER)
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER, ACCESS_BARISTA, ACCESS_BARBER)
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)
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, ACCESS_LAMBENT)
if(3) //medbay
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH)
if(4) //research
@@ -224,6 +224,10 @@
return "RD Office"
if(ACCESS_BAR)
return "Bar"
if(ACCESS_BARBER)
return "Barber"
if(ACCESS_BARISTA)
return "Barista"
if(ACCESS_JANITOR)
return "Custodial Closet"
if(ACCESS_ENGINE)
@@ -322,6 +326,8 @@
return "Prison Turnstile Entrance"
if(ACCESS_LEAVE_GENPOP)
return "Prison Turnstile Exit"
if(ACCESS_LAMBENT)
return "Lambent's Quarters"
if(ACCESS_MINERAL_STOREROOM)
return "Mineral Storage"
if(ACCESS_MINISAT)
@@ -357,10 +363,10 @@
return "Code Scotch"
/proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Barista", "Barber", "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", "Psychologist", "Medical Resident",
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie")
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie", "Lambent")
/proc/get_all_job_icons() //For all existing HUD icons
return get_all_jobs() + list("Prisoner")
+2 -2
View File
@@ -100,13 +100,13 @@ Head of Personnel
outfit = /datum/outfit/job/hop
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_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
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_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_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
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,
+3 -3
View File
@@ -170,7 +170,7 @@ Bartender
outfit = /datum/outfit/job/bartender
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
@@ -183,7 +183,7 @@ Bartender
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/bartender
suit = /obj/item/clothing/suit/armor/vest
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
backpack_contents = list(/obj/item/book/granter/action/drink_fling=1)
shoes = /obj/item/clothing/shoes/laceup
/*
@@ -195,7 +195,7 @@ Cook
department_head = list("Head of Personnel")
department_flag = CIVILIAN
faction = "Station"
total_positions = 2
total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+2 -2
View File
@@ -27,11 +27,11 @@ Head of Security
outfit = /datum/outfit/job/hos
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
+6
View File
@@ -1,5 +1,6 @@
GLOBAL_LIST_INIT(command_positions, list(
"Captain",
"Lambent",
"Head of Personnel",
"Head of Security",
"Chief Engineer",
@@ -37,6 +38,8 @@ GLOBAL_LIST_INIT(supply_positions, list(
GLOBAL_LIST_INIT(civilian_positions, list(
"Head of Personnel",
"Barista",
"Barber",
"Bartender",
"Botanist",
"Cook",
@@ -60,6 +63,9 @@ GLOBAL_LIST_INIT(nonhuman_positions, list(
"Cyborg",
ROLE_PAI))
GLOBAL_LIST_INIT(important_positions, list(
"Lambent"))
GLOBAL_LIST_INIT(silly_positions, list(
"Clown",
"Mime"))
@@ -5,24 +5,30 @@
icon_state = "caucasian_m"
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
/mob/living/carbon/human/Initialize()
add_verb(src, /mob/living/proc/mob_sleep)
add_verb(src, /mob/living/proc/lay_down)
time_initialized = world.time
//initialize limbs first
create_bodyparts()
//initialize dna. for spawned humans; overwritten by other code
create_dna(src)
randomize_human(src)
dna.initialize_dna()
if(dna.species)
set_species(dna.species.type)
//initialise organs
create_internal_organs() //most of it is done in set_species now, this is only for parent call
physiology = new()
AddComponent(/datum/component/personal_crafting)
. = ..()
RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /mob/living/carbon/human/clean_blood)
+2 -1
View File
@@ -77,7 +77,8 @@
var/mob/living/carbon/human/B = src
if(HAS_TRAIT(B, TRAIT_CHOKE_SLUT))
B.adjustArousalLoss(7)
B.mob_climax_instant()
if (B.getArousalLoss() >= 100 && ishuman(B) && B.has_dna())
B.mob_climax(forced_climax=TRUE)
else
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
else
@@ -463,7 +463,7 @@
/obj/item/paint/anycolor,
/obj/item/cookiesynth,
/obj/item/pneumatic_cannon/pie/selfcharge/cyborg,
/obj/item/razor, //killbait material
///obj/item/razor, //killbait material
/obj/item/lipstick/purple,
/obj/item/soap/nanotrasen,
/obj/item/reagent_containers/spray/waterflower/cyborg,
@@ -497,7 +497,7 @@
/obj/item/toy/crayon/spraycan/borg,
/obj/item/extinguisher/mini,
/obj/item/hand_labeler/borg,
/obj/item/razor,
///obj/item/razor,
/obj/item/crowbar/cyborg,
/obj/item/instrument/violin,
/obj/item/soap/nanotrasen,
@@ -132,7 +132,7 @@
if(inventory_back)
armorval += inventory_back.armor.getRating(type)
return armorval*0.5
/*
/mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params)
if (istype(O, /obj/item/razor))
if (shaved)
@@ -155,7 +155,7 @@
return
..()
update_corgi_fluff()
*/
/mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list)
if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
usr << browse(null, "window=mob[REF(src)]")
@@ -282,16 +282,16 @@
. = ..()
if(.)
return
if(chalice_taken)
if(chalice_taken == 1)
to_chat(user, "<i>You hear a voice in your head... <b>\"My chalice has already been taken, dear. I cannot give you another...\"</i></b>")
return
if(user.getArousalLoss() < 100)
to_chat(user, "<i>You hear a voice in your head... <b>\"You are not horny enough to receive my blessing, dear~\"</i></b>")
return
var/mob/living/carbon/user_carbon = user
user_carbon.mob_climax_instant()
to_chat(user, "<i>You hear a voice in your head... <b>\"You are worthy of my blessing, dear~\"</i></b>")
to_chat(user, "<span class='userdanger'>You feel overpowering pleasure surge through your entire body.</span>")
var/A = new /obj/item/reagent_containers/chalice/lust
user.put_in_hands(A)
chalice_taken = TRUE
if (ishuman(user) && user.has_dna())
user.mob_climax(forced_climax=TRUE)
to_chat(user, "<i>You hear a voice in your head... <b>\"You are worth of my blessing dear~\"</i></b>")
to_chat(user, "<span class='userdanger'>You feel overpowering pleasure surge through your entire body.</span>")
var/A = new /obj/item/reagent_containers/chalice/lust
user.put_in_hands(A)
chalice_taken = 1
+2
View File
@@ -5,6 +5,8 @@ $include dbconfig.txt
$include comms.txt
$include antag_rep.txt
$include donator_groupings.txt
# Hyperstation Configs...
$include hyperstation/jobs.txt
# You can use the @ character at the beginning of a config option to lock it from being edited in-game
# Example usage:
+12
View File
@@ -0,0 +1,12 @@
# Allow time off to be enabled
## Uncomment to allow players to use their accrued time off
## Defaults to off because this requires the database unless you want them to
## use only what they accrued during the current round
#TIME_OFF
# Allow PTO job changes
## Currently this is required if using the previous to allow users to change
## jobs. This may be changed in the future and can be used to expand the functionality
## for something such as on-the-go job changing within the department, without heads.
## Thus it remains here.
#PTO_JOB_CHANGE
+4 -1
View File
@@ -3,6 +3,7 @@
#Job names must be identical to the title var of each job datum
#Positions can be set to -1 to allow unlimited slots
Captain=1,1
Lambent=1,1
Head of Personnel=1,1
Head of Security=1,1
Chief Engineer=1,1
@@ -16,7 +17,9 @@ Cargo Technician=3,2
Shaft Miner=3,3
Bartender=1,1
Cook=2,1
Barista=1,1
Barber=2,1
Cook=1,1
Botanist=3,2
Janitor=2,1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+11
View File
@@ -0,0 +1,11 @@
///////////////
// PTO Types //
///////////////
#define PTO_COMMAND "Command"
#define PTO_SECURITY "Security"
#define PTO_MEDICAL "Medical"
#define PTO_ENGINEERING "Engineering"
#define PTO_SCIENCE "Science"
#define PTO_CARGO "Cargo"
#define PTO_CIVILIAN "Civilian"
#define PTO_CYBORG "Silicon"
@@ -0,0 +1,11 @@
/// Toggles time off for jobs
/datum/config_entry/flag/time_off
/// Toggles changing jobs with PTO
/datum/config_entry/flag/pto_job_change
/// PTO hour cap
/datum/config_entry/number/pto_cap
config_entry_value = 100 /// Total hours
min_val = 0 /// Minimum hourly value
integer = FALSE /// We can be a float for partial hours
@@ -0,0 +1,18 @@
/**
* Some modifications to the jobs subsystem, courtesy of SandPoot.
* If we pull from upstream we should have this somewhere at some point, so it's shoehorned
* in here for the moment.
* Insert unhelpful comment here.
*/
/datum/controller/subsystem/job/proc/get_job_name(job_name)
if (!job_name)
return "Unknown" // Invalid job
//var/all_alt_titles = get_all_alt_titles()
//if (job_name in all_alt_titles) // Check if the name is an alt title
//return get_job_name(all_alt_titles[job_name]) // Locate the original job title and return it
if (job_name in get_all_job_icons()) // Check if the job has a HUD icon
return job_name
if (job_name in get_all_centcom_jobs()) // Return the NT logo if it is a CentCom job
return "CentCom"
return "Unknown" // Return unknown if none of the above apply
@@ -0,0 +1,467 @@
/area/barber
name = "Barber's Shop"
icon_state = "barber"
/area/kinarisrep
name = "Kinaris Representative Office"
/area/crew_quarters/bar/cafe
name = "Cafe"
icon_state = "cafe"
/area/crew_quarters/bar/cafe/backroom
name = "Cafe Backroom"
icon_state = "bar"
/area/crew_quarters/bar/cafe/storage
name = "Cafe Storage"
icon_state = "bar"
/area/artatrium
name = "Art Atrium"
icon_state = "library"
/area/crew_quarters/spa
name = "Spa"
icon_state = "sauna"
/area/crew_quarters/spa/sauna
name = "Sauna"
/area/security/lambent
name = "Lambent's Quarters"
icon_state = "detective"
//In hindsight a lot of how this set up was stupid and I should probably redo it -Dahl
//Upper Hallways
/area/hallway/primary/aft/upper
name = "Upper Aft Primary Hallway"
icon_state = "hallA"
/area/hallway/primary/fore/upper
name = "Upper Fore Primary Hallway"
icon_state = "hallF"
/area/hallway/primary/starboard/upper
name = "Upper Starboard Primary Hallway"
icon_state = "hallS"
/area/hallway/primary/starboard/aft/upper
name = "Upper Starboard Quarter Primary Hallway"
icon_state = "hallAS"
/area/hallway/primary/starboard/fore/upper
name = "Upper Starboard Bow Primary Hallway"
icon_state = "hallFS"
/area/hallway/primary/port/upper
name = "Upper Port Primary Hallway"
icon_state = "hallP"
/area/hallway/primary/port/aft/upper
name = "Upper Port Quarter Primary Hallway"
icon_state = "hallAP"
/area/hallway/primary/port/fore/upper
name = "Upper Port Bow Primary Hallway"
icon_state = "hallFP"
/area/hallway/primary/central/upper
name = "Upper Central Primary Hallway"
icon_state = "hallC"
/area/hallway/secondary/command/upper
name = "Upper Command Hallway"
icon_state = "bridge_hallway"
/area/hallway/secondary/construction/upper
name = "Upper Construction Area"
icon_state = "construction"
/area/hallway/secondary/exit/upper
name = "Upper Escape Shuttle Hallway"
icon_state = "escape"
/area/hallway/secondary/exit/departure_lounge/upper
name = "Upper Departure Lounge"
icon_state = "escape_lounge"
/area/hallway/secondary/entry/upper
name = "Upper Arrival Shuttle Hallway"
icon_state = "entry"
/area/hallway/secondary/service/upper
name = "Upper Service Hallway"
icon_state = "hall_service"
//Upper Dorms
/area/crew_quarters/dorms/upper
name = "Upper Dormitories"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/toilet/upper
name = "Upper Dormitory Toilets"
icon_state = "toilet"
/area/crew_quarters/locker/upper
name = "Upper Locker Room"
icon_state = "locker"
//Upper Medbay
/area/medical/medbay/upper
name = "Upper Medbay"
icon_state = "medbay"
music = 'sound/ambience/signal.ogg'
//Upper Maints
//Departments
/area/maintenance/department/chapel/upper
name = "Upper Chapel Maintenance"
icon_state = "maint_chapel"
/area/maintenance/department/chapel/monastery/upper
name = "Upper Monastery Maintenance"
icon_state = "maint_monastery"
/area/maintenance/department/crew_quarters/bar/upper
name = "Upper Bar Maintenance"
icon_state = "maint_bar"
/area/maintenance/department/crew_quarters/dorms/upper
name = "Upper Dormitory Maintenance"
icon_state = "maint_dorms"
/area/maintenance/department/crew_quarters/locker/upper
name = "Upper Locker Room Maintenance"
icon_state = "maint_locker"
/area/maintenance/department/eva/upper
name = "Upper EVA Maintenance"
icon_state = "maint_eva"
/area/maintenance/department/electrical/upper
name = "Upper Electrical Maintenance"
icon_state = "maint_electrical"
/area/maintenance/department/engine/atmos/upper
name = "Upper Atmospherics Maintenance"
icon_state = "maint_atmos"
/area/maintenance/department/security/upper
name = "Upper Security Maintenance"
icon_state = "maint_sec"
/area/maintenance/department/security/brig/upper
name = "Upper Brig Maintenance"
icon_state = "maint_brig"
/area/maintenance/department/medical/upper
name = "Upper Medbay Maintenance"
icon_state = "medbay_maint"
/area/maintenance/department/medical/morgue/upper
name = "Upper Morgue Maintenance"
icon_state = "morgue_maint"
/area/maintenance/department/science/upper
name = "Upper Science Maintenance"
icon_state = "maint_sci"
/area/maintenance/department/cargo/upper
name = "Upper Cargo Maintenance"
icon_state = "maint_cargo"
/area/maintenance/department/bridge/upper
name = "Upper Bridge Maintenance"
icon_state = "maint_bridge"
/area/maintenance/department/engine/upper
name = "Upper Engineering Maintenance"
icon_state = "maint_engi"
/area/maintenance/department/science/xenobiology/upper
name = "Upper Xenobiology Maintenance"
icon_state = "xenomaint"
xenobiology_compatible = TRUE
//Generic
/area/maintenance/arrivals/north/upper
name = "Upper Arrivals North Maintenance"
icon_state = "fpmaint"
/area/maintenance/arrivals/north_2/upper
name = "Upper Arrivals North Maintenance"
icon_state = "fpmaint"
/area/maintenance/aft/upper
name = "Upper Aft Maintenance"
icon_state = "amaint"
/area/maintenance/aft/secondary/upper
name = "Upper Aft Maintenance"
icon_state = "amaint_2"
/area/maintenance/central/upper
name = "Upper Central Maintenance"
icon_state = "maintcentral"
/area/maintenance/central/secondary/upper
name = "Upper Central Maintenance"
icon_state = "maintcentral"
/area/maintenance/fore/upper
name = "Upper Fore Maintenance"
icon_state = "fmaint"
/area/maintenance/fore/secondary/upper
name = "Upper Fore Maintenance"
icon_state = "fmaint_2"
/area/maintenance/starboard/upper
name = "Upper Starboard Maintenance"
icon_state = "smaint"
/area/maintenance/starboard/central/upper
name = "Upper Central Starboard Maintenance"
icon_state = "smaint"
/area/maintenance/starboard/aft/upper
name = "Upper Starboard Quarter Maintenance"
icon_state = "asmaint"
/area/maintenance/starboard/fore/upper
name = "Upper Starboard Bow Maintenance"
icon_state = "fsmaint"
/area/maintenance/port/upper
name = "Upper Port Maintenance"
icon_state = "pmaint"
/area/maintenance/port/central/upper
name = "Upper Central Port Maintenance"
icon_state = "maintcentral"
/area/maintenance/port/aft/upper
name = "Upper Port Quarter Maintenance"
icon_state = "apmaint"
/area/maintenance/port/fore/upper
name = "Upper Port Bow Maintenance"
icon_state = "fpmaint"
/area/maintenance/disposal/upper
name = "Upper Waste Disposal"
icon_state = "disposal"
/area/maintenance/disposal/incinerator/upper
name = "Upper Incinerator"
icon_state = "disposal"
//Misc Maint
/area/maintenance/theatre
name = "Theatre Maintenance"
icon_state = "maintcentral"
/area/maintenance/theatre/upper
name = "Upper Theatre Maintenance"
icon_state = "maintcentral"
//Solar Maint
/area/maintenance/solars/upper
name = "Upper Solar Maintenance"
icon_state = "yellow"
/area/maintenance/solars/port/upper
name = "Upper Port Solar Maintenance"
icon_state = "SolarcontrolP"
/area/maintenance/solars/port/aft/upper
name = "Upper Port Quarter Solar Maintenance"
icon_state = "SolarcontrolAP"
/area/maintenance/solars/port/fore/upper
name = "Upper Port Bow Solar Maintenance"
icon_state = "SolarcontrolFP"
/area/maintenance/solars/starboard/upper
name = "Upper Starboard Solar Maintenance"
icon_state = "SolarcontrolS"
/area/maintenance/solars/starboard/aft/upper
name = "Upper Starboard Quarter Solar Maintenance"
icon_state = "SolarcontrolAS"
/area/maintenance/solars/starboard/fore/upper
name = "Upper Starboard Bow Solar Maintenance"
icon_state = "SolarcontrolFS"
/area/maintenance/solars/aux/port/upper
name = "Upper Port Auxiliary Solar Maintenance"
icon_state = "SolarcontrolA"
/area/maintenance/solars/aux/port/aft/upper
name = "Upper Port Quarter Auxiliary Solar Maintenance"
icon_state = "SolarcontrolAP"
/area/maintenance/solars/aux/port/fore/upper
name = "Upper Port Bow Auxiliary Solar Maintenance"
icon_state = "SolarcontrolA"
/area/maintenance/solars/aux/starboard/upper
name = "Upper Starboard Auxiliary Solar Maintenance"
icon_state = "SolarcontrolA"
/area/maintenance/solars/aux/starboard/aft/upper
name = "Upper Starboard Quarter Auxiliary Solar Maintenance"
icon_state = "SolarcontrolA"
/area/maintenance/solars/aux/starboard/fore/upper
name = "Upper Starboard Bow Auxiliary Solar Maintenance"
icon_state = "SolarcontrolA"
//Upper Security
/area/security/upper
name = "Upper Security"
icon_state = "security"
ambientsounds = HIGHSEC
/area/security/main/upper
name = "Upper Security Office"
icon_state = "security"
/area/security/brig/upper
name = "Upper Brig"
icon_state = "brig"
/area/security/courtroom/upper
name = "Upper Courtroom"
icon_state = "courtroom"
/area/security/prison/upper
name = "Upper Prison Wing"
icon_state = "sec_prison"
/area/security/processing/upper
name = "Upper Labor Shuttle Dock"
icon_state = "sec_prison"
/area/security/processing/cremation/upper
name = "Upper Security Crematorium"
icon_state = "sec_prison"
/area/security/warden/upper
name = "Upper Brig Control"
icon_state = "Warden"
/area/security/armory/upper
name = "Upper Armory"
icon_state = "armory"
/area/security/detectives_office/upper
name = "Detective's Office"
icon_state = "detective"
ambientsounds = list('sound/ambience/ambidet1.ogg','sound/ambience/ambidet2.ogg')
/area/security/detectives_office/private_investigators_office/upper
name = "Upper Private Investigator's Office"
icon_state = "detective"
/area/security/range/upper
name = "Upper Firing Range"
icon_state = "firingrange"
//Misc security
/area/security/locker
name = "Security Locker Room"
icon_state = "brig"
/area/security/visitation
name = "Security Visitation"
icon_state = "brig"
//Misc Dorms
/area/crew_quarters/dorms/A
name = "Dormitories A"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/dorms/B
name = "Dormitories B"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/dorms/C
name = "Dormitories C"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/dorms/D
name = "Dormitories D"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/dorms/E
name = "Dormitories E"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/dorms/F
name = "Dormitories F"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/dorms/G
name = "Dormitories G"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/dorms/H
name = "Dormitories H"
icon_state = "Sleep"
safe = TRUE
/area/crew_quarters/park
name = "Park"
icon_state = "park"
/area/janitor/upper
name = "Upper Custodial Closet"
/area/storage/A
name = "Storage Office A"
icon_state = "storage"
/area/storage/B
name = "Storage Office B"
icon_state = "storage"
/area/storage/C
name = "Storage Office C"
icon_state = "storage"
/area/storage/D
name = "Storage Office D"
icon_state = "storage"
/area/theatre/blackbox
name = "Theatre Blackbox"
icon_state = "Theatre"
//Misc cargo
/area/quartermaster/mail
name = "Mail Office"
icon_state = "cargo_mail"
//Misc Engineering
/area/engine/custom
name = "Custom Engine Room"
icon_state = "engine"
/area/engine/tether
name = "Sky Tether Control"
icon_state = "engine"
@@ -0,0 +1,3 @@
/obj/machinery/announcement_system
var/onduty = "%PERSON has moved On-Duty as %RANK."
var/offduty = "%PERSON, %RANK, has moved Off-Duty."
@@ -0,0 +1,310 @@
/// Timeclock terminal, ported from VOREStation
/obj/machinery/computer/timeclock
name = "timeclock terminal" // Name of the object
icon = 'hyperstation/icons/obj/machinery/timeclock.dmi' // Spritesheet for the object's icon
icon_state = "timeclock" // Icon state from the spritesheet
icon_keyboard = null // Keyboard state because this is a computer and we need to tell it to not have a keyboard
light_color = "#0099ff" // TODO: Adjust this // Color for the light coming from the object
light_power = 0.5 // Brightness of the light coming from the object
layer = ABOVE_WINDOW_LAYER // Layer for the object
density = FALSE // Density of the object, so we can walk through it
circuit = /obj/item/circuitboard/computer/timeclock // Circuitboard for the object in case it gets destroyed
var/obj/item/card/id/card // Inserted ID card
/// For when we create a new timeclock
/obj/machinery/computer/timeclock/New()
..() // Let's do this just to be safe.
// For when a timeclock is destroyed
/obj/machinery/computer/timeclock/Destroy()
if (card) // If we're holding an ID and get destroyed
card.forceMove(get_turf(src)) // Get rid of the fucker
card = null // And make sure we know it's gone
. = ..() // Someone's gonna ask later, refer them here.
// This shit just sets our return value to our parent proc's return value.
// Determines what icon to used based on a couple factors
/obj/machinery/computer/timeclock/update_icon()
if (!process()) // If we can't process
icon_state = "[initial(icon_state)]_off" // we must be offline.
else if (card) // If we have an ID
icon_state = "[initial(icon_state)]_card" // display it!
else // All else fails?
icon_state = "[initial(icon_state)]" // We're just a clock.
/// Allows the timeclock to update its icon and lighting on power change, should power go out
/obj/machinery/computer/timeclock/power_change()
var/old_stat = stat // Save our old stats for later
..() // Call the parent proc to handle the actual powernet shit
if (old_stat != stat) // If our stat changed
update_icon() // update our icon
if (stat & NOPOWER) // If we no longer have power
set_light(0) // turn off our lights
else // Otherwise
set_light(brightness_on) // turn on our lights
/// Handle clicking with an object
/obj/machinery/computer/timeclock/attackby(obj/I, mob/user)
if (istype(I, /obj/item/card/id)) // If the user clicked with an ID in hand
if (!card && user.canUnEquip(I)) // Check if we already have an ID and that the user can drop the ID
I.forceMove(src) // Move the ID into our own location
card = I // Set our card to the ID
SStgui.update_uis(src) // Update all open UIs for us
update_icon() // Update our icon to reflect the new ID
else if (card) // There must've already been an ID inserted
to_chat(user, "<span class='warning'>There is already an ID card inside.</span>")
return // Quit doing shit so we don't hit the timeclock
. = ..() // Set our return value to that of the parent proc
/// Handle user clicking
/obj/machinery/computer/timeclock/attack_hand(var/mob/user as mob)
if (..()) // If for some reason the parent proc returns true
return // We won't do anything
user.set_machine(src) // Otherwise, set the mob's machine to us
ui_interact(user) // Provide a UI to the user
/// Handle UI interactions with this arcane shit known as tee gee yew eye
/obj/machinery/computer/timeclock/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui) // Attempt to update the UI
if (!ui) // If the UI doesn't exist
ui = new(user, src, "TimeClock", name) // Make a new one
ui.open() // And open it for the user
/// Handle UI data
/obj/machinery/computer/timeclock/ui_data(mob/user)
var/list/data = ..() // Call the parent object's data proc and assign that to the data list
// Data for showing user's own PTO
if (user.client) // If the client exists
data["department_hours"] = \
SANITIZE_LIST(user.client.department_hours) // Add the department hours list into data
data["user_name"] = "[user]" // Set the username to the user
// Data about the card we put into the timeclock
data["card"] = null // Add card data,
data["assignment"] = null // Assignment data,
data["job_datum"] = null // The job datum,
data["allow_change_job"] = null // Whether or not we can change jobs,
data["job_choices"] = null // And the possible jobs
if (card) // If we have a card
data["card"] = "[card]" // Set card data,
data["assignment"] = card.assignment // Assignment data,
var/datum/job/job = \
SSjob.GetJob(SSjob.get_job_name(card.assignment)) // Create a new job datum,
if (job) // If the job exists
data["job_datum"] = list( // Set job datum to a list with
"title" = job.title, // The job title,
"departments" = \
flags_to_english(job.department_flag, job.flag), // The job department,
"selection_color" = job.selection_color, // The selection color,
"timeoff_factor" = job.timeoff_factor, // The timeoff factor,
"pto_department" = job.pto_type // And the PTO type
)
if (CONFIG_GET(flag/time_off) \
&& CONFIG_GET(flag/pto_job_change)) // If we allow timeoff and job changing
data["allow_change_job"] = TRUE // Add that to the data
if (job && job.timeoff_factor < 0) // They're off duty so we have to lookup available jobs
data["job_choices"] = \
get_open_on_duty_jobs(user, job.pto_type) // Set the job choices
return data // Give back the data list for subprocs
/// The user interacted with me? owo!
/obj/machinery/computer/timeclock/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
if (..()) // Check if the parent UI had anything to say
return TRUE // If so, we don't care to do anything
add_fingerprint(usr) // Add the user's fingerprint to the list so sec can find them
switch (action) // Check the action completed
if ("id") // If the ID slot was clicked
if (card) // Check if we have an ID already
usr.put_in_hands(card) // If so, give the user the card
card = null // And make sure we don't have it
else // Otherwise
var/obj/item/I = usr.get_active_held_item() // Get the item in their active hand
if (istype(I, /obj/item/card/id) && usr.canUnEquip(I)) // Check if it's an ID and they can unequip the ID
I.forceMove(src) // If so, move it into us
card = I // And make sure we know we have it
update_icon() // Update our icon too because we did something
return TRUE // And stop handling any UI in this run
if ("switch-to-on-duty-rank") // If they switched to on-duty
if (check_face()) // Check that their face is visible
if (check_card_cooldown()) // And their card isn't on cooldown
make_on_duty(params["switch-to-on-duty-rank"], \
params["switch-to-on-duty-assignment"]) // Finally make them on-duty with the requested rank+assignment
usr.put_in_hands(card) // Give them their new card
card = null // And get it out of us
update_icon() // Update our icon in case the card was removed
return TRUE // And stop handling UI in this run
if ("switch-to-off-duty") // If they switched to off-duty
if (check_face()) // Check that their face is visible
if (check_card_cooldown()) // And that their card isn't on cooldown
make_off_duty() // Finally make them off-duty
usr.put_in_hands(card) // Shit out their ID into their hand
card = null // And get rid of that card
update_icon() // Update our icon in case the card was removed
return TRUE // And stop handling any UI in this run
/// Gets the open on-duty jobs available to a user in a specified department
/obj/machinery/computer/timeclock/proc/get_open_on_duty_jobs(var/mob/user, var/department)
var/list/available_jobs = list() // Make a list of available jobs
for (var/datum/job/job in SSjob.occupations) // For all jobs in existing occupations
if (is_open_onduty_job(user, department, job)) // Check if the job is open and on-duty for a user and given department
available_jobs[job.title] = list(job.title) // If it is, add it to the list of available jobs
if (job.alt_titles) // If the job has alt-titles (Like Station Engineer->Mechanic)
for (var/alt_job in job.alt_titles) // Go through all the alt titles
if (alt_job != job.title) // And if it isn't the current job's title (Station Engineer's alt title of Station Engineer)
available_jobs[job.title] += alt_job // Add it to the list under that job title
return available_jobs // Return the newly-filled list of available jobs
/// How does xenobio work again? Oh right, we're checking the user's face here to allow access and prevent ne'er-do-wells from using someone's PTO
/obj/machinery/computer/timeclock/proc/check_face()
if (!card) // If no card is inserted (why are we checking their face?)
to_chat(usr, "<span class='notice'>No ID is inserted.</span>")
return FALSE // Face check failed
var/mob/living/carbon/human/H = usr // Get the usr as a human data type
if (!(istype(H))) // If they somehow aren't a human??
to_chat(usr, "<span class='warning'>Invalid user detected. Access denied.</span>")
return FALSE // Face check failed
else if ((H.wear_mask && (H.wear_mask.flags_inv & HIDEFACE)) \
|| (H.head && (H.head.flags_inv & HIDEFACE))) // No, you can't hide your face
to_chat(usr, "<span class='warning'>Facial recognition scan failed due to physical obstruction. Access denied.</span>")
return FALSE // Face check failed
else if (H.get_face_name() == "Unknown" \
|| !(H.real_name == card.registered_name)) // If they're unknown or their real name isn't the name on the ID
to_chat(usr, "<span class='warning'>Facial recognition scan failed. Access denied.</span>")
return FALSE // Face check failed
else // Otherwise
return TRUE // Face check success!
/// Force users to wait 10 minutes between clocking in and out
/obj/machinery/computer/timeclock/proc/check_card_cooldown()
if (!card) // If we don't have a card
return FALSE // We can't check cooldown, fail the check
var/time_left = 10 MINUTES - (world.time - card.last_job_switch) // Determine how much time is left before the next switch
if (time_left > 0) // If there's any time left at all
to_chat(usr, "You need to wait another [round((time_left / 10) / 60, 1)] minute\s before you can switch.")
return FALSE // Fail the check
return TRUE // Otherwise pass the check
/// Makes the active card on-duty with a set rank and assignment
/obj/machinery/computer/timeclock/proc/make_on_duty(var/new_rank, var/new_assignment)
var/datum/job/old_job = \
SSjob.GetJob(SSjob.get_job_name(card.assignment)) // Get their old job from the card
var/datum/job/new_job = SSjob.GetJob(new_rank) // And their new job from the rank
if (!old_job \
|| !is_open_onduty_job(usr, old_job.pto_type, new_job)) // If there's no old job or it's not an open and on-duty job
return // Do nothing
if (new_assignment != new_job.title \
&& !(new_assignment in new_job.alt_titles)) // If the new assignment isn't the new job's title or alt-title
return // Do nothing
if (new_job) // As long as there's a new job
card.access = new_job.get_access() // Set the card's access to the new job's access
card.assignment = new_assignment // And the card's assignment to the new assignment
card.name = text(\
"[card.registered_name]'s ID Card ([card.assignment])") // And change the card's name
GLOB.data_core.manifest_modify(card.registered_name, \
card.assignment) // Apply the changes to the crew manifest
card.last_job_switch = world.time // Set the last job switch on the card to the current world time
new_job.current_positions++ // Add one to the current positions for the new job
var/mob/living/carbon/human/H = usr // Get the caller as a human data type
H.mind.assigned_role = card.assignment // Set the assigned role of the caller's mind to the assignment on the card
if (GLOB.announcement_systems.len) // If there are any announcement systems
var/obj/machinery/announcement_system/announcer = \
pick(GLOB.announcement_systems) // Pick an announcer, any announcer!
announcer.announce("ONDUTY", card.registered_name, \
card.assignment, list()) // Make the announcement for now on-duty personnel
/// Makes the active card off-duty
/obj/machinery/computer/timeclock/proc/make_off_duty()
var/datum/job/found_job = \
SSjob.GetJob(SSjob.get_job_name(card.assignment)) // Get the current job from the inserted card
if (!found_job) // If the card somehow doesn't have a job
return // https://www.youtube.com/watch?v=2k0SmqbBIpQ
var/new_dept = found_job.pto_type || PTO_CIVILIAN // New department is either the department's PTO type or civilian PTO
var/datum/job/pto_job = null // Create a new PTO job
for (var/datum/job/job in SSjob.occupations) // For all jobs in the list of occupations
if (job.pto_type == new_dept \
&& job.timeoff_factor < 0) // If the job is the department's PTO type and has a negative timeoff factor
pto_job = job // That's the new PTO job
break // And stop looking
if (pto_job) // If a PTO job was found
// Apparently we aren't using this? I don't fucking know
// var/old_title = card.assignment
card.access = pto_job.get_access() // Assign the PTO job's access to the ID
card.assignment = pto_job.title // And the PTO job's title to the ID
card.name = text(\
"[card.registered_name]'s ID Card ([card.assignment])") // Set the card's new name
GLOB.data_core.manifest_modify(card.registered_name, \
card.assignment) // And apply that change to the crew manifest
card.last_job_switch = world.time // Set the last job switch on the card to the world's current time
var/mob/living/carbon/human/H = usr // Get the caller as a human data type
H.mind.assigned_role = pto_job.title // Set their mind's assigned role to the PTO job's title
found_job.current_positions-- // Remove one from the found job's position count since they no longer have that job
if (GLOB.announcement_systems.len) // If there are any announcement systems
var/obj/machinery/announcement_system/announcer = \
pick(GLOB.announcement_systems) // Pick an announcement system, any announcement system!
announcer.announce("OFFDUTY", card.registered_name, \
card.assignment, list()) // Make an off-duty announcement with that system
return // I really don't know why this return exists we always return anyways lol
/// Check if a job is open and on-duty for a given user and department
/obj/machinery/computer/timeclock/proc/is_open_onduty_job(var/mob/user, var/department, var/datum/job/job)
return job \
&& job.current_positions <= job.total_positions \
&& !jobban_isbanned(user, SSjob.get_job_name(job.title)) \
&& job.player_old_enough(user.client) \
&& job.pto_type == department \
&& job.timeoff_factor > 0 // I feel like this requires some HEAVY explanation so here we go.
// First we check if the job exists
// Then we check that there are enough open slots
// Then we check if the user is jobbanned or not and negate that because it'll return positive if they're banned
// Then we have to check that they have enough playtime to actually join as that job
// Then we have to check that the PTO type matches the department requested (can't join security with a PTO type of medical)
// Then we have to check that there's a timeoff value so you can actually accrue hours of PTO by playing as that role
/// Convert a department and job flag to an english phrase
/obj/machinery/computer/timeclock/proc/flags_to_english(var/department,var/flag)
if (department == ENGSEC) // If the department flag is engineering or security (or silicon apparently?)
switch (flag) // Switch based on the flag
if (CAPTAIN, HOS, WARDEN, CHIEF) // Captain, Head of Security, Warden or Chief Engineer
return "Command" // Are all command
if (DETECTIVE, OFFICER) // Detectives and Officers
return "Security" // Are all security
//if (BRIGDOC) // Brig Docs
//return "Medsec" // Are medical and science
if (LAMBENT) // Lambent
return "Lambent" // Are obviously Lambent. Dunno what you expected fam
if (ENGINEER, ATMOSTECH) // Engineers and Atmos Technicians
return "Engineering" // Are engineering
if (ROBOTICIST) // Roboticist is defined here but I think it was supposed to be with medsci? Just in case.
return "Science" // They're science
else // Technically this won't always be silicon
return "Silicon" // But we're listing your ass as silicon anyways. Cope.
else if (department == MEDSCI) // Otherwise, if the department flag is medical or science
switch (flag) // Switch based on the flag (again)
if (RD_JF, CMO_JF) // Research Director or Chief Medical Officer
return "Command" // Are both command
if (SCIENTIST, ROBOTICIST) // Scientists and Roboticists (this is where I think this was meant to be but it's still with ENGSEC just in case)
return "Science" // Are obviously science
if (CHEMIST, DOCTOR, VIROLOGIST) // Chemists, Doctors, Virologists and Paramedics
return "Medical" // Are medical
if (GENETICIST) // Geneticists
return "Medsci" // Are kind of a special, middle of the road medical and science case
else // If you're landing here you're fucked
return "What the fuck?" // So what the fuck?
else if (department == CIVILIAN) // Otherwise you must be civilian, right? Right???
switch (flag) // Once again a switch based on the flag
if (HOP, QUARTERMASTER) // Head of Personnel and Quartermaster
return "Command" // Are command
//if (PRISONER) // Prisoners
//return "Prisoner" // Are... prisoners? They shouldn't be able to PTO but if they manage to break out they can access a console so no fuck you here
if (CARGOTECH, MINER) // Cargo Technicians and Miners
return "Cargo" // Are cargonians
else // Otherwise
return "Civilian" // You must be a civilian. You could be an assisstant or a clown or a bartender, I don't really care.
else // New department combo? Wack.
return "What the fuck?" // what the fuck?
@@ -0,0 +1,11 @@
/obj/effect/landmark/start/lambent
name = "Lambent"
icon_state = "Lambent"
/obj/effect/landmark/start/barber
name = "Barber"
icon_state = "Barber"
/obj/effect/landmark/start/barista
name = "Barista"
icon_state = "Barista"
@@ -0,0 +1,2 @@
/obj/item/card/id
var/last_job_switch /// Last job switch for card's owner
@@ -0,0 +1,3 @@
/obj/item/circuitboard/computer/timeclock
name = "Timeclock (Computer Board)"
build_path = /obj/machinery/computer/timeclock
@@ -1,3 +1,4 @@
//Farm things
/turf/open/floor/
var/farm_quality = 0 //all tiles have a farm quality, which is for farm animals to enjoy. 0 = worse 100 = best!
@@ -26,3 +27,11 @@
icon_state = "hay"
farm_quality = 100 //the best for farming!
floor_tile = /obj/item/stack/tile/hay
//Carpets
/obj/item/stack/tile/carpet/kinaris
name = "gilded carpet"
icon = 'hyperstation/icons/obj/tiles.dmi'
icon_state = "tile-carpet-kinaris"
turf_type = /turf/open/floor/carpet/kinaris
tableVariant = /obj/structure/table/wood/fancy/kinaris
@@ -9,3 +9,15 @@
icon_state = "bench_left"
/obj/structure/chair/bench/right
icon_state = "bench_right"
/obj/structure/chair/bench/metal
name = "bench"
icon_state = "bench_metal_middle"
icon = 'hyperstation/icons/obj/bench.dmi'
buildstackamount = 1
buildstacktype = /obj/item/stack/sheet/metal
/obj/structure/chair/bench/metal/left
icon_state = "bench_metal_left"
/obj/structure/chair/bench/metal/right
icon_state = "bench_metal_right"
@@ -165,3 +165,35 @@
/obj/effect/mob_spawn/human/villager/special(mob/living/carbon/human/new_spawn)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
//Prisoner
/obj/effect/mob_spawn/human/prisoner
name = "prisoner transfer cryoteleporter"
mob_name = "prisoner transfer"
icon = 'icons/obj/machines/sleeper.dmi'
icon_state = "sleeper"
job_description = "Prisoner Transfer"
outfit = /datum/outfit/prisoner
id_job = "Prisoner Transfer"
assignedrole = "Prisoner Transfer"
short_desc = "You are a transferred prisoner to Layenia. Don't break out or otherwise act like an antag."
flavour_text = "For one reason or another, you are a prisoner. Kinaris has chosen to temporarily hold you within Layenia Station's holding area, \
until the end of the shift. You do not permanently reside here, but you may end up in this place from shift to shift. It is highly recommended to \
make a unique character slot for this role. Kinaris would not neuter or otherwise remove identifying features that make you who you are; such as \
altering your name, features, or physical appearance. As a prisoner, you still uphold a decent amount of rights."
important_info = "Do NOT attempt to break out, antagonize, or otherwise treat your role as anything to grief with. Should you find a scenario where you want to, AHELP."
objectives = "Do NOT attempt to break out or act like an antag. Serve your time until end of shift."
mirrorcanloadappearance = TRUE
roundstart = FALSE
death = FALSE
/datum/outfit/prisoner
name = "Prisoner"
uniform = /obj/item/clothing/under/rank/prisoner
shoes = /obj/item/clothing/shoes/sneakers/orange
id = /obj/item/card/id/prisoner
implants = list(/obj/item/implant/exile, /obj/item/implant/tracking)
/obj/effect/mob_spawn/human/prisoner/special(mob/living/carbon/human/new_spawn)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
@@ -0,0 +1,9 @@
/obj/structure/table/wood/fancy/kinaris
icon = 'hyperstation/icons/obj/structures.dmi'
icon_state = "fancy_table_kinaris"
buildstack = /obj/item/stack/tile/carpet/kinaris
canSmoothWith = list(/obj/structure/table/wood/fancy/kinaris)
/obj/structure/table/wood/fancy/kinaris/New()
. = ..()
icon = 'hyperstation/icons/obj/smooth_structures/fancy_table_kinaris.dmi'
+14
View File
@@ -0,0 +1,14 @@
/turf/open/indestructible/layenia/sand
name = "\improper crimson sand"
desc = "A reddish sand."
icon = 'hyperstation/icons/turf/floors/layeniasand.dmi'
icon_state = "mapping"
baseturfs = /turf/open/indestructible/layenia/crystal
slowdown = 1
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
initial_gas_mix = FROZEN_ATMOS
planetary_atmos = TRUE
smooth = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_MORE
canSmoothWith = list(/turf/open/indestructible/layenia/sand)
@@ -0,0 +1,4 @@
/turf/open/floor/carpet/kinaris
icon = 'hyperstation/icons/turf/floors/carpet_kinaris.dmi'
floor_tile = /obj/item/stack/tile/carpet/kinaris
canSmoothWith = list(/turf/open/floor/carpet/kinaris)
@@ -0,0 +1,78 @@
/turf/closed/wall/mineral/titanium/custom //For spicy custom shuttles
name = "whoops!"
desc = "Scream at Dahl please!"
icon = 'hyperstation/icons/turf/walls/customshuttles.dmi'
icon_state = "amogus"
explosion_block = 10
smooth = SMOOTH_FALSE
canSmoothWith = null
/turf/closed/wall/mineral/titanium/custom/window
opacity = FALSE
/turf/closed/wall/mineral/titanium/custom/AfterChange(flags, oldType)
. = ..()
// Manually add space underlay, in a way similar to turf_z_transparency,
// but we actually show the old content of the same z-level, as desired for shuttles
var/turf/underturf_path
// Grab previous turf icon
if(!ispath(oldType, /turf/closed/wall/mineral/titanium/custom))
underturf_path = oldType
else
// Else use whatever SSmapping tells us, like transparent open tiles do
underturf_path = SSmapping.level_trait(z, ZTRAIT_BASETURF) || /turf/open/space
var/mutable_appearance/underlay_appearance = mutable_appearance(
initial(underturf_path.icon),
initial(underturf_path.icon_state),
layer = TURF_LAYER - 0.02, plane = initial(underturf_path.plane))
underlay_appearance.appearance_flags = RESET_ALPHA | RESET_COLOR
underlays += underlay_appearance
/turf/closed/wall/mineral/titanium/custom/ferry
name = "\improper ferry wall"
desc = "A low tech hull for Layenia flight."
icon_state = "ferry"
/turf/closed/wall/mineral/titanium/custom/window/ferry
name = "\improper ferry wall"
desc = "A low tech hull for Layenia flight."
icon_state = "ferry"
/turf/closed/wall/mineral/titanium/custom/arrivals
name = "\improper shuttle wall"
desc = "A low tech hull for Layenia and space-flight"
icon = 'hyperstation/icons/turf/walls/customarrivals.dmi'
icon_state = "amogus"
/turf/closed/wall/mineral/titanium/custom/window/arrivals
name = "\improper shuttle wall"
desc = "A low tech hull for Layenia and space-flight"
icon = 'hyperstation/icons/turf/walls/customarrivals.dmi'
icon_state = "amogus"
/turf/closed/wall/mineral/titanium/custom/pod
name = "\improper pod wall"
desc = "A low tech hull for Layenia and space-flight"
icon = 'hyperstation/icons/turf/walls/custompod.dmi'
icon_state = "amogus"
/turf/closed/wall/mineral/titanium/custom/window/pod
name = "\improper pod wall"
desc = "A low tech hull for Layenia and space-flight"
icon = 'hyperstation/icons/turf/walls/custompod.dmi'
icon_state = "amogus"
/turf/closed/wall/mineral/titanium/custom/departures
name = "\improper pod wall"
desc = "A low tech hull for Layenia and space-flight"
icon = 'hyperstation/icons/turf/walls/customdepartures.dmi'
icon_state = "amogus"
/turf/closed/wall/mineral/titanium/custom/window/departures
name = "\improper pod wall"
desc = "A low tech hull for Layenia and space-flight"
icon = 'hyperstation/icons/turf/walls/customdepartures.dmi'
icon_state = "amogus"
@@ -0,0 +1,9 @@
/**
* Additional client defines. I needed somewhere to put these so here it is!
*/
/client
//////////////////////////////////////
// Things that require the database //
//////////////////////////////////////
var/list/department_hours = list() // Track hours of leave accrued for each department
var/list/play_hours = list() // Tracks total playtime hours for each department
+1 -1
View File
@@ -10,4 +10,4 @@
strip_delay = 40
equip_delay_other = 20
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
@@ -0,0 +1,3 @@
/datum/job
var/timeoff_factor = 3
var/pto_type
@@ -0,0 +1,52 @@
/datum/job/barista
title = "Barista"
flag = BARISTA
department_head = list("Head of Personnel")
department_flag = CIVILIAN
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
outfit = /datum/outfit/job/barista
access = list(ACCESS_HYDROPONICS, ACCESS_BARISTA, ACCESS_KITCHEN, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_BARISTA, ACCESS_MINERAL_STOREROOM)
/datum/outfit/job/barista
name = "Barista"
jobtype = /datum/job/barista
belt = /obj/item/pda/bar
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/lawyer/blacksuit
suit = /obj/item/clothing/suit/toggle/lawyer/black
backpack_contents = list(/obj/item/book/granter/action/drink_fling=1, /obj/item/clothing/accessory/waistcoat)
shoes = /obj/item/clothing/shoes/laceup
/datum/job/barber
title = "Barber"
flag = BARBER
department_head = list("Head of Personnel")
department_flag = CIVILIAN
faction = "Station"
total_positions = 2
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
outfit = /datum/outfit/job/barber
access = list(ACCESS_BARBER)
minimal_access = list(ACCESS_BARBER)
/datum/outfit/job/barber
name = "Barber"
jobtype = /datum/job/barber
glasses = /obj/item/clothing/glasses/sunglasses
ears = /obj/item/radio/headset/headset_srv
belt = /obj/item/pda
uniform = /obj/item/clothing/under/barber
shoes = /obj/item/clothing/shoes/laceup
@@ -0,0 +1,8 @@
/datum/job/lambent
alt_titles = list("Kinaris Protectorate", "Hardshield", "Asset Specialist", "Luminal")
/datum/job/barber
alt_titles = list("Cosmetologist", "Beautician", "Hairdresser", "Hair Stylist")
/datum/job/barista
alt_titles = list("Cafe Attendant", "Cafe Server")
@@ -0,0 +1,56 @@
/*
Lambent
*/
/datum/job/lambent
title = "Lambent"
flag = LAMBENT
department_head = list("CentCom")
department_flag = ENGSEC
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "Central Command and Kinaris officials"
selection_color = "#ffedcc"
req_admin_notify = 1
minimal_player_age = 30
exp_requirements = 9000
exp_type = EXP_TYPE_COMMAND
exp_type_department = EXP_TYPE_COMMAND
whitelist_type = "important"
custom_spawn_text = "You are a Kinaris Lambent; a person hired directly by Kinaris who has a high interest in asset security and the protection of the station. Unlike the station, your gear is official Kinaris items, not replicated Milky-Way Engrams. As such, you should keep them safe due to the power they hold. You answer directly to Central Command and Kinaris, and security matters should not involve you for the most part, unless staffing is low or there is a problem with securing assets. Thankfully, Layenia Station is one of Kinaris's most low-tech stations with hardly anything important to secure; not even the items in the vault are noteworthy due to the falsified, low-tech Engram they're under. Just ensure peace is kept and the station is functioning in a calm manner."
outfit = /datum/outfit/job/lambent
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
mind_traits = list(TRAIT_CAPTAIN_METABOLISM)
blacklisted_quirks = list(/datum/quirk/brainproblems, /datum/quirk/insanity, /datum/quirk/nonviolent)
/datum/outfit/job/lambent
name = "Lambent"
jobtype = /datum/job/lambent
id = /obj/item/card/id/silver
belt = /obj/item/pda/captain
glasses = /obj/item/clothing/glasses/hud/toggle/zao
ears = /obj/item/radio/headset/heads/captain/alt
gloves = /obj/item/clothing/gloves/lambent
uniform = /obj/item/clothing/under/rank/lambent
suit = /obj/item/clothing/suit/lambent
shoes = /obj/item/clothing/shoes/lambent
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
backpack = /obj/item/storage/backpack/lambent
satchel = /obj/item/storage/backpack/satchel/lambent
duffelbag = /obj/item/storage/backpack/duffelbag/lambent
box = /obj/item/storage/box/security
implants = list(/obj/item/implant/mindshield)
@@ -0,0 +1,31 @@
/obj/item/wallframe/light_fixture/fairy
name = "fairy lights frame"
icon_state = "fairy-construct-item"
result_path = /obj/structure/light_construct/fairy
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
/obj/structure/light_construct/fairy
name = "fairy lights frame"
icon_state = "fairy-construct-stage1"
fixture_type = "fairy"
sheets_refunded = 1
/obj/machinery/light/fairy
icon_state = "fairy"
base_state = "fairy"
fitting = "fairy"
brightness = 3
desc = "Small fairy lights."
//light_type = /obj/item/light/fairy
/obj/machinery/light/fairy/broken
status = LIGHT_BROKEN
icon_state = "fairy-broken"
/obj/machinery/light/fairy/built
icon_state = "bulb-empty"
/obj/machinery/light/fairy/built/Initialize()
. = ..()
status = LIGHT_EMPTY
update(0)
+541
View File
@@ -0,0 +1,541 @@
//Proper modularity to come at a later date
/obj/structure/chair/barber_chair
name = "barbers chair"
desc = "You sit in this, and your hair shall be cut."
icon = 'icons/obj/chairs.dmi'
icon_state = "barber_chair"
/obj/structure/closet/secure_closet/barber
name = "Barber's locker"
icon_state = "barber"
icon = 'icons/obj/closet.dmi'
req_access = list(ACCESS_BARBER)
/obj/structure/closet/secure_closet/barber/PopulateContents()
new /obj/item/clothing/mask/surgical(src) // These three are here, so the barber can pick and choose what he's painting.
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/suit/apron/surgical(src)
new /obj/item/clothing/accessory/waistcoat(src)
//new /obj/item/clothing/under/rank/civilian/lawyer/purpsuit(src)
new /obj/item/clothing/suit/toggle/lawyer/purple(src)
new /obj/item/razor(src)
//new /obj/item/straight_razor(src)
new /obj/item/hairbrush/comb(src)
new /obj/item/scissors(src)
new /obj/item/fur_dyer(src)
new /obj/item/dyespray(src)
new /obj/item/storage/box/lipsticks(src)
new /obj/item/reagent_containers/spray/quantum_hair_dye(src)
new /obj/item/reagent_containers/spray/barbers_aid(src)
new /obj/item/reagent_containers/spray/cleaner(src)
new /obj/item/reagent_containers/rag(src)
new /obj/item/storage/firstaid/regular(src)
/obj/machinery/vending/barbervend
name = "Fab-O-Vend"
desc = "It would seem it vends dyes, and other stuff to make you pretty."
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "barbervend"
product_slogans = "Spread the colour, like butter, onto toast... Onto their hair.; Sometimes, I dream about dyes...; Paint 'em up and call me Mr. Painter.; Look brother, I'm a vendomat, I solve practical problems."
product_ads = "Cut 'em all!; To sheds!; Hair be gone!; Prettify!; Beautify!"
vend_reply = "Come again!; Buy another!; Dont you love your new look?"
req_access = list(ACCESS_BARBER)
refill_canister = /obj/item/vending_refill/barbervend
products = list(
/obj/item/reagent_containers/spray/quantum_hair_dye = 3,
// /obj/item/reagent_containers/spray/baldium = 3,
/obj/item/reagent_containers/spray/barbers_aid = 3,
/obj/item/dyespray = 5,
/obj/item/hairbrush = 3,
/obj/item/hairbrush/comb = 3,
/obj/item/fur_dyer = 1,
)
premium = list(
/obj/item/scissors = 3,
/obj/item/reagent_containers/spray/super_barbers_aid = 3,
/obj/item/storage/box/lipsticks = 3,
/obj/item/lipstick/quantum = 1,
/obj/item/razor = 1,
// /obj/item/storage/box/perfume = 1,
)
refill_canister = /obj/item/vending_refill/barbervend
/obj/item/vending_refill/barbervend
machine_name = "barber vend resupply"
icon_state = "refill_snack" //generic item refill because there isnt one sprited yet.
/obj/effect/landmark/start/barber
name = "Barber"
icon_state = "Barber"
//icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
//Brush
/obj/item/hairbrush
name = "hairbrush"
desc = "A small, circular brush with an ergonomic grip for efficient brush application."
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "brush"
//Put lefthand and righthand files here
w_class = WEIGHT_CLASS_TINY
var/brush_speed = 3 SECONDS
/obj/item/hairbrush/comb
name = "comb"
desc = "A rather simple tool, used to straighten out hair and knots in it."
icon_state = "blackcomb"
/obj/item/hairbrush/attack(mob/target, mob/user)
if(target.stat == DEAD)
to_chat(usr, "<span class='warning'>There isn't much point in brushing someone who can't appreciate it!</span>")
return
brush(target, user)
return COMPONENT_CANCEL_ATTACK_CHAIN
//Brushes someone
/obj/item/hairbrush/proc/brush(mob/living/target, mob/user)
if(ishuman(target))
var/mob/living/carbon/human/human_target = target
var/obj/item/bodypart/head = human_target.get_bodypart(BODY_ZONE_HEAD)
//Don't brush if you can't reach their head or cancel the action
if(!head) //No head? No bitches?
to_chat(usr, "<span class='warning'>[human_target] has no head!</span>")
return
if(human_target.is_mouth_covered(head_only = 1))
to_chat(usr, "<span class='warning'>You can't brush [human_target]'s hair while [human_target.p_their()] head is covered!</span>")
return
if(!do_after(user, brush_speed, human_target))
return
// Do 1 brute to their head if they're bald. Should've been more careful.
if(human_target.hair_style == "Bald" || human_target.hair_style == "Skinhead" && is_species(human_target, /datum/species/human)) //It can be assumed most anthros have hair on them!
human_target.visible_message("<span class='warning'>[usr] scrapes the bristles uncomfortably over [human_target]'s scalp.</span>","<span class='warning'>You scrape the bristles uncomfortably over [human_target]'s scalp.</span>")
playsound(target, 'hyperstation/sound/misc/bonk.ogg', 100, 1) //Until I fix it
return
//Brush their hair
if(human_target == user)
human_target.visible_message("<span class='notice'>[usr] brushes [usr.p_their()] hair!</span>","<span class='notice'>You brush your hair.</span>")
//SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "brushed", /datum/mood/brushed/self)
else
user.visible_message("<span class='notice'>[usr] brushes [human_target]'s hair!</span>","<span class='notice'>You brush [human_target]'s hair.</span>")
//SEND_SIGNAL(human_target, COMISG_ADD_MOOD_EVENT, "brushed", /datum/mood_event/brushed, user)
//fur dyer
#define COLOR_MODE_SPECIFIC "Specific Marking"
#define COLOR_MODE_GENERAL "General Color"
/obj/item/fur_dyer
name = "electric fur dyer"
desc = "Dye that is capable of recoloring fur in a mostly permanent way."
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "fur_sprayer"
w_class = WEIGHT_CLASS_TINY
var/mode = COLOR_MODE_GENERAL
/*
/obj/item/fur_dyer/Initialize(mapload)
. = ..()
AddComponent(/datum/component/cell)
*/
/obj/item/fur_dyer/attack_self(mob/user, modifiers)
. = ..()
if(mode == COLOR_MODE_SPECIFIC)
mode = COLOR_MODE_GENERAL
else
mode = COLOR_MODE_SPECIFIC
to_chat(user, "Set to [mode]!")
/obj/item/fur_dyer/attack(mob/living/M, mob/living/user, params)
if(!ishuman(M))
return ..()
var/mob/living/carbon/human/target_human = M
switch(mode)
if(COLOR_MODE_SPECIFIC)
to_chat(user, "The device resonates ominously, and stops. It seems to be interfered by an Engram.")
//dye_marking(target_human, user)
if(COLOR_MODE_GENERAL)
dye_general(target_human, user)
/obj/item/fur_dyer/proc/dye_general(mob/living/carbon/human/target_human, mob/living/user)
var/selected_mutant_color = tgalert(user, "Please select which mutant color you'd like to change", "Select Color", "One", "Two", "Three")
if(!selected_mutant_color)
return
var/selected_color = input(
user,
"Select marking color",
null,
"#FFFFFF"
) as color | null
if(!selected_color)
return
selected_color = sanitize_hexcolor(selected_color)
visible_message("<span class='notice'>[user] starts to masterfully paint [target_human]!</span>")
if(do_after(user, 20 SECONDS, target_human))
switch(selected_mutant_color)
if("One")
target_human.dna.features["mcolor"] = selected_color
if("Two")
target_human.dna.features["mcolor2"] = selected_color
if("Three")
target_human.dna.features["mcolor3"] = selected_color
target_human.regenerate_icons()
//use power
visible_message("<span class='notice'>[user] finishes painting [target_human]!</span>")
playsound(src.loc, 'sound/effects/spray2.ogg', 50, TRUE)
/* We don't have markings that can be colored separately yet, so this is not needed
/obj/item/fur_dyer/proc/dye_marking(mob/living/carbon/human/target_human, mob/living/user)
var/list/list/current_markings = target_human.dna.body_markings.Copy()
if(!current_markings.len)
to_chat(user, "<span class='warning'>[target_human] has no markings!</span>")
return
//power stuff here
/var/selected_marking_area = user.zone_selected
if(!current_markings[selected_marking_area])
to_chat(user, "<span class='danger'>[target_human] has no bodymarkings on this limb!</span>")
return
var/selected_marking_id = input(user, "Please select which marking you'd like to color!", "Select marking", current_markings[selected_marking_area])
if(!selected_marking_id)
return
var/selected_color = input(
user,
"Select marking color",
null,
"#FFFFFF"
) as color | null
if(!selected_color)
return
selected_color = sanitize_hexcolor(selected_color)
visible_message("<span class='notice'>[user] starts to masterfully paint [target_human]!</span>")
if(do_after(user, 20 SECONDS, target_human))
current_markings[selected_marking_area][selected_marking_id] = selected_color
target_human.dna.body_markings = current_markings.Copy()
target_human.regenerate_icons()
//item_use_power(power_use_amount, user)
visible_message("<span class='notice'>[user] finishes painting [target_human]!</span>")
playsound(src.loc, 'sound/effects/spray2.ogg', 50, TRUE)
*/
/obj/machinery/dryer
name = "hand dryer"
desc = "The Breath Of Lizards-3000, an experimental dryer."
icon = 'hyperstation/icons/obj/dryer.dmi'
icon_state = "dryer"
density = FALSE
anchored = TRUE
var/busy = FALSE
/obj/machinery/dryer/attack_hand(mob/user)
if(iscyborg(user) || isAI(user))
return
if(!can_interact(user))
return
if(busy)
to_chat(user, "<span class='warning'>Someone is already drying here.</span>")
return
to_chat(user, "<span class='notice'>You start drying your hands.</span>")
playsound(src, 'hyperstation/sound/salon/drying.ogg', 50)
add_fingerprint(user)
busy = TRUE
if(do_after(user, 4 SECONDS, src))
busy = FALSE
user.visible_message("[user] dried their hands using \the [src].")
else
busy = FALSE
/obj/item/reagent_containers/dropper/precision
name = "pipette"
desc = "A high precision pippette. Holds 1 unit."
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "pipette1"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)
volume = 1
w_class = WEIGHT_CLASS_TINY
/obj/item/storage/box/lipsticks
name = "lipstick box"
/obj/item/storage/box/lipsticks/PopulateContents()
..()
new /obj/item/lipstick(src)
new /obj/item/lipstick/purple(src)
new /obj/item/lipstick/jade(src)
new /obj/item/lipstick/black(src)
/obj/item/lipstick/quantum
name = "quantum lipstick"
/obj/item/lipstick/quantum/attack(mob/attacked_mob, mob/user)
if(!open || !ismob(attacked_mob))
return
if(!ishuman(attacked_mob))
to_chat(user, "<span class='warning'>Where are the lips on that?</span>")
return
var/new_color = input(
user,
"Select lipstick color",
null,
"#FFFFFF"
) as color | null
var/mob/living/carbon/human/target = attacked_mob
if(target.is_mouth_covered())
to_chat(user, "<span class='warning'>Remove [ target == user ? "your" : "[target.p_their()]" ] mask!</span>")
return
if(target.lip_style) //if they already have lipstick on
to_chat(user, "<span class'warning'>You need to wipe off the old lipstick first!</span>")
return
if(target == user)
visible_message("<span class='notice'>[user] does [user.p_their()] lips with \the [src].</span>","<span class='notice'>You take a moment to apply \the [src]. Perfect!</span>")
target.lip_style = "lipstick"
target.lip_color = new_color
target.update_body()
return
visible_message("<span class='warning'>[user] begins to do [target]'s lips with \the [src].</span>","<span class='notice'>You begin to apply \the [src] on [target]'s lips...</span>")
if(!do_after(user, 2 SECONDS, target = target))
return
visible_message("<span class='notice'>[user] does [target]'s lips with \the [src].</span>","<span class='notice'>You apply \the [src] on [target]'s lips.</span>")
target.lip_style = "lipstick"
target.lip_color = new_color
target.update_body()
/obj/effect/decal/cleanable/hair
name = "hair cuttings"
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "cut_hair"
/obj/item/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "razor"
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_TINY
// How long do we take to shave someone's (facial) hair?
var/shaving_time = 10 SECONDS
/obj/item/razor/proc/shave(mob/living/carbon/human/target_human, location = BODY_ZONE_PRECISE_MOUTH)
if(location == BODY_ZONE_PRECISE_MOUTH)
target_human.facial_hair_style = "Shaved"
else
target_human.hair_style = "Bald"
target_human.update_hair()
playsound(loc, 'sound/items/unsheath.ogg', 20, TRUE)
/obj/item/razor/attack(mob/attacked_mob, mob/living/user)
if(ishuman(attacked_mob))
var/mob/living/carbon/human/target_human = attacked_mob
var/location = user.zone_selected
if(!(location in list(BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD)))
to_chat(user, "<span class='warning'>You stop, look down at what you're currently holding and ponder to yourself, \"This is probably to be used on their hair or their facial hair.\"</span>")
return
if((location in list(BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD)) && !target_human.get_bodypart(BODY_ZONE_HEAD))
to_chat(user, "<span class='warning'>[target_human] doesn't have a head!</span>")
return
if(location == BODY_ZONE_PRECISE_MOUTH)
if(!(FACEHAIR in target_human.dna.species.species_traits))
to_chat(user, "<span class='warning'>There is no facial hair to shave!</span>")
return
if(!get_location_accessible(target_human, location))
to_chat(user, "<span class'warning'>The mask is in the way!</span>")
return
if(target_human.facial_hair_style == "Shaved")
to_chat(user, "<span class='warning'>Already clean-shaven!</span>")
return
var/self_shaving = target_human == user // Shaving yourself?
visible_message("<span class='notice'>[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src].</span>","<span class='notice'>You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]...</span>")
if(do_after(user, shaving_time, target = target_human))
visible_message("<span class='notice'>[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src].</span>","<span class='notice'>You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!</span>")
shave(target_human, location)
else if(location == BODY_ZONE_HEAD)
if(!(HAIR in target_human.dna.species.species_traits))
to_chat(user, "<span class='warning'>There is no hair to shave!</span>")
return
if(!get_location_accessible(target_human, location))
to_chat(user, "<span class='warning'>Their headgear is in the way!</span>")
return
if(target_human.hair_style == "Bald" || target_human.hair_style == "Balding Hair" || target_human.hair_style == "Skinhead")
to_chat(user, "<span class='warning'>There is not enough hair left to shave!</span>")
return
var/self_shaving = target_human == user // Shaving yourself?
visible_message("<span class='notice'>[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src].</span>","<span class='notice'>You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]...</span>")
if(do_after(user, shaving_time, target = target_human))
visible_message("<span class='notice'>[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src].</span>","<span class='notice'>You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!</span>")
shave(target_human, location)
else
..()
else
..()
/obj/structure/sign/barber
name = "barbershop sign"
desc = "A glowing red-blue-white stripe you won't mistake for any other!"
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "barber"
buildable_sign = FALSE // Don't want them removed, they look too jank.
/obj/item/scissors
name = "barber's scissors"
desc = "Some say a barbers best tool is his electric razor, that is not the case. These are used to cut hair in a professional way!"
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "scissors"
w_class = WEIGHT_CLASS_TINY
sharpness = TRUE
// How long does it take to change someone's hairstyle?
var/haircut_duration = 1 MINUTES
// How long does it take to change someone's facial hair style?
var/facial_haircut_duration = 20 SECONDS
/obj/item/scissors/attack(mob/living/attacked_mob, mob/living/user, params)
if(!ishuman(attacked_mob))
return
var/mob/living/carbon/human/target_human = attacked_mob
var/location = user.zone_selected
if(!(location in list(BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD)))
to_chat(user, "<span class='warning'>You stop, look down at what you're currently holding and ponder to yourself, \"This is probably to be used on their hair or their facial hair.\"</span>")
return
if(target_human.hair_style == "Bald" && target_human.facial_hair_style == "Shaved")
to_chat(user, "<span class='warning'>What hair? They have none!</span>")
return
if(user.zone_selected != BODY_ZONE_HEAD)
return ..()
var/selected_part = tgalert(user, "Please select which part of [target_human] you would like to sculpt!", "It's sculpting time!", "Hair", "Facial Hair", "Cancel")
if(!selected_part || selected_part == "Cancel")
return
if(selected_part == "Hair")
if(!target_human.hair_style == "Bald" && target_human.head)
to_chat(user, "<span class='warning'>There is no hair to cut!</span>")
return
var/hair_id = input(user, "Please select what hairstyle you'd like to sculpt!", "Select masterpiece") as null|anything in GLOB.hair_styles_list //dear god help me please
if(!hair_id)
return
if(hair_id == "Bald")
to_chat(target_human, "<span class='warning'>[user] seems to be cutting all your hair off!</span>")
to_chat(user, "<span class='notice'>You begin to masterfully sculpt [target_human]'s hair!</span>")
playsound(target_human, 'hyperstation/sound/salon/haircut.ogg', 100)
if(do_after(user, haircut_duration, target_human))
target_human.hair_style = hair_id
target_human.update_hair()
visible_message("<span class='notice'>[user] successfully cuts [target_human]'s hair!</span>","<span class='notice'>You successfully cut [target_human]'s hair!</span>")
new /obj/effect/decal/cleanable/hair(get_turf(src))
else
if(!target_human.facial_hair_style == "Shaved" && target_human.wear_mask)
to_chat(user, "<span class='warning'>There is no hair to cut!</span>")
return
var/facial_hair_id = input(user, "Please select what facial hairstyle you'd like to sculpt!", "Select masterpiece") as null|anything in GLOB.facial_hair_styles_list
if(!facial_hair_id)
return
if(facial_hair_id == "Shaved")
to_chat(target_human, "<span class='warning'>[user] seems to be cutting all your facial hair off!</span>")
to_chat(user, "<span class='notice'>You begin to masterfully sculpt [target_human]'s facial hair!</span>")
playsound(target_human, 'hyperstation/sound/salon/haircut.ogg', 100)
if(do_after(user, facial_haircut_duration, target_human))
target_human.facial_hair_style = facial_hair_id
target_human.update_hair()
visible_message("<span class='notice'>[user] successfully cuts [target_human]'s facial hair!</span>","<span class='notice'>You successfully cut [target_human]'s facial hair!</span>")
new /obj/effect/decal/cleanable/hair(get_turf(src))
//reagents
/obj/item/reagent_containers/spray/quantum_hair_dye
name = "quantum hair dye"
desc = "Changes hair colour RANDOMLY! Don't forget to read the label!"
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "hairspraywhite"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(5,10)
list_reagents = list(/datum/reagent/hair_dye = 30)
volume = 50
/*
/obj/item/reagent_containers/spray/baldium
name = "baldium spray"
desc = "Causes baldness, exessive use may cause customer disatisfaction."
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "hairremoval"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(5,10)
list_reagents = list(/datum/reagent/baldium = 30)
volume = 50
*/
/obj/item/reagent_containers/spray/barbers_aid
name = "barber's aid"
desc = "Causes rapid hair and facial hair growth!"
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "hairaccelerator"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(5,10)
list_reagents = list(/datum/reagent/barbers_aid = 50)
volume = 50
/obj/item/reagent_containers/spray/super_barbers_aid
name = "super barber's aid"
desc = "Causes SUPER rapid hair and facial hair growth!"
icon = 'hyperstation/icons/obj/barber.dmi'
icon_state = "hairaccelerator"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(5,10)
list_reagents = list(/datum/reagent/concentrated_barbers_aid = 30)
volume = 50
@@ -0,0 +1,32 @@
/obj/machinery/vending/teavendomatic
name = "\improper Tea Vend-O-Matic"
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one, this one is branded for tea and non-alcoholic beverages... Mostly."
icon_state = "boozeomat"
icon_deny = "boozeomat-deny"
products = list(
/obj/item/reagent_containers/food/drinks/mug/tea = 30,
/obj/item/reagent_containers/food/drinks/bottle/wine = 5,
/obj/item/reagent_containers/food/drinks/bottle/cognac = 5,
/obj/item/reagent_containers/food/drinks/bottle/grappa = 5,
/obj/item/reagent_containers/food/drinks/bottle/sake = 5,
/obj/item/reagent_containers/food/drinks/bottle/orangejuice = 8,
/obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 8,
/obj/item/reagent_containers/food/drinks/bottle/limejuice = 8,
/obj/item/reagent_containers/food/drinks/bottle/grenadine = 4,
/obj/item/reagent_containers/food/drinks/bottle/cream = 8,
/obj/item/reagent_containers/food/drinks/soda_cans/tonic = 8,
/obj/item/reagent_containers/food/drinks/soda_cans/cola = 8,
/obj/item/reagent_containers/food/drinks/soda_cans/sodawater = 15,
/obj/item/reagent_containers/food/drinks/drinkingglass = 30,
/obj/item/reagent_containers/food/drinks/ice = 10,
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12,
/obj/item/reagent_containers/food/drinks/flask = 3)
contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12,)
premium = list(/obj/item/reagent_containers/glass/bottle/ethanol = 4,
/obj/item/reagent_containers/food/drinks/bottle/champagne = 5,
/obj/item/reagent_containers/food/drinks/bottle/trappist = 5)
product_slogans = "Keep a clear head and drink on.;It is a quite fine day to sit down and have a drink.;Remember to drink responsibly.;Products are assured to be GMO free."
product_ads = "Stay Radiant.;Remember to balance your intake.;Radiikist brands are not permitted in sectors 34-A through 59-B.;Keep a level head.;Refreshments are to be taken in modicum.;Let the day's stress melt away.;Please, enjoy.;In-service since the sixth Era."
req_access = list(ACCESS_BARISTA)
//refill_canister = /obj/item/vending_refill/teavendomatic
free = TRUE
@@ -0,0 +1,11 @@
/obj/machinery/reagentgrinder/reagentblender
name = "Stand mixer"
desc = "a stationary electric mixer for heavy-duty mixing various foods and other reagents."
icon = 'hyperstation/icons/obj/machinery/reagentblender.dmi'
icon_state = "mixer1"
/obj/machinery/reagentgrinder/reagentblender/update_icon()
if(beaker)
icon_state = "mixer1"
else
icon_state = "mixer0"
+16
View File
@@ -0,0 +1,16 @@
/obj/item/clothing/gloves/lambent
name = "Lambent's sleeves"
desc = "An elegant sleeve worn from the shoulder down. Despite missing anything on the palm and fingers, it seems to cast small hardlight protections over the hands, like a glove."
icon_state = "lambent"
item_state = "lambent"
icon = 'hyperstation/icons/obj/clothing/gloves.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/gloves.dmi'
armor = list("melee" = 50, "bullet" = 50, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 20, "acid" = 60)
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
transfer_prints = FALSE
strip_delay = 40
body_parts_covered = ARMS|HANDS
cold_protection = ARMS|HANDS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
siemens_coefficient = 0
permeability_coefficient = 0.05
+14
View File
@@ -0,0 +1,14 @@
/obj/item/clothing/shoes/lambent
name = "Lambent's heels"
desc = "A sleek pair of leggings with high heels, gilded in golden strips. It seems to have an autobalancing matrix installed."
icon_state = "lambent"
item_state = "lambent"
icon = 'hyperstation/icons/obj/clothing/shoes.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/feet.dmi'
body_parts_covered = LEGS|FEET
cold_protection = LEGS|FEET
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
strip_delay = 70
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
armor = list("melee" = 50, "bullet" = 50, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 20, "acid" = 60)
clothing_flags = NOSLIP
+13
View File
@@ -0,0 +1,13 @@
/obj/item/clothing/suit/lambent
name = "Lambent's coat"
desc = "A regal-esque coat outfitted with inert nanites, waiting to be activated at a moment's notice."
icon = 'hyperstation/icons/obj/clothing/suits.dmi'
//alternate_worn_icon = 'hyperstation/icons/mobs/suits.dmi'
icon_state = "lambent"
item_state = "lambent"
body_parts_covered = CHEST|LEGS
cold_protection = CHEST|GROIN|LEGS|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
strip_delay = 70
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
armor = list("melee" = 50, "bullet" = 50, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 20, "acid" = 60)
+14
View File
@@ -0,0 +1,14 @@
/obj/item/clothing/under/rank/lambent
name = "Lambent's outfitting"
desc = "A Hyperwoven outfitting meant for a Kinaris Lambent. It's gilded colors and ultratech weaving speak highly about status."
icon = 'hyperstation/icons/obj/clothing/uniforms.dmi'
//alternate_worn_icon = 'hyperstation/icons/mobs/uniforms.dmi'
icon_state = "lambent"
item_state = "lambent"
armor = list("melee" = 50, "bullet" = 50, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 20, "acid" = 60)
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
strip_delay = 50
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
//We'll add more alternative outfits here later. For now this'll be how it is!
+7
View File
@@ -0,0 +1,7 @@
/obj/item/clothing/under/barber
name = "barber's uniform"
desc = "A fancy pink shirt paired with light-catching white pants. Yet to be blood- and puke-stained."
icon = 'hyperstation/icons/obj/clothing/uniforms.dmi'
//alternate_worn_icon = 'hyperstation/icons/mobs/uniforms.dmi'
icon_state = "barber"
item_state = "barber"
+3
View File
@@ -160,6 +160,9 @@ obj/item/clothing/neck/stole/black
var/firstpickup = TRUE
var/pickupsound = TRUE
/obj/item/clothing/under/vaultsuit/no_sound
pickupsound = FALSE
/obj/item/clothing/under/vaultsuit/equipped(mob/user, slot)
. = ..()
if(!pickupsound)
+8 -1
View File
@@ -74,4 +74,11 @@
item_state = "enzor"
attack_verb = list("tail bapped", "whomped", "squeaked")
squeak_override = list('sound/effects/mousesqueek.ogg'= 1)
//End
//Arc is amazing and has helped Hyper in terms of spriting a ton. They deserve this
/obj/item/toy/plush/lizardplushie/arctaisia
name = "fat lizard plushie"
desc = "This lizard is a heckin' chonker!"
icon = 'hyperstation/icons/obj/plushes.dmi'
icon_state = "arc"
squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1)
@@ -0,0 +1,7 @@
/obj/structure/beacon
name = "beacon"
desc = "A small marker beacon"
anchored = TRUE
density = FALSE
icon = 'hyperstation/icons/obj/structures/beacons.dmi'
icon_state = "beacon"
+4 -3
View File
@@ -132,13 +132,14 @@ Code:
if(2) //med, can make you cum
to_chat(U, "<span class='love'>You feel intense pleasure surge through your [G.name]</span>")
U.do_jitter_animation()
U.mob_climax_instant()
if (U.getArousalLoss() >= 100 && ishuman(U) && U.has_dna())
U.mob_climax(forced_climax=TRUE)
if(3) //high, makes you stun
to_chat(U, "<span class='userdanger'>You feel overpowering pleasure surge through your [G.name]</span>")
U.Jitter(3)
U.Stun(30)
if (U.can_orgasm())
U.mob_climax_instant()
if (U.getArousalLoss() >= 100 && ishuman(U) && U.has_dna())
U.mob_climax(forced_climax=TRUE)
if(prob(50))
U.emote("moan")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 B

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 B

After

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 600 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 550 B

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 649 B

After

Width:  |  Height:  |  Size: 359 B

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