Merge remote-tracking branch 'upstream/master'

This commit is contained in:
DeltaFire
2021-01-06 19:19:39 +01:00
92 changed files with 2276 additions and 1493 deletions
+176 -237
View File
@@ -69,35 +69,18 @@
/turf/closed/wall/r_wall,
/area/security/prison)
"aaj" = (
/obj/structure/cable{
icon_state = "1-4"
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/closed/wall/r_wall,
/area/security/prison)
"aak" = (
/obj/structure/cable{
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/prison)
"aal" = (
/obj/structure/cable{
icon_state = "0-4"
},
/obj/structure/cable{
icon_state = "0-8"
},
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/turf/open/floor/plasteel,
/area/security/prison)
"aam" = (
/obj/structure/cable{
icon_state = "0-2"
},
/obj/structure/cable{
icon_state = "0-8"
},
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/prison)
@@ -115,11 +98,17 @@
/obj/structure/sign/warning/electricshock{
pixel_y = 32
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/grass,
/area/security/prison)
"aap" = (
/obj/machinery/hydroponics/soil,
/obj/item/seeds/carrot,
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/grass,
/area/security/prison)
"aaq" = (
@@ -140,17 +129,29 @@
/obj/structure/sink{
pixel_y = 20
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/security/prison)
"aar" = (
/obj/machinery/hydroponics/soil,
/obj/item/seeds/glowshroom,
/obj/structure/cable{
icon_state = "1-4"
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/grass,
/area/security/prison)
"aas" = (
/obj/structure/sign/warning/electricshock{
pixel_y = 32
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/security/prison)
"aat" = (
@@ -5666,6 +5667,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plasteel,
/area/security/brig)
"akw" = (
@@ -5845,10 +5849,13 @@
/area/science/xenobiology)
"akQ" = (
/obj/structure/cable{
icon_state = "4-8"
icon_state = "1-2"
},
/turf/closed/wall,
/area/security/brig)
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plasteel,
/area/security/prison)
"akR" = (
/obj/machinery/camera{
c_tag = "Security Office";
@@ -6108,7 +6115,7 @@
"alq" = (
/obj/machinery/door/airlock/security/glass{
name = "Evidence Storage";
req_access_txt = "4"
req_one_access_txt = "4;1"
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -6142,25 +6149,11 @@
/turf/open/floor/plasteel,
/area/security/brig)
"alt" = (
/obj/machinery/door/airlock/security/glass{
id_tag = "innerbrig";
name = "Brig";
req_access_txt = "63"
},
/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/security/brig)
@@ -6180,16 +6173,11 @@
/area/ai_monitored/nuke_storage)
"alv" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-8"
},
/obj/structure/cable{
icon_state = "0-4"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Gate";
name = "brig shutters"
},
/obj/structure/cable,
/turf/open/floor/plating,
/area/security/brig)
"alw" = (
@@ -6272,6 +6260,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plasteel,
/area/security/brig)
"alB" = (
@@ -6572,9 +6563,6 @@
/turf/open/floor/engine,
/area/science/xenobiology)
"amm" = (
/obj/structure/cable{
icon_state = "0-8"
},
/obj/structure/cable{
icon_state = "0-4"
},
@@ -6609,6 +6597,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/security/brig)
"amq" = (
@@ -6661,9 +6652,6 @@
icon_state = "0-8"
},
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-4"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/security/brig)
@@ -6763,6 +6751,12 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/structure/cable{
icon_state = "1-8"
},
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plasteel,
/area/security/brig)
"amJ" = (
@@ -6853,25 +6847,15 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
"amR" = (
/obj/structure/cable{
icon_state = "0-4"
},
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Gate";
name = "brig shutters"
},
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/brig)
"amS" = (
/obj/structure/cable{
icon_state = "4-8"
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
},
/turf/closed/wall/r_wall,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/security/brig)
"amT" = (
/obj/structure/cable{
@@ -7271,9 +7255,11 @@
/obj/structure/cable{
icon_state = "0-4"
},
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plating,
/area/security/brig)
"anQ" = (
@@ -7281,9 +7267,6 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/security/brig)
"anR" = (
@@ -7514,14 +7497,13 @@
/obj/structure/cable{
icon_state = "0-4"
},
/obj/structure/cable,
/obj/machinery/door/poddoor/preopen{
id = "Secure Gate";
name = "brig shutters"
},
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "1-8"
icon_state = "0-8"
},
/turf/open/floor/plating,
/area/security/brig)
@@ -7755,13 +7737,13 @@
/area/security/brig)
"aoZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-2"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Brig Control";
name = "brig shutters"
},
/obj/structure/cable{
icon_state = "0-4"
},
/turf/open/floor/plating,
/area/security/warden)
"apa" = (
@@ -7780,6 +7762,9 @@
/area/science/xenobiology)
"apc" = (
/obj/structure/chair/office/dark,
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"apd" = (
@@ -7933,6 +7918,12 @@
pixel_x = 6;
pixel_y = 3
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"apw" = (
@@ -8052,6 +8043,12 @@
pixel_y = -24;
req_access_txt = "2"
},
/obj/structure/cable{
icon_state = "2-4"
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"apI" = (
@@ -8133,9 +8130,6 @@
req_access_txt = "63"
},
/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -8158,14 +8152,19 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"apT" = (
/obj/machinery/door/poddoor/preopen{
id = "Cell Interior Shutters";
name = "brig shutters"
},
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "4-8"
icon_state = "0-8"
},
/obj/structure/cable{
icon_state = "1-8"
icon_state = "0-4"
},
/turf/closed/wall/r_wall,
/area/security/warden)
/turf/open/floor/plating,
/area/security/brig)
"apU" = (
/turf/open/floor/plating,
/area/security/vacantoffice/b)
@@ -8181,20 +8180,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
"apX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-8"
},
/obj/structure/cable{
icon_state = "0-4"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Brig Control";
name = "brig shutters"
},
/turf/open/floor/plating,
/area/security/warden)
"apY" = (
/obj/machinery/light/small{
dir = 1
@@ -8406,13 +8391,11 @@
/area/crew_quarters/fitness/pool)
"aqt" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Brig Control";
name = "brig shutters"
},
/obj/structure/cable,
/turf/open/floor/plating,
/area/security/warden)
"aqu" = (
@@ -8858,6 +8841,9 @@
c_tag = "Brig Control";
dir = 1
},
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"arz" = (
@@ -11044,18 +11030,12 @@
/obj/structure/closet/crate/coffin,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"axo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/fore)
"axp" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
},
/turf/open/floor/plating,
/area/maintenance/fore)
/area/maintenance/port/fore)
"axq" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -11454,10 +11434,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
"ayC" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/maintenance/fore)
"ayD" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plasteel/dark,
@@ -14269,10 +14245,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/fore)
"aGh" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plating,
/area/maintenance/fore)
"aGi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
@@ -52616,9 +52588,6 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/security/brig)
"cLS" = (
@@ -53367,7 +53336,7 @@
},
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/maintenance/fore)
/area/maintenance/port/fore)
"ddM" = (
/obj/structure/sign/poster/official/the_owl{
pixel_x = 32
@@ -53521,9 +53490,17 @@
/area/science/circuit)
"dyE" = (
/obj/structure/cable{
icon_state = "1-2"
icon_state = "0-4"
},
/turf/open/floor/plasteel,
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Gate";
name = "brig shutters"
},
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/brig)
"dyS" = (
/obj/effect/turf_decal/tile/green{
@@ -53583,9 +53560,6 @@
/turf/open/space,
/area/space/nearstation)
"dCV" = (
/obj/structure/cable{
icon_state = "1-4"
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -53746,7 +53720,7 @@
dir = 1
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/fore)
/area/maintenance/port/fore)
"edA" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -54942,7 +54916,7 @@
"gKG" = (
/obj/structure/bedsheetbin/towel,
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/fore)
/area/maintenance/port/fore)
"gLz" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -54994,11 +54968,11 @@
/obj/structure/cable{
icon_state = "0-8"
},
/obj/structure/cable{
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plating,
/area/security/brig)
"gOZ" = (
@@ -56220,7 +56194,7 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/maintenance/fore)
/area/maintenance/port/fore)
"jJF" = (
/obj/machinery/door/airlock/maintenance,
/obj/structure/cable{
@@ -56342,15 +56316,15 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/structure/cable{
icon_state = "2-4"
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/security/brig)
"kcx" = (
@@ -56869,9 +56843,6 @@
/turf/open/floor/plasteel,
/area/security/brig)
"laq" = (
/obj/structure/cable{
icon_state = "2-8"
},
/obj/structure/cable{
icon_state = "2-4"
},
@@ -57013,7 +56984,7 @@
dir = 8
},
/turf/closed/wall,
/area/maintenance/fore)
/area/maintenance/port/fore)
"lzt" = (
/obj/machinery/portable_atmospherics/pump,
/obj/effect/turf_decal/stripes/line,
@@ -57160,7 +57131,7 @@
/area/maintenance/starboard/aft)
"lZn" = (
/obj/machinery/door/airlock/security/glass{
id_tag = "innerbrig";
id_tag = null;
name = "Brig Infirmary";
req_access_txt = "2"
},
@@ -57605,7 +57576,7 @@
},
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/maintenance/fore)
/area/maintenance/port/fore)
"nbT" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -58195,9 +58166,6 @@
/area/hallway/primary/central)
"ovv" = (
/obj/structure/table,
/obj/structure/cable{
icon_state = "0-2"
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -58540,9 +58508,6 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/structure/cable{
icon_state = "2-4"
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -58671,9 +58636,6 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/structure/cable{
icon_state = "2-8"
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -58681,7 +58643,10 @@
dir = 4
},
/obj/structure/cable{
icon_state = "2-4"
icon_state = "4-8"
},
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/security/brig)
@@ -58809,9 +58774,6 @@
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"pQr" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -59081,7 +59043,7 @@
dir = 8
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/fore)
/area/maintenance/port/fore)
"qIw" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -59498,9 +59460,6 @@
/area/maintenance/bar)
"rCl" = (
/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -59544,20 +59503,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
"rJv" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-4"
},
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Gate";
name = "brig shutters"
},
/turf/open/floor/plating,
/area/security/brig)
"rJw" = (
/obj/structure/table/glass,
/obj/item/hemostat,
@@ -59689,12 +59634,6 @@
},
/turf/open/floor/plasteel/dark,
/area/medical/paramedic)
"rWw" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 4
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/fore)
"rXl" = (
/obj/structure/chair/office/light,
/obj/machinery/firealarm{
@@ -59764,9 +59703,6 @@
},
/area/crew_quarters/fitness)
"seP" = (
/obj/structure/cable{
icon_state = "0-4"
},
/obj/structure/cable{
icon_state = "0-8"
},
@@ -59817,7 +59753,7 @@
dir = 8
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/fore)
/area/maintenance/port/fore)
"sqg" = (
/obj/structure/table/wood,
/obj/item/clothing/under/misc/pj/red,
@@ -60254,7 +60190,7 @@
dir = 8
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/fore)
/area/maintenance/port/fore)
"trb" = (
/obj/machinery/light{
dir = 4
@@ -60672,7 +60608,7 @@
/obj/structure/girder,
/obj/structure/grille,
/turf/open/floor/plating,
/area/maintenance/fore)
/area/maintenance/port/fore)
"ugu" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -61092,6 +61028,9 @@
/area/maintenance/starboard/aft)
"uXt" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/security/brig)
"vae" = (
@@ -61332,13 +61271,13 @@
/area/crew_quarters/dorms)
"vyK" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-8"
},
/obj/machinery/door/poddoor/preopen{
id = "Secure Gate";
name = "brig shutters"
},
/obj/structure/cable{
icon_state = "0-2"
},
/turf/open/floor/plating,
/area/security/brig)
"vzp" = (
@@ -82474,7 +82413,7 @@ lZN
amC
jIW
ddI
arP
alU
fgG
rqW
aGD
@@ -82725,13 +82664,13 @@ amC
htu
alU
edj
rWw
ygb
gKG
arP
aqR
awb
alU
amC
ntt
ugq
arP
alU
rPU
fne
aGr
@@ -82984,11 +82923,11 @@ alU
tqG
spR
qGw
arP
aGh
awb
axo
arP
alU
aFJ
ntt
aAY
alU
aCh
pIf
kCo
@@ -83238,14 +83177,14 @@ ali
ali
ali
alU
arP
alU
lzk
arP
arP
arP
avZ
alU
alU
alU
atO
axp
ayC
aue
azH
eEe
aGv
@@ -88087,7 +88026,7 @@ aaa
aaa
aag
aaa
aak
aam
aap
saX
aaD
@@ -88344,7 +88283,7 @@ aaa
aaa
aag
aaf
aaj
aai
aao
aax
aaC
@@ -88370,7 +88309,7 @@ alz
cZe
alg
plS
dyE
afM
pQr
aou
aqC
@@ -88601,7 +88540,7 @@ aaa
aaa
aag
aaa
aal
aam
aar
uGI
aaF
@@ -88858,7 +88797,7 @@ aaa
aaa
aag
aaf
aaj
aai
aaq
dyS
aaE
@@ -88883,10 +88822,10 @@ agj
agM
sAk
akp
akQ
agj
amB
amn
amS
aiX
anz
anz
aov
@@ -89115,8 +89054,8 @@ aaa
aaa
aag
aaa
aal
aat
aam
aaj
aat
aat
aat
@@ -89143,7 +89082,7 @@ akM
amm
gyr
anM
rJv
xal
aqC
anz
aox
@@ -89372,7 +89311,7 @@ aaa
aaa
aag
aaf
aaj
aai
aas
aat
aat
@@ -89395,12 +89334,12 @@ akU
afM
lBz
alA
ene
alg
alt
amS
kbm
dyE
afM
cKC
seP
dyE
aqC
anR
aow
@@ -89630,7 +89569,7 @@ aaa
aag
aaa
aam
aav
akQ
aav
aav
aav
@@ -89657,7 +89596,7 @@ akT
gNE
gLz
anB
amR
seP
aqC
anz
aov
@@ -89911,10 +89850,10 @@ fxx
ako
ene
amj
akQ
agj
amB
amn
amS
aiX
anz
anz
aov
@@ -90171,7 +90110,7 @@ amk
amm
gyr
mos
rJv
xal
aqC
anz
aov
@@ -90424,11 +90363,11 @@ akF
aiy
akv
uXt
alg
amS
pAK
dyE
afM
anQ
seP
dyE
aqC
anz
aov
@@ -90685,7 +90624,7 @@ akT
amx
any
arD
amR
seP
aqC
anz
aov
@@ -90939,10 +90878,10 @@ ajc
akz
ene
als
akQ
amB
agj
apT
amn
amS
aiX
aqD
anz
aov
@@ -91196,7 +91135,7 @@ ajc
akz
ene
alg
alt
alw
amp
aot
apR
@@ -91455,7 +91394,7 @@ itD
alg
vyK
amI
alg
amS
alv
aqE
anS
@@ -91970,7 +91909,7 @@ agn
agn
amN
aoZ
apT
agn
anw
anz
cXU
@@ -92227,7 +92166,7 @@ akY
alE
amU
apH
apX
aqt
aqC
anz
gfC
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+3
View File
@@ -55,6 +55,9 @@
//donator items
#define LOADOUT_CATEGORY_DONATOR "Donator"
//unlockable items
#define LOADOUT_CATEGORY_UNLOCKABLE "Unlockable"
//how many prosthetics can we have
#define MAXIMUM_LOADOUT_PROSTHETICS 2
+1
View File
@@ -5,6 +5,7 @@
#define SPECIES_ANDROID "android"
#define SPECIES_ANGEL "angel"
#define SPECIES_MAMMAL "mammal"
#define SPECIES_MAMMAL_SYNTHETIC "mammal_synthetic"
#define SPECIES_ARACHNID "arachnid"
#define SPECIES_INSECT "insect"
#define SPECIES_DULLAHAN "dullahan"
-4
View File
@@ -86,10 +86,6 @@
if (CONFIG_GET(flag/log_attack))
WRITE_LOG(GLOB.world_attack_log, "ATTACK: [text]")
/proc/log_wounded(text)
if (CONFIG_GET(flag/log_attack))
WRITE_LOG(GLOB.world_attack_log, "WOUND: [text]")
/proc/log_manifest(ckey, datum/mind/mind,mob/body, latejoin = FALSE)
if (CONFIG_GET(flag/log_manifest))
WRITE_LOG(GLOB.world_manifest_log, "[ckey] \\ [body.real_name] \\ [mind.assigned_role] \\ [mind.special_role ? mind.special_role : "NONE"] \\ [latejoin ? "LATEJOIN":"ROUNDSTART"]")
+2 -1
View File
@@ -9,5 +9,6 @@ GLOBAL_LIST_INIT(loadout_categories, list(
LOADOUT_CATEGORY_SHOES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_GLOVES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_GLASSES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE
LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_UNLOCKABLE = LOADOUT_SUBCATEGORIES_NONE
))
+2
View File
@@ -698,6 +698,8 @@ SUBSYSTEM_DEF(job)
if(polychromic && istype(polychromic))
var/list/polychromic_entry = polychromic.colors_by_atom[I]
if(polychromic_entry)
if(polychromic.suits_with_helmet_typecache[I.type]) //is this one of those toggleable hood/helmet things?
polychromic.connect_helmet(I,i[LOADOUT_COLOR])
polychromic.colors_by_atom[I] = i[LOADOUT_COLOR]
I.update_icon()
else
@@ -72,6 +72,52 @@
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/bokken
name = "Training Bokken"
result = /obj/item/melee/bokken
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/bokken_blade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 1)
time = 60
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/bokken_steelwood
name = "Training Bokken"
result = /obj/item/melee/bokken/steelwood
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/bokken_steelblade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 1)
time = 60
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/wakibokken
name = "Training Wakizashi Bokken"
result = /obj/item/melee/bokken/waki
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/wakibokken_blade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/wakibokken_steelwood
name = "Training Wakizashi Steelwood Bokken"
result = /obj/item/melee/bokken/waki/steelwood
tools = list(TOOL_SCREWDRIVER)
reqs = list(/obj/item/wakibokken_steelblade = 1,
/obj/item/bokken_hilt = 1,
/obj/item/stack/sheet/cloth = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_MELEE
/datum/crafting_recipe/bola
name = "Bola"
result = /obj/item/restraints/legcuffs/bola
@@ -434,3 +480,51 @@
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
// BOKKEN CRAFTING
/datum/crafting_recipe/bokken_blade
name = "Training Bokken Blade"
result = /obj/item/bokken_blade
tools = list(/obj/item/hatchet)
reqs = list(/obj/item/stack/sheet/mineral/wood = 5)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/wakibokken_blade
name = "Training Wakizashi Bokken Blade"
result = /obj/item/wakibokken_blade
tools = list(/obj/item/hatchet)
reqs = list(/obj/item/stack/sheet/mineral/wood = 2)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/bokken_steelblade
name = "Training Ironwood Bokken Blade"
result = /obj/item/bokken_steelblade
tools = list(/obj/item/hatchet, TOOL_WELDER)
reqs = list(/obj/item/grown/log/steel = 2)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/wakibokken_blade
name = "Training Wakizashi Ironwood Bokken Blade"
result = /obj/item/wakibokken_steelblade
tools = list(/obj/item/hatchet, TOOL_WELDER)
reqs = list(/obj/item/grown/log/steel = 1)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
/datum/crafting_recipe/bokken_hilt
name = "Training Bokken hilt"
result = /obj/item/bokken_hilt
tools = list(/obj/item/hatchet)
reqs = list(/obj/item/stack/sheet/mineral/wood = 5,
/obj/item/stack/sheet/cloth = 2)
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
+9
View File
@@ -165,6 +165,15 @@
/datum/element/polychromic/proc/on_examine(atom/source, mob/user, list/examine_list)
examine_list += "<span class='notice'>Alt-click to recolor it.</span>"
/datum/element/polychromic/proc/connect_helmet(atom/I, var/applycolor)
if(isitem(I))
if(istype(I,/obj/item/clothing/suit/hooded))
var/obj/item/clothing/suit/hooded/Isuit = I
colors_by_atom[Isuit.hood] = applycolor
else if(istype(I,/obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/Isuit = I
colors_by_atom[Isuit.helmet] = applycolor
/datum/element/polychromic/proc/register_helmet(atom/source, obj/item/clothing/head/H)
if(!isitem(H)) //backup in case if it messes up somehow
if(istype(source,/obj/item/clothing/suit/hooded)) //so how come it be like this, where toggleable headslots are named separately (helmet/hood) anyways?
+4
View File
@@ -1123,6 +1123,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Research Division Server Room"
icon_state = "server"
/area/science/server/compcore
name = "Computer Core"
icon_state = "server"
/area/science/explab
name = "Experimentation Lab"
icon_state = "toxmisc"
+6 -6
View File
@@ -106,15 +106,15 @@
dat += "<input type='hidden' name='matrix_paint' value='1'"
dat += "<br><br>"
dat += MATRIX_FIELD("rr", color_matrix_last[1])
dat += MATRIX_FIELD("rg", color_matrix_last[2])
dat += MATRIX_FIELD("rb", color_matrix_last[3])
dat += MATRIX_FIELD("gr", color_matrix_last[2])
dat += MATRIX_FIELD("br", color_matrix_last[3])
dat += "<br><br>"
dat += MATRIX_FIELD("gr", color_matrix_last[4])
dat += MATRIX_FIELD("rg", color_matrix_last[4])
dat += MATRIX_FIELD("gg", color_matrix_last[5])
dat += MATRIX_FIELD("gb", color_matrix_last[6])
dat += MATRIX_FIELD("bg", color_matrix_last[6])
dat += "<br><br>"
dat += MATRIX_FIELD("br", color_matrix_last[7])
dat += MATRIX_FIELD("bg", color_matrix_last[8])
dat += MATRIX_FIELD("rb", color_matrix_last[7])
dat += MATRIX_FIELD("gb", color_matrix_last[8])
dat += MATRIX_FIELD("bb", color_matrix_last[9])
dat += "<br><br>"
dat += MATRIX_FIELD("cr", color_matrix_last[10])
@@ -80,6 +80,17 @@
to_chat(user, "<span class='notice'>You insert the credits into [src].</span>")
update_icon()
qdel(H)
if(istype(I, /obj/item/card/id))
var/obj/item/card/id/ID = I
if(!ID.registered_account)
to_chat(user, "<span class='warning'>[ID] doesn't have a linked account to deposit into!</span>")
return
for(var/obj/item/holochip/money in src.loc.contents)
ID.attackby(money, user)
for(var/obj/item/stack/spacecash/money in src.loc.contents)
ID.attackby(money, user)
for(var/obj/item/coin/money in src.loc.contents)
ID.attackby(money, user)
/obj/item/holochip/AltClick(mob/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+3 -3
View File
@@ -16,9 +16,9 @@ GLOBAL_LIST_EMPTY(power_sinks)
throw_speed = 1
throw_range = 2
custom_materials = list(/datum/material/iron=750)
var/drain_rate = 1600000 // amount of power to drain per tick
var/drain_rate = 2000000 // amount of power to drain per tick. Currently 2MJ.
var/power_drained = 0 // has drained this much power
var/max_power = 1e10 // maximum power that can be drained before exploding
var/max_power = 2000000000 // maximum power that can be drained before exploding. Currently 2GJ. About 17 minutes to explode at the max rate.
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
var/admins_warned = FALSE // stop spam, only warn the admins once that we are about to boom
@@ -155,5 +155,5 @@ GLOBAL_LIST_EMPTY(power_sinks)
if(power_drained >= max_power)
STOP_PROCESSING(SSobj, src)
explosion(src.loc, 4,8,16,32)
explosion(src.loc, 3,7,14,28)
qdel(src)
+6 -2
View File
@@ -24,13 +24,17 @@
create_reagents(mopcap, NONE, NO_REAGENTS_VALUE)
/obj/item/mop/proc/clean(turf/A)
/obj/item/mop/proc/clean(turf/A, mob/user)
if(reagents.has_reagent(/datum/reagent/water, 1) || reagents.has_reagent(/datum/reagent/water/holywater, 1) || reagents.has_reagent(/datum/reagent/consumable/ethanol/vodka, 1) || reagents.has_reagent(/datum/reagent/space_cleaner, 1))
SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
A.clean_blood()
var/cleaned_something = FALSE
for(var/obj/effect/O in A)
if(is_cleanable(O))
cleaned_something = TRUE
qdel(O)
if(cleaned_something && user && user.client)
user.client.increment_progress("janitor", 1)
reagents.reaction(A, TOUCH, 10) //Needed for proper floor wetting.
reagents.remove_any(1) //reaction() doesn't use up the reagents
@@ -59,7 +63,7 @@
if(!L.UseStaminaBuffer(stamusage, warn = TRUE))
return
user.visible_message("[user] cleans \the [T] with [src].", "<span class='notice'>You clean \the [T] with [src].</span>")
clean(T)
clean(T, user)
user.DelayNextAction(CLICK_CD_MELEE)
user.do_attack_animation(T, used_item = src)
playsound(T, "slosh", 50, 1)
+14
View File
@@ -33,6 +33,20 @@
. = ..()
update_desc()
/obj/item/stack/spacecash/attackby(obj/item/W, mob/user, params)
. = ..()
if(istype(W, /obj/item/card/id))
var/obj/item/card/id/ID = W
if(!ID.registered_account)
to_chat(user, "<span class='warning'>[ID] doesn't have a linked account to deposit into!</span>")
return
for(var/obj/item/holochip/money in src.loc.contents)
ID.attackby(money, user)
for(var/obj/item/stack/spacecash/money in src.loc.contents)
ID.attackby(money, user)
for(var/obj/item/coin/money in src.loc.contents)
ID.attackby(money, user)
/obj/item/stack/spacecash/c1
icon_state = "spacecash"
singular_name = "one credit bill"
@@ -253,7 +253,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\
new/datum/stack_recipe("training bokken", /obj/item/melee/bokken, 10, time = 15),\
null, \
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+3 -1
View File
@@ -802,7 +802,8 @@
. += "<span class='notice'>Alt-click it to quickly draw the blade.</span>"
/obj/item/storage/belt/sabre/PopulateContents()
new starting_sword(src)
if(starting_sword)
new starting_sword(src)
/obj/item/storage/belt/sabre/rapier
name = "rapier sheath"
@@ -864,6 +865,7 @@
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 2
STR.max_w_class = WEIGHT_CLASS_BULKY + WEIGHT_CLASS_NORMAL //katana and waki.
STR.max_combined_w_class = 7
/obj/item/melee/smith/twohand/katana/on_exit_storage(datum/component/storage/S)
var/obj/item/storage/belt/sabre/twin/B = S.parent
+122 -17
View File
@@ -296,8 +296,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
force = 7 //how much harm mode damage we do
var/stamina_damage_increment = 4 //how much extra damage do we do when in non-harm mode
force = 10 //how much harm mode damage we do
var/stamina_damage_increment = 5 //how much extra damage do we do when in non-harm mode
throwforce = 10
damtype = STAMINA
attack_verb = list("whacked", "smacked", "struck")
@@ -310,11 +310,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/quick_parry = FALSE // false = default parry, true = really small parry window
item_flags = ITEM_CAN_PARRY
block_parry_data = /datum/block_parry_data/bokken
var/default_parry_data = /datum/block_parry_data/bokken
var/quick_parry_data = /datum/block_parry_data/bokken/quick_parry
bare_wound_bonus = 0
wound_bonus = 0
/datum/block_parry_data/bokken // fucked up parry data, emphasizing quicker, shorter parries
parry_stamina_cost = 8 // be wise about when you parry, though, else you won't be able to fight enough to make it count
parry_stamina_cost = 10 // be wise about when you parry, though, else you won't be able to fight enough to make it count
parry_time_windup = 0
parry_time_active = 10 // small parry window
parry_time_spindown = 0
@@ -330,11 +332,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
)
parry_failed_stagger_duration = 3 SECONDS
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
)
/datum/block_parry_data/bokken/quick_parry // emphasizing REALLY SHORT PARRIES
parry_stamina_cost = 6 // still more costly than most parries, but less than a full bokken parry
parry_stamina_cost = 8 // still more costly than most parries, but less than a full bokken parry
parry_time_active = 5 // REALLY small parry window
parry_time_perfect = 2.5 // however...
parry_time_perfect_leeway = 2 // the entire time, the parry is perfect
@@ -371,9 +373,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
. = ..()
quick_parry = !quick_parry
if(quick_parry)
block_parry_data = /datum/block_parry_data/bokken/quick_parry
block_parry_data = quick_parry_data
else
block_parry_data = /datum/block_parry_data/bokken
block_parry_data = default_parry_data
to_chat(user, "<span class='notice'>[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].</span>")
/obj/item/melee/bokken/attackby(obj/item/I, mob/living/user, params)
@@ -410,23 +412,76 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
if(burnt)
. += " Burned into the \"blade\" is [burned_in]."
/obj/item/melee/bokken/steelwood
name = "steelwood bokken"
desc = "A misnomer of sorts, this is effectively a blunt katana made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
icon_state = "bokken_steel"
item_state = "bokken_steel"
force = 12
stamina_damage_increment = 3
/obj/item/melee/bokken/waki
name = "wakizashi bokken"
desc = "A space-Japanese training sword made of wood and shaped like a wakizashi."
icon_state = "wakibokken"
item_state = "wakibokken"
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
force = 6
stamina_damage_increment = 4
block_parry_data = /datum/block_parry_data/bokken/waki
default_parry_data = /datum/block_parry_data/bokken/waki
quick_parry_data = /datum/block_parry_data/bokken/waki/quick_parry
/datum/block_parry_data/bokken/waki // weaker parries than the bigger variant, but cheaper and faster recovery, like quick parry
parry_stamina_cost = 4
parry_time_windup = 0
parry_time_active = 6
parry_time_spindown = 0
parry_time_perfect = 1.5
parry_time_perfect_leeway = 1
parry_imperfect_falloff_percent = 7.5
parry_efficiency_to_counterattack = 120
parry_efficiency_considered_successful = 65
parry_efficiency_perfect = 120
parry_efficiency_perfect_override = list(
TEXT_ATTACK_TYPE_PROJECTILE = 30,
)
parry_failed_stagger_duration = 2 SECONDS
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 1.5, // 6*1.5 = 9, 7*1.5 = 10.5, 8*1.5 = 12, 9*1.5 = 13.5
)
/datum/block_parry_data/bokken/waki/quick_parry //For the parry spammer in you
parry_stamina_cost = 2 // Slam that parry button
parry_time_active = 2.5
parry_time_perfect = 1
parry_time_perfect_leeway = 1
parry_failed_stagger_duration = 1 SECONDS
parry_failed_clickcd_duration = 1 SECONDS
/datum/block_parry_data/bokken/waki/quick_parry/proj
parry_efficiency_perfect_override = list()
/obj/item/melee/bokken/waki/steelwood
name = "wakizashi steelwood bokken"
desc = "A misnomer of sorts, this is effectively a blunt wakizashi made from steelwood, a dense organic wood derived from steelcaps. Why steelwood? Druids can use it. Duh."
icon_state = "wakibokken_steel"
item_state = "wakibokken_steel"
force = 8
stamina_damage_increment = 2
/obj/item/melee/bokken/debug
name = "funny debug parrying stick"
desc = "if you see this you've fucked up somewhere my good man"
block_parry_data = /datum/block_parry_data/bokken/debug
/obj/item/melee/bokken/debug/AltClick(mob/user)
quick_parry = !quick_parry
if(quick_parry)
block_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
else
block_parry_data = /datum/block_parry_data/bokken/debug
to_chat(user, "<span class='notice'>[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].</span>")
default_parry_data = /datum/block_parry_data/bokken/debug
quick_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
/datum/block_parry_data/bokken/debug
parry_efficiency_perfect_override = list()
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
PARRY_DISARM_ATTACKER = TRUE,
PARRY_KNOCKDOWN_ATTACKER = 10,
PARRY_STAGGER_ATTACKER = 10,
@@ -436,13 +491,63 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/datum/block_parry_data/bokken/quick_parry/debug
parry_efficiency_perfect_override = list()
parry_data = list(
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
PARRY_DISARM_ATTACKER = TRUE,
PARRY_KNOCKDOWN_ATTACKER = 10,
PARRY_STAGGER_ATTACKER = 10,
PARRY_DAZE_ATTACKER = 10,
)
/// BOKKEN CRAFTNG PIECES
/obj/item/bokken_blade
name = "training bokken wooden blade"
desc = "The blade piece of a bokken katana."
icon = 'icons/obj/smith.dmi'
icon_state = "bokken"
item_state = "bone_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/bokken_steelblade
name = "training bokken steelwood blade"
desc = "The blade piece of a steelwood bokken katana."
icon = 'icons/obj/smith.dmi'
icon_state = "bokken_steel"
item_state = "switchblade_ext"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/wakibokken_blade
name = "training bokken wooden wakizashi blade"
desc = "The blade piece of a bokken wakizashi."
icon = 'icons/obj/smith.dmi'
icon_state = "wakibokken"
item_state = "bone_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/wakibokken_steelblade
name = "training bokken steelwood wakizashi blade"
desc = "The blade piece of a steelwood bokken katana."
icon = 'icons/obj/smith.dmi'
icon_state = "wakibokken_steel"
item_state = "switchblade_ext"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
/obj/item/bokken_hilt
name = "training bokken hilt"
desc = "The hilt piece of a bokken. This hilt is appropriate for any potential blade length or material."
icon = 'icons/obj/smith.dmi'
icon_state = "bokken_hilt"
item_state = "bone_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
/obj/item/wirerod
name = "wired rod"
+25 -2
View File
@@ -243,7 +243,7 @@ LINEN BINS
/obj/item/bedsheet/random/Initialize()
..()
var/type = pick(typesof(/obj/item/bedsheet) - list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon))
var/type = pick(typesof(/obj/item/bedsheet) - (list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon) + typesof(/obj/item/bedsheet/unlockable)))
new type(loc)
return INITIALIZE_HINT_QDEL
@@ -257,9 +257,32 @@ LINEN BINS
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/bedsheet
chameleon_action.chameleon_name = "Bedsheet"
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random), only_root_path = TRUE)
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random, /obj/item/bedsheet/unlockable), only_root_path = FALSE)
chameleon_action.initialize_disguises()
//unlockable bedsheets
/obj/item/bedsheet/unlockable
name = "unlockable bedsheet"
desc = "this shouldn't be here!"
//janitor: clean 100 messes with mop as janitor
/obj/item/bedsheet/unlockable/janitor
name = "janitor bedsheet"
desc = "A white bedsheet, with a warning sign on the front."
icon_state = "sheetjanitor"
//cook: use microwave 100 times properly (contents must make one good item) as cook
/obj/item/bedsheet/unlockable/cook
name = "cook bedsheet"
desc = "A grey bedsheet, with a microwave on the front."
icon_state = "sheetcook"
//miner: redeem 100,000 mining points
/obj/item/bedsheet/unlockable/miner
name = "miner bedsheet"
desc = "A red and black bedsheet. It seems to be made with goliath hide."
icon_state = "sheetminer"
//bedsheet bin
/obj/structure/bedsheetbin
name = "linen bin"
+2
View File
@@ -48,6 +48,8 @@
if(C.prefs.toggles & SOUND_PRAYERS)
if(usr.job == "Chaplain")
SEND_SOUND(C, sound('sound/effects/pray.ogg'))
else
SEND_SOUND(C, sound('sound/effects/ding.ogg'))
to_chat(usr, "<span class='info'>You pray to the gods: \"[msg_tmp]\"</span>")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Prayer") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+4 -3
View File
@@ -40,17 +40,18 @@
var/rounded_length = round(length)
var/new_size
var/enlargement = FALSE
var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
switch(rounded_length)
if(0 to 6) //If modest size
new_size = 1
if(7 to 11) //If large
new_size = 2
if(12 to 20) //If massive
if(12 to max_D) //If massive
new_size = 3
if(21 to 34) //If massive and due for large effects
if(max_D + 1 to max_D+13) //If massive and due for large effects, modified in case some server owner running recent citcode decides to be insane with dick sizes in the config
new_size = 3
enlargement = TRUE
if(35 to INFINITY) //If comical
if(max_D+14 to INFINITY) //If comical
new_size = 4 //no new sprites for anything larger yet
enlargement = TRUE
if(owner)
+12
View File
@@ -90,6 +90,18 @@
crate_name = "medical hardsuit"
crate_type = /obj/structure/closet/crate/secure/medical
/datum/supply_pack/medical/paramedicevasuit
name = "Paramedic EVA Suit"
desc = "Greytide pushing up daisies with the carp outside the station? Chemistry vented in a meth experiment gone wrong? Be the blue saviour this station desperately needs and get your Paramedical EVA suit today! Requires medical access to open."
cost = 1975
access = ACCESS_MEDICAL
contains = list(/obj/item/tank/internals/emergency_oxygen,
/obj/item/clothing/head/helmet/space/eva/paramedic,
/obj/item/clothing/suit/space/eva/paramedic,
/obj/item/clothing/mask/breath)
crate_name = "paramedic EVA suit"
crate_type = /obj/structure/closet/crate/secure/medical
/datum/supply_pack/medical/supplies
name = "Medical Supplies Crate"
desc = "Contains seven beakers, syringes, and bodybags. Three morphine bottles, four insulin pills. Two charcoal bottles, epinephrine bottles, antitoxin bottles, and large beakers. Finally, a single roll of medical gauze, as well as a bottle of stimulant pills for long, hard work days. German doctor not included."
+22
View File
@@ -1024,3 +1024,25 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
verb_tabs |= verb_to_init.category
verblist[++verblist.len] = list(verb_to_init.category, verb_to_init.name)
src << output("[url_encode(json_encode(verb_tabs))];[url_encode(json_encode(verblist))]", "statbrowser:init_verbs")
//increment progress for an unlockable loadout item
/client/proc/increment_progress(key, amount)
if(prefs)
var/savefile/S = new /savefile(prefs.path)
var/list/unlockable_loadout_data = prefs.unlockable_loadout_data
if(!length(unlockable_loadout_data))
unlockable_loadout_data = list()
unlockable_loadout_data[key] = amount
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(unlockable_loadout_data))
prefs.unlockable_loadout_data = unlockable_loadout_data
return TRUE
else
if(unlockable_loadout_data[key])
unlockable_loadout_data[key] += amount
else
unlockable_loadout_data[key] = amount
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(unlockable_loadout_data))
prefs.unlockable_loadout_data = unlockable_loadout_data
return TRUE
return FALSE
+23 -3
View File
@@ -198,6 +198,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/gear_points = 10
var/list/gear_categories
var/list/loadout_data = list()
var/list/unlockable_loadout_data = list()
var/loadout_slot = 1 //goes from 1 to MAXIMUM_LOADOUT_SAVES
var/gear_category
var/gear_subcategory
@@ -907,12 +908,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
loadout_color_non_poly = loadout_item[LOADOUT_COLOR][1]
extra_color_data += "<BR><a href='?_src_=prefs;preference=gear;loadout_color=1;loadout_gear_name=[html_encode(gear.name)];'>Color</a>"
extra_color_data += "<span style='border: 1px solid #161616; background-color: [loadout_color_non_poly];'>&nbsp;&nbsp;&nbsp;</span>"
else if(gear_points <= 0)
else if((gear_points - gear.cost) < 0)
class_link = "style='white-space:normal;' class='linkOff'"
else if(donoritem)
class_link = "style='white-space:normal;background:#ebc42e;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'"
else
else if(!istype(gear, /datum/gear/unlockable) || can_use_unlockable(gear))
class_link = "style='white-space:normal;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'"
else
class_link = "style='white-space:normal;background:#eb2e2e;' class='linkOff'"
dat += "<tr style='vertical-align:top;'><td width=15%><a [class_link]>[name]</a>[extra_color_data]</td>"
dat += "<td width = 5% style='vertical-align:top'>[gear.cost]</td><td>"
if(islist(gear.restricted_roles))
@@ -925,7 +928,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<font size=2>"
dat += gear.restricted_roles.Join(";")
dat += "</font>"
dat += "</td><td><font size=2><i>[gear.description]</i></font></td></tr>"
if(!istype(gear, /datum/gear/unlockable))
dat += "</td><td><font size=2><i>[gear.description]</i></font></td></tr>"
else
//we add the user's progress to the description assuming they have progress
var/datum/gear/unlockable/unlockable = gear
var/progress_made = unlockable_loadout_data[unlockable.progress_key]
if(!progress_made)
progress_made = 0
dat += "</td><td><font size=2><i>[gear.description] Progress: [min(progress_made, unlockable.progress_required)]/[unlockable.progress_required]</i></font></td></tr>"
dat += "</table>"
if(4) // Content preferences
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
@@ -2675,6 +2687,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(G.donoritem && !G.donator_ckey_check(user.ckey))
to_chat(user, "<span class='danger'>This is an item intended for donator use only. You are not authorized to use this item.</span>")
return
if(istype(G, /datum/gear/unlockable) && !can_use_unlockable(G))
to_chat(user, "<span class='danger'>To use this item, you need to meet the defined requirements!</span>")
return
if(gear_points >= initial(G.cost))
var/list/new_loadout_data = list(LOADOUT_ITEM = "[G.type]")
if(length(G.loadout_initial_colors))
@@ -2960,6 +2975,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(find_gear)
loadout_data["SAVE_[save_slot]"] -= list(find_gear)
/datum/preferences/proc/can_use_unlockable(datum/gear/unlockable/unlockable_gear)
if(unlockable_loadout_data[unlockable_gear.progress_key] >= unlockable_gear.progress_required)
return TRUE
return FALSE
#undef DEFAULT_SLOT_AMT
#undef HANDS_SLOT_AMT
#undef BACKPACK_SLOT_AMT
+18 -2
View File
@@ -5,7 +5,7 @@
// You do not need to raise this if you are adding new values that have sane defaults.
// Only raise this value when changing the meaning/format/name/layout of an existing value
// where you would want the updater procs below to run
#define SAVEFILE_VERSION_MAX 47
#define SAVEFILE_VERSION_MAX 48
/*
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
@@ -285,6 +285,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["loadout"] = safe_json_encode(loadout_data)
if(current_version < 48) //unlockable loadout items but we need to clear bad data from a mistake
S["unlockable_loadout"] = list()
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
if(!ckey)
return
@@ -427,6 +430,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
verify_keybindings_valid() // one of these days this will runtime and you'll be glad that i put it in a different proc so no one gets their saves wiped
if(S["unlockable_loadout"])
unlockable_loadout_data = safe_json_decode(S["unlockable_loadout"])
else
unlockable_loadout_data = list()
if(needs_update >= 0) //save the updated version
var/old_default_slot = default_slot
var/old_max_save_slots = max_save_slots
@@ -532,6 +540,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["auto_ooc"], auto_ooc)
WRITE_FILE(S["no_tetris_storage"], no_tetris_storage)
if(length(unlockable_loadout_data))
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(unlockable_loadout_data))
else
WRITE_FILE(S["unlockable_loadout"], safe_json_encode(list()))
return 1
/datum/preferences/proc/load_character(slot, bypass_cooldown = FALSE)
@@ -736,7 +749,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
belly_prefs = json_from_file["belly_prefs"]
//gear loadout
loadout_data = safe_json_decode(S["loadout"])
if(S["loadout"])
loadout_data = safe_json_decode(S["loadout"])
else
loadout_data = list()
//try to fix any outdated data if necessary
//preference updating will handle saving the updated data for us.
+7 -9
View File
@@ -244,35 +244,33 @@
/obj/item/clothing/under/proc/rolldown()
if(!can_use(usr))
return
if(!can_adjust)
to_chat(usr, "<span class='warning'>You cannot wear this suit any differently!</span>")
return
if(toggle_jumpsuit_adjust())
to_chat(usr, "<span class='notice'>You adjust the suit to wear it more casually.</span>")
else
to_chat(usr, "<span class='notice'>You adjust the suit back to normal.</span>")
if(ishuman(usr))
if(toggle_jumpsuit_adjust() && ishuman(usr))
var/mob/living/carbon/human/H = usr
H.update_inv_w_uniform()
H.update_body()
/obj/item/clothing/under/proc/toggle_jumpsuit_adjust()
if(!can_adjust)
to_chat(usr, "<span class='warning'>You cannot wear this suit any differently!</span>")
return FALSE
adjusted = !adjusted
if(adjusted)
to_chat(usr, "<span class='notice'>You adjust the suit to wear it more casually.</span>")
if(fitted != FEMALE_UNIFORM_TOP)
fitted = NO_FEMALE_UNIFORM
if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted
body_parts_covered &= ~CHEST
mutantrace_variation &= ~USE_TAUR_CLIP_MASK //How are we supposed to see the uniform otherwise?
else
to_chat(usr, "<span class='notice'>You adjust the suit back to normal.</span>")
fitted = initial(fitted)
if(!alt_covers_chest)
body_parts_covered |= CHEST
if(initial(mutantrace_variation) & USE_TAUR_CLIP_MASK)
mutantrace_variation |= USE_TAUR_CLIP_MASK
return adjusted
return TRUE
/obj/item/clothing/under/rank
dying_key = DYE_REGISTRY_UNDER
@@ -24,7 +24,7 @@
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/under/rank/civilian/util
name = "generic utility uniform"
name = "utility uniform"
desc = "A utility uniform worn by various crew."
icon_state = "utilgen"
item_state = "utilgen"
+2 -2
View File
@@ -3,11 +3,12 @@
name = "captain's jumpsuit"
icon_state = "captain"
item_state = "b_suit"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 15)
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
/obj/item/clothing/under/rank/captain/util
name = "Command Utiltiy Uniform"
name = "command utility uniform"
desc = "A utility uniform for command personnel."
icon_state = "utilcom"
item_state = "utilcom"
@@ -26,7 +27,6 @@
/obj/item/clothing/under/rank/captain/suit
name = "captain's suit"
desc = "A green suit and yellow necktie. Exemplifies authority."
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 15)
icon_state = "green_suit"
item_state = "dg_suit"
can_adjust = FALSE
+1 -1
View File
@@ -131,7 +131,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
/obj/item/clothing/under/rank/medical/doctor/util
name = "Medical Utility Uniform"
name = "medical utility uniform"
desc = "Utility jumpsuit for medical personnel"
icon_state = "utilmed"
item_state = "utilmed"
+1 -1
View File
@@ -62,7 +62,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
/obj/item/clothing/under/rank/rnd/scientist/util
name = "Science Utility Uniform"
name = "science utility uniform"
desc = "A utility uniform for science personnel"
icon_state = "utilsci"
item_state = "utilsci"
+6 -4
View File
@@ -172,11 +172,13 @@
body_parts_covered = CHEST|GROIN
/obj/item/clothing/under/misc/gear_harness/toggle_jumpsuit_adjust()
adjusted = !adjusted
if(adjusted)
body_parts_covered = NONE
else
if(!body_parts_covered)
to_chat(usr, "<span class='notice'>Your gear harness is now covering your chest and groin.</span>")
body_parts_covered = CHEST|GROIN
else
to_chat(usr, "<span class='notice'>Your gear harness is no longer covering anything.</span>")
body_parts_covered = NONE
return TRUE
/obj/item/clothing/under/misc/durathread
name = "durathread jumpsuit"
@@ -195,7 +195,7 @@
/obj/machinery/microwave/AltClick(mob/user)
. = ..()
if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
cook()
cook(user)
return TRUE
/obj/machinery/microwave/ui_interact(mob/user)
@@ -226,7 +226,7 @@
if("eject")
eject()
if("use")
cook()
cook(user)
if("examine")
examine(user)
@@ -236,7 +236,7 @@
AM.forceMove(drop_location())
ingredients.Cut()
/obj/machinery/microwave/proc/cook()
/obj/machinery/microwave/proc/cook(mob/user)
if(stat & (NOPOWER|BROKEN))
return
if(operating || broken > 0 || panel_open || !anchored || dirty == 100)
@@ -257,7 +257,7 @@
start_can_fail()
return
break
start()
start(user)
/obj/machinery/microwave/proc/turn_on()
visible_message("\The [src] turns on.", "<span class='italics'>You hear a microwave humming.</span>")
@@ -277,9 +277,9 @@
#define MICROWAVE_MUCK 1
#define MICROWAVE_PRE 2
/obj/machinery/microwave/proc/start()
/obj/machinery/microwave/proc/start(mob/user)
turn_on()
loop(MICROWAVE_NORMAL, 10)
loop(MICROWAVE_NORMAL, 10, user = user)
/obj/machinery/microwave/proc/start_can_fail()
turn_on()
@@ -292,7 +292,7 @@
update_icon()
loop(MICROWAVE_MUCK, 4)
/obj/machinery/microwave/proc/loop(type, time, wait = max(12 - 2 * productivity, 2)) // standard wait is 10
/obj/machinery/microwave/proc/loop(type, time, wait = max(12 - 2 * productivity, 2), mob/user) // standard wait is 10
if(stat & (NOPOWER|BROKEN))
if(type == MICROWAVE_PRE)
pre_fail()
@@ -300,7 +300,7 @@
if(!time)
switch(type)
if(MICROWAVE_NORMAL)
loop_finish()
loop_finish(user)
if(MICROWAVE_MUCK)
muck_finish()
if(MICROWAVE_PRE)
@@ -308,16 +308,21 @@
return
time--
use_power(500)
addtimer(CALLBACK(src, .proc/loop, type, time, wait), wait)
addtimer(CALLBACK(src, .proc/loop, type, time, wait, user), wait)
/obj/machinery/microwave/proc/loop_finish()
/obj/machinery/microwave/proc/loop_finish(mob/user)
operating = FALSE
var/metal = 0
var/cooked_food = 0
for(var/obj/item/O in ingredients)
O.microwave_act(src)
var/cooked_result = O.microwave_act(src)
if(!istype(cooked_result, /obj/item/reagent_containers/food/snacks/badrecipe))
cooked_food += 1
if(O.custom_materials?.len)
metal += O.custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)]
if(cooked_food && user.client)
user.client.increment_progress("cook", cooked_food)
if(metal)
spark()
@@ -336,8 +341,8 @@
spark()
after_finish_loop()
/obj/machinery/microwave/proc/pre_success()
loop(MICROWAVE_NORMAL, 10)
/obj/machinery/microwave/proc/pre_success(mob/user)
loop(MICROWAVE_NORMAL, 10, user)
/obj/machinery/microwave/proc/muck_finish()
visible_message("<span class='warning'>\The [src] gets covered in muck!</span>")
+11
View File
@@ -397,6 +397,17 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
else
to_chat(user, "<span class='warning'>You need one length of cable to attach a string to the coin!</span>")
return
else if(istype(W, /obj/item/card/id))
var/obj/item/card/id/ID = W
if(!ID.registered_account)
to_chat(user, "<span class='warning'>[ID] doesn't have a linked account to deposit into!</span>")
return
for(var/obj/item/holochip/money in src.loc.contents)
ID.attackby(money, user)
for(var/obj/item/stack/spacecash/money in src.loc.contents)
ID.attackby(money, user)
for(var/obj/item/coin/money in src.loc.contents)
ID.attackby(money, user)
else
..()
+2
View File
@@ -30,6 +30,8 @@
if(points)
if(I)
I.mining_points += points
if(usr.client)
usr.client.increment_progress("miner", points)
points = 0
else
to_chat(usr, "<span class='warning'>No ID detected.</span>")
@@ -68,7 +68,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/plant
name = "Plant Weeds"
desc = "Plants some alien weeds."
desc = "Plants Alien weeds which spread resin which heals any alien. These weeds also regenerate plasma faster. Costs 50 Plasma."
plasma_cost = 50
check_turf = TRUE
action_icon_state = "alien_plant"
@@ -83,7 +83,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/whisper
name = "Whisper"
desc = "Whisper to someone."
desc = "Whisper to someone through the hivemind. Costs 10 Plasma."
plasma_cost = 10
action_icon_state = "alien_whisper"
@@ -143,7 +143,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/acid
name = "Corrosive Acid"
desc = "Drench an object in acid, destroying it over time."
desc = "Drench an object in acid, destroying it over time. Costs 200 Plasma."
plasma_cost = 200
action_icon_state = "alien_acid"
@@ -189,7 +189,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/neurotoxin
name = "Spit Neurotoxin"
desc = "Spits neurotoxin at someone, paralyzing them for a short time."
desc = "Activates your Neurotoxin glands. You can shoot paralyzing shots. Each shot costs 50 Plasma."
action_icon_state = "alien_neurotoxin_0"
active = FALSE
@@ -254,7 +254,7 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/resin
name = "Secrete Resin"
desc = "Secrete tough malleable resin."
desc = "Secrete tough malleable resin. Costs 55 Plasma."
plasma_cost = 55
check_turf = TRUE
var/list/structures = list(
@@ -20,7 +20,7 @@
/obj/effect/proc_holder/alien/royal/praetorian/evolve
name = "Evolve"
desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time."
desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time. Costs 500 Plasma."
plasma_cost = 500
action_icon_state = "alien_evolve_praetorian"
@@ -57,7 +57,7 @@
//Queen verbs
/obj/effect/proc_holder/alien/lay_egg
name = "Lay Egg"
desc = "Lay an egg to produce huggers to impregnate prey with."
desc = "Lay an egg to produce huggers to impregnate prey with. Costs 75 Plasma."
plasma_cost = 75
check_turf = TRUE
action_icon_state = "alien_egg"
@@ -77,7 +77,7 @@
//Button to let queen choose her praetorian.
/obj/effect/proc_holder/alien/royal/queen/promote
name = "Create Royal Parasite"
desc = "Produce a royal parasite to grant one of your children the honor of being your Praetorian."
desc = "Produce a royal parasite to grant one of your children the honor of being your Praetorian. Costs 500 Plasma."
plasma_cost = 500 //Plasma cost used on promotion, not spawning the parasite.
action_icon_state = "alien_queen_promote"
@@ -18,3 +18,33 @@
species_category = SPECIES_CATEGORY_FURRY
allowed_limb_ids = list("mammal","aquatic","avian")
/datum/species/mammal/synthetic
name = "Synthetic Anthromorph"
id = SPECIES_MAMMAL_SYNTHETIC
species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,ROBOTIC_LIMBS,HAS_FLESH,HAS_BONE,WINGCOLOR,HORNCOLOR)
inherent_traits = list(TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NO_PROCESS_FOOD, TRAIT_ROBOTIC_ORGANISM)
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID|MOB_BEAST
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless)
//Just robo looking parts.
mutant_heart = /obj/item/organ/heart/ipc
mutantlungs = /obj/item/organ/lungs/ipc
mutantliver = /obj/item/organ/liver/ipc
mutantstomach = /obj/item/organ/stomach/ipc
mutanteyes = /obj/item/organ/eyes/ipc
mutantears = /obj/item/organ/ears/ipc
mutanttongue = /obj/item/organ/tongue/robot/ipc
mutant_brain = /obj/item/organ/brain/ipc
//special cybernetic organ for getting power from apcs
mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord)
attack_verb = "claw"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
allowed_limb_ids = list("mammal","aquatic","avian", "human")
@@ -203,6 +203,15 @@
var/obj/item/I = AM
if(I.light_range && I.light_power)
disintegrate(I)
else if (isstructure(AM))
var/obj/structure/S = AM
if(istype(S, /obj/structure/glowshroom) || istype(S, /obj/structure/marker_beacon))
qdel(S)
visible_message("<span class='danger'>[S] is disintegrated by [src]!</span>")
else if(AM.light_range && AM.light_power && !(istype(AM, /obj/machinery/power/apc) || istype(AM, /obj/machinery/airalarm)))
var/obj/target_object = AM
target_object.take_damage(force * 5, BRUTE, "melee", 0)
/obj/item/light_eater/proc/disintegrate(obj/item/O)
if(istype(O, /obj/item/pda))
@@ -17,6 +17,9 @@
/mob/living/proc/initiate_parry_sequence()
if(parrying)
return // already parrying
if(!(mobility_flags & MOBILITY_USE))
to_chat(src, "<span class='warning'>You can't move your arms!</span>")
return
if(!(combat_flags & COMBAT_FLAG_PARRY_CAPABLE))
to_chat(src, "<span class='warning'>You are not something that can parry attacks.</span>")
return
+1 -1
View File
@@ -508,7 +508,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
if(LOG_EMOTE)
colored_message = "(EMOTE) [colored_message]"
var/list/timestamped_message = list("\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(src)] [loc_name(src)]" = colored_message)
var/list/timestamped_message = list("\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(src)] [loc_name(src)] (Event #[LAZYLEN(logging[smessage_type])])" = colored_message)
logging[smessage_type] += timestamped_message
+2 -2
View File
@@ -148,8 +148,8 @@ proc/get_top_level_mob(var/mob/S)
var/safety = 25
for(var/obj/structure/table/T in range(user, 1))
processing |= T
for(var/i in processing)
var/obj/structure/table/T = i
for(var/i = 1; i <= processing.len; ++i)
var/obj/structure/table/T = processing[i]
if(safety-- <= 0)
to_chat(user, "Table scan aborted early, some people might have not received the message (max 25)")
break
@@ -257,9 +257,9 @@
var/amount = text2num(params["amount"])
if(amount == null)
amount = text2num(input(usr,
"Max 10. Buffer content will be split evenly.",
"Max 20. Buffer content will be split evenly.",
"How many to make?", 1))
amount = clamp(round(amount), 0, 10)
amount = clamp(round(amount), 0, 20)
if (amount <= 0)
return FALSE
// Get units per item
@@ -104,3 +104,11 @@
build_path = /obj/item/circuitboard/machine/thermomachine
category = list ("Engineering Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/spaceship_navigation_beacon
name = "Machine Design (Bluespace Navigation Gigabeacon)"
desc = "The circuit board for a Bluespace Navigation Gigabeacon."
id = "spaceship_navigation_beacon"
build_path = /obj/item/circuitboard/machine/spaceship_navigation_beacon
category = list ("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
@@ -726,6 +726,32 @@
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/////////////////////
/////Synth Organs////
/////////////////////
/datum/design/ipc_stomach
name = "IPC cell"
desc = "Effectively the robot equivalent of a stomach, handling power storage."
id = "ipc_stomach"
build_type = PROTOLATHE | MECHFAB
construction_time = 40
materials = list(/datum/material/iron = 1000, /datum/material/glass = 300, /datum/material/silver = 500, /datum/material/gold = 400)
build_path = /obj/item/organ/stomach/ipc
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_power_cord
name = "IPC power cord"
desc = "A implant for Robots designed to siphon power from APCs to recharge their own cell."
id = "ci-power-cord"
build_type = PROTOLATHE | MECHFAB
construction_time = 75
materials = list(/datum/material/iron = 4000, /datum/material/glass = 1500, /datum/material/silver = 1200, /datum/material/gold = 1600, /datum/material/plasma = 1000)
build_path = /obj/item/organ/cyberimp/arm/power_cord
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/////////////////////
///Surgery Designs///
/////////////////////
@@ -5,7 +5,7 @@
display_name = "Biological Technology"
description = "What makes us tick." //the MC, silly!
prereq_ids = list("base")
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner","chem_pack")
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner","chem_pack", "portable_chem_mixer")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/adv_biotech
@@ -70,7 +70,7 @@
display_name = "Basic Shuttle Research"
description = "Research the technology required to create and use basic shuttles."
prereq_ids = list("practical_bluespace", "adv_engi")
design_ids = list("shuttle_creator", "engine_plasma", "engine_heater", "shuttle_control", "shuttle_docker")
design_ids = list("shuttle_creator", "engine_plasma", "engine_heater", "shuttle_control", "shuttle_docker","spaceship_navigation_beacon")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
/datum/techweb_node/shuttle_route_upgrade
@@ -80,7 +80,7 @@
display_name = "Upgraded Cybernetic Organs"
description = "We have the technology to upgrade him."
prereq_ids = list("cyber_organs")
design_ids = list("cybernetic_ears_u", "cybernetic_heart_u", "cybernetic_liver_u", "cybernetic_lungs_u")
design_ids = list("cybernetic_ears_u", "cybernetic_heart_u", "cybernetic_liver_u", "cybernetic_lungs_u", "ipc_stomach")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
/datum/techweb_node/cyber_implants
@@ -88,7 +88,7 @@
display_name = "Cybernetic Implants"
description = "Electronic implants that improve humans."
prereq_ids = list("adv_biotech", "adv_datatheory")
design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-service")
design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-service", "ci-power-cord")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/adv_cyber_implants
+18 -4
View File
@@ -11,6 +11,7 @@
var/list/jumpto_ports = list() //hashset of ports to jump to and ignore for collision purposes
var/obj/docking_port/stationary/my_port //the custom docking port placed by this console
var/obj/docking_port/mobile/shuttle_port //the mobile docking port of the connected shuttle
var/list/locked_traits = list(ZTRAIT_RESERVED, ZTRAIT_CENTCOM, ZTRAIT_AWAY, ZTRAIT_REEBE) //traits forbided for custom docking
var/view_range = 0
var/x_offset = 0
var/y_offset = 0
@@ -186,7 +187,7 @@
var/turf/eyeturf = get_turf(the_eye)
if(!eyeturf)
return SHUTTLE_DOCKER_BLOCKED
if(z_lock.len && !(eyeturf.z in z_lock))
if(!eyeturf.z || SSmapping.level_has_any_trait(eyeturf.z, locked_traits))
return SHUTTLE_DOCKER_BLOCKED
. = SHUTTLE_DOCKER_LANDING_CLEAR
@@ -224,9 +225,9 @@
if(hidden_turf_info)
. = SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT
if(space_turfs_only)
if(length(whitelist_turfs))
var/turf_type = hidden_turf_info ? hidden_turf_info[2] : T.type
if(!ispath(turf_type, /turf/open/space))
if(!is_type_in_typecache(turf_type, whitelist_turfs))
return SHUTTLE_DOCKER_BLOCKED
if(length(whitelist_turfs))
@@ -324,12 +325,25 @@
var/list/L = list()
for(var/V in SSshuttle.stationary)
if(!V)
stack_trace("SSshuttle.stationary have null entry!")
continue
var/obj/docking_port/stationary/S = V
if(console.z_lock.len && !(S.z in console.z_lock))
continue
if(console.jumpto_ports[S.id])
L[S.name] = S
L["([L.len])[S.name]"] = S
for(var/V in SSshuttle.beacons)
if(!V)
stack_trace("SSshuttle.beacons have null entry!")
continue
var/obj/machinery/spaceship_navigation_beacon/nav_beacon = V
if(!nav_beacon.z || SSmapping.level_has_any_trait(nav_beacon.z, console.locked_traits))
break
if(!nav_beacon.locked)
L["([L.len]) [nav_beacon.name] located: [nav_beacon.x] [nav_beacon.y] [nav_beacon.z]"] = nav_beacon
else
L["([L.len]) [nav_beacon.name] locked"] = null
playsound(console, 'sound/machines/terminal_prompt.ogg', 25, 0)
var/selected = input("Choose location to jump to", "Locations", null) as null|anything in L
@@ -0,0 +1,63 @@
/obj/item/circuitboard/machine/spaceship_navigation_beacon
name = "Bluespace Navigation Gigabeacon (Machine Board)"
build_path = /obj/machinery/spaceship_navigation_beacon
req_components = list()
/obj/machinery/spaceship_navigation_beacon
name = "Bluespace Navigation Gigabeacon"
desc = "A device that creates a bluespace anchor that allow ships jump near to it."
icon = 'icons/obj/abductor.dmi'
icon_state = "core"
use_power = IDLE_POWER_USE
idle_power_usage = 0
density = TRUE
circuit = /obj/item/circuitboard/machine/spaceship_navigation_beacon
var/locked = FALSE //Locked beacons don't allow to jump to it.
/obj/machinery/spaceship_navigation_beacon/Initialize()
. = ..()
SSshuttle.beacons |= src
obj/machinery/spaceship_navigation_beacon/emp_act()
locked = TRUE
/obj/machinery/spaceship_navigation_beacon/Destroy()
SSshuttle.beacons -= src
return ..()
// update the icon_state
/obj/machinery/spaceship_navigation_beacon/update_icon()
if(powered())
icon_state = "core"
else
icon_state = "core-open"
/obj/machinery/spaceship_navigation_beacon/power_change()
. = ..()
update_icon()
/obj/machinery/spaceship_navigation_beacon/multitool_act(mob/living/user, obj/item/multitool/I)
if(panel_open)
var/new_name = "Beacon_[input("Enter the custom name for this beacon", "It be Beacon ..your input..") as text]"
if(new_name && Adjacent(user))
name = new_name
to_chat(user, "<span class='notice'>You change beacon name to [name].</span>")
else
locked =!locked
to_chat(user, "<span class='notice'>You [locked ? "" : "un"]lock [src].</span>")
return TRUE
/obj/machinery/spaceship_navigation_beacon/examine()
.=..()
. += "<span class='[locked ? "warning" : "nicegreen"]'>Status: [locked ? "LOCKED" : "Stable"] </span>"
/obj/machinery/spaceship_navigation_beacon/attackby(obj/item/W, mob/user, params)
if(default_deconstruction_screwdriver(user, "core-open", "core", W))
return
if(default_deconstruction_crowbar(W))
return
return ..()
+1 -2
View File
@@ -394,11 +394,10 @@
var/datum/wound/new_wound
if(replaced_wound)
new_wound = replaced_wound.replace_wound(possible_wound)
log_wound(owner, new_wound, damage, wound_bonus, bare_wound_bonus, base_roll) // dismembering wounds are logged in the apply_wound() for loss wounds since they delete themselves immediately, these will be immediately returned
else
new_wound = new possible_wound
new_wound.apply_wound(src)
log_wound(owner, new_wound, damage, wound_bonus, bare_wound_bonus, base_roll)
log_wound(owner, new_wound, damage, wound_bonus, bare_wound_bonus, base_roll) // dismembering wounds are logged in the apply_wound() for loss wounds since they delete themselves immediately, these will be immediately returned
return new_wound
// try forcing a specific wound, but only if there isn't already a wound of that severity or greater for that type on this bodypart
+1 -1
View File
@@ -544,7 +544,7 @@
/obj/item/clothing/glasses/sunglasses/gar/supergar = 1,
/obj/item/clothing/gloves/color/captain = 1)
refill_canister = /obj/item/vending_refill/wardrobe/cap_wardrobe
payment_department = ACCOUNT_CIV
payment_department = ACCOUNT_SEC
default_price = PRICE_ALMOST_EXPENSIVE
extra_price = PRICE_ABOVE_EXPENSIVE
@@ -0,0 +1,5 @@
author: "Putnam3145"
delete-after: True
changes:
- bugfix: "gear harness alt-click is now sane"
- code_imp: "rolldown() and toggle_jumpsuit_adjust() now no longer mix behavior-that-should-be-overridden and behavior-that-shouldn't-be-overridden in ways that make no sense."
@@ -0,0 +1,4 @@
author: "timothyteakettle"
delete-after: True
changes:
- rscadd: "adds unlockable loadout items, corresponding category in loadouts, etc"
@@ -0,0 +1,4 @@
author: "SandPoot"
delete-after: True
changes:
- tweak: "You can attack a pile of money on the floor with your id to put it all in quickly."
@@ -0,0 +1,4 @@
author: "MrJWhit"
delete-after: True
changes:
- tweak: "Small fixes on security on boxstation"
@@ -0,0 +1,4 @@
author: "shellspeed1"
delete-after: True
changes:
- tweak: "Xenomorph powers now list plasma cost in their description."
@@ -0,0 +1,4 @@
author: "shellspeed1"
delete-after: True
changes:
- rscadd: "The bluespace navigation gigabeacon design has been added to shuttle research for those wanting to take their ships around space more."
@@ -0,0 +1,4 @@
author: "BlueWildrose"
delete-after: True
changes:
- bugfix: "Polychromic hoodies that were obtained from the loadout have functional colorable hoods now."
@@ -0,0 +1,4 @@
author: "timothyteakettle"
delete-after: True
changes:
- rscadd: "anthromorphic synth species"
@@ -0,0 +1,4 @@
author: "Chiirno"
delete-after: True
changes:
- rscadd: "Added the paramedics EVA suit as a purchase from the cargo console."
@@ -0,0 +1,4 @@
author: "Chiirno"
delete-after: True
changes:
- bugfix: "Portable Chem Mixer now researchable from biotech node."
@@ -0,0 +1,6 @@
author: "Hatterhat"
delete-after: True
changes:
- spellcheck: "Utility uniforms now comply with the \"nonproper equipment names\" thing."
- bugfix: "The CapDrobe now allows the captain to get his own clothes for free. Probably."
- tweak: "All captains' clothes now offer 15 woundarmor, up from the 5. Because apparently only the suit and tie and its suitskirt subtype have this wound armor, which is dumb."
@@ -0,0 +1,4 @@
author: "DeltaFire15"
delete-after: True
changes:
- rscadd: "IPC cells & power cords are now printable after they are researched."
@@ -0,0 +1,4 @@
author: "Ryll/Shaps"
delete-after: True
changes:
- admin: "Fixed an issue with player logs becoming confused when someone triggers multiple events within one second (like being attacked by two people at the same time) that would cause holes in the logs"
@@ -0,0 +1,4 @@
author: "Chiirno"
delete-after: True
changes:
- tweak: "Chem masters can now dispense 20 instances of its outputs instead of 10."
@@ -0,0 +1,11 @@
author: "necromanceranne"
delete-after: True
changes:
- rscadd: "Bokken now come in two lengths; full and wakizashi, and two varieties: wood and ironwood. They have different stats for all four."
- rscadd: "Bokken require menu crafting and part construction, as well as more complicated materials."
- tweak: "Bokken (long and short) require wood, cloth and leather to craft with a hatchet and screwdriver."
- tweak: "Ironwood bokken (long and short) require ironcap logs, cloth and leather to craft with a hatchet, screwdriver and welder."
- balance: "Twin sheathes can only fit a pair of blades (longsword + shortsword) or they can fit two shortswords."
- bugfix: "Fixed a twin sheath runtime."
- imageadd: "A lot of bokken related sprites received an overhaul. Added overlay sprites for weapons sheathed in the twin sheathes."
- imageadd: "The extradimensional blade received improved sprites for inhands/back sprites."
@@ -0,0 +1,6 @@
author: "TripleShades"
delete-after: True
changes:
- rscadd: "New Paramedic Office next to Genetics where the old Genetics Reception used to be
change: Surgery, Surgery Observation, and Recovery Hall layout revamped drastically
change: Maints below Surgery lowered by one tile to recover lost tile space from Surgery expansion"
@@ -0,0 +1,4 @@
author: "BlueWildrose"
delete-after: True
changes:
- tweak: "You can now have a max-roundstart-dicksize-config inch long johnson before you start suffering blood loss and slowdowns instead of a 20 inch one."
@@ -0,0 +1,6 @@
author: "EmeraldSundisk"
delete-after: True
changes:
- rscadd: "Adds a new \"Computer Core\" area designation for CogStation"
- bugfix: "Fixes some missing area strings"
- tweak: "Replaces some firelocks with directional ones as to ensure desks/counters can still be accessed"
@@ -0,0 +1,5 @@
author: "Chiirno"
delete-after: True
changes:
- tweak: "Nightmare now deals additional damage to most light sources."
- bugfix: "Nightmare now one-shots miners beacons and glowshrooms"
@@ -0,0 +1,6 @@
author: "necromanceranne"
delete-after: True
changes:
- bugfix: "You can now make all the variants of the bokken."
- bugfix: "Removes a duplicate sprite."
- tweak: "Renames all instances of 'ironwood' to 'steelwood'."
@@ -0,0 +1,6 @@
author: "MrJWhit"
delete-after: True
changes:
- tweak: "Removed the wires connecting the AI from the rest of the station on cogstation."
- tweak: "Fixes experimenter on cogstation."
- tweak: "Less pipes in the overall area in toxins on cogstation"
@@ -0,0 +1,4 @@
author: "Arturlang"
delete-after: True
changes:
- tweak: "Prayers to admins now do a wee ding sound for all prayers, instead of just chaplains"
@@ -0,0 +1,8 @@
author: "TripleShades"
delete-after: True
changes:
- rscadd: "Firelock to Surgery Bay drapes
change: Swapped Nanomed and Fire Alarm button locations in both Surgery Bays
change: Removes the double mirror in both Surgery Bays to be a singular mirror
change: Moved an intercom to not be doorstuck below Paramedical Office
remove: One Surgery Observation Fire Alarm button"
@@ -0,0 +1,4 @@
author: "MrJWhit"
delete-after: True
changes:
- tweak: "Fixes maint area in boxstation"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,30 @@
/datum/gear/unlockable
category = LOADOUT_CATEGORY_UNLOCKABLE
slot = SLOT_NECK
var/progress_required //what does our progress need to be to unlock it
var/progress_key //what is the key used to retrieve existing progress for this unlockable
/datum/gear/unlockable/janitor
name = "Janitor Bedsheet"
description = "Clean 100 messes with a mop to unlock this. It has a warning sign on!"
path = /obj/item/bedsheet/unlockable/janitor
progress_required = 100
progress_key = "janitor"
/datum/gear/unlockable/cook
name = "Cook Bedsheet"
description = "Cook 250 items using the microwave to unlock this. It has a microwave on!"
path = /obj/item/bedsheet/unlockable/cook
progress_required = 250
progress_key = "cook"
/datum/gear/unlockable/miner
name = "Miner Bedsheet"
description = "Redeem a total of 100,000 miner points to unlock this. It's made out of goliath hide!"
path = /obj/item/bedsheet/unlockable/miner
progress_required = 100000
progress_key = "miner"
@@ -232,7 +232,8 @@
P.Insert(H)
P.modify_size(0.1)
if (ISINRANGE_EX(P.length, 20.5, 21) && (H.w_uniform || H.wear_suit))
var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
if (ISINRANGE_EX(P.length, max_D + 0.5, max_D + 1) && (H.w_uniform || H.wear_suit))
var/target = H.get_bodypart(BODY_ZONE_CHEST)
if(!message_spam)
to_chat(H, "<span class='danger'>Your cock begin to strain against your clothes tightly!</b></span>")
Binary file not shown.
+2
View File
@@ -3343,6 +3343,7 @@
#include "code\modules\shuttle\shuttle.dm"
#include "code\modules\shuttle\shuttle_rotate.dm"
#include "code\modules\shuttle\snaxi.dm"
#include "code\modules\shuttle\spaceship_navigation_beacon.dm"
#include "code\modules\shuttle\special.dm"
#include "code\modules\shuttle\supply.dm"
#include "code\modules\shuttle\syndicate.dm"
@@ -3609,6 +3610,7 @@
#include "modular_citadel\code\modules\client\loadout\shoes.dm"
#include "modular_citadel\code\modules\client\loadout\suit.dm"
#include "modular_citadel\code\modules\client\loadout\uniform.dm"
#include "modular_citadel\code\modules\client\loadout\unlockable.dm"
#include "modular_citadel\code\modules\client\verbs\who.dm"
#include "modular_citadel\code\modules\clothing\neck.dm"
#include "modular_citadel\code\modules\clothing\trek.dm"
+1 -1
View File
@@ -205,7 +205,7 @@ const PackagingControlsItem = props => {
stepPixelSize={15}
value={amount}
minValue={1}
maxValue={10}
maxValue={20}
onChange={onChangeAmount} />
<Button
ml={1}
File diff suppressed because one or more lines are too long