mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 16:47:13 +01:00
Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-23-10-2025
This commit is contained in:
@@ -463,7 +463,9 @@
|
||||
/obj/item/reagent_containers/condiment/rice,
|
||||
/obj/item/reagent_containers/condiment/milk,
|
||||
/obj/item/reagent_containers/condiment/flour,
|
||||
/obj/item/reagent_containers/condiment/sugar,
|
||||
/obj/structure/closet/secure_closet/freezer/empty,
|
||||
/obj/item/knife/kitchen,
|
||||
/obj/item/storage/box/donkpockets,
|
||||
/obj/item/coffee_cartridge,
|
||||
/obj/item/coffee_cartridge/decaf,
|
||||
@@ -496,6 +498,7 @@
|
||||
/obj/structure/closet/crate/freezer,
|
||||
/obj/item/food/grown/potato,
|
||||
/obj/item/food/grown/potato,
|
||||
/obj/item/food/grown/carrot,
|
||||
/obj/item/food/grown/onion,
|
||||
/obj/item/food/grown/garlic,
|
||||
/turf/open/floor/iron/white,
|
||||
|
||||
@@ -834,7 +834,7 @@ a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
@@ -1244,7 +1244,7 @@ a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2166,6 +2166,15 @@
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line,
|
||||
/obj/structure/chair/sofa/bench/left{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay)
|
||||
"azy" = (
|
||||
@@ -5137,7 +5146,6 @@
|
||||
/area/station/command/gateway)
|
||||
"bmw" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
@@ -5153,6 +5161,7 @@
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Paramedic Dispatch"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/medical/paramedic)
|
||||
"bmC" = (
|
||||
@@ -6531,7 +6540,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral/full,
|
||||
/turf/open/floor/iron/large,
|
||||
/turf/open/floor/iron/dark/smooth_large,
|
||||
/area/station/medical/paramedic)
|
||||
"bFe" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
|
||||
@@ -8202,11 +8211,13 @@
|
||||
/turf/open/floor/iron,
|
||||
/area/station/medical/abandoned)
|
||||
"bYc" = (
|
||||
/obj/structure/filingcabinet/chestdrawer,
|
||||
/obj/machinery/status_display/ai/directional/east,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/computer/crew{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/paramedic)
|
||||
"bYe" = (
|
||||
@@ -9124,15 +9135,16 @@
|
||||
/turf/open/floor/iron,
|
||||
/area/station/maintenance/port/fore)
|
||||
"ckd" = (
|
||||
/obj/structure/chair/sofa/bench/left{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/structure/chair/sofa/bench/right{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/box/corners,
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 8
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay)
|
||||
@@ -10079,7 +10091,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"cvu" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
@@ -10129,6 +10141,19 @@
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/command/heads_quarters/hop)
|
||||
"cvX" = (
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Medbay Desk"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/medical/paramedic)
|
||||
"cwe" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
@@ -11787,6 +11812,17 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/emergency_bed,
|
||||
/obj/item/emergency_bed{
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/emergency_bed{
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/wheelchair{
|
||||
pixel_y = 15
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/paramedic)
|
||||
"cSi" = (
|
||||
@@ -12584,7 +12620,6 @@
|
||||
},
|
||||
/obj/machinery/digital_clock/directional/south,
|
||||
/obj/item/mod/module/signlang_radio,
|
||||
/obj/structure/fireaxecabinet/jawsofrecovery/directional/east,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/medical/storage)
|
||||
"dds" = (
|
||||
@@ -16001,7 +16036,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/turf/open/floor/iron,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"dWd" = (
|
||||
/obj/structure/cable,
|
||||
@@ -25209,7 +25244,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"gjI" = (
|
||||
/obj/structure/window/reinforced/spawner/directional/west,
|
||||
@@ -28519,9 +28554,11 @@
|
||||
/area/station/hallway/secondary/exit)
|
||||
"gXm" = (
|
||||
/obj/item/kirbyplants/random,
|
||||
/obj/machinery/firealarm/directional/south,
|
||||
/obj/effect/turf_decal/tile/blue/half/contrasted,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/structure/fireaxecabinet/jawsofrecovery/directional/south{
|
||||
pixel_y = -26
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"gXn" = (
|
||||
/obj/structure/table,
|
||||
@@ -34176,7 +34213,9 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small/directional/north,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/item/toy/figure/paramedic,
|
||||
/obj/item/surgicaldrill,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"ivz" = (
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
@@ -37239,7 +37278,6 @@
|
||||
/area/station/security/lockers)
|
||||
"jhs" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/obj/effect/turf_decal/tile/neutral/half/contrasted{
|
||||
dir = 4
|
||||
},
|
||||
@@ -38195,17 +38233,6 @@
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/aisat/exterior)
|
||||
"jtz" = (
|
||||
/obj/structure/chair/sofa/bench{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small/directional/east,
|
||||
/obj/machinery/firealarm/directional/east,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay)
|
||||
"jtB" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
@@ -41212,18 +41239,9 @@
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/engineering/storage/tech)
|
||||
"keH" = (
|
||||
/obj/structure/chair/sofa/bench/right{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay)
|
||||
"keO" = (
|
||||
@@ -46750,6 +46768,17 @@
|
||||
/obj/effect/turf_decal/tile/blue/half/contrasted{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/reagent_dispensers/water_cooler,
|
||||
/obj/machinery/button/door/directional/east{
|
||||
pixel_y = -4;
|
||||
id = "paramed_dispatch_desk";
|
||||
name = "Desk Shutter Control"
|
||||
},
|
||||
/obj/machinery/button/door/directional/east{
|
||||
pixel_y = 6;
|
||||
name = "Medbay Doors Control";
|
||||
id = "MedbayFoyer"
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/paramedic)
|
||||
"lAs" = (
|
||||
@@ -46783,7 +46812,6 @@
|
||||
"lAV" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/duct,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/medical/cryo)
|
||||
"lAW" = (
|
||||
@@ -52399,22 +52427,6 @@
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/service/abandoned_gambling_den)
|
||||
"mVr" = (
|
||||
/obj/machinery/computer/crew{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/button/door/directional/west{
|
||||
id = "MedbayFoyer";
|
||||
name = "Medbay Doors Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = 6;
|
||||
req_access = list("medical")
|
||||
},
|
||||
/obj/machinery/button/door/directional/west{
|
||||
id = "paramed_dispatch_desk";
|
||||
name = "Desk Shutter Control";
|
||||
pixel_y = -4;
|
||||
req_access = list("medical")
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue/half/contrasted{
|
||||
dir = 8
|
||||
},
|
||||
@@ -56768,15 +56780,15 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/station/hallway/secondary/entry)
|
||||
"odc" = (
|
||||
/obj/structure/reagent_dispensers/water_cooler,
|
||||
/obj/machinery/newscaster/directional/south,
|
||||
/obj/machinery/camera/directional/east{
|
||||
c_tag = "Medbay - Paramedic Dispatch";
|
||||
name = "medbay camera";
|
||||
network = list("ss13","medbay")
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/machinery/suit_storage_unit/medical,
|
||||
/obj/effect/turf_decal/bot_red,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"odd" = (
|
||||
/obj/docking_port/stationary/random{
|
||||
@@ -60096,7 +60108,7 @@
|
||||
},
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"oUM" = (
|
||||
/obj/effect/decal/cleanable/blood/oil,
|
||||
@@ -65133,13 +65145,11 @@
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/supermatter/room)
|
||||
"qdT" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/medkit/emergency,
|
||||
/obj/item/toy/figure/paramedic,
|
||||
/obj/effect/turf_decal/tile/blue/half/contrasted{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/structure/closet/secure_closet/paramedic,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"qdV" = (
|
||||
/obj/machinery/flasher/directional/south{
|
||||
@@ -74774,7 +74784,6 @@
|
||||
/area/station/science/ordnance/office)
|
||||
"sxG" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
@@ -74784,7 +74793,8 @@
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Medbay Desk"
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"sxK" = (
|
||||
/obj/effect/turf_decal/siding/wood,
|
||||
@@ -80706,7 +80716,6 @@
|
||||
/obj/machinery/holopad,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white/smooth_large,
|
||||
/area/station/medical/medbay)
|
||||
@@ -80763,7 +80772,6 @@
|
||||
/obj/effect/turf_decal/tile/red/diagonal_centre,
|
||||
/obj/effect/turf_decal/tile/blue/diagonal_edge,
|
||||
/obj/machinery/duct,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/iron/diagonal,
|
||||
/area/station/medical/break_room)
|
||||
"tWD" = (
|
||||
@@ -81392,7 +81400,7 @@
|
||||
/obj/effect/turf_decal/trimline/blue/filled/corner{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/sign/warning/no_smoking/directional/north,
|
||||
/obj/machinery/firealarm/directional/north,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay)
|
||||
"udf" = (
|
||||
@@ -82142,7 +82150,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"umN" = (
|
||||
/turf/closed/wall,
|
||||
@@ -83442,7 +83450,8 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/machinery/firealarm/directional/south,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"uCp" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
|
||||
@@ -84742,12 +84751,17 @@
|
||||
/area/station/command/bridge)
|
||||
"uQF" = (
|
||||
/obj/machinery/computer/security/telescreen/entertainment/directional/west,
|
||||
/obj/effect/turf_decal/bot_red,
|
||||
/obj/machinery/suit_storage_unit/medical,
|
||||
/obj/effect/turf_decal/tile/neutral/half/contrasted{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/cold/directional/west,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/toy/figure/md{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/reagent_containers/hypospray/medipen{
|
||||
pixel_y = -4
|
||||
},
|
||||
/turf/open/floor/iron/textured,
|
||||
/area/station/medical/storage)
|
||||
"uQN" = (
|
||||
@@ -85741,18 +85755,11 @@
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/fore)
|
||||
"vfA" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/radio/intercom/directional/south,
|
||||
/obj/item/clipboard,
|
||||
/obj/item/toy/figure/md{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/reagent_containers/hypospray/medipen{
|
||||
pixel_y = -4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/filingcabinet/chestdrawer,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/paramedic)
|
||||
"vfN" = (
|
||||
@@ -91298,7 +91305,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"wAt" = (
|
||||
/obj/machinery/hydroponics/soil,
|
||||
@@ -94973,9 +94980,8 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/landmark/start/medical_doctor,
|
||||
/obj/effect/turf_decal/tile/neutral/full,
|
||||
/turf/open/floor/iron/large,
|
||||
/turf/open/floor/iron/dark/smooth_large,
|
||||
/area/station/medical/paramedic)
|
||||
"xxX" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -139405,7 +139411,7 @@ fNm
|
||||
qeB
|
||||
uNY
|
||||
keH
|
||||
jtz
|
||||
yfM
|
||||
ckd
|
||||
veM
|
||||
hJn
|
||||
@@ -139662,7 +139668,7 @@ rmo
|
||||
lnz
|
||||
uNY
|
||||
eQC
|
||||
gQl
|
||||
cvX
|
||||
eQC
|
||||
gQl
|
||||
ltz
|
||||
@@ -141204,7 +141210,7 @@ xuI
|
||||
uNY
|
||||
uNY
|
||||
gQl
|
||||
gpq
|
||||
gQl
|
||||
gQl
|
||||
gQl
|
||||
gQl
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3890,7 +3890,7 @@
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"bqT" = (
|
||||
/obj/structure/cable,
|
||||
@@ -4791,7 +4791,8 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/newscaster/directional/east,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"bGu" = (
|
||||
/obj/structure/chair/sofa/bench/right{
|
||||
@@ -7288,7 +7289,7 @@
|
||||
/obj/effect/landmark/event_spawn,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"cEG" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
@@ -8110,7 +8111,7 @@
|
||||
network = list("ss13","medbay")
|
||||
},
|
||||
/obj/machinery/firealarm/directional/south,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"cUe" = (
|
||||
/obj/machinery/rnd/production/protolathe/department/science,
|
||||
@@ -9125,7 +9126,7 @@
|
||||
/obj/item/storage/toolbox/emergency,
|
||||
/obj/structure/table,
|
||||
/obj/machinery/light_switch/directional/west,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"dla" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -10213,7 +10214,7 @@
|
||||
/obj/structure/disposalpipe/trunk/multiz{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"dCI" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -10443,11 +10444,10 @@
|
||||
/area/station/science/auxlab/firing_range)
|
||||
"dHk" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"dHy" = (
|
||||
/obj/machinery/light/small/directional/north,
|
||||
@@ -11612,12 +11612,6 @@
|
||||
/obj/effect/mapping_helpers/requests_console/supplies,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/chemistry)
|
||||
"ebo" = (
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/paramedic)
|
||||
"ebs" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/landmark/event_spawn,
|
||||
@@ -12344,7 +12338,6 @@
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Medical Breakroom and Paramedic Dispatch"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/access/any/medical/general,
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -12352,7 +12345,8 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/effect/mapping_helpers/airlock/access/any/medical/paramedic,
|
||||
/turf/open/floor/holofloor/dark,
|
||||
/area/station/medical/exam_room)
|
||||
"epr" = (
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/line{
|
||||
@@ -14660,7 +14654,7 @@
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/machinery/requests_console/auto_name/directional/west,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"fhu" = (
|
||||
/turf/open/floor/engine/n2,
|
||||
@@ -17209,7 +17203,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"fZc" = (
|
||||
/obj/structure/cable,
|
||||
@@ -19828,7 +19822,7 @@
|
||||
},
|
||||
/obj/item/radio/intercom/directional/east,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"gTM" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
@@ -21741,7 +21735,8 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm/directional/north,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"hAL" = (
|
||||
/obj/structure/cable,
|
||||
@@ -22200,7 +22195,6 @@
|
||||
name = "Reception"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/effect/mapping_helpers/airlock/access/any/medical/general,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line,
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -22208,7 +22202,8 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/effect/mapping_helpers/airlock/access/any/medical/paramedic,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"hIv" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -22814,7 +22809,7 @@
|
||||
dir = 10
|
||||
},
|
||||
/obj/structure/extinguisher_cabinet/directional/south,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"hTQ" = (
|
||||
/obj/machinery/atmospherics/components/unary/passive_vent{
|
||||
@@ -24264,7 +24259,7 @@
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"ivh" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden{
|
||||
@@ -24299,7 +24294,7 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"ivR" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -25151,7 +25146,7 @@
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"iLb" = (
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/line{
|
||||
@@ -25959,7 +25954,8 @@
|
||||
/obj/machinery/light/warm/directional/west,
|
||||
/obj/item/storage/fancy/coffee_condi_display,
|
||||
/obj/structure/table,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/item/surgicaldrill,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"jbV" = (
|
||||
/obj/structure/plasticflaps,
|
||||
@@ -27078,13 +27074,6 @@
|
||||
},
|
||||
/turf/open/floor/carpet/purple,
|
||||
/area/station/service/library)
|
||||
"jvd" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/paramedic)
|
||||
"jvt" = (
|
||||
/obj/structure/closet/secure_closet/chemical,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -27227,12 +27216,9 @@
|
||||
/area/station/command/meeting_room)
|
||||
"jyg" = (
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/obj/machinery/suit_storage_unit/medical,
|
||||
/obj/effect/turf_decal/box/white{
|
||||
color = "#52B4E9"
|
||||
},
|
||||
/obj/item/radio/intercom/directional/north,
|
||||
/obj/machinery/light_switch/directional/west,
|
||||
/obj/structure/closet/l3closet,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/storage)
|
||||
"jyu" = (
|
||||
@@ -27248,7 +27234,8 @@
|
||||
"jyx" = (
|
||||
/obj/structure/chair/office,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"jyM" = (
|
||||
/obj/structure/ladder{
|
||||
@@ -33092,7 +33079,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"ltF" = (
|
||||
/obj/structure/cable,
|
||||
@@ -37961,7 +37948,7 @@
|
||||
"naZ" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"nbf" = (
|
||||
/obj/structure/cable,
|
||||
@@ -38162,7 +38149,11 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/digital_clock/directional/west,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/machinery/suit_storage_unit/medical,
|
||||
/obj/effect/turf_decal/box/white{
|
||||
color = "#52B4E9"
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"neb" = (
|
||||
/obj/structure/table,
|
||||
@@ -38698,11 +38689,13 @@
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/atmos/project)
|
||||
"nnF" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
/obj/effect/turf_decal/trimline/blue/filled/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"nnL" = (
|
||||
/obj/effect/turf_decal/tile/brown/half/contrasted{
|
||||
@@ -39815,13 +39808,13 @@
|
||||
name = "Medical Breakroom and Paramedic Dispatch"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/effect/mapping_helpers/airlock/access/any/medical/general,
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/iron/white,
|
||||
/obj/effect/mapping_helpers/airlock/access/any/medical/paramedic,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"nKi" = (
|
||||
/obj/effect/landmark/start/cargo_technician,
|
||||
@@ -40126,7 +40119,7 @@
|
||||
/obj/effect/spawner/random/vending/colavend,
|
||||
/obj/machinery/airalarm/directional/east,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"nOZ" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
|
||||
@@ -42101,7 +42094,6 @@
|
||||
color = "#52B4E9"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue/full,
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/iron/white/smooth_large,
|
||||
/area/station/medical/storage)
|
||||
"oDZ" = (
|
||||
@@ -43202,23 +43194,11 @@
|
||||
/turf/open/floor/engine/xenobio,
|
||||
/area/station/science/xenobiology)
|
||||
"oVX" = (
|
||||
/obj/structure/table,
|
||||
/obj/structure/window/spawner/directional/east,
|
||||
/obj/item/clothing/suit/jacket/straight_jacket,
|
||||
/obj/item/clothing/glasses/blindfold{
|
||||
pixel_y = 3
|
||||
/obj/structure/closet/secure_closet/paramedic,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/end{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/clothing/glasses/blindfold{
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/clothing/glasses/eyepatch,
|
||||
/obj/item/clothing/ears/earmuffs{
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/clothing/ears/earmuffs{
|
||||
pixel_y = 3
|
||||
},
|
||||
/turf/open/floor/iron/white/textured,
|
||||
/turf/open/floor/holofloor/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"oWd" = (
|
||||
/obj/structure/cable,
|
||||
@@ -52781,7 +52761,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white/smooth_large,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"set" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
|
||||
@@ -53741,7 +53721,8 @@
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/structure/fireaxecabinet/jawsofrecovery/directional/west,
|
||||
/turf/open/floor/iron/white/textured,
|
||||
/obj/structure/window/spawner/directional/north,
|
||||
/turf/open/floor/holofloor/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"stw" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
@@ -54621,7 +54602,7 @@
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/white,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"sIx" = (
|
||||
/obj/structure/cable,
|
||||
@@ -58468,7 +58449,7 @@
|
||||
/obj/item/emergency_bed{
|
||||
pixel_y = 11
|
||||
},
|
||||
/turf/open/floor/iron/white/textured,
|
||||
/turf/open/floor/holofloor/dark,
|
||||
/area/station/medical/paramedic)
|
||||
"tYI" = (
|
||||
/obj/effect/landmark/start/head_of_security,
|
||||
@@ -85924,9 +85905,9 @@ cBb
|
||||
hAA
|
||||
naZ
|
||||
sep
|
||||
ebo
|
||||
ebo
|
||||
jvd
|
||||
naZ
|
||||
naZ
|
||||
iuV
|
||||
sIv
|
||||
rnk
|
||||
bAr
|
||||
|
||||
@@ -89,6 +89,8 @@
|
||||
#define ACCESS_PSYCHOLOGY "psychology"
|
||||
/// Access for the Chief Medical Officer's personal quarters in mapping, as well as some other CMO-related things.
|
||||
#define ACCESS_CMO "cmo"
|
||||
/// Access to the Paramedic dispatch.
|
||||
#define ACCESS_PARAMEDIC "paramedic"
|
||||
|
||||
/// General access for Cargo, allows for entry to Cargo Bay and Cargo's Office.
|
||||
#define ACCESS_CARGO "cargo"
|
||||
@@ -325,6 +327,7 @@
|
||||
ACCESS_NETWORK, \
|
||||
ACCESS_ORDNANCE, \
|
||||
ACCESS_ORDNANCE_STORAGE, \
|
||||
ACCESS_PARAMEDIC, \
|
||||
ACCESS_PHARMACY, \
|
||||
ACCESS_PLUMBING, \
|
||||
ACCESS_PSYCHOLOGY, \
|
||||
@@ -461,6 +464,7 @@
|
||||
ACCESS_MEDICAL, \
|
||||
ACCESS_MORGUE, \
|
||||
ACCESS_MORGUE_SECURE, \
|
||||
ACCESS_PARAMEDIC, \
|
||||
ACCESS_PHARMACY, \
|
||||
ACCESS_PLUMBING, \
|
||||
ACCESS_PSYCHOLOGY, \
|
||||
|
||||
@@ -132,9 +132,6 @@
|
||||
///cancel clean
|
||||
#define COMSIG_ATOM_CANCEL_CLEAN (1<<0)
|
||||
|
||||
/// From /obj/item/stack/make_item()
|
||||
#define COMSIG_ATOM_CONSTRUCTED "atom_constructed"
|
||||
|
||||
/// From /obj/effect/particle_effect/sparks/proc/sparks_touched(datum/source, atom/movable/singed)
|
||||
#define COMSIG_ATOM_TOUCHED_SPARKS "atom_touched_sparks"
|
||||
#define COMSIG_ATOM_TOUCHED_HAZARDOUS_SPARKS "atom_touched_hazardous_sparks"
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
#define COMPONENT_BULLET_PIERCED (1<<2)
|
||||
///from base of atom/bullet_act(): (/obj/proj, def_zone, piercing_hit, blocked)
|
||||
#define COMSIG_ATOM_BULLET_ACT "atom_bullet_act"
|
||||
///from base of atom/on_craft_completion(): (components, datum/crafting_recipe/current_recipe)
|
||||
#define COMSIG_ATOM_ON_CRAFT "atom_checkparts"
|
||||
///from base of atom/on_craft_completion(): (components, datum/crafting_recipe/current_recipe, atom/crafter)
|
||||
#define COMSIG_ATOM_ON_CRAFT "atom_on_craft_completion"
|
||||
///from base of atom/used_in_craft(): (atom/result)
|
||||
#define COMSIG_ATOM_USED_IN_CRAFT "atom_used_in_craft"
|
||||
///from base of atom/blob_act(): (/obj/structure/blob)
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// /datum/component/lockable_storage signals
|
||||
|
||||
///from base of /datum/component/lockable_storage/proc/set_lock_code(new_code): (obj/source, new_code)
|
||||
#define COMSIG_LOCKABLE_STORAGE_SET_CODE "lockable_storage_set_code"
|
||||
@@ -182,9 +182,9 @@
|
||||
#define GET_FISH_WEIGHT_RANK(weighty) max(round(1 + log(2, max(weighty/FISH_WEIGHT_FORCE_DIVISOR, 1)), 1), 1)
|
||||
|
||||
///The breeding timeout for newly instantiated fish is multiplied by this.
|
||||
#define NEW_FISH_BREEDING_TIMEOUT_MULT 2
|
||||
///The last feeding timestamp of newly instantiated fish is multiplied by this: ergo, they spawn 50% hungry.
|
||||
#define NEW_FISH_LAST_FEEDING_MULT 0.33
|
||||
#define NEW_FISH_BREEDING_TIMEOUT_MULT 0.6
|
||||
///The last feeding timestamp of newly instantiated fish is multiplied by this.
|
||||
#define NEW_FISH_LAST_FEEDING_MULT 0.33 //Their hunger meter starts at 33%
|
||||
|
||||
///If get_hunger is above this value, the fish is considered to be starving and will slowly lose health because of it
|
||||
#define FISH_STARVING_THRESHOLD 1
|
||||
|
||||
@@ -201,6 +201,9 @@
|
||||
#define ui_ghost_language_menu "SOUTH: 6, CENTER+4:22"
|
||||
#define ui_ghost_floor_changer "SOUTH: 6, CENTER+4:7"
|
||||
|
||||
//Voidwalker
|
||||
#define ui_voidwalker_left_of_hands "CENTER+-2:16,SOUTH+0:5"
|
||||
|
||||
//Blobbernauts
|
||||
#define ui_blobbernaut_overmind_health "EAST-1:28,CENTER+0:19"
|
||||
|
||||
|
||||
+15
-10
@@ -5,16 +5,17 @@
|
||||
#define CAN_BE_HIT (1<<1) //can this be bludgeoned by items?
|
||||
#define DANGEROUS_POSSESSION (1<<2) //Admin possession yes/no
|
||||
#define UNIQUE_RENAME (1<<3) // can you customize the description/name of the thing?
|
||||
#define BLOCK_Z_OUT_DOWN (1<<4) // Should this object block z falling from loc?
|
||||
#define BLOCK_Z_OUT_UP (1<<5) // Should this object block z uprise from loc?
|
||||
#define BLOCK_Z_IN_DOWN (1<<6) // Should this object block z falling from above?
|
||||
#define BLOCK_Z_IN_UP (1<<7) // Should this object block z uprise from below?
|
||||
#define BLOCKS_CONSTRUCTION (1<<8) //! Does this object prevent things from being built on it?
|
||||
#define BLOCKS_CONSTRUCTION_DIR (1<<9) //! Does this object prevent same-direction things from being built on it?
|
||||
#define IGNORE_DENSITY (1<<10) //! Can we ignore density when building on this object? (for example, directional windows and grilles)
|
||||
#define INFINITE_RESKIN (1<<11) // We can reskin this item infinitely
|
||||
#define CONDUCTS_ELECTRICITY (1<<12) //! Can this object conduct electricity?
|
||||
#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<13) //! Atoms don't spawn anything when deconstructed. They just vanish
|
||||
#define RENAME_NO_DESC (1<<4) // if it can be renamed, is its description excluded?
|
||||
#define BLOCK_Z_OUT_DOWN (1<<5) // Should this object block z falling from loc?
|
||||
#define BLOCK_Z_OUT_UP (1<<6) // Should this object block z uprise from loc?
|
||||
#define BLOCK_Z_IN_DOWN (1<<7) // Should this object block z falling from above?
|
||||
#define BLOCK_Z_IN_UP (1<<8) // Should this object block z uprise from below?
|
||||
#define BLOCKS_CONSTRUCTION (1<<9) //! Does this object prevent things from being built on it?
|
||||
#define BLOCKS_CONSTRUCTION_DIR (1<<10) //! Does this object prevent same-direction things from being built on it?
|
||||
#define IGNORE_DENSITY (1<<11) //! Can we ignore density when building on this object? (for example, directional windows and grilles)
|
||||
#define INFINITE_RESKIN (1<<12) // We can reskin this item infinitely
|
||||
#define CONDUCTS_ELECTRICITY (1<<13) //! Can this object conduct electricity?
|
||||
#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<14) //! Atoms don't spawn anything when deconstructed. They just vanish
|
||||
|
||||
// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
|
||||
|
||||
@@ -118,3 +119,7 @@
|
||||
#define INCLUDE_POCKETS (1<<0)
|
||||
#define INCLUDE_ACCESSORIES (1<<1)
|
||||
#define INCLUDE_HELD (1<<2)
|
||||
/// Include prosthetic item limbs (which are not flavoured as being equipped items)
|
||||
#define INCLUDE_PROSTHETICS (1<<3)
|
||||
/// Include items that are not "real" items, such as hand items
|
||||
#define INCLUDE_ABSTRACT (1<<4)
|
||||
|
||||
@@ -157,8 +157,17 @@
|
||||
#define SPRITE_ACCESSORY_NONE "None"
|
||||
|
||||
// Loadout
|
||||
/// Used to make something not recolorable even if it's capable
|
||||
#define DONT_GREYSCALE -1
|
||||
/// When equipped, applies a job specific palette to the item. Only applicable to GAGS items.
|
||||
#define LOADOUT_FLAG_JOB_GREYSCALING (1<<0)
|
||||
/// Prevents GAGS items from being player customizable.
|
||||
#define LOADOUT_FLAG_BLOCK_GREYSCALING (1<<1)
|
||||
/// Allows the item to be greyscaled by the player, if it's a GAGS item. Automatically set if the item is innately recolorable.
|
||||
#define LOADOUT_FLAG_GREYSCALING_ALLOWED (1<<2)
|
||||
/// Allows the item to be renamed by the player.
|
||||
#define LOADOUT_FLAG_ALLOW_NAMING (1<<3)
|
||||
/// Allows the item to be reskinned by the player. Only applicable to items with unique_reskin defined.
|
||||
#define LOADOUT_FLAG_ALLOW_RESKIN (1<<4)
|
||||
|
||||
// Loadout item info keys
|
||||
// Changing these will break existing loadouts
|
||||
/// Tracks GAGS color information
|
||||
@@ -174,3 +183,21 @@
|
||||
#define UPPER_LIP "Upper"
|
||||
#define MIDDLE_LIP "Middle"
|
||||
#define LOWER_LIP "Lower"
|
||||
|
||||
// Job greyscale colors for loadout items
|
||||
#define COLOR_JOB_ASSISTANT /obj/item/clothing/under/color/grey::greyscale_colors
|
||||
#define COLOR_JOB_BOTANIST "#33cc33"
|
||||
#define COLOR_JOB_CARGO_GENERIC "#824b32"
|
||||
#define COLOR_JOB_CE "#d0d0d0"
|
||||
#define COLOR_JOB_CHEF "#d0d0d0"
|
||||
#define COLOR_JOB_CHEMIST "#ff6600"
|
||||
#define COLOR_JOB_CLOWN "#ffbeff"
|
||||
#define COLOR_JOB_CMO "#009999"
|
||||
#define COLOR_JOB_DEFAULT "#303030"
|
||||
#define COLOR_JOB_ENGI_GENERIC "#ff6600"
|
||||
#define COLOR_JOB_JANITOR /obj/item/clothing/gloves/color/purple::greyscale_colors
|
||||
#define COLOR_JOB_LAWYER "#003399"
|
||||
#define COLOR_JOB_SCI_GENERIC "#800080"
|
||||
#define COLOR_JOB_SEC_GENERIC "#A53228"
|
||||
#define COLOR_JOB_MED_GENERIC "#5B97BC"
|
||||
#define COLOR_JOB_COMMAND_GENERIC "#3C5A96"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define TOOL_PROCESSING_RESULT "result"
|
||||
#define TOOL_PROCESSING_AMOUNT "amount"
|
||||
#define TOOL_PROCESSING_TIME "time"
|
||||
#define TOOL_PROCESSING_SOUND "sound"
|
||||
|
||||
@@ -356,6 +356,35 @@ GLOBAL_LIST_EMPTY(sfx_datum_by_key)
|
||||
#define SFX_CIG_PACK_RUSTLE "cig_pack_rustle"
|
||||
#define SFX_CIG_PACK_THROW_DROP "cig_pack_throw_drop"
|
||||
#define SFX_RORO_WARBLE "roro_warble"
|
||||
#define SFX_POTTED_PLANT_PICKUP "potted_plant_pickup"
|
||||
#define SFX_POTTED_PLANT_DROP "potted_plant_drop"
|
||||
#define SFX_GOGGLES_PICKUP "goggles_pickup"
|
||||
#define SFX_GOGGLES_DROP "goggles_drop"
|
||||
#define SFX_GOGGLES_EQUIP "goggles_equip"
|
||||
#define SFX_GLASSES_PICKUP "glasses_pickup"
|
||||
#define SFX_GLASSES_DROP "glasses_drop"
|
||||
#define SFX_GLASSES_EQUIP "glasses_equip"
|
||||
#define SFX_FOOD_PLATE_PICKUP "food_plate_pickup"
|
||||
#define SFX_FOOD_PLATE_DROP "food_plate_drop"
|
||||
#define SFX_TRAY_PICKUP "tray_pickup"
|
||||
#define SFX_TRAY_DROP "tray_drop"
|
||||
#define SFX_TRAY_INSERT "tray_insert"
|
||||
#define SFX_CUTLERY_PICKUP "generic_cutlery_pickup"
|
||||
#define SFX_CUTLERY_DROP "generic_cutlery_drop"
|
||||
#define SFX_KNIFE_PICKUP "knife_pickup"
|
||||
#define SFX_KNIFE_DROP "knife_drop"
|
||||
#define SFX_KNIFE_SLICE "knife_slice"
|
||||
#define SFX_POT_PICKUP "pot_pickup"
|
||||
#define SFX_POT_DROP "pot_drop"
|
||||
#define SFX_ROLLING_PIN_PICKUP "rolling_pin_pickup"
|
||||
#define SFX_ROLLING_PIN_DROP "rolling_pin_drop"
|
||||
#define SFX_ROLLING_PIN_ROLLING "rolling_pin_rolling"
|
||||
#define SFX_FIRE_MODE_SWITCH "fire_mode_switch"
|
||||
#define SFX_REMOTE_MODE_SWITCH "remote_mode_switch"
|
||||
#define SFX_REMOTE_ACTION "remote_action"
|
||||
#define SFX_GAS_MASK_PICKUP "gas_mask_pickup"
|
||||
#define SFX_GAS_MASK_DROP "gas_mask_drop"
|
||||
#define SFX_GAS_MASK_EQUIP "gas_mask_equip"
|
||||
|
||||
// Standard is 44.1khz
|
||||
#define MIN_EMOTE_PITCH 40000
|
||||
|
||||
@@ -552,6 +552,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_CULT_HALO "cult_halo"
|
||||
/// Their eyes glow an unnatural red colour. Currently used to set special examine text on humans. Does not guarantee the mob's eyes are coloured red, nor that there is any visible glow on their character sprite.
|
||||
#define TRAIT_UNNATURAL_RED_GLOWY_EYES "unnatural_red_glowy_eyes"
|
||||
/// Their eyes glow in the dark (aka emissive appearance)
|
||||
#define TRAIT_LUMINESCENT_EYES "luminescent_eyes"
|
||||
/// Their eyes reflect light, making them shine faintly in dim, shadowy areas. Kinda like nocturnal animals.
|
||||
#define TRAIT_REFLECTIVE_EYES "reflective_eyes"
|
||||
/// Their eyes are bloodshot. Currently used to set special examine text on humans. Examine text is overridden by TRAIT_UNNATURAL_RED_GLOWY_EYES.
|
||||
#define TRAIT_BLOODSHOT_EYES "bloodshot_eyes"
|
||||
/// This mob should never close UI even if it doesn't have a client
|
||||
|
||||
@@ -136,6 +136,7 @@
|
||||
#define VV_HK_VIEW_PLANES "view_planes"
|
||||
#define VV_HK_GIVE_AI "give_ai"
|
||||
#define VV_HK_GIVE_AI_SPEECH "give_ai_speech"
|
||||
#define VV_HK_GIVE_ACCESS "give_access"
|
||||
|
||||
// /mob/living
|
||||
#define VV_HK_GIVE_SPEECH_IMPEDIMENT "impede_speech"
|
||||
|
||||
@@ -23,8 +23,7 @@
|
||||
victim.Stun(100)
|
||||
victim.adjust_stutter(30 SECONDS)
|
||||
victim.set_jitter_if_lower(1000 SECONDS)
|
||||
var/obj/item/organ/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
ears?.adjustEarDamage(10, 15)
|
||||
victim.sound_damage(10, 30 SECONDS)
|
||||
to_chat(victim, "<font color='red' size='8'>HONK</font>")
|
||||
var/obj/item/clothing/shoes/victim_shoes = victim.get_item_by_slot(ITEM_SLOT_FEET)
|
||||
if(!victim_shoes || victim_shoes.fastening_type == SHOES_SLIPON)
|
||||
@@ -35,13 +34,11 @@
|
||||
victim.Paralyze(20)
|
||||
victim.Stun(50)
|
||||
victim.set_jitter_if_lower(500 SECONDS)
|
||||
var/obj/item/organ/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
ears?.adjustEarDamage(7, 10)
|
||||
victim.sound_damage(7, 20 SECONDS)
|
||||
to_chat(victim, "<font color='red' size='5'>HONK</font>")
|
||||
|
||||
for(var/mob/living/carbon/victim in lightly_honked)
|
||||
victim.Knockdown(20)
|
||||
victim.set_jitter_if_lower(200 SECONDS)
|
||||
var/obj/item/organ/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
ears?.adjustEarDamage(4, 5)
|
||||
victim.sound_damage(4, 10 SECONDS)
|
||||
to_chat(victim, "<font color='red' size='2'>HONK</font>")
|
||||
|
||||
@@ -279,6 +279,10 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
|
||||
|
||||
var/holding = user.get_active_held_item()
|
||||
|
||||
#ifdef UNIT_TESTS
|
||||
timed_action_flags &= ~IGNORE_SLOWDOWNS //it shouldn't stop unit test dummies from being fast as hell
|
||||
#endif
|
||||
|
||||
if(!(timed_action_flags & IGNORE_SLOWDOWNS))
|
||||
delay *= user.cached_multiplicative_actions_slowdown
|
||||
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
GLOBAL_LIST_INIT(discountable_packs, init_discountable_packs())
|
||||
|
||||
/proc/init_discountable_packs()
|
||||
var/list/packs = list()
|
||||
for(var/datum/supply_pack/prototype as anything in subtypesof(/datum/supply_pack))
|
||||
var/discountable = initial(prototype.discountable)
|
||||
if(discountable)
|
||||
LAZYADD(packs[discountable], prototype)
|
||||
return packs
|
||||
GLOBAL_LIST_INIT(exports_list, init_Exports())
|
||||
|
||||
GLOBAL_LIST_INIT(pack_discount_odds, list(
|
||||
SUPPLY_PACK_STD_DISCOUNTABLE = 45,
|
||||
@@ -15,3 +9,20 @@ GLOBAL_LIST_INIT(pack_discount_odds, list(
|
||||
))
|
||||
|
||||
GLOBAL_LIST_EMPTY(supplypod_loading_bays)
|
||||
|
||||
/// Caled when the global discount pack list is initialized
|
||||
/proc/init_discountable_packs()
|
||||
var/list/packs = list()
|
||||
for(var/datum/supply_pack/prototype as anything in subtypesof(/datum/supply_pack))
|
||||
var/discountable = initial(prototype.discountable)
|
||||
if(discountable)
|
||||
LAZYADD(packs[discountable], prototype)
|
||||
return packs
|
||||
|
||||
/// Called when the global exports_list is empty, and sets it up.
|
||||
/proc/init_Exports()
|
||||
var/list/exports = list()
|
||||
for(var/datum/export/subtype as anything in subtypesof(/datum/export))
|
||||
if(subtype::abstract_type != subtype)
|
||||
exports += new subtype
|
||||
return exports
|
||||
|
||||
@@ -12,3 +12,11 @@ GLOBAL_LIST_INIT(backpacklist, list(
|
||||
FSATCHEL,
|
||||
FMESSENGER, // BUBBER EDIT END
|
||||
))
|
||||
|
||||
|
||||
GLOBAL_LIST_INIT(suit_sensor_mode_to_defines, list(
|
||||
"Off" = SENSOR_OFF,
|
||||
"Binary vitals" = SENSOR_LIVING,
|
||||
"Exact vitals" = SENSOR_VITALS,
|
||||
"Tracking beacon" = SENSOR_COORDS,
|
||||
))
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/// List of language prototypes to reference, assoc [type] = prototype
|
||||
GLOBAL_LIST_INIT_TYPED(language_datum_instances, /datum/language, init_language_prototypes())
|
||||
/// List if all language typepaths learnable, IE, those with keys
|
||||
GLOBAL_LIST_INIT(all_languages, init_all_languages())
|
||||
/// /List of language prototypes to reference, assoc "name" = typepath
|
||||
GLOBAL_LIST_INIT(language_types_by_name, init_language_types_by_name())
|
||||
/// 1000 element long list containing the 1000 most common words in the English language.
|
||||
/// Indexed by word, value is the rank of the word in the list. So accessing it is fasta.
|
||||
GLOBAL_LIST_INIT(most_common_words, init_common_words())
|
||||
|
||||
/proc/init_language_prototypes()
|
||||
var/list/lang_list = list()
|
||||
for(var/datum/language/lang_type as anything in typesof(/datum/language))
|
||||
if(!initial(lang_type.key))
|
||||
continue
|
||||
|
||||
lang_list[lang_type] = new lang_type()
|
||||
return lang_list
|
||||
|
||||
/proc/init_all_languages()
|
||||
var/list/lang_list = list()
|
||||
for(var/datum/language/lang_type as anything in typesof(/datum/language))
|
||||
if(!initial(lang_type.key))
|
||||
continue
|
||||
lang_list += lang_type
|
||||
return lang_list
|
||||
|
||||
/proc/init_language_types_by_name()
|
||||
var/list/lang_list = list()
|
||||
for(var/datum/language/lang_type as anything in typesof(/datum/language))
|
||||
if(!initial(lang_type.key))
|
||||
continue
|
||||
lang_list[initial(lang_type.name)] = lang_type
|
||||
return lang_list
|
||||
|
||||
/proc/init_common_words()
|
||||
var/list/word_to_commonness_list = list()
|
||||
var/i = 1
|
||||
for(var/word in world.file2list("strings/1000_most_common.txt"))
|
||||
word_to_commonness_list[word] = i
|
||||
i += 1
|
||||
return word_to_commonness_list
|
||||
@@ -82,37 +82,6 @@ GLOBAL_LIST_EMPTY(revenant_relay_mobs)
|
||||
|
||||
///underages who have been reported to security for trying to buy things they shouldn't, so they can't spam
|
||||
GLOBAL_LIST_EMPTY(narcd_underages)
|
||||
/// List of language prototypes to reference, assoc [type] = prototype
|
||||
GLOBAL_LIST_INIT_TYPED(language_datum_instances, /datum/language, init_language_prototypes())
|
||||
/// List if all language typepaths learnable, IE, those with keys
|
||||
GLOBAL_LIST_INIT(all_languages, init_all_languages())
|
||||
/// /List of language prototypes to reference, assoc "name" = typepath
|
||||
GLOBAL_LIST_INIT(language_types_by_name, init_language_types_by_name())
|
||||
|
||||
/proc/init_language_prototypes()
|
||||
var/list/lang_list = list()
|
||||
for(var/datum/language/lang_type as anything in typesof(/datum/language))
|
||||
if(!initial(lang_type.key))
|
||||
continue
|
||||
|
||||
lang_list[lang_type] = new lang_type()
|
||||
return lang_list
|
||||
|
||||
/proc/init_all_languages()
|
||||
var/list/lang_list = list()
|
||||
for(var/datum/language/lang_type as anything in typesof(/datum/language))
|
||||
if(!initial(lang_type.key))
|
||||
continue
|
||||
lang_list += lang_type
|
||||
return lang_list
|
||||
|
||||
/proc/init_language_types_by_name()
|
||||
var/list/lang_list = list()
|
||||
for(var/datum/language/lang_type as anything in typesof(/datum/language))
|
||||
if(!initial(lang_type.key))
|
||||
continue
|
||||
lang_list[initial(lang_type.name)] = lang_type
|
||||
return lang_list
|
||||
|
||||
/// A list of all the possible blood types, keyed by id (which is just the name in most cases)
|
||||
GLOBAL_LIST_INIT(blood_types, init_blood_types())
|
||||
|
||||
@@ -6,7 +6,6 @@ GLOBAL_LIST_INIT(greek_letters, world.file2list("strings/greek_letters.txt"))
|
||||
GLOBAL_LIST_INIT(gross_adjectives, world.file2list("strings/names/gross_adjectives.txt"))
|
||||
GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt"))
|
||||
GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt"))
|
||||
GLOBAL_LIST_INIT(most_common_words, world.file2list("strings/1000_most_common.txt"))
|
||||
GLOBAL_LIST_INIT(numbers_as_words, world.file2list("strings/numbers_as_words.txt"))
|
||||
GLOBAL_LIST_INIT(phonetic_alphabet, world.file2list("strings/phonetic_alphabet.txt"))
|
||||
GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt"))
|
||||
|
||||
@@ -381,6 +381,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_LITERATE" = TRAIT_LITERATE,
|
||||
"TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM,
|
||||
"TRAIT_LOUD_BINARY" = TRAIT_LOUD_BINARY,
|
||||
"TRAIT_LUMINESCENT_EYES" = TRAIT_LUMINESCENT_EYES,
|
||||
"TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE,
|
||||
"TRAIT_MAFIAINITIATE" = TRAIT_MAFIAINITIATE,
|
||||
"TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED,
|
||||
@@ -510,6 +511,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_REAGENT_SCANNER" = TRAIT_REAGENT_SCANNER,
|
||||
"TRAIT_RECENTLY_BLOCKED_MAGIC" = TRAIT_RECENTLY_BLOCKED_MAGIC,
|
||||
"TRAIT_RECENTLY_TREATED" = TRAIT_RECENTLY_TREATED,
|
||||
"TRAIT_REFLECTIVE_EYES" = TRAIT_REFLECTIVE_EYES,
|
||||
"TRAIT_REGEN_SHIELD" = TRAIT_REGEN_SHIELD,
|
||||
"TRAIT_RELAYING_ATTACKER" = TRAIT_RELAYING_ATTACKER,
|
||||
"TRAIT_REMOTE_TASTING" = TRAIT_REMOTE_TASTING,
|
||||
|
||||
@@ -171,6 +171,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
|
||||
"TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT,
|
||||
"TRAIT_LITERATE" = TRAIT_LITERATE,
|
||||
"TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM,
|
||||
"TRAIT_LUMINESCENT_EYES" = TRAIT_LUMINESCENT_EYES,
|
||||
"TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE,
|
||||
"TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED,
|
||||
"TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE,
|
||||
@@ -259,6 +260,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
|
||||
"TRAIT_QUICKER_CARRY" = TRAIT_QUICKER_CARRY,
|
||||
"TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE,
|
||||
"TRAIT_RAD_RESISTANCE" = TRAIT_RAD_RESISTANCE, // BUBBER EDIT
|
||||
"TRAIT_REFLECTIVE_EYES" = TRAIT_REFLECTIVE_EYES,
|
||||
"TRAIT_REMOTE_TASTING" = TRAIT_REMOTE_TASTING,
|
||||
"TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD,
|
||||
"TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT,
|
||||
|
||||
@@ -127,8 +127,8 @@
|
||||
return FALSE
|
||||
|
||||
/// No loot panel if it's on our person
|
||||
if(isobj(target) && (target in get_all_gear()))
|
||||
to_chat(src, span_warning("You can't search for this item, it's already in your inventory! Take it off first."))
|
||||
if(isobj(target) && (target in get_all_gear(INCLUDE_PROSTHETICS|INCLUDE_ABSTRACT|INCLUDE_ACCESSORIES)))
|
||||
to_chat(src, span_warning("You can't search for this item, it's already in your inventory![!HAS_TRAIT(target, TRAIT_NODROP) ? " Take it off first." : ""]"))
|
||||
return FALSE
|
||||
|
||||
client.loot_panel.open(get_turf(target))
|
||||
|
||||
@@ -380,7 +380,8 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list(
|
||||
screenmob.client.screen += infodisplay
|
||||
if(always_visible_inventory.len)
|
||||
screenmob.client.screen += always_visible_inventory
|
||||
if(open_containers.len)
|
||||
if(open_containers.len && screenmob == mymob) // Don't show open inventories to ghosts
|
||||
list_clear_nulls(open_containers)
|
||||
screenmob.client.screen += open_containers
|
||||
screenmob.client.screen += toggle_palette
|
||||
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
floor_change.screen_loc = ui_rest
|
||||
static_inventory += floor_change
|
||||
|
||||
resist_icon = new /atom/movable/screen/resist(null, src)
|
||||
resist_icon.icon = ui_style
|
||||
resist_icon.screen_loc = ui_voidwalker_left_of_hands
|
||||
resist_icon.update_appearance()
|
||||
|
||||
action_intent = new /atom/movable/screen/combattoggle/flashy/voidwalker(null, src)
|
||||
action_intent.icon = ui_style
|
||||
static_inventory += action_intent
|
||||
@@ -51,7 +56,7 @@
|
||||
/atom/movable/screen/vomit_jump
|
||||
name = "vomit tracker"
|
||||
icon = 'icons/hud/screen_voidwalker.dmi'
|
||||
icon_state = "vomitjump"
|
||||
icon_state = "template"
|
||||
/// So we can sort of loop through it
|
||||
var/index = 1
|
||||
|
||||
|
||||
@@ -43,6 +43,9 @@
|
||||
/// Ruleset can be configured by admins (implements /proc/configure_ruleset)
|
||||
/// Only implemented for midrounds currently
|
||||
#define RULESET_ADMIN_CONFIGURABLE (1<<2)
|
||||
/// Applied to rulesets which intentionally share a pref_flag with another rulesets
|
||||
/// Denotes multiple rulesets which abide by the same preference, but are each a variation of some base ruleset
|
||||
#define RULESET_VARIATION (1<<3)
|
||||
|
||||
/// Href for cancelling midround rulesets before execution
|
||||
#define MIDROUND_CANCEL_HREF(...) "(<a href='byond://?src=[REF(src)];admin_cancel_midround=[REF(picked_ruleset)]'>CANCEL</a>)"
|
||||
|
||||
@@ -10,9 +10,12 @@
|
||||
/// Don't change this unless you know what you're doing.
|
||||
var/config_tag
|
||||
|
||||
/// What flag to check for jobbans? Optional, if unset, uses pref_flag
|
||||
/// What flag to check for jobbans?
|
||||
/// Optional, if unset, uses pref_flag for jobbans instead
|
||||
var/jobban_flag
|
||||
/// What flag to check for prefs? Required if the antag has an associated preference
|
||||
/// What flag to check for prefs?
|
||||
/// Required if the antag has an associated preference, and must be unique
|
||||
/// (unless RULESET_VARIATION is set in ruleset_flags)
|
||||
var/pref_flag
|
||||
/// Flags for this ruleset
|
||||
var/ruleset_flags = NONE
|
||||
|
||||
@@ -658,7 +658,7 @@
|
||||
candidate_role = "Changeling"
|
||||
pref_flag = ROLE_CHANGELING_MIDROUND
|
||||
jobban_flag = ROLE_CHANGELING
|
||||
ruleset_flags = RULESET_INVADER
|
||||
ruleset_flags = RULESET_INVADER|RULESET_VARIATION
|
||||
weight = 5
|
||||
min_pop = 15
|
||||
max_antag_cap = 1
|
||||
@@ -670,6 +670,21 @@
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/space_changeling/assign_role(datum/mind/candidate)
|
||||
generate_changeling_meteor(candidate)
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/space_changeling/mass
|
||||
name = "Mass Space Changelings"
|
||||
config_tag = "Mass Changelings"
|
||||
midround_type = HEAVY_MIDROUND
|
||||
min_pop = 25
|
||||
min_antag_cap = 2
|
||||
max_antag_cap = 3
|
||||
repeatable_weight_decrease = 4
|
||||
weight = list(
|
||||
DYNAMIC_TIER_LOW = 0,
|
||||
DYNAMIC_TIER_LOWMEDIUM = 3,
|
||||
DYNAMIC_TIER_MEDIUMHIGH = 4,
|
||||
DYNAMIC_TIER_HIGH = 5,
|
||||
)
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone
|
||||
name = "Paradox Clone"
|
||||
config_tag = "Paradox Clone"
|
||||
@@ -1064,6 +1079,7 @@
|
||||
false_alarm_able = TRUE
|
||||
pref_flag = ROLE_SLEEPER_AGENT
|
||||
jobban_flag = ROLE_TRAITOR
|
||||
ruleset_flags = RULESET_VARIATION
|
||||
weight = 10
|
||||
min_pop = 3
|
||||
blacklisted_roles = list(
|
||||
@@ -1079,6 +1095,22 @@
|
||||
"[command_name()] High-Priority Update",
|
||||
)
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_living/traitor/mass
|
||||
name = "Mass Traitors"
|
||||
config_tag = "Mass Traitors"
|
||||
midround_type = HEAVY_MIDROUND
|
||||
min_pop = 15
|
||||
min_antag_cap = 2
|
||||
max_antag_cap = 4
|
||||
repeatable_weight_decrease = 8
|
||||
blacklisted_roles = list()
|
||||
weight = list(
|
||||
DYNAMIC_TIER_LOW = 0,
|
||||
DYNAMIC_TIER_LOWMEDIUM = 3,
|
||||
DYNAMIC_TIER_MEDIUMHIGH = 8,
|
||||
DYNAMIC_TIER_HIGH = 10,
|
||||
)
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_living/malf_ai
|
||||
name = "Malfunctioning AI"
|
||||
config_tag = "Midround Malfunctioning AI"
|
||||
|
||||
@@ -290,6 +290,7 @@ SUBSYSTEM_DEF(id_access)
|
||||
desc_by_access["[ACCESS_VIROLOGY]"] = "Virology"
|
||||
desc_by_access["[ACCESS_PSYCHOLOGY]"] = "Psychology"
|
||||
desc_by_access["[ACCESS_CMO]"] = "CMO Office"
|
||||
desc_by_access["[ACCESS_PARAMEDIC]"] = "Paramedic Office"
|
||||
desc_by_access["[ACCESS_QM]"] = "QM Office"
|
||||
desc_by_access["[ACCESS_SURGERY]"] = "Surgery"
|
||||
desc_by_access["[ACCESS_THEATRE]"] = "Theatre"
|
||||
|
||||
@@ -20,16 +20,9 @@ SUBSYSTEM_DEF(stock_market)
|
||||
/datum/controller/subsystem/stock_market/Initialize()
|
||||
for(var/datum/material/possible_market as anything in subtypesof(/datum/material)) // I need to make this work like this, but lets hardcode it for now
|
||||
if(possible_market.tradable)
|
||||
materials_prices += possible_market
|
||||
materials_prices[possible_market] = possible_market.value_per_unit * SHEET_MATERIAL_AMOUNT
|
||||
|
||||
materials_trends += possible_market
|
||||
materials_trends[possible_market] = rand(MARKET_TREND_DOWNWARD,MARKET_TREND_UPWARD) //aka -1 to 1
|
||||
|
||||
materials_trend_life += possible_market
|
||||
materials_trend_life[possible_market] = rand(1,3)
|
||||
|
||||
materials_quantity += possible_market
|
||||
materials_quantity[possible_market] = possible_market.tradable_base_quantity + (rand(-(possible_market.tradable_base_quantity) * 0.5, possible_market.tradable_base_quantity * 0.5))
|
||||
return SS_INIT_SUCCESS
|
||||
|
||||
|
||||
@@ -388,7 +388,7 @@
|
||||
|
||||
for(var/obj/item/fish/fish_type as anything in types_to_mate_with)
|
||||
var/list/type_fishes = tracked_fish_by_type[fish_type]
|
||||
if(length(type_fishes) >= initial(fish_type.stable_population))
|
||||
if(length(type_fishes) >= fish_type::stable_population)
|
||||
continue
|
||||
candidates += type_fishes
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
/datum/component/connect_inventory/proc/update_signals()
|
||||
unregister_signals()
|
||||
|
||||
for(var/obj/item/item as anything in tracked.get_equipped_items(INCLUDE_POCKETS | INCLUDE_HELD))
|
||||
for(var/obj/item/item as anything in tracked.get_equipped_items(INCLUDE_POCKETS|INCLUDE_HELD|INCLUDE_PROSTHETICS|INCLUDE_ABSTRACT))
|
||||
if(!(allowed_slots & tracked.get_slot_by_item(item)))
|
||||
continue
|
||||
RegisterSignal(item, COMSIG_ITEM_DROPPED, PROC_REF(on_unequipped_item))
|
||||
@@ -40,7 +40,7 @@
|
||||
parent.RegisterSignal(item, signal, connections[signal])
|
||||
|
||||
/datum/component/connect_inventory/proc/unregister_signals()
|
||||
for(var/obj/item/item as anything in tracked.get_equipped_items(INCLUDE_POCKETS | INCLUDE_HELD))
|
||||
for(var/obj/item/item as anything in tracked.get_equipped_items(INCLUDE_POCKETS|INCLUDE_HELD|INCLUDE_PROSTHETICS|INCLUDE_ABSTRACT))
|
||||
UnregisterSignal(item, COMSIG_ITEM_DROPPED)
|
||||
parent.UnregisterSignal(item, connections)
|
||||
|
||||
|
||||
@@ -382,8 +382,8 @@
|
||||
if(recipe.structures)
|
||||
requirements += recipe.structures
|
||||
|
||||
var/list/surroundings
|
||||
for(var/path_key in requirements)
|
||||
var/list/surroundings
|
||||
var/amount = recipe.reqs?[path_key] || recipe.machinery?[path_key] || recipe.structures?[path_key]
|
||||
if(!amount)//since machinery & structures can have 0 aka CRAFTING_MACHINERY_USE - i.e. use it, don't consume it!
|
||||
continue
|
||||
|
||||
@@ -105,3 +105,46 @@
|
||||
/obj/item/stack/sheet/iron = 30,
|
||||
)
|
||||
category = CAT_STRUCTURE
|
||||
|
||||
/datum/crafting_recipe/secure_safe
|
||||
name = "Secure safe"
|
||||
result = /obj/item/wallframe/secure_safe
|
||||
reqs = list(
|
||||
/obj/item/stack/sheet/plasteel = 10,
|
||||
/obj/item/stack/sheet/mineral/titanium = 5,
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stack/rods = 5,
|
||||
/obj/item/wallframe/button = 1,
|
||||
)
|
||||
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_DRILL)
|
||||
time = 30 SECONDS
|
||||
category = CAT_STRUCTURE
|
||||
|
||||
/datum/crafting_recipe/vault
|
||||
name = "Vault"
|
||||
result = /obj/structure/safe/open
|
||||
reqs = list(
|
||||
/obj/item/stack/sheet/mineral/metal_hydrogen = 20,
|
||||
/obj/item/stack/sheet/mineral/plastitanium = 10,
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stack/rods = 5,
|
||||
/obj/item/wallframe/secure_safe = 1,
|
||||
)
|
||||
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_DRILL)
|
||||
time = 90 SECONDS
|
||||
category = CAT_STRUCTURE
|
||||
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND
|
||||
|
||||
/datum/crafting_recipe/vault_floor
|
||||
name = "Floor Vault"
|
||||
result = /obj/structure/safe/floor/open
|
||||
reqs = list(
|
||||
/obj/item/stack/sheet/mineral/metal_hydrogen = 20,
|
||||
/obj/item/stack/sheet/mineral/plastitanium = 10,
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stack/rods = 5,
|
||||
)
|
||||
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_DRILL)
|
||||
time = 90 SECONDS
|
||||
category = CAT_STRUCTURE
|
||||
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND
|
||||
|
||||
@@ -118,3 +118,14 @@
|
||||
)
|
||||
category = CAT_TOOLS
|
||||
|
||||
/datum/crafting_recipe/jaws_of_recovery
|
||||
name = "Modified Jaws of Life"
|
||||
time = 10 SECONDS
|
||||
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
result = /obj/item/crowbar/power/paramedic/silent
|
||||
reqs = list(
|
||||
/obj/item/crowbar/power = 1,
|
||||
/obj/item/bonesetter = 1,
|
||||
)
|
||||
category = CAT_TOOLS
|
||||
|
||||
|
||||
@@ -34,13 +34,8 @@
|
||||
canthold = list(/obj/item/storage/briefcase/secure),
|
||||
)
|
||||
|
||||
|
||||
src.lock_code = lock_code
|
||||
if(!isnull(lock_code))
|
||||
atom_parent.atom_storage.set_locked(STORAGE_FULLY_LOCKED)
|
||||
src.can_hack_open = can_hack_open
|
||||
|
||||
atom_parent.update_appearance()
|
||||
set_lock_code(lock_code)
|
||||
|
||||
/datum/component/lockable_storage/RegisterWithParent()
|
||||
. = ..()
|
||||
@@ -144,8 +139,18 @@
|
||||
if(!tool.use_tool(parent, user, 40 SECONDS, volume = 50))
|
||||
return
|
||||
source.balloon_alert(user, "hacked")
|
||||
set_lock_code(null)
|
||||
|
||||
/datum/component/lockable_storage/proc/break_lock()
|
||||
can_hack_open = FALSE // since it's broken for good
|
||||
lock_code = null
|
||||
|
||||
var/obj/source = parent
|
||||
source.obj_flags |= EMAGGED
|
||||
source.atom_storage.locked = STORAGE_NOT_LOCKED
|
||||
SEND_SIGNAL(source, COMSIG_LOCKABLE_STORAGE_SET_CODE, lock_code)
|
||||
source.update_appearance()
|
||||
|
||||
/datum/component/lockable_storage/proc/on_emag(obj/source, mob/user, obj/item/card/emag/emag_card)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
@@ -154,17 +159,36 @@
|
||||
|
||||
if(source.obj_flags & EMAGGED)
|
||||
return FALSE
|
||||
source.obj_flags |= EMAGGED
|
||||
can_hack_open = FALSE // since it's broken for good
|
||||
|
||||
source.visible_message(span_warning("Sparks fly from [source]!"), blind_message = span_hear("You hear a faint electrical spark."))
|
||||
source.balloon_alert(user, "lock destroyed")
|
||||
playsound(source, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
lock_code = null
|
||||
source.atom_storage.locked = STORAGE_NOT_LOCKED
|
||||
source.update_appearance()
|
||||
break_lock()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/**
|
||||
* Sets the lock code for this storage and updates the locked state accordingly
|
||||
* Arguments:
|
||||
* * new_code - The new lock code to set, can be null to remove the code
|
||||
*/
|
||||
/datum/component/lockable_storage/proc/set_lock_code(new_code, mob/living/user)
|
||||
var/obj/source = parent
|
||||
|
||||
// Can't set lock code if the electronics are emagged
|
||||
if(source.obj_flags & EMAGGED)
|
||||
return FALSE
|
||||
|
||||
lock_code = new_code
|
||||
SEND_SIGNAL(source, COMSIG_LOCKABLE_STORAGE_SET_CODE, new_code)
|
||||
var/lock_state = lock_code ? STORAGE_FULLY_LOCKED : STORAGE_NOT_LOCKED
|
||||
source.atom_storage.set_locked(lock_state)
|
||||
source.update_appearance()
|
||||
|
||||
if(istype(user) && new_code)
|
||||
to_chat(user, span_notice("You set the [source] pincode to [lock_code]."))
|
||||
|
||||
return TRUE
|
||||
|
||||
///Updates the icon state depending on if we're locked or not.
|
||||
/datum/component/lockable_storage/proc/on_update_icon_state(obj/source)
|
||||
SIGNAL_HANDLER
|
||||
@@ -219,7 +243,7 @@
|
||||
if(!lock_code)
|
||||
if(length(numeric_input) != 5)
|
||||
return TRUE
|
||||
lock_code = numeric_input
|
||||
set_lock_code(numeric_input, usr)
|
||||
numeric_input = ""
|
||||
return TRUE
|
||||
//unlocking the current code.
|
||||
|
||||
@@ -475,3 +475,60 @@
|
||||
var/obj/vehicle/ridden/wheelchair/motorized/our_chair = parent
|
||||
if(istype(our_chair) && our_chair.power_cell)
|
||||
our_chair.power_cell.use(our_chair.energy_usage / max(our_chair.power_efficiency, 1) * 0.05)
|
||||
|
||||
/datum/component/riding/vehicle/golfcart
|
||||
ride_check_flags = RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER
|
||||
vehicle_move_delay = 1.5
|
||||
keytype = /obj/item/key/golfcart
|
||||
|
||||
/datum/component/riding/vehicle/golfcart/restore_parent_layer_and_offsets()
|
||||
// just don't restore anything.
|
||||
// restoring layers fucks stuff to do with the rear part
|
||||
return
|
||||
|
||||
/datum/component/riding/vehicle/golfcart/driver_move(atom/movable/movable_parent, mob/living/user, direction)
|
||||
if (!istype(parent, /obj/vehicle/ridden/golfcart))
|
||||
return ..()
|
||||
var/obj/vehicle/ridden/golfcart/cart = parent
|
||||
if (!cart.cell && !cart.is_hotrod())
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
if (cart.cell)
|
||||
if (cart.cell.charge <= 0)
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
if (get_turf(cart.child) == get_step(cart, direction))
|
||||
cart.set_movedelay_effect(2)
|
||||
else
|
||||
cart.set_movedelay_effect(1)
|
||||
vehicle_move_delay = cart.movedelay
|
||||
return ..()
|
||||
|
||||
/datum/component/riding/vehicle/golfcart/handle_ride(mob/user, direction)
|
||||
if (!istype(parent, /obj/vehicle/ridden/golfcart))
|
||||
return ..()
|
||||
var/obj/vehicle/ridden/golfcart/cart = parent
|
||||
if (cart.cell)
|
||||
var/charge_to_use = min(cart.charge_per_move, cart.cell.charge)
|
||||
cart.cell.use(charge_to_use)
|
||||
return ..()
|
||||
|
||||
/datum/component/riding/vehicle/golfcart/update_parent_layer_and_offsets(dir, animate)
|
||||
. = ..()
|
||||
if (istype(parent, /obj))
|
||||
var/obj/objectified = parent
|
||||
objectified.update_appearance(UPDATE_ICON)
|
||||
|
||||
/datum/component/riding/vehicle/golfcart/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, -16),
|
||||
TEXT_SOUTH = list(0, 10),
|
||||
TEXT_EAST = list(-8, 2),
|
||||
TEXT_WEST = list(8, 2),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/golfcart/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(0, 0, VEHICLE_LAYER),
|
||||
TEXT_WEST = list(0, 0, VEHICLE_LAYER),
|
||||
)
|
||||
|
||||
@@ -45,13 +45,17 @@
|
||||
start_windup()
|
||||
|
||||
/datum/component/throwbonus_on_windup/proc/start_windup()
|
||||
if(!QDELETED(our_bar))
|
||||
CRASH("throwbonus_on_windup component attempted to start windup while already winding up a throw!")
|
||||
|
||||
throwforce_bonus = initial(throwforce_bonus)
|
||||
var/mob/living/our_holder = holder?.resolve()
|
||||
if(isnull(holder))
|
||||
return
|
||||
|
||||
if(throw_text)
|
||||
to_chat(our_holder, span_warning(throw_text))
|
||||
|
||||
var/x_position = CEILING(our_holder.get_visual_width() * 0.5, 1)
|
||||
our_bar = new()
|
||||
our_bar.maximum_count = maximum_bonus
|
||||
@@ -76,9 +80,12 @@
|
||||
holder = null
|
||||
return ..()
|
||||
|
||||
/datum/component/throwbonus_on_windup/proc/throw_change(datum/source, throw_mode)
|
||||
/datum/component/throwbonus_on_windup/proc/throw_change(mob/living/source, throw_mode)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if (source.get_active_held_item() != parent)
|
||||
return
|
||||
|
||||
if(throw_mode)
|
||||
start_windup()
|
||||
else
|
||||
|
||||
@@ -2,40 +2,26 @@
|
||||
/datum/component/wall_mounted
|
||||
dupe_mode = COMPONENT_DUPE_ALLOWED
|
||||
/// The wall our object is currently linked to.
|
||||
var/turf/hanging_wall_turf
|
||||
/// Callback to the parent's proc to call on the linked object when the wall disappear's or changes.
|
||||
var/datum/callback/on_drop
|
||||
var/turf/closed/wall/hanging_wall_turf
|
||||
|
||||
/datum/component/wall_mounted/Initialize(target_wall, on_drop_callback)
|
||||
. = ..()
|
||||
if(!isobj(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
if(!isturf(target_wall))
|
||||
if(!isobj(parent) || !iswallturf(target_wall))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
hanging_wall_turf = target_wall
|
||||
on_drop = on_drop_callback
|
||||
|
||||
/datum/component/wall_mounted/RegisterWithParent()
|
||||
ADD_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src))
|
||||
RegisterSignal(hanging_wall_turf, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
|
||||
RegisterSignal(hanging_wall_turf, COMSIG_TURF_CHANGE, PROC_REF(on_turf_changing))
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
|
||||
RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_linked_destroyed))
|
||||
|
||||
/datum/component/wall_mounted/UnregisterFromParent()
|
||||
REMOVE_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src))
|
||||
UnregisterSignal(hanging_wall_turf, list(COMSIG_ATOM_EXAMINE, COMSIG_TURF_CHANGE))
|
||||
UnregisterSignal(parent, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED))
|
||||
UnregisterSignal(parent, COMSIG_MOVABLE_MOVED)
|
||||
hanging_wall_turf = null
|
||||
|
||||
/**
|
||||
* Basic reference handling if the hanging/linked object is destroyed first.
|
||||
*/
|
||||
/datum/component/wall_mounted/proc/on_linked_destroyed()
|
||||
SIGNAL_HANDLER
|
||||
if(!QDELING(src))
|
||||
qdel(src)
|
||||
|
||||
/**
|
||||
* When the wall is examined, explains that it's supporting the linked object.
|
||||
*/
|
||||
@@ -49,7 +35,8 @@
|
||||
*/
|
||||
/datum/component/wall_mounted/proc/on_turf_changing(datum/source, path, new_baseturfs, flags, post_change_callbacks)
|
||||
SIGNAL_HANDLER
|
||||
if (ispath(path, /turf/open))
|
||||
|
||||
if(ispath(path, /turf/open))
|
||||
drop_wallmount()
|
||||
|
||||
|
||||
@@ -69,34 +56,21 @@
|
||||
* Except for intercoms, which are handled by creating a new wallframe intercom, as they're apparently items.
|
||||
*/
|
||||
/datum/component/wall_mounted/proc/drop_wallmount()
|
||||
SIGNAL_HANDLER
|
||||
PRIVATE_PROC(TRUE)
|
||||
|
||||
var/obj/hanging_parent = parent
|
||||
hanging_parent.visible_message(message = span_warning("\The [hanging_parent] falls apart!"), vision_distance = 5)
|
||||
hanging_parent.deconstruct(FALSE)
|
||||
|
||||
if(on_drop)
|
||||
hanging_parent.visible_message(message = span_warning("\The [hanging_parent] falls off the wall!"), vision_distance = 5)
|
||||
on_drop.Invoke(hanging_parent)
|
||||
else
|
||||
hanging_parent.visible_message(message = span_warning("\The [hanging_parent] falls apart!"), vision_distance = 5)
|
||||
hanging_parent.deconstruct()
|
||||
|
||||
if(!QDELING(src))
|
||||
qdel(src) //Well, we fell off the wall, so we're done here.
|
||||
|
||||
/**
|
||||
* Checks object direction and then verifies if there's a wall in that direction. Finally, applies a wall_mounted component to the object.
|
||||
*
|
||||
* @param directional If TRUE, will use the direction of the object to determine the wall to attach to. If FALSE, will use the object's loc.
|
||||
* @param custom_drop_callback If set, will use this callback instead of the default deconstruct callback.
|
||||
*/
|
||||
/obj/proc/find_and_hang_on_wall(directional = TRUE, custom_drop_callback)
|
||||
///Checks object direction and then verifies if there's a wall in that direction. Finally, applies a wall_mounted component to the object.
|
||||
/obj/proc/find_and_hang_on_wall()
|
||||
if(istype(get_area(src), /area/shuttle))
|
||||
return FALSE //For now, we're going to keep the component off of shuttles to avoid the turf changing issue. We'll hit that later really;
|
||||
var/turf/attachable_wall
|
||||
if(directional)
|
||||
attachable_wall = get_step(src, dir)
|
||||
else
|
||||
attachable_wall = loc ///Pull from the curent object loc
|
||||
var/turf/attachable_wall = loc //first attempt to locate a wall in our current turf
|
||||
if(!iswallturf(attachable_wall))
|
||||
return FALSE//Nothing to latch onto, or not the right thing.
|
||||
src.AddComponent(/datum/component/wall_mounted, attachable_wall, custom_drop_callback)
|
||||
attachable_wall = get_step(src, dir) //if no then attempt to locate it in our direction
|
||||
if(!iswallturf(attachable_wall))
|
||||
return FALSE //Nothing to latch onto, or not the right thing.
|
||||
AddComponent(/datum/component/wall_mounted, attachable_wall)
|
||||
return TRUE
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
return
|
||||
|
||||
var/mob/living/carbon/infected_mob = advanced_disease.affected_mob
|
||||
var/obj/item/organ/ears/ears = infected_mob.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
|
||||
switch(advanced_disease.stage)
|
||||
if(3, 4)
|
||||
@@ -53,15 +52,18 @@
|
||||
to_chat(infected_mob, span_warning("[pick("You hear a ringing in your ear.", "Your ears pop.")]"))
|
||||
if(5)
|
||||
if(causes_permanent_deafness)
|
||||
if(ears.damage < ears.maxHealth)
|
||||
if(!HAS_TRAIT_FROM(infected_mob, TRAIT_DEAF, DISEASE_TRAIT))
|
||||
to_chat(infected_mob, span_userdanger("Your ears pop painfully and start bleeding!"))
|
||||
// Just absolutely murder me man
|
||||
ears.apply_organ_damage(ears.maxHealth)
|
||||
infected_mob.adjustOrganLoss(ORGAN_SLOT_EARS, INFINITY)
|
||||
infected_mob.emote("scream")
|
||||
ADD_TRAIT(infected_mob, TRAIT_DEAF, DISEASE_TRAIT)
|
||||
else
|
||||
to_chat(infected_mob, span_userdanger("Your ears pop and begin ringing loudly!"))
|
||||
ears.deaf = min(20, ears.deaf + 15)
|
||||
var/obj/item/organ/ears/ears = infected_mob.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
var/deafness_to_add = min(40 SECONDS - ears.temporary_deafness, 30 SECONDS)
|
||||
if(deafness_to_add > 0)
|
||||
ears.adjust_temporary_deafness(deafness_to_add)
|
||||
|
||||
/datum/symptom/deafness/on_stage_change(datum/disease/advance/advanced_disease)
|
||||
. = ..()
|
||||
|
||||
@@ -96,7 +96,8 @@
|
||||
if(4, 5)
|
||||
if(advanced_disease.has_required_infectious_organ(infected_mob, ORGAN_SLOT_EARS))
|
||||
var/obj/item/organ/ears/ears = infected_mob.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
ears.adjustEarDamage(-4, -4)
|
||||
ears?.apply_organ_damage(-4)
|
||||
ears?.adjust_temporary_deafness(-8 SECONDS)
|
||||
|
||||
if(!advanced_disease.has_required_infectious_organ(infected_mob, ORGAN_SLOT_EYES))
|
||||
return
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
if(length(user.held_items) < 0 || iscyborg(user) || source.anchored)
|
||||
return
|
||||
examine_list += span_smallnotice("You could bind [source.p_they()] to your wrist with a pair of handcuffs...")
|
||||
examine_list += span_smallnotice("You could bind [source.p_them()] to your wrist with a pair of handcuffs...")
|
||||
|
||||
///Give context to players holding a pair of handcuffs when hovering the item
|
||||
/datum/element/cuffable_item/proc/on_requesting_context_from_item(datum/source, list/context, obj/item/held_item, mob/user)
|
||||
|
||||
@@ -27,8 +27,9 @@
|
||||
for(var/i in user_by_item)
|
||||
var/mob/living/carbon/user = user_by_item[i]
|
||||
var/obj/item/organ/ears/ears = user.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
if(!ears || !ears.damage || (ears.organ_flags & ORGAN_FAILING) || IS_ROBOTIC_ORGAN(ears))
|
||||
if(!ears || (ears.organ_flags & ORGAN_FAILING) || IS_ROBOTIC_ORGAN(ears))
|
||||
continue
|
||||
ears.deaf = max(ears.deaf - 0.25 * seconds_per_tick, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged
|
||||
|
||||
ears.adjust_temporary_deafness(-0.5 SECONDS * seconds_per_tick)
|
||||
ears.apply_organ_damage(-0.025 * seconds_per_tick)
|
||||
CHECK_TICK
|
||||
|
||||
@@ -14,8 +14,10 @@
|
||||
var/table_required
|
||||
///Verb used in processing food (such as slice, flatten), defaults to process
|
||||
var/screentip_verb
|
||||
///Sound to play when the do_after begins
|
||||
var/sound_to_play
|
||||
|
||||
/datum/element/processable/Attach(datum/target, tool_behaviour, result_atom_type, amount_created = 3, time_to_process = 2 SECONDS, table_required = FALSE, screentip_verb = "Process")
|
||||
/datum/element/processable/Attach(datum/target, tool_behaviour, result_atom_type, amount_created = 3, time_to_process = 2 SECONDS, table_required = FALSE, screentip_verb = "Process", sound_to_play = null)
|
||||
. = ..()
|
||||
if(!isatom(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
@@ -26,6 +28,7 @@
|
||||
src.result_atom_type = result_atom_type
|
||||
src.table_required = table_required
|
||||
src.screentip_verb = screentip_verb
|
||||
src.sound_to_play = sound_to_play
|
||||
|
||||
var/atom/atom_target = target
|
||||
atom_target.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1
|
||||
@@ -67,7 +70,7 @@
|
||||
to_chat(user, span_notice("You cannot make [initial(result_atom_type.name)] here! You need a table or at least a tray."))
|
||||
return
|
||||
|
||||
mutable_recipes += list(list(TOOL_PROCESSING_RESULT = result_atom_type, TOOL_PROCESSING_AMOUNT = amount_created, TOOL_PROCESSING_TIME = time_to_process))
|
||||
mutable_recipes += list(list(TOOL_PROCESSING_RESULT = result_atom_type, TOOL_PROCESSING_AMOUNT = amount_created, TOOL_PROCESSING_TIME = time_to_process, TOOL_PROCESSING_SOUND = sound_to_play))
|
||||
|
||||
///So people know what the frick they're doing without reading from a wiki page (I mean they will inevitably but i'm trying to help, ok?)
|
||||
/datum/element/processable/proc/OnExamine(atom/source, mob/user, list/examine_list)
|
||||
|
||||
@@ -28,15 +28,17 @@
|
||||
return NONE
|
||||
|
||||
var/obj/renamed_obj = interacting_with
|
||||
var/obj/item/tool = source
|
||||
|
||||
if(!(renamed_obj.obj_flags & UNIQUE_RENAME))
|
||||
if(!(renamed_obj.obj_flags & UNIQUE_RENAME) || !user.can_write(tool))
|
||||
return NONE
|
||||
|
||||
INVOKE_ASYNC(src, PROC_REF(async_rename), user, renamed_obj)
|
||||
INVOKE_ASYNC(src, PROC_REF(async_rename), user, renamed_obj, !(renamed_obj.obj_flags & RENAME_NO_DESC))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/datum/element/tool_renaming/proc/async_rename(mob/living/user, obj/renamed_obj)
|
||||
var/custom_choice = tgui_input_list(user, "What would you like to edit?", "Customization", list(OPTION_RENAME, OPTION_DESCRIPTION, OPTION_RESET))
|
||||
/datum/element/tool_renaming/proc/async_rename(mob/living/user, obj/renamed_obj, description_option)
|
||||
if(!renamed_obj.rename_checks(user))
|
||||
return
|
||||
var/custom_choice = tgui_input_list(user, "What would you like to edit?", "Customization", list(OPTION_RENAME, description_option? OPTION_DESCRIPTION : null, OPTION_RESET))
|
||||
if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj) || isnull(custom_choice))
|
||||
return
|
||||
|
||||
@@ -49,7 +51,7 @@
|
||||
if(input == old_name || !input)
|
||||
to_chat(user, span_notice("You changed [renamed_obj] to... well... [renamed_obj]."))
|
||||
return
|
||||
renamed_obj.AddComponent(/datum/component/rename, input, renamed_obj.desc)
|
||||
renamed_obj.AddComponent(/datum/component/rename, renamed_obj.nameformat(input, user), renamed_obj.desc)
|
||||
to_chat(user, span_notice("You have successfully renamed \the [old_name] to [renamed_obj]."))
|
||||
renamed_obj.update_appearance(UPDATE_NAME)
|
||||
|
||||
@@ -61,13 +63,14 @@
|
||||
if(input == old_desc || !input)
|
||||
to_chat(user, span_notice("You decide against changing [renamed_obj]'s description."))
|
||||
return
|
||||
renamed_obj.AddComponent(/datum/component/rename, renamed_obj.name, input)
|
||||
renamed_obj.AddComponent(/datum/component/rename, renamed_obj.name, renamed_obj.descformat(input, user))
|
||||
to_chat(user, span_notice("You have successfully changed [renamed_obj]'s description."))
|
||||
renamed_obj.update_appearance(UPDATE_DESC)
|
||||
|
||||
if(OPTION_RESET)
|
||||
qdel(renamed_obj.GetComponent(/datum/component/rename))
|
||||
to_chat(user, span_notice("You have successfully reset [renamed_obj]'s name and description."))
|
||||
to_chat(user, span_notice("You have successfully reset [renamed_obj]'s name[renamed_obj.obj_flags & RENAME_NO_DESC? "." : " and description."]"))
|
||||
renamed_obj.rename_reset()
|
||||
renamed_obj.update_appearance(UPDATE_NAME | UPDATE_DESC)
|
||||
|
||||
#undef OPTION_RENAME
|
||||
|
||||
@@ -353,6 +353,7 @@
|
||||
ACCESS_MORGUE,
|
||||
ACCESS_SURGERY,
|
||||
ACCESS_VIROLOGY,
|
||||
ACCESS_PARAMEDIC,
|
||||
)
|
||||
template_access = list(
|
||||
ACCESS_CAPTAIN,
|
||||
@@ -432,6 +433,7 @@
|
||||
ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_SURGERY,
|
||||
ACCESS_VIROLOGY,
|
||||
ACCESS_PARAMEDIC,
|
||||
)
|
||||
minimal_wildcard_access = list(
|
||||
ACCESS_CMO,
|
||||
@@ -519,6 +521,7 @@
|
||||
ACCESS_PSYCHOLOGY,
|
||||
ACCESS_PHARMACY,
|
||||
ACCESS_VIROLOGY,
|
||||
ACCESS_PARAMEDIC,
|
||||
)
|
||||
template_access = list(
|
||||
ACCESS_CAPTAIN,
|
||||
@@ -797,6 +800,7 @@
|
||||
ACCESS_PHARMACY,
|
||||
ACCESS_SURGERY,
|
||||
ACCESS_VIROLOGY,
|
||||
ACCESS_PARAMEDIC,
|
||||
)
|
||||
template_access = list(
|
||||
ACCESS_CAPTAIN,
|
||||
@@ -840,6 +844,7 @@
|
||||
ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_MORGUE,
|
||||
ACCESS_MECH_MEDICAL,
|
||||
ACCESS_PARAMEDIC,
|
||||
)
|
||||
extra_access = list(
|
||||
ACCESS_BIT_DEN,
|
||||
@@ -1194,6 +1199,7 @@
|
||||
ACCESS_PLUMBING,
|
||||
ACCESS_SURGERY,
|
||||
ACCESS_VIROLOGY,
|
||||
ACCESS_PARAMEDIC,
|
||||
)
|
||||
honorifics = list("Orderly", "Officer")
|
||||
|
||||
|
||||
@@ -26,11 +26,12 @@
|
||||
|
||||
///Note that this spawn list is also in the lavaland generator
|
||||
weighted_feature_spawn_list = list(
|
||||
/obj/structure/geyser/hollowwater = 10,
|
||||
/obj/structure/geyser/plasma_oxide = 10,
|
||||
/obj/structure/geyser/protozine = 10,
|
||||
/obj/structure/geyser/hollowwater = 8,
|
||||
/obj/structure/geyser/plasma_oxide = 8,
|
||||
/obj/structure/geyser/protozine = 8,
|
||||
/obj/structure/geyser/random = 2,
|
||||
/obj/structure/geyser/wittel = 10,
|
||||
/obj/structure/geyser/wittel = 8,
|
||||
/obj/structure/geyser/chiral_buffer = 8,
|
||||
/obj/structure/ore_vent/boss/icebox = 1,
|
||||
)
|
||||
|
||||
@@ -45,11 +46,12 @@
|
||||
|
||||
feature_spawn_chance = 0.15
|
||||
weighted_feature_spawn_list = list(
|
||||
/obj/structure/geyser/hollowwater = 10,
|
||||
/obj/structure/geyser/plasma_oxide = 10,
|
||||
/obj/structure/geyser/protozine = 10,
|
||||
/obj/structure/geyser/hollowwater = 8,
|
||||
/obj/structure/geyser/plasma_oxide = 8,
|
||||
/obj/structure/geyser/protozine = 8,
|
||||
/obj/structure/geyser/random = 2,
|
||||
/obj/structure/geyser/wittel = 10,
|
||||
/obj/structure/geyser/wittel = 8,
|
||||
/obj/structure/geyser/chiral_buffer = 8,
|
||||
)
|
||||
|
||||
weighted_flora_spawn_list = list(
|
||||
|
||||
@@ -29,11 +29,12 @@
|
||||
|
||||
///Note that this spawn list is also in the icemoon generator
|
||||
weighted_feature_spawn_list = list(
|
||||
/obj/structure/geyser/hollowwater = 10,
|
||||
/obj/structure/geyser/plasma_oxide = 10,
|
||||
/obj/structure/geyser/protozine = 10,
|
||||
/obj/structure/geyser/hollowwater = 8,
|
||||
/obj/structure/geyser/plasma_oxide = 8,
|
||||
/obj/structure/geyser/protozine = 8,
|
||||
/obj/structure/geyser/random = 2,
|
||||
/obj/structure/geyser/wittel = 10,
|
||||
/obj/structure/geyser/wittel = 8,
|
||||
/obj/structure/geyser/chiral_buffer = 8,
|
||||
/obj/structure/ore_vent/boss = 1,
|
||||
)
|
||||
|
||||
|
||||
@@ -565,11 +565,19 @@
|
||||
var/pet_message = "%DEAD_MOB% just died!!"
|
||||
/// Message variant for desensitized people (security, medical, cult with halo, etc)
|
||||
var/desensitized_message = "I saw %DEAD_MOB% die."
|
||||
/// Standard message variant
|
||||
var/normal_message = "I just saw %DEAD_MOB% die. How horrible..."
|
||||
/// Naive mobs are immune to the effect
|
||||
var/naive_immune = TRUE
|
||||
|
||||
/datum/mood_event/see_death/add_effects(mob/dead_mob)
|
||||
if(isnull(dead_mob))
|
||||
return
|
||||
if(HAS_TRAIT(owner, TRAIT_NAIVE) && naive_immune)
|
||||
description = "Have a good nap, [dead_mob.name]."
|
||||
mood_change = 0
|
||||
timeout *= 0.2
|
||||
return
|
||||
if(HAS_TRAIT(dead_mob, TRAIT_SPAWNED_MOB))
|
||||
mood_change *= 0.25
|
||||
timeout *= 0.2
|
||||
@@ -637,6 +645,7 @@
|
||||
pet_message = "%DEAD_MOB% just exploded!!"
|
||||
desensitized_message = "I saw %DEAD_MOB% explode."
|
||||
normal_message = "%DEAD_MOB% just exploded in front of me!!"
|
||||
naive_immune = FALSE
|
||||
|
||||
/datum/mood_event/see_death/dusted
|
||||
description = "Someone was just vaporized in front of me!! I don't feel so good..."
|
||||
@@ -646,6 +655,7 @@
|
||||
pet_message = "%DEAD_MOB% just vaporized!!"
|
||||
desensitized_message = "I saw %DEAD_MOB% get vaporized."
|
||||
normal_message = "%DEAD_MOB% was just vaporized in front of me!!"
|
||||
naive_immune = FALSE
|
||||
|
||||
/datum/mood_event/slots/loss
|
||||
description = "Aww dang it!"
|
||||
|
||||
@@ -24,20 +24,20 @@
|
||||
var/id_trim = null
|
||||
|
||||
/// Type path of item to go in uniform slot
|
||||
var/uniform = null
|
||||
var/obj/item/uniform = null
|
||||
|
||||
/// Type path of item to go in suit slot
|
||||
var/suit = null
|
||||
var/obj/item/suit = null
|
||||
|
||||
/**
|
||||
* Type path of item to go in suit storage slot
|
||||
*
|
||||
* (make sure it's valid for that suit)
|
||||
*/
|
||||
var/suit_store = null
|
||||
var/obj/item/suit_store = null
|
||||
|
||||
/// Type path of item to go in back slot
|
||||
var/back = null
|
||||
var/obj/item/back = null
|
||||
|
||||
/**
|
||||
* list of items that should go in the backpack of the user
|
||||
@@ -47,7 +47,7 @@
|
||||
var/list/backpack_contents = null
|
||||
|
||||
/// Type path of item to go in belt slot
|
||||
var/belt = null
|
||||
var/obj/item/belt = null
|
||||
|
||||
/**
|
||||
* list of items that should go in the belt of the user
|
||||
@@ -513,7 +513,7 @@
|
||||
for(var/item in beltpack)
|
||||
var/itype = text2path(item)
|
||||
if(itype)
|
||||
belt_contents[itype] = belt[item]
|
||||
belt_contents[itype] = beltpack[item]
|
||||
box = text2path(outfit_data["box"])
|
||||
var/list/impl = outfit_data["implants"]
|
||||
implants = list()
|
||||
|
||||
@@ -3,19 +3,16 @@
|
||||
desc = "You got caught up in the skillchip craze a few years back, and had one of the commercially available chips implanted into yourself."
|
||||
icon = FA_ICON_MICROCHIP
|
||||
value = 2
|
||||
gain_text = span_notice("The chip in your head itches a bit.")
|
||||
lose_text = span_danger("You don't feel so chipped anymore..")
|
||||
medical_record_text = "Patient explained how they got caught up in 'the skillchip chase' recently, and now the chip in their head itches every so often. Dumbass."
|
||||
gain_text = span_notice("You suddenly feels chipped.")
|
||||
lose_text = span_danger("You don't feel so chipped anymore.")
|
||||
medical_record_text = "Patient explained how they got caught up in 'the skillchip chase' recently, and now they have some useless chip in their head. Dumbass."
|
||||
mail_goodies = list(
|
||||
/obj/item/skillchip/matrix_taunt,
|
||||
/obj/item/skillchip/big_pointer,
|
||||
/obj/item/skillchip/acrobatics,
|
||||
/obj/item/storage/pill_bottle/mannitol/braintumor,
|
||||
)
|
||||
/// Variable that holds the chip, used on removal.
|
||||
var/obj/item/skillchip/installed_chip
|
||||
///itchy status effect we give our owner
|
||||
var/datum/itchy_effect
|
||||
|
||||
/datum/quirk_constant_data/chipped
|
||||
associated_typepath = /datum/quirk/chipped
|
||||
@@ -27,8 +24,8 @@
|
||||
if(isnull(chip_pref))
|
||||
return ..()
|
||||
installed_chip = GLOB.quirk_chipped_choice[chip_pref] || GLOB.quirk_chipped_choice[pick(GLOB.quirk_chipped_choice)]
|
||||
gain_text = span_notice("The [installed_chip::name] in your head itches a bit.")
|
||||
lose_text = span_notice("Your head stops itching so much.")
|
||||
gain_text = span_notice("The [installed_chip::name] in your head buzzes with knowledge.")
|
||||
lose_text = span_notice("You stop feeling the chip inside your head.")
|
||||
return ..()
|
||||
|
||||
/datum/quirk/chipped/add_unique(client/client_source)
|
||||
@@ -37,48 +34,9 @@
|
||||
|
||||
var/mob/living/carbon/quirk_holder_carbon = quirk_holder
|
||||
installed_chip = new installed_chip()
|
||||
|
||||
RegisterSignals(installed_chip, list(COMSIG_QDELETING, COMSIG_SKILLCHIP_REMOVED), PROC_REF(remove_effect))
|
||||
RegisterSignal(installed_chip, COMSIG_SKILLCHIP_IMPLANTED, PROC_REF(apply_effect))
|
||||
|
||||
quirk_holder_carbon.implant_skillchip(installed_chip, force = TRUE)
|
||||
installed_chip.try_activate_skillchip(silent = FALSE, force = TRUE)
|
||||
|
||||
/datum/quirk/chipped/proc/apply_effect(datum/source, obj/item/brain_applied)
|
||||
SIGNAL_HANDLER
|
||||
var/mob/living/carbon/quirk_holder_carbon = quirk_holder
|
||||
if(brain_applied == quirk_holder_carbon.get_organ_slot(ORGAN_SLOT_BRAIN))
|
||||
itchy_effect = quirk_holder.apply_status_effect(/datum/status_effect/itchy_skillchip_quirk)
|
||||
|
||||
/datum/quirk/chipped/proc/remove_effect(datum/source, obj/item/brain_removed)
|
||||
SIGNAL_HANDLER
|
||||
var/mob/living/carbon/quirk_holder_carbon = quirk_holder
|
||||
if(QDELING(source) || brain_removed == quirk_holder_carbon.get_organ_slot(ORGAN_SLOT_BRAIN))
|
||||
quirk_holder.remove_status_effect(itchy_effect)
|
||||
itchy_effect = null
|
||||
|
||||
/datum/quirk/chipped/remove()
|
||||
QDEL_NULL(installed_chip)
|
||||
if(itchy_effect)
|
||||
quirk_holder.remove_status_effect(itchy_effect)
|
||||
itchy_effect = null
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/itchy_skillchip_quirk
|
||||
id = "itchy skillchip"
|
||||
tick_interval_lowerbound = 5 SECONDS
|
||||
tick_interval_upperbound = 10 MINUTES
|
||||
alert_type = null
|
||||
///lower damage we apply to our itchy owner
|
||||
var/minimum_damage = 1
|
||||
///upper damage we apply to our itchy owner
|
||||
var/maximum_damage = 5
|
||||
|
||||
/datum/status_effect/itchy_skillchip_quirk/tick(seconds_between_ticks)
|
||||
var/mob/living/carbon/carbon_owner = owner
|
||||
var/obj/item/organ/brain/itchy_brain = carbon_owner.get_organ_slot(ORGAN_SLOT_BRAIN)
|
||||
if(isnull(itchy_brain))
|
||||
return
|
||||
itchy_brain.apply_organ_damage(rand(minimum_damage, maximum_damage), maximum = itchy_brain.maxHealth * 0.3)
|
||||
if(owner.stat == CONSCIOUS && !owner.incapacitated && owner.get_empty_held_indexes())
|
||||
to_chat(owner, span_warning("You scratch the itch in your head."))
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
owner.clear_mood_event("on_fire")
|
||||
SEND_SIGNAL(owner, COMSIG_LIVING_EXTINGUISHED, owner)
|
||||
cache_stacks()
|
||||
for(var/obj/item/equipped in (owner.get_equipped_items(INCLUDE_HELD)))
|
||||
for(var/obj/item/equipped as anything in owner.get_equipped_items(INCLUDE_HELD|INCLUDE_PROSTHETICS|INCLUDE_ABSTRACT))
|
||||
equipped.extinguish()
|
||||
|
||||
/datum/status_effect/fire_handler/fire_stacks/on_remove()
|
||||
|
||||
+15
-11
@@ -336,11 +336,12 @@
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Ensure a list of atoms/reagents exists inside this atom
|
||||
* Called whenever an item is crafted, either via stack recipes or crafting recipes from the crafting menu
|
||||
*
|
||||
* Cycles through the list of movables used up in the recipe and calls used_in_craft() for each of them
|
||||
* then it either moves them inside the object or deletes
|
||||
* them depending on whether they're in the list of parts for the recipe or not
|
||||
* By default, it just cycles through the list of movables used in the recipe and calls used_in_craft() for each of them,
|
||||
* then it either moves them inside the object if they're in the list of parts for the recipe
|
||||
* or deletes them if they're not.
|
||||
* The proc can be overriden by subtypes, as long as it always call parent.
|
||||
*/
|
||||
/atom/proc/on_craft_completion(list/components, datum/crafting_recipe/current_recipe, atom/crafter)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
@@ -349,17 +350,17 @@
|
||||
var/list/parts_by_type = remaining_parts?.Copy()
|
||||
for(var/parttype in parts_by_type) //necessary for our is_type_in_list() call with the zebra arg set to true
|
||||
parts_by_type[parttype] = parttype
|
||||
for(var/obj/item/item in components) // machinery or structure objects in the list are guaranteed to be used up. We only check items.
|
||||
item.used_in_craft(src, current_recipe)
|
||||
var/matched_type = is_type_in_list(item, parts_by_type, zebra = TRUE)
|
||||
for(var/atom/movable/movable as anything in components) // machinery or structure objects in the list are guaranteed to be used up. We only check items.
|
||||
movable.used_in_craft(src, current_recipe)
|
||||
var/matched_type = is_type_in_list(movable, parts_by_type, zebra = TRUE)
|
||||
if(!matched_type)
|
||||
continue
|
||||
|
||||
if(isliving(item.loc))
|
||||
var/mob/living/living = item.loc
|
||||
living.transferItemToLoc(item, src)
|
||||
if(isliving(movable.loc) && isitem(movable))
|
||||
var/mob/living/living = movable.loc
|
||||
living.transferItemToLoc(movable, src)
|
||||
else
|
||||
item.forceMove(src)
|
||||
movable.forceMove(src)
|
||||
|
||||
if(matched_type)
|
||||
remaining_parts[matched_type] -= 1
|
||||
@@ -653,7 +654,10 @@
|
||||
|
||||
/atom/proc/StartProcessingAtom(mob/living/user, obj/item/process_item, list/chosen_option)
|
||||
var/processing_time = chosen_option[TOOL_PROCESSING_TIME]
|
||||
var/sound_to_play = chosen_option[TOOL_PROCESSING_SOUND]
|
||||
to_chat(user, span_notice("You start working on [src]."))
|
||||
if(sound_to_play)
|
||||
playsound(src, sound_to_play, 50, TRUE)
|
||||
if(!process_item.use_tool(src, user, processing_time, volume=50))
|
||||
return
|
||||
var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT]
|
||||
|
||||
@@ -30,7 +30,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32)
|
||||
//Roundstart/map specific barsigns "belong" in their area and should be renaming it, signs created from wallmounts will not.
|
||||
change_area_name = mapload
|
||||
set_sign(new /datum/barsign/hiddensigns/signoff)
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/barsign/proc/set_sign(datum/barsign/sign)
|
||||
if(!istype(sign))
|
||||
|
||||
@@ -44,16 +44,12 @@
|
||||
* INITIALIZATION
|
||||
*/
|
||||
|
||||
/obj/machinery/button/Initialize(mapload, ndir = 0, built = 0)
|
||||
/obj/machinery/button/Initialize(mapload)
|
||||
. = ..()
|
||||
if(built)
|
||||
setDir(ndir)
|
||||
if(!mapload)
|
||||
set_panel_open(TRUE)
|
||||
update_appearance()
|
||||
|
||||
if(!built && !device && device_type)
|
||||
device = new device_type(src)
|
||||
|
||||
check_access(null)
|
||||
|
||||
if(length(req_access) || length(req_one_access))
|
||||
@@ -64,8 +60,9 @@
|
||||
board.one_access = 1
|
||||
board.accesses = req_one_access
|
||||
|
||||
setup_device()
|
||||
find_and_hang_on_wall()
|
||||
setup_device(mapload)
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
register_context()
|
||||
|
||||
/obj/machinery/button/Destroy()
|
||||
@@ -73,7 +70,9 @@
|
||||
QDEL_NULL(board)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/button/proc/setup_device()
|
||||
/obj/machinery/button/proc/setup_device(mapload)
|
||||
if(mapload && !device && device_type)
|
||||
device = new device_type(src)
|
||||
if(id && istype(device, /obj/item/assembly/control))
|
||||
var/obj/item/assembly/control/control_device = device
|
||||
control_device.id = id
|
||||
@@ -401,17 +400,17 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
|
||||
/obj/machinery/button/door/indestructible
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/machinery/button/door/setup_device()
|
||||
if(!device)
|
||||
if(normaldoorcontrol)
|
||||
var/obj/item/assembly/control/airlock/airlock_device = new(src)
|
||||
airlock_device.specialfunctions = specialfunctions
|
||||
device = airlock_device
|
||||
else
|
||||
var/obj/item/assembly/control/control_device = new(src)
|
||||
control_device.sync_doors = sync_doors
|
||||
device = control_device
|
||||
..()
|
||||
/obj/machinery/button/door/setup_device(mapload)
|
||||
if(mapload)
|
||||
device = normaldoorcontrol ? new /obj/item/assembly/control/airlock(src) : new /obj/item/assembly/control(src)
|
||||
|
||||
if(istype(device, /obj/item/assembly/control/airlock))
|
||||
var/obj/item/assembly/control/airlock/airlock_device = device
|
||||
airlock_device.specialfunctions = specialfunctions
|
||||
else if(istype(device, /obj/item/assembly/control))
|
||||
var/obj/item/assembly/control/control_device = device
|
||||
control_device.sync_doors = sync_doors
|
||||
return ..()
|
||||
|
||||
/obj/machinery/button/door/incinerator_vent_ordmix
|
||||
name = "combustion chamber vent control"
|
||||
@@ -499,10 +498,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
|
||||
device_type = /obj/item/assembly/control/curtain
|
||||
var/sync_doors = TRUE
|
||||
|
||||
/obj/machinery/button/curtain/setup_device()
|
||||
/obj/machinery/button/curtain/setup_device(mapload)
|
||||
. = ..()
|
||||
var/obj/item/assembly/control/curtain = device
|
||||
curtain.sync_doors = sync_doors
|
||||
return ..()
|
||||
if(istype(curtain))
|
||||
curtain.sync_doors = sync_doors
|
||||
|
||||
/obj/machinery/button/crematorium
|
||||
name = "crematorium igniter"
|
||||
|
||||
@@ -103,12 +103,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0)
|
||||
fire = 90
|
||||
acid = 50
|
||||
|
||||
/obj/machinery/camera/Initialize(mapload, ndir, building)
|
||||
/obj/machinery/camera/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
if(building)
|
||||
setDir(ndir)
|
||||
|
||||
for(var/network_name in network)
|
||||
network -= network_name
|
||||
network += LOWER_TEXT(network_name)
|
||||
@@ -130,8 +127,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0)
|
||||
#endif
|
||||
|
||||
alarm_manager = new(src)
|
||||
find_and_hang_on_wall(directional = TRUE, \
|
||||
custom_drop_callback = CALLBACK(src, PROC_REF(deconstruct), FALSE))
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/camera/Destroy(force)
|
||||
if(can_use())
|
||||
|
||||
@@ -70,7 +70,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/Initialize(mapload)
|
||||
. = ..()
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
register_context()
|
||||
RegisterSignal(SSdcs, COMSIG_GLOB_NETWORK_BROADCAST_UPDATED, PROC_REF(on_network_broadcast_updated))
|
||||
speakers = new(src)
|
||||
|
||||
@@ -24,7 +24,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28)
|
||||
/obj/machinery/defibrillator_mount/loaded/Initialize(mapload) //loaded subtype for mapping use
|
||||
. = ..()
|
||||
defib = new/obj/item/defibrillator/loaded(src)
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/defibrillator_mount/Destroy()
|
||||
QDEL_NULL(defib)
|
||||
|
||||
@@ -80,7 +80,8 @@
|
||||
|
||||
/obj/machinery/digital_clock/Initialize(mapload)
|
||||
. = ..()
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
AddElement(/datum/element/beauty, 200)
|
||||
|
||||
/obj/machinery/digital_clock/process(seconds_per_tick)
|
||||
|
||||
@@ -1177,7 +1177,7 @@
|
||||
return
|
||||
|
||||
if(atom_integrity < max_integrity)
|
||||
if(!W.tool_start_check(user, amount=1))
|
||||
if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED))
|
||||
return
|
||||
user.visible_message(span_notice("[user] begins welding the airlock."), \
|
||||
span_notice("You begin repairing the airlock..."), \
|
||||
@@ -1192,7 +1192,7 @@
|
||||
to_chat(user, span_notice("The airlock doesn't need repairing."))
|
||||
|
||||
/obj/machinery/door/airlock/try_to_weld_secondary(obj/item/weldingtool/tool, mob/user)
|
||||
if(!tool.tool_start_check(user, amount=1))
|
||||
if(!tool.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED))
|
||||
return
|
||||
user.visible_message(span_notice("[user] begins [welded ? "unwelding":"welding"] the airlock."), \
|
||||
span_notice("You begin [welded ? "unwelding":"welding"] the airlock..."), \
|
||||
|
||||
@@ -49,10 +49,10 @@
|
||||
fire = 90
|
||||
acid = 30
|
||||
|
||||
/obj/machinery/firealarm/Initialize(mapload, dir, building)
|
||||
/obj/machinery/firealarm/Initialize(mapload)
|
||||
. = ..()
|
||||
id_tag = assign_random_name()
|
||||
if(building)
|
||||
if(!mapload)
|
||||
buildstage = FIRE_ALARM_BUILD_NO_CIRCUIT
|
||||
set_panel_open(TRUE)
|
||||
if(name == initial(name))
|
||||
@@ -78,10 +78,10 @@
|
||||
)
|
||||
|
||||
register_context()
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
update_appearance()
|
||||
|
||||
|
||||
/obj/machinery/firealarm/Destroy()
|
||||
if(my_area)
|
||||
LAZYREMOVE(my_area.firealarms, src)
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
|
||||
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26)
|
||||
|
||||
/obj/machinery/flasher/Initialize(mapload, ndir = 0, built = 0)
|
||||
. = ..() // ..() is EXTREMELY IMPORTANT, never forget to add it
|
||||
if(!built)
|
||||
/obj/machinery/flasher/Initialize(mapload)
|
||||
. = ..()
|
||||
if(mapload)
|
||||
bulb = new(src)
|
||||
find_and_hang_on_wall()
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/flasher/vv_edit_var(vname, vval)
|
||||
. = ..()
|
||||
|
||||
@@ -163,7 +163,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26)
|
||||
spark_system.set_up(2, 1, src)
|
||||
spark_system.attach(src)
|
||||
register_context()
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/sparker/Destroy()
|
||||
QDEL_NULL(spark_system)
|
||||
|
||||
@@ -34,7 +34,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26)
|
||||
area = get_area(src)
|
||||
if(autoname)
|
||||
name = "light switch ([area.name])"
|
||||
find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(deconstruct), TRUE))
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
register_context()
|
||||
update_appearance()
|
||||
|
||||
|
||||
@@ -72,12 +72,13 @@
|
||||
|
||||
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30)
|
||||
|
||||
/obj/machinery/newscaster/Initialize(mapload, ndir, building)
|
||||
/obj/machinery/newscaster/Initialize(mapload)
|
||||
. = ..()
|
||||
GLOB.allCasters += src
|
||||
GLOB.allbountyboards += src
|
||||
update_appearance()
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/newscaster/Destroy()
|
||||
GLOB.allCasters -= src
|
||||
|
||||
@@ -957,12 +957,13 @@ DEFINE_BITFIELD(turret_flags, list(
|
||||
/// List of weakrefs to all turrets
|
||||
var/list/turrets = list()
|
||||
|
||||
/obj/machinery/turretid/Initialize(mapload, ndir = 0, built = 0)
|
||||
/obj/machinery/turretid/Initialize(mapload)
|
||||
. = ..()
|
||||
if(built)
|
||||
if(!mapload)
|
||||
locked = FALSE
|
||||
else
|
||||
find_and_hang_on_wall()
|
||||
power_change() //Checks power and initial settings
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/turretid/Destroy()
|
||||
turrets.Cut()
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
desc = "An unfinished covered turret frame."
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
obj_flags = UNIQUE_RENAME | RENAME_NO_DESC
|
||||
use_power = NO_POWER_USE
|
||||
var/build_step = PTURRET_UNSECURED //the current step in the building process
|
||||
var/finish_name = "turret" //the name applied to the product turret
|
||||
@@ -192,6 +193,12 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/porta_turret_construct/nameformat(input, user)
|
||||
finish_name = input
|
||||
return input
|
||||
|
||||
/obj/machinery/porta_turret_construct/rename_reset()
|
||||
finish_name = initial(finish_name)
|
||||
|
||||
/obj/machinery/porta_turret_construct/attack_hand(mob/user, list/modifiers)
|
||||
. = ..()
|
||||
|
||||
@@ -128,7 +128,8 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
|
||||
if(dept_key)
|
||||
LAZYADD(GLOB.reta_consoles_by_origin[dept_key], src)
|
||||
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/requests_console/Destroy()
|
||||
QDEL_LIST(messages)
|
||||
|
||||
@@ -51,7 +51,7 @@ GLOBAL_DATUM_INIT(status_font, /datum/font, new /datum/font/tiny_unicode/size_12
|
||||
pixel_shift = 32
|
||||
|
||||
//makes it go on the wall when built
|
||||
/obj/machinery/status_display/Initialize(mapload, ndir, building)
|
||||
/obj/machinery/status_display/Initialize(mapload)
|
||||
. = ..()
|
||||
update_appearance()
|
||||
|
||||
@@ -407,7 +407,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/evac, 32)
|
||||
/obj/item/circuit_component/status_display,
|
||||
))
|
||||
RegisterSignal(SSsecurity_level, COMSIG_SECURITY_LEVEL_CHANGED, PROC_REF(on_sec_level_change))
|
||||
find_and_hang_on_wall()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/status_display/evac/Destroy()
|
||||
SSradio.remove_object(src,frequency)
|
||||
@@ -846,7 +847,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32)
|
||||
/// list to pick the first line from
|
||||
var/list/firstline_to_secondline = list()
|
||||
|
||||
/obj/machinery/status_display/random_message/Initialize(mapload, ndir, building)
|
||||
/obj/machinery/status_display/random_message/Initialize(mapload)
|
||||
if(firstline_to_secondline?.len)
|
||||
message1 = pick(firstline_to_secondline)
|
||||
message2 = firstline_to_secondline[message1]
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
icon_state = "classic"
|
||||
base_icon_state = "classic"
|
||||
power_channel = AREA_USAGE_EQUIP
|
||||
density = TRUE
|
||||
obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION // Becomes undense when the unit is open
|
||||
density = TRUE // Becomes undense when the unit is open
|
||||
obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION | UNIQUE_RENAME | RENAME_NO_DESC
|
||||
interaction_flags_mouse_drop = NEED_DEXTERITY
|
||||
max_integrity = 250
|
||||
req_access = list()
|
||||
@@ -697,33 +697,6 @@
|
||||
balloon_alert(user, "set to [choice]")
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(!state_open && IS_WRITING_UTENSIL(tool))
|
||||
if(locked)
|
||||
balloon_alert(user, "unlock first!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(isnull(id_card))
|
||||
balloon_alert(user, "not yours to rename!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
var/name_set = FALSE
|
||||
var/desc_set = FALSE
|
||||
var/str = tgui_input_text(user, "Personal Unit Name", "Unit Name", max_length = MAX_NAME_LEN)
|
||||
if(!isnull(str))
|
||||
name = str
|
||||
name_set = TRUE
|
||||
str = tgui_input_text(user, "Personal Unit Description", "Unit Description", max_length = MAX_DESC_LEN)
|
||||
if(!isnull(str))
|
||||
desc = str
|
||||
desc_set = TRUE
|
||||
var/bit_flag = NONE
|
||||
if(name_set)
|
||||
bit_flag |= UPDATE_NAME
|
||||
if(desc_set)
|
||||
bit_flag |= UPDATE_DESC
|
||||
if(bit_flag)
|
||||
update_appearance(bit_flag)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(state_open && is_operational)
|
||||
if(istype(tool, /obj/item/clothing/suit))
|
||||
if(suit)
|
||||
@@ -804,6 +777,15 @@
|
||||
if(.)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/suit_storage_unit/rename_checks(mob/living/user)
|
||||
. = TRUE
|
||||
if(locked)
|
||||
balloon_alert(user, "unlock first!")
|
||||
return FALSE
|
||||
if(!access_check(user))
|
||||
balloon_alert(user, "not yours to rename!")
|
||||
return FALSE
|
||||
|
||||
/// If the SSU needs to have any communications wires cut.
|
||||
/obj/machinery/suit_storage_unit/proc/disable_modlink()
|
||||
if(isnull(mod))
|
||||
|
||||
@@ -69,6 +69,8 @@
|
||||
update_appearance()
|
||||
init_payment()
|
||||
register_context()
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
/obj/machinery/wall_healer/Destroy()
|
||||
clear_using_mob()
|
||||
|
||||
@@ -194,7 +194,8 @@
|
||||
if(. || !ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/as_human = user
|
||||
if(!isflyperson(as_human))
|
||||
var/obj/item/organ/tongue/user_tongue = user.get_organ_slot(ORGAN_SLOT_TONGUE)
|
||||
if(!istype(user_tongue, /obj/item/organ/tongue/fly))
|
||||
return
|
||||
playsound(get_turf(src), 'sound/items/drink.ogg', 50, TRUE) //slurp
|
||||
as_human.visible_message(span_alert("[as_human] extends a small proboscis into the vomit pool, sucking it with a slurping sound."))
|
||||
|
||||
@@ -421,16 +421,29 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
damtype = BURN
|
||||
force = 4
|
||||
|
||||
if(reagents && reagents.has_reagent(/datum/reagent/drug/methamphetamine))
|
||||
if(reagents?.has_reagent(/datum/reagent/flash_powder))
|
||||
if(!isliving(loc))
|
||||
loc.visible_message(span_hear("\The [src] burns up!"))
|
||||
qdel(src)
|
||||
return
|
||||
var/mob/living/user = loc
|
||||
loc.visible_message(span_hear("[user]'s [name] burns up as [p_they(user)] fall to the ground!"), span_danger("The solution violently explodes!"))
|
||||
user.flash_act(INFINITY, visual = TRUE, length = 5 SECONDS)
|
||||
user.playsound_local(get_turf(user), SFX_EXPLOSION, 50, TRUE)
|
||||
user.cause_hallucination(/datum/hallucination/death, "trick trick [name]")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(reagents?.has_reagent(/datum/reagent/drug/methamphetamine))
|
||||
reagents.flags |= NO_REACT
|
||||
|
||||
if(reagents.get_reagent_amount(/datum/reagent/toxin/plasma)) // the plasma explodes when exposed to fire
|
||||
if(reagents?.get_reagent_amount(/datum/reagent/toxin/plasma)) // the plasma explodes when exposed to fire
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(round(reagents.get_reagent_amount(/datum/reagent/toxin/plasma) / 2.5, 1), get_turf(src), 0, 0)
|
||||
e.start(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(reagents.get_reagent_amount(/datum/reagent/fuel)) // the fuel explodes, too, but much less violently
|
||||
if(reagents?.get_reagent_amount(/datum/reagent/fuel)) // the fuel explodes, too, but much less violently
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(round(reagents.get_reagent_amount(/datum/reagent/fuel) / 5, 1), get_turf(src), 0, 0)
|
||||
e.start(src)
|
||||
@@ -709,6 +722,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
lung_harm = 2
|
||||
list_reagents = list (/datum/reagent/drug/nicotine = 20, /datum/reagent/medicine/regen_jelly = 15, /datum/reagent/drug/krokodil = 4)
|
||||
|
||||
/obj/item/cigarette/flash_powder
|
||||
desc = /obj/item/cigarette/space_cigarette::desc
|
||||
list_reagents = list (/datum/reagent/drug/nicotine = 9, /datum/reagent/flash_powder = 5)
|
||||
|
||||
// Rollies.
|
||||
|
||||
/obj/item/cigarette/rollie
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
name = "control wand"
|
||||
desc = "A remote for controlling a set of airlocks."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
drop_sound = 'sound/items/door_remote/door_remote_drop1.ogg'
|
||||
pickup_sound = 'sound/items/door_remote/door_remote_pick_up1.ogg'
|
||||
|
||||
var/department = "civilian"
|
||||
var/mode = WAND_OPEN
|
||||
@@ -34,6 +36,10 @@
|
||||
/area/station/ai_monitored/turret_protected/ai_upload, // their doors with our several dozen access helpers
|
||||
)
|
||||
COOLDOWN_DECLARE(shock_cooldown)
|
||||
/// sound played when mode is switched
|
||||
var/mode_switch_sound = SFX_REMOTE_MODE_SWITCH
|
||||
/// sound played when an action is done
|
||||
var/action_sound = SFX_REMOTE_ACTION
|
||||
|
||||
/obj/item/door_remote/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -80,6 +86,8 @@
|
||||
mode = WAND_OPEN
|
||||
update_icon_state()
|
||||
balloon_alert(user, "mode: [ops[mode]]")
|
||||
if(mode_switch_sound)
|
||||
playsound(src, mode_switch_sound, 50, TRUE)
|
||||
|
||||
/obj/item/door_remote/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
||||
if(!istype(interacting_with, /obj/machinery/door) && !isturf(interacting_with))
|
||||
@@ -159,6 +167,8 @@
|
||||
|
||||
/obj/item/door_remote/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
||||
var/obj/machinery/door/door
|
||||
if(action_sound)
|
||||
playsound(src, action_sound, 50, TRUE)
|
||||
|
||||
if (istype(interacting_with, /obj/machinery/door))
|
||||
door = interacting_with
|
||||
|
||||
@@ -215,6 +215,7 @@
|
||||
drawtype = pick(all_drawables)
|
||||
|
||||
AddElement(/datum/element/venue_price, FOOD_PRICE_EXOTIC)
|
||||
AddElement(/datum/element/tool_renaming)
|
||||
if(can_change_colour)
|
||||
AddComponent(/datum/component/palette, AVAILABLE_SPRAYCAN_SPACE, paint_color)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
inhand_icon_state = "beacon"
|
||||
lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
|
||||
obj_flags = UNIQUE_RENAME
|
||||
var/enabled = TRUE
|
||||
var/renamed = FALSE
|
||||
|
||||
@@ -46,15 +47,3 @@
|
||||
/obj/item/beacon/attack_hand_secondary(mob/user, list/modifiers)
|
||||
attack_self(user)
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/item/beacon/attackby(obj/item/W, mob/user)
|
||||
if(IS_WRITING_UTENSIL(W)) // needed for things that use custom names like the locator
|
||||
var/new_name = tgui_input_text(user, "What would you like the name to be?", "Beacon", max_length = MAX_NAME_LEN)
|
||||
if(!user.can_perform_action(src))
|
||||
return
|
||||
if(new_name)
|
||||
name = new_name
|
||||
renamed = TRUE
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -323,15 +323,63 @@
|
||||
icon_state = "lightreplacer_high"
|
||||
max_uses = 50
|
||||
|
||||
#define BLIGHTREPLACER_SPOT_COOLDOWN (BLIGHTREPLACER_SPOT_LIFE + 1 SECONDS)
|
||||
#define BLIGHTREPLACER_SPOT_RANGE 7
|
||||
#define BLIGHTREPLACER_SPOT_LIFE (5 SECONDS)
|
||||
|
||||
/obj/item/lightreplacer/blue
|
||||
name = "bluespace light replacer"
|
||||
desc = "A modified light replacer that zaps lights into place. Refill with broken or working lightbulbs, or sheets of glass."
|
||||
icon_state = "lightreplacer_blue"
|
||||
bluespace_toggle = TRUE
|
||||
actions_types = list(/datum/action/item_action/lightreplacer_scan)
|
||||
action_slots = ALL
|
||||
COOLDOWN_DECLARE(lightreplacer_spot_cooldown)
|
||||
|
||||
/obj/item/lightreplacer/blue/emag_act()
|
||||
return FALSE // balancing against longrange explosions
|
||||
|
||||
/obj/item/lightreplacer/blue/ui_action_click(mob/user, actiontype)
|
||||
if(!COOLDOWN_FINISHED(src, lightreplacer_spot_cooldown))
|
||||
balloon_alert(user, "on cooldown!")
|
||||
return
|
||||
COOLDOWN_START(src, lightreplacer_spot_cooldown, BLIGHTREPLACER_SPOT_COOLDOWN)
|
||||
lightreplacer_scan()
|
||||
|
||||
/// Scans the area in search of fixtures with broken bulbs in the BLIGHTREPLACER_SPOT_RANGE range, and also marks them with the blue_firefly effect.
|
||||
/obj/item/lightreplacer/blue/proc/lightreplacer_scan()
|
||||
var/turf/source_turf = get_turf(src)
|
||||
for(var/obj/machinery/light/broken_light in dview(BLIGHTREPLACER_SPOT_RANGE, source_turf))
|
||||
if(broken_light.status == LIGHT_OK)
|
||||
continue
|
||||
var/obj/effect/temp_visual/blue_firefly/firefly = new(get_turf(broken_light))
|
||||
animate(firefly, alpha = 0, time = BLIGHTREPLACER_SPOT_LIFE, easing = CIRCULAR_EASING | EASE_IN)
|
||||
|
||||
/datum/action/item_action/lightreplacer_scan
|
||||
name = "Scan for broken lamps"
|
||||
desc = "Scans the surrounding area for fixtures with broken light bulbs and marks them."
|
||||
|
||||
/obj/effect/temp_visual/blue_firefly
|
||||
name = "bluespace firefly"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "bluespace_firefly"
|
||||
light_power = 1
|
||||
light_range = 2
|
||||
light_color = LIGHT_COLOR_DARK_BLUE
|
||||
duration = BLIGHTREPLACER_SPOT_LIFE
|
||||
|
||||
/obj/effect/temp_visual/blue_firefly/Initialize(mapload)
|
||||
. = ..()
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
|
||||
/obj/effect/temp_visual/blue_firefly/update_overlays()
|
||||
. = ..()
|
||||
. += emissive_appearance(icon, icon_state, src, alpha = src.alpha)
|
||||
|
||||
#undef BLIGHTREPLACER_SPOT_COOLDOWN
|
||||
#undef BLIGHTREPLACER_SPOT_RANGE
|
||||
#undef BLIGHTREPLACER_SPOT_LIFE
|
||||
|
||||
#undef GLASS_SHEET_USES
|
||||
#undef LIGHTBULB_COST
|
||||
#undef BULB_SHARDS_REQUIRED
|
||||
|
||||
@@ -28,24 +28,27 @@
|
||||
icon_state = "intercom_prison"
|
||||
icon_off = "intercom_prison-p"
|
||||
|
||||
/obj/item/radio/intercom/prison/Initialize(mapload, ndir, building)
|
||||
/obj/item/radio/intercom/prison/Initialize(mapload)
|
||||
. = ..()
|
||||
wires?.cut(WIRE_TX)
|
||||
|
||||
/obj/item/radio/intercom/Initialize(mapload, ndir, building)
|
||||
/obj/item/radio/intercom/Initialize(mapload)
|
||||
. = ..()
|
||||
var/area/current_area = get_area(src)
|
||||
if(!current_area)
|
||||
return
|
||||
RegisterSignal(current_area, COMSIG_AREA_POWER_CHANGE, PROC_REF(AreaPowerCheck))
|
||||
if(mapload)
|
||||
find_and_hang_on_wall()
|
||||
GLOB.intercoms_list += src
|
||||
|
||||
/obj/item/radio/intercom/find_and_hang_on_wall()
|
||||
if(!unscrewed)
|
||||
find_and_hang_on_wall(directional = TRUE, \
|
||||
custom_drop_callback = CALLBACK(src, PROC_REF(knock_down)))
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/intercom/Destroy()
|
||||
. = ..()
|
||||
GLOB.intercoms_list -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/intercom/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -87,7 +90,7 @@
|
||||
if(tool.use_tool(src, user, 80))
|
||||
user.visible_message(span_notice("[user] unsecures [src]!"), span_notice("You detach [src] from the wall."))
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
knock_down()
|
||||
deconstruct(TRUE)
|
||||
|
||||
/**
|
||||
* Override attack_tk_grab instead of attack_tk because we actually want attack_tk's
|
||||
@@ -187,9 +190,8 @@
|
||||
/**
|
||||
* Called by the wall mount component and reused during the tool deconstruction proc.
|
||||
*/
|
||||
/obj/item/radio/intercom/proc/knock_down()
|
||||
/obj/item/radio/intercom/atom_deconstruct(disassembled)
|
||||
new/obj/item/wallframe/intercom(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
//Created through the autolathe or through deconstructing intercoms. Can be applied to wall to make a new intercom on it!
|
||||
/obj/item/wallframe/intercom
|
||||
@@ -209,7 +211,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom, 27)
|
||||
anonymize = TRUE
|
||||
freqlock = RADIO_FREQENCY_EMAGGABLE_LOCK
|
||||
|
||||
/obj/item/radio/intercom/chapel/Initialize(mapload, ndir, building)
|
||||
/obj/item/radio/intercom/chapel/Initialize(mapload)
|
||||
. = ..()
|
||||
set_frequency(1481)
|
||||
set_broadcasting(TRUE)
|
||||
|
||||
@@ -109,8 +109,8 @@
|
||||
update_appearance()
|
||||
|
||||
/obj/item/taperecorder/fire_act(exposed_temperature, exposed_volume)
|
||||
mytape.unspool() //Fires unspool the tape, which makes sense if you don't think about it
|
||||
..()
|
||||
mytape?.unspool() //Fires unspool the tape, which makes sense if you don't think about it
|
||||
return ..()
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/item/taperecorder/attack_hand(mob/user, list/modifiers)
|
||||
|
||||
@@ -355,7 +355,7 @@
|
||||
if(4)
|
||||
//Destroy Equipment
|
||||
selected_turf.visible_message(span_userdanger("Everything [user] is holding and wearing disappears!"))
|
||||
var/list/belongings = user.get_all_gear()
|
||||
var/list/belongings = user.get_all_gear(NONE) //don't delete prosthetics or abstract items.
|
||||
QDEL_LIST(belongings)
|
||||
if(5)
|
||||
//Monkeying
|
||||
|
||||
@@ -358,7 +358,7 @@
|
||||
|
||||
/obj/item/extinguisher/click_alt(mob/user)
|
||||
if(!user.is_holding(src))
|
||||
to_chat(user, span_notice("You must be holding the [src] in your hands do this!"))
|
||||
to_chat(user, span_notice("You must be holding [src] in your hands to do this!"))
|
||||
return CLICK_ACTION_BLOCKING
|
||||
EmptyExtinguisher(user)
|
||||
return CLICK_ACTION_SUCCESS
|
||||
@@ -367,7 +367,7 @@
|
||||
if(loc == user && reagents.total_volume)
|
||||
reagents.expose(user.loc, TOUCH)
|
||||
reagents.clear_reagents()
|
||||
user.visible_message(span_notice("[user] empties out \the [src] onto the floor using the release valve."), span_info("You quietly empty out \the [src] using its release valve."))
|
||||
user.visible_message(span_notice("[user] empties out [src] onto the floor using the release valve."), span_info("You quietly empty out [src] using its release valve."))
|
||||
|
||||
//firebot assembly
|
||||
/obj/item/extinguisher/attackby(obj/O, mob/user, list/modifiers, list/attack_modifiers)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/obj/item/food/bread/make_processable()
|
||||
if (slice_type)
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
AddElement(/datum/element/processable, TOOL_SAW, slice_type, yield, 4 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
|
||||
// Abstract parent object for sliced bread items. Should not be made obtainable in game.
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
/obj/item/food/cake/make_processable()
|
||||
if (slice_type)
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/cakeslice
|
||||
icon = 'icons/obj/food/piecake.dmi'
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
AddComponent(/datum/component/food_storage)
|
||||
|
||||
/obj/item/food/cheese/wheel/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cheese/wedge, 5, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cheese/wedge, 5, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/cheese/wheel/make_bakeable()
|
||||
AddComponent(/datum/component/bakeable, /obj/item/food/baked_cheese, rand(20 SECONDS, 25 SECONDS), TRUE, TRUE)
|
||||
@@ -131,7 +131,7 @@
|
||||
crafting_complexity = FOOD_COMPLEXITY_3
|
||||
|
||||
/obj/item/food/cheese/firm_cheese/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cheese/firm_cheese_slice, 3, 3 SECONDS, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cheese/firm_cheese_slice, 3, 3 SECONDS, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/cheese/firm_cheese_slice
|
||||
name = "firm cheese slice"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
// Dough + rolling pin = flat dough
|
||||
/obj/item/food/dough/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/food/flatdough, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Flatten")
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/food/flatdough, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Flatten", sound_to_play = SFX_ROLLING_PIN_ROLLING)
|
||||
|
||||
/obj/item/food/flatdough
|
||||
name = "flat dough"
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
// sliceable into 3xdoughslices
|
||||
/obj/item/food/flatdough/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/doughslice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/doughslice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/pizzabread
|
||||
name = "pizza bread"
|
||||
@@ -63,7 +63,7 @@
|
||||
AddComponent(/datum/component/bakeable, /obj/item/food/bun, rand(20 SECONDS, 25 SECONDS), TRUE, TRUE)
|
||||
|
||||
/obj/item/food/doughslice/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/bait/doughball, 5, 3 SECONDS, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/bait/doughball, 5, 3 SECONDS, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/bun
|
||||
name = "bun"
|
||||
@@ -94,7 +94,7 @@
|
||||
AddComponent(/datum/component/bakeable, /obj/item/food/cake/plain, rand(70 SECONDS, 90 SECONDS), TRUE, TRUE)
|
||||
|
||||
/obj/item/food/cakebatter/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/food/piedough, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Flatten")
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, /obj/item/food/piedough, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Flatten", sound_to_play = SFX_ROLLING_PIN_ROLLING)
|
||||
|
||||
/obj/item/food/piedough
|
||||
name = "pie dough"
|
||||
@@ -110,7 +110,7 @@
|
||||
AddComponent(/datum/component/bakeable, /obj/item/food/pie/plain, rand(30 SECONDS, 45 SECONDS), TRUE, TRUE)
|
||||
|
||||
/obj/item/food/piedough/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/rawpastrybase, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/rawpastrybase, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/rawpastrybase
|
||||
name = "raw pastry base"
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
custom_materials = list(/datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/item/food/headcheese/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/headcheese_slice, 5, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/headcheese_slice, 5, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/headcheese_slice
|
||||
name = "headcheese slice"
|
||||
@@ -451,7 +451,7 @@
|
||||
AddComponent(/datum/component/bakeable, bread_type, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE)
|
||||
|
||||
/obj/item/food/rootdough/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, flat_type, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Flatten")
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, flat_type, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Flatten", sound_to_play = SFX_ROLLING_PIN_ROLLING)
|
||||
|
||||
/obj/item/food/rootdough/egg
|
||||
desc = "A root based dough, made with nuts, tubers and eggs. Used in a wide range of Tiziran cooking."
|
||||
@@ -472,7 +472,7 @@
|
||||
var/grill_type = /obj/item/food/root_flatbread
|
||||
|
||||
/obj/item/food/flatrootdough/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, process_type, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, process_type, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/flatrootdough/make_grillable()
|
||||
AddComponent(/datum/component/grillable, grill_type, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE)
|
||||
@@ -499,7 +499,7 @@
|
||||
foodtypes = parent_type::foodtypes | MEAT
|
||||
|
||||
/obj/item/food/rootdoughslice/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/spaghetti/nizaya, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/spaghetti/nizaya, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/rootdoughslice/make_bakeable()
|
||||
AddComponent(/datum/component/bakeable, /obj/item/food/rootroll, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE)
|
||||
|
||||
@@ -359,7 +359,7 @@
|
||||
|
||||
// sliceable into 4xtempehslices
|
||||
/obj/item/food/tempeh/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/tempehslice, 4, 5 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/tempehslice, 4, 5 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
//add an icon for slices
|
||||
/obj/item/food/tempehslice
|
||||
@@ -466,7 +466,7 @@
|
||||
AddComponent(/datum/component/grillable, meatball_type, rand(30 SECONDS, 40 SECONDS), TRUE)
|
||||
|
||||
/obj/item/food/raw_meatball/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, patty_type, 1, table_required = TRUE, screentip_verb = "Flatten")
|
||||
AddElement(/datum/element/processable, TOOL_ROLLINGPIN, patty_type, 1, table_required = TRUE, screentip_verb = "Flatten", sound_to_play = SFX_ROLLING_PIN_ROLLING)
|
||||
|
||||
/obj/item/food/raw_meatball/human
|
||||
name = "strange raw meatball"
|
||||
@@ -638,8 +638,8 @@
|
||||
custom_materials = list(/datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/item/food/sausage/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/salami, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/sausage/american, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/salami, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/sausage/american, 1, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/sausage/american
|
||||
name = "american sausage"
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
|
||||
|
||||
/obj/item/food/meat/slab/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain, MEATSLAB_PROCESSED_AMOUNT, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain, MEATSLAB_PROCESSED_AMOUNT, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
///////////////////////////////////// HUMAN MEATS //////////////////////////////////////////////////////
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
|
||||
|
||||
/obj/item/food/meat/slab/human/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain/human, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain/human, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/human/mutant
|
||||
abstract_type = /obj/item/food/meat/slab/human/mutant
|
||||
@@ -262,7 +262,7 @@
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/killertomato, rand(70 SECONDS, 85 SECONDS), TRUE, TRUE)
|
||||
|
||||
/obj/item/food/meat/slab/killertomato/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/killertomato, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/killertomato, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/bear
|
||||
name = "bear meat"
|
||||
@@ -278,7 +278,7 @@
|
||||
foodtypes = RAW | MEAT
|
||||
|
||||
/obj/item/food/meat/slab/bear/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/bear, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/bear, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/bear/make_grillable()
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/bear, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE)
|
||||
@@ -301,7 +301,7 @@
|
||||
blood_decal_type = /obj/effect/decal/cleanable/blood/xeno
|
||||
|
||||
/obj/item/food/meat/slab/xeno/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/xeno, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/xeno, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/xeno/make_grillable()
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/xeno, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE)
|
||||
@@ -320,7 +320,7 @@
|
||||
blood_decal_type = /obj/effect/decal/cleanable/insectguts
|
||||
|
||||
/obj/item/food/meat/slab/spider/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/spider, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/spider, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/spider/make_grillable()
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/spider, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE)
|
||||
@@ -403,7 +403,7 @@
|
||||
foodtypes = RAW | MEAT | GORE
|
||||
|
||||
/obj/item/food/meat/slab/gondola/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/gondola, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/gondola, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/gondola/make_grillable()
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/gondola, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
|
||||
@@ -420,7 +420,7 @@
|
||||
|
||||
/obj/item/food/meat/slab/penguin/make_processable()
|
||||
. = ..()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/penguin, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/penguin, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/penguin/make_grillable()
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/penguin, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe?
|
||||
@@ -463,7 +463,7 @@
|
||||
starting_reagent_purity = 1
|
||||
|
||||
/obj/item/food/meat/slab/chicken/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/chicken, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/chicken, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/meat/slab/chicken/make_grillable()
|
||||
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/chicken, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? (no this is chicken)
|
||||
|
||||
@@ -405,7 +405,7 @@
|
||||
can_stick = FALSE
|
||||
|
||||
/obj/item/food/butter/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/butterslice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/butterslice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/butterslice
|
||||
name = "butter slice"
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
crafting_complexity = FOOD_COMPLEXITY_5
|
||||
|
||||
/obj/item/food/green_lasagne/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/green_lasagne_slice, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/green_lasagne_slice, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/green_lasagne_slice
|
||||
name = "green lasagne al forno slice"
|
||||
|
||||
@@ -470,7 +470,7 @@
|
||||
crafting_complexity = FOOD_COMPLEXITY_2
|
||||
|
||||
/obj/item/food/brownie_sheet/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/brownie, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/brownie, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/brownie
|
||||
name = "brownie"
|
||||
@@ -519,7 +519,7 @@
|
||||
crafting_complexity = FOOD_COMPLEXITY_3
|
||||
|
||||
/obj/item/food/peanut_butter_brownie_sheet/make_processable()
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/peanut_butter_brownie, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/peanut_butter_brownie, 4, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/peanut_butter_brownie
|
||||
name = "peanut butter brownie"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/food/pie/make_processable()
|
||||
if (slice_type)
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, table_required = TRUE, screentip_verb = "Slice")
|
||||
AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, table_required = TRUE, screentip_verb = "Slice", sound_to_play = SFX_KNIFE_SLICE)
|
||||
|
||||
/obj/item/food/pieslice
|
||||
name = "pie slice"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user