mirror of
https://github.com/quotefox/Hyper-Station-13.git
synced 2026-08-24 21:26:12 +01:00
Merge pull request #1646 from quotefox/revert-1644-fairylights
Revert "Finally, MultiZ Layenia"
This commit is contained in:
Vendored
+4
-2
@@ -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
@@ -10,16 +10,8 @@
|
||||
},
|
||||
"traits":[
|
||||
{
|
||||
"Up": 1,
|
||||
"Gravity":true,
|
||||
"Baseturf":"/turf/open/chasm/cloud",
|
||||
"Linkage" : "Cross"
|
||||
},
|
||||
{
|
||||
"Down": -1,
|
||||
"Gravity":true,
|
||||
"Baseturf":"/turf/open/transparent/openspace",
|
||||
"Linkage" : "Cross"
|
||||
"Baseturf":"/turf/open/chasm/cloud"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+122401
-251885
File diff suppressed because it is too large
Load Diff
@@ -2482,6 +2482,11 @@
|
||||
name = "Bartenders Back Room"
|
||||
},
|
||||
/area/centcom/control)
|
||||
"cnW" = (
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/ferry)
|
||||
"coE" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
@@ -3696,20 +3701,6 @@
|
||||
/obj/item/stack/packageWrap,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/centcom/holding)
|
||||
"dzb" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Ferry Airlock"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/ferry)
|
||||
"dzX" = (
|
||||
/obj/item/twohanded/required/kirbyplants{
|
||||
icon_state = "plant-21"
|
||||
@@ -4260,6 +4251,18 @@
|
||||
},
|
||||
/turf/closed/indestructible/riveted,
|
||||
/area/space)
|
||||
"dUw" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Ferry Airlock"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/ferry)
|
||||
"dUD" = (
|
||||
/obj/structure/chair{
|
||||
dir = 1
|
||||
@@ -4634,6 +4637,10 @@
|
||||
/area/abductor_ship)
|
||||
"ejO" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/razor{
|
||||
pixel_x = 2;
|
||||
pixel_y = 5
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/centcom/ferry)
|
||||
"ejW" = (
|
||||
@@ -9333,12 +9340,17 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/centcom/ferry)
|
||||
"iFk" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
/obj/docking_port/stationary{
|
||||
dir = 8;
|
||||
dwidth = 2;
|
||||
height = 13;
|
||||
id = "ferry_away";
|
||||
json_key = "ferry";
|
||||
name = "CentCom Ferry Dock";
|
||||
width = 5
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/ferry)
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"iFv" = (
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
@@ -12927,7 +12939,6 @@
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/ferry)
|
||||
"mei" = (
|
||||
@@ -13069,6 +13080,9 @@
|
||||
/obj/item/storage/pill_bottle/mutarad{
|
||||
pixel_x = -7
|
||||
},
|
||||
/obj/item/razor{
|
||||
pixel_y = 12
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 4;
|
||||
pixel_x = 10;
|
||||
@@ -16170,18 +16184,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ctf)
|
||||
"oXv" = (
|
||||
/obj/docking_port/stationary{
|
||||
dir = 8;
|
||||
dwidth = 5;
|
||||
height = 13;
|
||||
id = "ferry_away";
|
||||
json_key = "ferry";
|
||||
name = "CentCom Ferry Dock";
|
||||
width = 11
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"oXF" = (
|
||||
/obj/structure/table/wood/fancy,
|
||||
/obj/item/camera/spooky,
|
||||
@@ -16859,6 +16861,7 @@
|
||||
"pFm" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/surgical_drapes,
|
||||
/obj/item/razor,
|
||||
/turf/open/floor/holofloor{
|
||||
icon_state = "white"
|
||||
},
|
||||
@@ -59742,7 +59745,7 @@ fWS
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
oXv
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
@@ -59998,9 +60001,9 @@ cJc
|
||||
eRA
|
||||
eRA
|
||||
fWS
|
||||
eRA
|
||||
dzb
|
||||
eRA
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
@@ -60255,9 +60258,9 @@ txL
|
||||
iyB
|
||||
eRA
|
||||
fWS
|
||||
eRA
|
||||
fWS
|
||||
iFk
|
||||
eRA
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
fWS
|
||||
@@ -60513,7 +60516,7 @@ hFM
|
||||
eDP
|
||||
fWS
|
||||
eRA
|
||||
iFk
|
||||
dUw
|
||||
eRA
|
||||
fWS
|
||||
eDP
|
||||
@@ -60770,7 +60773,7 @@ uYp
|
||||
eDP
|
||||
cQu
|
||||
eRA
|
||||
iFk
|
||||
cnW
|
||||
eRA
|
||||
pMV
|
||||
eDP
|
||||
|
||||
+231
-689
@@ -1,750 +1,292 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"cn" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals22"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"cw" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals38"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"cO" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals29"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"de" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals33"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"dO" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals42"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"eb" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals45"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"fF" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"fS" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals1"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"gu" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals15"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"gC" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals35"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"gK" = (
|
||||
/obj/structure/window/reinforced/fulltile,
|
||||
/obj/structure/flora/ausbushes/ywflowers,
|
||||
/obj/structure/flora/ausbushes/brflowers,
|
||||
/obj/structure/flora/ausbushes/grassybush,
|
||||
/obj/machinery/light{
|
||||
pixel_y = -1
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/arrival)
|
||||
"gN" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals20"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"jg" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals52"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"kq" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals10"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"ks" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals25"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"kF" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = -30
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_trim"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"lo" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals46"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"lt" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals49"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"lE" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals44"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"mi" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals2"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"mA" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 1;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_tile";
|
||||
name = "tile"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"nC" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals41"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"nO" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals4"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"ov" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals48"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"oD" = (
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Arrivals Shuttle Airlock"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"ph" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals3"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"pB" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals37"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"pZ" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals9"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"qa" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals26"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"qw" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_trim"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"qz" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals53"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"qS" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals21"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"rC" = (
|
||||
/obj/structure/window/reinforced/fulltile,
|
||||
/obj/structure/flora/ausbushes/ywflowers,
|
||||
/obj/structure/flora/ausbushes/ppflowers,
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/arrival)
|
||||
"sd" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = -30
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_trim"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"sk" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals39"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"uf" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"uC" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals13"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"vk" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"xW" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals27"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"yl" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals51"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"yU" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals28"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"ze" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals31"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"zV" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals40"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Al" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals32"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"CA" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals12"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Dm" = (
|
||||
/obj/machinery/light{
|
||||
pixel_y = -1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 9
|
||||
},
|
||||
/obj/structure/closet/emcloset{
|
||||
anchored = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"EA" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals6"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"HU" = (
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Arrivals Shuttle Airlock"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Il" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals18"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"JU" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Kb" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals47"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"KB" = (
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"KN" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals16"
|
||||
},
|
||||
"b" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/arrival)
|
||||
"Lv" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals19"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"My" = (
|
||||
"c" = (
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Arrivals Shuttle Airlock"
|
||||
},
|
||||
/obj/effect/turf_decal/delivery/white,
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"Ov" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals7"
|
||||
},
|
||||
"d" = (
|
||||
/obj/effect/spawner/structure/window/shuttle,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"OQ" = (
|
||||
/obj/structure/window/reinforced/fulltile,
|
||||
/obj/structure/flora/ausbushes/ywflowers,
|
||||
/obj/structure/flora/ausbushes/brflowers,
|
||||
/obj/structure/flora/ausbushes/leafybush,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/arrival)
|
||||
"OT" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals50"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Pb" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 6
|
||||
},
|
||||
"e" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"Pr" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals24"
|
||||
},
|
||||
"f" = (
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"PR" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals23"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Qd" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals34"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"QB" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 8;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 1;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_tile";
|
||||
name = "tile"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"QK" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_trim"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Sb" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals0"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Sp" = (
|
||||
"g" = (
|
||||
/obj/machinery/computer/arcade,
|
||||
/obj/machinery/light{
|
||||
pixel_y = -1
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"h" = (
|
||||
/obj/structure/closet/wardrobe/green,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"i" = (
|
||||
/obj/structure/closet/wardrobe/black,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"j" = (
|
||||
/obj/structure/closet/wardrobe/mixed,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"k" = (
|
||||
/obj/structure/closet/wardrobe/grey,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"l" = (
|
||||
/obj/machinery/requests_console{
|
||||
department = "Arrival shuttle";
|
||||
name = "Arrivals Shuttle console";
|
||||
pixel_y = 30
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"m" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/arrival)
|
||||
"n" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst/right{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/arrival)
|
||||
"o" = (
|
||||
/obj/structure/window/shuttle,
|
||||
/obj/structure/grille,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"p" = (
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"q" = (
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"r" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/arrival)
|
||||
"s" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/arrival)
|
||||
"t" = (
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Arrivals Shuttle Airlock"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/arrival)
|
||||
"u" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4
|
||||
},
|
||||
/obj/docking_port/mobile/arrivals,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/arrival)
|
||||
"v" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"TW" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals11"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"UU" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 4;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 1;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_tile";
|
||||
name = "tile"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"VR" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals17"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"We" = (
|
||||
/obj/docking_port/mobile/arrivals,
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals30"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"Wi" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals14"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"WM" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals8"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"WO" = (
|
||||
"w" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_plate"
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"YZ" = (
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
"x" = (
|
||||
/obj/structure/closet/emcloset,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"Zg" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/arrivals{
|
||||
icon_state = "arrivals36"
|
||||
},
|
||||
"y" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"Zm" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_plate"
|
||||
"z" = (
|
||||
/obj/item/radio/intercom{
|
||||
name = "Station Intercom (General)";
|
||||
pixel_y = -29
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"Zu" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_plate"
|
||||
"A" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst/left{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/arrival)
|
||||
"Zw" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 1;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"ZT" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/arrivals{
|
||||
icon_state = "arrivals43"
|
||||
},
|
||||
/area/shuttle/arrival)
|
||||
"ZZ" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
"S" = (
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/arrival)
|
||||
|
||||
(1,1,1) = {"
|
||||
KB
|
||||
TW
|
||||
cn
|
||||
ks
|
||||
cO
|
||||
Al
|
||||
KB
|
||||
a
|
||||
b
|
||||
o
|
||||
d
|
||||
d
|
||||
b
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
KB
|
||||
Wi
|
||||
YZ
|
||||
vk
|
||||
fF
|
||||
gC
|
||||
KB
|
||||
a
|
||||
b
|
||||
p
|
||||
S
|
||||
v
|
||||
b
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
mi
|
||||
uC
|
||||
uf
|
||||
vk
|
||||
Sp
|
||||
cw
|
||||
ZT
|
||||
a
|
||||
b
|
||||
q
|
||||
S
|
||||
w
|
||||
b
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
fS
|
||||
CA
|
||||
qS
|
||||
My
|
||||
yU
|
||||
pB
|
||||
lo
|
||||
b
|
||||
b
|
||||
b
|
||||
t
|
||||
b
|
||||
b
|
||||
b
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
Sb
|
||||
gu
|
||||
Pb
|
||||
QB
|
||||
Dm
|
||||
Zg
|
||||
eb
|
||||
b
|
||||
e
|
||||
S
|
||||
S
|
||||
S
|
||||
x
|
||||
b
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
oD
|
||||
kF
|
||||
ZZ
|
||||
mA
|
||||
Zm
|
||||
sd
|
||||
HU
|
||||
c
|
||||
f
|
||||
r
|
||||
r
|
||||
r
|
||||
f
|
||||
c
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
ph
|
||||
Zu
|
||||
JU
|
||||
mA
|
||||
Zw
|
||||
WO
|
||||
lE
|
||||
b
|
||||
g
|
||||
f
|
||||
f
|
||||
f
|
||||
y
|
||||
b
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
EA
|
||||
Zu
|
||||
JU
|
||||
mA
|
||||
Zw
|
||||
WO
|
||||
jg
|
||||
d
|
||||
h
|
||||
r
|
||||
r
|
||||
r
|
||||
f
|
||||
d
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
EA
|
||||
Zu
|
||||
JU
|
||||
mA
|
||||
Zw
|
||||
WO
|
||||
Kb
|
||||
d
|
||||
i
|
||||
f
|
||||
f
|
||||
f
|
||||
f
|
||||
d
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
nO
|
||||
Zu
|
||||
JU
|
||||
mA
|
||||
Zw
|
||||
WO
|
||||
yl
|
||||
d
|
||||
j
|
||||
r
|
||||
r
|
||||
r
|
||||
f
|
||||
d
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
oD
|
||||
qw
|
||||
ZZ
|
||||
UU
|
||||
Zm
|
||||
QK
|
||||
HU
|
||||
d
|
||||
k
|
||||
f
|
||||
f
|
||||
f
|
||||
f
|
||||
d
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
Ov
|
||||
Il
|
||||
OQ
|
||||
rC
|
||||
gK
|
||||
sk
|
||||
OT
|
||||
b
|
||||
l
|
||||
r
|
||||
r
|
||||
r
|
||||
z
|
||||
b
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
kq
|
||||
VR
|
||||
gN
|
||||
Pr
|
||||
ze
|
||||
dO
|
||||
lt
|
||||
c
|
||||
f
|
||||
S
|
||||
S
|
||||
S
|
||||
f
|
||||
c
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
pZ
|
||||
KN
|
||||
PR
|
||||
xW
|
||||
Qd
|
||||
nC
|
||||
ov
|
||||
b
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
b
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
WM
|
||||
Lv
|
||||
qa
|
||||
We
|
||||
de
|
||||
zV
|
||||
qz
|
||||
b
|
||||
n
|
||||
s
|
||||
u
|
||||
s
|
||||
A
|
||||
b
|
||||
"}
|
||||
|
||||
+452
-2906
File diff suppressed because it is too large
Load Diff
@@ -4,96 +4,57 @@
|
||||
name = "Escape Pod Airlock"
|
||||
},
|
||||
/obj/docking_port/mobile/pod{
|
||||
dwidth = 1;
|
||||
height = 4;
|
||||
port_direction = 2;
|
||||
width = 3
|
||||
dwidth = 1;
|
||||
width = 3;
|
||||
height = 4
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/pod_1)
|
||||
"d" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod6"
|
||||
},
|
||||
/area/shuttle/pod_1)
|
||||
"f" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod8"
|
||||
},
|
||||
/area/shuttle/pod_1)
|
||||
"g" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod3"
|
||||
},
|
||||
/area/shuttle/pod_1)
|
||||
"j" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod4"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/pod_1)
|
||||
"B" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod2"
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/pod_1)
|
||||
"G" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = 32
|
||||
},
|
||||
/obj/machinery/computer/shuttle/pod{
|
||||
dir = 4;
|
||||
pixel_x = -19
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = 26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/pod_1)
|
||||
"J" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod0"
|
||||
pixel_x = -32
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/pod_1)
|
||||
"Q" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/pod{
|
||||
icon_state = "pod1"
|
||||
},
|
||||
/obj/effect/spawner/structure/window/shuttle,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pod_1)
|
||||
"U" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/storage/pod{
|
||||
dir = 8;
|
||||
pixel_x = 30
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = 25
|
||||
},
|
||||
/obj/machinery/light{
|
||||
/obj/item/storage/pod{
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/pod_1)
|
||||
"W" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod5"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/pod_1)
|
||||
"Z" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/pod{
|
||||
icon_state = "pod7"
|
||||
},
|
||||
/obj/structure/shuttle/engine/propulsion/burst,
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/pod_1)
|
||||
|
||||
(1,1,1) = {"
|
||||
B
|
||||
g
|
||||
W
|
||||
B
|
||||
B
|
||||
Z
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
@@ -103,8 +64,8 @@ U
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
J
|
||||
d
|
||||
j
|
||||
f
|
||||
B
|
||||
B
|
||||
B
|
||||
Z
|
||||
"}
|
||||
|
||||
+139
-617
@@ -1,674 +1,196 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"bx" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry41"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"bF" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry17"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"cB" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry2"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"fd" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry29"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"gv" = (
|
||||
/obj/effect/turf_decal/loading_area/white{
|
||||
dir = 4;
|
||||
icon_state = "loadingarea_white_flip"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 4;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"hh" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry37"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"hF" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_plating = "floor";
|
||||
icon_state = "floor_whole_alt"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"hP" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry32"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"iS" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry28"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"jH" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry3"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"jI" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry19"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"kh" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 5;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_parquet";
|
||||
name = "parquet"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"kD" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 5;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_parquet";
|
||||
name = "parquet"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"mw" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry33"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"mA" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry34"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"oc" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry7"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"of" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry1"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"oN" = (
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"oZ" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry24"
|
||||
},
|
||||
"b" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/transport)
|
||||
"pc" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry36"
|
||||
},
|
||||
"c" = (
|
||||
/obj/effect/spawner/structure/window/shuttle,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/transport)
|
||||
"qx" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry8"
|
||||
},
|
||||
"d" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/shuttle/transport)
|
||||
"qC" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry22"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"qE" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry35"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"qF" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry20"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"ry" = (
|
||||
/obj/machinery/computer/shuttle/ferry/request{
|
||||
"e" = (
|
||||
/obj/structure/shuttle/engine/propulsion/left{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 4;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 8;
|
||||
icon_state = "drain_corner";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_plating = "floor";
|
||||
icon_state = "floor_whole_alt"
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/transport)
|
||||
"uw" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry21"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"vp" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry23"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"vy" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry25"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"wR" = (
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
name = "ferry airlock";
|
||||
req_access_txt = "101"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/docking_port/mobile{
|
||||
dir = 8;
|
||||
dwidth = 3;
|
||||
height = 13;
|
||||
id = "ferry";
|
||||
name = "ferry shuttle";
|
||||
preferred_direction = 8;
|
||||
width = 7
|
||||
},
|
||||
/obj/effect/turf_decal/delivery/white,
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"xZ" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry13"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"yR" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry14"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"zV" = (
|
||||
/obj/structure/flora/ausbushes/ywflowers,
|
||||
/obj/structure/flora/ausbushes/palebush,
|
||||
/obj/structure/window/reinforced/fulltile,
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/transport)
|
||||
"Ax" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry15"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"AD" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry40"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"AS" = (
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
name = "ferry storage";
|
||||
req_access_txt = "101"
|
||||
},
|
||||
/obj/effect/turf_decal/delivery/white,
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"CX" = (
|
||||
"f" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod{
|
||||
/obj/structure/window/reinforced,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/transport)
|
||||
"g" = (
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/shuttle/transport)
|
||||
"h" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod,
|
||||
/obj/structure/window/reinforced/survival_pod{
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/transport)
|
||||
"i" = (
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/transport)
|
||||
"j" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/flora/crystal/medium/growth{
|
||||
icon_state = "crystalgrowth2"
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/transport)
|
||||
"k" = (
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/transport)
|
||||
"l" = (
|
||||
/obj/machinery/door/airlock/titanium,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/transport)
|
||||
"m" = (
|
||||
/obj/machinery/computer/shuttle/ferry/request{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/shuttle/transport)
|
||||
"Fq" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 1;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/obj/machinery/light{
|
||||
pixel_y = -1
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_parquet";
|
||||
name = "parquet"
|
||||
"n" = (
|
||||
/obj/machinery/door/airlock/titanium,
|
||||
/obj/docking_port/mobile{
|
||||
dir = 8;
|
||||
dwidth = 2;
|
||||
height = 13;
|
||||
id = "ferry";
|
||||
name = "ferry shuttle";
|
||||
port_direction = 1;
|
||||
preferred_direction = 4;
|
||||
width = 5
|
||||
},
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/transport)
|
||||
"Fr" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry16"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"GK" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry30"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"GN" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry31"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"IB" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry12"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"IR" = (
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/toy/plush/lizardplushie/arctaisia,
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_whole_alt"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"LT" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 1;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_parquet";
|
||||
name = "parquet"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Mu" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced/survival_pod{
|
||||
"o" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
color = "#55391A";
|
||||
dir = 9;
|
||||
icon_state = "siding_wood_line";
|
||||
name = "wood"
|
||||
},
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood_parquet";
|
||||
name = "parquet"
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1;
|
||||
pixel_y = 1
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/transport)
|
||||
"MI" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 8;
|
||||
icon_state = "trim";
|
||||
name = "trim"
|
||||
},
|
||||
/obj/machinery/light{
|
||||
"p" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 8;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/shuttle/transport)
|
||||
"MY" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry11"
|
||||
},
|
||||
"q" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/transport)
|
||||
"Na" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry5"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"OB" = (
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_trim"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Qx" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry4"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Rt" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry38"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Sg" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 8;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "drain";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "half_stairs";
|
||||
name = "steps"
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 4;
|
||||
icon_state = "drain_corner";
|
||||
name = "drain"
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1;
|
||||
icon_state = "steel_decals_central6_corner";
|
||||
name = "maintenance hatch"
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 1;
|
||||
icon_state = "floor_plate"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"SB" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry26"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Tb" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/window/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry0"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Tr" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 8;
|
||||
icon_state = "trim";
|
||||
name = "trim"
|
||||
},
|
||||
/obj/machinery/light{
|
||||
pixel_y = -1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 8;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"TT" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry10"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Uu" = (
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 8;
|
||||
icon_state = "trim";
|
||||
name = "trim"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 8;
|
||||
icon_state = "darkfull_plate"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"UV" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry9"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Vq" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry18"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"VV" = (
|
||||
/obj/machinery/computer{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
dir = 4;
|
||||
icon_state = "darkfull_whole"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"WS" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry27"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Yi" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry6"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"Zj" = (
|
||||
/obj/item/radio/intercom{
|
||||
freerange = 1;
|
||||
listening = 0;
|
||||
name = "Custom Channel";
|
||||
pixel_y = 19
|
||||
},
|
||||
/turf/open/floor/plasteel/dark{
|
||||
icon_state = "darkfull_trim"
|
||||
},
|
||||
/area/shuttle/transport)
|
||||
"ZJ" = (
|
||||
/turf/closed/wall/mineral/titanium/custom/ferry{
|
||||
dir = 1;
|
||||
icon_state = "ferry39"
|
||||
},
|
||||
"r" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/shuttle/transport)
|
||||
|
||||
(1,1,1) = {"
|
||||
oN
|
||||
oN
|
||||
oN
|
||||
oN
|
||||
oN
|
||||
oN
|
||||
oN
|
||||
a
|
||||
a
|
||||
e
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
oN
|
||||
hh
|
||||
WS
|
||||
SB
|
||||
jI
|
||||
Ax
|
||||
oN
|
||||
a
|
||||
e
|
||||
j
|
||||
e
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
bx
|
||||
Rt
|
||||
VV
|
||||
CX
|
||||
IR
|
||||
Fr
|
||||
Qx
|
||||
a
|
||||
f
|
||||
i
|
||||
o
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
mw
|
||||
ZJ
|
||||
MI
|
||||
Uu
|
||||
Tr
|
||||
bF
|
||||
Tb
|
||||
a
|
||||
b
|
||||
k
|
||||
b
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
mA
|
||||
AD
|
||||
qF
|
||||
AS
|
||||
xZ
|
||||
Vq
|
||||
of
|
||||
b
|
||||
b
|
||||
l
|
||||
b
|
||||
b
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
qE
|
||||
hP
|
||||
Sg
|
||||
OB
|
||||
LT
|
||||
IB
|
||||
cB
|
||||
c
|
||||
g
|
||||
i
|
||||
p
|
||||
c
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
pc
|
||||
iS
|
||||
hF
|
||||
OB
|
||||
Fq
|
||||
Na
|
||||
jH
|
||||
b
|
||||
g
|
||||
i
|
||||
p
|
||||
b
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
oN
|
||||
fd
|
||||
ry
|
||||
OB
|
||||
kD
|
||||
Yi
|
||||
oN
|
||||
b
|
||||
h
|
||||
i
|
||||
i
|
||||
b
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
oN
|
||||
GK
|
||||
uw
|
||||
OB
|
||||
Mu
|
||||
oc
|
||||
oN
|
||||
d
|
||||
i
|
||||
m
|
||||
i
|
||||
r
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
oN
|
||||
GN
|
||||
qC
|
||||
OB
|
||||
Fq
|
||||
qx
|
||||
oN
|
||||
b
|
||||
i
|
||||
i
|
||||
q
|
||||
b
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
oN
|
||||
oN
|
||||
vp
|
||||
Zj
|
||||
kh
|
||||
UV
|
||||
oN
|
||||
b
|
||||
g
|
||||
i
|
||||
p
|
||||
b
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
oN
|
||||
oN
|
||||
oZ
|
||||
gv
|
||||
zV
|
||||
TT
|
||||
oN
|
||||
c
|
||||
g
|
||||
i
|
||||
p
|
||||
c
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
oN
|
||||
oN
|
||||
vy
|
||||
wR
|
||||
yR
|
||||
MY
|
||||
oN
|
||||
b
|
||||
c
|
||||
n
|
||||
c
|
||||
b
|
||||
"}
|
||||
|
||||
+12
-1
@@ -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"
|
||||
|
||||
@@ -67,10 +67,6 @@
|
||||
#define ACCESS_ENTER_GENPOP 69
|
||||
#define ACCESS_LEAVE_GENPOP 70
|
||||
#define ACCESS_PSYCH 71
|
||||
#define ACCESS_LAMBENT 72
|
||||
#define ACCESS_BARBER 73
|
||||
#define ACCESS_BARISTA 74
|
||||
|
||||
|
||||
//BEGIN CENTCOM ACCESS
|
||||
/*Should leave plenty of room if we need to add more access levels.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#define CYBORG (1<<10)
|
||||
#define JR_OFFICER (1<<11)
|
||||
#define JR_ENGINEER (1<<12)
|
||||
#define LAMBENT (1<<13)
|
||||
|
||||
|
||||
#define MEDSCI (1<<1)
|
||||
@@ -47,8 +46,6 @@
|
||||
#define CLOWN (1<<11)
|
||||
#define MIME (1<<12)
|
||||
#define ASSISTANT (1<<13)
|
||||
#define BARBER (1<<14)
|
||||
#define BARISTA (1<<15)
|
||||
|
||||
#define JOB_AVAILABLE 0
|
||||
#define JOB_UNAVAILABLE_GENERIC 1
|
||||
@@ -56,4 +53,4 @@
|
||||
#define JOB_UNAVAILABLE_PLAYTIME 3
|
||||
#define JOB_UNAVAILABLE_ACCOUNTAGE 4
|
||||
#define JOB_UNAVAILABLE_SLOTFULL 5
|
||||
#define JOB_UNAVAILABLE_WHITELIST 6
|
||||
#define JOB_UNAVAILABLE_WHITELIST 6
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -136,15 +136,27 @@
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!S.ckeys_allowed)
|
||||
snowflake_mam_snouts_list[S.name] = mspath
|
||||
|
||||
var/list/snowflake_ipc_antenna_list = list()
|
||||
for(var/mspath in GLOB.ipc_antennas_list)
|
||||
var/datum/sprite_accessory/mam_snouts/instance = GLOB.ipc_antennas_list[mspath]
|
||||
var/datum/sprite_accessory/antenna/instance = GLOB.ipc_antennas_list[mspath]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
|
||||
continue
|
||||
if(!S.ckeys_allowed)
|
||||
snowflake_ipc_antenna_list[S.name] = mspath
|
||||
|
||||
var/list/snowflake_ipc_screen_list = list()
|
||||
for(var/mspath in GLOB.ipc_screens_list)
|
||||
var/datum/sprite_accessory/screen/instance = GLOB.ipc_screens_list[mspath]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
|
||||
continue
|
||||
if(!S.ckeys_allowed)
|
||||
snowflake_ipc_screen_list[S.name] = mspath
|
||||
|
||||
var/color1 = random_short_color()
|
||||
var/color2 = random_short_color()
|
||||
var/color3 = random_short_color()
|
||||
@@ -233,11 +245,17 @@
|
||||
"womb_cum_mult" = CUM_RATE_MULT,
|
||||
"womb_efficiency" = CUM_EFFICIENCY,
|
||||
"womb_fluid" = "femcum",
|
||||
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
|
||||
"ipc_antenna" = "None",
|
||||
"ipc_screen" = snowflake_ipc_screen_list ? pick(snowflake_ipc_screen_list) : "None",
|
||||
"ipc_antenna" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
|
||||
"flavor_text" = "",
|
||||
"silicon_flavor_text" = "",
|
||||
"ooc_text" = ""))
|
||||
"ooc_text" = "",
|
||||
"cosmetic_head" = GLOB.cosmetic_heads["default"],
|
||||
"cosmetic_chest" = GLOB.cosmetic_chests["default"],
|
||||
"cosmetic_l_arm" = GLOB.cosmetic_arms["default"],
|
||||
"cosmetic_r_arm" = GLOB.cosmetic_arms["default"],
|
||||
"cosmetic_l_leg" = GLOB.cosmetic_legs["default"],
|
||||
"cosmetic_r_leg" = GLOB.cosmetic_legs["default"]))
|
||||
|
||||
/proc/random_hair_style(gender)
|
||||
switch(gender)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
PROCESSING_SUBSYSTEM_DEF(chemistry)
|
||||
name = "Chemistry"
|
||||
wait = 5
|
||||
flags = SS_KEEP_TIMING
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -446,7 +446,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
|
||||
/area/crew_quarters/lounge
|
||||
name = "Lounge"
|
||||
icon_state = "lounge"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/crew_quarters/fitness
|
||||
name = "Fitness Room"
|
||||
@@ -495,10 +495,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Theatre"
|
||||
icon_state = "Theatre"
|
||||
|
||||
/area/crew_quarters/theatre/main
|
||||
name = "Entertainment Theatre"
|
||||
icon_state = "Theatre"
|
||||
|
||||
/area/crew_quarters/theatre/abandoned
|
||||
name = "Abandoned Theatre"
|
||||
icon_state = "Theatre"
|
||||
@@ -1376,7 +1372,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Xenoarchaeology Medical"
|
||||
icon_state = "xenomed"
|
||||
|
||||
//Pool and Hyper additions
|
||||
//Pool
|
||||
/area/crew_quarters/fitness/pool
|
||||
name = "Pool Area"
|
||||
icon_state = "pool"
|
||||
@@ -1388,25 +1384,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
|
||||
/area/arcade
|
||||
name = "Arcade"
|
||||
icon_state = "arcade"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/medical/psych/ward
|
||||
name = "Psychology Ward"
|
||||
|
||||
/area/medical/psych/therapy
|
||||
name = "Therapy Office"
|
||||
|
||||
/area/medical/psych/rec
|
||||
name = "Psychology Recreation"
|
||||
|
||||
/area/medical/psych/lobby
|
||||
name = "Psychology Lobby"
|
||||
|
||||
/area/medical/psych/roomA
|
||||
name = "Physchology Dorm A"
|
||||
|
||||
/area/medical/psych/roomB
|
||||
name = "Physchology Dorm A"
|
||||
/area/artatrium
|
||||
name = "Art Atrium"
|
||||
icon_state = "library"
|
||||
|
||||
//Diner
|
||||
/area/diner
|
||||
|
||||
@@ -10,12 +10,6 @@ area/layenia
|
||||
atmos = FALSE
|
||||
flags_1 = NONE
|
||||
|
||||
area/layenia/cave
|
||||
name = "Layenia Caves"
|
||||
icon_state = "mining"
|
||||
outdoors = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
|
||||
area/layenia/cloudlayer
|
||||
name = "Layenia clouds"
|
||||
icon_state = "space"
|
||||
|
||||
@@ -699,11 +699,11 @@
|
||||
|
||||
// called when this atom is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
|
||||
/atom/movable/proc/on_exit_storage(datum/component/storage/concrete/S)
|
||||
return
|
||||
SEND_SIGNAL(src, COMSIG_STORAGE_EXITED, S)
|
||||
|
||||
// called when this atom is added into a storage item, which is passed on as S. The loc variable is already set to the storage item.
|
||||
/atom/movable/proc/on_enter_storage(datum/component/storage/concrete/S)
|
||||
return
|
||||
SEND_SIGNAL(src, COMSIG_STORAGE_ENTERED, S)
|
||||
|
||||
/atom/movable/proc/get_spacemove_backup()
|
||||
var/atom/movable/dense_object_backup
|
||||
|
||||
@@ -102,13 +102,6 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
else if(message_type == "ARRIVALS_BROKEN")
|
||||
message = "The arrivals shuttle has been damaged. Docking for repairs..."
|
||||
|
||||
//Hyper edit
|
||||
else if (message_type == "ONDUTY")
|
||||
message = CompileText(onduty, user, rank)
|
||||
else if (message_type == "OFFDUTY")
|
||||
message = CompileText(offduty, user, rank)
|
||||
//Hyper edit end
|
||||
|
||||
if(channels.len == 0)
|
||||
radio.talk_into(src, message, null)
|
||||
else
|
||||
|
||||
@@ -11,9 +11,8 @@
|
||||
openSound = 'hyperstation/sound/machines/shutter.ogg'
|
||||
closeSound = 'hyperstation/sound/machines/shutter.ogg'
|
||||
|
||||
// temporarily changing it to open alt so you can see things on tables that also have shutters above them until I can figure some alternatives out.
|
||||
/obj/machinery/door/poddoor/shutters/preopen
|
||||
icon_state = "open_alt"
|
||||
icon_state = "open"
|
||||
density = FALSE
|
||||
opacity = 0
|
||||
|
||||
@@ -69,8 +68,3 @@
|
||||
/obj/machinery/door/poddoor/shutters/window/preopen
|
||||
icon_state = "open"
|
||||
density = FALSE
|
||||
|
||||
//my not so successful attempt to make the new shutters let you see what's under them when above tables.
|
||||
/obj/machinery/door/poddoor/shutters/preopen/alt
|
||||
icon_state = "open_alt"
|
||||
density = FALSE
|
||||
@@ -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
|
||||
|
||||
@@ -408,21 +408,6 @@
|
||||
desc = "A poster advertising a movie about some masked men."
|
||||
icon_state = "poster44"
|
||||
|
||||
/obj/structure/sign/poster/contraband/moffuchis_pizza
|
||||
name = "Moffy's Pizzeria"
|
||||
desc = "Moffy's Pizzeria™: family style pizza for 2 centuries."
|
||||
icon_state = "poster45"
|
||||
|
||||
/obj/structure/sign/poster/contraband/donk_co
|
||||
name = "DONK CO. BRAND MICROWAVEABLE FOOD"
|
||||
desc = "DONK CO. BRAND MICROWAVABLE FOOD: MADE BY STARVING COLLEGE STUDENTS, FOR STARVING COLLEGE STUDENTS."
|
||||
icon_state = "poster46"
|
||||
|
||||
/obj/structure/sign/poster/contraband/cybersun_six_hundred
|
||||
name = "Saibāsan: 600 Years Commemorative Poster"
|
||||
desc = "An artistic poster commemorating 600 years of continual business for Cybersun Industries."
|
||||
icon_state = "poster47"
|
||||
|
||||
/obj/structure/sign/poster/official
|
||||
poster_item_name = "motivational poster"
|
||||
poster_item_desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface."
|
||||
@@ -609,29 +594,4 @@
|
||||
desc = "This informational poster teaches the viewer what carbon dioxide is."
|
||||
icon_state = "poster35_legit"
|
||||
|
||||
/obj/structure/sign/poster/official/moth_hardhat
|
||||
name = "Safety Moth - Hardhats"
|
||||
desc = "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\""
|
||||
icon_state = "poster36_legit"
|
||||
|
||||
/obj/structure/sign/poster/official/moth_piping
|
||||
name = "Safety Moth - Piping"
|
||||
desc = "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\""
|
||||
icon_state = "poster37_legit"
|
||||
|
||||
/obj/structure/sign/poster/official/moth_meth
|
||||
name = "Safety Moth - Methamphetamine"
|
||||
desc = "This informational poster uses Safety Moth™ to tell the viewer to seek CMO approval before cooking methamphetamine. \"Stay close to the target temperature, and never go over!\" ...You shouldn't ever be making this."
|
||||
icon_state = "poster38_legit"
|
||||
|
||||
/obj/structure/sign/poster/official/moth_epi
|
||||
name = "Safety Moth - Epinephrine"
|
||||
desc = "This informational poster uses Safety Moth™ to inform the viewer to help injured/deceased crewmen with their epinephrine injectors. \"Prevent organ rot with this one simple trick!\""
|
||||
icon_state = "poster39_legit"
|
||||
|
||||
/obj/structure/sign/poster/official/corporate_perks_vacation
|
||||
name = "Nanotrasen Corporate Perks: Vacation"
|
||||
desc = "You wish you were here? You can be, Plan today and get 10% off your next vacation on us."
|
||||
icon_state = "poster40_legit"
|
||||
|
||||
#undef PLACE_SPEED
|
||||
|
||||
@@ -9,24 +9,4 @@
|
||||
/obj/effect/turf_decal/weather/snow/corner
|
||||
name = "snow corner piece"
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
icon_state = "snow_corner"
|
||||
|
||||
/obj/effect/turf_decal/weather/grass
|
||||
name = "grass box piece"
|
||||
icon = 'icons/turf/grass.dmi'
|
||||
icon_state = "grass_box"
|
||||
|
||||
/obj/effect/turf_decal/weather/grass/line
|
||||
name = "grass line piece"
|
||||
icon = 'icons/turf/grass.dmi'
|
||||
icon_state = "grass_line"
|
||||
|
||||
/obj/effect/turf_decal/weather/grass/corner
|
||||
name = "grass corner piece"
|
||||
icon = 'icons/turf/grass.dmi'
|
||||
icon_state = "grass_corner"
|
||||
|
||||
/obj/effect/turf_decal/weather/grass/surround
|
||||
name = "grass surround piece"
|
||||
icon = 'icons/turf/grass.dmi'
|
||||
icon_state = "grass_surround"
|
||||
icon_state = "snow_corner"
|
||||
@@ -126,7 +126,7 @@
|
||||
H.update_body()
|
||||
else
|
||||
..()
|
||||
/* SKYRAT EDIT REMOVAL
|
||||
|
||||
/obj/item/razor
|
||||
name = "electric razor"
|
||||
desc = "The latest and greatest power razor born from the science of shaving."
|
||||
@@ -216,5 +216,4 @@
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
*/
|
||||
..()
|
||||
@@ -86,11 +86,11 @@
|
||||
to_chat(user, "<span class='warning'>Your [src] is already occupied.</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>",
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>",
|
||||
"<span class='notice'>You start placing [target] into your [src]...</span>")
|
||||
|
||||
if(!patient && iscarbon(target) && !target.buckled && do_after (user, 100, target = target))
|
||||
if(!in_range(src, target))
|
||||
if(!in_range(src, target))
|
||||
return
|
||||
if(patient)
|
||||
return
|
||||
@@ -217,7 +217,7 @@
|
||||
data["occupant"]["fireLoss"] = mob_occupant.getFireLoss()
|
||||
data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss()
|
||||
data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN)
|
||||
|
||||
|
||||
if(mob_occupant.reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in mob_occupant.reagents.reagent_list)
|
||||
chemical_list += list(list("name" = R.name, "volume" = R.volume))
|
||||
@@ -393,7 +393,7 @@
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
|
||||
|
||||
|
||||
UpdateGut(hound)
|
||||
if(cleaning)
|
||||
addtimer(CALLBACK(src, .proc/clean_cycle, hound), 50)
|
||||
@@ -515,7 +515,7 @@
|
||||
trashman.reset_perspective(src)
|
||||
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
|
||||
|
||||
|
||||
UpdateGut(hound)
|
||||
|
||||
|
||||
@@ -523,4 +523,11 @@
|
||||
var/current_belly = ..()
|
||||
if(length(contents) > 11)
|
||||
current_belly = BORGBELLY_RED
|
||||
return current_belly
|
||||
return current_belly
|
||||
|
||||
|
||||
/obj/item/dogborg/sleeper/compactor/ore//identical to janihound for moment
|
||||
name = "ore processor"
|
||||
desc = "A mounted compactor unit with fuel processor."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "compactorb"//needs its own icon
|
||||
|
||||
@@ -67,6 +67,12 @@
|
||||
syndie = TRUE
|
||||
if(keyslot.independent)
|
||||
independent = TRUE
|
||||
//Skyrat edit start
|
||||
if(extra_channels)
|
||||
for(var/ch_name in extra_channels)
|
||||
if(!(ch_name in channels))
|
||||
channels[ch_name] = extra_channels[ch_name]
|
||||
//Skyrat edit end
|
||||
|
||||
for(var/ch_name in channels)
|
||||
secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name])
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
icon = 'icons/obj/dyespray.dmi'
|
||||
icon_state = "dyespray"
|
||||
|
||||
var/uses = 10 //SKYRAT EDIT ADDITION
|
||||
|
||||
/obj/item/dyespray/attack_self(mob/user)
|
||||
dye(user)
|
||||
|
||||
@@ -23,10 +21,6 @@
|
||||
/obj/item/dyespray/proc/dye(mob/target)
|
||||
if(!ishuman(target))
|
||||
return
|
||||
|
||||
if(!uses) //SKYRAT EDIT ADDITION
|
||||
return //SKYRAT EDIT ADDITION
|
||||
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
|
||||
var/new_hair_color = input(usr, "Choose a base hair color:", "Character Preference","#"+human_target.hair_color) as color|null
|
||||
@@ -48,13 +42,4 @@
|
||||
if(!do_after(usr, 30, target = human_target))
|
||||
return
|
||||
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
|
||||
human_target.update_hair()
|
||||
|
||||
//SKYRAT EDIT ADDITION
|
||||
uses--
|
||||
|
||||
/obj/item/dyespray/examine(mob/user)
|
||||
. = ..()
|
||||
. += "It has [uses] uses left."
|
||||
|
||||
//SKYRAT EDIT END
|
||||
human_target.update_hair()
|
||||
@@ -0,0 +1,38 @@
|
||||
/obj/item/implant/kinaris
|
||||
name = "KNS ENH implant"
|
||||
desc = "Enables enhanced reflexes, permitting the user to deploy specialised training."
|
||||
icon = 'icons/obj/implants.dmi'
|
||||
icon_state ="adrenal"
|
||||
activated = 1
|
||||
var/datum/martial_art/kinaris/style = new
|
||||
|
||||
/obj/item/implant/kinaris/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> KNS ENH Implant<BR>
|
||||
<b>Life:</b> Roughly twelve hours after death of host<BR>
|
||||
<b>Implant Details:</b> <BR>
|
||||
<b>Function:</b> Forces certain sections of the brain and body into a state of higher function, permitting the user to deploy specialised training."}
|
||||
return dat
|
||||
|
||||
/obj/item/implant/kinaris/activate()
|
||||
. = ..()
|
||||
var/mob/living/carbon/human/H = imp_in
|
||||
if(!ishuman(H))
|
||||
return
|
||||
if(!H.mind)
|
||||
return
|
||||
if(H.mind.has_martialart(MARTIALART_KNS_CQC))
|
||||
style.remove(H)
|
||||
to_chat(H, "<span class='notice'>You disable your reflex implant.</span>")
|
||||
else
|
||||
style.teach(H,1)
|
||||
to_chat(H, "<span class='notice'>You feel your body burn briefly as you enable your reflex implant.</span>")
|
||||
|
||||
/obj/item/implanter/kinaris
|
||||
name = "implanter (KNS ENH)"
|
||||
imp_type = /obj/item/implant/kinaris
|
||||
|
||||
/obj/item/implantcase/kinaris
|
||||
name = "implant case - 'KNS ENH'"
|
||||
desc = "A glass case containing an implant that can enhance the body of the user."
|
||||
imp_type = /obj/item/implant/kinaris
|
||||
@@ -657,34 +657,6 @@
|
||||
item_state = "moffplush"
|
||||
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/mothplushie/moffplush/safetymoth
|
||||
name = "Safety Moth"
|
||||
desc = "A limited edition Safety Moth™ plush, Can you collect them all?"
|
||||
icon_state = "safetymoth"
|
||||
item_state = "safetymoth"
|
||||
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/mothplushie/moffplush/safetymoth_engineer
|
||||
name = "Engineer Safety Moth"
|
||||
desc = "A limited edition Engineer Safety Moth™ plush, Can you collect them all?"
|
||||
icon_state = "safetymoth_engineer"
|
||||
item_state = "safetymoth_engineer"
|
||||
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/mothplushie/moffplush/safetymoth_doctor
|
||||
name = "Doctor Safety Moth"
|
||||
desc = "A limited edition Doctor Safety Moth™ plush, Can you collect them all?"
|
||||
icon_state = "safetymoth_doctor"
|
||||
item_state = "safetymoth_doctor"
|
||||
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/mothplushie/moffplush/Moffy
|
||||
name = "Chef Moffy plushie"
|
||||
desc = "A rebranded Safety Moth™ plush by there sister company Moffy's Pizzeria Entertainment™"
|
||||
icon_state = "Moffy"
|
||||
item_state = "Moffy"
|
||||
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/xeno
|
||||
name = "xenohybrid plushie"
|
||||
desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
|
||||
@@ -794,15 +766,6 @@
|
||||
item_state = "kenk"
|
||||
squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/enchanted
|
||||
name = "glowing book plushie"
|
||||
desc = "This book is so powerful, you can't open it."
|
||||
young = TRUE
|
||||
icon_state = "bookenchanted"
|
||||
item_state = "bookenchanted"
|
||||
squeak_override = list('hyperstation/sound/effects/enchant.ogg' = 1)
|
||||
attack_verb = list("enchants", "mystifies", "disenchants", "fails to enchant", "doesn't have enough XP to enchant", "bonks")
|
||||
|
||||
/obj/item/toy/plush/sergal
|
||||
name = "sergal plushie"
|
||||
desc = "An adorable stuffed plushie that resembles a sagaru."
|
||||
@@ -985,13 +948,6 @@
|
||||
icon_state = "marisol"
|
||||
item_state = "marisol"
|
||||
|
||||
/obj/item/toy/plush/mammal/freddy
|
||||
name = "felix fastbear plushie"
|
||||
desc = "An adorable bear plushie that resembles felix fastbear from Moffy's Pizzeria Entertainment™"
|
||||
icon_state = "freddy"
|
||||
item_state = "freddy"
|
||||
squeak_override = list('sound/items/toysqueak1.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/catgirl
|
||||
name = "feline plushie"
|
||||
desc = "An adorable stuffed toy that resembles a feline."
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
desc = "A diamond drill replacement for the mining module's standard drill."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner, /obj/item/robot_module/orepup)
|
||||
|
||||
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -182,7 +182,7 @@
|
||||
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner, /obj/item/robot_module/orepup)
|
||||
|
||||
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -285,7 +285,7 @@
|
||||
icon_state = "ash_plating"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner, /obj/item/robot_module/orepup)
|
||||
|
||||
/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -417,7 +417,7 @@
|
||||
module_type = list(
|
||||
/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
|
||||
var/list/additional_reagents = list()
|
||||
|
||||
/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr)
|
||||
|
||||
@@ -49,13 +49,6 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
|
||||
new/datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, one_per_turf = TRUE, on_floor = TRUE) \
|
||||
)), \
|
||||
//END OF CIT CHANGES
|
||||
new/datum/stack_recipe_list("bench", \
|
||||
list( \
|
||||
new/datum/stack_recipe("bench (middle)", /obj/structure/chair/bench/metal, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("bench (left)", /obj/structure/chair/bench/metal/left, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("bench (right)", /obj/structure/chair/bench/metal/right, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
)), \
|
||||
null, \
|
||||
new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
null, \
|
||||
//add this when I can find a way to make them easily constructible > new/datum/stack_recipe("sink", /obj/structure/sink, 2, one_per_turf = TRUE, on_floor = TRUE),
|
||||
@@ -481,6 +474,11 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki), \
|
||||
new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza), \
|
||||
new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry), \
|
||||
new /datum/stack_recipe("donk-pockets taco box", /obj/item/storage/box/donkpockets/donkpockettaco), \
|
||||
new /datum/stack_recipe("donk-pockets plasma box", /obj/item/storage/box/donkpockets/donkpocketplasma), \
|
||||
new /datum/stack_recipe("donk-pockets breakfast box", /obj/item/storage/box/donkpockets/donkpocketbreakfast), \
|
||||
new /datum/stack_recipe("donk-pockets moth box", /obj/item/storage/box/donkpockets/donkpocketmoth), \
|
||||
new /datum/stack_recipe("donk-pockets vegan box", /obj/item/storage/box/donkpockets/donkpocketvegan), \
|
||||
new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk), \
|
||||
new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes),
|
||||
null, \
|
||||
|
||||
@@ -177,24 +177,6 @@
|
||||
icon_state = "cheeseburgerbackpack"
|
||||
item_state = "cheeseburgerbackpack"
|
||||
|
||||
/obj/item/storage/backpack/lambent
|
||||
name = "holostorage drone"
|
||||
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
|
||||
icon_state = "lambentbackpack"
|
||||
item_state = "lambentbackpack"
|
||||
//component_type
|
||||
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
|
||||
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
|
||||
|
||||
/obj/item/storage/backpack/lambent/dropped(mob/user)
|
||||
src.icon_state = "lambentbackpack_off"
|
||||
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
|
||||
|
||||
/obj/item/storage/backpack/lambent/pickup(mob/living/user)
|
||||
src.icon_state = "lambentbackpack"
|
||||
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
|
||||
|
||||
|
||||
/*
|
||||
* Satchel Types
|
||||
*/
|
||||
@@ -213,23 +195,6 @@
|
||||
/obj/item/storage/backpack/satchel/leather/withwallet/PopulateContents()
|
||||
new /obj/item/storage/wallet/random(src)
|
||||
|
||||
/obj/item/storage/backpack/satchel/lambent
|
||||
name = "holostorage drone"
|
||||
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
|
||||
icon_state = "lambentsatchel"
|
||||
item_state = "lambentsatchel"
|
||||
//component_type
|
||||
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
|
||||
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
|
||||
|
||||
/obj/item/storage/backpack/satchel/lambent/dropped(mob/user)
|
||||
src.icon_state = "lambentsatchel_off"
|
||||
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
|
||||
|
||||
/obj/item/storage/backpack/satchel/lambent/pickup(mob/living/user)
|
||||
src.icon_state = "lambentsatchel"
|
||||
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
|
||||
|
||||
/obj/item/storage/backpack/satchel/eng
|
||||
name = "industrial satchel"
|
||||
desc = "A tough satchel with extra pockets."
|
||||
@@ -375,23 +340,6 @@
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_combined_w_class = 30
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/lambent
|
||||
name = "holostorage drone"
|
||||
desc = "A small drone capable of digitizing matter and remaking it on the fly for incredibly-compressed storage, beyond the limits of Bluespace. It follows it's owner closeby."
|
||||
icon_state = "lambentduffel"
|
||||
item_state = "lambentduffel"
|
||||
//component_type
|
||||
resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE
|
||||
alternate_worn_layer = BODY_BEHIND_LAYER //So the drone appears behind the wearer
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/lambent/dropped(mob/user)
|
||||
src.icon_state = "lambentduffel_off"
|
||||
playsound(user, 'sound/items/fulext_deploy.wav', 50, 1)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/lambent/pickup(mob/living/user)
|
||||
src.icon_state = "lambentduffel"
|
||||
playsound(user, 'sound/items/dronedeploy.ogg', 50, 1)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/captain
|
||||
name = "captain's duffel bag"
|
||||
desc = "A large duffel bag for holding extra captainly goods."
|
||||
@@ -417,7 +365,7 @@
|
||||
new /obj/item/cautery(src)
|
||||
new /obj/item/surgical_drapes(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
//new /obj/item/razor(src)
|
||||
new /obj/item/razor(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/sec
|
||||
|
||||
@@ -437,6 +437,36 @@
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/spicy
|
||||
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/spicy
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpockettaco //Property of Angel's Donk Co. subsidary Not'cho Corp. "They're mine! Not yo's."
|
||||
name = "box of taco-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxtaco"
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/taco
|
||||
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpocketplasma
|
||||
name = "box of toxic-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxplasma"
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/plasma
|
||||
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpocketbreakfast
|
||||
name = "box of breakfast-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxbreakfast"
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/breakfast
|
||||
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpocketmoth
|
||||
name = "box of cloth-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxmoth"
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/moth
|
||||
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpocketvegan
|
||||
name = "box of veggie-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxvegan"
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/vegan
|
||||
warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpocketteriyaki
|
||||
name = "box of teriyaki-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxteriyaki"
|
||||
@@ -1325,4 +1355,4 @@
|
||||
|
||||
/obj/item/storage/box/marshmallow/PopulateContents()
|
||||
for (var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/food/snacks/marshmallow(src)
|
||||
new /obj/item/reagent_containers/food/snacks/marshmallow(src)
|
||||
|
||||
@@ -299,7 +299,6 @@
|
||||
name = "industrial welding tool"
|
||||
desc = "A slightly larger welder with a larger tank."
|
||||
icon_state = "indwelder"
|
||||
item_state = "indwelder"
|
||||
max_fuel = 40
|
||||
materials = list(MAT_GLASS=60)
|
||||
|
||||
@@ -316,7 +315,6 @@
|
||||
name = "emergency welding tool"
|
||||
desc = "A miniature welder used during emergencies."
|
||||
icon_state = "miniwelder"
|
||||
item_state = "miniwelder"
|
||||
max_fuel = 10
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=10)
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
if(icon_state == "mirror_broke" && !broken)
|
||||
obj_break(null, mapload)
|
||||
|
||||
/* SKYRAT EDIT REMOVAL
|
||||
/obj/structure/mirror/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
@@ -45,7 +44,7 @@
|
||||
H.hair_style = new_style
|
||||
|
||||
H.update_hair()
|
||||
*/
|
||||
|
||||
/obj/structure/mirror/examine_status(mob/user)
|
||||
if(broken)
|
||||
return // no message spam
|
||||
|
||||
@@ -133,9 +133,4 @@
|
||||
/obj/structure/sign/logo/kinaris
|
||||
name = "kinaris logo"
|
||||
desc = "The Kinaris corprate logo. Radiant."
|
||||
icon_state = "kinaris_sign1"
|
||||
|
||||
/obj/structure/sign/logo/cpr
|
||||
name = "Challenge Pissing Room"
|
||||
desc = "The league of challenge pissing"
|
||||
icon_state = "CPR_sign1"
|
||||
icon_state = "kinaris_sign1"
|
||||
@@ -129,7 +129,6 @@
|
||||
planetary_atmos = TRUE
|
||||
initial_gas_mix = FROZEN_ATMOS
|
||||
density = FALSE
|
||||
vis_flags = 8
|
||||
|
||||
/turf/open/chasm/cloud/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -85,16 +85,10 @@
|
||||
var/ore_type = /obj/item/stack/ore/glass
|
||||
var/turfverb = "uproot"
|
||||
tiled_dirt = FALSE
|
||||
var/floor_variance = 50
|
||||
var/quantity_of_available_tiles = 2
|
||||
var/environment_type = "grass"
|
||||
|
||||
/turf/open/floor/grass/Initialize()
|
||||
var/proper_name = name
|
||||
. = ..()
|
||||
name = proper_name
|
||||
if(prob(floor_variance))
|
||||
icon_state = "[environment_type][rand(0,quantity_of_available_tiles)]"
|
||||
update_icon()
|
||||
|
||||
/turf/open/floor/grass/attackby(obj/item/C, mob/user, params)
|
||||
if((C.tool_behaviour == TOOL_SHOVEL) && params)
|
||||
|
||||
@@ -123,8 +123,9 @@
|
||||
planetary_atmos = TRUE
|
||||
baseturfs = /turf/open/lava/smooth/lava_land_surface
|
||||
|
||||
|
||||
|
||||
/turf/open/floor/plating/asteroid/spacehermit
|
||||
initial_gas_mix = OPENTURF_DEFAULT_ATMOS
|
||||
baseturfs = /turf/open/floor/plating/asteroid/spacehermit
|
||||
|
||||
/turf/open/floor/plating/asteroid/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
@@ -386,7 +387,7 @@
|
||||
bullet_bounce_sound = null
|
||||
digResult = /obj/item/stack/ore/glass/basalt
|
||||
floor_variance = 50 //This means 50% chance of variating from the default tile.
|
||||
quantity_of_available_tiles = 5
|
||||
quantity_of_available_tiles = 4
|
||||
//light_range = 2
|
||||
//light_power = 0.15
|
||||
//light_color = LIGHT_COLOR_WHITE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -108,7 +108,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/roleplayroles = FALSE //for the roleplay roles
|
||||
var/importantroles = FALSE //for things that define as important.
|
||||
|
||||
|
||||
var/datum/species/pref_species = new /datum/species/human() //Mutant race
|
||||
var/list/features = list("mcolor" = "FFF",
|
||||
"tail_lizard" = "Smooth",
|
||||
@@ -196,7 +195,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
"flavor_text" = "",
|
||||
"silicon_flavor_text" = "",
|
||||
"ooc_text" = "",
|
||||
"front_genitals_over_hair" = FALSE
|
||||
"front_genitals_over_hair" = FALSE,
|
||||
"cosmetic_head" = /datum/cosmetic_part/head/default,
|
||||
"cosmetic_chest" = /datum/cosmetic_part/chest/default,
|
||||
"cosmetic_l_arm" = /datum/cosmetic_part/arms/default,
|
||||
"cosmetic_r_arm" = /datum/cosmetic_part/arms/default,
|
||||
"cosmetic_l_leg" = /datum/cosmetic_part/legs/default,
|
||||
"cosmetic_r_leg" = /datum/cosmetic_part/legs/default,
|
||||
"cosmetic_markings" = FALSE
|
||||
)
|
||||
|
||||
/// Security record note section
|
||||
@@ -271,7 +277,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
parent = C
|
||||
clientfps = world.fps*2
|
||||
for(var/custom_name_id in GLOB.preferences_custom_names)
|
||||
custom_names[custom_name_id] = get_default_name(custom_name_id)
|
||||
|
||||
@@ -439,7 +444,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<b>Custom Species Name:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=custom_species;task=input'>[custom_species ? custom_species : "None"]</a><BR>"
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=all;task=random'>Random Body</A><BR>"
|
||||
dat += "<b>Always Random Body:</b><a href='?_src_=prefs;preference=all'>[be_random_body ? "Yes" : "No"]</A><BR>"
|
||||
dat += "<br><b>Cycle background:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=cycle_bg;task=input'>[bgstate]</a><BR>"
|
||||
dat += "<br><b>Select background:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=select_bg;task=input'>[bgstate]</a><BR>"
|
||||
dat += "<b>Render front genitals over hair:</b><a href='?_src_=prefs;task=front_genitals_over_hair'>[features["front_genitals_over_hair"] ? "Yes" : "No"]</A><BR>"
|
||||
|
||||
var/use_skintones = pref_species.use_skintones
|
||||
@@ -824,8 +829,55 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
mutant_category = 0
|
||||
|
||||
dat += "</tr></table>"
|
||||
|
||||
dat += "</td>"
|
||||
|
||||
// HYPER EDIT: Cosmetic body parts
|
||||
|
||||
var/datum/cosmetic_part/cosmetic_head = features["cosmetic_head"]
|
||||
var/datum/cosmetic_part/cosmetic_chest = features["cosmetic_chest"]
|
||||
var/datum/cosmetic_part/cosmetic_arms = features["cosmetic_l_arm"]
|
||||
var/datum/cosmetic_part/cosmetic_legs = features["cosmetic_l_leg"]
|
||||
|
||||
dat += "<div style='width:100%;display:block;'>"
|
||||
dat += "<h2>Cosmetic Parts</h2>"
|
||||
dat += "<b>Use markings on cosmetic parts?</b> "
|
||||
dat += "<a href='?_src_=prefs;preference=cosmetic_markings'>[features["cosmetic_markings"] ? "Yes" : "No"]</a>"
|
||||
dat += "<div style='display:flex; align-items:stretch; justify-content:space-around;'>"
|
||||
dat += "<div style='flex: 1 1 0;'>"
|
||||
dat += "<h3 style='text-align:center;'>Head</h3>"
|
||||
dat += "<a style='display:block; width:100px'"
|
||||
dat += "href='?_src_=prefs;preference=cosmetic_head;task=input'>"
|
||||
dat += cosmetic_head.name
|
||||
dat += "</a>"
|
||||
dat += "</div>"
|
||||
dat += "<div style='flex: 1 1 0;'>"
|
||||
dat += "<h3 style='text-align:center;'>Chest</h3>"
|
||||
dat += "<a style='display:block; width:100px'"
|
||||
dat += "href='?_src_=prefs;preference=cosmetic_chest;task=input'>"
|
||||
dat += cosmetic_chest.name
|
||||
dat += "</a>"
|
||||
dat += "</div>"
|
||||
dat += "<div style='flex: 1 1 0;'>"
|
||||
dat += "<h3 style='text-align:center;'>Arms</h3>"
|
||||
dat += "<a style='display:block; width:100px'"
|
||||
dat += "href='?_src_=prefs;preference=cosmetic_arms;task=input'>"
|
||||
dat += cosmetic_arms.name
|
||||
dat += "</a>"
|
||||
dat += "</div>"
|
||||
dat += "<div style='flex: 1 1 0;'>"
|
||||
dat += "<h3 style='text-align:center;'>Legs</h3>"
|
||||
dat += "<a style='display:block; width:100px'"
|
||||
dat += "href='?_src_=prefs;preference=cosmetic_legs;task=input'>"
|
||||
dat += cosmetic_legs.name
|
||||
dat += "</a>"
|
||||
dat += "</div>"
|
||||
dat += "</div>"
|
||||
dat += "</div>"
|
||||
|
||||
|
||||
|
||||
// End hyper edit
|
||||
|
||||
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h2>Clothing & Equipment</h2>"
|
||||
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
|
||||
@@ -1284,14 +1336,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(jobban_isbanned(user, rank))
|
||||
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> BANNED</a></td></tr>"
|
||||
continue
|
||||
//Hyperstation Edit - Whitelisted roles
|
||||
if((rank in GLOB.silly_positions) && (!sillyroles))
|
||||
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> WHITELIST</a></td></tr>"
|
||||
continue
|
||||
if((rank in GLOB.important_positions) && (!importantroles)) //TODO: make whitelists a bit more accurate than "silly" and "important"
|
||||
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> WHITELIST</a></td></tr>"
|
||||
continue
|
||||
//Hyperstation Edit end
|
||||
var/required_playtime_remaining = job.required_playtime_remaining(user.client)
|
||||
if(required_playtime_remaining)
|
||||
HTML += "<font color=red>[rank]</font></td><td><font color=red> \[ [get_exp_format(required_playtime_remaining)] as [job.get_exp_req_type()] \] </font></td></tr>"
|
||||
@@ -1903,8 +1950,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
grad_style = previous_list_item(grad_style, GLOB.hair_gradients_list)
|
||||
|
||||
|
||||
if("cycle_bg")
|
||||
bgstate = next_list_item(bgstate, bgstate_options)
|
||||
if("select_bg")
|
||||
var/new_bg = input(user, "Select a background:", "Character Preference") as null|anything in bgstate_options
|
||||
if(new_bg)
|
||||
bgstate = new_bg
|
||||
|
||||
if("underwear")
|
||||
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list
|
||||
@@ -2293,6 +2342,81 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in GLOB.xeno_dorsal_list
|
||||
if(new_dors)
|
||||
features["xenodorsal"] = new_dors
|
||||
|
||||
// HYPER EDIT: Cosmetic body parts
|
||||
if("cosmetic_head")
|
||||
var/list/selectable_parts = list()
|
||||
for(var/path in GLOB.cosmetic_heads)
|
||||
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_heads[path]
|
||||
var/list/supported_species = possible_part.supported_species
|
||||
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
|
||||
continue
|
||||
selectable_parts[possible_part.name] = path
|
||||
if(!selectable_parts.len)
|
||||
to_chat(user, "<span class='warning'>There are no valid alt heads for this species!</span>")
|
||||
var/new_cosmetic_part
|
||||
var/question = "Choose your character's alt head style:"
|
||||
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
|
||||
if(new_cosmetic_part)
|
||||
features["cosmetic_head"] = GLOB.cosmetic_heads[selectable_parts[new_cosmetic_part]]
|
||||
update_preview_icon()
|
||||
|
||||
if("cosmetic_chest")
|
||||
var/list/selectable_parts = list()
|
||||
for(var/path in GLOB.cosmetic_chests)
|
||||
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_chests[path]
|
||||
var/list/supported_species = possible_part.supported_species
|
||||
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
|
||||
continue
|
||||
selectable_parts[possible_part.name] = path
|
||||
if(!selectable_parts.len)
|
||||
to_chat(user, "<span class='warning'>There are no valid alt chests for this species!</span>")
|
||||
var/new_cosmetic_part
|
||||
var/question = "Choose your character's alt chest style:"
|
||||
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
|
||||
if(new_cosmetic_part)
|
||||
features["cosmetic_chest"] = GLOB.cosmetic_chests[selectable_parts[new_cosmetic_part]]
|
||||
update_preview_icon()
|
||||
|
||||
// currently symmetrical
|
||||
if("cosmetic_arms")
|
||||
var/list/selectable_parts = list()
|
||||
for(var/path in GLOB.cosmetic_arms)
|
||||
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_arms[path]
|
||||
var/list/supported_species = possible_part.supported_species
|
||||
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
|
||||
continue
|
||||
selectable_parts[possible_part.name] = path
|
||||
if(!selectable_parts.len)
|
||||
to_chat(user, "<span class='warning'>There are no valid alt arms for this species!</span>")
|
||||
var/new_cosmetic_part
|
||||
var/question = "Choose your character's alt arms style:"
|
||||
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
|
||||
if(new_cosmetic_part)
|
||||
features["cosmetic_l_arm"] = GLOB.cosmetic_arms[selectable_parts[new_cosmetic_part]]
|
||||
features["cosmetic_r_arm"] = GLOB.cosmetic_arms[selectable_parts[new_cosmetic_part]]
|
||||
update_preview_icon()
|
||||
|
||||
if("cosmetic_legs")
|
||||
var/list/selectable_parts = list()
|
||||
for(var/path in GLOB.cosmetic_legs)
|
||||
var/datum/cosmetic_part/possible_part = GLOB.cosmetic_legs[path]
|
||||
var/list/supported_species = possible_part.supported_species
|
||||
if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
|
||||
continue
|
||||
selectable_parts[possible_part.name] = path
|
||||
if(!selectable_parts.len)
|
||||
to_chat(user, "<span class='warning'>There are no valid alt legs for this species!</span>")
|
||||
var/new_cosmetic_part
|
||||
var/question = "Choose your character's alt legs style:"
|
||||
new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
|
||||
if(new_cosmetic_part)
|
||||
features["cosmetic_l_leg"] = GLOB.cosmetic_legs[selectable_parts[new_cosmetic_part]]
|
||||
features["cosmetic_r_leg"] = GLOB.cosmetic_legs[selectable_parts[new_cosmetic_part]]
|
||||
update_preview_icon()
|
||||
|
||||
// End hyper edit
|
||||
|
||||
//Genital code
|
||||
if("cock_color")
|
||||
var/new_cockcolor = input(user, "Penis color:", "Character Preference") as color|null
|
||||
@@ -2440,9 +2564,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["belly_size"] = clamp(new_bellysize, BELLY_MIN_SIZE, BELLY_MAX_SIZE)
|
||||
|
||||
if("butt_size")
|
||||
var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE])", "Character Preference") as num|null
|
||||
var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE_SELECTABLE])", "Character Preference") as num|null
|
||||
if(new_buttsize != null)
|
||||
features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE)
|
||||
features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE_SELECTABLE)
|
||||
//Restricted to 5 in menu, because we have chems to make them big IC, like with breasts and what not.
|
||||
|
||||
if("vag_shape")
|
||||
var/new_shape
|
||||
@@ -2692,6 +2817,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if("all")
|
||||
be_random_body = !be_random_body
|
||||
|
||||
if("cosmetic_markings")
|
||||
features["cosmetic_markings"] = !features["cosmetic_markings"]
|
||||
|
||||
if("hear_midis")
|
||||
toggles ^= SOUND_MIDI
|
||||
|
||||
|
||||
@@ -576,6 +576,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
all_quirks -= V
|
||||
|
||||
cit_character_pref_load(S)
|
||||
hyper_character_pref_load(S)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -671,6 +672,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["all_quirks"] , all_quirks)
|
||||
|
||||
cit_character_pref_save(S)
|
||||
hyper_character_pref_save(S)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -28,46 +28,6 @@
|
||||
allowed = list (/obj/item/gun/energy/laser/redtag)
|
||||
resistance_flags = NONE
|
||||
|
||||
/*
|
||||
* Posshim's Corpus atire
|
||||
*/
|
||||
/obj/item/clothing/suit/hooded/corpus/
|
||||
name = "Standard Voidsuit"
|
||||
desc = "Standard issue voidsuit in the name of Grofit!"
|
||||
icon_state = "corpus"
|
||||
item_state = "armor"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|FEET|HANDS
|
||||
hoodtype = /obj/item/clothing/head/hooded/corpus
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT //"Hide shoes" but digi shoes dont get hidden, too bad!
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION //There is no need for a digi variant, it's a costume
|
||||
|
||||
/obj/item/clothing/suit/hooded/corpus/s //sec
|
||||
name = "Enforcer Voidsuit"
|
||||
desc = "Delux issue grofit voidsuit. Let the middle class know You're in charge."
|
||||
icon_state = "corpuss"
|
||||
hoodtype = /obj/item/clothing/head/hooded/corpus/s //Enjoy this nice red outfit Kinaris! There is NO NEED for a pink one! xoxo -VivI Fanteriso
|
||||
|
||||
/obj/item/clothing/suit/hooded/corpus/c //command
|
||||
name = "Commander Voidsuit"
|
||||
desc = "Premium issue correctional worker attire. Grease the gears of production."
|
||||
icon_state = "corpusc"
|
||||
hoodtype = /obj/item/clothing/head/hooded/corpus/c
|
||||
|
||||
/obj/item/clothing/head/hooded/corpus
|
||||
name = "Voidsuit helmet"
|
||||
desc = "galvanized reinforced helm to protect against the elements"
|
||||
icon_state = "corpus"
|
||||
body_parts_covered = HEAD
|
||||
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK|HIDESNOUT|HIDENECK //hide your ugly face with this one simple trick!
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/head/hooded/corpus/s //sec
|
||||
icon_state = "corpuss"
|
||||
|
||||
/obj/item/clothing/head/hooded/corpus/c //command
|
||||
icon_state = "corpusc"
|
||||
|
||||
/*
|
||||
* Costume
|
||||
*/
|
||||
|
||||
@@ -461,6 +461,120 @@
|
||||
tastes = list("meat" = 2, "dough" = 2, "laziness" = 1)
|
||||
foodtype = GRAIN | ANTITOXIC
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/taco
|
||||
name = "\improper Taco-pocket"
|
||||
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
|
||||
icon_state = "donkpockettaco"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
|
||||
foodtype = GRAIN | VEGETABLES | MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
|
||||
name = "warm Taco-pocket"
|
||||
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
|
||||
icon_state = "donkpockettaco"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
|
||||
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
|
||||
foodtype = GRAIN | VEGETABLES | MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/plasma
|
||||
name = "\improper Poison-pocket"
|
||||
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
|
||||
icon_state = "donkpocketplasma"
|
||||
list_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
|
||||
foodtype = GRAIN | TOXIC | MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
|
||||
name = "warm Poison-pocket"
|
||||
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
|
||||
icon_state = "donkpocketplasma"
|
||||
bonus_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
|
||||
foodtype = GRAIN | TOXIC | MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/breakfast
|
||||
name = "\improper Breakfast-pocket"
|
||||
desc = "Now for all you early morning Joes!."
|
||||
icon_state = "donkpocketbreakfast"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("meat" = 2, "dough" = 2, "eggs" =2, "bacon" =2)
|
||||
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast //IT'S BEEN ELEVEN FUCKING HOURS I HATE BYOND I HATE BYOND I HATE BEYOND!!!
|
||||
name = "warm Breakfast-pocket"
|
||||
desc = "Now for all you early morning Joes!."
|
||||
icon_state = "donkpocketbreakfast"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
|
||||
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST | ANTITOXIC
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/moth
|
||||
name = "\improper Moth-pocket"
|
||||
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
|
||||
icon_state = "donkpocketmoth"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
|
||||
foodtype = GRAIN | DAIRY | CLOTH
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
|
||||
name = "warm Moth-pocket"
|
||||
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
|
||||
icon_state = "donkpocketmoth"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
|
||||
foodtype = GRAIN | DAIRY | CLOTH
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/vegan
|
||||
name = "\improper Vegan-pocket"
|
||||
desc = "For all you Animal Rights Consortium members out there!."
|
||||
icon_state = "donkpocketvegan"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 2)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("vegetables" = 2, "dough" = 2)
|
||||
foodtype = GRAIN | VEGETABLES
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
|
||||
name = "warm Vegan-pocket"
|
||||
desc = "For all you Animal Rights Consortium members out there!."
|
||||
icon_state = "donkpocketvegan"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 3)
|
||||
tastes = list("vegetables" = 2, "dough" = 2)
|
||||
foodtype = GRAIN | VEGETABLES
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/sm
|
||||
name = "\improper Super-pocket"
|
||||
desc = "You're probably not in a good spot if you're laying eyes on this."
|
||||
icon_state = "donkpocketsm"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 99)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/sm
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("white-noise" = 2)
|
||||
foodtype = TOXIC
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/sm
|
||||
name = "warm Super-pocket"
|
||||
desc = "You're probably not in a good spot if you're laying eyes on this."
|
||||
icon_state = "donkpocketsm"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 99)
|
||||
tastes = list("white-noise" = 2)
|
||||
foodtype = TOXIC
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/dankpocket
|
||||
name = "\improper Dank-pocket"
|
||||
desc = "The food of choice for the seasoned botanist."
|
||||
@@ -554,7 +668,7 @@
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/berry
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("dough" = 2, "jam" = 2)
|
||||
foodtype = GRAIN
|
||||
foodtype = GRAIN | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/berry
|
||||
name = "warm Berry-pocket"
|
||||
@@ -563,7 +677,7 @@
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/omnizine = 1, /datum/reagent/consumable/berryjuice = 3)
|
||||
tastes = list("dough" = 2, "warm jam" = 2)
|
||||
foodtype = GRAIN
|
||||
foodtype = GRAIN | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/gondola
|
||||
name = "\improper Gondola-pocket"
|
||||
|
||||
@@ -362,6 +362,159 @@ datum/crafting_recipe/food/donut/meat
|
||||
tastes = list("meat" = 2, "dough" = 2)
|
||||
foodtype = GRAIN | VEGETABLES
|
||||
|
||||
/datum/crafting_recipe/food/donkpocket/taco
|
||||
time = 15
|
||||
name = "Taco-pocket"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meatball = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/carrot = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lime = 1,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donkpocket/taco
|
||||
subcategory = CAT_PASTRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/taco
|
||||
name = "\improper Taco-pocket"
|
||||
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
|
||||
icon_state = "donkpockettaco"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
|
||||
foodtype = GRAIN | VEGETABLES | MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
|
||||
name = "warm Taco-pocket"
|
||||
desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
|
||||
icon_state = "donkpockettaco"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
|
||||
tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
|
||||
foodtype = GRAIN | VEGETABLES | MEAT
|
||||
|
||||
/datum/crafting_recipe/food/donkpocket/plasma
|
||||
time = 15
|
||||
name = "Plasma-pocket"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meatball = 1,
|
||||
/datum/reagent/fuel = 1,
|
||||
/datum/reagent/toxin/plasma = 1,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donkpocket/plasma
|
||||
subcategory = CAT_PASTRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/plasma
|
||||
name = "\improper Poison-pocket"
|
||||
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
|
||||
icon_state = "donkpocketplasma"
|
||||
list_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
|
||||
foodtype = GRAIN | TOXIC | MEAT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
|
||||
name = "warm Poison-pocket"
|
||||
desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
|
||||
icon_state = "donkpocketplasma"
|
||||
bonus_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
|
||||
foodtype = GRAIN | TOXIC | MEAT
|
||||
|
||||
/datum/crafting_recipe/food/donkpocket/breakfast
|
||||
time = 15
|
||||
name = "Breakfast-pocket"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
|
||||
/obj/item/reagent_containers/food/snacks/friedegg = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donkpocket/breakfast
|
||||
subcategory = CAT_PASTRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/breakfast
|
||||
name = "\improper Breakfast-pocket"
|
||||
desc = "Now for all you early morning Joes!."
|
||||
icon_state = "donkpocketbreakfast"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
|
||||
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
|
||||
name = "warm Breakfast-pocket"
|
||||
desc = "Now for all you early morning Joes!."
|
||||
icon_state = "donkpocketbreakfast"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
|
||||
foodtype = GRAIN | DAIRY | MEAT | BREAKFAST | ANTITOXIC
|
||||
|
||||
/datum/crafting_recipe/food/donkpocket/moth
|
||||
time = 15
|
||||
name = "Moth-pocket"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
|
||||
/obj/item/stack/sheet/cloth = 1,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donkpocket/moth
|
||||
subcategory = CAT_PASTRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/moth
|
||||
name = "\improper Moth-pocket"
|
||||
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
|
||||
icon_state = "donkpocketmoth"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
|
||||
foodtype = GRAIN | DAIRY | CLOTH
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
|
||||
name = "warm Moth-pocket"
|
||||
desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
|
||||
icon_state = "donkpocketmoth"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4)
|
||||
tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
|
||||
foodtype = GRAIN | DAIRY | CLOTH
|
||||
|
||||
/datum/crafting_recipe/food/donkpocket/vegan
|
||||
time = 15
|
||||
name = "Vegan-pocket"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cabbage = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle = 1,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donkpocket/vegan
|
||||
subcategory = CAT_PASTRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/vegan
|
||||
name = "\improper Vegan-pocket"
|
||||
desc = "For all you Animal Rights Consortium members out there!."
|
||||
icon_state = "donkpocketvegan"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 2)
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
|
||||
filling_color = "#CD853F"
|
||||
tastes = list("vegetables" = 2, "dough" = 2)
|
||||
foodtype = GRAIN | VEGETABLES
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
|
||||
name = "warm Vegan-pocket"
|
||||
desc = "For all you Animal Rights Consortium members out there!."
|
||||
icon_state = "donkpocketvegan"
|
||||
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 3)
|
||||
tastes = list("vegetables" = 2, "dough" = 2)
|
||||
foodtype = GRAIN | VEGETABLES
|
||||
|
||||
/datum/crafting_recipe/food/donkpocket/spicy
|
||||
time = 15
|
||||
name = "Spicy-pocket"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -127,13 +127,13 @@
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
|
||||
|
||||
/proc/get_all_accesses()
|
||||
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT,
|
||||
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
|
||||
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
|
||||
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
|
||||
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION, ACCESS_BARISTA, ACCESS_BARBER,
|
||||
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
|
||||
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
|
||||
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
|
||||
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
|
||||
@@ -161,9 +161,9 @@
|
||||
if(0)
|
||||
return get_all_accesses()
|
||||
if(1) //station general
|
||||
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER, ACCESS_BARISTA, ACCESS_BARBER)
|
||||
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER)
|
||||
if(2) //security
|
||||
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT)
|
||||
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP)
|
||||
if(3) //medbay
|
||||
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH)
|
||||
if(4) //research
|
||||
@@ -224,10 +224,6 @@
|
||||
return "RD Office"
|
||||
if(ACCESS_BAR)
|
||||
return "Bar"
|
||||
if(ACCESS_BARBER)
|
||||
return "Barber"
|
||||
if(ACCESS_BARISTA)
|
||||
return "Barista"
|
||||
if(ACCESS_JANITOR)
|
||||
return "Custodial Closet"
|
||||
if(ACCESS_ENGINE)
|
||||
@@ -326,8 +322,6 @@
|
||||
return "Prison Turnstile Entrance"
|
||||
if(ACCESS_LEAVE_GENPOP)
|
||||
return "Prison Turnstile Exit"
|
||||
if(ACCESS_LAMBENT)
|
||||
return "Lambent's Quarters"
|
||||
if(ACCESS_MINERAL_STOREROOM)
|
||||
return "Mineral Storage"
|
||||
if(ACCESS_MINISAT)
|
||||
@@ -363,10 +357,10 @@
|
||||
return "Code Scotch"
|
||||
|
||||
/proc/get_all_jobs()
|
||||
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Barista", "Barber", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
|
||||
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
|
||||
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern",
|
||||
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Psychologist", "Medical Resident",
|
||||
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie", "Lambent")
|
||||
"Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie")
|
||||
|
||||
/proc/get_all_job_icons() //For all existing HUD icons
|
||||
return get_all_jobs() + list("Prisoner")
|
||||
|
||||
@@ -65,7 +65,7 @@ Captain
|
||||
satchel = /obj/item/storage/backpack/satchel/cap
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/captain
|
||||
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
implants = list(/obj/item/implant/mindshield, /obj/item/implant/kinaris)
|
||||
accessory = /obj/item/clothing/accessory/medal/gold/captain
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
|
||||
@@ -100,13 +100,13 @@ Head of Personnel
|
||||
outfit = /datum/outfit/job/hop
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
|
||||
@@ -170,7 +170,7 @@ Bartender
|
||||
|
||||
outfit = /datum/outfit/job/bartender
|
||||
|
||||
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
|
||||
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
|
||||
@@ -183,7 +183,7 @@ Bartender
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/bartender
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
backpack_contents = list(/obj/item/book/granter/action/drink_fling=1)
|
||||
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
|
||||
/*
|
||||
@@ -195,7 +195,7 @@ Cook
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
total_positions = 2
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
|
||||
@@ -27,11 +27,11 @@ Head of Security
|
||||
outfit = /datum/outfit/job/hos
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
@@ -62,7 +62,7 @@ Head of Security
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/sec
|
||||
box = /obj/item/storage/box/security
|
||||
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
implants = list(/obj/item/implant/mindshield, /obj/item/implant/kinaris)
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos)
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
GLOBAL_LIST_INIT(command_positions, list(
|
||||
"Captain",
|
||||
"Lambent",
|
||||
"Head of Personnel",
|
||||
"Head of Security",
|
||||
"Chief Engineer",
|
||||
@@ -38,8 +37,6 @@ GLOBAL_LIST_INIT(supply_positions, list(
|
||||
|
||||
GLOBAL_LIST_INIT(civilian_positions, list(
|
||||
"Head of Personnel",
|
||||
"Barista",
|
||||
"Barber",
|
||||
"Bartender",
|
||||
"Botanist",
|
||||
"Cook",
|
||||
@@ -63,9 +60,6 @@ GLOBAL_LIST_INIT(nonhuman_positions, list(
|
||||
"Cyborg",
|
||||
ROLE_PAI))
|
||||
|
||||
GLOBAL_LIST_INIT(important_positions, list(
|
||||
"Lambent"))
|
||||
|
||||
GLOBAL_LIST_INIT(silly_positions, list(
|
||||
"Clown",
|
||||
"Mime"))
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -487,6 +487,9 @@
|
||||
if(HAS_TRAIT(src, TRAIT_NOHUNGER))
|
||||
return 1
|
||||
|
||||
if(!has_mouth())
|
||||
return 1
|
||||
|
||||
if(nutrition < 100 && !blood)
|
||||
if(message)
|
||||
visible_message("<span class='warning'>[src] dry heaves!</span>", \
|
||||
|
||||
@@ -5,30 +5,24 @@
|
||||
icon_state = "caucasian_m"
|
||||
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
|
||||
|
||||
|
||||
/mob/living/carbon/human/Initialize()
|
||||
add_verb(src, /mob/living/proc/mob_sleep)
|
||||
add_verb(src, /mob/living/proc/lay_down)
|
||||
time_initialized = world.time
|
||||
|
||||
//initialize limbs first
|
||||
create_bodyparts()
|
||||
|
||||
//initialize dna. for spawned humans; overwritten by other code
|
||||
create_dna(src)
|
||||
randomize_human(src)
|
||||
dna.initialize_dna()
|
||||
|
||||
if(dna.species)
|
||||
set_species(dna.species.type)
|
||||
|
||||
//initialise organs
|
||||
create_internal_organs() //most of it is done in set_species now, this is only for parent call
|
||||
physiology = new()
|
||||
|
||||
AddComponent(/datum/component/personal_crafting)
|
||||
|
||||
. = ..()
|
||||
|
||||
RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /mob/living/carbon/human/clean_blood)
|
||||
|
||||
|
||||
|
||||
@@ -318,15 +318,24 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(NOGENITALS in H.dna.species.species_traits)
|
||||
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
|
||||
|
||||
// EDIT ENDS
|
||||
|
||||
if(NOMOUTH in species_traits)
|
||||
for(var/obj/item/bodypart/head/head in C.bodyparts)
|
||||
head.mouth = FALSE
|
||||
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
|
||||
if(C.dna.species.exotic_bloodtype)
|
||||
if(!new_species.exotic_bloodtype)
|
||||
C.dna.blood_type = random_blood_type()
|
||||
else
|
||||
C.dna.blood_type = new_species.exotic_bloodtype
|
||||
|
||||
if(NOMOUTH in species_traits)
|
||||
for(var/obj/item/bodypart/head/head in C.bodyparts)
|
||||
head.mouth = TRUE
|
||||
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(TRUE)
|
||||
for(var/X in inherent_traits)
|
||||
@@ -502,6 +511,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/list/standing = list()
|
||||
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
H.handle_cosmetic_parts()
|
||||
|
||||
if(HD && !(HAS_TRAIT(H, TRAIT_HUSK)))
|
||||
// lipstick
|
||||
@@ -594,6 +604,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
//CITADEL EDIT - Do not forget to add this to relevent_layers list just above too!
|
||||
H.remove_overlay(BODY_TAUR_LAYER)
|
||||
//END EDIT
|
||||
H.handle_cosmetic_parts()
|
||||
|
||||
if(!mutant_bodyparts)
|
||||
return
|
||||
@@ -678,21 +689,17 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR) || (!H.dna.features["taur"] == "None"))
|
||||
bodyparts_to_add -= "mam_tail"
|
||||
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR) || (!H.dna.features["taur"] == "None"))
|
||||
bodyparts_to_add -= "mam_waggingtail"
|
||||
else if ("mam_tail" in mutant_bodyparts)
|
||||
bodyparts_to_add -= "mam_waggingtail"
|
||||
|
||||
if("mam_ears" in mutant_bodyparts)
|
||||
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "mam_ears"
|
||||
|
||||
if("mam_snouts" in mutant_bodyparts) //Take a closer look at that snout!
|
||||
if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "mam_snouts"
|
||||
|
||||
if("taur" in mutant_bodyparts)
|
||||
if(!H.dna.features["taur"] || H.dna.features["taur"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR)))
|
||||
bodyparts_to_add -= "taur"
|
||||
@@ -1647,8 +1654,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
)
|
||||
if (target.canbearoused)
|
||||
target.adjustArousalLoss(5)
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && HAS_TRAIT(target, TRAIT_MASO) && target.has_dna())
|
||||
target.mob_climax(forced_climax=TRUE)
|
||||
if (HAS_TRAIT(target, TRAIT_MASO))
|
||||
target.mob_climax_instant()
|
||||
if (!HAS_TRAIT(target, TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
|
||||
@@ -2005,8 +2012,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.update_damage_overlays()
|
||||
if(HAS_TRAIT(H, TRAIT_MASO))
|
||||
H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod)
|
||||
if (H.getArousalLoss() >= 100 && ishuman(H) && H.has_dna())
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.mob_climax_instant()
|
||||
|
||||
else//no bodypart, we deal damage with a more general method.
|
||||
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
|
||||
|
||||
@@ -690,6 +690,8 @@ generate/load female uniform sprites matching all previously decided variables
|
||||
. += "-[BP.digitigrade_type]"
|
||||
if(BP.dmg_overlay_type)
|
||||
. += "-[BP.dmg_overlay_type]"
|
||||
if(BP.cosmetic_icon)
|
||||
. += "-cosm[BP.cosmetic_icon]"
|
||||
if(BP.body_markings)
|
||||
. += "-[BP.body_markings]"
|
||||
else
|
||||
|
||||
@@ -77,8 +77,7 @@
|
||||
var/mob/living/carbon/human/B = src
|
||||
if(HAS_TRAIT(B, TRAIT_CHOKE_SLUT))
|
||||
B.adjustArousalLoss(7)
|
||||
if (B.getArousalLoss() >= 100 && ishuman(B) && B.has_dna())
|
||||
B.mob_climax(forced_climax=TRUE)
|
||||
B.mob_climax_instant()
|
||||
else
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
|
||||
else
|
||||
|
||||
@@ -200,6 +200,10 @@
|
||||
INVOKE_ASYNC(RM, .proc/do_transform_animation)
|
||||
SEND_SIGNAL(R, COMSIG_CYBORG_MODULE_CHANGE) //hyperstation edit
|
||||
qdel(src)
|
||||
//Skyrat change start
|
||||
R.radio.extra_channels = RM.added_channels
|
||||
R.radio.recalculateChannels()
|
||||
//Skyrat change stop
|
||||
return RM
|
||||
|
||||
/obj/item/robot_module/proc/be_transformed_to(obj/item/robot_module/old_module)
|
||||
@@ -459,7 +463,7 @@
|
||||
/obj/item/paint/anycolor,
|
||||
/obj/item/cookiesynth,
|
||||
/obj/item/pneumatic_cannon/pie/selfcharge/cyborg,
|
||||
///obj/item/razor, //killbait material
|
||||
/obj/item/razor, //killbait material
|
||||
/obj/item/lipstick/purple,
|
||||
/obj/item/soap/nanotrasen,
|
||||
/obj/item/reagent_containers/spray/waterflower/cyborg,
|
||||
@@ -493,7 +497,7 @@
|
||||
/obj/item/toy/crayon/spraycan/borg,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/hand_labeler/borg,
|
||||
///obj/item/razor,
|
||||
/obj/item/razor,
|
||||
/obj/item/crowbar/cyborg,
|
||||
/obj/item/instrument/violin,
|
||||
/obj/item/soap/nanotrasen,
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
if(inventory_back)
|
||||
armorval += inventory_back.armor.getRating(type)
|
||||
return armorval*0.5
|
||||
/*
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params)
|
||||
if (istype(O, /obj/item/razor))
|
||||
if (shaved)
|
||||
@@ -155,7 +155,7 @@
|
||||
return
|
||||
..()
|
||||
update_corgi_fluff()
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list)
|
||||
if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
usr << browse(null, "window=mob[REF(src)]")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -197,7 +197,10 @@
|
||||
L.visible_message("<span class='danger'>[L] is hit by \a [src][organ_hit_text]!</span>", \
|
||||
"<span class='userdanger'>[L] is hit by \a [src][organ_hit_text]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
if(candink && def_zone == BODY_ZONE_HEAD)
|
||||
playsound(src, 'sound/weapons/dink.ogg', 30, 1)
|
||||
if(prob(2))
|
||||
playsound(src, 'hyperstation/sound/weapons/dinkalternate.ogg', 30, 0)
|
||||
else
|
||||
playsound(src, 'sound/weapons/dink.ogg', 30, 1)
|
||||
L.on_hit(src)
|
||||
|
||||
var/reagent_note
|
||||
|
||||
@@ -65,6 +65,12 @@
|
||||
var/who = (isnull(user) || eater == user) ? "your" : "[eater.p_their()]"
|
||||
to_chat(user, "<span class='warning'>You have to remove [who] [covered] first!</span>")
|
||||
return 0
|
||||
if(!eater.has_mouth())
|
||||
if(eater == user)
|
||||
to_chat(eater, "<span class='warning'>You have no mouth, and cannot eat.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't feed [eater], because they have no mouth!</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/reagent_containers/ex_act()
|
||||
|
||||
@@ -282,16 +282,16 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(chalice_taken == 1)
|
||||
if(chalice_taken)
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"My chalice has already been taken, dear. I cannot give you another...\"</i></b>")
|
||||
return
|
||||
if(user.getArousalLoss() < 100)
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"You are not horny enough to receive my blessing, dear~\"</i></b>")
|
||||
return
|
||||
if (ishuman(user) && user.has_dna())
|
||||
user.mob_climax(forced_climax=TRUE)
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"You are worth of my blessing dear~\"</i></b>")
|
||||
to_chat(user, "<span class='userdanger'>You feel overpowering pleasure surge through your entire body.</span>")
|
||||
var/A = new /obj/item/reagent_containers/chalice/lust
|
||||
user.put_in_hands(A)
|
||||
chalice_taken = 1
|
||||
var/mob/living/carbon/user_carbon = user
|
||||
user_carbon.mob_climax_instant()
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"You are worthy of my blessing, dear~\"</i></b>")
|
||||
to_chat(user, "<span class='userdanger'>You feel overpowering pleasure surge through your entire body.</span>")
|
||||
var/A = new /obj/item/reagent_containers/chalice/lust
|
||||
user.put_in_hands(A)
|
||||
chalice_taken = TRUE
|
||||
@@ -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)
|
||||
|
||||
@@ -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()))
|
||||
|
||||
@@ -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>")
|
||||
@@ -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).
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -5,8 +5,6 @@ $include dbconfig.txt
|
||||
$include comms.txt
|
||||
$include antag_rep.txt
|
||||
$include donator_groupings.txt
|
||||
# Hyperstation Configs...
|
||||
$include hyperstation/jobs.txt
|
||||
|
||||
# You can use the @ character at the beginning of a config option to lock it from being edited in-game
|
||||
# Example usage:
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# Allow time off to be enabled
|
||||
## Uncomment to allow players to use their accrued time off
|
||||
## Defaults to off because this requires the database unless you want them to
|
||||
## use only what they accrued during the current round
|
||||
#TIME_OFF
|
||||
|
||||
# Allow PTO job changes
|
||||
## Currently this is required if using the previous to allow users to change
|
||||
## jobs. This may be changed in the future and can be used to expand the functionality
|
||||
## for something such as on-the-go job changing within the department, without heads.
|
||||
## Thus it remains here.
|
||||
#PTO_JOB_CHANGE
|
||||
+1
-4
@@ -3,7 +3,6 @@
|
||||
#Job names must be identical to the title var of each job datum
|
||||
#Positions can be set to -1 to allow unlimited slots
|
||||
Captain=1,1
|
||||
Lambent=1,1
|
||||
Head of Personnel=1,1
|
||||
Head of Security=1,1
|
||||
Chief Engineer=1,1
|
||||
@@ -17,9 +16,7 @@ Cargo Technician=3,2
|
||||
Shaft Miner=3,3
|
||||
|
||||
Bartender=1,1
|
||||
Barista=1,1
|
||||
Barber=2,1
|
||||
Cook=1,1
|
||||
Cook=2,1
|
||||
Botanist=3,2
|
||||
Janitor=2,1
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -1,11 +0,0 @@
|
||||
///////////////
|
||||
// PTO Types //
|
||||
///////////////
|
||||
#define PTO_COMMAND "Command"
|
||||
#define PTO_SECURITY "Security"
|
||||
#define PTO_MEDICAL "Medical"
|
||||
#define PTO_ENGINEERING "Engineering"
|
||||
#define PTO_SCIENCE "Science"
|
||||
#define PTO_CARGO "Cargo"
|
||||
#define PTO_CIVILIAN "Civilian"
|
||||
#define PTO_CYBORG "Silicon"
|
||||
@@ -1,11 +0,0 @@
|
||||
/// Toggles time off for jobs
|
||||
/datum/config_entry/flag/time_off
|
||||
|
||||
/// Toggles changing jobs with PTO
|
||||
/datum/config_entry/flag/pto_job_change
|
||||
|
||||
/// PTO hour cap
|
||||
/datum/config_entry/number/pto_cap
|
||||
config_entry_value = 100 /// Total hours
|
||||
min_val = 0 /// Minimum hourly value
|
||||
integer = FALSE /// We can be a float for partial hours
|
||||
@@ -1,18 +0,0 @@
|
||||
/**
|
||||
* Some modifications to the jobs subsystem, courtesy of SandPoot.
|
||||
* If we pull from upstream we should have this somewhere at some point, so it's shoehorned
|
||||
* in here for the moment.
|
||||
* Insert unhelpful comment here.
|
||||
*/
|
||||
|
||||
/datum/controller/subsystem/job/proc/get_job_name(job_name)
|
||||
if (!job_name)
|
||||
return "Unknown" // Invalid job
|
||||
//var/all_alt_titles = get_all_alt_titles()
|
||||
//if (job_name in all_alt_titles) // Check if the name is an alt title
|
||||
//return get_job_name(all_alt_titles[job_name]) // Locate the original job title and return it
|
||||
if (job_name in get_all_job_icons()) // Check if the job has a HUD icon
|
||||
return job_name
|
||||
if (job_name in get_all_centcom_jobs()) // Return the NT logo if it is a CentCom job
|
||||
return "CentCom"
|
||||
return "Unknown" // Return unknown if none of the above apply
|
||||
@@ -0,0 +1,18 @@
|
||||
/obj/effect/light/
|
||||
name = "bloom"
|
||||
icon = 'hyperstation/icons/effects/lighting.dmi'
|
||||
icon_state = "light"
|
||||
plane = ABOVE_LIGHTING_PLANE
|
||||
blend_mode = BLEND_ADD
|
||||
mouse_opacity = 0
|
||||
anchored = TRUE //no more flying around.
|
||||
|
||||
/obj/effect/light/medium
|
||||
icon = 'hyperstation/icons/effects/lightingmed.dmi'
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
|
||||
/obj/effect/light/large
|
||||
icon = 'hyperstation/icons/effects/lightinglarge.dmi'
|
||||
pixel_x = -48
|
||||
pixel_y = -48
|
||||
@@ -1,467 +0,0 @@
|
||||
/area/barber
|
||||
name = "Barber's Shop"
|
||||
icon_state = "barber"
|
||||
|
||||
/area/kinarisrep
|
||||
name = "Kinaris Representative Office"
|
||||
|
||||
/area/crew_quarters/bar/cafe
|
||||
name = "Cafe"
|
||||
icon_state = "cafe"
|
||||
|
||||
/area/crew_quarters/bar/cafe/backroom
|
||||
name = "Cafe Backroom"
|
||||
icon_state = "bar"
|
||||
|
||||
/area/crew_quarters/bar/cafe/storage
|
||||
name = "Cafe Storage"
|
||||
icon_state = "bar"
|
||||
|
||||
/area/artatrium
|
||||
name = "Art Atrium"
|
||||
icon_state = "library"
|
||||
|
||||
/area/crew_quarters/spa
|
||||
name = "Spa"
|
||||
icon_state = "sauna"
|
||||
|
||||
/area/crew_quarters/spa/sauna
|
||||
name = "Sauna"
|
||||
|
||||
/area/security/lambent
|
||||
name = "Lambent's Quarters"
|
||||
icon_state = "detective"
|
||||
|
||||
//In hindsight a lot of how this set up was stupid and I should probably redo it -Dahl
|
||||
//Upper Hallways
|
||||
/area/hallway/primary/aft/upper
|
||||
name = "Upper Aft Primary Hallway"
|
||||
icon_state = "hallA"
|
||||
|
||||
/area/hallway/primary/fore/upper
|
||||
name = "Upper Fore Primary Hallway"
|
||||
icon_state = "hallF"
|
||||
|
||||
/area/hallway/primary/starboard/upper
|
||||
name = "Upper Starboard Primary Hallway"
|
||||
icon_state = "hallS"
|
||||
|
||||
/area/hallway/primary/starboard/aft/upper
|
||||
name = "Upper Starboard Quarter Primary Hallway"
|
||||
icon_state = "hallAS"
|
||||
|
||||
/area/hallway/primary/starboard/fore/upper
|
||||
name = "Upper Starboard Bow Primary Hallway"
|
||||
icon_state = "hallFS"
|
||||
|
||||
/area/hallway/primary/port/upper
|
||||
name = "Upper Port Primary Hallway"
|
||||
icon_state = "hallP"
|
||||
|
||||
/area/hallway/primary/port/aft/upper
|
||||
name = "Upper Port Quarter Primary Hallway"
|
||||
icon_state = "hallAP"
|
||||
|
||||
/area/hallway/primary/port/fore/upper
|
||||
name = "Upper Port Bow Primary Hallway"
|
||||
icon_state = "hallFP"
|
||||
|
||||
/area/hallway/primary/central/upper
|
||||
name = "Upper Central Primary Hallway"
|
||||
icon_state = "hallC"
|
||||
|
||||
/area/hallway/secondary/command/upper
|
||||
name = "Upper Command Hallway"
|
||||
icon_state = "bridge_hallway"
|
||||
|
||||
/area/hallway/secondary/construction/upper
|
||||
name = "Upper Construction Area"
|
||||
icon_state = "construction"
|
||||
|
||||
/area/hallway/secondary/exit/upper
|
||||
name = "Upper Escape Shuttle Hallway"
|
||||
icon_state = "escape"
|
||||
|
||||
/area/hallway/secondary/exit/departure_lounge/upper
|
||||
name = "Upper Departure Lounge"
|
||||
icon_state = "escape_lounge"
|
||||
|
||||
/area/hallway/secondary/entry/upper
|
||||
name = "Upper Arrival Shuttle Hallway"
|
||||
icon_state = "entry"
|
||||
|
||||
/area/hallway/secondary/service/upper
|
||||
name = "Upper Service Hallway"
|
||||
icon_state = "hall_service"
|
||||
|
||||
//Upper Dorms
|
||||
/area/crew_quarters/dorms/upper
|
||||
name = "Upper Dormitories"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/toilet/upper
|
||||
name = "Upper Dormitory Toilets"
|
||||
icon_state = "toilet"
|
||||
|
||||
/area/crew_quarters/locker/upper
|
||||
name = "Upper Locker Room"
|
||||
icon_state = "locker"
|
||||
|
||||
//Upper Medbay
|
||||
/area/medical/medbay/upper
|
||||
name = "Upper Medbay"
|
||||
icon_state = "medbay"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
//Upper Maints
|
||||
//Departments
|
||||
|
||||
/area/maintenance/department/chapel/upper
|
||||
name = "Upper Chapel Maintenance"
|
||||
icon_state = "maint_chapel"
|
||||
|
||||
/area/maintenance/department/chapel/monastery/upper
|
||||
name = "Upper Monastery Maintenance"
|
||||
icon_state = "maint_monastery"
|
||||
|
||||
/area/maintenance/department/crew_quarters/bar/upper
|
||||
name = "Upper Bar Maintenance"
|
||||
icon_state = "maint_bar"
|
||||
|
||||
/area/maintenance/department/crew_quarters/dorms/upper
|
||||
name = "Upper Dormitory Maintenance"
|
||||
icon_state = "maint_dorms"
|
||||
|
||||
/area/maintenance/department/crew_quarters/locker/upper
|
||||
name = "Upper Locker Room Maintenance"
|
||||
icon_state = "maint_locker"
|
||||
|
||||
/area/maintenance/department/eva/upper
|
||||
name = "Upper EVA Maintenance"
|
||||
icon_state = "maint_eva"
|
||||
|
||||
/area/maintenance/department/electrical/upper
|
||||
name = "Upper Electrical Maintenance"
|
||||
icon_state = "maint_electrical"
|
||||
|
||||
/area/maintenance/department/engine/atmos/upper
|
||||
name = "Upper Atmospherics Maintenance"
|
||||
icon_state = "maint_atmos"
|
||||
|
||||
/area/maintenance/department/security/upper
|
||||
name = "Upper Security Maintenance"
|
||||
icon_state = "maint_sec"
|
||||
|
||||
/area/maintenance/department/security/brig/upper
|
||||
name = "Upper Brig Maintenance"
|
||||
icon_state = "maint_brig"
|
||||
|
||||
/area/maintenance/department/medical/upper
|
||||
name = "Upper Medbay Maintenance"
|
||||
icon_state = "medbay_maint"
|
||||
|
||||
/area/maintenance/department/medical/morgue/upper
|
||||
name = "Upper Morgue Maintenance"
|
||||
icon_state = "morgue_maint"
|
||||
|
||||
/area/maintenance/department/science/upper
|
||||
name = "Upper Science Maintenance"
|
||||
icon_state = "maint_sci"
|
||||
|
||||
/area/maintenance/department/cargo/upper
|
||||
name = "Upper Cargo Maintenance"
|
||||
icon_state = "maint_cargo"
|
||||
|
||||
/area/maintenance/department/bridge/upper
|
||||
name = "Upper Bridge Maintenance"
|
||||
icon_state = "maint_bridge"
|
||||
|
||||
/area/maintenance/department/engine/upper
|
||||
name = "Upper Engineering Maintenance"
|
||||
icon_state = "maint_engi"
|
||||
|
||||
/area/maintenance/department/science/xenobiology/upper
|
||||
name = "Upper Xenobiology Maintenance"
|
||||
icon_state = "xenomaint"
|
||||
xenobiology_compatible = TRUE
|
||||
|
||||
|
||||
//Generic
|
||||
|
||||
/area/maintenance/arrivals/north/upper
|
||||
name = "Upper Arrivals North Maintenance"
|
||||
icon_state = "fpmaint"
|
||||
|
||||
/area/maintenance/arrivals/north_2/upper
|
||||
name = "Upper Arrivals North Maintenance"
|
||||
icon_state = "fpmaint"
|
||||
|
||||
/area/maintenance/aft/upper
|
||||
name = "Upper Aft Maintenance"
|
||||
icon_state = "amaint"
|
||||
|
||||
/area/maintenance/aft/secondary/upper
|
||||
name = "Upper Aft Maintenance"
|
||||
icon_state = "amaint_2"
|
||||
|
||||
/area/maintenance/central/upper
|
||||
name = "Upper Central Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
|
||||
/area/maintenance/central/secondary/upper
|
||||
name = "Upper Central Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
|
||||
/area/maintenance/fore/upper
|
||||
name = "Upper Fore Maintenance"
|
||||
icon_state = "fmaint"
|
||||
|
||||
/area/maintenance/fore/secondary/upper
|
||||
name = "Upper Fore Maintenance"
|
||||
icon_state = "fmaint_2"
|
||||
|
||||
/area/maintenance/starboard/upper
|
||||
name = "Upper Starboard Maintenance"
|
||||
icon_state = "smaint"
|
||||
|
||||
/area/maintenance/starboard/central/upper
|
||||
name = "Upper Central Starboard Maintenance"
|
||||
icon_state = "smaint"
|
||||
|
||||
/area/maintenance/starboard/aft/upper
|
||||
name = "Upper Starboard Quarter Maintenance"
|
||||
icon_state = "asmaint"
|
||||
|
||||
/area/maintenance/starboard/fore/upper
|
||||
name = "Upper Starboard Bow Maintenance"
|
||||
icon_state = "fsmaint"
|
||||
|
||||
/area/maintenance/port/upper
|
||||
name = "Upper Port Maintenance"
|
||||
icon_state = "pmaint"
|
||||
|
||||
/area/maintenance/port/central/upper
|
||||
name = "Upper Central Port Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
|
||||
/area/maintenance/port/aft/upper
|
||||
name = "Upper Port Quarter Maintenance"
|
||||
icon_state = "apmaint"
|
||||
|
||||
/area/maintenance/port/fore/upper
|
||||
name = "Upper Port Bow Maintenance"
|
||||
icon_state = "fpmaint"
|
||||
|
||||
/area/maintenance/disposal/upper
|
||||
name = "Upper Waste Disposal"
|
||||
icon_state = "disposal"
|
||||
|
||||
/area/maintenance/disposal/incinerator/upper
|
||||
name = "Upper Incinerator"
|
||||
icon_state = "disposal"
|
||||
|
||||
//Misc Maint
|
||||
/area/maintenance/theatre
|
||||
name = "Theatre Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
|
||||
/area/maintenance/theatre/upper
|
||||
name = "Upper Theatre Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
|
||||
//Solar Maint
|
||||
|
||||
/area/maintenance/solars/upper
|
||||
name = "Upper Solar Maintenance"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/maintenance/solars/port/upper
|
||||
name = "Upper Port Solar Maintenance"
|
||||
icon_state = "SolarcontrolP"
|
||||
|
||||
/area/maintenance/solars/port/aft/upper
|
||||
name = "Upper Port Quarter Solar Maintenance"
|
||||
icon_state = "SolarcontrolAP"
|
||||
|
||||
/area/maintenance/solars/port/fore/upper
|
||||
name = "Upper Port Bow Solar Maintenance"
|
||||
icon_state = "SolarcontrolFP"
|
||||
|
||||
/area/maintenance/solars/starboard/upper
|
||||
name = "Upper Starboard Solar Maintenance"
|
||||
icon_state = "SolarcontrolS"
|
||||
|
||||
/area/maintenance/solars/starboard/aft/upper
|
||||
name = "Upper Starboard Quarter Solar Maintenance"
|
||||
icon_state = "SolarcontrolAS"
|
||||
|
||||
/area/maintenance/solars/starboard/fore/upper
|
||||
name = "Upper Starboard Bow Solar Maintenance"
|
||||
icon_state = "SolarcontrolFS"
|
||||
|
||||
/area/maintenance/solars/aux/port/upper
|
||||
name = "Upper Port Auxiliary Solar Maintenance"
|
||||
icon_state = "SolarcontrolA"
|
||||
|
||||
/area/maintenance/solars/aux/port/aft/upper
|
||||
name = "Upper Port Quarter Auxiliary Solar Maintenance"
|
||||
icon_state = "SolarcontrolAP"
|
||||
|
||||
/area/maintenance/solars/aux/port/fore/upper
|
||||
name = "Upper Port Bow Auxiliary Solar Maintenance"
|
||||
icon_state = "SolarcontrolA"
|
||||
|
||||
/area/maintenance/solars/aux/starboard/upper
|
||||
name = "Upper Starboard Auxiliary Solar Maintenance"
|
||||
icon_state = "SolarcontrolA"
|
||||
|
||||
/area/maintenance/solars/aux/starboard/aft/upper
|
||||
name = "Upper Starboard Quarter Auxiliary Solar Maintenance"
|
||||
icon_state = "SolarcontrolA"
|
||||
|
||||
/area/maintenance/solars/aux/starboard/fore/upper
|
||||
name = "Upper Starboard Bow Auxiliary Solar Maintenance"
|
||||
icon_state = "SolarcontrolA"
|
||||
|
||||
//Upper Security
|
||||
/area/security/upper
|
||||
name = "Upper Security"
|
||||
icon_state = "security"
|
||||
ambientsounds = HIGHSEC
|
||||
|
||||
/area/security/main/upper
|
||||
name = "Upper Security Office"
|
||||
icon_state = "security"
|
||||
|
||||
/area/security/brig/upper
|
||||
name = "Upper Brig"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/security/courtroom/upper
|
||||
name = "Upper Courtroom"
|
||||
icon_state = "courtroom"
|
||||
|
||||
/area/security/prison/upper
|
||||
name = "Upper Prison Wing"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/processing/upper
|
||||
name = "Upper Labor Shuttle Dock"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/processing/cremation/upper
|
||||
name = "Upper Security Crematorium"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/warden/upper
|
||||
name = "Upper Brig Control"
|
||||
icon_state = "Warden"
|
||||
|
||||
/area/security/armory/upper
|
||||
name = "Upper Armory"
|
||||
icon_state = "armory"
|
||||
|
||||
/area/security/detectives_office/upper
|
||||
name = "Detective's Office"
|
||||
icon_state = "detective"
|
||||
ambientsounds = list('sound/ambience/ambidet1.ogg','sound/ambience/ambidet2.ogg')
|
||||
|
||||
/area/security/detectives_office/private_investigators_office/upper
|
||||
name = "Upper Private Investigator's Office"
|
||||
icon_state = "detective"
|
||||
|
||||
/area/security/range/upper
|
||||
name = "Upper Firing Range"
|
||||
icon_state = "firingrange"
|
||||
|
||||
//Misc security
|
||||
/area/security/locker
|
||||
name = "Security Locker Room"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/security/visitation
|
||||
name = "Security Visitation"
|
||||
icon_state = "brig"
|
||||
|
||||
//Misc Dorms
|
||||
/area/crew_quarters/dorms/A
|
||||
name = "Dormitories A"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/dorms/B
|
||||
name = "Dormitories B"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/dorms/C
|
||||
name = "Dormitories C"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/dorms/D
|
||||
name = "Dormitories D"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/dorms/E
|
||||
name = "Dormitories E"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/dorms/F
|
||||
name = "Dormitories F"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/dorms/G
|
||||
name = "Dormitories G"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/dorms/H
|
||||
name = "Dormitories H"
|
||||
icon_state = "Sleep"
|
||||
safe = TRUE
|
||||
|
||||
/area/crew_quarters/park
|
||||
name = "Park"
|
||||
icon_state = "park"
|
||||
|
||||
/area/janitor/upper
|
||||
name = "Upper Custodial Closet"
|
||||
|
||||
/area/storage/A
|
||||
name = "Storage Office A"
|
||||
icon_state = "storage"
|
||||
|
||||
/area/storage/B
|
||||
name = "Storage Office B"
|
||||
icon_state = "storage"
|
||||
|
||||
/area/storage/C
|
||||
name = "Storage Office C"
|
||||
icon_state = "storage"
|
||||
|
||||
/area/storage/D
|
||||
name = "Storage Office D"
|
||||
icon_state = "storage"
|
||||
|
||||
/area/theatre/blackbox
|
||||
name = "Theatre Blackbox"
|
||||
icon_state = "Theatre"
|
||||
|
||||
//Misc cargo
|
||||
/area/quartermaster/mail
|
||||
name = "Mail Office"
|
||||
icon_state = "cargo_mail"
|
||||
|
||||
//Misc Engineering
|
||||
/area/engine/custom
|
||||
name = "Custom Engine Room"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/engine/tether
|
||||
name = "Sky Tether Control"
|
||||
icon_state = "engine"
|
||||
@@ -1,3 +0,0 @@
|
||||
/obj/machinery/announcement_system
|
||||
var/onduty = "%PERSON has moved On-Duty as %RANK."
|
||||
var/offduty = "%PERSON, %RANK, has moved Off-Duty."
|
||||
@@ -1,310 +0,0 @@
|
||||
/// Timeclock terminal, ported from VOREStation
|
||||
/obj/machinery/computer/timeclock
|
||||
name = "timeclock terminal" // Name of the object
|
||||
icon = 'hyperstation/icons/obj/machinery/timeclock.dmi' // Spritesheet for the object's icon
|
||||
icon_state = "timeclock" // Icon state from the spritesheet
|
||||
icon_keyboard = null // Keyboard state because this is a computer and we need to tell it to not have a keyboard
|
||||
light_color = "#0099ff" // TODO: Adjust this // Color for the light coming from the object
|
||||
light_power = 0.5 // Brightness of the light coming from the object
|
||||
layer = ABOVE_WINDOW_LAYER // Layer for the object
|
||||
density = FALSE // Density of the object, so we can walk through it
|
||||
circuit = /obj/item/circuitboard/computer/timeclock // Circuitboard for the object in case it gets destroyed
|
||||
|
||||
var/obj/item/card/id/card // Inserted ID card
|
||||
|
||||
/// For when we create a new timeclock
|
||||
/obj/machinery/computer/timeclock/New()
|
||||
..() // Let's do this just to be safe.
|
||||
|
||||
// For when a timeclock is destroyed
|
||||
/obj/machinery/computer/timeclock/Destroy()
|
||||
if (card) // If we're holding an ID and get destroyed
|
||||
card.forceMove(get_turf(src)) // Get rid of the fucker
|
||||
card = null // And make sure we know it's gone
|
||||
. = ..() // Someone's gonna ask later, refer them here.
|
||||
// This shit just sets our return value to our parent proc's return value.
|
||||
|
||||
// Determines what icon to used based on a couple factors
|
||||
/obj/machinery/computer/timeclock/update_icon()
|
||||
if (!process()) // If we can't process
|
||||
icon_state = "[initial(icon_state)]_off" // we must be offline.
|
||||
else if (card) // If we have an ID
|
||||
icon_state = "[initial(icon_state)]_card" // display it!
|
||||
else // All else fails?
|
||||
icon_state = "[initial(icon_state)]" // We're just a clock.
|
||||
|
||||
/// Allows the timeclock to update its icon and lighting on power change, should power go out
|
||||
/obj/machinery/computer/timeclock/power_change()
|
||||
var/old_stat = stat // Save our old stats for later
|
||||
..() // Call the parent proc to handle the actual powernet shit
|
||||
if (old_stat != stat) // If our stat changed
|
||||
update_icon() // update our icon
|
||||
if (stat & NOPOWER) // If we no longer have power
|
||||
set_light(0) // turn off our lights
|
||||
else // Otherwise
|
||||
set_light(brightness_on) // turn on our lights
|
||||
|
||||
/// Handle clicking with an object
|
||||
/obj/machinery/computer/timeclock/attackby(obj/I, mob/user)
|
||||
if (istype(I, /obj/item/card/id)) // If the user clicked with an ID in hand
|
||||
if (!card && user.canUnEquip(I)) // Check if we already have an ID and that the user can drop the ID
|
||||
I.forceMove(src) // Move the ID into our own location
|
||||
card = I // Set our card to the ID
|
||||
SStgui.update_uis(src) // Update all open UIs for us
|
||||
update_icon() // Update our icon to reflect the new ID
|
||||
else if (card) // There must've already been an ID inserted
|
||||
to_chat(user, "<span class='warning'>There is already an ID card inside.</span>")
|
||||
return // Quit doing shit so we don't hit the timeclock
|
||||
. = ..() // Set our return value to that of the parent proc
|
||||
|
||||
/// Handle user clicking
|
||||
/obj/machinery/computer/timeclock/attack_hand(var/mob/user as mob)
|
||||
if (..()) // If for some reason the parent proc returns true
|
||||
return // We won't do anything
|
||||
user.set_machine(src) // Otherwise, set the mob's machine to us
|
||||
ui_interact(user) // Provide a UI to the user
|
||||
|
||||
/// Handle UI interactions with this arcane shit known as tee gee yew eye
|
||||
/obj/machinery/computer/timeclock/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui) // Attempt to update the UI
|
||||
if (!ui) // If the UI doesn't exist
|
||||
ui = new(user, src, "TimeClock", name) // Make a new one
|
||||
ui.open() // And open it for the user
|
||||
|
||||
/// Handle UI data
|
||||
/obj/machinery/computer/timeclock/ui_data(mob/user)
|
||||
var/list/data = ..() // Call the parent object's data proc and assign that to the data list
|
||||
|
||||
// Data for showing user's own PTO
|
||||
if (user.client) // If the client exists
|
||||
data["department_hours"] = \
|
||||
SANITIZE_LIST(user.client.department_hours) // Add the department hours list into data
|
||||
data["user_name"] = "[user]" // Set the username to the user
|
||||
|
||||
// Data about the card we put into the timeclock
|
||||
data["card"] = null // Add card data,
|
||||
data["assignment"] = null // Assignment data,
|
||||
data["job_datum"] = null // The job datum,
|
||||
data["allow_change_job"] = null // Whether or not we can change jobs,
|
||||
data["job_choices"] = null // And the possible jobs
|
||||
if (card) // If we have a card
|
||||
data["card"] = "[card]" // Set card data,
|
||||
data["assignment"] = card.assignment // Assignment data,
|
||||
var/datum/job/job = \
|
||||
SSjob.GetJob(SSjob.get_job_name(card.assignment)) // Create a new job datum,
|
||||
if (job) // If the job exists
|
||||
data["job_datum"] = list( // Set job datum to a list with
|
||||
"title" = job.title, // The job title,
|
||||
"departments" = \
|
||||
flags_to_english(job.department_flag, job.flag), // The job department,
|
||||
"selection_color" = job.selection_color, // The selection color,
|
||||
"timeoff_factor" = job.timeoff_factor, // The timeoff factor,
|
||||
"pto_department" = job.pto_type // And the PTO type
|
||||
)
|
||||
if (CONFIG_GET(flag/time_off) \
|
||||
&& CONFIG_GET(flag/pto_job_change)) // If we allow timeoff and job changing
|
||||
data["allow_change_job"] = TRUE // Add that to the data
|
||||
if (job && job.timeoff_factor < 0) // They're off duty so we have to lookup available jobs
|
||||
data["job_choices"] = \
|
||||
get_open_on_duty_jobs(user, job.pto_type) // Set the job choices
|
||||
|
||||
return data // Give back the data list for subprocs
|
||||
|
||||
/// The user interacted with me? owo!
|
||||
/obj/machinery/computer/timeclock/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
||||
if (..()) // Check if the parent UI had anything to say
|
||||
return TRUE // If so, we don't care to do anything
|
||||
|
||||
add_fingerprint(usr) // Add the user's fingerprint to the list so sec can find them
|
||||
|
||||
switch (action) // Check the action completed
|
||||
if ("id") // If the ID slot was clicked
|
||||
if (card) // Check if we have an ID already
|
||||
usr.put_in_hands(card) // If so, give the user the card
|
||||
card = null // And make sure we don't have it
|
||||
else // Otherwise
|
||||
var/obj/item/I = usr.get_active_held_item() // Get the item in their active hand
|
||||
if (istype(I, /obj/item/card/id) && usr.canUnEquip(I)) // Check if it's an ID and they can unequip the ID
|
||||
I.forceMove(src) // If so, move it into us
|
||||
card = I // And make sure we know we have it
|
||||
update_icon() // Update our icon too because we did something
|
||||
return TRUE // And stop handling any UI in this run
|
||||
if ("switch-to-on-duty-rank") // If they switched to on-duty
|
||||
if (check_face()) // Check that their face is visible
|
||||
if (check_card_cooldown()) // And their card isn't on cooldown
|
||||
make_on_duty(params["switch-to-on-duty-rank"], \
|
||||
params["switch-to-on-duty-assignment"]) // Finally make them on-duty with the requested rank+assignment
|
||||
usr.put_in_hands(card) // Give them their new card
|
||||
card = null // And get it out of us
|
||||
update_icon() // Update our icon in case the card was removed
|
||||
return TRUE // And stop handling UI in this run
|
||||
if ("switch-to-off-duty") // If they switched to off-duty
|
||||
if (check_face()) // Check that their face is visible
|
||||
if (check_card_cooldown()) // And that their card isn't on cooldown
|
||||
make_off_duty() // Finally make them off-duty
|
||||
usr.put_in_hands(card) // Shit out their ID into their hand
|
||||
card = null // And get rid of that card
|
||||
update_icon() // Update our icon in case the card was removed
|
||||
return TRUE // And stop handling any UI in this run
|
||||
|
||||
/// Gets the open on-duty jobs available to a user in a specified department
|
||||
/obj/machinery/computer/timeclock/proc/get_open_on_duty_jobs(var/mob/user, var/department)
|
||||
var/list/available_jobs = list() // Make a list of available jobs
|
||||
for (var/datum/job/job in SSjob.occupations) // For all jobs in existing occupations
|
||||
if (is_open_onduty_job(user, department, job)) // Check if the job is open and on-duty for a user and given department
|
||||
available_jobs[job.title] = list(job.title) // If it is, add it to the list of available jobs
|
||||
if (job.alt_titles) // If the job has alt-titles (Like Station Engineer->Mechanic)
|
||||
for (var/alt_job in job.alt_titles) // Go through all the alt titles
|
||||
if (alt_job != job.title) // And if it isn't the current job's title (Station Engineer's alt title of Station Engineer)
|
||||
available_jobs[job.title] += alt_job // Add it to the list under that job title
|
||||
return available_jobs // Return the newly-filled list of available jobs
|
||||
|
||||
/// How does xenobio work again? Oh right, we're checking the user's face here to allow access and prevent ne'er-do-wells from using someone's PTO
|
||||
/obj/machinery/computer/timeclock/proc/check_face()
|
||||
if (!card) // If no card is inserted (why are we checking their face?)
|
||||
to_chat(usr, "<span class='notice'>No ID is inserted.</span>")
|
||||
return FALSE // Face check failed
|
||||
var/mob/living/carbon/human/H = usr // Get the usr as a human data type
|
||||
if (!(istype(H))) // If they somehow aren't a human??
|
||||
to_chat(usr, "<span class='warning'>Invalid user detected. Access denied.</span>")
|
||||
return FALSE // Face check failed
|
||||
else if ((H.wear_mask && (H.wear_mask.flags_inv & HIDEFACE)) \
|
||||
|| (H.head && (H.head.flags_inv & HIDEFACE))) // No, you can't hide your face
|
||||
to_chat(usr, "<span class='warning'>Facial recognition scan failed due to physical obstruction. Access denied.</span>")
|
||||
return FALSE // Face check failed
|
||||
else if (H.get_face_name() == "Unknown" \
|
||||
|| !(H.real_name == card.registered_name)) // If they're unknown or their real name isn't the name on the ID
|
||||
to_chat(usr, "<span class='warning'>Facial recognition scan failed. Access denied.</span>")
|
||||
return FALSE // Face check failed
|
||||
else // Otherwise
|
||||
return TRUE // Face check success!
|
||||
|
||||
/// Force users to wait 10 minutes between clocking in and out
|
||||
/obj/machinery/computer/timeclock/proc/check_card_cooldown()
|
||||
if (!card) // If we don't have a card
|
||||
return FALSE // We can't check cooldown, fail the check
|
||||
var/time_left = 10 MINUTES - (world.time - card.last_job_switch) // Determine how much time is left before the next switch
|
||||
if (time_left > 0) // If there's any time left at all
|
||||
to_chat(usr, "You need to wait another [round((time_left / 10) / 60, 1)] minute\s before you can switch.")
|
||||
return FALSE // Fail the check
|
||||
return TRUE // Otherwise pass the check
|
||||
|
||||
/// Makes the active card on-duty with a set rank and assignment
|
||||
/obj/machinery/computer/timeclock/proc/make_on_duty(var/new_rank, var/new_assignment)
|
||||
var/datum/job/old_job = \
|
||||
SSjob.GetJob(SSjob.get_job_name(card.assignment)) // Get their old job from the card
|
||||
var/datum/job/new_job = SSjob.GetJob(new_rank) // And their new job from the rank
|
||||
|
||||
if (!old_job \
|
||||
|| !is_open_onduty_job(usr, old_job.pto_type, new_job)) // If there's no old job or it's not an open and on-duty job
|
||||
return // Do nothing
|
||||
if (new_assignment != new_job.title \
|
||||
&& !(new_assignment in new_job.alt_titles)) // If the new assignment isn't the new job's title or alt-title
|
||||
return // Do nothing
|
||||
if (new_job) // As long as there's a new job
|
||||
card.access = new_job.get_access() // Set the card's access to the new job's access
|
||||
card.assignment = new_assignment // And the card's assignment to the new assignment
|
||||
card.name = text(\
|
||||
"[card.registered_name]'s ID Card ([card.assignment])") // And change the card's name
|
||||
GLOB.data_core.manifest_modify(card.registered_name, \
|
||||
card.assignment) // Apply the changes to the crew manifest
|
||||
card.last_job_switch = world.time // Set the last job switch on the card to the current world time
|
||||
new_job.current_positions++ // Add one to the current positions for the new job
|
||||
var/mob/living/carbon/human/H = usr // Get the caller as a human data type
|
||||
H.mind.assigned_role = card.assignment // Set the assigned role of the caller's mind to the assignment on the card
|
||||
if (GLOB.announcement_systems.len) // If there are any announcement systems
|
||||
var/obj/machinery/announcement_system/announcer = \
|
||||
pick(GLOB.announcement_systems) // Pick an announcer, any announcer!
|
||||
announcer.announce("ONDUTY", card.registered_name, \
|
||||
card.assignment, list()) // Make the announcement for now on-duty personnel
|
||||
|
||||
/// Makes the active card off-duty
|
||||
/obj/machinery/computer/timeclock/proc/make_off_duty()
|
||||
var/datum/job/found_job = \
|
||||
SSjob.GetJob(SSjob.get_job_name(card.assignment)) // Get the current job from the inserted card
|
||||
if (!found_job) // If the card somehow doesn't have a job
|
||||
return // https://www.youtube.com/watch?v=2k0SmqbBIpQ
|
||||
var/new_dept = found_job.pto_type || PTO_CIVILIAN // New department is either the department's PTO type or civilian PTO
|
||||
var/datum/job/pto_job = null // Create a new PTO job
|
||||
for (var/datum/job/job in SSjob.occupations) // For all jobs in the list of occupations
|
||||
if (job.pto_type == new_dept \
|
||||
&& job.timeoff_factor < 0) // If the job is the department's PTO type and has a negative timeoff factor
|
||||
pto_job = job // That's the new PTO job
|
||||
break // And stop looking
|
||||
if (pto_job) // If a PTO job was found
|
||||
// Apparently we aren't using this? I don't fucking know
|
||||
// var/old_title = card.assignment
|
||||
card.access = pto_job.get_access() // Assign the PTO job's access to the ID
|
||||
card.assignment = pto_job.title // And the PTO job's title to the ID
|
||||
card.name = text(\
|
||||
"[card.registered_name]'s ID Card ([card.assignment])") // Set the card's new name
|
||||
GLOB.data_core.manifest_modify(card.registered_name, \
|
||||
card.assignment) // And apply that change to the crew manifest
|
||||
card.last_job_switch = world.time // Set the last job switch on the card to the world's current time
|
||||
var/mob/living/carbon/human/H = usr // Get the caller as a human data type
|
||||
H.mind.assigned_role = pto_job.title // Set their mind's assigned role to the PTO job's title
|
||||
found_job.current_positions-- // Remove one from the found job's position count since they no longer have that job
|
||||
if (GLOB.announcement_systems.len) // If there are any announcement systems
|
||||
var/obj/machinery/announcement_system/announcer = \
|
||||
pick(GLOB.announcement_systems) // Pick an announcement system, any announcement system!
|
||||
announcer.announce("OFFDUTY", card.registered_name, \
|
||||
card.assignment, list()) // Make an off-duty announcement with that system
|
||||
return // I really don't know why this return exists we always return anyways lol
|
||||
|
||||
/// Check if a job is open and on-duty for a given user and department
|
||||
/obj/machinery/computer/timeclock/proc/is_open_onduty_job(var/mob/user, var/department, var/datum/job/job)
|
||||
return job \
|
||||
&& job.current_positions <= job.total_positions \
|
||||
&& !jobban_isbanned(user, SSjob.get_job_name(job.title)) \
|
||||
&& job.player_old_enough(user.client) \
|
||||
&& job.pto_type == department \
|
||||
&& job.timeoff_factor > 0 // I feel like this requires some HEAVY explanation so here we go.
|
||||
// First we check if the job exists
|
||||
// Then we check that there are enough open slots
|
||||
// Then we check if the user is jobbanned or not and negate that because it'll return positive if they're banned
|
||||
// Then we have to check that they have enough playtime to actually join as that job
|
||||
// Then we have to check that the PTO type matches the department requested (can't join security with a PTO type of medical)
|
||||
// Then we have to check that there's a timeoff value so you can actually accrue hours of PTO by playing as that role
|
||||
|
||||
/// Convert a department and job flag to an english phrase
|
||||
/obj/machinery/computer/timeclock/proc/flags_to_english(var/department,var/flag)
|
||||
if (department == ENGSEC) // If the department flag is engineering or security (or silicon apparently?)
|
||||
switch (flag) // Switch based on the flag
|
||||
if (CAPTAIN, HOS, WARDEN, CHIEF) // Captain, Head of Security, Warden or Chief Engineer
|
||||
return "Command" // Are all command
|
||||
if (DETECTIVE, OFFICER) // Detectives and Officers
|
||||
return "Security" // Are all security
|
||||
//if (BRIGDOC) // Brig Docs
|
||||
//return "Medsec" // Are medical and science
|
||||
if (LAMBENT) // Lambent
|
||||
return "Lambent" // Are obviously Lambent. Dunno what you expected fam
|
||||
if (ENGINEER, ATMOSTECH) // Engineers and Atmos Technicians
|
||||
return "Engineering" // Are engineering
|
||||
if (ROBOTICIST) // Roboticist is defined here but I think it was supposed to be with medsci? Just in case.
|
||||
return "Science" // They're science
|
||||
else // Technically this won't always be silicon
|
||||
return "Silicon" // But we're listing your ass as silicon anyways. Cope.
|
||||
else if (department == MEDSCI) // Otherwise, if the department flag is medical or science
|
||||
switch (flag) // Switch based on the flag (again)
|
||||
if (RD_JF, CMO_JF) // Research Director or Chief Medical Officer
|
||||
return "Command" // Are both command
|
||||
if (SCIENTIST, ROBOTICIST) // Scientists and Roboticists (this is where I think this was meant to be but it's still with ENGSEC just in case)
|
||||
return "Science" // Are obviously science
|
||||
if (CHEMIST, DOCTOR, VIROLOGIST) // Chemists, Doctors, Virologists and Paramedics
|
||||
return "Medical" // Are medical
|
||||
if (GENETICIST) // Geneticists
|
||||
return "Medsci" // Are kind of a special, middle of the road medical and science case
|
||||
else // If you're landing here you're fucked
|
||||
return "What the fuck?" // So what the fuck?
|
||||
else if (department == CIVILIAN) // Otherwise you must be civilian, right? Right???
|
||||
switch (flag) // Once again a switch based on the flag
|
||||
if (HOP, QUARTERMASTER) // Head of Personnel and Quartermaster
|
||||
return "Command" // Are command
|
||||
//if (PRISONER) // Prisoners
|
||||
//return "Prisoner" // Are... prisoners? They shouldn't be able to PTO but if they manage to break out they can access a console so no fuck you here
|
||||
if (CARGOTECH, MINER) // Cargo Technicians and Miners
|
||||
return "Cargo" // Are cargonians
|
||||
else // Otherwise
|
||||
return "Civilian" // You must be a civilian. You could be an assisstant or a clown or a bartender, I don't really care.
|
||||
else // New department combo? Wack.
|
||||
return "What the fuck?" // what the fuck?
|
||||
@@ -1,11 +0,0 @@
|
||||
/obj/effect/landmark/start/lambent
|
||||
name = "Lambent"
|
||||
icon_state = "Lambent"
|
||||
|
||||
/obj/effect/landmark/start/barber
|
||||
name = "Barber"
|
||||
icon_state = "Barber"
|
||||
|
||||
/obj/effect/landmark/start/barista
|
||||
name = "Barista"
|
||||
icon_state = "Barista"
|
||||
@@ -1,2 +0,0 @@
|
||||
/obj/item/card/id
|
||||
var/last_job_switch /// Last job switch for card's owner
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user