Merge remote-tracking branch 'upstream/master'

This commit is contained in:
ToonClyde
2022-09-07 13:33:41 -07:00
308 changed files with 266533 additions and 132937 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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+9 -1
View File
@@ -10,8 +10,16 @@
},
"traits":[
{
"Up": 1,
"Gravity":true,
"Baseturf":"/turf/open/chasm/cloud"
"Baseturf":"/turf/open/chasm/cloud",
"Linkage" : "Cross"
},
{
"Down": -1,
"Gravity":true,
"Baseturf":"/turf/open/transparent/openspace",
"Linkage" : "Cross"
}
]
}
File diff suppressed because it is too large Load Diff
+40 -43
View File
@@ -2482,11 +2482,6 @@
name = "Bartenders Back Room"
},
/area/centcom/control)
"cnW" = (
/obj/structure/fans/tiny,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"coE" = (
/obj/machinery/light{
dir = 4
@@ -3701,6 +3696,20 @@
/obj/item/stack/packageWrap,
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
"dzb" = (
/obj/machinery/door/airlock/external{
name = "Ferry Airlock"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/obj/structure/fans/tiny,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"dzX" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-21"
@@ -4251,18 +4260,6 @@
},
/turf/closed/indestructible/riveted,
/area/space)
"dUw" = (
/obj/machinery/door/airlock/external{
name = "Ferry Airlock"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/turf/open/floor/plasteel,
/area/centcom/ferry)
"dUD" = (
/obj/structure/chair{
dir = 1
@@ -4637,10 +4634,6 @@
/area/abductor_ship)
"ejO" = (
/obj/structure/table,
/obj/item/razor{
pixel_x = 2;
pixel_y = 5
},
/turf/open/floor/plasteel/white,
/area/centcom/ferry)
"ejW" = (
@@ -9340,17 +9333,12 @@
/turf/open/floor/plasteel/dark,
/area/centcom/ferry)
"iFk" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 2;
height = 13;
id = "ferry_away";
json_key = "ferry";
name = "CentCom Ferry Dock";
width = 5
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/space,
/area/space)
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"iFv" = (
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -12939,6 +12927,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"mei" = (
@@ -13080,9 +13069,6 @@
/obj/item/storage/pill_bottle/mutarad{
pixel_x = -7
},
/obj/item/razor{
pixel_y = 12
},
/obj/machinery/light/small{
dir = 4;
pixel_x = 10;
@@ -16184,6 +16170,18 @@
},
/turf/open/floor/plasteel/dark,
/area/ctf)
"oXv" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 5;
height = 13;
id = "ferry_away";
json_key = "ferry";
name = "CentCom Ferry Dock";
width = 11
},
/turf/open/space,
/area/space)
"oXF" = (
/obj/structure/table/wood/fancy,
/obj/item/camera/spooky,
@@ -16861,7 +16859,6 @@
"pFm" = (
/obj/structure/table/glass,
/obj/item/surgical_drapes,
/obj/item/razor,
/turf/open/floor/holofloor{
icon_state = "white"
},
@@ -59745,7 +59742,7 @@ fWS
fWS
fWS
fWS
fWS
oXv
fWS
fWS
fWS
@@ -60001,9 +59998,9 @@ cJc
eRA
eRA
fWS
fWS
fWS
fWS
eRA
dzb
eRA
fWS
fWS
fWS
@@ -60258,9 +60255,9 @@ txL
iyB
eRA
fWS
fWS
eRA
iFk
fWS
eRA
fWS
fWS
fWS
@@ -60516,7 +60513,7 @@ hFM
eDP
fWS
eRA
dUw
iFk
eRA
fWS
eDP
@@ -60773,7 +60770,7 @@ uYp
eDP
cQu
eRA
cnW
iFk
eRA
pMV
eDP
+689 -226
View File
@@ -1,292 +1,755 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
"cn" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals22"
},
/area/shuttle/arrival)
"cw" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals38"
},
/area/shuttle/arrival)
"cO" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals29"
},
/area/shuttle/arrival)
"de" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals33"
},
/area/shuttle/arrival)
"dO" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals42"
},
/area/shuttle/arrival)
"eb" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals45"
},
/area/shuttle/arrival)
"fF" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"fS" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals1"
},
/area/shuttle/arrival)
"gu" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals15"
},
/area/shuttle/arrival)
"gC" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals35"
},
/area/shuttle/arrival)
"gK" = (
/obj/structure/window/reinforced/fulltile,
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/brflowers,
/obj/structure/flora/ausbushes/grassybush,
/obj/machinery/light{
pixel_y = -1
},
/turf/open/floor/grass,
/area/shuttle/arrival)
"gN" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals20"
},
/area/shuttle/arrival)
"jg" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals47"
},
/area/shuttle/arrival)
"kq" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals10"
},
/area/shuttle/arrival)
"ks" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals25"
},
/area/shuttle/arrival)
"kF" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/item/radio/intercom{
pixel_x = -30
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"lo" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals46"
},
/area/shuttle/arrival)
"lt" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals49"
},
/area/shuttle/arrival)
"lE" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals44"
},
/area/shuttle/arrival)
"mi" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals2"
},
/area/shuttle/arrival)
"mA" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_tile";
name = "tile"
},
/area/shuttle/arrival)
"nC" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals41"
},
/area/shuttle/arrival)
"nO" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals4"
},
/area/shuttle/arrival)
"ov" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals48"
},
/area/shuttle/arrival)
"oD" = (
/obj/structure/fans/tiny,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"ph" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals3"
},
/area/shuttle/arrival)
"pB" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals37"
},
/area/shuttle/arrival)
"pZ" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals9"
},
/area/shuttle/arrival)
"qa" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals26"
},
/area/shuttle/arrival)
"qw" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"qz" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals53"
},
/area/shuttle/arrival)
"qS" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals21"
},
/area/shuttle/arrival)
"rC" = (
/obj/structure/window/reinforced/fulltile,
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/ppflowers,
/obj/structure/flora/ausbushes/sparsegrass,
/turf/open/floor/grass,
/area/shuttle/arrival)
"sd" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/item/radio/intercom{
pixel_x = -30
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"sk" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals39"
},
/area/shuttle/arrival)
"uf" = (
/obj/machinery/light{
dir = 1
},
/obj/structure/chair/comfy/shuttle,
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"uC" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals13"
},
/area/shuttle/arrival)
"vk" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"xW" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals27"
},
/area/shuttle/arrival)
"yl" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals51"
},
/area/shuttle/arrival)
"yU" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals28"
},
/area/shuttle/arrival)
"ze" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals31"
},
/area/shuttle/arrival)
"zV" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals40"
},
/area/shuttle/arrival)
"Al" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals32"
},
/area/shuttle/arrival)
"CA" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals12"
},
/area/shuttle/arrival)
"Dm" = (
/obj/machinery/light{
pixel_y = -1
},
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/obj/structure/closet/emcloset{
anchored = 1
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"EA" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals6"
},
/area/shuttle/arrival)
"HU" = (
/obj/structure/fans/tiny,
/obj/effect/turf_decal/stripes/line,
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"Il" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals18"
},
/area/shuttle/arrival)
"JU" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"Kb" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals52"
},
/area/shuttle/arrival)
"KB" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/closed/wall/mineral/titanium,
"KN" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals16"
},
/area/shuttle/arrival)
"c" = (
"Lv" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals19"
},
/area/shuttle/arrival)
"My" = (
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
},
/obj/structure/fans/tiny,
/turf/open/floor/plating,
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/arrival)
"d" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
"Ov" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals7"
},
/area/shuttle/arrival)
"e" = (
"OQ" = (
/obj/structure/window/reinforced/fulltile,
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/brflowers,
/obj/structure/flora/ausbushes/leafybush,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/grass,
/area/shuttle/arrival)
"OT" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals50"
},
/area/shuttle/arrival)
"Pb" = (
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/structure/table,
/obj/item/storage/firstaid/regular,
/turf/open/floor/mineral/titanium/blue,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"f" = (
/turf/open/floor/mineral/titanium/blue,
"Pr" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals24"
},
/area/shuttle/arrival)
"g" = (
/obj/machinery/computer/arcade,
"PR" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals23"
},
/area/shuttle/arrival)
"Qd" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals34"
},
/area/shuttle/arrival)
"QB" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 8;
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_tile";
name = "tile"
},
/area/shuttle/arrival)
"QK" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/arrival)
"Sb" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals0"
},
/area/shuttle/arrival)
"Sp" = (
/obj/machinery/light{
dir = 1
pixel_y = -1
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"h" = (
/obj/structure/closet/wardrobe/green,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"i" = (
/obj/structure/closet/wardrobe/black,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"j" = (
/obj/structure/closet/wardrobe/mixed,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"k" = (
/obj/structure/closet/wardrobe/grey,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"l" = (
/obj/machinery/requests_console{
department = "Arrival shuttle";
name = "Arrivals Shuttle console";
pixel_y = 30
},
/obj/machinery/light{
dir = 1
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"m" = (
/obj/structure/shuttle/engine/heater{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"n" = (
/obj/structure/shuttle/engine/propulsion/burst/right{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"o" = (
/obj/structure/window/shuttle,
/obj/structure/grille,
/turf/open/floor/plating,
/area/shuttle/arrival)
"p" = (
/obj/structure/chair/comfy/shuttle,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"q" = (
/obj/structure/chair/comfy/shuttle,
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"r" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
dir = 1
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/turf/open/floor/mineral/titanium,
/area/shuttle/arrival)
"s" = (
/obj/structure/shuttle/engine/propulsion{
dir = 4
"SE" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals5"
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"t" = (
/obj/machinery/door/airlock/titanium{
name = "Arrivals Shuttle Airlock"
"TW" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals11"
},
/turf/open/floor/mineral/titanium,
/area/shuttle/arrival)
"u" = (
/obj/structure/shuttle/engine/propulsion{
dir = 4
"UU" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 4;
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
icon_state = "siding_wood_line";
name = "wood"
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_tile";
name = "tile"
},
/area/shuttle/arrival)
"VR" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals17"
},
/area/shuttle/arrival)
"We" = (
/obj/docking_port/mobile/arrivals,
/turf/open/floor/plating/airless,
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals30"
},
/area/shuttle/arrival)
"v" = (
"Wi" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals14"
},
/area/shuttle/arrival)
"WM" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals8"
},
/area/shuttle/arrival)
"WO" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"w" = (
"YZ" = (
/obj/structure/chair/comfy/shuttle,
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"Zg" = (
/turf/closed/wall/mineral/titanium/custom/arrivals{
icon_state = "arrivals36"
},
/area/shuttle/arrival)
"Zm" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"Zu" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
dir = 8
},
/obj/machinery/light/small{
dir = 4
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"x" = (
/obj/structure/closet/emcloset,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"y" = (
/obj/machinery/light,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"z" = (
/obj/item/radio/intercom{
name = "Station Intercom (General)";
pixel_y = -29
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/machinery/light,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/arrival)
"A" = (
/obj/structure/shuttle/engine/propulsion/burst/left{
dir = 4
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/turf/open/floor/plating/airless,
/area/shuttle/arrival)
"S" = (
/turf/open/floor/mineral/titanium,
"Zw" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 9
},
/turf/open/floor/plasteel/dark{
dir = 1;
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
"ZT" = (
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
icon_state = "arrivals43"
},
/area/shuttle/arrival)
"ZZ" = (
/obj/effect/turf_decal/tile/neutral{
dir = 6
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_plate"
},
/area/shuttle/arrival)
(1,1,1) = {"
a
b
o
d
d
b
a
KB
TW
cn
ks
cO
Al
KB
"}
(2,1,1) = {"
a
b
p
S
v
b
a
KB
Wi
YZ
vk
fF
gC
KB
"}
(3,1,1) = {"
a
b
q
S
w
b
a
mi
uC
uf
vk
Sp
cw
ZT
"}
(4,1,1) = {"
b
b
b
t
b
b
b
fS
CA
qS
My
yU
pB
lo
"}
(5,1,1) = {"
b
e
S
S
S
x
b
Sb
gu
Pb
QB
Dm
Zg
eb
"}
(6,1,1) = {"
c
f
r
r
r
f
c
oD
kF
ZZ
mA
Zm
sd
HU
"}
(7,1,1) = {"
b
g
f
f
f
y
b
ph
Zu
JU
mA
Zw
WO
lE
"}
(8,1,1) = {"
d
h
r
r
r
f
d
EA
Zu
JU
mA
Zw
WO
jg
"}
(9,1,1) = {"
d
i
f
f
f
f
d
SE
Zu
JU
mA
Zw
WO
Kb
"}
(10,1,1) = {"
d
j
r
r
r
f
d
nO
Zu
JU
mA
Zw
WO
yl
"}
(11,1,1) = {"
d
k
f
f
f
f
d
oD
qw
ZZ
UU
Zm
QK
HU
"}
(12,1,1) = {"
b
l
r
r
r
z
b
Ov
Il
OQ
rC
gK
sk
OT
"}
(13,1,1) = {"
c
f
S
S
S
f
c
kq
VR
gN
Pr
ze
dO
lt
"}
(14,1,1) = {"
b
m
m
m
m
m
b
pZ
KN
PR
xW
Qd
nC
ov
"}
(15,1,1) = {"
b
n
s
u
s
A
b
WM
Lv
qa
We
de
zV
qz
"}
File diff suppressed because it is too large Load Diff
+65 -26
View File
@@ -4,57 +4,96 @@
name = "Escape Pod Airlock"
},
/obj/docking_port/mobile/pod{
port_direction = 2;
dwidth = 1;
width = 3;
height = 4
height = 4;
port_direction = 2;
width = 3
},
/obj/structure/fans/tiny,
/turf/open/floor/mineral/titanium/blue,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/pod_1)
"d" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod6"
},
/area/shuttle/pod_1)
"f" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod8"
},
/area/shuttle/pod_1)
"g" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod3"
},
/area/shuttle/pod_1)
"j" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod4"
},
/area/shuttle/pod_1)
"B" = (
/turf/closed/wall/mineral/titanium,
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod2"
},
/area/shuttle/pod_1)
"G" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/machinery/status_display/evac{
pixel_x = 32
},
/obj/machinery/computer/shuttle/pod{
pixel_x = -32
dir = 4;
pixel_x = -19
},
/obj/item/radio/intercom{
pixel_x = 26
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/pod_1)
"J" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod0"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_1)
"Q" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/turf/closed/wall/mineral/titanium/custom/window/pod{
icon_state = "pod1"
},
/area/shuttle/pod_1)
"U" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/item/radio/intercom{
pixel_x = 25
},
/obj/item/storage/pod{
pixel_x = -26
dir = 8;
pixel_x = 30
},
/obj/machinery/light/small{
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/titanium/blue,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/pod_1)
"W" = (
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod5"
},
/area/shuttle/pod_1)
"Z" = (
/obj/structure/shuttle/engine/propulsion/burst,
/turf/closed/wall/mineral/titanium,
/turf/closed/wall/mineral/titanium/custom/pod{
icon_state = "pod7"
},
/area/shuttle/pod_1)
(1,1,1) = {"
B
B
B
g
W
Z
"}
(2,1,1) = {"
@@ -64,8 +103,8 @@ U
a
"}
(3,1,1) = {"
B
B
B
Z
J
d
j
f
"}
+614 -136
View File
@@ -1,196 +1,674 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"c" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"d" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"e" = (
/obj/structure/shuttle/engine/propulsion/left{
dir = 8
"bx" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry41"
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"f" = (
/obj/structure/shuttle/engine/heater{
dir = 8
"bF" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry17"
},
/obj/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"g" = (
/obj/structure/chair/comfy/shuttle,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"h" = (
/obj/machinery/light{
dir = 1
"cB" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry2"
},
/turf/open/floor/pod/light,
/area/shuttle/transport)
"i" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"j" = (
/obj/structure/shuttle/engine/heater{
dir = 8
"fd" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry29"
},
/obj/structure/window/reinforced{
/area/shuttle/transport)
"gv" = (
/obj/effect/turf_decal/loading_area/white{
dir = 4;
icon_state = "loadingarea_white_flip"
},
/turf/open/floor/plasteel/dark{
dir = 4;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"hh" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry37"
},
/area/shuttle/transport)
"hF" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/open/floor/plating/airless,
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/structure/window/reinforced/survival_pod,
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
icon_state = "floor_whole_alt"
},
/area/shuttle/transport)
"k" = (
/obj/machinery/light/small,
/turf/open/floor/pod/light,
"hP" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry32"
},
/area/shuttle/transport)
"l" = (
/obj/machinery/door/airlock/titanium,
/turf/open/floor/pod/light,
"iS" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry28"
},
/area/shuttle/transport)
"m" = (
"jH" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry3"
},
/area/shuttle/transport)
"jI" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry19"
},
/area/shuttle/transport)
"kh" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 5;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"kD" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/structure/window/reinforced/survival_pod{
dir = 4
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 5;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"mw" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry33"
},
/area/shuttle/transport)
"mA" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry34"
},
/area/shuttle/transport)
"oc" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry7"
},
/area/shuttle/transport)
"of" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry1"
},
/area/shuttle/transport)
"oN" = (
/turf/template_noop,
/area/template_noop)
"oZ" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry24"
},
/area/shuttle/transport)
"pc" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry36"
},
/area/shuttle/transport)
"qx" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry8"
},
/area/shuttle/transport)
"qC" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry22"
},
/area/shuttle/transport)
"qE" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry35"
},
/area/shuttle/transport)
"qF" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry20"
},
/area/shuttle/transport)
"ry" = (
/obj/machinery/computer/shuttle/ferry/request{
dir = 8
},
/turf/open/floor/pod/dark,
/obj/effect/turf_decal/loading_area{
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain_corner";
name = "drain"
},
/obj/structure/window/reinforced/survival_pod,
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
icon_state = "floor_whole_alt"
},
/area/shuttle/transport)
"n" = (
/obj/machinery/door/airlock/titanium,
"uw" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry21"
},
/area/shuttle/transport)
"vp" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry23"
},
/area/shuttle/transport)
"vy" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry25"
},
/area/shuttle/transport)
"wR" = (
/obj/machinery/door/airlock/shuttle{
name = "ferry airlock";
req_access_txt = "101"
},
/obj/structure/fans/tiny,
/obj/docking_port/mobile{
dir = 8;
dwidth = 2;
dwidth = 3;
height = 13;
id = "ferry";
name = "ferry shuttle";
port_direction = 1;
preferred_direction = 4;
width = 5
preferred_direction = 8;
width = 7
},
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/turf/open/floor/pod/light,
/area/shuttle/transport)
"o" = (
"xZ" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry13"
},
/area/shuttle/transport)
"yR" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry14"
},
/area/shuttle/transport)
"zV" = (
/obj/structure/flora/ausbushes/ywflowers,
/obj/structure/flora/ausbushes/palebush,
/obj/structure/window/reinforced/fulltile,
/turf/open/floor/grass,
/area/shuttle/transport)
"Ax" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry15"
},
/area/shuttle/transport)
"AD" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry40"
},
/area/shuttle/transport)
"AS" = (
/obj/machinery/door/airlock/shuttle{
name = "ferry storage";
req_access_txt = "101"
},
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/transport)
"CX" = (
/obj/structure/shuttle/engine/heater{
dir = 8
},
/obj/structure/window/reinforced{
dir = 1;
pixel_y = 1
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"p" = (
/obj/structure/chair/comfy/shuttle{
/obj/structure/window/reinforced/survival_pod{
dir = 1
},
/obj/structure/window/reinforced/survival_pod,
/obj/structure/window/reinforced/survival_pod{
dir = 4
},
/obj/structure/flora/crystal/medium/growth{
icon_state = "crystalgrowth2"
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"q" = (
/obj/machinery/light,
/turf/open/floor/pod/light,
"Fq" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/obj/machinery/light{
pixel_y = -1
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"r" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
/turf/open/floor/pod/light,
"Fr" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry16"
},
/area/shuttle/transport)
"GK" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry30"
},
/area/shuttle/transport)
"GN" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry31"
},
/area/shuttle/transport)
"IB" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry12"
},
/area/shuttle/transport)
"IR" = (
/obj/effect/turf_decal/bot,
/obj/structure/closet/crate,
/obj/item/storage/toolbox/mechanical,
/obj/item/toy/plush/lizardplushie/arctaisia,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
/area/shuttle/transport)
"LT" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 1;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"Mu" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/obj/structure/window/reinforced/survival_pod{
dir = 8
},
/obj/effect/turf_decal/loading_area{
color = "#55391A";
dir = 9;
icon_state = "siding_wood_line";
name = "wood"
},
/turf/open/floor/wood{
icon_state = "wood_parquet";
name = "parquet"
},
/area/shuttle/transport)
"MI" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "trim";
name = "trim"
},
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/dark{
dir = 8;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"MY" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry11"
},
/area/shuttle/transport)
"Na" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry5"
},
/area/shuttle/transport)
"OB" = (
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/transport)
"Qx" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry4"
},
/area/shuttle/transport)
"Rt" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry38"
},
/area/shuttle/transport)
"Sg" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
name = "drain"
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "half_stairs";
name = "steps"
},
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain_corner";
name = "drain"
},
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "steel_decals_central6_corner";
name = "maintenance hatch"
},
/turf/open/floor/plasteel{
dir = 1;
icon_state = "floor_plate"
},
/area/shuttle/transport)
"SB" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry26"
},
/area/shuttle/transport)
"Tb" = (
/turf/closed/wall/mineral/titanium/custom/window/ferry{
dir = 1;
icon_state = "ferry0"
},
/area/shuttle/transport)
"Tr" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "trim";
name = "trim"
},
/obj/machinery/light{
pixel_y = -1
},
/turf/open/floor/plasteel/dark{
dir = 8;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"TT" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry10"
},
/area/shuttle/transport)
"Uu" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
icon_state = "trim";
name = "trim"
},
/turf/open/floor/plasteel/dark{
dir = 8;
icon_state = "darkfull_plate"
},
/area/shuttle/transport)
"UV" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry9"
},
/area/shuttle/transport)
"Vq" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry18"
},
/area/shuttle/transport)
"VV" = (
/obj/machinery/computer{
dir = 4
},
/turf/open/floor/plasteel/dark{
dir = 4;
icon_state = "darkfull_whole"
},
/area/shuttle/transport)
"WS" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry27"
},
/area/shuttle/transport)
"Yi" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry6"
},
/area/shuttle/transport)
"Zj" = (
/obj/item/radio/intercom{
freerange = 1;
listening = 0;
name = "Custom Channel";
pixel_y = 19
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_trim"
},
/area/shuttle/transport)
"ZJ" = (
/turf/closed/wall/mineral/titanium/custom/ferry{
dir = 1;
icon_state = "ferry39"
},
/area/shuttle/transport)
(1,1,1) = {"
a
a
e
a
a
oN
oN
oN
oN
oN
oN
oN
"}
(2,1,1) = {"
a
e
j
e
a
oN
hh
WS
SB
jI
Ax
oN
"}
(3,1,1) = {"
a
f
i
o
a
bx
Rt
VV
CX
IR
Fr
Qx
"}
(4,1,1) = {"
a
b
k
b
a
mw
ZJ
MI
Uu
Tr
bF
Tb
"}
(5,1,1) = {"
b
b
l
b
b
mA
AD
qF
AS
xZ
Vq
of
"}
(6,1,1) = {"
c
g
i
p
c
qE
hP
Sg
OB
LT
IB
cB
"}
(7,1,1) = {"
b
g
i
p
b
pc
iS
hF
OB
Fq
Na
jH
"}
(8,1,1) = {"
b
h
i
i
b
oN
fd
ry
OB
kD
Yi
oN
"}
(9,1,1) = {"
d
i
m
i
r
oN
GK
uw
OB
Mu
oc
oN
"}
(10,1,1) = {"
b
i
i
q
b
oN
GN
qC
OB
Fq
qx
oN
"}
(11,1,1) = {"
b
g
i
p
b
oN
oN
vp
Zj
kh
UV
oN
"}
(12,1,1) = {"
c
g
i
p
c
oN
oN
oZ
gv
zV
TT
oN
"}
(13,1,1) = {"
b
c
n
c
b
oN
oN
vy
wR
yR
MY
oN
"}
+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,6 +67,10 @@
#define ACCESS_ENTER_GENPOP 69
#define ACCESS_LEAVE_GENPOP 70
#define ACCESS_PSYCH 71
#define ACCESS_LAMBENT 72
#define ACCESS_BARBER 73
#define ACCESS_BARISTA 74
//BEGIN CENTCOM ACCESS
/*Should leave plenty of room if we need to add more access levels.
+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))
+4 -1
View File
@@ -14,6 +14,7 @@
#define CYBORG (1<<10)
#define JR_OFFICER (1<<11)
#define JR_ENGINEER (1<<12)
#define LAMBENT (1<<13)
#define MEDSCI (1<<1)
@@ -46,6 +47,8 @@
#define CLOWN (1<<11)
#define MIME (1<<12)
#define ASSISTANT (1<<13)
#define BARBER (1<<14)
#define BARISTA (1<<15)
#define JOB_AVAILABLE 0
#define JOB_UNAVAILABLE_GENERIC 1
@@ -53,4 +56,4 @@
#define JOB_UNAVAILABLE_PLAYTIME 3
#define JOB_UNAVAILABLE_ACCOUNTAGE 4
#define JOB_UNAVAILABLE_SLOTFULL 5
#define JOB_UNAVAILABLE_WHITELIST 6
#define JOB_UNAVAILABLE_WHITELIST 6
+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"
+4
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
@@ -289,3 +290,6 @@
//Gremlins
#define NPC_TAMPER_ACT_FORGET 1 //Don't try to tamper with this again
#define NPC_TAMPER_ACT_NOMSG 2 //Don't produce a visible message
//Upstream stuff
#define SLEEP_CHECK_DEATH(X) sleep(X); if(QDELETED(src) || stat == DEAD) return;
+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)
+4 -3
View File
@@ -170,12 +170,13 @@
L.transform = newtransform
animate(L, transform = matrix(), time = T, loop = -1, flags = ANIMATION_END_NOW)
animate(L, transform = L.transform, time = 0, loop = -1, flags = ANIMATION_END_NOW)
animate(transform = matrix(), time = T)
/datum/hud/proc/update_parallax()
var/client/C = mymob.client
var/turf/posobj = get_turf(C.eye)
if(!posobj)
if(!posobj)
return
var/area/areaobj = posobj.loc
@@ -341,7 +342,7 @@
//Layenia parallaxes
/obj/screen/parallax_layer/layenia
icon_state = null
icon_state = null
blend_mode = BLEND_OVERLAY
absolute = TRUE
speed = 0.6
@@ -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)
+24 -6
View File
@@ -446,7 +446,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/crew_quarters/lounge
name = "Lounge"
icon_state = "yellow"
icon_state = "lounge"
/area/crew_quarters/fitness
name = "Fitness Room"
@@ -495,6 +495,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Theatre"
icon_state = "Theatre"
/area/crew_quarters/theatre/main
name = "Entertainment Theatre"
icon_state = "Theatre"
/area/crew_quarters/theatre/abandoned
name = "Abandoned Theatre"
icon_state = "Theatre"
@@ -1372,7 +1376,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Xenoarchaeology Medical"
icon_state = "xenomed"
//Pool
//Pool and Hyper additions
/area/crew_quarters/fitness/pool
name = "Pool Area"
icon_state = "pool"
@@ -1384,11 +1388,25 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/arcade
name = "Arcade"
icon_state = "yellow"
icon_state = "arcade"
/area/artatrium
name = "Art Atrium"
icon_state = "library"
/area/medical/psych/ward
name = "Psychology Ward"
/area/medical/psych/therapy
name = "Therapy Office"
/area/medical/psych/rec
name = "Psychology Recreation"
/area/medical/psych/lobby
name = "Psychology Lobby"
/area/medical/psych/roomA
name = "Physchology Dorm A"
/area/medical/psych/roomB
name = "Physchology Dorm A"
//Diner
/area/diner
+6
View File
@@ -10,6 +10,12 @@ area/layenia
atmos = FALSE
flags_1 = NONE
area/layenia/cave
name = "Layenia Caves"
icon_state = "mining"
outdoors = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
area/layenia/cloudlayer
name = "Layenia clouds"
icon_state = "space"
+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
@@ -437,7 +437,7 @@
repeatable = TRUE
//property_weights = list("extended" = -1, "chaos" = 1)
occurances_max = 1
chaos_min = 1.8
chaos_min = 2.5 //Increased due to how big the station is
/datum/dynamic_ruleset/event/carp_migration
name = "Carp Migration"
@@ -102,6 +102,13 @@ GLOBAL_LIST_EMPTY(announcement_systems)
else if(message_type == "ARRIVALS_BROKEN")
message = "The arrivals shuttle has been damaged. Docking for repairs..."
//Hyper edit
else if (message_type == "ONDUTY")
message = CompileText(onduty, user, rank)
else if (message_type == "OFFDUTY")
message = CompileText(offduty, user, rank)
//Hyper edit end
if(channels.len == 0)
radio.talk_into(src, message, null)
else
+7 -1
View File
@@ -11,8 +11,9 @@
openSound = 'hyperstation/sound/machines/shutter.ogg'
closeSound = 'hyperstation/sound/machines/shutter.ogg'
// temporarily changing it to open alt so you can see things on tables that also have shutters above them until I can figure some alternatives out.
/obj/machinery/door/poddoor/shutters/preopen
icon_state = "open"
icon_state = "open_alt"
density = FALSE
opacity = 0
@@ -68,3 +69,8 @@
/obj/machinery/door/poddoor/shutters/window/preopen
icon_state = "open"
density = FALSE
//my not so successful attempt to make the new shutters let you see what's under them when above tables.
/obj/machinery/door/poddoor/shutters/preopen/alt
icon_state = "open_alt"
density = FALSE
+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,6 +408,21 @@
desc = "A poster advertising a movie about some masked men."
icon_state = "poster44"
/obj/structure/sign/poster/contraband/moffuchis_pizza
name = "Moffy's Pizzeria"
desc = "Moffy's Pizzeria™: family style pizza for 2 centuries."
icon_state = "poster45"
/obj/structure/sign/poster/contraband/donk_co
name = "DONK CO. BRAND MICROWAVEABLE FOOD"
desc = "DONK CO. BRAND MICROWAVABLE FOOD: MADE BY STARVING COLLEGE STUDENTS, FOR STARVING COLLEGE STUDENTS."
icon_state = "poster46"
/obj/structure/sign/poster/contraband/cybersun_six_hundred
name = "Saibāsan: 600 Years Commemorative Poster"
desc = "An artistic poster commemorating 600 years of continual business for Cybersun Industries."
icon_state = "poster47"
/obj/structure/sign/poster/official
poster_item_name = "motivational poster"
poster_item_desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface."
@@ -594,4 +609,29 @@
desc = "This informational poster teaches the viewer what carbon dioxide is."
icon_state = "poster35_legit"
/obj/structure/sign/poster/official/moth_hardhat
name = "Safety Moth - Hardhats"
desc = "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\""
icon_state = "poster36_legit"
/obj/structure/sign/poster/official/moth_piping
name = "Safety Moth - Piping"
desc = "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\""
icon_state = "poster37_legit"
/obj/structure/sign/poster/official/moth_meth
name = "Safety Moth - Methamphetamine"
desc = "This informational poster uses Safety Moth™ to tell the viewer to seek CMO approval before cooking methamphetamine. \"Stay close to the target temperature, and never go over!\" ...You shouldn't ever be making this."
icon_state = "poster38_legit"
/obj/structure/sign/poster/official/moth_epi
name = "Safety Moth - Epinephrine"
desc = "This informational poster uses Safety Moth™ to inform the viewer to help injured/deceased crewmen with their epinephrine injectors. \"Prevent organ rot with this one simple trick!\""
icon_state = "poster39_legit"
/obj/structure/sign/poster/official/corporate_perks_vacation
name = "Nanotrasen Corporate Perks: Vacation"
desc = "You wish you were here? You can be, Plan today and get 10% off your next vacation on us."
icon_state = "poster40_legit"
#undef PLACE_SPEED
@@ -9,4 +9,24 @@
/obj/effect/turf_decal/weather/snow/corner
name = "snow corner piece"
icon = 'icons/turf/snow.dmi'
icon_state = "snow_corner"
icon_state = "snow_corner"
/obj/effect/turf_decal/weather/grass
name = "grass box piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_box"
/obj/effect/turf_decal/weather/grass/line
name = "grass line piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_line"
/obj/effect/turf_decal/weather/grass/corner
name = "grass corner piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_corner"
/obj/effect/turf_decal/weather/grass/surround
name = "grass surround piece"
icon = 'icons/turf/grass.dmi'
icon_state = "grass_surround"
+3 -2
View File
@@ -126,7 +126,7 @@
H.update_body()
else
..()
/* SKYRAT EDIT REMOVAL
/obj/item/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
@@ -216,4 +216,5 @@
else
..()
else
..()
..()
*/
@@ -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])
+16 -1
View File
@@ -4,6 +4,8 @@
icon = 'icons/obj/dyespray.dmi'
icon_state = "dyespray"
var/uses = 10 //SKYRAT EDIT ADDITION
/obj/item/dyespray/attack_self(mob/user)
dye(user)
@@ -21,6 +23,10 @@
/obj/item/dyespray/proc/dye(mob/target)
if(!ishuman(target))
return
if(!uses) //SKYRAT EDIT ADDITION
return //SKYRAT EDIT ADDITION
var/mob/living/carbon/human/human_target = target
var/new_hair_color = input(usr, "Choose a base hair color:", "Character Preference","#"+human_target.hair_color) as color|null
@@ -42,4 +48,13 @@
if(!do_after(usr, 30, target = human_target))
return
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
human_target.update_hair()
human_target.update_hair()
//SKYRAT EDIT ADDITION
uses--
/obj/item/dyespray/examine(mob/user)
. = ..()
. += "It has [uses] uses left."
//SKYRAT EDIT END
@@ -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,6 +657,34 @@
item_state = "moffplush"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/safetymoth
name = "Safety Moth"
desc = "A limited edition Safety Moth™ plush, Can you collect them all?"
icon_state = "safetymoth"
item_state = "safetymoth"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/safetymoth_engineer
name = "Engineer Safety Moth"
desc = "A limited edition Engineer Safety Moth™ plush, Can you collect them all?"
icon_state = "safetymoth_engineer"
item_state = "safetymoth_engineer"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/safetymoth_doctor
name = "Doctor Safety Moth"
desc = "A limited edition Doctor Safety Moth™ plush, Can you collect them all?"
icon_state = "safetymoth_doctor"
item_state = "safetymoth_doctor"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/mothplushie/moffplush/Moffy
name = "Chef Moffy plushie"
desc = "A rebranded Safety Moth™ plush by there sister company Moffy's Pizzeria Entertainment™"
icon_state = "Moffy"
item_state = "Moffy"
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
/obj/item/toy/plush/xeno
name = "xenohybrid plushie"
desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
@@ -766,6 +794,15 @@
item_state = "kenk"
squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
/obj/item/toy/plush/enchanted
name = "glowing book plushie"
desc = "This book is so powerful, you can't open it."
young = TRUE
icon_state = "bookenchanted"
item_state = "bookenchanted"
squeak_override = list('hyperstation/sound/effects/enchant.ogg' = 1)
attack_verb = list("enchants", "mystifies", "disenchants", "fails to enchant", "doesn't have enough XP to enchant", "bonks")
/obj/item/toy/plush/sergal
name = "sergal plushie"
desc = "An adorable stuffed plushie that resembles a sagaru."
@@ -948,6 +985,13 @@
icon_state = "marisol"
item_state = "marisol"
/obj/item/toy/plush/mammal/freddy
name = "felix fastbear plushie"
desc = "An adorable bear plushie that resembles felix fastbear from Moffy's Pizzeria Entertainment™"
icon_state = "freddy"
item_state = "freddy"
squeak_override = list('sound/items/toysqueak1.ogg' = 1)
/obj/item/toy/plush/catgirl
name = "feline plushie"
desc = "An adorable stuffed toy that resembles a feline."
@@ -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,6 +49,13 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, one_per_turf = TRUE, on_floor = TRUE) \
)), \
//END OF CIT CHANGES
new/datum/stack_recipe_list("bench", \
list( \
new/datum/stack_recipe("bench (middle)", /obj/structure/chair/bench/metal, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("bench (left)", /obj/structure/chair/bench/metal/left, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("bench (right)", /obj/structure/chair/bench/metal/right, one_per_turf = TRUE, on_floor = TRUE), \
)), \
null, \
new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \
null, \
//add this when I can find a way to make them easily constructible > new/datum/stack_recipe("sink", /obj/structure/sink, 2, one_per_turf = TRUE, on_floor = TRUE),
@@ -474,6 +481,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, \
+53 -1
View File
@@ -177,6 +177,24 @@
icon_state = "cheeseburgerbackpack"
item_state = "cheeseburgerbackpack"
/obj/item/storage/backpack/lambent
name = "holostorage drone"
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
icon_state = "lambentbackpack"
item_state = "lambentbackpack"
//component_type
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
/obj/item/storage/backpack/lambent/dropped(mob/user)
src.icon_state = "lambentbackpack_off"
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
/obj/item/storage/backpack/lambent/pickup(mob/living/user)
src.icon_state = "lambentbackpack"
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
/*
* Satchel Types
*/
@@ -195,6 +213,23 @@
/obj/item/storage/backpack/satchel/leather/withwallet/PopulateContents()
new /obj/item/storage/wallet/random(src)
/obj/item/storage/backpack/satchel/lambent
name = "holostorage drone"
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
icon_state = "lambentsatchel"
item_state = "lambentsatchel"
//component_type
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
/obj/item/storage/backpack/satchel/lambent/dropped(mob/user)
src.icon_state = "lambentsatchel_off"
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
/obj/item/storage/backpack/satchel/lambent/pickup(mob/living/user)
src.icon_state = "lambentsatchel"
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
/obj/item/storage/backpack/satchel/eng
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
@@ -340,6 +375,23 @@
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_combined_w_class = 30
/obj/item/storage/backpack/duffelbag/lambent
name = "holostorage drone"
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
icon_state = "lambentduffel"
item_state = "lambentduffel"
//component_type
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
/obj/item/storage/backpack/duffelbag/lambent/dropped(mob/user)
src.icon_state = "lambentduffel_off"
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
/obj/item/storage/backpack/duffelbag/lambent/pickup(mob/living/user)
src.icon_state = "lambentduffel"
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
/obj/item/storage/backpack/duffelbag/captain
name = "captain's duffel bag"
desc = "A large duffel bag for holding extra captainly goods."
@@ -365,7 +417,7 @@
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/razor(src)
//new /obj/item/razor(src)
new /obj/item/reagent_containers/medspray/sterilizine(src)
/obj/item/storage/backpack/duffelbag/sec
+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,6 +299,7 @@
name = "industrial welding tool"
desc = "A slightly larger welder with a larger tank."
icon_state = "indwelder"
item_state = "indwelder"
max_fuel = 40
materials = list(MAT_GLASS=60)
@@ -315,6 +316,7 @@
name = "emergency welding tool"
desc = "A miniature welder used during emergencies."
icon_state = "miniwelder"
item_state = "miniwelder"
max_fuel = 10
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL=30, MAT_GLASS=10)
+2 -1
View File
@@ -14,6 +14,7 @@
if(icon_state == "mirror_broke" && !broken)
obj_break(null, mapload)
/* SKYRAT EDIT REMOVAL
/obj/structure/mirror/attack_hand(mob/user)
. = ..()
if(.)
@@ -44,7 +45,7 @@
H.hair_style = new_style
H.update_hair()
*/
/obj/structure/mirror/examine_status(mob/user)
if(broken)
return // no message spam
+6 -1
View File
@@ -133,4 +133,9 @@
/obj/structure/sign/logo/kinaris
name = "kinaris logo"
desc = "The Kinaris corprate logo. Radiant."
icon_state = "kinaris_sign1"
icon_state = "kinaris_sign1"
/obj/structure/sign/logo/cpr
name = "Challenge Pissing Room"
desc = "The league of challenge pissing"
icon_state = "CPR_sign1"
+70 -59
View File
@@ -485,65 +485,6 @@
/obj/structure/window/fulltile,
/obj/structure/window/reinforced/fulltile,
/obj/structure/window/reinforced/tinted/fulltile,
/obj/machinery/door,
/obj/machinery/door/airlock/,
/obj/machinery/door/airlock/mining,
/obj/machinery/door/airlock/mining/glass,
/obj/machinery/door/airlock/medical,
/obj/machinery/door/airlock/medical/glass,
/obj/machinery/door/airlock/public,
/obj/machinery/door/airlock/public/glass,
/obj/machinery/door/airlock/research,
/obj/machinery/door/airlock/research/glass,
/obj/machinery/door/airlock/maintenance,
/obj/machinery/door/airlock/maintenance/glass,
/obj/machinery/door/airlock/command/,
/obj/machinery/door/airlock/command/glass,
/obj/machinery/door/airlock/engineering,
/obj/machinery/door/airlock/engineering/glass,
/obj/machinery/door/airlock/engineering/abandoned,
/obj/machinery/door/airlock/security,
/obj/machinery/door/airlock/security/glass,
/obj/machinery/door/airlock/maintenance/abandoned,
/obj/machinery/door/poddoor/shutters/preopen,
/obj/machinery/door/poddoor/shutters,
/obj/machinery/door/window/eastright,
/obj/machinery/door/window/eastleft,
/obj/machinery/door/window/northleft,
/obj/machinery/door/window/northright,
/obj/machinery/door/airlock/external,
/obj/machinery/door/airlock,
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
/obj/machinery/door/airlock/highsecurity,
/turf/closed/wall/mineral/sandstone,
/obj/structure/falsewall/sandstone,)
// canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
glass_amount = 2
/obj/structure/window/fulltile/unanchored
anchored = FALSE
/obj/structure/window/plasma/fulltile
icon = 'icons/obj/smooth_structures/plasma_window.dmi'
icon_state = "plasmawindow"
dir = FULLTILE_WINDOW_DIR
max_integrity = 300
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
smooth = SMOOTH_TRUE
//canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
canSmoothWith = list(
/turf/closed/wall,
/turf/closed/wall/r_wall,
/obj/structure/falsewall,
/obj/structure/falsewall/brass,
/obj/structure/falsewall/reinforced,
/turf/closed/wall/rust,
/turf/closed/wall/r_wall/rust,
/turf/closed/wall/clockwork,
/obj/structure/window/plasma/fulltile,
/obj/structure/window/plasma/reinforced/fulltile,
/obj/machinery/door,
@@ -578,6 +519,76 @@
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
/obj/machinery/door/airlock/highsecurity,
/obj/machinery/door/firedoor,
/turf/closed/wall/mineral/lead,
/turf/closed/wall/mineral/sandstone,
/obj/structure/falsewall/sandstone)
// canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
glass_amount = 2
/obj/structure/window/fulltile/unanchored
anchored = FALSE
/obj/structure/window/plasma/fulltile
icon = 'icons/obj/smooth_structures/plasma_window.dmi'
icon_state = "plasmawindow"
dir = FULLTILE_WINDOW_DIR
max_integrity = 300
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
smooth = SMOOTH_TRUE
//canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
canSmoothWith = list(
/turf/closed/wall,
/turf/closed/wall/r_wall,
/obj/structure/falsewall,
/obj/structure/falsewall/brass,
/obj/structure/falsewall/reinforced,
/turf/closed/wall/rust,
/turf/closed/wall/r_wall/rust,
/turf/closed/wall/clockwork,
/turf/closed/indestructible/riveted/,
/turf/closed/indestructible/riveted/uranium,
/obj/structure/window/fulltile,
/obj/structure/window/reinforced/fulltile,
/obj/structure/window/reinforced/tinted/fulltile,
/obj/structure/window/plasma/fulltile,
/obj/structure/window/plasma/reinforced/fulltile,
/obj/machinery/door,
/obj/machinery/door/airlock/,
/obj/machinery/door/airlock/mining,
/obj/machinery/door/airlock/mining/glass,
/obj/machinery/door/airlock/medical,
/obj/machinery/door/airlock/medical/glass,
/obj/machinery/door/airlock/public,
/obj/machinery/door/airlock/public/glass,
/obj/machinery/door/airlock/research,
/obj/machinery/door/airlock/research/glass,
/obj/machinery/door/airlock/maintenance,
/obj/machinery/door/airlock/maintenance/glass,
/obj/machinery/door/airlock/command/,
/obj/machinery/door/airlock/command/glass,
/obj/machinery/door/airlock/engineering,
/obj/machinery/door/airlock/engineering/glass,
/obj/machinery/door/airlock/engineering/abandoned,
/obj/machinery/door/airlock/security,
/obj/machinery/door/airlock/security/glass,
/obj/machinery/door/airlock/maintenance/abandoned,
/obj/machinery/door/poddoor/shutters/preopen,
/obj/machinery/door/poddoor/shutters,
/obj/machinery/door/window/eastright,
/obj/machinery/door/window/eastleft,
/obj/machinery/door/window/northleft,
/obj/machinery/door/window/northright,
/obj/machinery/door/airlock/external,
/obj/machinery/door/airlock,
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
/obj/machinery/door/airlock/highsecurity,
/obj/machinery/door/firedoor,
/turf/closed/wall/mineral/lead,
/turf/closed/indestructible/,
/turf/closed/indestructible/riveted,
/turf/closed/indestructible/fakeglass)
+2 -3
View File
@@ -121,7 +121,7 @@
gender = PLURAL
desc = "Clouds as far as the eye can see... Watch your step."
icon = 'icons/turf/space.dmi'
icon_state = "clouds"
icon_state = "cloud"
plane = PLANE_SPACE
tiled_dirt = FALSE
baseturfs = /turf/open/chasm/cloud
@@ -129,13 +129,12 @@
planetary_atmos = TRUE
initial_gas_mix = FROZEN_ATMOS
density = FALSE
vis_flags = 8
/turf/open/chasm/cloud/Initialize()
. = ..()
icon_state = SPACE_ICON_STATE
/turf/open/chasm/cloud/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
underlay_appearance.icon = 'icons/turf/space.dmi'
underlay_appearance.icon_state = SPACE_ICON_STATE
underlay_appearance.plane = PLANE_SPACE
return TRUE
@@ -85,10 +85,16 @@
var/ore_type = /obj/item/stack/ore/glass
var/turfverb = "uproot"
tiled_dirt = FALSE
var/floor_variance = 50
var/quantity_of_available_tiles = 2
var/environment_type = "grass"
/turf/open/floor/grass/Initialize()
var/proper_name = name
. = ..()
update_icon()
name = proper_name
if(prob(floor_variance))
icon_state = "[environment_type][rand(0,quantity_of_available_tiles)]"
/turf/open/floor/grass/attackby(obj/item/C, mob/user, params)
if((C.tool_behaviour == TOOL_SHOVEL) && params)
@@ -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 = 4
quantity_of_available_tiles = 5
//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
+50 -1
View File
@@ -220,4 +220,53 @@
girder_type = /obj/structure/girder/reinforced
explosion_block = 2
rad_insulation = RAD_NEAR_FULL_INSULATION
canSmoothWith = list(/turf/closed/wall/mineral/lead)
canSmoothWith = list(
/turf/closed/wall,
/turf/closed/wall/r_wall,
/obj/structure/falsewall,
/obj/structure/falsewall/brass,
/obj/structure/falsewall/reinforced,
/turf/closed/wall/rust,
/turf/closed/wall/r_wall/rust,
/turf/closed/wall/clockwork,
/turf/closed/indestructible/riveted/,
/turf/closed/indestructible/riveted/uranium,
/obj/structure/window/fulltile,
/obj/structure/window/reinforced/fulltile,
/obj/structure/window/reinforced/tinted/fulltile,
/obj/structure/window/plasma/fulltile,
/obj/structure/window/plasma/reinforced/fulltile,
/obj/machinery/door,
/obj/machinery/door/airlock/,
/obj/machinery/door/airlock/mining,
/obj/machinery/door/airlock/mining/glass,
/obj/machinery/door/airlock/medical,
/obj/machinery/door/airlock/medical/glass,
/obj/machinery/door/airlock/public,
/obj/machinery/door/airlock/public/glass,
/obj/machinery/door/airlock/research,
/obj/machinery/door/airlock/research/glass,
/obj/machinery/door/airlock/maintenance,
/obj/machinery/door/airlock/maintenance/glass,
/obj/machinery/door/airlock/command/,
/obj/machinery/door/airlock/command/glass,
/obj/machinery/door/airlock/engineering,
/obj/machinery/door/airlock/engineering/glass,
/obj/machinery/door/airlock/engineering/abandoned,
/obj/machinery/door/airlock/security,
/obj/machinery/door/airlock/security/glass,
/obj/machinery/door/airlock/maintenance/abandoned,
/obj/machinery/door/poddoor/shutters/preopen,
/obj/machinery/door/poddoor/shutters,
/obj/machinery/door/window/eastright,
/obj/machinery/door/window/eastleft,
/obj/machinery/door/window/northleft,
/obj/machinery/door/window/northright,
/obj/machinery/door/airlock/external,
/obj/machinery/door/airlock,
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
/obj/machinery/door/airlock/highsecurity,
/obj/machinery/door/firedoor,
/turf/closed/wall/mineral/lead)
+3 -1
View File
@@ -65,7 +65,9 @@
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
/obj/machinery/door/airlock/highsecurity)
/obj/machinery/door/airlock/highsecurity,
/obj/machinery/door/firedoor,
/turf/closed/wall/mineral/lead)
smooth = SMOOTH_TRUE
+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])
+147 -9
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,9 +1336,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(jobban_isbanned(user, rank))
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> BANNED</a></td></tr>"
continue
//Hyperstation Edit - Whitelisted roles
if((rank in GLOB.silly_positions) && (!sillyroles))
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> WHITELIST</a></td></tr>"
continue
if((rank in GLOB.important_positions) && (!importantroles)) //TODO: make whitelists a bit more accurate than "silly" and "important"
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> WHITELIST</a></td></tr>"
continue
//Hyperstation Edit end
var/required_playtime_remaining = job.required_playtime_remaining(user.client)
if(required_playtime_remaining)
HTML += "<font color=red>[rank]</font></td><td><font color=red> \[ [get_exp_format(required_playtime_remaining)] as [job.get_exp_req_type()] \] </font></td></tr>"
@@ -1898,8 +1955,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
@@ -2288,6 +2347,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
@@ -2435,9 +2569,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
@@ -2687,6 +2822,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
@@ -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"
+21 -7
View File
@@ -10,13 +10,27 @@
//Populate the deck.
/obj/item/toy/cards/deck/unum/populate_deck()
for(var/colour in list("Red","Yellow","Green","Blue"))
cards += "[colour] 0" //Uno, i mean, cough cough, Unum decks have only one colour of each 0, weird huh?
cards += new_card("[colour] 0") //Uno, i mean, cough cough, Unum decks have only one colour of each 0, weird huh?
for(var/k in 0 to 1) //two of each colour of number
cards += "[colour] skip"
cards += "[colour] reverse"
cards += "[colour] draw 2"
cards += new_card("[colour] skip")
cards += new_card("[colour] reverse")
cards += new_card("[colour] draw 2")
for(var/i in 1 to 9)
cards += "[colour] [i]"
cards += new_card("[colour] [i]")
for(var/k in 0 to 3) //4 wilds and draw 4s
cards += "Wildcard"
cards += "Draw 4"
cards += new_card("Wildcard")
cards += new_card("Draw 4")
//
// hyperstation edits below
// -- sarcoph (july 2022)
//
/obj/item/toy/cards/deck/unum/proc/new_card(name)
return list(list(
"name" = name,
"icon_state" = name,
"rotation" = null,
"face_up" = null
))
+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()
+12 -6
View File
@@ -127,13 +127,13 @@
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
/proc/get_all_accesses()
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT,
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
@@ -161,9 +161,9 @@
if(0)
return get_all_accesses()
if(1) //station general
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER)
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER, ACCESS_BARISTA, ACCESS_BARBER)
if(2) //security
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP)
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT)
if(3) //medbay
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH)
if(4) //research
@@ -224,6 +224,10 @@
return "RD Office"
if(ACCESS_BAR)
return "Bar"
if(ACCESS_BARBER)
return "Barber"
if(ACCESS_BARISTA)
return "Barista"
if(ACCESS_JANITOR)
return "Custodial Closet"
if(ACCESS_ENGINE)
@@ -322,6 +326,8 @@
return "Prison Turnstile Entrance"
if(ACCESS_LEAVE_GENPOP)
return "Prison Turnstile Exit"
if(ACCESS_LAMBENT)
return "Lambent's Quarters"
if(ACCESS_MINERAL_STOREROOM)
return "Mineral Storage"
if(ACCESS_MINISAT)
@@ -357,10 +363,10 @@
return "Code Scotch"
/proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Barista", "Barber", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern",
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Psychologist", "Medical Resident",
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie")
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie", "Lambent")
/proc/get_all_job_icons() //For all existing HUD icons
return get_all_jobs() + list("Prisoner")
+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_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
+3 -3
View File
@@ -170,7 +170,7 @@ Bartender
outfit = /datum/outfit/job/bartender
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
@@ -183,7 +183,7 @@ Bartender
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/bartender
suit = /obj/item/clothing/suit/armor/vest
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
backpack_contents = list(/obj/item/book/granter/action/drink_fling=1)
shoes = /obj/item/clothing/shoes/laceup
/*
@@ -195,7 +195,7 @@ Cook
department_head = list("Head of Personnel")
department_flag = CIVILIAN
faction = "Station"
total_positions = 2
total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+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_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
@@ -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,5 +1,6 @@
GLOBAL_LIST_INIT(command_positions, list(
"Captain",
"Lambent",
"Head of Personnel",
"Head of Security",
"Chief Engineer",
@@ -37,6 +38,8 @@ GLOBAL_LIST_INIT(supply_positions, list(
GLOBAL_LIST_INIT(civilian_positions, list(
"Head of Personnel",
"Barista",
"Barber",
"Bartender",
"Botanist",
"Cook",
@@ -60,6 +63,9 @@ GLOBAL_LIST_INIT(nonhuman_positions, list(
"Cyborg",
ROLE_PAI))
GLOBAL_LIST_INIT(important_positions, list(
"Lambent"))
GLOBAL_LIST_INIT(silly_positions, list(
"Clown",
"Mime"))
+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>", \
@@ -25,7 +25,7 @@
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if(skipface || get_visible_name() == "Unknown")
. += "You can't make out what species they are."
else
@@ -127,10 +127,15 @@
. += "<span class='love'>[t_He] [t_is] currently in heat.</span>"
//CIT CHANGES START HERE - adds genital details to examine text
if(LAZYLEN(internal_organs) && user.client?.prefs.cit_toggles & GENITAL_EXAMINE)
if(LAZYLEN(internal_organs) && user.client?.prefs.cit_toggles)
for(var/obj/item/organ/genital/dicc in internal_organs)
if(istype(dicc) && dicc.is_exposed())
. += "[dicc.desc]"
if(!dicc.equipment)
. += "[dicc.desc]"
else
. += "[dicc.desc] <span class='love'>It's equipped with a [dicc.equipment.name].</span>"
if(user.client?.prefs.cit_toggles & VORE_EXAMINE)
var/cursed_stuff = attempt_vr(src,"examine_bellies",args) //vore Code
@@ -188,10 +188,24 @@
if(legcuffed)
dat += "<tr><td><A href='?src=[REF(src)];item=[SLOT_LEGCUFFED]'>Legcuffed</A></td></tr>"
var/mob/living/carbon/U = src //for carbon genitals
if(U)
for(var/obj/item/organ/genital/G in U.internal_organs)
if(G.is_exposed())
if(!G.equipment)
dat += "<tr><td><B>[G.name]:</B></td><td><A href='?src=[REF(src)];item=[G.equipment]'>["<font color=grey>Empty</font>"]</A></td></tr>"
else
dat += "<tr><td><B>[G.name]:</B></td><td><A href='?src=[REF(src)];gitem=\ref[G.equipment]'>[G.equipment.name]</A></td></tr>"
else
dat += "<tr><td><font color=grey><B>[G.name]:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
dat += {"</table>
<A href='?src=[REF(user)];mach_close=mob[REF(src)]'>Close</A>
"}
var/datum/browser/popup = new(user, "mob[REF(src)]", "[src]", 440, 510)
popup.set_content(dat.Join())
popup.open()
@@ -243,6 +257,23 @@
to_chat(usr, "<span class='warning'>You can't reach that! Something is covering it.</span>")
return
if(href_list["gitem"])//remove gential item
var/obj/item/I = locate(href_list["gitem"])
var/obj/item/organ/genital/G = I.loc
if(G.is_exposed())
to_chat(usr, "<span class='notice'>You try to remove [src]'s [I].</span>")
to_chat(src, "<span class='warning'>[usr] is trying to remove your [I].</span>")
if(!do_mob(usr, src, 3 SECONDS))
return
SEND_SIGNAL(I, "detach_genital_equipment",usr)
usr.put_in_hands(I)
G.equipment = null
return
else
to_chat(usr, "<span class='warning'>You can't reach that! Something is covering it.</span>")
return
if(href_list["pockets"])
var/pocket_side = href_list["pockets"]
var/pocket_id = (pocket_side == "right" ? SLOT_R_STORE : SLOT_L_STORE)
@@ -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
@@ -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()
+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,6 +5,8 @@ $include dbconfig.txt
$include comms.txt
$include antag_rep.txt
$include donator_groupings.txt
# Hyperstation Configs...
$include hyperstation/jobs.txt
# You can use the @ character at the beginning of a config option to lock it from being edited in-game
# Example usage:
+12
View File
@@ -0,0 +1,12 @@
# Allow time off to be enabled
## Uncomment to allow players to use their accrued time off
## Defaults to off because this requires the database unless you want them to
## use only what they accrued during the current round
#TIME_OFF
# Allow PTO job changes
## Currently this is required if using the previous to allow users to change
## jobs. This may be changed in the future and can be used to expand the functionality
## for something such as on-the-go job changing within the department, without heads.
## Thus it remains here.
#PTO_JOB_CHANGE
+4 -1
View File
@@ -3,6 +3,7 @@
#Job names must be identical to the title var of each job datum
#Positions can be set to -1 to allow unlimited slots
Captain=1,1
Lambent=1,1
Head of Personnel=1,1
Head of Security=1,1
Chief Engineer=1,1
@@ -16,7 +17,9 @@ Cargo Technician=3,2
Shaft Miner=3,3
Bartender=1,1
Cook=2,1
Barista=1,1
Barber=2,1
Cook=1,1
Botanist=3,2
Janitor=2,1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+11
View File
@@ -0,0 +1,11 @@
///////////////
// PTO Types //
///////////////
#define PTO_COMMAND "Command"
#define PTO_SECURITY "Security"
#define PTO_MEDICAL "Medical"
#define PTO_ENGINEERING "Engineering"
#define PTO_SCIENCE "Science"
#define PTO_CARGO "Cargo"
#define PTO_CIVILIAN "Civilian"
#define PTO_CYBORG "Silicon"
@@ -0,0 +1,11 @@
/// Toggles time off for jobs
/datum/config_entry/flag/time_off
/// Toggles changing jobs with PTO
/datum/config_entry/flag/pto_job_change
/// PTO hour cap
/datum/config_entry/number/pto_cap
config_entry_value = 100 /// Total hours
min_val = 0 /// Minimum hourly value
integer = FALSE /// We can be a float for partial hours
@@ -0,0 +1,18 @@
/**
* Some modifications to the jobs subsystem, courtesy of SandPoot.
* If we pull from upstream we should have this somewhere at some point, so it's shoehorned
* in here for the moment.
* Insert unhelpful comment here.
*/
/datum/controller/subsystem/job/proc/get_job_name(job_name)
if (!job_name)
return "Unknown" // Invalid job
//var/all_alt_titles = get_all_alt_titles()
//if (job_name in all_alt_titles) // Check if the name is an alt title
//return get_job_name(all_alt_titles[job_name]) // Locate the original job title and return it
if (job_name in get_all_job_icons()) // Check if the job has a HUD icon
return job_name
if (job_name in get_all_centcom_jobs()) // Return the NT logo if it is a CentCom job
return "CentCom"
return "Unknown" // Return unknown if none of the above apply

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