Merge pull request #1646 from quotefox/revert-1644-fairylights

Revert "Finally, MultiZ Layenia"
This commit is contained in:
Dahlular
2022-07-09 13:53:01 -06:00
committed by GitHub
289 changed files with 130448 additions and 264262 deletions
+4 -2
View File
@@ -5,5 +5,7 @@
"workbench.editorAssociations": {
"*.dmi": "imagePreview.previewEditor"
}
}
},
"files.eol": "\n",
"files.insertFinalNewline": true,
}
File diff suppressed because it is too large Load Diff
+1 -9
View File
@@ -10,16 +10,8 @@
},
"traits":[
{
"Up": 1,
"Gravity":true,
"Baseturf":"/turf/open/chasm/cloud",
"Linkage" : "Cross"
},
{
"Down": -1,
"Gravity":true,
"Baseturf":"/turf/open/transparent/openspace",
"Linkage" : "Cross"
"Baseturf":"/turf/open/chasm/cloud"
}
]
}
File diff suppressed because it is too large Load Diff
+43 -40
View File
@@ -2482,6 +2482,11 @@
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
@@ -3696,20 +3701,6 @@
/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"
@@ -4260,6 +4251,18 @@
},
/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
@@ -4634,6 +4637,10 @@
/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" = (
@@ -9333,12 +9340,17 @@
/turf/open/floor/plasteel/dark,
/area/centcom/ferry)
"iFk" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
/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,
/turf/open/floor/plasteel,
/area/centcom/ferry)
/turf/open/space,
/area/space)
"iFv" = (
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -12927,7 +12939,6 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"mei" = (
@@ -13069,6 +13080,9 @@
/obj/item/storage/pill_bottle/mutarad{
pixel_x = -7
},
/obj/item/razor{
pixel_y = 12
},
/obj/machinery/light/small{
dir = 4;
pixel_x = 10;
@@ -16170,18 +16184,6 @@
},
/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,
@@ -16859,6 +16861,7 @@
"pFm" = (
/obj/structure/table/glass,
/obj/item/surgical_drapes,
/obj/item/razor,
/turf/open/floor/holofloor{
icon_state = "white"
},
@@ -59742,7 +59745,7 @@ fWS
fWS
fWS
fWS
oXv
fWS
fWS
fWS
fWS
@@ -59998,9 +60001,9 @@ cJc
eRA
eRA
fWS
eRA
dzb
eRA
fWS
fWS
fWS
fWS
fWS
fWS
@@ -60255,9 +60258,9 @@ txL
iyB
eRA
fWS
eRA
fWS
iFk
eRA
fWS
fWS
fWS
fWS
@@ -60513,7 +60516,7 @@ hFM
eDP
fWS
eRA
iFk
dUw
eRA
fWS
eDP
@@ -60770,7 +60773,7 @@ uYp
eDP
cQu
eRA
iFk
cnW
eRA
pMV
eDP
+231 -689
View File
@@ -1,750 +1,292 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"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/arrivals{
icon_state = "arrivals52"
},
/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/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/arrivals{
icon_state = "arrivals47"
},
/area/shuttle/arrival)
"KB" = (
"a" = (
/turf/template_noop,
/area/template_noop)
"KN" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals16"
},
"b" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/arrival)
"Lv" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals19"
},
/area/shuttle/arrival)
"My" = (
"c" = (
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/obj/structure/fans/tiny,
/turf/open/floor/plating,
/area/shuttle/arrival)
"Ov" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals7"
},
"d" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/arrival)
"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
},
"e" = (
/obj/structure/table,
/obj/item/storage/firstaid/regular,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"Pr" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals24"
},
"f" = (
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"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" = (
"g" = (
/obj/machinery/computer/arcade,
/obj/machinery/light{
pixel_y = -1
dir = 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
},
/turf/open/floor/mineral/titanium,
/area/shuttle/arrival)
"s" = (
/obj/structure/shuttle/engine/propulsion{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"t" = (
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/turf/open/floor/mineral/titanium,
/area/shuttle/arrival)
"u" = (
/obj/structure/shuttle/engine/propulsion{
dir = 4
},
/obj/docking_port/mobile/arrivals,
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"v" = (
/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"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"TW" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals11"
},
/area/shuttle/arrival)
"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/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals30"
},
/area/shuttle/arrival)
"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" = (
"w" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
dir = 1
},
/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"
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"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"
},
"x" = (
/obj/structure/closet/emcloset,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"Zg" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals36"
},
"y" = (
/obj/machinery/light,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"Zm" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
"z" = (
/obj/item/radio/intercom{
name = "Station Intercom (General)";
pixel_y = -29
},
/obj/machinery/light,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"Zu" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/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_plate"
"A" = (
/obj/structure/shuttle/engine/propulsion/burst/left{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"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"
},
"S" = (
/turf/open/floor/mineral/titanium,
/area/shuttle/arrival)
(1,1,1) = {"
KB
TW
cn
ks
cO
Al
KB
a
b
o
d
d
b
a
"}
(2,1,1) = {"
KB
Wi
YZ
vk
fF
gC
KB
a
b
p
S
v
b
a
"}
(3,1,1) = {"
mi
uC
uf
vk
Sp
cw
ZT
a
b
q
S
w
b
a
"}
(4,1,1) = {"
fS
CA
qS
My
yU
pB
lo
b
b
b
t
b
b
b
"}
(5,1,1) = {"
Sb
gu
Pb
QB
Dm
Zg
eb
b
e
S
S
S
x
b
"}
(6,1,1) = {"
oD
kF
ZZ
mA
Zm
sd
HU
c
f
r
r
r
f
c
"}
(7,1,1) = {"
ph
Zu
JU
mA
Zw
WO
lE
b
g
f
f
f
y
b
"}
(8,1,1) = {"
EA
Zu
JU
mA
Zw
WO
jg
d
h
r
r
r
f
d
"}
(9,1,1) = {"
EA
Zu
JU
mA
Zw
WO
Kb
d
i
f
f
f
f
d
"}
(10,1,1) = {"
nO
Zu
JU
mA
Zw
WO
yl
d
j
r
r
r
f
d
"}
(11,1,1) = {"
oD
qw
ZZ
UU
Zm
QK
HU
d
k
f
f
f
f
d
"}
(12,1,1) = {"
Ov
Il
OQ
rC
gK
sk
OT
b
l
r
r
r
z
b
"}
(13,1,1) = {"
kq
VR
gN
Pr
ze
dO
lt
c
f
S
S
S
f
c
"}
(14,1,1) = {"
pZ
KN
PR
xW
Qd
nC
ov
b
m
m
m
m
m
b
"}
(15,1,1) = {"
WM
Lv
qa
We
de
zV
qz
b
n
s
u
s
A
b
"}
File diff suppressed because it is too large Load Diff
+27 -66
View File
@@ -4,96 +4,57 @@
name = "Escape Pod Airlock"
},
/obj/docking_port/mobile/pod{
dwidth = 1;
height = 4;
port_direction = 2;
width = 3
dwidth = 1;
width = 3;
height = 4
},
/obj/structure/fans/tiny,
/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"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_1)
"B" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod2"
},
/turf/closed/wall/mineral/titanium,
/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{
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"
pixel_x = -32
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_1)
"Q" = (
/turf/closed/wall/mineral/titanium/custom/window/pod{
icon_state = "pod1"
},
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/pod_1)
"U" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/item/storage/pod{
dir = 8;
pixel_x = 30
/obj/item/radio/intercom{
pixel_x = 25
},
/obj/machinery/light{
/obj/item/storage/pod{
pixel_x = -26
},
/obj/machinery/light/small{
dir = 8
},
/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"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_1)
"Z" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod7"
},
/obj/structure/shuttle/engine/propulsion/burst,
/turf/closed/wall/mineral/titanium,
/area/shuttle/pod_1)
(1,1,1) = {"
B
g
W
B
B
Z
"}
(2,1,1) = {"
@@ -103,8 +64,8 @@ U
a
"}
(3,1,1) = {"
J
d
j
f
B
B
B
Z
"}
+139 -617
View File
@@ -1,674 +1,196 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"bx" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry41"
},
/area/shuttle/transport)
"bF" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry17"
},
/area/shuttle/transport)
"cB" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry2"
},
/area/shuttle/transport)
"fd" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry29"
},
/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
},
/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)
"hP" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry32"
},
/area/shuttle/transport)
"iS" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry28"
},
/area/shuttle/transport)
"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" = (
"a" = (
/turf/template_noop,
/area/template_noop)
"oZ" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry24"
},
"b" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"pc" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry36"
},
"c" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"qx" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry8"
},
"d" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/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{
"e" = (
/obj/structure/shuttle/engine/propulsion/left{
dir = 8
},
/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"
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"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 = 3;
height = 13;
id = "ferry";
name = "ferry shuttle";
preferred_direction = 8;
width = 7
},
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/transport)
"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" = (
"f" = (
/obj/structure/shuttle/engine/heater{
dir = 8
},
/obj/structure/window/reinforced/survival_pod{
/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
},
/obj/structure/window/reinforced/survival_pod,
/obj/structure/window/reinforced/survival_pod{
/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
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/flora/crystal/medium/growth{
icon_state = "crystalgrowth2"
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"k" = (
/obj/machinery/light/small,
/turf/open/floor/pod/light,
/area/shuttle/transport)
"l" = (
/obj/machinery/door/airlock/titanium,
/turf/open/floor/pod/light,
/area/shuttle/transport)
"m" = (
/obj/machinery/computer/shuttle/ferry/request{
dir = 8
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"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"
"n" = (
/obj/machinery/door/airlock/titanium,
/obj/docking_port/mobile{
dir = 8;
dwidth = 2;
height = 13;
id = "ferry";
name = "ferry shuttle";
port_direction = 1;
preferred_direction = 4;
width = 5
},
/turf/open/floor/pod/light,
/area/shuttle/transport)
"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{
"o" = (
/obj/structure/shuttle/engine/heater{
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"
/obj/structure/window/reinforced{
dir = 1;
pixel_y = 1
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"MI" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "trim";
name = "trim"
},
/obj/machinery/light{
"p" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/open/floor/plasteel/dark{
dir = 8;
icon_state = "darkfull_plate"
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"MY" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry11"
},
"q" = (
/obj/machinery/light,
/turf/open/floor/pod/light,
/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"
},
"r" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
/turf/open/floor/pod/light,
/area/shuttle/transport)
(1,1,1) = {"
oN
oN
oN
oN
oN
oN
oN
a
a
e
a
a
"}
(2,1,1) = {"
oN
hh
WS
SB
jI
Ax
oN
a
e
j
e
a
"}
(3,1,1) = {"
bx
Rt
VV
CX
IR
Fr
Qx
a
f
i
o
a
"}
(4,1,1) = {"
mw
ZJ
MI
Uu
Tr
bF
Tb
a
b
k
b
a
"}
(5,1,1) = {"
mA
AD
qF
AS
xZ
Vq
of
b
b
l
b
b
"}
(6,1,1) = {"
qE
hP
Sg
OB
LT
IB
cB
c
g
i
p
c
"}
(7,1,1) = {"
pc
iS
hF
OB
Fq
Na
jH
b
g
i
p
b
"}
(8,1,1) = {"
oN
fd
ry
OB
kD
Yi
oN
b
h
i
i
b
"}
(9,1,1) = {"
oN
GK
uw
OB
Mu
oc
oN
d
i
m
i
r
"}
(10,1,1) = {"
oN
GN
qC
OB
Fq
qx
oN
b
i
i
q
b
"}
(11,1,1) = {"
oN
oN
vp
Zj
kh
UV
oN
b
g
i
p
b
"}
(12,1,1) = {"
oN
oN
oZ
gv
zV
TT
oN
c
g
i
p
c
"}
(13,1,1) = {"
oN
oN
vy
wR
yR
MY
oN
b
c
n
c
b
"}
+12 -1
View File
@@ -64,7 +64,7 @@
//DNA - Because fuck you and your magic numbers being all over the codebase.
#define DNA_BLOCK_SIZE 3
#define DNA_UNI_IDENTITY_BLOCKS 14
#define DNA_UNI_IDENTITY_BLOCKS 20
#define DNA_HAIR_COLOR_BLOCK 1
#define DNA_FACIAL_HAIR_COLOR_BLOCK 2
#define DNA_SKIN_TONE_BLOCK 3
@@ -80,6 +80,14 @@
#define DNA_MUTANTMARKING_BLOCK 13
#define DNA_TAUR_BLOCK 14
// hyper edit
#define DNA_COSMETIC_HEAD_BLOCK 15
#define DNA_COSMETIC_CHEST_BLOCK 16
#define DNA_COSMETIC_L_ARM_BLOCK 17
#define DNA_COSMETIC_R_ARM_BLOCK 18
#define DNA_COSMETIC_L_LEG_BLOCK 19
#define DNA_COSMETIC_R_LEG_BLOCK 20
#define DNA_SEQUENCE_LENGTH 4
#define DNA_MUTATION_BLOCKS 8
#define DNA_UNIQUE_ENZYMES_LEN 32
@@ -118,6 +126,9 @@
#define MARKINGS 17
#define WINGCOLOR 18
#define NOMOUTH 19
//organ slots
#define ORGAN_SLOT_BRAIN "brain"
#define ORGAN_SLOT_APPENDIX "appendix"
-4
View File
@@ -67,10 +67,6 @@
#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.
+5
View File
@@ -705,6 +705,11 @@
///(obj/item/insertion_candidate, mob/user, silent) - returns bool
#define COMSIG_TRY_STORAGE_CAN_INSERT "storage_can_equip"
//from base of atom/movable/on_enter_storage(): (datum/component/storage/concrete/master_storage)
#define COMSIG_STORAGE_ENTERED "storage_entered"
//from base of atom/movable/on_exit_storage(): (datum/component/storage/concrete/master_storage)
#define COMSIG_STORAGE_EXITED "storage_exited"
// /datum/component/two_handed signals
///from base of datum/component/two_handed/proc/wield(mob/living/carbon/user): (/mob/user)
+6 -1
View File
@@ -5,4 +5,9 @@
#define BELLY_STRETCH_SIZE 6 // for flavor text
#define BUTT_MIN_SIZE 0
#define BUTT_MAX_SIZE 5
#define BUTT_MAX_SIZE_SELECTABLE 5
#define BUTT_MAX_SIZE 8
#define GENITALS_HIDDEN "hidden"
#define GENITALS_CLOTHES "clothes"
#define GENITALS_VISIBLE "visible"
+2
View File
@@ -60,6 +60,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isbrain(A) (istype(A, /mob/living/brain))
#define isnoncarbon(A) (isliving(A) && !iscarbon(A))
//Carbon mobs
#define iscarbon(A) (istype(A, /mob/living/carbon))
+1 -4
View File
@@ -14,7 +14,6 @@
#define CYBORG (1<<10)
#define JR_OFFICER (1<<11)
#define JR_ENGINEER (1<<12)
#define LAMBENT (1<<13)
#define MEDSCI (1<<1)
@@ -47,8 +46,6 @@
#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
@@ -56,4 +53,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
+2 -1
View File
@@ -7,4 +7,5 @@
#define MARTIALART_MUSHPUNCH "mushroom punch"
#define MARTIALART_KRAVMAGA "krav maga"
#define MARTIALART_CQC "CQC"
#define MARTIALART_PLASMAFIST "plasma fist"
#define MARTIALART_PLASMAFIST "plasma fist"
#define MARTIALART_KNS_CQC "KNS CQC"
+1
View File
@@ -151,6 +151,7 @@
//Nutrition levels for humans
#define NUTRITION_LEVEL_FAT 600
#define NUTRITION_LEVEL_FULL 550
#define NUTRITION_LEVEL_ALMOST_FULL 535
#define NUTRITION_LEVEL_WELL_FED 450
#define NUTRITION_LEVEL_FED 350
#define NUTRITION_LEVEL_HUNGRY 250
+1 -2
View File
@@ -120,7 +120,6 @@
#define VV_HK_PURRBATION "purrbation"
// misc
#define VV_HK_WEAKREF_RESOLVE "weakref_resolve"
#define VV_HK_SPACEVINE_PURGE "spacevine_purge"
// paintings
#define VV_HK_REMOVE_PAINTING "remove_painting"
+10
View File
@@ -0,0 +1,10 @@
GLOBAL_LIST_EMPTY(cosmetic_heads)
GLOBAL_LIST_EMPTY(cosmetic_chests)
GLOBAL_LIST_EMPTY(cosmetic_arms)
GLOBAL_LIST_EMPTY(cosmetic_legs)
/proc/init_cosmetic_parts(datum/cosmetic_part/type, list/global_list)
for(var/subtype in subtypesof(type))
var/datum/cosmetic_part/part = new subtype()
global_list[part.id] = part
return global_list
+8
View File
@@ -54,6 +54,14 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
// hyper: cosmetic parts
init_cosmetic_parts(/datum/cosmetic_part/head, GLOB.cosmetic_heads)
init_cosmetic_parts(/datum/cosmetic_part/chest, GLOB.cosmetic_chests)
init_cosmetic_parts(/datum/cosmetic_part/arms, GLOB.cosmetic_arms)
init_cosmetic_parts(/datum/cosmetic_part/legs, GLOB.cosmetic_legs)
// end cosmetic parts
GLOB.breasts_size_list = list ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
GLOB.genital_fluids_list = list ("Milk", "Water", "Semen", "Femcum", "Honey")
GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", "baloney pony", "schlanger")
+22 -4
View File
@@ -136,15 +136,27 @@
var/datum/sprite_accessory/S = instance
if(!S.ckeys_allowed)
snowflake_mam_snouts_list[S.name] = mspath
var/list/snowflake_ipc_antenna_list = list()
for(var/mspath in GLOB.ipc_antennas_list)
var/datum/sprite_accessory/mam_snouts/instance = GLOB.ipc_antennas_list[mspath]
var/datum/sprite_accessory/antenna/instance = GLOB.ipc_antennas_list[mspath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed)
snowflake_ipc_antenna_list[S.name] = mspath
var/list/snowflake_ipc_screen_list = list()
for(var/mspath in GLOB.ipc_screens_list)
var/datum/sprite_accessory/screen/instance = GLOB.ipc_screens_list[mspath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed)
snowflake_ipc_screen_list[S.name] = mspath
var/color1 = random_short_color()
var/color2 = random_short_color()
var/color3 = random_short_color()
@@ -233,11 +245,17 @@
"womb_cum_mult" = CUM_RATE_MULT,
"womb_efficiency" = CUM_EFFICIENCY,
"womb_fluid" = "femcum",
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
"ipc_antenna" = "None",
"ipc_screen" = snowflake_ipc_screen_list ? pick(snowflake_ipc_screen_list) : "None",
"ipc_antenna" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
"flavor_text" = "",
"silicon_flavor_text" = "",
"ooc_text" = ""))
"ooc_text" = "",
"cosmetic_head" = GLOB.cosmetic_heads["default"],
"cosmetic_chest" = GLOB.cosmetic_chests["default"],
"cosmetic_l_arm" = GLOB.cosmetic_arms["default"],
"cosmetic_r_arm" = GLOB.cosmetic_arms["default"],
"cosmetic_l_leg" = GLOB.cosmetic_legs["default"],
"cosmetic_r_leg" = GLOB.cosmetic_legs["default"]))
/proc/random_hair_style(gender)
switch(gender)
@@ -1,5 +1,4 @@
PROCESSING_SUBSYSTEM_DEF(chemistry)
name = "Chemistry"
wait = 5
flags = SS_KEEP_TIMING
+18
View File
@@ -132,6 +132,12 @@
if(!GLOB.taur_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list)
L[DNA_TAUR_BLOCK] = construct_block(GLOB.taur_list.Find(features["taur"]), GLOB.taur_list.len)
L[DNA_COSMETIC_HEAD_BLOCK] = construct_block(GLOB.cosmetic_heads.Find(features["cosmetic_head"]), GLOB.cosmetic_heads.len)
L[DNA_COSMETIC_CHEST_BLOCK] = construct_block(GLOB.cosmetic_chests.Find(features["cosmetic_chest"]), GLOB.cosmetic_chests.len)
L[DNA_COSMETIC_L_ARM_BLOCK] = construct_block(GLOB.cosmetic_arms.Find(features["cosmetic_l_arm"]), GLOB.cosmetic_arms.len)
L[DNA_COSMETIC_R_ARM_BLOCK] = construct_block(GLOB.cosmetic_arms.Find(features["cosmetic_r_arm"]), GLOB.cosmetic_arms.len)
L[DNA_COSMETIC_L_LEG_BLOCK] = construct_block(GLOB.cosmetic_legs.Find(features["cosmetic_l_leg"]), GLOB.cosmetic_legs.len)
L[DNA_COSMETIC_R_LEG_BLOCK] = construct_block(GLOB.cosmetic_legs.Find(features["cosmetic_r_leg"]), GLOB.cosmetic_legs.len)
for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++)
if(L[i])
@@ -227,6 +233,18 @@
construct_block(GLOB.mam_body_markings_list.Find(features["mam_body_markings"]), GLOB.mam_body_markings_list.len)
if(DNA_TAUR_BLOCK)
construct_block(GLOB.taur_list.Find(features["taur"]), GLOB.taur_list.len)
if(DNA_COSMETIC_HEAD_BLOCK)
construct_block(GLOB.cosmetic_heads.Find(features["cosmetic_head"]), GLOB.cosmetic_heads.len)
if(DNA_COSMETIC_CHEST_BLOCK)
construct_block(GLOB.cosmetic_chests.Find(features["cosmetic_chest"]), GLOB.cosmetic_chests.len)
if(DNA_COSMETIC_L_ARM_BLOCK)
construct_block(GLOB.cosmetic_arms.Find(features["cosmetic_l_arm"]), GLOB.cosmetic_arms.len)
if(DNA_COSMETIC_R_ARM_BLOCK)
construct_block(GLOB.cosmetic_arms.Find(features["cosmetic_r_arm"]), GLOB.cosmetic_arms.len)
if(DNA_COSMETIC_L_LEG_BLOCK)
construct_block(GLOB.cosmetic_legs.Find(features["cosmetic_l_leg"]), GLOB.cosmetic_legs.len)
if(DNA_COSMETIC_R_LEG_BLOCK)
construct_block(GLOB.cosmetic_legs.Find(features["cosmetic_r_leg"]), GLOB.cosmetic_legs.len)
//Please use add_mutation or activate_mutation instead
/datum/dna/proc/force_give(datum/mutation/human/HM)
+39
View File
@@ -0,0 +1,39 @@
/**
* Element for making items change scaling depending on if they appear in the world or in a storage container.
*
* For context, overworld items are anything on a turf, storage scaling includes anywhere that the item is used as a UI element.
* Scaling should affect the target's icon and any affecting overlays
*/
/datum/element/item_scaling
element_flags = ELEMENT_BESPOKE
id_arg_index = 2
/// Value to scale the target by when it's in the overworld (on a turf)
var/overworld_scaling = 1
/// Value to scale the target by when it's in a storage component or inventory slot
var/storage_scaling = 1
/datum/element/item_scaling/Attach(datum/target, overworld_scaling = 1, storage_scaling = 1)
. = ..()
if(!isatom(target))
return ELEMENT_INCOMPATIBLE
src.overworld_scaling = overworld_scaling
src.storage_scaling = storage_scaling
scale(target, overworld_scaling)
RegisterSignal(target, list(COMSIG_ITEM_DROPPED, COMSIG_STORAGE_EXITED), .proc/scale_overworld)
RegisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_STORAGE_ENTERED), .proc/scale_storage)
//scale :)
/datum/element/item_scaling/proc/scale(atom/source, scaling)
var/matrix/M = matrix()
source.transform = M.Scale(scaling)
/// Signal handler for when the item is dropped
/datum/element/item_scaling/proc/scale_overworld(datum/source)
scale(source, overworld_scaling)
/// Signal handler for when the item is picked up
/datum/element/item_scaling/proc/scale_storage(datum/source)
scale(source, storage_scaling)
+143
View File
@@ -0,0 +1,143 @@
#define KNS_KICK_COMBO "DG"
#define KNS_RESTRAIN_COMBO "GG"
/datum/martial_art/kinaris
name = "KNS CQC"
id = MARTIALART_KNS_CQC
help_verb = /mob/living/carbon/human/proc/KNS_CQC_help
block_chance = 75
/datum/martial_art/kinaris/proc/drop_restraining()
restraining = FALSE
/datum/martial_art/kinaris/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
if(findtext(streak,KNS_KICK_COMBO))
streak = ""
Kick(A,D)
return TRUE
if(findtext(streak,KNS_RESTRAIN_COMBO))
streak = ""
Restrain(A,D)
return TRUE
return FALSE
/datum/martial_art/kinaris/proc/Kick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
if(!D.stat || !D.IsKnockdown())
D.visible_message("<span class='warning'>[A] kicks [D] back!</span>", \
"<span class='userdanger'>[A] kicks you back!</span>")
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
var/atom/throw_target = get_edge_target_turf(D, A.dir)
D.throw_at(throw_target, 1, 14, A)
D.apply_damage(10, BRUTE)
log_combat(A, D, "kicked (KNS CQC)")
if(D.IsKnockdown() && !D.stat)
D.visible_message("<span class='warning'>[A] kicks [D]'s head, knocking [D.p_them()] out!</span>", \
"<span class='userdanger'>[A] kicks your head, knocking you out!</span>")
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
D.SetSleeping(300)
D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150)
return TRUE
/datum/martial_art/kinaris/proc/Restrain(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(restraining)
return
if(!can_use(A))
return FALSE
if(!D.stat)
D.visible_message("<span class='warning'>[A] locks [D] into a restraining position!</span>", \
"<span class='userdanger'>[A] locks you into a restraining position!</span>")
D.adjustStaminaLoss(20)
D.Stun(100)
restraining = TRUE
addtimer(CALLBACK(src, .proc/drop_restraining), 50, TIMER_UNIQUE)
return TRUE
/datum/martial_art/kinaris/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
add_to_streak("G",D)
if(check_streak(A,D))
return TRUE
if(A.grab_state >= GRAB_AGGRESSIVE)
D.grabbedby(A, 1)
else
A.start_pulling(D, 1)
if(A.pulling)
D.stop_pulling()
log_combat(A, D, "grabbed", addition="aggressively")
A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab
return TRUE
/datum/martial_art/kinaris/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
add_to_streak("D",D)
var/obj/item/I = null
if(check_streak(A,D))
return TRUE
if(prob(65))
if(!D.stat || !D.IsKnockdown() || !restraining)
I = D.get_active_held_item()
D.visible_message("<span class='warning'>[A] strikes [D]'s jaw with their hand!</span>", \
"<span class='userdanger'>[A] strikes your jaw, disorienting you!</span>")
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
if(I && D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I)
D.Jitter(2)
D.apply_damage(5, BRUTE)
else
D.visible_message("<span class='danger'>[A] attempted to disarm [D]!</span>", \
"<span class='userdanger'>[A] attempted to disarm [D]!</span>")
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
log_combat(A, D, "disarmed (KNS CQC)", "[I ? " grabbing \the [I]" : ""]")
if(restraining && A.pulling == D)
D.visible_message("<span class='danger'>[A] puts [D] into a chokehold!</span>", \
"<span class='userdanger'>[A] puts you into a chokehold!</span>")
D.SetSleeping(400)
restraining = FALSE
if(A.grab_state < GRAB_NECK)
A.grab_state = GRAB_NECK
else
restraining = FALSE
return FALSE
return TRUE
/datum/martial_art/kinaris/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
log_combat(A, D, "attacked (KNS CQC)")
A.do_attack_animation(D)
var/picked_hit_type = pick("CQC'd", "Big Bossed")
var/bonus_damage = 13
if(D.IsKnockdown() || D.resting || D.lying)
bonus_damage += 5
picked_hit_type = "stomps on"
D.apply_damage(bonus_damage, PAIN)
if(picked_hit_type == "kicks" || picked_hit_type == "stomps on")
playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1)
else
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
D.visible_message("<span class='danger'>[A] [picked_hit_type] [D]!</span>", \
"<span class='userdanger'>[A] [picked_hit_type] you!</span>")
log_combat(A, D, "[picked_hit_type] (KNS CQC)")
if(A.resting && !D.stat && !D.IsKnockdown())
D.visible_message("<span class='warning'>[A] leg sweeps [D]!", \
"<span class='userdanger'>[A] leg sweeps you!</span>")
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
D.apply_damage(10, PAIN)
D.Knockdown(60)
log_combat(A, D, "sweeped (KNS CQC)")
return TRUE
/mob/living/carbon/human/proc/KNS_CQC_help()
set name = "Remember The Basics"
set desc = "You try to remember some of the basics of training."
set category = "KNS CQC"
to_chat(usr, "<b><i>You try to remember some of your training, undertaken when entering Kinaris employ.</i></b>")
to_chat(usr, "<span class='notice'>CQC Kick</span>: Disarm Grab. Knocks opponent away. Knocks out stunned or knocked down opponents.")
to_chat(usr, "<span class='notice'>Restrain</span>: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a choke hold.")
+70 -2
View File
@@ -1,3 +1,7 @@
/*
* Creates a weakref to the given input.
* See /datum/weakref's documentation for more information.
*/
/proc/WEAKREF(datum/input)
if(istype(input) && !QDELETED(input))
if(istype(input, /datum/weakref))
@@ -10,16 +14,80 @@
/datum/proc/create_weakref() //Forced creation for admin proccalls
return WEAKREF(src)
/**
* A weakref holds a non-owning reference to a datum.
* The datum can be referenced again using `resolve()`.
*
* To figure out why this is important, you must understand how deletion in
* BYOND works.
*
* Imagine a datum as a TV in a living room. When one person enters to watch
* TV, they turn it on. Others can come into the room and watch the TV.
* When the last person leaves the room, they turn off the TV because it's
* no longer being used.
*
* A datum being deleted tells everyone who's watching the TV to stop.
* If everyone leaves properly (AKA cleaning up their references), then the
* last person will turn off the TV, and everything is well.
* However, if someone is resistant (holds a hard reference after deletion),
* then someone has to walk in, drag them away, and turn off the TV forecefully.
* This process is very slow, and it's known as hard deletion.
*
* This is where weak references come in. Weak references don't count as someone
* watching the TV. Thus, when what it's referencing is destroyed, it will
* hopefully clean up properly, and limit hard deletions.
*
* A common use case for weak references is holding onto what created itself.
* For example, if a machine wanted to know what its last user was, it might
* create a `var/mob/living/last_user`. However, this is a strong reference to
* the mob, and thus will force a hard deletion when that mob is deleted.
* It is often better in this case to instead create a weakref to the user,
* meaning this type definition becomes `var/datum/weakref/last_user`.
*
* A good rule of thumb is that you should hold strong references to things
* that you *own*. For example, a dog holding a chew toy would be the owner
* of that chew toy, and thus a `var/obj/item/chew_toy` reference is fine
* (as long as it is cleaned up properly).
* However, a chew toy does not own its dog, so a `var/mob/living/dog/owner`
* might be inferior to a weakref.
* This is also a good rule of thumb to avoid circular references, such as the
* chew toy example. A circular reference that doesn't clean itself up properly
* will always hard delete.
*/
/datum/weakref
var/reference
/datum/weakref/New(datum/thing)
reference = REF(thing)
/datum/weakref/Destroy()
return QDEL_HINT_LETMELIVE //Let BYOND autoGC thiswhen nothing is using it anymore.
/datum/weakref/Destroy(force)
var/datum/target = resolve()
qdel(target)
if(!force)
return QDEL_HINT_LETMELIVE //Let BYOND autoGC thiswhen nothing is using it anymore.
target?.weak_reference = null
return ..()
/**
* Retrieves the datum that this weakref is referencing.
*
* This will return `null` if the datum was deleted. This MUST be respected.
*/
/datum/weakref/proc/resolve()
var/datum/D = locate(reference)
return (!QDELETED(D) && D.weak_reference == src) ? D : null
/datum/weakref/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION(VV_HK_WEAKREF_RESOLVE, "Go to reference")
/datum/weakref/vv_do_topic(list/href_list)
. = ..()
if(href_list[VV_HK_WEAKREF_RESOLVE])
if(!check_rights(NONE))
return
var/datum/R = resolve()
if(R)
usr.client.debug_variables(R)
+6 -24
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 = "lounge"
icon_state = "yellow"
/area/crew_quarters/fitness
name = "Fitness Room"
@@ -495,10 +495,6 @@ 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"
@@ -1376,7 +1372,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Xenoarchaeology Medical"
icon_state = "xenomed"
//Pool and Hyper additions
//Pool
/area/crew_quarters/fitness/pool
name = "Pool Area"
icon_state = "pool"
@@ -1388,25 +1384,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/arcade
name = "Arcade"
icon_state = "arcade"
icon_state = "yellow"
/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"
/area/artatrium
name = "Art Atrium"
icon_state = "library"
//Diner
/area/diner
-6
View File
@@ -10,12 +10,6 @@ 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"
+2 -2
View File
@@ -699,11 +699,11 @@
// called when this atom is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
/atom/movable/proc/on_exit_storage(datum/component/storage/concrete/S)
return
SEND_SIGNAL(src, COMSIG_STORAGE_EXITED, S)
// called when this atom is added into a storage item, which is passed on as S. The loc variable is already set to the storage item.
/atom/movable/proc/on_enter_storage(datum/component/storage/concrete/S)
return
SEND_SIGNAL(src, COMSIG_STORAGE_ENTERED, S)
/atom/movable/proc/get_spacemove_backup()
var/atom/movable/dense_object_backup
@@ -102,13 +102,6 @@ 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
+1 -7
View File
@@ -11,9 +11,8 @@
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_alt"
icon_state = "open"
density = FALSE
opacity = 0
@@ -69,8 +68,3 @@
/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
+17 -5
View File
@@ -76,11 +76,23 @@
if(!calibrated && iscarbon(M) && prob(30 - ((accuracy) * 10))) //oh dear a problem
var/mob/living/carbon/C = M
if(C.dna?.species && C.dna.species.id != "fly" && !HAS_TRAIT(C, TRAIT_RADIMMUNE))
to_chat(C, "<span class='italics'>You hear a buzzing in your ears.</span>")
C.set_species(/datum/species/fly)
log_game("[C] ([key_name(C)]) was turned into a fly person")
C.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0)
//Rework to teleporter mishap
log_game("[C] ([key_name(C)]) had a teleporter mishap")
to_chat(C, "<span class='italics'>You feel the world contort and twist....</span>") //idk a good line
C.adjustCloneLoss( rand(40,75) )
C.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0) //recycling this for some extra spice
//Oh yea, random limb removal, adjust/comment out if too harsh a punishment
for( var/obj/item/bodypart/BP in C.bodyparts )
if( BP.body_part != CHEST ) //I am not ready to find out what happens if your chest is missing
if(prob(50))
BP.dismember()
calibrated = FALSE
return
-40
View File
@@ -408,21 +408,6 @@
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."
@@ -609,29 +594,4 @@
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,24 +9,4 @@
/obj/effect/turf_decal/weather/snow/corner
name = "snow corner piece"
icon = 'icons/turf/snow.dmi'
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"
icon_state = "snow_corner"
+2 -3
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,5 +216,4 @@
else
..()
else
..()
*/
..()
@@ -86,11 +86,11 @@
to_chat(user, "<span class='warning'>Your [src] is already occupied.</span>")
return
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>",
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>",
"<span class='notice'>You start placing [target] into your [src]...</span>")
if(!patient && iscarbon(target) && !target.buckled && do_after (user, 100, target = target))
if(!in_range(src, target))
if(!in_range(src, target))
return
if(patient)
return
@@ -217,7 +217,7 @@
data["occupant"]["fireLoss"] = mob_occupant.getFireLoss()
data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss()
data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN)
if(mob_occupant.reagents.reagent_list.len)
for(var/datum/reagent/R in mob_occupant.reagents.reagent_list)
chemical_list += list(list("name" = R.name, "volume" = R.volume))
@@ -393,7 +393,7 @@
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
else if(H in contents)
H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
UpdateGut(hound)
if(cleaning)
addtimer(CALLBACK(src, .proc/clean_cycle, hound), 50)
@@ -515,7 +515,7 @@
trashman.reset_perspective(src)
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
UpdateGut(hound)
@@ -523,4 +523,11 @@
var/current_belly = ..()
if(length(contents) > 11)
current_belly = BORGBELLY_RED
return current_belly
return current_belly
/obj/item/dogborg/sleeper/compactor/ore//identical to janihound for moment
name = "ore processor"
desc = "A mounted compactor unit with fuel processor."
icon = 'icons/mob/dogborg.dmi'
icon_state = "compactorb"//needs its own icon
@@ -67,6 +67,12 @@
syndie = TRUE
if(keyslot.independent)
independent = TRUE
//Skyrat edit start
if(extra_channels)
for(var/ch_name in extra_channels)
if(!(ch_name in channels))
channels[ch_name] = extra_channels[ch_name]
//Skyrat edit end
for(var/ch_name in channels)
secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name])
+1 -16
View File
@@ -4,8 +4,6 @@
icon = 'icons/obj/dyespray.dmi'
icon_state = "dyespray"
var/uses = 10 //SKYRAT EDIT ADDITION
/obj/item/dyespray/attack_self(mob/user)
dye(user)
@@ -23,10 +21,6 @@
/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
@@ -48,13 +42,4 @@
if(!do_after(usr, 30, target = human_target))
return
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
human_target.update_hair()
//SKYRAT EDIT ADDITION
uses--
/obj/item/dyespray/examine(mob/user)
. = ..()
. += "It has [uses] uses left."
//SKYRAT EDIT END
human_target.update_hair()
@@ -0,0 +1,38 @@
/obj/item/implant/kinaris
name = "KNS ENH implant"
desc = "Enables enhanced reflexes, permitting the user to deploy specialised training."
icon = 'icons/obj/implants.dmi'
icon_state ="adrenal"
activated = 1
var/datum/martial_art/kinaris/style = new
/obj/item/implant/kinaris/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> KNS ENH Implant<BR>
<b>Life:</b> Roughly twelve hours after death of host<BR>
<b>Implant Details:</b> <BR>
<b>Function:</b> Forces certain sections of the brain and body into a state of higher function, permitting the user to deploy specialised training."}
return dat
/obj/item/implant/kinaris/activate()
. = ..()
var/mob/living/carbon/human/H = imp_in
if(!ishuman(H))
return
if(!H.mind)
return
if(H.mind.has_martialart(MARTIALART_KNS_CQC))
style.remove(H)
to_chat(H, "<span class='notice'>You disable your reflex implant.</span>")
else
style.teach(H,1)
to_chat(H, "<span class='notice'>You feel your body burn briefly as you enable your reflex implant.</span>")
/obj/item/implanter/kinaris
name = "implanter (KNS ENH)"
imp_type = /obj/item/implant/kinaris
/obj/item/implantcase/kinaris
name = "implant case - 'KNS ENH'"
desc = "A glass case containing an implant that can enhance the body of the user."
imp_type = /obj/item/implant/kinaris
-44
View File
@@ -657,34 +657,6 @@
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."
@@ -794,15 +766,6 @@
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."
@@ -985,13 +948,6 @@
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."
@@ -150,7 +150,7 @@
desc = "A diamond drill replacement for the mining module's standard drill."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/robot_module/miner
module_type = list(/obj/item/robot_module/miner, /obj/item/robot_module/orepup)
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -182,7 +182,7 @@
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/robot_module/miner
module_type = list(/obj/item/robot_module/miner, /obj/item/robot_module/orepup)
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
. = ..()
@@ -285,7 +285,7 @@
icon_state = "ash_plating"
resistance_flags = LAVA_PROOF | FIRE_PROOF
require_module = 1
module_type = /obj/item/robot_module/miner
module_type = list(/obj/item/robot_module/miner, /obj/item/robot_module/orepup)
/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -417,7 +417,7 @@
module_type = list(
/obj/item/robot_module/medical,
/obj/item/robot_module/medihound)
var/list/additional_reagents = list()
/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr)
@@ -49,13 +49,6 @@ 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),
@@ -481,6 +474,11 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki), \
new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza), \
new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry), \
new /datum/stack_recipe("donk-pockets taco box", /obj/item/storage/box/donkpockets/donkpockettaco), \
new /datum/stack_recipe("donk-pockets plasma box", /obj/item/storage/box/donkpockets/donkpocketplasma), \
new /datum/stack_recipe("donk-pockets breakfast box", /obj/item/storage/box/donkpockets/donkpocketbreakfast), \
new /datum/stack_recipe("donk-pockets moth box", /obj/item/storage/box/donkpockets/donkpocketmoth), \
new /datum/stack_recipe("donk-pockets vegan box", /obj/item/storage/box/donkpockets/donkpocketvegan), \
new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk), \
new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes),
null, \
+1 -53
View File
@@ -177,24 +177,6 @@
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
*/
@@ -213,23 +195,6 @@
/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."
@@ -375,23 +340,6 @@
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."
@@ -417,7 +365,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
+31 -1
View File
@@ -437,6 +437,36 @@
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/spicy
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/spicy
/obj/item/storage/box/donkpockets/donkpockettaco //Property of Angel's Donk Co. subsidary Not'cho Corp. "They're mine! Not yo's."
name = "box of taco-flavoured donk-pockets"
icon_state = "donkpocketboxtaco"
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/taco
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
/obj/item/storage/box/donkpockets/donkpocketplasma
name = "box of toxic-flavoured donk-pockets"
icon_state = "donkpocketboxplasma"
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/plasma
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
/obj/item/storage/box/donkpockets/donkpocketbreakfast
name = "box of breakfast-flavoured donk-pockets"
icon_state = "donkpocketboxbreakfast"
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/breakfast
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
/obj/item/storage/box/donkpockets/donkpocketmoth
name = "box of cloth-flavoured donk-pockets"
icon_state = "donkpocketboxmoth"
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/moth
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
/obj/item/storage/box/donkpockets/donkpocketvegan
name = "box of veggie-flavoured donk-pockets"
icon_state = "donkpocketboxvegan"
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/vegan
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
/obj/item/storage/box/donkpockets/donkpocketteriyaki
name = "box of teriyaki-flavoured donk-pockets"
icon_state = "donkpocketboxteriyaki"
@@ -1325,4 +1355,4 @@
/obj/item/storage/box/marshmallow/PopulateContents()
for (var/i in 1 to 5)
new /obj/item/reagent_containers/food/snacks/marshmallow(src)
new /obj/item/reagent_containers/food/snacks/marshmallow(src)
@@ -299,7 +299,6 @@
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)
@@ -316,7 +315,6 @@
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)
+1 -2
View File
@@ -14,7 +14,6 @@
if(icon_state == "mirror_broke" && !broken)
obj_break(null, mapload)
/* SKYRAT EDIT REMOVAL
/obj/structure/mirror/attack_hand(mob/user)
. = ..()
if(.)
@@ -45,7 +44,7 @@
H.hair_style = new_style
H.update_hair()
*/
/obj/structure/mirror/examine_status(mob/user)
if(broken)
return // no message spam
+1 -6
View File
@@ -133,9 +133,4 @@
/obj/structure/sign/logo/kinaris
name = "kinaris logo"
desc = "The Kinaris corprate logo. Radiant."
icon_state = "kinaris_sign1"
/obj/structure/sign/logo/cpr
name = "Challenge Pissing Room"
desc = "The league of challenge pissing"
icon_state = "CPR_sign1"
icon_state = "kinaris_sign1"
-1
View File
@@ -129,7 +129,6 @@
planetary_atmos = TRUE
initial_gas_mix = FROZEN_ATMOS
density = FALSE
vis_flags = 8
/turf/open/chasm/cloud/Initialize()
. = ..()
@@ -85,16 +85,10 @@
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
. = ..()
name = proper_name
if(prob(floor_variance))
icon_state = "[environment_type][rand(0,quantity_of_available_tiles)]"
update_icon()
/turf/open/floor/grass/attackby(obj/item/C, mob/user, params)
if((C.tool_behaviour == TOOL_SHOVEL) && params)
@@ -123,8 +123,9 @@
planetary_atmos = TRUE
baseturfs = /turf/open/lava/smooth/lava_land_surface
/turf/open/floor/plating/asteroid/spacehermit
initial_gas_mix = OPENTURF_DEFAULT_ATMOS
baseturfs = /turf/open/floor/plating/asteroid/spacehermit
/turf/open/floor/plating/asteroid/airless
initial_gas_mix = AIRLESS_ATMOS
@@ -386,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 = 5
quantity_of_available_tiles = 4
//light_range = 2
//light_power = 0.15
//light_color = LIGHT_COLOR_WHITE
+16
View File
@@ -221,6 +221,22 @@
/turf/closed/mineral/iron/volcanic = 95)
//For spacehermit stuff
/turf/closed/mineral/random/spacehermit
icon_state = "rock"
turf_type = /turf/open/floor/plating/asteroid/spacehermit
baseturfs = /turf/open/floor/plating/asteroid/spacehermit
initial_gas_mix = OPENTURF_DEFAULT_ATMOS
defer_change = 1
mineralChance = 6
mineralSpawnChanceList = list(
/turf/closed/mineral/uranium = 2, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 4, /turf/closed/mineral/titanium = 4,
/turf/closed/mineral/silver = 6, /turf/closed/mineral/plasma = 15, /turf/closed/mineral/iron = 40,
/turf/closed/mineral/gibtonite = 2, /turf/closed/mineral/bscrystal = 1)
//end of spacehermit stuff
/turf/closed/mineral/iron
mineralType = /obj/item/stack/ore/iron
+3
View File
@@ -58,12 +58,15 @@
reward = 3000
wanted_types = list(/obj/item/organ/tail/cat)
/*
/datum/bounty/item/medical/blood
name = "Generic Blood"
description = "The Kinaris annual blood drive is back up to full speed, following the garlic incident. Good blood in good volumes accepted for Credit returns."
reward = 3500
required_count = 600
wanted_types = list(/datum/reagent/blood)
*/
/* If anyone wants to try and fix/work, go for it
/datum/bounty/item/medical/medibot // Mob so this dosn't work yet*
+12 -1
View File
@@ -105,7 +105,6 @@ datum/bounty/reagent/complex_drink/New()
/datum/reagent/consumable/ethanol/hearty_punch,\
/datum/reagent/consumable/ethanol/manhattan_proj,\
/datum/reagent/consumable/ethanol/narsour,\
/datum/reagent/consumable/ethanol/neurotoxin,\
/datum/reagent/consumable/ethanol/patron,\
/datum/reagent/consumable/ethanol/quadruple_sec,\
/datum/reagent/consumable/ethanol/quintuple_sec,\
@@ -170,3 +169,15 @@ datum/bounty/reagent/chemical/New()
description = "CentCom is in desperate need of the chemical [name]. Ship a container of it to be rewarded."
reward += rand(0, 4) * 500
/datum/bounty/reagent/blood
name = "Blood Drive"
reward = 3500
required_volume = 600
/datum/bounty/reagent/blood/New()
var/reagent_type = /datum/reagent/blood
wanted_reagent = new reagent_type
name = wanted_reagent.name
description = "The Kinaris annual blood drive is back up to full speed, following the garlic incident. Good blood in good volumes accepted for Credit returns."
reward += rand(0, 2) * 300
+5 -2
View File
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(bounties_list)
// Returns a new bounty of random type, but does not add it to GLOB.bounties_list.
/proc/random_bounty()
switch(rand(1, 14))
switch(rand(1, 15))
if(1)
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
return new subtype
@@ -118,6 +118,8 @@ GLOBAL_LIST_EMPTY(bounties_list)
if(14)
var/subtype = pick(subtypesof(/datum/bounty/lewd))
return new subtype
if(15)
return new /datum/bounty/reagent/blood
// Called lazily at startup to populate GLOB.bounties_list with random bounties.
/proc/setup_bounties()
@@ -144,7 +146,8 @@ GLOBAL_LIST_EMPTY(bounties_list)
/********************************Strict Type Gens********************************/
var/list/easy_add_list_strict_types = list(/datum/bounty/reagent/simple_drink = 1,
/datum/bounty/reagent/complex_drink = 1,
/datum/bounty/reagent/chemical = 1)
/datum/bounty/reagent/chemical = 1,
/datum/bounty/reagent/blood = 1)
for(var/the_strict_type in easy_add_list_strict_types)
for(var/i in 1 to easy_add_list_strict_types[the_strict_type])
+142 -14
View File
@@ -108,7 +108,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/roleplayroles = FALSE //for the roleplay roles
var/importantroles = FALSE //for things that define as important.
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/list/features = list("mcolor" = "FFF",
"tail_lizard" = "Smooth",
@@ -196,7 +195,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"flavor_text" = "",
"silicon_flavor_text" = "",
"ooc_text" = "",
"front_genitals_over_hair" = FALSE
"front_genitals_over_hair" = FALSE,
"cosmetic_head" = /datum/cosmetic_part/head/default,
"cosmetic_chest" = /datum/cosmetic_part/chest/default,
"cosmetic_l_arm" = /datum/cosmetic_part/arms/default,
"cosmetic_r_arm" = /datum/cosmetic_part/arms/default,
"cosmetic_l_leg" = /datum/cosmetic_part/legs/default,
"cosmetic_r_leg" = /datum/cosmetic_part/legs/default,
"cosmetic_markings" = FALSE
)
/// Security record note section
@@ -271,7 +277,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/datum/preferences/New(client/C)
parent = C
clientfps = world.fps*2
for(var/custom_name_id in GLOB.preferences_custom_names)
custom_names[custom_name_id] = get_default_name(custom_name_id)
@@ -439,7 +444,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Custom Species Name:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=custom_species;task=input'>[custom_species ? custom_species : "None"]</a><BR>"
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=all;task=random'>Random Body</A><BR>"
dat += "<b>Always Random Body:</b><a href='?_src_=prefs;preference=all'>[be_random_body ? "Yes" : "No"]</A><BR>"
dat += "<br><b>Cycle background:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=cycle_bg;task=input'>[bgstate]</a><BR>"
dat += "<br><b>Select background:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=select_bg;task=input'>[bgstate]</a><BR>"
dat += "<b>Render front genitals over hair:</b><a href='?_src_=prefs;task=front_genitals_over_hair'>[features["front_genitals_over_hair"] ? "Yes" : "No"]</A><BR>"
var/use_skintones = pref_species.use_skintones
@@ -824,8 +829,55 @@ GLOBAL_LIST_EMPTY(preferences_datums)
mutant_category = 0
dat += "</tr></table>"
dat += "</td>"
// HYPER EDIT: Cosmetic body parts
var/datum/cosmetic_part/cosmetic_head = features["cosmetic_head"]
var/datum/cosmetic_part/cosmetic_chest = features["cosmetic_chest"]
var/datum/cosmetic_part/cosmetic_arms = features["cosmetic_l_arm"]
var/datum/cosmetic_part/cosmetic_legs = features["cosmetic_l_leg"]
dat += "<div style='width:100%;display:block;'>"
dat += "<h2>Cosmetic Parts</h2>"
dat += "<b>Use markings on cosmetic parts?</b> "
dat += "<a href='?_src_=prefs;preference=cosmetic_markings'>[features["cosmetic_markings"] ? "Yes" : "No"]</a>"
dat += "<div style='display:flex; align-items:stretch; justify-content:space-around;'>"
dat += "<div style='flex: 1 1 0;'>"
dat += "<h3 style='text-align:center;'>Head</h3>"
dat += "<a style='display:block; width:100px'"
dat += "href='?_src_=prefs;preference=cosmetic_head;task=input'>"
dat += cosmetic_head.name
dat += "</a>"
dat += "</div>"
dat += "<div style='flex: 1 1 0;'>"
dat += "<h3 style='text-align:center;'>Chest</h3>"
dat += "<a style='display:block; width:100px'"
dat += "href='?_src_=prefs;preference=cosmetic_chest;task=input'>"
dat += cosmetic_chest.name
dat += "</a>"
dat += "</div>"
dat += "<div style='flex: 1 1 0;'>"
dat += "<h3 style='text-align:center;'>Arms</h3>"
dat += "<a style='display:block; width:100px'"
dat += "href='?_src_=prefs;preference=cosmetic_arms;task=input'>"
dat += cosmetic_arms.name
dat += "</a>"
dat += "</div>"
dat += "<div style='flex: 1 1 0;'>"
dat += "<h3 style='text-align:center;'>Legs</h3>"
dat += "<a style='display:block; width:100px'"
dat += "href='?_src_=prefs;preference=cosmetic_legs;task=input'>"
dat += cosmetic_legs.name
dat += "</a>"
dat += "</div>"
dat += "</div>"
dat += "</div>"
// End hyper edit
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<h2>Clothing & Equipment</h2>"
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
@@ -1284,14 +1336,9 @@ 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>"
@@ -1903,8 +1950,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
grad_style = previous_list_item(grad_style, GLOB.hair_gradients_list)
if("cycle_bg")
bgstate = next_list_item(bgstate, bgstate_options)
if("select_bg")
var/new_bg = input(user, "Select a background:", "Character Preference") as null|anything in bgstate_options
if(new_bg)
bgstate = new_bg
if("underwear")
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list
@@ -2293,6 +2342,81 @@ GLOBAL_LIST_EMPTY(preferences_datums)
new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in GLOB.xeno_dorsal_list
if(new_dors)
features["xenodorsal"] = new_dors
// HYPER EDIT: Cosmetic body parts
if("cosmetic_head")
var/list/selectable_parts = list()
for(var/path in GLOB.cosmetic_heads)
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_heads[path]
var/list/supported_species = possible_part.supported_species
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
continue
selectable_parts[possible_part.name] = path
if(!selectable_parts.len)
to_chat(user, "<span class='warning'>There are no valid alt heads for this species!</span>")
var/new_cosmetic_part
var/question = "Choose your character's alt head style:"
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
if(new_cosmetic_part)
features["cosmetic_head"] = GLOB.cosmetic_heads[selectable_parts[new_cosmetic_part]]
update_preview_icon()
if("cosmetic_chest")
var/list/selectable_parts = list()
for(var/path in GLOB.cosmetic_chests)
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_chests[path]
var/list/supported_species = possible_part.supported_species
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
continue
selectable_parts[possible_part.name] = path
if(!selectable_parts.len)
to_chat(user, "<span class='warning'>There are no valid alt chests for this species!</span>")
var/new_cosmetic_part
var/question = "Choose your character's alt chest style:"
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
if(new_cosmetic_part)
features["cosmetic_chest"] = GLOB.cosmetic_chests[selectable_parts[new_cosmetic_part]]
update_preview_icon()
// currently symmetrical
if("cosmetic_arms")
var/list/selectable_parts = list()
for(var/path in GLOB.cosmetic_arms)
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_arms[path]
var/list/supported_species = possible_part.supported_species
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
continue
selectable_parts[possible_part.name] = path
if(!selectable_parts.len)
to_chat(user, "<span class='warning'>There are no valid alt arms for this species!</span>")
var/new_cosmetic_part
var/question = "Choose your character's alt arms style:"
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
if(new_cosmetic_part)
features["cosmetic_l_arm"] = GLOB.cosmetic_arms[selectable_parts[new_cosmetic_part]]
features["cosmetic_r_arm"] = GLOB.cosmetic_arms[selectable_parts[new_cosmetic_part]]
update_preview_icon()
if("cosmetic_legs")
var/list/selectable_parts = list()
for(var/path in GLOB.cosmetic_legs)
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_legs[path]
var/list/supported_species = possible_part.supported_species
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
continue
selectable_parts[possible_part.name] = path
if(!selectable_parts.len)
to_chat(user, "<span class='warning'>There are no valid alt legs for this species!</span>")
var/new_cosmetic_part
var/question = "Choose your character's alt legs style:"
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
if(new_cosmetic_part)
features["cosmetic_l_leg"] = GLOB.cosmetic_legs[selectable_parts[new_cosmetic_part]]
features["cosmetic_r_leg"] = GLOB.cosmetic_legs[selectable_parts[new_cosmetic_part]]
update_preview_icon()
// End hyper edit
//Genital code
if("cock_color")
var/new_cockcolor = input(user, "Penis color:", "Character Preference") as color|null
@@ -2440,9 +2564,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["belly_size"] = clamp(new_bellysize, BELLY_MIN_SIZE, BELLY_MAX_SIZE)
if("butt_size")
var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE])", "Character Preference") as num|null
var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE_SELECTABLE])", "Character Preference") as num|null
if(new_buttsize != null)
features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE)
features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE_SELECTABLE)
//Restricted to 5 in menu, because we have chems to make them big IC, like with breasts and what not.
if("vag_shape")
var/new_shape
@@ -2692,6 +2817,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("all")
be_random_body = !be_random_body
if("cosmetic_markings")
features["cosmetic_markings"] = !features["cosmetic_markings"]
if("hear_midis")
toggles ^= SOUND_MIDI
@@ -576,6 +576,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
all_quirks -= V
cit_character_pref_load(S)
hyper_character_pref_load(S)
return 1
@@ -671,6 +672,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["all_quirks"] , all_quirks)
cit_character_pref_save(S)
hyper_character_pref_save(S)
return 1
@@ -28,46 +28,6 @@
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
*/
@@ -461,6 +461,120 @@
tastes = list("meat" = 2, "dough" = 2, "laziness" = 1)
foodtype = GRAIN | ANTITOXIC
/obj/item/reagent_containers/food/snacks/donkpocket/taco
name = "\improper Taco-pocket"
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
icon_state = "donkpockettaco"
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
filling_color = "#CD853F"
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
foodtype = GRAIN | VEGETABLES | MEAT
/obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
name = "warm Taco-pocket"
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
icon_state = "donkpockettaco"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
foodtype = GRAIN | VEGETABLES | MEAT
/obj/item/reagent_containers/food/snacks/donkpocket/plasma
name = "\improper Poison-pocket"
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
icon_state = "donkpocketplasma"
list_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
filling_color = "#CD853F"
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
foodtype = GRAIN | TOXIC | MEAT
/obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
name = "warm Poison-pocket"
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
icon_state = "donkpocketplasma"
bonus_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
foodtype = GRAIN | TOXIC | MEAT
/obj/item/reagent_containers/food/snacks/donkpocket/breakfast
name = "\improper Breakfast-pocket"
desc = "Now for all you early morning Joes!."
icon_state = "donkpocketbreakfast"
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
filling_color = "#CD853F"
tastes = list("meat" = 2, "dough" = 2, "eggs" =2, "bacon" =2)
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST
/obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast //IT'S BEEN ELEVEN FUCKING HOURS I HATE BYOND I HATE BYOND I HATE BEYOND!!!
name = "warm Breakfast-pocket"
desc = "Now for all you early morning Joes!."
icon_state = "donkpocketbreakfast"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST | ANTITOXIC
/obj/item/reagent_containers/food/snacks/donkpocket/moth
name = "\improper Moth-pocket"
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
icon_state = "donkpocketmoth"
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
filling_color = "#CD853F"
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
foodtype = GRAIN | DAIRY | CLOTH
/obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
name = "warm Moth-pocket"
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
icon_state = "donkpocketmoth"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
foodtype = GRAIN | DAIRY | CLOTH
/obj/item/reagent_containers/food/snacks/donkpocket/vegan
name = "\improper Vegan-pocket"
desc = "For all you Animal Rights Consortium members out there!."
icon_state = "donkpocketvegan"
list_reagents = list(/datum/reagent/consumable/nutriment = 2)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
filling_color = "#CD853F"
tastes = list("vegetables" = 2, "dough" = 2)
foodtype = GRAIN | VEGETABLES
/obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
name = "warm Vegan-pocket"
desc = "For all you Animal Rights Consortium members out there!."
icon_state = "donkpocketvegan"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 3)
tastes = list("vegetables" = 2, "dough" = 2)
foodtype = GRAIN | VEGETABLES
/obj/item/reagent_containers/food/snacks/donkpocket/sm
name = "\improper Super-pocket"
desc = "You're probably not in a good spot if you're laying eyes on this."
icon_state = "donkpocketsm"
list_reagents = list(/datum/reagent/consumable/nutriment = 99)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/sm
filling_color = "#CD853F"
tastes = list("white-noise" = 2)
foodtype = TOXIC
/obj/item/reagent_containers/food/snacks/donkpocket/warm/sm
name = "warm Super-pocket"
desc = "You're probably not in a good spot if you're laying eyes on this."
icon_state = "donkpocketsm"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 99)
tastes = list("white-noise" = 2)
foodtype = TOXIC
/obj/item/reagent_containers/food/snacks/dankpocket
name = "\improper Dank-pocket"
desc = "The food of choice for the seasoned botanist."
@@ -554,7 +668,7 @@
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/berry
filling_color = "#CD853F"
tastes = list("dough" = 2, "jam" = 2)
foodtype = GRAIN
foodtype = GRAIN | SUGAR
/obj/item/reagent_containers/food/snacks/donkpocket/warm/berry
name = "warm Berry-pocket"
@@ -563,7 +677,7 @@
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/omnizine = 1, /datum/reagent/consumable/berryjuice = 3)
tastes = list("dough" = 2, "warm jam" = 2)
foodtype = GRAIN
foodtype = GRAIN | SUGAR
/obj/item/reagent_containers/food/snacks/donkpocket/gondola
name = "\improper Gondola-pocket"
@@ -362,6 +362,159 @@ datum/crafting_recipe/food/donut/meat
tastes = list("meat" = 2, "dough" = 2)
foodtype = GRAIN | VEGETABLES
/datum/crafting_recipe/food/donkpocket/taco
time = 15
name = "Taco-pocket"
reqs = list(
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
/obj/item/reagent_containers/food/snacks/meatball = 1,
/obj/item/reagent_containers/food/snacks/grown/carrot = 1,
/obj/item/reagent_containers/food/snacks/grown/citrus/lime = 1,
)
result = /obj/item/reagent_containers/food/snacks/donkpocket/taco
subcategory = CAT_PASTRY
/obj/item/reagent_containers/food/snacks/donkpocket/taco
name = "\improper Taco-pocket"
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
icon_state = "donkpockettaco"
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
filling_color = "#CD853F"
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
foodtype = GRAIN | VEGETABLES | MEAT
/obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
name = "warm Taco-pocket"
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
icon_state = "donkpockettaco"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
foodtype = GRAIN | VEGETABLES | MEAT
/datum/crafting_recipe/food/donkpocket/plasma
time = 15
name = "Plasma-pocket"
reqs = list(
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
/obj/item/reagent_containers/food/snacks/meatball = 1,
/datum/reagent/fuel = 1,
/datum/reagent/toxin/plasma = 1,
)
result = /obj/item/reagent_containers/food/snacks/donkpocket/plasma
subcategory = CAT_PASTRY
/obj/item/reagent_containers/food/snacks/donkpocket/plasma
name = "\improper Poison-pocket"
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
icon_state = "donkpocketplasma"
list_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
filling_color = "#CD853F"
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
foodtype = GRAIN | TOXIC | MEAT
/obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
name = "warm Poison-pocket"
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
icon_state = "donkpocketplasma"
bonus_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
foodtype = GRAIN | TOXIC | MEAT
/datum/crafting_recipe/food/donkpocket/breakfast
time = 15
name = "Breakfast-pocket"
reqs = list(
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
/obj/item/reagent_containers/food/snacks/friedegg = 1,
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
)
result = /obj/item/reagent_containers/food/snacks/donkpocket/breakfast
subcategory = CAT_PASTRY
/obj/item/reagent_containers/food/snacks/donkpocket/breakfast
name = "\improper Breakfast-pocket"
desc = "Now for all you early morning Joes!."
icon_state = "donkpocketbreakfast"
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
filling_color = "#CD853F"
tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST
/obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
name = "warm Breakfast-pocket"
desc = "Now for all you early morning Joes!."
icon_state = "donkpocketbreakfast"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST | ANTITOXIC
/datum/crafting_recipe/food/donkpocket/moth
time = 15
name = "Moth-pocket"
reqs = list(
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
/obj/item/stack/sheet/cloth = 1,
)
result = /obj/item/reagent_containers/food/snacks/donkpocket/moth
subcategory = CAT_PASTRY
/obj/item/reagent_containers/food/snacks/donkpocket/moth
name = "\improper Moth-pocket"
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
icon_state = "donkpocketmoth"
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
filling_color = "#CD853F"
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
foodtype = GRAIN | DAIRY | CLOTH
/obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
name = "warm Moth-pocket"
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
icon_state = "donkpocketmoth"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
foodtype = GRAIN | DAIRY | CLOTH
/datum/crafting_recipe/food/donkpocket/vegan
time = 15
name = "Vegan-pocket"
reqs = list(
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
/obj/item/reagent_containers/food/snacks/grown/cabbage = 1,
/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle = 1,
)
result = /obj/item/reagent_containers/food/snacks/donkpocket/vegan
subcategory = CAT_PASTRY
/obj/item/reagent_containers/food/snacks/donkpocket/vegan
name = "\improper Vegan-pocket"
desc = "For all you Animal Rights Consortium members out there!."
icon_state = "donkpocketvegan"
list_reagents = list(/datum/reagent/consumable/nutriment = 2)
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
filling_color = "#CD853F"
tastes = list("vegetables" = 2, "dough" = 2)
foodtype = GRAIN | VEGETABLES
/obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
name = "warm Vegan-pocket"
desc = "For all you Animal Rights Consortium members out there!."
icon_state = "donkpocketvegan"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 3)
tastes = list("vegetables" = 2, "dough" = 2)
foodtype = GRAIN | VEGETABLES
/datum/crafting_recipe/food/donkpocket/spicy
time = 15
name = "Spicy-pocket"
+8 -7
View File
@@ -33,6 +33,9 @@
// This is for adminspawn or map-placed growns. They get the default stats of their seed type.
seed = new seed()
seed.adjust_potency(50-seed.potency)
else if(!seed)
stack_trace("Grown initialized without seed. Okay.")
return INITIALIZE_HINT_QDEL
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
@@ -40,13 +43,11 @@
if(dried_type == -1)
dried_type = src.type
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_new(src, loc)
seed.prepare_result(src)
transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5 //Makes the resulting produce's sprite larger or smaller based on potency!
add_juice()
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_new(src, loc)
seed.prepare_result(src)
AddElement(/datum/element/item_scaling, TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5, 1) //Makes the resulting produce's sprite larger or smaller based on potency!
add_juice()
/obj/item/reagent_containers/food/snacks/grown/proc/add_juice()
+6 -12
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, ACCESS_LAMBENT,
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
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_BARISTA, ACCESS_BARBER,
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
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, ACCESS_BARISTA, ACCESS_BARBER)
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER)
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, ACCESS_LAMBENT)
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP)
if(3) //medbay
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH)
if(4) //research
@@ -224,10 +224,6 @@
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)
@@ -326,8 +322,6 @@
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)
@@ -363,10 +357,10 @@
return "Code Scotch"
/proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Barista", "Barber", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern",
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Psychologist", "Medical Resident",
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie", "Lambent")
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie")
/proc/get_all_job_icons() //For all existing HUD icons
return get_all_jobs() + list("Prisoner")
+3 -3
View File
@@ -65,7 +65,7 @@ Captain
satchel = /obj/item/storage/backpack/satchel/cap
duffelbag = /obj/item/storage/backpack/duffelbag/captain
implants = list(/obj/item/implant/mindshield)
implants = list(/obj/item/implant/mindshield, /obj/item/implant/kinaris)
accessory = /obj/item/clothing/accessory/medal/gold/captain
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
@@ -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_BARISTA, ACCESS_BARBER,
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_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_BARISTA, ACCESS_BARBER,
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
+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_MINERAL_STOREROOM)
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, 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/book/granter/action/drink_fling=1)
backpack_contents = list(/obj/item/storage/box/beanbag=1,/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 = 1
total_positions = 2
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+3 -3
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_BARISTA, ACCESS_BARBER,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
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_BARISTA, ACCESS_BARBER,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
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)
@@ -62,7 +62,7 @@ Head of Security
duffelbag = /obj/item/storage/backpack/duffelbag/sec
box = /obj/item/storage/box/security
implants = list(/obj/item/implant/mindshield)
implants = list(/obj/item/implant/mindshield, /obj/item/implant/kinaris)
chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos)
-6
View File
@@ -1,6 +1,5 @@
GLOBAL_LIST_INIT(command_positions, list(
"Captain",
"Lambent",
"Head of Personnel",
"Head of Security",
"Chief Engineer",
@@ -38,8 +37,6 @@ GLOBAL_LIST_INIT(supply_positions, list(
GLOBAL_LIST_INIT(civilian_positions, list(
"Head of Personnel",
"Barista",
"Barber",
"Bartender",
"Botanist",
"Cook",
@@ -63,9 +60,6 @@ GLOBAL_LIST_INIT(nonhuman_positions, list(
"Cyborg",
ROLE_PAI))
GLOBAL_LIST_INIT(important_positions, list(
"Lambent"))
GLOBAL_LIST_INIT(silly_positions, list(
"Clown",
"Mime"))
+9 -2
View File
@@ -43,7 +43,14 @@
S.cd = "/"
var/slot
S["default_slot"] >> slot
var/differing_version_notification = 0
if(slot)
S.cd = "/character[slot]"
if(S["version"] < SAVEFILE_VERSION_MAX)
to_chat(src, "<span class='redtext'>Your characters are outdated from recent updates. Please make sure if everything is within reasonable levels.</span>")
var/slot_version = 0
S["version"] >> slot_version
if(slot_version && slot_version < SAVEFILE_VERSION_MAX)
S.cd = "/"
S["new_differences_notification"] >> differing_version_notification
if(!differing_version_notification || differing_version_notification <= slot_version)
S["new_differences_notification"] << slot_version
to_chat(src, "<span class='danger'><B>There were recent changes with characters, and your savefiles are outdated. Your characters may not look the same depending on what changed.</B></span>")
+3
View File
@@ -487,6 +487,9 @@
if(HAS_TRAIT(src, TRAIT_NOHUNGER))
return 1
if(!has_mouth())
return 1
if(nutrition < 100 && !blood)
if(message)
visible_message("<span class='warning'>[src] dry heaves!</span>", \
@@ -5,30 +5,24 @@
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)
@@ -318,15 +318,24 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/mob/living/carbon/human/H = C
if(NOGENITALS in H.dna.species.species_traits)
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
// EDIT ENDS
if(NOMOUTH in species_traits)
for(var/obj/item/bodypart/head/head in C.bodyparts)
head.mouth = FALSE
/datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
if(C.dna.species.exotic_bloodtype)
if(!new_species.exotic_bloodtype)
C.dna.blood_type = random_blood_type()
else
C.dna.blood_type = new_species.exotic_bloodtype
if(NOMOUTH in species_traits)
for(var/obj/item/bodypart/head/head in C.bodyparts)
head.mouth = TRUE
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(TRUE)
for(var/X in inherent_traits)
@@ -502,6 +511,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/list/standing = list()
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
H.handle_cosmetic_parts()
if(HD && !(HAS_TRAIT(H, TRAIT_HUSK)))
// lipstick
@@ -594,6 +604,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
//CITADEL EDIT - Do not forget to add this to relevent_layers list just above too!
H.remove_overlay(BODY_TAUR_LAYER)
//END EDIT
H.handle_cosmetic_parts()
if(!mutant_bodyparts)
return
@@ -678,21 +689,17 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if("mam_tail" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR) || (!H.dna.features["taur"] == "None"))
bodyparts_to_add -= "mam_tail"
if("mam_waggingtail" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR) || (!H.dna.features["taur"] == "None"))
bodyparts_to_add -= "mam_waggingtail"
else if ("mam_tail" in mutant_bodyparts)
bodyparts_to_add -= "mam_waggingtail"
if("mam_ears" in mutant_bodyparts)
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC)
bodyparts_to_add -= "mam_ears"
if("mam_snouts" in mutant_bodyparts) //Take a closer look at that snout!
if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC)
bodyparts_to_add -= "mam_snouts"
if("taur" in mutant_bodyparts)
if(!H.dna.features["taur"] || H.dna.features["taur"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR)))
bodyparts_to_add -= "taur"
@@ -1647,8 +1654,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
)
if (target.canbearoused)
target.adjustArousalLoss(5)
if (target.getArousalLoss() >= 100 && ishuman(target) && HAS_TRAIT(target, TRAIT_MASO) && target.has_dna())
target.mob_climax(forced_climax=TRUE)
if (HAS_TRAIT(target, TRAIT_MASO))
target.mob_climax_instant()
if (!HAS_TRAIT(target, TRAIT_NYMPHO))
stop_wagging_tail(target)
@@ -2005,8 +2012,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.update_damage_overlays()
if(HAS_TRAIT(H, TRAIT_MASO))
H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod)
if (H.getArousalLoss() >= 100 && ishuman(H) && H.has_dna())
H.mob_climax(forced_climax=TRUE)
H.mob_climax_instant()
else//no bodypart, we deal damage with a more general method.
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
@@ -690,6 +690,8 @@ generate/load female uniform sprites matching all previously decided variables
. += "-[BP.digitigrade_type]"
if(BP.dmg_overlay_type)
. += "-[BP.dmg_overlay_type]"
if(BP.cosmetic_icon)
. += "-cosm[BP.cosmetic_icon]"
if(BP.body_markings)
. += "-[BP.body_markings]"
else
+1 -2
View File
@@ -77,8 +77,7 @@
var/mob/living/carbon/human/B = src
if(HAS_TRAIT(B, TRAIT_CHOKE_SLUT))
B.adjustArousalLoss(7)
if (B.getArousalLoss() >= 100 && ishuman(B) && B.has_dna())
B.mob_climax(forced_climax=TRUE)
B.mob_climax_instant()
else
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
else
@@ -200,6 +200,10 @@
INVOKE_ASYNC(RM, .proc/do_transform_animation)
SEND_SIGNAL(R, COMSIG_CYBORG_MODULE_CHANGE) //hyperstation edit
qdel(src)
//Skyrat change start
R.radio.extra_channels = RM.added_channels
R.radio.recalculateChannels()
//Skyrat change stop
return RM
/obj/item/robot_module/proc/be_transformed_to(obj/item/robot_module/old_module)
@@ -459,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,
@@ -493,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)]")
+3 -1
View File
@@ -57,7 +57,9 @@
var/datum/callback/CB = foo
CB.Invoke()
mind?.hide_ckey = client?.prefs?.hide_ckey
if(client.prefs)
mind?.hide_ckey = client.prefs.hide_ckey
client.fps = client.prefs.clientfps
log_message("Client [key_name(src)] has taken ownership of mob [src]([src.type])", LOG_OWNERSHIP)
SEND_SIGNAL(src, COMSIG_MOB_CLIENT_LOGIN, client)
client.init_verbs()
+16
View File
@@ -104,6 +104,8 @@
var/icon_update_needed = FALSE
var/obj/machinery/computer/apc_control/remote_control = null
var/obj/effect/light/lighteffect //light effect
/obj/machinery/power/apc/unlocked
locked = FALSE
@@ -185,6 +187,8 @@
addtimer(CALLBACK(src, .proc/update), 5)
/obj/machinery/power/apc/Destroy()
if(lighteffect)
lighteffect.Del()
GLOB.apcs_list -= src
if(malfai && operating)
@@ -320,6 +324,13 @@
// And now, separately for cleanness, the lighting changing
if(update_state & UPSTATE_ALLGOOD)
if(!lighteffect)//make the light
lighteffect = new/obj/effect/light
lighteffect.loc = src.loc
lighteffect.alpha = 50
lighteffect.pixel_x = pixel_x
lighteffect.pixel_y = pixel_y
switch(charging)
if(APC_NOT_CHARGING)
light_color = LIGHT_COLOR_RED
@@ -328,6 +339,7 @@
if(APC_FULLY_CHARGED)
light_color = LIGHT_COLOR_GREEN
set_light(lon_range)
lighteffect.color = light_color
else if(update_state & UPSTATE_BLUESCREEN)
light_color = LIGHT_COLOR_BLUE
set_light(lon_range)
@@ -336,6 +348,10 @@
icon_update_needed = FALSE
/obj/machinery/power/apc/Move()
if(lighteffect)
lighteffect.loc = src.loc //move the light overlay
/obj/machinery/power/apc/proc/check_updates()
var/last_update_state = update_state
var/last_update_overlay = update_overlay
+18
View File
@@ -223,6 +223,9 @@
var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode
var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode
var/obj/effect/light/lighteffect //light effect
/obj/machinery/light/broken
status = LIGHT_BROKEN
icon_state = "tube-broken"
@@ -242,6 +245,8 @@
icon_state = "bulb-broken"
/obj/machinery/light/Move()
if(lighteffect)
lighteffect.loc = src.loc
if(status != LIGHT_BROKEN)
break_light_tube(1)
return ..()
@@ -285,6 +290,8 @@
/obj/machinery/light/Destroy()
var/area/A = get_area(src)
if(lighteffect)
lighteffect.Del()
if(A)
on = FALSE
// A.update_lights()
@@ -292,24 +299,35 @@
return ..()
/obj/machinery/light/update_icon()
if(!lighteffect) //dont have a light bloom, make it.
lighteffect = new/obj/effect/light/large
lighteffect.loc = src.loc
cut_overlays()
switch(status) // set icon_states
if(LIGHT_OK)
var/area/A = get_area(src)
if(emergency_mode || (A && A.fire))
icon_state = "[base_state]_emergency"
lighteffect.alpha = 0
else
icon_state = "[base_state]"
if(on)
lighteffect.alpha = CLAMP(light_power*35, 5, 100)
lighteffect.color = light_color
var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
glowybit.alpha = CLAMP(light_power*250, 30, 200)
add_overlay(glowybit)
if(LIGHT_EMPTY)
icon_state = "[base_state]-empty"
lighteffect.alpha = 0
if(LIGHT_BURNED)
icon_state = "[base_state]-burned"
lighteffect.alpha = 0
if(LIGHT_BROKEN)
icon_state = "[base_state]-broken"
lighteffect.alpha = 0
if(!on)
lighteffect.alpha = 0
return
// update the icon_state and luminosity of the light depending on its state
@@ -266,7 +266,7 @@
icon_state = "modkit"
w_class = WEIGHT_CLASS_SMALL
require_module = 1
module_type = /obj/item/robot_module/miner
module_type = list(/obj/item/robot_module/miner, /obj/item/robot_module/orepup)
var/denied_type = null
var/maximum_of_type = 1
var/cost = 30
+4 -1
View File
@@ -197,7 +197,10 @@
L.visible_message("<span class='danger'>[L] is hit by \a [src][organ_hit_text]!</span>", \
"<span class='userdanger'>[L] is hit by \a [src][organ_hit_text]!</span>", null, COMBAT_MESSAGE_RANGE)
if(candink && def_zone == BODY_ZONE_HEAD)
playsound(src, 'sound/weapons/dink.ogg', 30, 1)
if(prob(2))
playsound(src, 'hyperstation/sound/weapons/dinkalternate.ogg', 30, 0)
else
playsound(src, 'sound/weapons/dink.ogg', 30, 1)
L.on_hit(src)
var/reagent_note
@@ -65,6 +65,12 @@
var/who = (isnull(user) || eater == user) ? "your" : "[eater.p_their()]"
to_chat(user, "<span class='warning'>You have to remove [who] [covered] first!</span>")
return 0
if(!eater.has_mouth())
if(eater == user)
to_chat(eater, "<span class='warning'>You have no mouth, and cannot eat.</span>")
else
to_chat(user, "<span class='warning'>You can't feed [eater], because they have no mouth!</span>")
return 0
return 1
/obj/item/reagent_containers/ex_act()
@@ -282,16 +282,16 @@
. = ..()
if(.)
return
if(chalice_taken == 1)
if(chalice_taken)
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
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
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
+54 -25
View File
@@ -44,6 +44,13 @@
var/skin_tone = ""
var/body_gender = ""
var/species_id = ""
/**
* HYPER: when getting the appearance of a limb, the game will check
* for `cosmetic_icon` first. if there is none, it will default back
* to `species_id`. this allows us to use custom body part types for
* each limb in character customization.
*/
var/datum/cosmetic_part/cosmetic_icon
var/color_src
var/base_bp_icon //Overrides the icon being used for this limb. This is mainly for downstreams, implemented and maintained as a favor in return for implementing synths. And also because should_draw_* for icon overrides was pretty messy. You're welcome.
var/should_draw_gender = FALSE
@@ -391,12 +398,22 @@
else
body_markings = "plain"
auxmarking = "plain"
markings_color = list(colorlist)
else
body_markings = null
auxmarking = null
if(cosmetic_icon && is_organic_limb())
if(cosmetic_icon.icon)
base_bp_icon = cosmetic_icon.icon
use_digitigrade = cosmetic_icon.support_digitigrade ? use_digitigrade : NOT_DIGITIGRADE
color_src = cosmetic_icon.color_src ? cosmetic_icon.color_src : MUTCOLORS
if(!H.dna.features["cosmetic_markings"])
body_markings = null
auxmarking = null
if((MUTCOLORS in S.species_traits) || (MUTCOLORS_PARTSONLY in S.species_traits))
markings_color = list(colorlist)
if(!dropping_limb && H.dna.check_mutation(HULK))
mutation_color = "00aa00"
else
@@ -436,6 +453,11 @@
var/image_dir = 0
var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
var/is_husk = species_id == "husk"
/// HYPER: allow for custom limb icons in character customization
var/has_cosmetic_state = !isnull(cosmetic_icon) && !isnull(cosmetic_icon.icon_state)
var/limb_style = has_cosmetic_state ? cosmetic_icon.icon_state : species_id
if(dropped)
image_dir = SOUTH
@@ -464,7 +486,7 @@
if(animal_origin)
if(is_organic_limb())
limb.icon = 'icons/mob/animal_parts.dmi'
if(species_id == "husk")
if(is_husk)
limb.icon_state = "[animal_origin]_husk_[body_zone]"
else
limb.icon_state = "[animal_origin]_[body_zone]"
@@ -479,21 +501,21 @@
if(is_organic_limb())
limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
limb.icon_state = "[limb_style]_[body_zone]_[icon_gender]"
else if (use_digitigrade)
if(base_bp_icon == DEFAULT_BODYPART_ICON_ORGANIC) //Compatibility hack for the current iconset.
limb.icon_state = "digitigrade_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_digitigrade_[use_digitigrade]_[body_zone]"
limb.icon_state = "[limb_style]_digitigrade_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_[body_zone]"
limb.icon_state = "[limb_style]_[body_zone]"
// Body markings
if(body_markings)
if(species_id == "husk")
if(is_husk)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
else if(species_id == "husk" && use_digitigrade)
else if(is_husk && use_digitigrade)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
@@ -508,10 +530,10 @@
// Citadel End
if(aux_zone)
aux = image(limb.icon, "[species_id]_[aux_zone]", -aux_layer, image_dir)
aux = image(limb.icon, "[limb_style]_[aux_zone]", -aux_layer, image_dir)
. += aux
if(body_markings)
if(species_id == "husk")
if(is_husk)
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
else
auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir)
@@ -528,16 +550,16 @@
aux = image(limb.icon, "[aux_zone]", -aux_layer, image_dir)
. += aux
if(!isnull(auxmarking))
if(species_id == "husk")
if(is_husk)
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
else
auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir)
. += auxmarking
if(!isnull(body_markings))
if(species_id == "husk")
if(is_husk)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
else if(species_id == "husk" && use_digitigrade)
else if(is_husk && use_digitigrade)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
@@ -550,20 +572,27 @@
. += marking
return
if(color_src) //TODO - add color matrix support for base species limbs
var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone))
if(draw_color)
limb.color = "#[draw_color]"
if(!color_src)
return
switch(color_src)
if(MUTCOLORS)
var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone))
if(draw_color)
limb.color = "#[draw_color]"
if(aux_zone)
aux.color = "#[draw_color]"
if(MATRIXED)
limb.color = list(markings_color)
if(aux_zone)
aux.color = "#[draw_color]"
if(!isnull(auxmarking))
auxmarking.color = list(markings_color)
aux.color = list(markings_color)
if(!isnull(body_markings))
if(species_id == "husk")
marking.color = "#141414"
else
marking.color = list(markings_color)
if(!isnull(auxmarking))
auxmarking.color = list(markings_color)
if(!isnull(body_markings))
if(is_husk)
marking.color = "#141414"
else
marking.color = list(markings_color)
/obj/item/bodypart/deconstruct(disassembled = TRUE)
+3
View File
@@ -34,6 +34,9 @@
var/lip_color = "white"
//If the head is a special sprite
var/custom_head
// if head has mouth; may depend on species
var/mouth = TRUE
/obj/item/bodypart/head/can_dismember(obj/item/I)
if(!((owner.stat == DEAD) || owner.InFullCritical()))
+23 -2
View File
@@ -120,6 +120,27 @@
return
owner.vomit(stun = FALSE)
/obj/item/organ/stomach/ipc
name = "ipc stomach"
/obj/item/organ/stomach/synthliz
name = "synthliz stomach"
icon_state = "stomach-ipc"
// ipc power cell from oracle
/obj/item/organ/stomach/cell
name = "micro-cell"
icon_state = "microcell"
w_class = WEIGHT_CLASS_NORMAL
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_STOMACH
status = ORGAN_ROBOTIC
attack_verb = list("assault and battery'd")
desc = "A micro-cell, for IPC use only. Do not swallow."
/obj/item/organ/stomach/cell/emp_act(severity)
switch(severity)
if(1)
owner.nutrition = 50
to_chat(owner, "<span class='warning'>Alert: Heavy EMP Detected. Rebooting power cell to prevent damage.</span>")
if(2)
owner.nutrition = 250
to_chat(owner, "<span class='warning'>Alert: EMP Detected. Cycling battery.</span>")
+2 -2
View File
@@ -581,7 +581,7 @@
for(var/V in listeners)
var/mob/living/carbon/human/H = V
if(H.canbearoused && H.has_dna() && HAS_TRAIT(H, TRAIT_NYMPHO)) // probably a redundant check but for good measure
H.mob_climax(forced_climax=TRUE)
H.mob_climax_instant()
*/
else if((findtext(message, family_friendly_words)))
cooldown = COOLDOWN_MEME
@@ -1123,7 +1123,7 @@
if(E.phase > 1)
if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && E.lewd) // probably a redundant check but for good measure
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='love'>Your [E.enthrallGender] pushes you over the limit, overwhelming your body with pleasure.</b></span>"), 5)
H.mob_climax(forced_climax=TRUE)
H.mob_climax_instant()
H.SetStun(20)
H.setArousalLoss(H.min_arousal)
E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
+23 -20
View File
@@ -8,8 +8,7 @@
vend_reply = "Thank you for using AutoDrobe!"
products = list(/obj/item/clothing/suit/chickensuit = 1,
/obj/item/clothing/head/chicken = 1,
/obj/item/clothing/suit/hooded/corpus = 1,
/obj/item/clothing/suit/hooded/corpus/c = 1,
/obj/item/clothing/suit/hooded/wintercoat/corpus = 1,
/obj/item/clothing/under/gladiator = 1,
/obj/item/clothing/head/helmet/gladiator = 1,
/obj/item/clothing/under/gimmick/rank/captain/suit = 1,
@@ -112,6 +111,9 @@
/obj/item/clothing/head/wig/random = 3,
/obj/item/clothing/suit/ran = 2,
/obj/item/clothing/head/ran = 2,
/obj/item/clothing/suit/threepwoodjacket = 3,
/obj/item/clothing/under/threepwood = 2,
/obj/item/clothing/shoes/threepwoodboots = 1,
/obj/item/clothing/under/vaultsuit = 3)
contraband = list(/obj/item/clothing/suit/judgerobe = 1,
/obj/item/clothing/head/powdered_wig = 1,
@@ -120,25 +122,26 @@
/obj/item/clothing/glasses/sunglasses/blindfold = 1,
/obj/item/clothing/mask/muzzle = 2)
premium = list(/obj/item/clothing/suit/pirate/captain = 2,
/obj/item/clothing/head/pirate/captain = 2,
/obj/item/clothing/head/helmet/roman/fake = 1,
/obj/item/clothing/head/helmet/roman/legionnaire/fake = 1,
/obj/item/clothing/under/roman = 1,
/obj/item/clothing/shoes/roman = 1,
/obj/item/shield/riot/roman/fake = 1,
/obj/item/clothing/head/delinquent = 1, // One per vendor, please dear god don't mass produce these.
/obj/item/skub = 1,
/obj/item/clothing/under/lobster = 1, // CIT CHANGES
/obj/item/clothing/head/lobsterhat = 1,
/obj/item/clothing/head/drfreezehat = 1,
/obj/item/clothing/suit/dracula = 1,
/obj/item/clothing/suit/drfreeze_coat = 1,
/obj/item/clothing/suit/gothcoat = 2,
/obj/item/clothing/under/draculass = 1,
/obj/item/clothing/under/drfreeze = 1, //End of Cit Changes
/obj/item/clothing/head/pirate/captain = 2,
/obj/item/clothing/head/helmet/roman/fake = 1,
/obj/item/clothing/head/helmet/roman/legionnaire/fake = 1,
/obj/item/clothing/under/roman = 1,
/obj/item/clothing/shoes/roman = 1,
/obj/item/shield/riot/roman/fake = 1,
/obj/item/clothing/head/delinquent = 1, // One per vendor, please dear god don't mass produce these.
/obj/item/skub = 1,
/obj/item/clothing/under/lobster = 1, // CIT CHANGES
/obj/item/clothing/head/lobsterhat = 1,
/obj/item/clothing/head/drfreezehat = 1,
/obj/item/clothing/suit/dracula = 1,
/obj/item/clothing/suit/drfreeze_coat = 1,
/obj/item/clothing/suit/gothcoat = 2,
/obj/item/clothing/under/draculass = 1,
/obj/item/clothing/under/drfreeze = 1, //End of Cit Changes
/obj/item/clothing/under/wedding_dress = 1,
/obj/item/clothing/under/tuxedo = 1,
/obj/item/storage/belt/cummerbund = 1)
/obj/item/clothing/under/tuxedo = 1,
/obj/item/clothing/suit/hooded/wintercoat/corpus/command = 1,
/obj/item/storage/belt/cummerbund = 1)
refill_canister = /obj/item/vending_refill/autodrobe
/obj/machinery/vending/autodrobe/all_access
+1 -1
View File
@@ -19,7 +19,7 @@
/obj/item/clothing/under/rank/security/skirt = 5,
/obj/item/clothing/under/rank/security/grey = 5,
/obj/item/clothing/under/pants/khaki = 5,
/obj/item/clothing/suit/hooded/corpus/s = 5)
/obj/item/clothing/suit/hooded/wintercoat/corpus/sec = 5)
premium = list(/obj/item/clothing/under/rank/security/navyblue = 5,
/obj/item/clothing/suit/security/officer = 5,
/obj/item/clothing/head/beret/sec/navyofficer = 5,
-2
View File
@@ -5,8 +5,6 @@ $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
@@ -1,12 +0,0 @@
# 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
+1 -4
View File
@@ -3,7 +3,6 @@
#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
@@ -17,9 +16,7 @@ Cargo Technician=3,2
Shaft Miner=3,3
Bartender=1,1
Barista=1,1
Barber=2,1
Cook=1,1
Cook=2,1
Botanist=3,2
Janitor=2,1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

-11
View File
@@ -1,11 +0,0 @@
///////////////
// 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"
@@ -1,11 +0,0 @@
/// 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
@@ -1,18 +0,0 @@
/**
* 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
+18
View File
@@ -0,0 +1,18 @@
/obj/effect/light/
name = "bloom"
icon = 'hyperstation/icons/effects/lighting.dmi'
icon_state = "light"
plane = ABOVE_LIGHTING_PLANE
blend_mode = BLEND_ADD
mouse_opacity = 0
anchored = TRUE //no more flying around.
/obj/effect/light/medium
icon = 'hyperstation/icons/effects/lightingmed.dmi'
pixel_x = -16
pixel_y = -16
/obj/effect/light/large
icon = 'hyperstation/icons/effects/lightinglarge.dmi'
pixel_x = -48
pixel_y = -48
@@ -1,467 +0,0 @@
/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"
@@ -1,3 +0,0 @@
/obj/machinery/announcement_system
var/onduty = "%PERSON has moved On-Duty as %RANK."
var/offduty = "%PERSON, %RANK, has moved Off-Duty."
@@ -1,310 +0,0 @@
/// 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?
@@ -1,11 +0,0 @@
/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"
@@ -1,2 +0,0 @@
/obj/item/card/id
var/last_job_switch /// Last job switch for card's owner

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