Merge branch 'master' into upstream-merge-85370

This commit is contained in:
projectkepler-RU
2024-08-06 19:34:12 +07:00
committed by GitHub
386 changed files with 4973 additions and 2433 deletions
@@ -25,8 +25,8 @@
/obj/item/clothing/shoes/galoshes{
pixel_y = -5
},
/obj/item/flashlight/eyelight{
pixel_y = 11
/obj/item/flashlight{
pixel_y = 8
},
/turf/open/floor/plating/icemoon,
/area/ruin/plasma_facility/operations)
File diff suppressed because it is too large Load Diff
+70 -74
View File
@@ -7935,6 +7935,15 @@
/obj/structure/sink/kitchen/directional/south,
/turf/open/floor/iron,
/area/station/service/hydroponics)
"cmh" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 4
},
/obj/effect/turf_decal/tile/neutral/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
"cmq" = (
/obj/machinery/door/airlock/external{
name = "External Access"
@@ -9029,15 +9038,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/aft/greater)
"cBD" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 4
},
/obj/effect/turf_decal/tile/neutral/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
"cBG" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -17599,6 +17599,14 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/white,
/area/mine/living_quarters)
"fjX" = (
/obj/structure/sink/directional/south,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/obj/effect/turf_decal/tile/green/half/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/security/prison/garden)
"fkc" = (
/obj/machinery/power/terminal{
dir = 8
@@ -19597,6 +19605,12 @@
dir = 1
},
/area/station/security/prison)
"fQL" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/south,
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
"fQU" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -21885,21 +21899,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/plating,
/area/station/hallway/secondary/exit/departure_lounge)
"gBV" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 4
},
/obj/effect/turf_decal/trimline/red/filled/corner{
dir = 8
},
/obj/machinery/holopad,
/obj/effect/landmark/start/depsec/medical,
/obj/machinery/computer/security/telescreen/med_sec/directional/east,
/turf/open/floor/iron/dark/smooth_large,
/area/station/security/checkpoint/medical)
"gBX" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
@@ -24787,10 +24786,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
"hto" = (
/obj/structure/girder,
/turf/closed/wall,
/area/station/maintenance/starboard/aft)
"htp" = (
/obj/machinery/door/poddoor/preopen{
id = "xenobio2";
@@ -27127,6 +27122,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/atmos)
"ify" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/iron/dark,
/area/station/service/hydroponics/garden)
"ifA" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/cold_temp,
@@ -29669,6 +29670,21 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/morgue)
"iTE" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 4
},
/obj/effect/turf_decal/trimline/red/filled/corner{
dir = 8
},
/obj/machinery/holopad,
/obj/effect/landmark/start/depsec/medical,
/obj/machinery/computer/security/telescreen/med_sec/directional/east,
/turf/open/floor/iron/dark/smooth_large,
/area/station/security/checkpoint/medical)
"iTJ" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -43790,12 +43806,6 @@
/mob/living/carbon/human/species/monkey,
/turf/open/floor/engine,
/area/station/science/genetics)
"nhS" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/south,
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
"nhT" = (
/obj/machinery/door/airlock/external{
glass = 1;
@@ -52419,12 +52429,6 @@
},
/turf/open/floor/plating/snowed/icemoon,
/area/icemoon/underground/explored)
"pGy" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/iron/dark,
/area/station/service/hydroponics/garden)
"pGJ" = (
/obj/structure/sign/poster/contraband/random/directional/north,
/obj/effect/mapping_helpers/burnt_floor,
@@ -54283,13 +54287,6 @@
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/qm)
"qiT" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/tile/green/anticorner/contrasted{
dir = 4
},
/turf/open/floor/iron/dark,
/area/station/service/hydroponics/garden)
"qjb" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
dir = 10
@@ -66884,6 +66881,13 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/medical/storage)
"tQp" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/tile/green/anticorner/contrasted{
dir = 4
},
/turf/open/floor/iron/dark,
/area/station/service/hydroponics/garden)
"tQE" = (
/obj/effect/turf_decal/siding/brown/corner{
dir = 4
@@ -69459,6 +69463,17 @@
"uIg" = (
/turf/open/floor/engine/n2o,
/area/station/engineering/atmos)
"uIi" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
},
/obj/machinery/camera/directional/east{
c_tag = "Garden"
},
/obj/item/kirbyplants/random,
/obj/machinery/status_display/ai/directional/east,
/turf/open/floor/iron/dark,
/area/station/service/hydroponics/garden)
"uIj" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -73912,14 +73927,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/large,
/area/station/command/heads_quarters/ce)
"wcz" = (
/obj/structure/sink/directional/south,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/obj/effect/turf_decal/tile/green/half/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/security/prison/garden)
"wcD" = (
/obj/structure/chair/plastic{
dir = 4
@@ -77699,17 +77706,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet/blue,
/area/station/hallway/secondary/entry)
"xhg" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
},
/obj/machinery/camera/directional/east{
c_tag = "Garden"
},
/obj/item/kirbyplants/random,
/obj/machinery/status_display/ai/directional/east,
/turf/open/floor/iron/dark,
/area/station/service/hydroponics/garden)
"xhk" = (
/turf/open/floor/iron/dark,
/area/station/commons/storage/primary)
@@ -169048,7 +169044,7 @@ bCp
fYi
tCL
jNf
wcz
fjX
hKI
fWe
ozX
@@ -227938,7 +227934,7 @@ esv
lCb
ddZ
eUA
nhS
fQL
oCO
oCO
oCO
@@ -228196,7 +228192,7 @@ eUi
eBB
tNd
nor
qiT
tQp
cgw
mZu
hjv
@@ -228708,7 +228704,7 @@ lJO
wDf
sAR
sAR
cBD
cmh
kPy
dQI
pPT
@@ -228965,8 +228961,8 @@ lJO
mCT
mut
lGo
xhg
pGy
uIi
ify
wCL
tTc
wtr
@@ -251348,7 +251344,7 @@ pJC
nKa
dhk
cDT
gBV
iTE
cAI
cMN
uYm
@@ -259618,7 +259614,7 @@ lXi
vzD
vzD
vzD
hto
vzD
jOj
vzD
daT
+87 -75
View File
@@ -1155,16 +1155,6 @@
/obj/machinery/door/window/left/directional/west,
/turf/open/floor/grass,
/area/station/service/hydroponics/garden)
"atk" = (
/obj/machinery/airalarm/directional/east,
/obj/structure/table/reinforced,
/obj/item/storage/toolbox/mechanical,
/obj/item/clothing/head/utility/welding,
/obj/effect/turf_decal/siding/purple{
dir = 8
},
/turf/open/floor/iron,
/area/station/science/robotics/mechbay)
"atl" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/freezer,
@@ -5239,6 +5229,34 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
"bSi" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 4
},
/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{
dir = 4
},
/obj/item/hand_labeler{
pixel_x = 3;
pixel_y = 5
},
/obj/item/storage/pill_bottle/epinephrine{
pixel_x = -9;
pixel_y = 1
},
/obj/item/stack/sheet/mineral/plasma{
pixel_y = 14;
pixel_x = 3
},
/obj/item/hand_labeler_refill{
pixel_x = 10;
pixel_y = -2
},
/turf/open/floor/iron/white/smooth_edge{
dir = 4
},
/area/station/medical/pharmacy)
"bSr" = (
/obj/effect/turf_decal/siding/purple{
dir = 4
@@ -10265,22 +10283,6 @@
},
/turf/open/floor/carpet/orange,
/area/station/service/theater)
"dGs" = (
/obj/structure/table/reinforced,
/obj/item/storage/pill_bottle/epinephrine,
/obj/item/stack/sheet/mineral/plasma{
pixel_y = 12
},
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 4
},
/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{
dir = 4
},
/turf/open/floor/iron/white/smooth_edge{
dir = 4
},
/area/station/medical/pharmacy)
"dGt" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
@@ -10747,6 +10749,20 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/cargo/storage)
"dPo" = (
/obj/item/stack/sheet/glass,
/obj/item/clothing/glasses/welding,
/obj/item/disk/tech_disk{
pixel_y = 6
},
/obj/item/reagent_containers/dropper,
/obj/structure/table,
/obj/machinery/requests_console/auto_name/directional/north,
/obj/effect/mapping_helpers/requests_console/supplies,
/obj/effect/mapping_helpers/requests_console/ore_update,
/obj/effect/mapping_helpers/requests_console/assistance,
/turf/open/floor/iron/white,
/area/station/science/lab)
"dPq" = (
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/grass,
@@ -17273,10 +17289,6 @@
dir = 1
},
/area/station/science/research)
"ggl" = (
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/grass,
/area/station/service/hydroponics/garden)
"ggu" = (
/obj/machinery/door/airlock/public/glass{
name = "Library"
@@ -34379,6 +34391,11 @@
/obj/machinery/computer/station_alert,
/turf/open/floor/iron,
/area/station/engineering/atmos/upper)
"miq" = (
/obj/machinery/computer/security/telescreen/rd/directional/south,
/obj/machinery/keycard_auth/wall_mounted/directional/south,
/turf/open/floor/glass/reinforced/plasma,
/area/station/command/heads_quarters/rd)
"mit" = (
/obj/structure/weightmachine/weightlifter,
/obj/machinery/newscaster/directional/east,
@@ -39202,6 +39219,19 @@
},
/turf/open/floor/iron,
/area/station/maintenance/disposal/incinerator)
"nUW" = (
/obj/structure/table/reinforced,
/obj/item/stack/sheet/plasteel{
amount = 15
},
/obj/item/assembly/prox_sensor{
pixel_x = 5;
pixel_y = 7
},
/obj/structure/fireaxecabinet/mechremoval/directional/east,
/obj/item/stack/sheet/glass/fifty,
/turf/open/floor/iron/dark/textured,
/area/station/science/robotics/lab)
"nVa" = (
/obj/structure/closet/secure_closet/brig/genpop,
/obj/machinery/firealarm/directional/south,
@@ -42471,20 +42501,6 @@
/obj/machinery/digital_clock/directional/south,
/turf/open/floor/iron/white/textured_large,
/area/station/medical/treatment_center)
"pfz" = (
/obj/item/stack/sheet/glass,
/obj/item/clothing/glasses/welding,
/obj/item/disk/tech_disk{
pixel_y = 6
},
/obj/item/reagent_containers/dropper,
/obj/structure/table,
/obj/machinery/requests_console/auto_name/directional/north,
/obj/effect/mapping_helpers/requests_console/supplies,
/obj/effect/mapping_helpers/requests_console/ore_update,
/obj/effect/mapping_helpers/requests_console/assistance,
/turf/open/floor/iron/white,
/area/station/science/lab)
"pfV" = (
/obj/machinery/holopad,
/turf/open/floor/iron,
@@ -49567,12 +49583,6 @@
/obj/machinery/digital_clock/directional/south,
/turf/open/floor/iron/white,
/area/station/science/lab)
"rBL" = (
/obj/machinery/computer/records/medical,
/obj/effect/turf_decal/tile/red/fourcorners,
/obj/machinery/computer/security/telescreen/med_sec/directional/north,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/medical)
"rBT" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/transit_tube/station/dispenser/reverse{
@@ -49759,6 +49769,10 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron,
/area/station/engineering/storage)
"rEm" = (
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/grass,
/area/station/service/hydroponics/garden)
"rEp" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
@@ -49937,6 +49951,16 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/cargo/sorting)
"rHk" = (
/obj/machinery/airalarm/directional/east,
/obj/structure/table/reinforced,
/obj/item/storage/toolbox/mechanical,
/obj/item/clothing/head/utility/welding,
/obj/effect/turf_decal/siding/purple{
dir = 8
},
/turf/open/floor/iron,
/area/station/science/robotics/mechbay)
"rHm" = (
/obj/structure/lattice/catwalk,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -53807,11 +53831,6 @@
},
/turf/open/floor/iron,
/area/station/command/bridge)
"sXs" = (
/obj/machinery/computer/security/telescreen/rd/directional/south,
/obj/machinery/keycard_auth/wall_mounted/directional/south,
/turf/open/floor/glass/reinforced/plasma,
/area/station/command/heads_quarters/rd)
"sXG" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -58832,6 +58851,12 @@
/obj/structure/cable,
/turf/open/floor/plating/airless,
/area/station/solars/port)
"uJq" = (
/obj/machinery/computer/records/medical,
/obj/effect/turf_decal/tile/red/fourcorners,
/obj/machinery/computer/security/telescreen/med_sec/directional/north,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/medical)
"uJt" = (
/obj/effect/mapping_helpers/engraving,
/turf/closed/wall,
@@ -66442,19 +66467,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet/purple,
/area/station/service/library)
"xvO" = (
/obj/structure/table/reinforced,
/obj/item/stack/sheet/plasteel{
amount = 15
},
/obj/item/assembly/prox_sensor{
pixel_x = 5;
pixel_y = 7
},
/obj/structure/fireaxecabinet/mechremoval/directional/east,
/obj/item/stack/sheet/glass/fifty,
/turf/open/floor/iron/dark/textured,
/area/station/science/robotics/lab)
"xvU" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -82777,7 +82789,7 @@ mBj
jHx
iJF
kFT
rBL
uJq
sGt
ltj
fvo
@@ -87401,7 +87413,7 @@ xlw
qfB
vyO
hjW
dGs
bSi
rdP
qfB
rgx
@@ -88940,7 +88952,7 @@ tIH
tIH
tIH
iuv
ggl
rEm
tIH
tIH
kAg
@@ -103815,7 +103827,7 @@ tdk
hkc
swi
dHy
atk
rHk
trL
nMP
xOU
@@ -104319,7 +104331,7 @@ vfJ
xbu
gMK
cPt
pfz
dPo
wtu
dfr
mKF
@@ -104340,7 +104352,7 @@ qnQ
xcb
wCO
tld
xvO
nUW
azv
azv
azv
@@ -177836,7 +177848,7 @@ gmH
rXS
tOL
fPv
sXs
miq
iFN
mZn
oND
+2 -2
View File
@@ -27,7 +27,7 @@
dir = 4
},
/obj/machinery/light/small/blacklight/directional/east,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"v" = (
/obj/machinery/light/small/blacklight/directional/east,
@@ -68,7 +68,7 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"M" = (
/obj/effect/decal/cleanable/dirt,
+2 -2
View File
@@ -18,7 +18,7 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"e" = (
/obj/structure/table/reinforced/plastitaniumglass,
@@ -59,7 +59,7 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"z" = (
/obj/effect/turf_decal/trimline/yellow/corner{
+2 -2
View File
@@ -20,7 +20,7 @@
dir = 8
},
/obj/effect/landmark/bitrunning/cache_goal_turf,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"i" = (
/obj/effect/turf_decal/siding/yellow{
@@ -98,7 +98,7 @@
/obj/effect/turf_decal/loading_area,
/obj/effect/turf_decal/box/corners,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"T" = (
/obj/effect/landmark/bitrunning/hololadder_spawn,
+2 -2
View File
@@ -60,7 +60,7 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"p" = (
/obj/structure/railing,
@@ -69,7 +69,7 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"u" = (
/obj/effect/decal/cleanable/dirt/dust,
+1 -1
View File
@@ -63,7 +63,7 @@
/obj/machinery/light/directional/east,
/obj/structure/railing,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"A" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
+2 -2
View File
@@ -26,7 +26,7 @@
},
/obj/machinery/light/directional/east,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"B" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
@@ -52,7 +52,7 @@
},
/obj/structure/railing,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"H" = (
/obj/machinery/door/airlock/external/glass{
+2 -2
View File
@@ -16,7 +16,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/obj/effect/turf_decal/loading_area,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"i" = (
/obj/effect/turf_decal/stripes/line{
@@ -41,7 +41,7 @@
/obj/machinery/light/small/directional/south,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/obj/effect/turf_decal/loading_area,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"m" = (
/obj/modular_map_connector,
+2 -2
View File
@@ -67,7 +67,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/obj/effect/turf_decal/loading_area,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"z" = (
/obj/effect/turf_decal/stripes/line{
@@ -98,7 +98,7 @@
/obj/machinery/light/small/directional/south,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/obj/effect/turf_decal/loading_area,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"E" = (
/obj/effect/turf_decal/stripes/line{
+2 -2
View File
@@ -19,7 +19,7 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"v" = (
/obj/machinery/light/small/directional/east,
@@ -50,7 +50,7 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/safehouse)
"T" = (
/obj/effect/landmark/bitrunning/hololadder_spawn,
+3 -1
View File
@@ -759,7 +759,9 @@
/turf/open/indestructible/white,
/area/lavaland/surface/outdoors/virtual_domain)
"WT" = (
/obj/machinery/door/airlock/bananium,
/obj/machinery/door/airlock/bananium{
use_power = 0
},
/turf/open/floor/carpet,
/area/lavaland/surface/outdoors/virtual_domain)
"WX" = (
+1 -1
View File
@@ -2540,7 +2540,7 @@
/area/virtual_domain)
"GD" = (
/obj/effect/landmark/bitrunning/permanent_exit,
/turf/open/floor/bitrunning_transport,
/turf/open/indestructible/bitrunning_transport,
/area/virtual_domain/protected_space/fullbright)
"GI" = (
/turf/open/floor/iron/dark/textured_large,
+2
View File
@@ -24,6 +24,8 @@
///the list of interactions we can have with the owner
#define BB_INTERACTIONS_WITH_OWNER "BB_interactions_with_owner"
///The trait checked by ai_behavior/find_potential_targets/prioritize_trait to return a target with a trait over the rest.
#define BB_TARGET_PRIORITY_TRAIT "target_priority_trait"
/// Store a single or list of emotes at this key
#define BB_EMOTE_KEY "BB_emotes"
+4
View File
@@ -70,8 +70,12 @@
#define BB_LOBSTROSITY_TARGET_LIMB "BB_lobstrosity_target_limb"
/// We increment this counter every time we try to move while dragging an arm and if we go too long we'll give up trying to get out of line of sight and just eat the fingers
#define BB_LOBSTROSITY_FINGER_LUST "BB_lobstrosity_finger_lust"
/// Does this carp still target lying mobs even if they aren't stunned, and flee from sary fishermen?
#define BB_LOBSTROSITY_NAIVE_HUNTER "BB_lobstrosity_naive_hunter"
/// Does this carp run from scary fishermen?
#define BB_CARPS_FEAR_FISHERMAN "BB_carp_fear_fisherman"
// eyeball keys
///the death glare ability
#define BB_GLARE_ABILITY "BB_glare_ability"
-2
View File
@@ -70,5 +70,3 @@ GLOBAL_VAR_INIT(gutlunch_count, 0)
#define BB_RAPTOR_TROUGH_TARGET "raptor_trough_target"
#define MAX_RAPTOR_POP 64
+2
View File
@@ -106,6 +106,8 @@ DEFINE_BITFIELD(no_equip_flags, list(
#define HIDESNOUT (1<<12)
///hides mutant/moth wings, does not apply to functional wings
#define HIDEMUTWINGS (1<<13)
///hides belts and riggings
#define HIDEBELT (1<<14)
//SKYRAT EDIT ADDITION: CUSTOM EAR TOGGLE FOR ANTHRO/ETC EAR SHOWING -
/// Manually set this on items you want anthro ears to show on!
+1 -1
View File
@@ -100,7 +100,7 @@
#define JOB_CHAPLAIN "Chaplain"
#define JOB_PSYCHOLOGIST "Psychologist"
#define JOB_BARBER "Barber" // SKYRAT EDIT ADDITION
#define JOB_BOUNCER "Service Guard" // SKYRAT EDIT ADDITION
#define JOB_BOUNCER "Bouncer" // SKYRAT EDIT ADDITION
//ERTs
#define JOB_ERT_DEATHSQUAD "Death Commando"
#define JOB_ERT_COMMANDER "Emergency Response Team Commander"
+9
View File
@@ -9,6 +9,7 @@
#define MAX_BOULDERS_PER_VENT 10
/// Time multiplier
#define INATE_BOULDER_SPEED_MULTIPLIER 3
// Vent type
/// Large vents, giving large boulders.
#define LARGE_VENT_TYPE "large"
@@ -17,6 +18,14 @@
/// Small vents, giving small boulders.
#define SMALL_VENT_TYPE "small"
// Timers for the ore vents to perform wave defense.
/// Duration for wave defense for a small vent.
#define WAVE_DURATION_SMALL 60 SECONDS
/// Duration for wave defense for a medium vent.
#define WAVE_DURATION_MEDIUM 90 SECONDS
/// Duration for wave defense for a large vent.
#define WAVE_DURATION_LARGE 150 SECONDS
/// Proximity to a vent that a wall ore needs to be for 5 ore to be mined.
#define VENT_PROX_VERY_HIGH 3
/// Proximity to a vent that a wall ore needs to be for 4 ore to be mined.
+5
View File
@@ -225,6 +225,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_REVEAL_FISH "reveal_fish"
///This trait gets you a list of fishes that can be caught when examining a fishing spot.
#define TRAIT_EXAMINE_FISHING_SPOT "examine_fishing_spot"
///lobstrosities and carps will prioritize/flee from those that have this trait (given by the skill-locked hat)
#define TRAIT_SCARY_FISHERMAN "scary_fisherman"
///Trait given to turfs or objects that can be fished from
#define TRAIT_FISHING_SPOT "fishing_spot"
///Trait given to mobs that can fish without a rod
@@ -1125,6 +1127,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///Trait given to limb by /mob/living/basic/living_limb_flesh
#define TRAIT_IGNORED_BY_LIVING_FLESH "livingflesh_ignored"
///Trait given to organs that have been inside a living being previously
#define TRAIT_USED_ORGAN "used_organ"
/// Trait given while using /datum/action/cooldown/mob_cooldown/wing_buffet
#define TRAIT_WING_BUFFET "wing_buffet"
/// Trait given while tired after using /datum/action/cooldown/mob_cooldown/wing_buffet
+4 -1
View File
@@ -36,9 +36,12 @@
/// Typepath used for uplink items which don't actually produce an item (essentially just a placeholder)
/// Future todo: Make this not necessary / make uplink items support item-less items natively
#define ABSTRACT_UPLINK_ITEM /obj/effect/gibspawner/generic
#define ABSTRACT_UPLINK_ITEM /obj/item/loot_table_maker
/// Lower threshold for which an uplink items's TC cost is considered "low" for spy bounties picking rewards
#define SPY_LOWER_COST_THRESHOLD 5
/// Upper threshold for which an uplink items's TC cost is considered "high" for spy bounties picking rewards
#define SPY_UPPER_COST_THRESHOLD 12
/// Minimal cost for an item to be eligible for a discount
#define TRAITOR_DISCOUNT_MIN_PRICE 4
+9 -3
View File
@@ -69,14 +69,20 @@
//In inches
#define PENIS_MIN_GIRTH PENIS_MIN_LENGTH
#define PENIS_MAX_GIRTH 15
#define PENIS_MAX_GIRTH 20
/// for non oversized mobs with a 'normal' body size
#define PENIS_MAX_GIRTH_NORMAL_SIZED 15
#define PENIS_DEFAULT_GIRTH 5 // a lil big but not by much
#define PENIS_MIN_LENGTH 1
#define PENIS_MAX_LENGTH 20
#define PENIS_MAX_LENGTH 36
/// for non oversized mobs with a 'normal' body size
#define PENIS_MAX_LENGTH_NORMAL_SIZED 20
#define PENIS_DEFAULT_LENGTH 6 //still a lil long but not insane
#define TESTICLES_MIN_SIZE 0
#define TESTICLES_MAX_SIZE 3
#define TESTICLES_MAX_SIZE 6
/// for non oversized mobs with a 'normal' body size
#define TESTICLES_MAX_NORMAL_SIZED 3
#define SHEATH_NONE "None"
#define SHEATH_NORMAL "Sheath"
@@ -1,5 +1,9 @@
#define COMSIG_KB_MOB_PIXEL_SHIFT_DOWN "keybinding_mob_pixel_shift_down"
#define COMSIG_KB_MOB_PIXEL_SHIFT_UP "keybinding_mob_pixel_shift_up"
#define COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_DOWN "keybinding_mob_item_pixelshift_down"
#define COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_UP "keybinding_mob_item_pixelshift_up"
#define COMSIG_KB_MOB_PIXEL_TILT_DOWN "keybinding_mob_pixeltilt_down"
#define COMSIG_KB_MOB_PIXEL_TILT_UP "keybinding_mob_pixeltilt_up"
#define COMSIG_KB_CLIENT_LOOC_DOWN "keybinding_client_looc_down"
#define COMSIG_KB_CLIENT_WHISPER_DOWN "keybinding_client_whisper_down"
#define COMSIG_KB_LIVING_COMBAT_INDICATOR "keybinding_living_combat_indicator"
+3 -3
View File
@@ -214,16 +214,16 @@
if(istype(atom_to_find, type))
return atom_to_find
while(!istype(atom_to_find.loc, type))
while(!istype(atom_to_find, type))
if(!atom_to_find.loc)
return
atom_to_find = atom_to_find.loc
else if(isatom(type))
atom_to_find = target
if(atom_to_find.loc == type)
if(atom_to_find == type)
return atom_to_find
while(atom_to_find.loc != type)
while(atom_to_find != type)
if(!atom_to_find.loc)
return
atom_to_find = atom_to_find.loc
+3 -3
View File
@@ -121,7 +121,7 @@
if(isnull(user_input)) // User pressed cancel
return
if(no_trim)
return copytext(html_encode(user_input), 1, max_length)
return copytext_char(html_encode(user_input), 1, max_length)
else
return trim(html_encode(user_input), max_length) //trim is "outside" because html_encode can expand single symbols into multiple symbols (such as turning < into &lt;)
@@ -140,7 +140,7 @@
if(isnull(user_input)) // User pressed cancel
return
if(no_trim)
return copytext(html_encode(user_input), 1, max_length)
return copytext_char(html_encode(user_input), 1, max_length)
else
return trim(html_encode(user_input), max_length)
@@ -368,7 +368,7 @@
*/
/proc/truncate(text, max_length)
if(length(text) > max_length)
return copytext(text, 1, max_length)
return copytext_char(text, 1, max_length)
return text
//Returns a string with reserved characters and spaces before the first word and after the last word removed.
+1
View File
@@ -200,6 +200,7 @@ DEFINE_BITFIELD(flags_inv, list(
"HIDEHEADGEAR" = HIDEHEADGEAR,
"HIDEJUMPSUIT" = HIDEJUMPSUIT,
"HIDEMASK" = HIDEMASK,
"HIDEBELT" = HIDEBELT,
"HIDENECK" = HIDENECK,
"HIDESHOES" = HIDESHOES,
"HIDESNOUT" = HIDESNOUT,
+2 -1
View File
@@ -61,6 +61,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT,
"TRAIT_ON_HIT_EFFECT" = TRAIT_ON_HIT_EFFECT,
"TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN,
"TRAIT_SCARY_FISHERMAN" = TRAIT_SCARY_FISHERMAN,
"TRAIT_SECLUDED_LOCATION" = TRAIT_SECLUDED_LOCATION,
"TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE,
"TRAIT_TELEKINESIS_CONTROLLED" = TRAIT_TELEKINESIS_CONTROLLED,
@@ -218,7 +219,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_ECHOLOCATION_RECEIVER" = TRAIT_ECHOLOCATION_RECEIVER,
"TRAIT_ELDRITCH_PAINTING_EXAMINE" = TRAIT_ELDRITCH_PAINTING_EXAMINE,
"TRAIT_ELITE_CHALLENGER" = TRAIT_ELITE_CHALLENGER,
"TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE,
"TRAIT_EMOTEMUTE" = TRAIT_EMOTEMUTE,
"TRAIT_EMPATH" = TRAIT_EMPATH,
"TRAIT_ENTRAILS_READER" = TRAIT_ENTRAILS_READER,
@@ -617,6 +617,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
),
/obj/item/organ = list(
"TRAIT_LIVING_HEART" = TRAIT_LIVING_HEART,
"TRAIT_USED_ORGAN" = TRAIT_USED_ORGAN,
),
/obj/item/organ/internal/liver = list(
"TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST,
+63 -1
View File
@@ -18,6 +18,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_MOVE_VENTCRAWLING" = TRAIT_MOVE_VENTCRAWLING,
"TRAIT_MOVE_UPSIDE_DOWN" = TRAIT_MOVE_UPSIDE_DOWN,
"TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN,
"TRAIT_SCARY_FISHERMAN" = TRAIT_SCARY_FISHERMAN,
"TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE,
"TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE,
"TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE,
@@ -29,14 +30,21 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_AGENDER" = TRAIT_AGENDER,
"TRAIT_AGEUSIA" = TRAIT_AGEUSIA,
"TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE,
"TRAIT_ALLOW_HERETIC_CASTING" = TRAIT_ALLOW_HERETIC_CASTING,
"TRAIT_ALWAYS_NO_ACCESS" = TRAIT_ALWAYS_NO_ACCESS,
"TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED,
"TRAIT_ANOSMIA" = TRAIT_ANOSMIA,
"TRAIT_ANTENNAE" = TRAIT_ANTENNAE,
"TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC,
"TRAIT_ANTIMAGIC_NO_SELFBLOCK" = TRAIT_ANTIMAGIC_NO_SELFBLOCK,
"TRAIT_ANXIOUS" = TRAIT_ANXIOUS,
"TRAIT_BADDNA" = TRAIT_BADDNA,
"TRAIT_BADTOUCH" = TRAIT_BADTOUCH,
"TRAIT_BALD" = TRAIT_BALD,
"TRAIT_BALLOON_SUTRA" = TRAIT_BALLOON_SUTRA,
"TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE,
"TRAIT_BEAST_EMPATHY" = TRAIT_BEAST_EMPATHY,
"TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY,
"TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT,
"TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS,
"TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES,
@@ -45,20 +53,27 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER,
"TRAIT_BYPASS_MEASURES" = TRAIT_BYPASS_MEASURES,
"TRAIT_CAN_HOLD_ITEMS" = TRAIT_CAN_HOLD_ITEMS,
"TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP,
"TRAIT_CAN_USE_NUKE" = TRAIT_CAN_USE_NUKE,
"TRAIT_CANNOT_BE_UNBUCKLED" = TRAIT_CANNOT_BE_UNBUCKLED,
"TRAIT_CANNOT_OPEN_PRESENTS" = TRAIT_CANNOT_OPEN_PRESENTS,
"TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE,
"TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED,
"TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON,
"TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS,
"TRAIT_CLEANBOT_WHISPERER" = TRAIT_CLEANBOT_WHISPERER,
"TRAIT_CLIFF_WALKER" = TRAIT_CLIFF_WALKER,
"TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER,
"TRAIT_CLUMSY" = TRAIT_CLUMSY,
"TRAIT_COMMISSIONED" = TRAIT_COMMISSIONED,
"TRAIT_CORPSELOCKED" = TRAIT_CORPSELOCKED,
"TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION,
"TRAIT_CULT_HALO" = TRAIT_CULT_HALO,
"TRAIT_DEAF" = TRAIT_DEAF,
"TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA,
"TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED,
"TRAIT_DEPRESSION" = TRAIT_DEPRESSION,
"TRAIT_DETECT_STORM" = TRAIT_DETECT_STORM,
"TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD,
"TRAIT_BOT_PATH_HUD" = TRAIT_BOT_PATH_HUD,
"TRAIT_DISCOORDINATED_TOOL_USER" = TRAIT_DISCOORDINATED_TOOL_USER,
@@ -70,42 +85,59 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_DWARF" = TRAIT_DWARF,
"TRAIT_EASILY_WOUNDED" = TRAIT_EASILY_WOUNDED,
"TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER,
"TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE,
"TRAIT_EMOTEMUTE" = TRAIT_EMOTEMUTE,
"TRAIT_EMPATH" = TRAIT_EMPATH,
"TRAIT_ENTRAILS_READER" = TRAIT_ENTRAILS_READER,
"TRAIT_EXAMINE_FISHING_SPOT" = TRAIT_EXAMINE_FISHING_SPOT,
"TRAIT_EXAMINE_FITNESS" = TRAIT_EXAMINE_FITNESS,
"TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV,
"TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER,
"TRAIT_EXTROVERT" = TRAIT_EXTROVERT,
"TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH,
"TRAIT_FASTMED" = TRAIT_FASTMED,
"TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING,
"TRAIT_FAST_TYING" = TRAIT_FAST_TYING,
"TRAIT_FAT" = TRAIT_FAT,
"TRAIT_FEARLESS" = TRAIT_FEARLESS,
"TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER,
"TRAIT_FIST_MINING" = TRAIT_FIST_MINING,
"TRAIT_FIXED_HAIRCOLOR" = TRAIT_FIXED_HAIRCOLOR,
"TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS,
"TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE,
"TRAIT_FLOORED" = TRAIT_FLOORED,
"TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION" = TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION,
"TRAIT_FORCED_STANDING" = TRAIT_FORCED_STANDING,
"TRAIT_FREERUNNING" = TRAIT_FREERUNNING,
"TRAIT_FREE_FLOAT_MOVEMENT" = TRAIT_FREE_FLOAT_MOVEMENT,
"TRAIT_FREE_HYPERSPACE_MOVEMENT" = TRAIT_FREE_HYPERSPACE_MOVEMENT,
"TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT" = TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT,
"TRAIT_FRIENDLY" = TRAIT_FRIENDLY,
"TRAIT_GAMER" = TRAIT_GAMER,
"TRAIT_GAMERGOD" = TRAIT_GAMERGOD,
"TRAIT_GARLIC_BREATH" = TRAIT_GARLIC_BREATH,
"TRAIT_GENELESS" = TRAIT_GENELESS,
"TRAIT_GIANT" = TRAIT_GIANT,
"TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING,
"TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS,
"TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED,
"TRAIT_GUNFLIP" = TRAIT_GUNFLIP,
"TRAIT_GUN_NATURAL" = TRAIT_GUN_NATURAL,
"TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED,
"TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED,
"TRAIT_HATED_BY_DOGS" = TRAIT_HATED_BY_DOGS,
"TRAIT_HEAVY_DRINKER" = TRAIT_HEAVY_DRINKER,
"TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER,
"TRAIT_HIDE_EXTERNAL_ORGANS" = TRAIT_HIDE_EXTERNAL_ORGANS,
"TRAIT_HIGH_VALUE_RANSOM" = TRAIT_HIGH_VALUE_RANSOM,
"TRAIT_HOLY" = TRAIT_HOLY,
"TRAIT_HUSK" = TRAIT_HUSK,
"TRAIT_ID_APPRAISER" = TRAIT_ID_APPRAISER,
"TRAIT_IGNORE_ELEVATION" = TRAIT_IGNORE_ELEVATION,
"TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN,
"TRAIT_ILLITERATE" = TRAIT_ILLITERATE,
"TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED,
"TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED,
"TRAIT_INTROVERT" = TRAIT_INTROVERT,
"TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN,
"TRAIT_IWASBATONED" = TRAIT_IWASBATONED,
"TRAIT_JOLLY" = TRAIT_JOLLY,
@@ -113,23 +145,28 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT,
"TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES,
"TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES,
"TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER,
"TRAIT_LIGHT_DRINKER" = TRAIT_LIGHT_DRINKER,
"TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP,
"TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER,
"TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT,
"TRAIT_LITERATE" = TRAIT_LITERATE,
"TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM,
"TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE,
"TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED,
"TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE,
"TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD,
"TRAIT_MIME_FAN" = TRAIT_MIME_FAN,
"TRAIT_MIMING" = TRAIT_MIMING,
"TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD,
"TRAIT_MOB_HIDE_HAPPINESS" = TRAIT_MOB_HIDE_HAPPINESS,
"TRAIT_MORBID" = TRAIT_MORBID,
"TRAIT_MULTIZ_SUIT_SENSORS" = TRAIT_MULTIZ_SUIT_SENSORS,
"TRAIT_MUSICIAN" = TRAIT_MUSICIAN,
"TRAIT_MUTANT_COLORS" = TRAIT_MUTANT_COLORS,
"TRAIT_MUTE" = TRAIT_MUTE,
"TRAIT_NAIVE" = TRAIT_NAIVE,
"TRAIT_NEGATES_GRAVITY" = TRAIT_NEGATES_GRAVITY,
"TRAIT_NEVER_WOUNDED" = TRAIT_NEVER_WOUNDED,
"TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT,
"TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION,
@@ -138,13 +175,18 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_NO_DNA_COPY" = TRAIT_NO_DNA_COPY,
"TRAIT_NO_EXTINGUISH" = TRAIT_NO_EXTINGUISH,
"TRAIT_NO_GLIDE" = TRAIT_NO_GLIDE,
"TRAIT_NO_GUN_AKIMBO" = TRAIT_NO_GUN_AKIMBO,
"TRAIT_NO_MINDSWAP" = TRAIT_NO_MINDSWAP,
"TRAIT_NO_MIRROR_REFLECTION" = TRAIT_NO_MIRROR_REFLECTION,
"TRAIT_NO_PLASMA_TRANSFORM" = TRAIT_NO_PLASMA_TRANSFORM,
"TRAIT_NO_SLIP_ALL" = TRAIT_NO_SLIP_ALL,
"TRAIT_NO_SLIP_ICE" = TRAIT_NO_SLIP_ICE,
"TRAIT_NO_SLIP_SLIDE" = TRAIT_NO_SLIP_SLIDE,
"TRAIT_NO_SLIP_WATER" = TRAIT_NO_SLIP_WATER,
"TRAIT_NO_SOUL" = TRAIT_NO_SOUL,
"TRAIT_NO_STAGGER" = TRAIT_NO_STAGGER,
"TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM,
"TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING,
"TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR,
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
"TRAIT_NOBLOOD" = TRAIT_NOBLOOD,
@@ -153,7 +195,10 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY,
"TRAIT_NODEATH" = TRAIT_NODEATH,
"TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER,
"TRAIT_NOFAT" = TRAIT_NOFAT,
"TRAIT_NOFEAR_HOLDUPS" = TRAIT_NOFEAR_HOLDUPS,
"TRAIT_NOFIRE" = TRAIT_NOFIRE,
"TRAIT_NOFIRE_SPREAD" = TRAIT_NOFIRE_SPREAD,
"TRAIT_NOFLASH" = TRAIT_NOFLASH,
"TRAIT_NOGUNS" = TRAIT_NOGUNS,
"TRAIT_TOSS_GUN_HARD" = TRAIT_TOSS_GUN_HARD,
@@ -162,7 +207,9 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE,
"TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP,
"TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT,
"TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER,
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
"TRAIT_OVERDOSEIMMUNE" = TRAIT_OVERDOSEIMMUNE,
"TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE,
"TRAIT_PACIFISM" = TRAIT_PACIFISM,
"TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH,
@@ -174,6 +221,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_PASSTABLE" = TRAIT_PASSTABLE,
"TRAIT_PASSWINDOW" = TRAIT_PASSWINDOW,
"TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER,
"TRAIT_PERMANENTLY_MORTAL" = TRAIT_PERMANENTLY_MORTAL,
"TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER,
"TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE,
"TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE,
@@ -184,16 +232,22 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA,
"TRAIT_PULL_BLOCKED" = TRAIT_PULL_BLOCKED,
"TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE,
"TRAIT_QUICK_BUILD" = TRAIT_QUICK_BUILD,
"TRAIT_QUICK_CARRY" = TRAIT_QUICK_CARRY,
"TRAIT_QUICKER_CARRY" = TRAIT_QUICKER_CARRY,
"TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE,
"TRAIT_REMOTE_TASTING" = TRAIT_REMOTE_TASTING,
"TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD,
"TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT,
"TRAIT_RESISTHEATHANDS" = TRAIT_RESISTHEATHANDS,
"TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE,
"TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE,
"TRAIT_RESTRAINED" = TRAIT_RESTRAINED,
"TRAIT_REVEAL_FISH" = TRAIT_REVEAL_FISH,
"TRAIT_ROCK_STONER" = TRAIT_ROCK_STONER,
"TRAIT_ROD_SUPLEX" = TRAIT_ROD_SUPLEX,
"TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER,
"TRAIT_SABRAGE_PRO" = TRAIT_SABRAGE_PRO,
"TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD,
"TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE,
"TRAIT_SETTLER" = TRAIT_SETTLER,
@@ -208,23 +262,28 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_SLOW_FLIP" = TRAIT_SLOW_FLIP,
"TRAIT_SMOKER" = TRAIT_SMOKER,
"TRAIT_SNOB" = TRAIT_SNOB,
"TRAIT_SOFTSPOKEN" = TRAIT_SOFTSPOKEN,
"TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT,
"TRAIT_SPACEWALK" = TRAIT_SPACEWALK,
"TRAIT_SPECIAL_TRAUMA_BOOST" = TRAIT_SPECIAL_TRAUMA_BOOST,
"TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL,
"TRAIT_STABLEHEART" = TRAIT_STABLEHEART,
"TRAIT_STABLELIVER" = TRAIT_STABLELIVER,
"TRAIT_STRENGTH" = TRAIT_STRENGTH,
"TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER,
"TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH,
"TRAIT_STUBBY_BODY" = TRAIT_STUBBY_BODY,
"TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE,
"TRAIT_STURDY_FRAME" = TRAIT_STURDY_FRAME,
"TRAIT_SUPERMATTER_SOOTHER" = TRAIT_SUPERMATTER_SOOTHER,
"TRAIT_SURGEON" = TRAIT_SURGEON,
"TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED,
"TRAIT_TAGGER" = TRAIT_TAGGER,
"TRAIT_TENTACLE_IMMUNE" = TRAIT_TENTACLE_IMMUNE,
"TRAIT_TESLA_SHOCKIMMUNE" = TRAIT_TESLA_SHOCKIMMUNE,
"TRAIT_THERMAL_VISION" = TRAIT_THERMAL_VISION,
"TRAIT_THROWINGARM" = TRAIT_THROWINGARM,
"TRAIT_TIME_STOP_IMMUNE" = TRAIT_TIME_STOP_IMMUNE,
"TRAIT_TOXIMMUNE" = TRAIT_TOXIMMUNE,
"TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER,
"TRAIT_TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH,
@@ -240,7 +299,10 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_UNSTABLE" = TRAIT_UNSTABLE,
"TRAIT_USED_DNA_VAULT" = TRAIT_USED_DNA_VAULT,
"TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES,
"TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS,
"TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE,
"TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE,
"TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE,
"TRAIT_VORACIOUS" = TRAIT_VORACIOUS,
"TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER,
"TRAIT_WEAK_SOUL" = TRAIT_WEAK_SOUL,
+12 -5
View File
@@ -319,14 +319,14 @@ GLOBAL_LIST_EMPTY(radial_menus)
current_page = WRAP(current_page + 1,1,pages+1)
update_screen_objects()
/datum/radial_menu/proc/show_to(mob/M)
/datum/radial_menu/proc/show_to(mob/M, offset_x = 0, offset_y = 0)
if(current_user)
hide()
if(!M.client || !anchor)
return
current_user = M.client
//Blank
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing", layer = RADIAL_BACKGROUND_LAYER)
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing", layer = RADIAL_BACKGROUND_LAYER, pixel_x = offset_x, pixel_y = offset_y)
SET_PLANE_EXPLICIT(menu_holder, ABOVE_HUD_PLANE, M)
menu_holder.appearance_flags |= KEEP_APART|RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM
menu_holder.vis_contents += elements + close_button
@@ -358,7 +358,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
Choices should be a list where list keys are movables or text used for element names and return value
and list values are movables/icons/images used for element icons
*/
/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE, radial_slice_icon = "radial_slice", autopick_single_option = TRUE, entry_animation = TRUE, click_on_hover = FALSE)
/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE, radial_slice_icon = "radial_slice", autopick_single_option = TRUE, entry_animation = TRUE, click_on_hover = FALSE, user_space = FALSE)
if(!user || !anchor || !length(choices))
return
@@ -381,11 +381,18 @@ GLOBAL_LIST_EMPTY(radial_menus)
menu.radius = radius
if(istype(custom_check))
menu.custom_check_callback = custom_check
menu.anchor = anchor
menu.anchor = user_space ? user : anchor
menu.radial_slice_icon = radial_slice_icon
menu.check_screen_border(user) //Do what's needed to make it look good near borders or on hud
menu.set_choices(choices, tooltips, click_on_hover)
menu.show_to(user)
var/offset_x = 0
var/offset_y = 0
if (user_space)
var/turf/user_turf = get_turf(user)
var/turf/anchor_turf = get_turf(anchor)
offset_x = (anchor_turf.x - user_turf.x) * world.icon_size + anchor.pixel_x - user.pixel_x
offset_y = (anchor_turf.y - user_turf.y) * world.icon_size + anchor.pixel_y - user.pixel_y
menu.show_to(user, offset_x, offset_y)
menu.wait(user, anchor, require_near)
var/answer = menu.selected_choice
qdel(menu)
+19 -1
View File
@@ -482,8 +482,26 @@
return TRUE
/atom/movable/screen/storage/cell
/atom/movable/screen/storage/cell/mouse_drop_receive(atom/target, mob/living/user, params)
var/datum/storage/storage = master_ref?.resolve()
if (isnull(storage) || !istype(user) || storage != user.active_storage)
return
if (!user.can_perform_action(storage.parent, FORBID_TELEKINESIS_REACH))
return
if (target.loc != storage.real_location)
return
/// Due to items in storage ignoring transparency for click hitboxes, this only can happen if we drag onto a free cell - aka after all current contents
storage.real_location.contents -= target
storage.real_location.contents += target
storage.refresh_views()
/atom/movable/screen/storage/corner
name = "storage"
icon_state = "storage_corner_topleft"
/atom/movable/screen/storage/corner/top_right
@@ -37,6 +37,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list(
list(/datum/quirk/light_drinker, /datum/quirk/drunkhealing),
list(/datum/quirk/oversized, /datum/quirk/freerunning),
list(/datum/quirk/oversized, /datum/quirk/item_quirk/settler),
list(/datum/quirk/echolocation, /datum/quirk/item_quirk/blindness, /datum/quirk/item_quirk/nearsighted, /datum/quirk/item_quirk/deafness),
//SKYRAT EDIT ADDITION END
))
@@ -152,3 +152,15 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/
/// Returns the desired final target from the filtered list of targets
/datum/ai_behavior/find_potential_targets/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets)
return pick(filtered_targets)
/// Targets with the trait specified by the BB_TARGET_PRIORITY_TRAIT blackboard key will be prioritized over the rest.
/datum/ai_behavior/find_potential_targets/prioritize_trait
/datum/ai_behavior/find_potential_targets/prioritize_trait/pick_final_target(datum/ai_controller/controller, list/filtered_targets)
var/priority_targets = list()
for(var/atom/target as anything in filtered_targets)
if(HAS_TRAIT(target, controller.blackboard[BB_TARGET_PRIORITY_TRAIT]))
priority_targets += target
if(length(priority_targets))
return pick(priority_targets)
return ..()
@@ -0,0 +1,6 @@
/// Find something with a specific trait to run from
/datum/ai_planning_subtree/find_target_prioritize_traits
/datum/ai_planning_subtree/find_target_prioritize_traits/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
. = ..()
controller.queue_behavior(/datum/ai_behavior/find_potential_targets/prioritize_trait, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, BB_TARGET_PRIORITY_TRAIT)
@@ -12,6 +12,8 @@
var/atom/flee_from = controller.blackboard[target_key]
if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING] || QDELETED(flee_from))
return
if(!should_flee(controller, flee_from))
return
var/flee_distance = controller.blackboard[BB_BASIC_MOB_FLEE_DISTANCE] || DEFAULT_BASIC_FLEE_DISTANCE
if (get_dist(controller.pawn, flee_from) >= flee_distance)
return
@@ -19,8 +21,21 @@
controller.queue_behavior(flee_behaviour, target_key, hiding_place_key)
return SUBTREE_RETURN_FINISH_PLANNING //we gotta get out of here.
/datum/ai_planning_subtree/flee_target/proc/should_flee(datum/ai_controller/controller, atom/flee_from)
if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING] || QDELETED(flee_from))
return FALSE
return TRUE
/// Try to escape from your current target, without performing any other actions.
/// Reads from some fleeing-specific targeting keys rather than the current mob target.
/datum/ai_planning_subtree/flee_target/from_flee_key
target_key = BB_BASIC_MOB_FLEE_TARGET
hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION
/// A subtype that forces the mob to flee from targets with the scary fisherman trait anyway.
/datum/ai_planning_subtree/flee_target/from_fisherman
/datum/ai_planning_subtree/flee_target/from_fisherman/should_flee(datum/ai_controller/controller, atom/flee_from)
if (!QDELETED(flee_from) && HAS_TRAIT(flee_from, TRAIT_SCARY_FISHERMAN))
return TRUE
return ..()
@@ -22,3 +22,12 @@
return
controller.queue_behavior(ranged_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION)
return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions.
/datum/ai_planning_subtree/basic_melee_attack_subtree/no_fisherman
/datum/ai_planning_subtree/basic_melee_attack_subtree/no_fisherman/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
var/atom/movable/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET]
if(QDELETED(target))
return ..()
if(!HAS_TRAIT(target, TRAIT_SCARY_FISHERMAN))
return ..()
@@ -12,4 +12,3 @@
if(watcher.stat != DEAD)
return
return ..()
+1 -1
View File
@@ -111,7 +111,7 @@
for(var/datum/callout_option/callout_option as anything in callout_options)
callout_items[callout_option] = image(icon = 'icons/hud/radial.dmi', icon_state = callout_option::icon_state)
var/datum/callout_option/selection = show_radial_menu(user, get_turf(clicked_atom), callout_items, entry_animation = FALSE, click_on_hover = TRUE)
var/datum/callout_option/selection = show_radial_menu(user, get_turf(clicked_atom), callout_items, entry_animation = FALSE, click_on_hover = TRUE, user_space = TRUE)
if (!selection)
return
@@ -250,11 +250,17 @@
)
category = CAT_EQUIPMENT
/datum/crafting_recipe/bonedice
name = "Bone Die"
result = /obj/item/dice/d6/bone
time = 5 SECONDS
/datum/crafting_recipe/violin
name = "Violin"
result = /obj/item/instrument/violin
reqs = list(
/obj/item/stack/sheet/bone = 1,
/obj/item/stack/sheet/mineral/wood = 4,
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/iron = 1,
)
category = CAT_EQUIPMENT
tool_paths = list(
/obj/item/hatchet,
)
time = 30 SECONDS
category = CAT_ENTERTAINMENT
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
@@ -23,6 +23,17 @@
time = 4 SECONDS
category = CAT_EQUIPMENT
/datum/crafting_recipe/improvisedshield
name = "Moonflower Shield"
result = /obj/item/shield/buckler/moonflower
reqs = list(
/obj/item/seeds/sunflower/moonflower = 3,
/obj/item/grown/log/steel = 3,
)
time = 4 SECONDS
category = CAT_EQUIPMENT
/datum/crafting_recipe/radiogloves
name = "Radio Gloves"
result = /obj/item/clothing/gloves/radio
@@ -260,3 +271,18 @@
)
category = CAT_EQUIPMENT
tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER)
// SKYRAT EDIT REMOVAL START
/*
/datum/crafting_recipe/arrow_quiver
name = "Archery Quiver"
result = /obj/item/storage/bag/quiver/lesser
time = 10
reqs = list(
/obj/item/stack/sheet/leather = 4,
/obj/item/stack/sheet/cardboard = 4
)
category = CAT_EQUIPMENT
tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER)
*/ // SKYRAT EDIT REMOVAL END
@@ -191,3 +191,13 @@
)
time = 10 SECONDS
category = CAT_WEAPON_MELEE
/datum/crafting_recipe/bambostaff
name = "Bamboo Bo Staff"
result = /obj/item/bambostaff
reqs = list(
/obj/item/stack/sheet/mineral/bamboo = 4,
/obj/item/grown/log/steel = 2,
)
time = 8 SECONDS
category = CAT_WEAPON_MELEE
@@ -375,6 +375,21 @@
category = CAT_WEAPON_RANGED
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/shortbow
name = "Shortbow"
result = /obj/item/gun/ballistic/bow/shortbow
reqs = list(
/obj/item/stack/sheet/mineral/wood = 4,
/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/iron = 1,
)
tool_paths = list(
/obj/item/hatchet,
)
time = 30 SECONDS
category = CAT_WEAPON_RANGED
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/photoncannon
name = "Photon Cannon"
result = /obj/item/gun/energy/photon
@@ -6,6 +6,61 @@
time = 5 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_robe
name = "Durathread Robe"
result = /obj/item/clothing/suit/wizrobe/durathread
reqs = list(
/obj/item/stack/sheet/durathread = 3,
/obj/item/stack/sheet/leather = 6,
)
time = 5 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_robe_fire
name = "Durathread Pyromancer Robe"
result = /obj/item/clothing/suit/wizrobe/durathread/fire
reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
/obj/item/grown/novaflower = 1,
/obj/item/seeds/chili = 3)
time = 2 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_robe_ice
name = "Durathread Ice-o-mancer Robe"
result = /obj/item/clothing/suit/wizrobe/durathread/ice
reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
/obj/item/seeds/chili/ice = 1,
/obj/item/food/grown/herbs = 3)
time = 2 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_robe_electric
name = "Durathread Electromancer Robe"
result = /obj/item/clothing/suit/wizrobe/durathread/electric
reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
/obj/item/food/grown/mushroom/jupitercup = 1,
/obj/item/food/grown/sunflower = 3)
time = 2 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_robe_earth
name = "Durathread Geomancer Robe"
result = /obj/item/clothing/suit/wizrobe/durathread/earth
reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
/obj/item/food/grown/cahnroot = 1,
/obj/item/food/grown/potato = 3)
time = 2 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_robe_necro
name = "Durathread Necromancer Robe"
result = /obj/item/clothing/suit/wizrobe/durathread/necro
reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
/obj/item/food/grown/cannabis/death = 2,
/obj/item/food/grown/mushroom/angel = 2)
time = 2 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_helmet
name = "Durathread Helmet"
result = /obj/item/clothing/head/helmet/durathread
@@ -14,6 +69,62 @@
time = 4 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/watermelon_armour
name = "Watermelon Armour"
result = /obj/item/clothing/suit/armor/durability/watermelon
reqs = list(/obj/item/clothing/head/helmet/durability/watermelon = 3,
/obj/item/stack/sheet/durathread = 1)
time = 4 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/watermelon_armour_fr
name = "Watermelon Armour"
result = /obj/item/clothing/suit/armor/durability/watermelon/fire_resist
reqs = list(/obj/item/clothing/head/helmet/durability/watermelon/fire_resist = 3,
/obj/item/stack/sheet/durathread = 1)
time = 4 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/holymelon_armour
name = "Holymelon Armour"
result = /obj/item/clothing/suit/armor/durability/holymelon
reqs = list(/obj/item/clothing/head/helmet/durability/holymelon = 3,
/obj/item/stack/sheet/durathread = 1)
time = 4 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/holymelonmelon_armour_fr
name = "Holymelon Armour"
result = /obj/item/clothing/suit/armor/durability/holymelon/fire_resist
reqs = list(/obj/item/clothing/head/helmet/durability/holymelon/fire_resist = 3,
/obj/item/stack/sheet/durathread = 1)
time = 4 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/barrelmelon_armour
name = "Barrelmelon Armour"
result = /obj/item/clothing/suit/armor/durability/barrelmelon
reqs = list(/obj/item/clothing/head/helmet/durability/barrelmelon = 3,
/obj/item/stack/sheet/durathread = 1)
time = 4 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/barrelmelon_armour_fr
name = "Barrelmelon Armour"
result = /obj/item/clothing/suit/armor/durability/barrelmelon/fire_resist
reqs = list(/obj/item/clothing/head/helmet/durability/barrelmelon/fire_resist = 3,
/obj/item/stack/sheet/durathread = 1)
time = 4 SECONDS
category = CAT_CLOTHING
/datum/crafting_recipe/grass_sheath
name = "Grass Sabre Sheath"
result = /obj/item/storage/belt/grass_sabre
reqs = list(/obj/item/food/grown/grass = 4,
/obj/item/food/grown/grass/fairy = 2)
time = 4 SECONDS
category = CAT_CONTAINERS
/datum/crafting_recipe/fannypack
name = "Fannypack"
result = /obj/item/storage/belt/fannypack
@@ -111,3 +111,68 @@
)
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/arrow
name = "Arrow"
result = /obj/item/ammo_casing/arrow
reqs = list(
/obj/item/stack/sheet/mineral/wood = 1,
/obj/item/stack/sheet/cloth = 1,
/obj/item/stack/sheet/iron = 1,
)
tool_paths = list(
/obj/item/hatchet,
)
time = 5 SECONDS
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/sticky_arrow
name = "Sticky arrow"
result = /obj/item/ammo_casing/arrow/sticky
reqs = list(
/obj/item/ammo_casing/arrow = 1,
/obj/item/food/honeycomb = 3,
)
time = 5 SECONDS
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY
/datum/crafting_recipe/poison_arrow
name = "Poison arrow"
result = /obj/item/ammo_casing/arrow/poison
reqs = list(
/obj/item/ammo_casing/arrow = 1,
/obj/item/food/grown/berries/poison = 5,
)
time = 5 SECONDS
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY
/datum/crafting_recipe/plastic_arrow
name = "Plastic Arrow"
result = /obj/item/ammo_casing/arrow/plastic
reqs = list(
/obj/item/stack/sheet/plastic = 1,
)
tool_paths = list(
/obj/item/hatchet,
)
time = 5 SECONDS
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/holy_arrow
name = "Holy Arrow"
result = /obj/item/ammo_casing/arrow/holy
reqs = list(
/obj/item/ammo_casing/arrow = 1,
/datum/reagent/water/holywater = 10,
)
tool_paths = list(
/obj/item/gun/ballistic/bow/divine,
)
time = 5 SECONDS
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
+20 -6
View File
@@ -32,7 +32,7 @@
/// Cooldown for the echolocation.
COOLDOWN_DECLARE(cooldown_last)
/datum/component/echolocation/Initialize(echo_range, cooldown_time, image_expiry_time, fade_in_time, fade_out_time, images_are_static, blocking_trait, echo_group, echo_icon = "echo", color_path)
/datum/component/echolocation/Initialize(echo_range, cooldown_time, image_expiry_time, fade_in_time, fade_out_time, images_are_static, blocking_trait, echo_group, echo_icon, color_path, use_echo = TRUE, show_own_outline = FALSE, personal_color = "#ffffff") // SKYRAT EDIT CHANGE - ORIGINAL: /datum/component/echolocation/Initialize(echo_range, cooldown_time, image_expiry_time, fade_in_time, fade_out_time, images_are_static, blocking_trait, echo_group, echo_icon = "echo", color_path)
. = ..()
var/mob/living/echolocator = parent
if(!istype(echolocator))
@@ -55,12 +55,19 @@
src.images_are_static = images_are_static
if(!isnull(blocking_trait))
src.blocking_trait = blocking_trait
// SKYRAT ADDITION START: echolocation
src.show_own_outline = show_own_outline
src.echo_color = personal_color
// SKYRAT EDIT ADDITION END
if(ispath(color_path))
client_color = echolocator.add_client_colour(color_path)
src.echo_group = echo_group || REF(src)
echolocator.add_traits(list(TRAIT_ECHOLOCATION_RECEIVER, TRAIT_TRUE_NIGHT_VISION), echo_group) //so they see all the tiles they echolocated, even if they are in the dark
echolocator.become_blind(ECHOLOCATION_TRAIT)
echolocator.overlay_fullscreen("echo", /atom/movable/screen/fullscreen/echo, echo_icon)
// SKYRAT EDIT ADDITION START
if (use_echo) // add constructor toggle to not use the eye overlay
echolocator.overlay_fullscreen("echo", /atom/movable/screen/fullscreen/echo, echo_icon)
// SKYRAT EDIT ADDITION END
START_PROCESSING(SSfastprocess, src)
/datum/component/echolocation/Destroy(force)
@@ -85,7 +92,7 @@
echolocate()
/datum/component/echolocation/proc/echolocate()
if(!COOLDOWN_FINISHED(src, cooldown_last))
if(stall || !COOLDOWN_FINISHED(src, cooldown_last)) // SKYRAT EDIT CHANGE - ORIGINAL: if(!COOLDOWN_FINISHED(src, cooldown_last))
return
COOLDOWN_START(src, cooldown_last, cooldown_time)
var/mob/living/echolocator = parent
@@ -121,11 +128,18 @@
if(images_are_static)
final_image.pixel_x = input.pixel_x
final_image.pixel_y = input.pixel_y
if(HAS_TRAIT_FROM(input, TRAIT_ECHOLOCATION_RECEIVER, echo_group)) //mark other echolocation with full white
final_image.color = white_matrix
// SKYRAT ADDITION START: echolocation (show outlines on self)
if(HAS_TRAIT_FROM(input, TRAIT_ECHOLOCATION_RECEIVER, echo_group)) //mark other echolocation with full white, except ourselves
var/datum/component/echolocation/located_component = input.GetComponent(/datum/component/echolocation)
var/mob/living/echolocator = parent
if(located_component)
final_image.color = located_component.echo_color
else if(input != echolocator)
final_image.color = white_matrix
// SKYRAT EDIT ADDITION END
var/list/fade_ins = list(final_image)
for(var/mob/living/echolocate_receiver as anything in receivers)
if(echolocate_receiver == input)
if(echolocate_receiver == input && !show_own_outline) // SKYRAT EDIT CHANGE - ORIGINAL: if(echolocate_receiver == input)
continue
if(receivers[echolocate_receiver][input])
var/previous_image = receivers[echolocate_receiver][input]["image"]
+3
View File
@@ -68,6 +68,9 @@
var/obj/item/organ/internal/heart/previous_heart = last_heart_we_ate?.resolve()
if(we_ate_heart == previous_heart)
return
if (!HAS_TRAIT(we_ate_heart, TRAIT_USED_ORGAN))
to_chat(eater, span_warning("This heart is utterly lifeless, you won't receive any boons from consuming it!"))
return
bites_taken = 0
last_heart_we_ate = WEAKREF(we_ate_heart)
+8
View File
@@ -227,9 +227,12 @@
for(var/datum/uplink_item/item as anything in uplink_handler.extra_purchasable)
if(item.stock_key in stock_list)
extra_purchasable_stock[REF(item)] = stock_list[item.stock_key]
var/atom/actual_item = item.item
extra_purchasable += list(list(
"id" = item.type,
"name" = item.name,
"icon" = actual_item.icon,
"icon_state" = actual_item.icon_state,
"cost" = item.cost,
"desc" = item.desc,
"category" = item.category ? initial(item.category.name) : null,
@@ -288,6 +291,11 @@
return
item = SStraitor.uplink_items_by_type[item_path]
uplink_handler.purchase_item(ui.user, item, parent)
if("buy_raw_tc")
if (uplink_handler.telecrystals <= 0)
return
var/desired_amount = tgui_input_number(ui.user, "How many raw telecrystals to buy?", "Buy Raw TC", default = uplink_handler.telecrystals, max_value = uplink_handler.telecrystals)
uplink_handler.purchase_raw_tc(ui.user, desired_amount, parent)
if("lock")
if(!lockable)
return TRUE
+15
View File
@@ -243,3 +243,18 @@
obj_icon_state = "eyepatch"
emote_hear = list("sighs gruffly.", "groans.")
emote_see = list("considers their own mortality.", "stares bleakly into the middle distance.", "ponders the horrors of warfare.")
/datum/dog_fashion/head/watermelon
name = "Watermelon Warrior %REAL_NAME%"
desc = "5% safer than normal and ready to take on advantage!"
obj_icon_state = "watermelon"
/datum/dog_fashion/head/holymelon
name = "Holymelon Paladin %REAL_NAME%"
desc = "Extraterrestial powers beware, %NAME% is here to smite you down!"
obj_icon_state = "holymelon"
/datum/dog_fashion/head/barrelmelon
name = "Barrelmelon Berserk %REAL_NAME%"
desc = "Either the sturdiness of the helmet gave %REAL_NAME% a confidence boost, or its bit tight on their head..."
obj_icon_state = "barrelmelon"
+2 -3
View File
@@ -103,13 +103,12 @@
if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, type))
TIMER_COOLDOWN_START(user, type, audio_cooldown)
//SKYRAT EDIT CHANGE BEGIN
//playsound(user, tmp_sound, 50, vary) - SKYRAT EDIT - ORIGINAL
//playsound(source = user,soundin = tmp_sound,vol = 50, vary = vary, ignore_walls = sound_wall_ignore) - SKYRAT EDIT - ORIGINAL
if(istype(src, /datum/emote/living/lewd))
play_lewd_sound(user, tmp_sound, sound_volume, vary, pref_to_check = /datum/preference/toggle/erp/sounds)
else
playsound(user, tmp_sound, sound_volume, vary)
playsound(source = user, soundin = tmp_sound, vol = sound_volume, vary = vary, ignore_walls = sound_wall_ignore)
//SKYRAT EDIT CHANGE END
playsound(source = user,soundin = tmp_sound,vol = 50, vary = vary, ignore_walls = sound_wall_ignore)
var/is_important = emote_type & EMOTE_IMPORTANT
var/is_visual = emote_type & EMOTE_VISIBLE
+102 -102
View File
@@ -2,26 +2,26 @@
"meter": [
{
"type": "icon_state",
"icon_state": "pressure_off",
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"icon_state": "pressure_off",
"blend_mode": "overlay"
}
],
"meter0": [
{
"type": "icon_state",
"icon_state": "pressure0",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure0",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -32,14 +32,14 @@
"meter1_1": [
{
"type": "icon_state",
"icon_state": "pressure1_1",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure1_1",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -50,14 +50,14 @@
"meter1_2": [
{
"type": "icon_state",
"icon_state": "pressure1_2",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure1_2",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -68,14 +68,14 @@
"meter1_3": [
{
"type": "icon_state",
"icon_state": "pressure1_3",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure1_3",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -86,14 +86,14 @@
"meter1_4": [
{
"type": "icon_state",
"icon_state": "pressure1_4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure1_4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -104,14 +104,14 @@
"meter1_5": [
{
"type": "icon_state",
"icon_state": "pressure1_5",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure1_5",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -122,14 +122,14 @@
"meter1_6": [
{
"type": "icon_state",
"icon_state": "pressure1_6",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure1_6",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -140,14 +140,14 @@
"meter2_1": [
{
"type": "icon_state",
"icon_state": "pressure2_1",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure2_1",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -158,14 +158,14 @@
"meter2_2": [
{
"type": "icon_state",
"icon_state": "pressure2_2",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure2_2",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -176,14 +176,14 @@
"meter2_3": [
{
"type": "icon_state",
"icon_state": "pressure2_3",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure2_3",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -194,14 +194,14 @@
"meter2_4": [
{
"type": "icon_state",
"icon_state": "pressure2_4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure2_4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -212,14 +212,14 @@
"meter2_5": [
{
"type": "icon_state",
"icon_state": "pressure2_5",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure2_5",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -230,14 +230,14 @@
"meter2_6": [
{
"type": "icon_state",
"icon_state": "pressure2_6",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure2_6",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -248,14 +248,14 @@
"meter3_1": [
{
"type": "icon_state",
"icon_state": "pressure3_1",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure3_1",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -266,14 +266,14 @@
"meter3_2": [
{
"type": "icon_state",
"icon_state": "pressure3_2",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure3_2",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -284,14 +284,14 @@
"meter3_3": [
{
"type": "icon_state",
"icon_state": "pressure3_3",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure3_3",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -302,14 +302,14 @@
"meter3_4": [
{
"type": "icon_state",
"icon_state": "pressure3_4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure3_4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -320,14 +320,14 @@
"meter3_5": [
{
"type": "icon_state",
"icon_state": "pressure3_5",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure3_5",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -338,14 +338,14 @@
"meter3_6": [
{
"type": "icon_state",
"icon_state": "pressure3_6",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure3_6",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
@@ -356,14 +356,14 @@
"meter4": [
{
"type": "icon_state",
"icon_state": "pressure4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
"icon_state": "meter_base",
"blend_mode": "overlay"
},
{
"type": "icon_state",
"icon_state": "meter_base",
"blend_mode": "overlay"
"icon_state": "pressure4",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
+1 -1
View File
@@ -56,7 +56,7 @@
glow_color = "blue"
id = "deathsquad"
/datum/pod_style/advanced
/datum/pod_style/cultist
name = "bloody supply pod"
ui_name = "Cultist"
desc = "A Nanotrasen supply pod covered in scratch-marks, blood, and strange runes."
+47 -12
View File
@@ -449,11 +449,38 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
SEND_SIGNAL(parent, COMSIG_ATOM_STORED_ITEM, to_insert, user, force)
SEND_SIGNAL(src, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force)
RegisterSignal(to_insert, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive))
to_insert.forceMove(real_location)
item_insertion_feedback(user, to_insert, override)
parent.update_appearance()
return TRUE
/// Since items inside storages ignore transparency for QOL reasons, we're tracking when things are dropped onto them instead of our UI elements
/datum/storage/proc/mousedrop_receive(atom/dropped_onto, atom/movable/target, mob/user, params)
SIGNAL_HANDLER
if (src != user.active_storage)
return
if (!user.can_perform_action(parent, FORBID_TELEKINESIS_REACH))
return
if (target.loc != real_location) // what even
UnregisterSignal(target, COMSIG_MOUSEDROPPED_ONTO)
return
if(numerical_stacking)
return
var/drop_index = real_location.contents.Find(dropped_onto)
real_location.contents -= target
// Use an empty list if we're dropping onto the last item
var/list/to_move = real_location.contents.len >= drop_index ? real_location.contents.Copy(drop_index) : list()
real_location.contents -= to_move
real_location.contents += target
real_location.contents += to_move
refresh_views()
/**
* Inserts every item in a given list, with a progress bar
*
@@ -544,6 +571,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
refresh_views()
parent.update_appearance()
UnregisterSignal(thing, COMSIG_MOUSEDROPPED_ONTO)
SEND_SIGNAL(parent, COMSIG_ATOM_REMOVED_ITEM, thing, remove_to_loc, silent)
SEND_SIGNAL(src, COMSIG_STORAGE_REMOVED_ITEM, thing, remove_to_loc, silent)
return TRUE
@@ -719,7 +747,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
parent.add_fingerprint(user)
return COMPONENT_CANCEL_MOUSEDROP_ONTO
else if(ismob(over_object))
if(ismob(over_object))
if(over_object != user || !user.can_perform_action(parent, FORBID_TELEKINESIS_REACH | ALLOW_RESTING))
return
@@ -727,13 +755,24 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
INVOKE_ASYNC(src, PROC_REF(open_storage), user)
return COMPONENT_CANCEL_MOUSEDROP_ONTO
else if(!istype(over_object, /atom/movable/screen))
if(!user.can_perform_action(over_object, FORBID_TELEKINESIS_REACH))
return
if(istype(over_object, /atom/movable/screen))
return
parent.add_fingerprint(user)
INVOKE_ASYNC(src, PROC_REF(dump_content_at), over_object, user)
return COMPONENT_CANCEL_MOUSEDROP_ONTO
if(!user.can_perform_action(over_object, FORBID_TELEKINESIS_REACH))
return
parent.add_fingerprint(user)
var/atom/dump_loc = over_object.get_dumping_location()
if(isnull(dump_loc))
return
/// Don't dump *onto* objects in the same storage as ourselves
if (over_object.loc == parent.loc && !isnull(parent.loc.atom_storage) && isnull(over_object.atom_storage))
return
INVOKE_ASYNC(src, PROC_REF(dump_content_at), over_object, dump_loc, user)
return COMPONENT_CANCEL_MOUSEDROP_ONTO
/**
* Dumps all of our contents at a specific location.
@@ -741,7 +780,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
* @param atom/dest_object where to dump to
* @param mob/user the user who is dumping the contents
*/
/datum/storage/proc/dump_content_at(atom/dest_object, mob/user)
/datum/storage/proc/dump_content_at(atom/dest_object, dump_loc, mob/user)
if(locked)
user.balloon_alert(user, "closed!")
return
@@ -764,10 +803,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
SEND_SIGNAL(src, COMSIG_STORAGE_DUMP_POST_TRANSFER, dest_object, user)
return
var/atom/dump_loc = dest_object.get_dumping_location()
if(isnull(dump_loc))
return
// Storage to loc transfer requires a do_after
to_chat(user, span_notice("You start dumping out the contents of [parent] onto [dest_object]..."))
if(!do_after(user, 2 SECONDS, target = dest_object))
+1 -1
View File
@@ -2,7 +2,7 @@
/datum/storage_interface
/// UI elements for this theme
var/atom/movable/screen/close/closer
var/atom/movable/screen/storage/cells
var/atom/movable/screen/storage/cell/cells
var/atom/movable/screen/storage/corner/corner_top_left
var/atom/movable/screen/storage/corner/top_right/corner_top_right
var/atom/movable/screen/storage/corner/bottom_left/corner_bottom_left
+1
View File
@@ -186,6 +186,7 @@
/obj/machinery/LateInitialize()
SHOULD_NOT_OVERRIDE(TRUE)
post_machine_initialize()
CheckParts()
/obj/machinery/Destroy(force)
SSmachines.unregister_machine(src)
+1
View File
@@ -137,6 +137,7 @@
icon = 'icons/obj/wallmounts.dmi'
icon_state = "migniter"
result_path = /obj/machinery/sparker
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT)
pixel_shift = 26
/obj/machinery/sparker
+1
View File
@@ -119,6 +119,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26)
icon = 'icons/obj/machines/wallmounts.dmi'
icon_state = "light-nopower"
result_path = /obj/machinery/light_switch
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT)
pixel_shift = 26
/obj/item/circuit_component/light_switch
-1
View File
@@ -25,7 +25,6 @@
. = ..()
AddComponent(/datum/component/plumbing/simple_demand)
register_context()
CheckParts()
/obj/machinery/medipen_refiller/add_context(atom/source, list/context, obj/item/held_item, mob/user)
if(held_item)
+3
View File
@@ -36,9 +36,11 @@ Buildable meters
icon_state_preview = "junction"
pipe_type = /obj/machinery/atmospherics/pipe/heat_exchanging/junction
/obj/item/pipe/directional/vent
name = "air vent fitting"
icon_state_preview = "uvent"
pipe_type = /obj/machinery/atmospherics/components/unary/vent_pump
/obj/item/pipe/directional/scrubber
name = "air scrubber fitting"
icon_state_preview = "scrubber"
pipe_type = /obj/machinery/atmospherics/components/unary/vent_scrubber
/obj/item/pipe/directional/connector
@@ -78,6 +80,7 @@ Buildable meters
RPD_type = PIPE_TRIN_M
var/flipped = FALSE
/obj/item/pipe/trinary/flippable/filter
name = "gas filter fitting"
icon_state_preview = "filter"
pipe_type = /obj/machinery/atmospherics/components/trinary/filter
/obj/item/pipe/trinary/flippable/mixer
@@ -449,3 +449,23 @@
/obj/structure/table = list(/obj/structure/table/greyscale = 9, /obj/structure/table/abductor = 1),
/obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1),
)
/datum/dimension_theme/bronze
name = "Bronze"
icon = 'icons/obj/weapons/spear.dmi'
icon_state = "ratvarian_spear"
material = /datum/material/bronze
replace_walls = /turf/closed/wall/mineral/bronze
replace_floors = list(/turf/open/floor/bronze = 1, /turf/open/floor/bronze/flat = 1, /turf/open/floor/bronze/filled = 1)
replace_objs = list(
/obj/structure/girder = list(/obj/structure/girder/bronze = 1),
/obj/structure/window/fulltile = list(/obj/structure/window/bronze/fulltile = 1),
/obj/structure/window = list(/obj/structure/window/bronze = 1),
/obj/structure/statue = list(/obj/structure/statue/bronze/marx = 1), // karl marx was a servant of ratvar
/obj/structure/table = list(/obj/structure/table/bronze = 1),
/obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1),
/obj/structure/chair = list(/obj/structure/chair/bronze = 1),
/obj/item/reagent_containers/cup/glass/trophy = list(/obj/item/reagent_containers/cup/glass/trophy/bronze_cup = 1),
/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/bronze = 1),
)
sound = 'sound/magic/clockwork/fellowship_armory.ogg'
@@ -33,3 +33,21 @@
drift = generator(GEN_VECTOR, list(-0.1,0), list(0.1,0.025), UNIFORM_RAND)
spin = generator(GEN_NUM, list(-15,15), NORMAL_RAND)
scale = generator(GEN_VECTOR, list(0.5,0.5), list(2,2), NORMAL_RAND)
/particles/embers/spark
count = 3
spawning = 2
gradient = list("#FBAF4D", "#FCE6B6", "#FFFFFF")
lifespan = 1.5 SECONDS
fade = 1 SECONDS
fadein = 0.1 SECONDS
grow = -0.1
velocity = generator(GEN_CIRCLE, 3, 3, SQUARE_RAND)
position = generator(GEN_SPHERE, 0, 0, LINEAR_RAND)
scale = generator(GEN_VECTOR, list(0.5, 0.5), list(1,1), NORMAL_RAND)
drift = list(0)
/particles/embers/spark/severe
count = 10
spawning = 5
gradient = list("#FCE6B6", "#FFFFFF")
@@ -84,3 +84,16 @@
grow = 0.05
spin = 2
color = "#fcffff77"
/particles/smoke/cyborg
count = 5
spawning = 1
lifespan = 1 SECONDS
fade = 1.8 SECONDS
position = list(0, 0, 0)
scale = list(0.5, 0.5)
grow = 0.1
/particles/smoke/cyborg/heavy_damage
lifespan = 0.8 SECONDS
fade = 0.8 SECONDS
+1 -1
View File
@@ -860,7 +860,7 @@
if(carbon_target.client)
carbon_target.set_eye_blur_if_lower(6 SECONDS)
carbon_target.adjust_temp_blindness(2 SECONDS)
if(carbon_target.get_eye_protection() <= 0) // no eye protection? ARGH IT BURNS. Warning: don't add a stun here. It's a roundstart item with some quirks.
if(carbon_target.get_eye_protection() <= 0 || carbon_target.is_eyes_covered()) // no eye protection? ARGH IT BURNS. Warning: don't add a stun here. It's a roundstart item with some quirks. added redundancy because gas masks don't give you eye protection
carbon_target.adjust_jitter(1 SECONDS)
carbon_target.adjust_eye_blur(0.5 SECONDS)
flash_color(carbon_target, flash_color=paint_color, flash_time=40)
-1
View File
@@ -147,7 +147,6 @@
if(!cell || !cell_removable)
return FALSE
cell.update_appearance()
cell.forceMove(get_turf(src))
balloon_alert(user, "removed [cell]")
cell = null
@@ -963,14 +963,10 @@
var/dark_light_range = 2.5
///Variable to preserve old lighting behavior in flashlights, to handle darkness.
var/dark_light_power = -3
var/on = FALSE
/obj/item/flashlight/flashdark/update_brightness()
. = ..()
if(on)
set_light(dark_light_range, dark_light_power)
else
set_light(0)
set_light(dark_light_range, dark_light_power)
//type and subtypes spawned and used to give some eyes lights,
/obj/item/flashlight/eyelight
+14 -12
View File
@@ -352,10 +352,10 @@
return
if(iscarbon(talking_movable))
var/mob/living/carbon/talking_carbon = talking_movable
if(talking_carbon.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
SEND_SOUND(talking_carbon, 'sound/misc/radio_talk.ogg')
if(isliving(talking_movable))
var/mob/living/talking_living = talking_movable
if(talking_living.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
SEND_SOUND(talking_living, 'sound/misc/radio_talk.ogg')
// All radios make an attempt to use the subspace system first
signal.send_to_receivers()
@@ -428,15 +428,17 @@
SEND_SIGNAL(src, COMSIG_RADIO_RECEIVE_MESSAGE, data)
flick_overlay_view(overlay_speaker_active, 5 SECONDS)
if(iscarbon(loc))
var/mob/living/carbon/holder = loc
if(!holder.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
return
if(!isliving(loc))
return
var/list/spans = data["spans"]
SEND_SOUND(holder, 'sound/misc/radio_receive.ogg')
if(SPAN_COMMAND in spans)
SEND_SOUND(holder, 'sound/misc/radio_important.ogg')
var/mob/living/holder = loc
if(!holder.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
return
var/list/spans = data["spans"]
SEND_SOUND(holder, 'sound/misc/radio_receive.ogg')
if(SPAN_COMMAND in spans)
SEND_SOUND(holder, 'sound/misc/radio_important.ogg')
/obj/item/radio/ui_state(mob/user)
return GLOB.inventory_state
-6
View File
@@ -167,12 +167,6 @@
icon_state = "de6"
microwave_riggable = FALSE // You can't melt wood in the microwave
/obj/item/dice/d6/bone
name = "bone die"
desc = "A die carved from a creature's bone. Dried blood marks the indented pits."
icon_state = "db6"
microwave_riggable = FALSE // You can't melt bone in the microwave
/obj/item/dice/d6/space
name = "space cube"
desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST."
+81
View File
@@ -16,6 +16,87 @@
juice_typepath = /datum/reagent/consumable/watermelonjuice
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/watermelonmush
name = "watermelon mush"
desc = "A plop of watery goodness."
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "watermelonpulp"
food_reagents = list(
/datum/reagent/water = 2,
/datum/reagent/consumable/nutriment/vitamin = 0.1,
/datum/reagent/consumable/nutriment = 0.5,
)
tastes = list("watermelon" = 1)
foodtypes = FRUIT
food_flags = FOOD_FINGER_FOOD
juice_typepath = /datum/reagent/consumable/watermelonjuice
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/holymelonslice
name = "holymelon slice"
desc = "A slice of holy goodness."
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "holymelonslice"
food_reagents = list(
/datum/reagent/water/holywater = 0.5,
/datum/reagent/consumable/nutriment/vitamin = 0.2,
/datum/reagent/consumable/nutriment = 1,
)
tastes = list("holymelon" = 1)
foodtypes = FRUIT
food_flags = FOOD_FINGER_FOOD
juice_typepath = /datum/reagent/water/holywater
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/holymelonmush
name = "holymelon mush"
desc = "A plop of holy goodness."
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "holymelonpulp"
food_reagents = list(
/datum/reagent/water/holywater = 1,
/datum/reagent/consumable/nutriment/vitamin = 0.1,
/datum/reagent/consumable/nutriment = 0.5,
)
tastes = list("holymelon" = 1)
foodtypes = FRUIT
food_flags = FOOD_FINGER_FOOD
juice_typepath = /datum/reagent/water/holywater
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/barrelmelonslice
name = "barrelmelon slice"
desc = "A slice of beery goodness."
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "barrelmelonslice"
food_reagents = list(
/datum/reagent/consumable/ethanol/beer = 1,
/datum/reagent/consumable/nutriment/vitamin = 0.2,
/datum/reagent/consumable/nutriment = 1,
)
tastes = list("beer" = 1)
foodtypes = FRUIT
food_flags = FOOD_FINGER_FOOD
juice_typepath = /datum/reagent/consumable/ethanol/beer
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/barrelmelonmush
name = "barrelmelon mush"
desc = "A plop of beery goodness."
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "barrelmelonpulp"
food_reagents = list(
/datum/reagent/consumable/ethanol/beer = 2,
/datum/reagent/consumable/nutriment/vitamin = 0.1,
/datum/reagent/consumable/nutriment = 0.5,
)
tastes = list("beer" = 1)
foodtypes = FRUIT
food_flags = FOOD_FINGER_FOOD
juice_typepath = /datum/reagent/consumable/ethanol/beer
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/appleslice
name = "apple slice"
desc = "The perfect after-school snack."
@@ -0,0 +1,22 @@
/obj/item/book/granter/crafting_recipe/fletching
name = "Whittle Me This: Fletching for the Modern Spacer"
desc = "A how-to guide to crafting and maintaining wooden bows, fletching arrows, and... making violins?"
crafting_recipe_types = list(
/datum/crafting_recipe/arrow,
/datum/crafting_recipe/plastic_arrow,
/datum/crafting_recipe/shortbow,
/datum/crafting_recipe/holy_arrow,
///datum/crafting_recipe/arrow_quiver, // SKYRAT EDIT REMOVAL: public-knowledge quiver
/datum/crafting_recipe/violin,
)
icon_state = "book4"
uses = INFINITY
remarks = list(
"Okay, so the quality of the wood has some impact.",
"I feel like the violin chapter is in here as a joke, surely...",
"The author seems oddly proud about how many years they've been hunting in 'these parts'...",
"i really wish they'd stop with all the marriage euphemisms...",
"I need membership? Membership with what?",
"Okay, I think I get the point already...",
)
@@ -17,6 +17,8 @@
obj_flags = CONDUCTS_ELECTRICITY
slot_flags = ITEM_SLOT_BELT
max_integrity = 40
pickup_sound = 'sound/items/grenade_pick_up.ogg'
drop_sound = 'sound/items/grenade_drop.ogg'
/// Bitfields which prevent the grenade from detonating if set. Includes ([GRENADE_DUD]|[GRENADE_USED])
var/dud_flags = NONE
///Is this grenade currently armed?
+5
View File
@@ -48,6 +48,8 @@
breakouttime = 1 MINUTES
armor_type = /datum/armor/restraints_handcuffs
custom_price = PAYCHECK_COMMAND * 0.35
pickup_sound = 'sound/items/handcuffs_pick_up.ogg'
drop_sound = 'sound/items/handcuffs_drop.ogg'
///How long it takes to handcuff someone
var/handcuff_time = 4 SECONDS
@@ -55,6 +57,8 @@
var/handcuff_time_mod = 1
///Sound that plays when starting to put handcuffs on someone
var/cuffsound = 'sound/weapons/handcuffs.ogg'
///Sound that plays when restrain is successful
var/cuffsuccesssound = 'sound/items/handcuff_finish.ogg'
///If set, handcuffs will be destroyed on application and leave behind whatever this is set to.
var/trashtype = null
/// How strong the cuffs are. Weak cuffs can be broken with wirecutters or boxcutters.
@@ -120,6 +124,7 @@
return
apply_cuffs(victim, user, dispense = iscyborg(user))
playsound(loc, cuffsuccesssound, 30, TRUE, -2)
victim.visible_message(
span_notice("[user] handcuffs [victim]."),
+30 -1
View File
@@ -166,6 +166,19 @@
force = 15
throwforce = 15
/obj/item/knife/combat/root
name = "cahn'root dagger"
icon = 'icons/obj/weapons/stabby.dmi'
icon_state = "rootdagger"
worn_icon_state = "root_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
inhand_icon_state = "rootshiv"
embed_type = /datum/embed_data/combat_knife/weak
desc = "A root dagger, deceptively sharp. Perfect to hide and stab someone with, or make a couple and throw them at enemies."
force = 15
throwforce = 15
/obj/item/knife/combat/bone
name = "bone dagger"
inhand_icon_state = "bone_dagger"
@@ -177,7 +190,6 @@
desc = "A sharpened bone. The bare minimum in survival."
embed_type = /datum/embed_data/combat_knife/weak
obj_flags = parent_type::obj_flags & ~CONDUCTS_ELECTRICITY
slot_flags = NONE
force = 15
throwforce = 15
custom_materials = null
@@ -189,7 +201,9 @@
name = "cyborg knife"
icon = 'icons/obj/items_cyborg.dmi'
icon_state = "knife_cyborg"
worn_icon_state = "knife_cyborg" //error sprite - this shouldn't have been dropped
desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable."
slot_flags = NONE //you can't put this in your mouth
/obj/item/knife/shiv
name = "glass shiv"
@@ -279,3 +293,18 @@
/obj/item/knife/shiv/carrot/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] forcefully drives \the [src] into [user.p_their()] eye! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
/obj/item/knife/shiv/parsnip
name = "parsnip shiv"
icon_state = "parsnipshiv"
inhand_icon_state = "parsnipshiv"
desc = "Truly putting 'snip' in the 'parsnip', and it's not sub-par either!"
custom_materials = null
/obj/item/knife/shiv/root
name = "cahn'root shiv"
icon_state = "rootshiv"
inhand_icon_state = "rootshiv"
desc = "A root sharpened into a shiv. A root source of someone's stab wounds soon, most likely."
custom_materials = null
+4 -1
View File
@@ -318,6 +318,8 @@
bare_wound_bonus = 5
clumsy_knockdown_time = 15 SECONDS
active = FALSE
pickup_sound = 'sound/items/stun_baton_pick_up.ogg'
drop_sound = 'sound/items/stun_baton_drop.ogg'
/// The sound effecte played when our baton is extended.
var/on_sound = 'sound/weapons/batonextend.ogg'
@@ -436,6 +438,8 @@
light_on = FALSE
light_color = LIGHT_COLOR_ORANGE
light_power = 0.5
pickup_sound = 'sound/items/stun_baton_pick_up.ogg'
drop_sound = 'sound/items/stun_baton_drop.ogg'
var/throw_stun_chance = 35
@@ -504,7 +508,6 @@
/obj/item/melee/baton/security/Exited(atom/movable/mov_content)
. = ..()
if(mov_content == cell)
cell.update_appearance()
cell = null
active = FALSE
update_appearance()
+41
View File
@@ -164,6 +164,47 @@
user.death(FALSE)
REMOVE_TRAIT(src, TRAIT_NODROP, SABRE_SUICIDE_TRAIT)
/obj/item/melee/parsnip_sabre
name = "parsnip sabre"
desc = "An elegant weapon, if weird weapon. Suprisingly sharp for being made from a parsnip."
icon = 'icons/obj/weapons/sword.dmi'
icon_state = "parsnip_sabre"
inhand_icon_state = "parsnip_sabre"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
force = 15
throwforce = 10
demolition_mod = 0.3
w_class = WEIGHT_CLASS_BULKY
block_chance = 40
armour_penetration = 40
sharpness = SHARP_EDGED
attack_verb_continuous = list("slashes", "cuts")
attack_verb_simple = list("slash", "cut")
block_sound = 'sound/weapons/parry.ogg'
hitsound = 'sound/weapons/rapierhit.ogg'
custom_materials = null
wound_bonus = 5
bare_wound_bonus = 15
/obj/item/melee/sabre/Initialize(mapload)
. = ..()
AddComponent(/datum/component/jousting)
/obj/item/melee/parsnip_sabre/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK)
final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword
return ..()
/obj/item/melee/parsnip_sabre/on_exit_storage(datum/storage/container)
. = ..()
playsound(container.parent, 'sound/items/unsheath.ogg', 25, TRUE)
/obj/item/melee/parsnip_sabre/on_enter_storage(datum/storage/container)
. = ..()
playsound(container.parent, 'sound/items/sheath.ogg', 25, TRUE)
/obj/item/melee/beesword
name = "The Stinger"
desc = "Taken from a giant bee and folded over one thousand times in pure honey. Can sting through anything."
+11
View File
@@ -99,6 +99,15 @@
max_integrity = 55
w_class = WEIGHT_CLASS_NORMAL
/obj/item/shield/buckler/moonflower
name = "moonflower buckler"
desc = "A buckler made from a steel-cap reinforced moonflower."
icon_state = "moonflower_buckler"
inhand_icon_state = "moonflower_buckler"
block_chance = 40
max_integrity = 40
w_class = WEIGHT_CLASS_NORMAL
/obj/item/shield/kite
name = "kite shield"
desc = "Protect your internal organs with this almond shaped shield."
@@ -140,6 +149,8 @@
shield_break_sound = 'sound/effects/glassbr3.ogg'
shield_break_leftover = /obj/item/shard
armor_type = /datum/armor/item_shield/riot
pickup_sound = 'sound/items/plastic_shield_pick_up.ogg'
drop_sound = 'sound/items/plastic_shield_drop.ogg'
/obj/item/shield/riot/Initialize(mapload)
. = ..()
+1
View File
@@ -41,6 +41,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
merge_type = /obj/item/stack/rods
pickup_sound = 'sound/items/iron_rod_pick_up.ogg'
drop_sound = 'sound/items/metal_drop.ogg'
sound_vary = TRUE
/datum/embed_data/rods
embed_chance = 50
+47
View File
@@ -398,6 +398,9 @@
/obj/item/restraints/legcuffs/bola,
/obj/item/stock_parts/power_store/cell/microfusion, //SKYRAT EDIT ADDITION
))
atom_storage.open_sound = 'sound/items/holster.ogg'
atom_storage.open_sound_vary = TRUE
atom_storage.rustle_sound = FALSE
/obj/item/storage/belt/security/full/PopulateContents()
new /obj/item/reagent_containers/spray/pepper(src)
@@ -883,6 +886,50 @@
new /obj/item/melee/sabre(src)
update_appearance()
/obj/item/storage/belt/grass_sabre
name = "sabre sheath"
desc = "An simple grass sheath designed to hold a sabre of... some sorts. Actual metal one might be too sharp, though..."
icon_state = "grass_sheath"
inhand_icon_state = "grass_sheath"
worn_icon_state = "grass_sheath"
w_class = WEIGHT_CLASS_BULKY
interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS
/obj/item/storage/belt/grass_sabre/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
atom_storage.max_slots = 1
atom_storage.rustle_sound = FALSE
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.set_holdable(/obj/item/melee/sabre)
atom_storage.click_alt_open = FALSE
/obj/item/storage/belt/grass_sabre/examine(mob/user)
. = ..()
if(length(contents))
. += span_notice("Alt-click it to quickly draw the blade.")
/obj/item/storage/belt/grass_sabre/click_alt(mob/user)
if(length(contents))
var/obj/item/I = contents[1]
user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src]."))
user.put_in_hands(I)
update_appearance()
else
balloon_alert(user, "it's empty!")
return CLICK_ACTION_SUCCESS
/obj/item/storage/belt/grass_sabre/update_icon_state()
icon_state = initial(inhand_icon_state)
inhand_icon_state = initial(inhand_icon_state)
worn_icon_state = initial(worn_icon_state)
if(contents.len)
icon_state += "-sabre"
inhand_icon_state += "-sabre"
worn_icon_state += "-sabre"
return ..()
/obj/item/storage/belt/plant
name = "botanical belt"
desc = "A sturdy leather belt used to hold most hydroponics supplies."
@@ -43,7 +43,7 @@
if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA))
new /obj/item/storage/pill_bottle/potassiodide(src)
if(LAZYLEN(SSmapping.multiz_levels))
if(length(SSmapping.levels_by_trait(ZTRAIT_STATION)) > 1)
new /obj/item/climbing_hook/emergency(src)
new /obj/item/oxygen_candle(src) //SKYRAT EDIT ADDITION
@@ -33,6 +33,8 @@
/obj/item/gun/energy/laser/captain,
/obj/item/gun/energy/e_gun/hos,
))
atom_storage.open_sound = 'sound/items/holster.ogg'
atom_storage.open_sound_vary = TRUE
/obj/item/storage/belt/holster/energy
name = "energy shoulder holsters"
+1 -1
View File
@@ -191,7 +191,7 @@
desc = "A hydraulic prying tool, simple but powerful."
icon = 'icons/obj/items_cyborg.dmi'
icon_state = "toolkit_engiborg_crowbar"
worn_icon_state = "crowbar"
worn_icon_state = "toolkit_engiborg_crowbar" //error sprite - this shouldn't have been dropped
usesound = 'sound/items/jaws_pry.ogg'
force = 10
toolspeed = 0.5
+30
View File
@@ -505,6 +505,36 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
user.visible_message(span_suicide("[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!"))
return OXYLOSS
/obj/item/bambostaff
name = "Bamboo Staff"
desc = "A long bamboo-made staff with steel-capped ends. It is rumoured that initiates of Spider Clan train with such before getting to learn how to use a katana."
force = 10
block_chance = 45
block_sound = 'sound/weapons/genhit.ogg'
slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
hitsound = SFX_SWING_HIT
attack_verb_continuous = list("smashes", "slams", "whacks", "thwacks")
attack_verb_simple = list("smash", "slam", "whack", "thwack")
icon = 'icons/obj/weapons/staff.dmi'
icon_state = "bambostaff0"
inhand_icon_state = "bambostaff0"
worn_icon_state = "bambostaff0"
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
/obj/item/nullrod/bostaff/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, \
force_unwielded = 10, \
force_wielded = 14, \
icon_wielded = "[base_icon_state]1", \
)
/obj/item/nullrod/bostaff/update_icon_state()
icon_state = "[base_icon_state]0"
return ..()
/obj/item/cane
name = "cane"
desc = "A cane used by a true gentleman. Or a clown."
+11 -4
View File
@@ -12,7 +12,7 @@
/// Icon to use as a 32x32 preview in crafting menus and such
var/icon_preview
var/icon_state_preview
/// The vertical pixel offset applied when the object is anchored on a tile with table
/// The vertical pixel_z offset applied when the object is anchored on a tile with table
/// Ignored when set to 0 - to avoid shifting directional wall-mounted objects above tables
var/anchored_tabletop_offset = 0
@@ -278,7 +278,14 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag)
return FALSE
return TRUE
/// Adjusts the vertical pixel offset when the object is anchored on a tile with table
/// Adjusts the vertical pixel_z offset when the object is anchored on a tile with table
/obj/proc/check_on_table()
if(anchored_tabletop_offset != 0 && !istype(src, /obj/structure/table) && locate(/obj/structure/table) in loc)
pixel_y = anchored ? anchored_tabletop_offset : initial(pixel_y)
if(anchored_tabletop_offset == 0)
return
if(istype(src, /obj/structure/table))
return
if(anchored && locate(/obj/structure/table) in loc)
pixel_z = anchored_tabletop_offset
else
pixel_z = initial(pixel_z)
@@ -39,6 +39,7 @@
MEDIUM_VENT_TYPE = 5,
SMALL_VENT_TYPE = 7,
)
var/wave_timer = WAVE_DURATION_SMALL
/// What string do we use to warn the player about the excavation event?
var/excavation_warning = "Are you ready to excavate this ore vent?"
@@ -219,6 +220,9 @@
node.arrive(src)
RegisterSignal(node, COMSIG_QDELETING, PROC_REF(handle_wave_conclusion))
RegisterSignal(node, COMSIG_MOVABLE_MOVED, PROC_REF(handle_wave_conclusion))
addtimer(CALLBACK(node, TYPE_PROC_REF(/atom, update_appearance)), wave_timer * 0.25)
addtimer(CALLBACK(node, TYPE_PROC_REF(/atom, update_appearance)), wave_timer * 0.5)
addtimer(CALLBACK(node, TYPE_PROC_REF(/atom, update_appearance)), wave_timer * 0.75)
particles = new /particles/smoke/ash()
for(var/i in 1 to 5) // Clears the surroundings of the ore vent before starting wave defense.
for(var/turf/closed/mineral/rock in oview(i))
@@ -247,11 +251,6 @@
spawn_distance = 4, \
spawn_distance_exclude = 3, \
)
var/wave_timer = 60 SECONDS
if(boulder_size == BOULDER_SIZE_MEDIUM)
wave_timer = 90 SECONDS
else if(boulder_size == BOULDER_SIZE_LARGE)
wave_timer = 150 SECONDS
COOLDOWN_START(src, wave_cooldown, wave_timer)
addtimer(CALLBACK(src, PROC_REF(handle_wave_conclusion)), wave_timer)
icon_state = icon_state_tapped
@@ -290,6 +289,7 @@
icon_state = icon_state_tapped
update_appearance(UPDATE_ICON_STATE)
qdel(GetComponent(/datum/component/gps))
UnregisterSignal(node, COMSIG_QDELETING)
else
visible_message(span_danger("\the [src] creaks and groans as the mining attempt fails, and the vent closes back up."))
icon_state = initial(icon_state)
@@ -474,18 +474,22 @@
switch(string_boulder_size)
if(LARGE_VENT_TYPE)
boulder_size = BOULDER_SIZE_LARGE
wave_timer = WAVE_DURATION_LARGE
if(mapload)
GLOB.ore_vent_sizes["large"] += 1
if(MEDIUM_VENT_TYPE)
boulder_size = BOULDER_SIZE_MEDIUM
wave_timer = WAVE_DURATION_MEDIUM
if(mapload)
GLOB.ore_vent_sizes["medium"] += 1
if(SMALL_VENT_TYPE)
boulder_size = BOULDER_SIZE_SMALL
wave_timer = WAVE_DURATION_SMALL
if(mapload)
GLOB.ore_vent_sizes["small"] += 1
else
boulder_size = BOULDER_SIZE_SMALL //Might as well set a default value
wave_timer = WAVE_DURATION_SMALL
name = initial(name)
@@ -356,6 +356,7 @@
if((shove_flags & SHOVE_KNOCKDOWN_BLOCKED) || !(shove_flags & SHOVE_BLOCKED))
return
target.Knockdown(SHOVE_KNOCKDOWN_TABLE)
target.apply_status_effect(/datum/status_effect/next_shove_stuns)
target.visible_message(span_danger("[shover.name] shoves [target.name] onto \the [src]!"),
span_userdanger("You're shoved onto \the [src] by [shover.name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover)
to_chat(shover, span_danger("You shove [target.name] onto \the [src]!"))
+18 -7
View File
@@ -16,10 +16,15 @@ ADMIN_VERB(toggle_hub, R_SERVER, "Toggle Hub", "Toggles the server's visilibilit
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Hub Visibility", "[GLOB.hub_visibility ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc!
#define REGULAR_RESTART "Regular Restart"
#define REGULAR_RESTART_DELAYED "Regular Restart (with delay)"
#define HARD_RESTART "Hard Restart (No Delay/Feedback Reason)"
#define HARDEST_RESTART "Hardest Restart (No actions, just reboot)"
#define TGS_RESTART "Server Restart (Kill and restart DD)"
ADMIN_VERB(restart, R_SERVER, "Reboot World", "Restarts the world immediately.", ADMIN_CATEGORY_SERVER)
var/list/options = list("Regular Restart", "Regular Restart (with delay)", "Hard Restart (No Delay/Feeback Reason)", "Hardest Restart (No actions, just reboot)")
var/list/options = list(REGULAR_RESTART, REGULAR_RESTART_DELAYED, HARD_RESTART, HARDEST_RESTART)
if(world.TgsAvailable())
options += "Server Restart (Kill and restart DD)";
options += TGS_RESTART;
if(SSticker.admin_delay_notice)
if(alert(user, "Are you sure? An admin has already delayed the round end for the following reason: [SSticker.admin_delay_notice]", "Confirmation", "Yes", "No") != "Yes")
@@ -32,12 +37,12 @@ ADMIN_VERB(restart, R_SERVER, "Reboot World", "Restarts the world immediately.",
BLACKBOX_LOG_ADMIN_VERB("Reboot World")
var/init_by = "Initiated by [user.holder.fakekey ? "Admin" : user.key]."
switch(result)
if("Regular Restart")
if(REGULAR_RESTART)
if(!user.is_localhost())
if(alert(user, "Are you sure you want to restart the server?","This server is live", "Restart", "Cancel") != "Restart")
return FALSE
SSticker.Reboot(init_by, "admin reboot - by [user.key] [user.holder.fakekey ? "(stealth)" : ""]", 10)
if("Regular Restart (with delay)")
if(REGULAR_RESTART_DELAYED)
var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num|null
if(!delay)
return FALSE
@@ -45,16 +50,22 @@ ADMIN_VERB(restart, R_SERVER, "Reboot World", "Restarts the world immediately.",
if(alert(user,"Are you sure you want to restart the server?","This server is live", "Restart", "Cancel") != "Restart")
return FALSE
SSticker.Reboot(init_by, "admin reboot - by [user.key] [user.holder.fakekey ? "(stealth)" : ""]", delay * 10)
if("Hard Restart (No Delay, No Feeback Reason)")
if(HARD_RESTART)
to_chat(world, "World reboot - [init_by]")
world.Reboot()
if("Hardest Restart (No actions, just reboot)")
if(HARDEST_RESTART)
to_chat(world, "Hard world reboot - [init_by]")
world.Reboot(fast_track = TRUE)
if("Server Restart (Kill and restart DD)")
if(TGS_RESTART)
to_chat(world, "Server restart - [init_by]")
world.TgsEndProcess()
#undef REGULAR_RESTART
#undef REGULAR_RESTART_DELAYED
#undef HARD_RESTART
#undef HARDEST_RESTART
#undef TGS_RESTART
ADMIN_VERB(end_round, R_SERVER, "End Round", "Forcibly ends the round and allows the server to restart normally.", ADMIN_CATEGORY_SERVER)
var/confirm = tgui_alert(user, "End the round and restart the game world?", "End Round", list("Yes", "Cancel"))
if(confirm != "Yes")
@@ -1,7 +1,5 @@
/**
* # The path of Ash.
* Spell names are in this language: OLD NORDIC
* Both are related: Nordic Mythology-Yggdrassil-Ash Tree Genus-Ash
*
* Goes as follows:
*
@@ -233,7 +231,7 @@
text = "[generate_heretic_text()] Fear the blaze, for the Ashlord, [user.real_name] has ascended! The flames shall consume all! [generate_heretic_text()]",
title = "[generate_heretic_text()]",
sound = 'sound/ambience/antag/heretic/ascend_ash.ogg',
color_override = "white",
color_override = "pink",
)
var/datum/action/cooldown/spell/fire_sworn/circle_spell = new(user.mind)
@@ -1,7 +1,5 @@
/**
* # The path of Blades. Stab stab.
* Spell names are in this language: ARAMAIC
* Both are related: Aramaic-Damascus-Blade
*
* Goes as follows:
*
@@ -1,7 +1,5 @@
/**
* # The path of Cosmos.
* Spell names are in this language: SUMERIAN
* Both are related: Sumerian-Original-Primordial-Cosmic
*
* Goes as follows:
*
@@ -285,7 +283,7 @@
text = "[generate_heretic_text()] A Star Gazer has arrived into the station, [user.real_name] has ascended! This station is the domain of the Cosmos! [generate_heretic_text()]",
title = "[generate_heretic_text()]",
sound = 'sound/ambience/antag/heretic/ascend_cosmic.ogg',
color_override = "purple",
color_override = "pink",
)
var/mob/living/basic/heretic_summon/star_gazer/star_gazer_mob = new /mob/living/basic/heretic_summon/star_gazer(loc)
star_gazer_mob.maxHealth = INFINITY
@@ -5,8 +5,6 @@
/**
* # The path of Flesh.
* Spell names are in this language: LATIN
* Both are related: Latin-Rome-Hedonism-Flesh
*
* Goes as follows:
*
@@ -332,7 +330,7 @@
text = "[generate_heretic_text()] Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, [user.real_name] has ascended! Fear the ever twisting hand! [generate_heretic_text()]",
title = "[generate_heretic_text()]",
sound = 'sound/ambience/antag/heretic/ascend_flesh.ogg',
color_override = "red",
color_override = "pink",
)
var/datum/action/cooldown/spell/shapeshift/shed_human_form/worm_spell = new(user.mind)
@@ -1,7 +1,5 @@
/**
* # The path of Lock.
* Spell names are in this language: EGYPTIAN
* Both are related: Egyptian-Mysteries-Secrets-Lock
*
* Goes as follows:
*
@@ -243,7 +241,7 @@
text = "Delta-class dimensional anomaly detec[generate_heretic_text()] Reality rended, torn. Gates open, doors open, [user.real_name] has ascended! Fear the tide! [generate_heretic_text()]",
title = "[generate_heretic_text()]",
sound = 'sound/ambience/antag/heretic/ascend_knock.ogg',
color_override = "yellow",
color_override = "pink",
)
// buffs
@@ -1,7 +1,5 @@
/**
* # The path of Moon.
* Spell names are in this language: ANCIENT HEBREW
* Both are related: Ancient Hebrew-Moon Mysticism-Moon
*
* Goes as follows:
*
@@ -211,7 +209,7 @@
The truth shall finally devour the lie! [generate_heretic_text()]",
title = "[generate_heretic_text()]",
sound = 'sound/ambience/antag/heretic/ascend_moon.ogg',
color_override = "blue",
color_override = "pink",
)
ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src))
@@ -1,6 +1,5 @@
/**
* # The path of Rust.
* Spell names are in this language: OLD SLAVIC
*
* Goes as follows:
*
@@ -257,7 +256,7 @@
text = "[generate_heretic_text()] Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! [generate_heretic_text()]",
title = "[generate_heretic_text()]",
sound = 'sound/ambience/antag/heretic/ascend_rust.ogg',
color_override = "brown",
color_override = "pink",
)
trigger(loc)
RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
@@ -1,5 +1,4 @@
// Heretic starting knowledge.
// Default heretic language is Ancient Greek, because, uh, they're like ancient and shit.
/// Global list of all heretic knowledge that have route = PATH_START. List of PATHS.
GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge())
@@ -1,7 +1,5 @@
/**
* # The path of VOID.
* Spell names are in this language: PALI
* Both are related: Pali-Buddhism-Nothingness-Void
*
* Goes as follows:
*
@@ -221,7 +219,7 @@
text = "[generate_heretic_text()] The nobleman of void [user.real_name] has arrived, stepping along the Waltz that ends worlds! [generate_heretic_text()]",
title = "[generate_heretic_text()]",
sound = 'sound/ambience/antag/heretic/ascend_void.ogg',
color_override = "blue",
color_override = "pink",
)
ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT)
@@ -10,8 +10,8 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 30 SECONDS
invocation = "Agresiv'noe rasprostra-neniye!"
invocation_type = INVOCATION_SHOUT
invocation = "A'GRSV SPR'D"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
aoe_radius = 2
@@ -10,8 +10,8 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 45 SECONDS
invocation = "Shea' shen-eh!"
invocation_type = INVOCATION_SHOUT
invocation = "AP'TRA VULN'RA!"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
cast_range = 4
@@ -10,7 +10,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 70 SECONDS
invocation = "EID'R-ELDR!!!"
invocation = "FL'MS"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
@@ -72,8 +72,8 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 30 SECONDS
invocation = "ILLA-LASARA'FOSS!!!"
invocation_type = INVOCATION_SHOUT
invocation = "C'SC'DE"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
/// The radius the flames will go around the caster.
@@ -112,7 +112,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 300
invocation = "Eld'sky!"
invocation = "F'RE"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
@@ -10,7 +10,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 15 SECONDS
invocation = "Askgraar' goetur!"
invocation = "ASH'N P'SSG'"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
@@ -10,7 +10,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 45 SECONDS
invocation = "Fer're!"
invocation = "CL'VE!"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
@@ -11,7 +11,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 15 SECONDS
invocation = "Sanguis suctio!"
invocation = "FL'MS O'ET'RN'ITY."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE

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