[MIRROR] MODLink System (+ NWTLMM) [MDB IGNORE] (#23199)
* MODLink System (+ NWTLMM) (#77639) ## About The Pull Request A pact made with `@ Kapu1178` Small changes you should not care about: RD MODsuit outfit (admin only) no longer has a beret that blocks the activation of the suit The beret used by death squad officers no longer is blocked from being put on a hat stabilizer module Admins can now Shear matrices of objects in Modify Transform Multitool buffers have been a little refactored to use a setter proc that saves them from causing hard dels Cooler stuff: A revival and remake of [Nobody Wants To Learn Matrix Math](https://github.com/tgstation/tgstation/pull/59103), this time with additional tooling for quick matrix calculations.  The MODLink system, available through every MODsuit and MODLink scryers (a neck item obtainable from advanced modsuit research or charliestation) Let's you make a holographic call with any other MODLink user, where you can chat in realtime and see what's up with em   ## Why It's Good For The Game Adds a fun way for the crew to communicate with each other that can be done in real-time with relative privacy compared to radio. ## Changelog 🆑 Fikou, Armhulen, Sheets (+rep for Mothblocks and Potato) fix: RD MODsuit outfit (admin only) no longer has a beret that blocks the activation of the suit fix: The beret used by death squad officers no longer is blocked from being put on a hat stabilizer module admin: Admins can now Shear matrices of objects in Modify Transform admin: Admins now have access to Test Matrices in the VV dropdown, an all-in-one tool for editing transforms. add: MODLink system, available through scryers (from RnD and Charlie Station) and through MODsuits. Lets you call people with holographs! /🆑 * MODLink System (+ NWTLMM) --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
@@ -153,12 +153,6 @@
|
||||
/obj/structure/alien/egg/burst,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/ancientstation/delta/ai)
|
||||
"aQ" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/charlie/bridge)
|
||||
"aS" = (
|
||||
/obj/structure/sign/poster/official/nanotrasen_logo,
|
||||
/turf/closed/wall,
|
||||
@@ -2461,15 +2455,6 @@
|
||||
/obj/structure/sign/poster/official/work_for_a_future,
|
||||
/turf/closed/wall/rust,
|
||||
/area/ruin/space/ancientstation/charlie/dorms)
|
||||
"kN" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/crowbar,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/spawner/random/decoration/glowstick,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/charlie/dorms)
|
||||
"kO" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
@@ -3878,6 +3863,16 @@
|
||||
/obj/structure/chair,
|
||||
/turf/open/floor/iron/white/textured,
|
||||
/area/ruin/space/ancientstation/delta/proto)
|
||||
"sq" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/crowbar,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/spawner/random/decoration/glowstick,
|
||||
/obj/structure/mirror/directional/west,
|
||||
/obj/item/clothing/neck/link_scryer/loaded/charlie,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/charlie/dorms)
|
||||
"ss" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -4744,6 +4739,16 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/delta/rnd)
|
||||
"yN" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/crowbar,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/spawner/random/decoration/glowstick,
|
||||
/obj/item/clothing/neck/link_scryer/loaded/charlie,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/charlie/dorms)
|
||||
"yQ" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/window/plasma/spawner/directional/south,
|
||||
@@ -5472,6 +5477,14 @@
|
||||
/obj/effect/mapping_helpers/airalarm/away_general_access,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/beta/hall)
|
||||
"Ej" = (
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/turf/open/floor/plating{
|
||||
initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/space/ancientstation/delta/hall)
|
||||
"El" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/shard,
|
||||
@@ -6697,15 +6710,6 @@
|
||||
/obj/effect/mapping_helpers/broken_floor,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/space/ancientstation/beta/supermatter)
|
||||
"Mt" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/crowbar,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/spawner/random/decoration/glowstick,
|
||||
/obj/structure/mirror/directional/west,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/charlie/dorms)
|
||||
"Mu" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/space_heater,
|
||||
@@ -8116,6 +8120,13 @@
|
||||
/obj/effect/decal/cleanable/glass,
|
||||
/turf/open/floor/engine/airless,
|
||||
/area/ruin/space/ancientstation/beta/supermatter)
|
||||
"Xf" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/clothing/neck/link_scryer/loaded/charlie,
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/ancientstation/charlie/bridge)
|
||||
"Xj" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -8459,14 +8470,6 @@
|
||||
/obj/machinery/light/small/broken/directional/east,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/ancientstation/delta/ai)
|
||||
"YV" = (
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/turf/open/floor/plating{
|
||||
initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/space/ancientstation/delta/hall)
|
||||
"YW" = (
|
||||
/turf/open/floor/iron/textured_half,
|
||||
/area/ruin/space/ancientstation/beta/supermatter)
|
||||
@@ -12217,8 +12220,8 @@ aG
|
||||
nk
|
||||
mz
|
||||
gZ
|
||||
kN
|
||||
Mt
|
||||
yN
|
||||
sq
|
||||
mz
|
||||
nk
|
||||
nk
|
||||
@@ -12254,7 +12257,7 @@ aa
|
||||
aS
|
||||
wl
|
||||
bg
|
||||
aQ
|
||||
Xf
|
||||
aI
|
||||
ba
|
||||
bk
|
||||
@@ -12652,7 +12655,7 @@ AA
|
||||
ax
|
||||
aW
|
||||
aI
|
||||
aQ
|
||||
Xf
|
||||
bm
|
||||
qr
|
||||
aS
|
||||
@@ -13851,7 +13854,7 @@ Gz
|
||||
Lx
|
||||
LH
|
||||
Bu
|
||||
YV
|
||||
Ej
|
||||
Gz
|
||||
JR
|
||||
Gz
|
||||
|
||||
@@ -674,6 +674,14 @@
|
||||
/obj/structure/marker_beacon/jade,
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
"ans" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/firealarm/directional/east,
|
||||
/obj/effect/turf_decal/siding/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"anv" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/structure/railing/corner{
|
||||
@@ -990,6 +998,10 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/atmos/storage/gas)
|
||||
"auC" = (
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/misc/sandy_dirt,
|
||||
/area/station/science/cytology)
|
||||
"auG" = (
|
||||
/obj/structure/chair{
|
||||
dir = 1
|
||||
@@ -2242,14 +2254,6 @@
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/engineering/supermatter/room)
|
||||
"aUm" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/firealarm/directional/east,
|
||||
/obj/effect/turf_decal/siding/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"aUA" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron/dark/smooth_edge,
|
||||
@@ -7555,15 +7559,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark/corner,
|
||||
/area/station/engineering/break_room)
|
||||
"cYD" = (
|
||||
/obj/item/kirbyplants/random,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/crate/trashcart/filled,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/recreation)
|
||||
"cYE" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -7614,10 +7609,6 @@
|
||||
/obj/machinery/firealarm/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/engineering/main)
|
||||
"cZN" = (
|
||||
/obj/effect/turf_decal/siding,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"dah" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
|
||||
@@ -9230,10 +9221,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/smooth,
|
||||
/area/station/engineering/atmos)
|
||||
"dEU" = (
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/misc/sandy_dirt,
|
||||
/area/station/science/cytology)
|
||||
"dFn" = (
|
||||
/obj/structure/cable,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -9530,6 +9517,11 @@
|
||||
/obj/structure/sign/poster/official/random/directional/north,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/break_room)
|
||||
"dLm" = (
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/obj/structure/closet/crate/mod,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/robotics/augments)
|
||||
"dLn" = (
|
||||
/obj/structure/chair/office,
|
||||
/turf/open/floor/iron/dark/herringbone,
|
||||
@@ -18867,16 +18859,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/maintenance/starboard/greater)
|
||||
"gYr" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/airalarm/directional/north,
|
||||
/obj/item/food/pizzaslice/moldy/bacteria{
|
||||
pixel_x = -4;
|
||||
pixel_y = 2
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"gYy" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -20505,12 +20487,6 @@
|
||||
"hzm" = (
|
||||
/turf/closed/wall/rust,
|
||||
/area/station/cargo/miningoffice)
|
||||
"hzq" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/airalarm/directional/west,
|
||||
/obj/effect/spawner/random/trash/moisture_trap,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"hzI" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -20840,12 +20816,6 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/smooth,
|
||||
/area/station/hallway/secondary/command)
|
||||
"hFs" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/holopad,
|
||||
/obj/effect/turf_decal/siding/corner,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"hFx" = (
|
||||
/turf/open/floor/iron/chapel{
|
||||
dir = 1
|
||||
@@ -24202,10 +24172,6 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/fore/lesser)
|
||||
"iRH" = (
|
||||
/obj/structure/closet/crate/trashcart/filled,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/starboard/fore)
|
||||
"iSb" = (
|
||||
/obj/structure/frame/computer{
|
||||
dir = 1
|
||||
@@ -25063,22 +25029,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron/textured_half,
|
||||
/area/station/hallway/primary/aft)
|
||||
"jif" = (
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = 4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/structure/closet/crate/science{
|
||||
name = "MOD core crate"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/robotics/augments)
|
||||
"jig" = (
|
||||
/obj/effect/turf_decal/stripes/white/line{
|
||||
dir = 9
|
||||
@@ -30720,18 +30670,6 @@
|
||||
},
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
"lgh" = (
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/plumbing/growing_vat{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/cytology)
|
||||
"lgj" = (
|
||||
/obj/structure/chair/sofa/bench{
|
||||
dir = 8
|
||||
@@ -35962,6 +35900,10 @@
|
||||
/obj/machinery/airalarm/directional/west,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/security/processing)
|
||||
"mXd" = (
|
||||
/obj/structure/closet/crate/trashcart/filled,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/starboard/fore)
|
||||
"mXo" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{
|
||||
dir = 1
|
||||
@@ -38696,6 +38638,16 @@
|
||||
/obj/machinery/camera/autoname/directional/north,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"nXe" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/airalarm/directional/north,
|
||||
/obj/item/food/pizzaslice/moldy/bacteria{
|
||||
pixel_x = -4;
|
||||
pixel_y = 2
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"nXt" = (
|
||||
/obj/effect/turf_decal/tile/yellow/full,
|
||||
/obj/structure/table/reinforced,
|
||||
@@ -38713,6 +38665,15 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron/showroomfloor,
|
||||
/area/station/commons/toilet/restrooms)
|
||||
"nXE" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/item/radio/intercom/directional/north,
|
||||
/obj/item/kirbyplants/fern,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"nXP" = (
|
||||
/obj/machinery/airalarm/directional/east,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
|
||||
@@ -40041,6 +40002,16 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/engineering/atmos)
|
||||
"oyz" = (
|
||||
/obj/effect/turf_decal/box/corners,
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/cytology)
|
||||
"oyA" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
@@ -40983,6 +40954,13 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/commons/storage/tools)
|
||||
"oRd" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/siding{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"oRm" = (
|
||||
/obj/effect/landmark/atmospheric_sanity/ignore_area,
|
||||
/turf/closed/mineral/random/stationside,
|
||||
@@ -42925,16 +42903,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/security/tram)
|
||||
"pzK" = (
|
||||
/obj/effect/turf_decal/box/corners,
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/cytology)
|
||||
"pzL" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
@@ -43622,6 +43590,12 @@
|
||||
/obj/effect/turf_decal/delivery/red,
|
||||
/turf/open/floor/iron/white/small,
|
||||
/area/station/medical/medbay/central)
|
||||
"pKL" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/airalarm/directional/west,
|
||||
/obj/effect/spawner/random/trash/moisture_trap,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"pKR" = (
|
||||
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
|
||||
dir = 4
|
||||
@@ -48017,6 +47991,18 @@
|
||||
/obj/structure/barricade/wooden/crude,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/hallway/abandoned_recreation)
|
||||
"rdk" = (
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/plumbing/growing_vat{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/cytology)
|
||||
"rdo" = (
|
||||
/obj/structure/window/spawner/directional/west,
|
||||
/obj/structure/flora/bush/jungle/a/style_random,
|
||||
@@ -49299,6 +49285,15 @@
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/wood/large,
|
||||
/area/station/service/hydroponics/garden/monastery)
|
||||
"rzC" = (
|
||||
/obj/item/kirbyplants/random,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/crate/trashcart/filled,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/recreation)
|
||||
"rzG" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
|
||||
@@ -63882,6 +63877,12 @@
|
||||
/obj/effect/spawner/structure/window/reinforced/tinted,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/hallway/secondary/recreation)
|
||||
"wkJ" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/holopad,
|
||||
/obj/effect/turf_decal/siding/corner,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"wla" = (
|
||||
/turf/open/floor/iron/chapel,
|
||||
/area/station/maintenance/starboard/greater)
|
||||
@@ -65546,15 +65547,6 @@
|
||||
/obj/machinery/power/apc/auto_name/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/medbay/lobby)
|
||||
"wLS" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/item/radio/intercom/directional/north,
|
||||
/obj/item/kirbyplants/fern,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"wLZ" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -65882,6 +65874,10 @@
|
||||
},
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/hallway/secondary/entry)
|
||||
"wQL" = (
|
||||
/obj/effect/turf_decal/siding,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"wQP" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -68834,13 +68830,6 @@
|
||||
"xFe" = (
|
||||
/turf/closed/wall,
|
||||
/area/station/security/lockers)
|
||||
"xFk" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/siding{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"xFw" = (
|
||||
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
|
||||
/obj/structure/chair/sofa/bench{
|
||||
@@ -112068,7 +112057,7 @@ yjK
|
||||
xpE
|
||||
xMT
|
||||
xQJ
|
||||
cYD
|
||||
rzC
|
||||
qrR
|
||||
sid
|
||||
xbg
|
||||
@@ -113352,7 +113341,7 @@ mjf
|
||||
mFh
|
||||
noB
|
||||
xQJ
|
||||
gYr
|
||||
nXe
|
||||
ovg
|
||||
rRU
|
||||
wBI
|
||||
@@ -113866,12 +113855,12 @@ mjF
|
||||
mGp
|
||||
vUz
|
||||
qNn
|
||||
wLS
|
||||
nXE
|
||||
owm
|
||||
sXi
|
||||
bfe
|
||||
sXi
|
||||
hzq
|
||||
pKL
|
||||
mEL
|
||||
vbK
|
||||
sfq
|
||||
@@ -114890,14 +114879,14 @@ kNI
|
||||
xXT
|
||||
oOv
|
||||
vwd
|
||||
iRH
|
||||
mXd
|
||||
xau
|
||||
rsL
|
||||
qhh
|
||||
ghC
|
||||
hFs
|
||||
xFk
|
||||
aUm
|
||||
wkJ
|
||||
oRd
|
||||
ans
|
||||
xfu
|
||||
xbT
|
||||
snJ
|
||||
@@ -115152,8 +115141,8 @@ xau
|
||||
rsL
|
||||
xSe
|
||||
miz
|
||||
cZN
|
||||
dEU
|
||||
wQL
|
||||
auC
|
||||
wJL
|
||||
ppQ
|
||||
tTp
|
||||
@@ -115665,8 +115654,8 @@ rsL
|
||||
mIh
|
||||
rsL
|
||||
xTO
|
||||
lgh
|
||||
pzK
|
||||
rdk
|
||||
oyz
|
||||
xPj
|
||||
wJL
|
||||
sHX
|
||||
@@ -116214,7 +116203,7 @@ eQn
|
||||
vnf
|
||||
wML
|
||||
rrt
|
||||
jif
|
||||
dLm
|
||||
ryy
|
||||
boW
|
||||
sYa
|
||||
|
||||
@@ -9785,17 +9785,6 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/atmos/hfr_room)
|
||||
"cqZ" = (
|
||||
/obj/machinery/status_display/evac/directional/west,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/hydroponics/constructable,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"crd" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/cable,
|
||||
@@ -49415,6 +49404,18 @@
|
||||
/obj/machinery/holopad,
|
||||
/turf/open/floor/iron/large,
|
||||
/area/station/security/checkpoint/medical/medsci)
|
||||
"mqA" = (
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/machinery/requests_console/directional/north{
|
||||
department = "Robotics";
|
||||
name = "Robotics Requests Console"
|
||||
},
|
||||
/obj/effect/mapping_helpers/requests_console/ore_update,
|
||||
/obj/effect/mapping_helpers/requests_console/supplies,
|
||||
/obj/machinery/light/cold/directional/north,
|
||||
/obj/structure/closet/crate/mod,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/science/robotics/lab)
|
||||
"mqG" = (
|
||||
/obj/structure/filingcabinet/medical,
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -83267,6 +83268,17 @@
|
||||
/obj/item/clothing/head/costume/cardborg,
|
||||
/turf/open/floor/wood,
|
||||
/area/station/service/theater/abandoned)
|
||||
"uOF" = (
|
||||
/obj/machinery/status_display/evac/directional/west,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/hydroponics/constructable,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"uOH" = (
|
||||
/obj/effect/spawner/random/trash/caution_sign,
|
||||
/turf/open/floor/plating,
|
||||
@@ -87773,29 +87785,6 @@
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/turret_protected/ai_upload)
|
||||
"vWV" = (
|
||||
/obj/structure/closet/crate/science{
|
||||
anchored = 1
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = 4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/machinery/requests_console/directional/north{
|
||||
department = "Robotics";
|
||||
name = "Robotics Requests Console"
|
||||
},
|
||||
/obj/effect/mapping_helpers/requests_console/ore_update,
|
||||
/obj/effect/mapping_helpers/requests_console/supplies,
|
||||
/obj/machinery/light/cold/directional/north,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/science/robotics/lab)
|
||||
"vXh" = (
|
||||
/obj/structure/chair/stool/directional/north,
|
||||
/obj/effect/turf_decal/tile/red/diagonal_centre,
|
||||
@@ -121356,7 +121345,7 @@ eRr
|
||||
pTC
|
||||
sXy
|
||||
fpt
|
||||
cqZ
|
||||
uOF
|
||||
sPk
|
||||
fBQ
|
||||
tVl
|
||||
@@ -129048,7 +129037,7 @@ wdb
|
||||
wdb
|
||||
muk
|
||||
khb
|
||||
vWV
|
||||
mqA
|
||||
aPz
|
||||
fHr
|
||||
cfO
|
||||
|
||||
@@ -23741,6 +23741,11 @@
|
||||
/obj/structure/chair/stool/bar/directional/east,
|
||||
/turf/open/floor/stone,
|
||||
/area/station/commons/lounge)
|
||||
"hzV" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/machinery/smartfridge/petri/preloaded,
|
||||
/turf/open/openspace,
|
||||
/area/station/science/xenobiology)
|
||||
"hzY" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/shutters/preopen{
|
||||
@@ -33849,22 +33854,6 @@
|
||||
/obj/effect/turf_decal/tile/yellow/half/contrasted,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/aft)
|
||||
"kKI" = (
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = 4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/effect/turf_decal/tile/red/half/contrasted{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/robotics/lab)
|
||||
"kKL" = (
|
||||
/turf/closed/wall,
|
||||
/area/station/maintenance/starboard/fore)
|
||||
@@ -34973,6 +34962,13 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/department/electrical)
|
||||
"lcj" = (
|
||||
/obj/effect/turf_decal/tile/red/half/contrasted{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/closet/crate/mod,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/robotics/lab)
|
||||
"lck" = (
|
||||
/obj/machinery/gateway/centerstation,
|
||||
/turf/open/floor/iron/dark/smooth_large,
|
||||
@@ -43672,11 +43668,6 @@
|
||||
/obj/effect/turf_decal/siding/yellow,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/atmos)
|
||||
"nSh" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/machinery/smartfridge/petri/preloaded,
|
||||
/turf/open/openspace,
|
||||
/area/station/science/xenobiology)
|
||||
"nSk" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -250596,7 +250587,7 @@ bCL
|
||||
ofr
|
||||
sBx
|
||||
hfc
|
||||
nSh
|
||||
hzV
|
||||
adY
|
||||
tmR
|
||||
sZF
|
||||
@@ -252094,7 +252085,7 @@ rNQ
|
||||
lso
|
||||
aop
|
||||
yar
|
||||
kKI
|
||||
lcj
|
||||
rIU
|
||||
rCX
|
||||
lWc
|
||||
|
||||
@@ -282,6 +282,35 @@
|
||||
/obj/structure/window/spawner/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/engineering/atmos)
|
||||
"agN" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/radio/intercom/directional/west,
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Xenobiology Lab - Fore";
|
||||
network = list("ss13","rd","xeno")
|
||||
},
|
||||
/obj/machinery/light/directional/west,
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/tile/purple/half/contrasted{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/reagent_containers/cup/beaker/large{
|
||||
pixel_x = -6;
|
||||
pixel_y = 22
|
||||
},
|
||||
/obj/item/reagent_containers/cup/beaker{
|
||||
pixel_x = 4;
|
||||
pixel_y = 17
|
||||
},
|
||||
/obj/item/food/tofu{
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/food/tofu,
|
||||
/obj/item/food/tofu{
|
||||
pixel_y = -6
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"agQ" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/door/window/left/directional/west{
|
||||
@@ -2385,13 +2414,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/station/cargo/storage)
|
||||
"aTh" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"aTi" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -3296,13 +3318,6 @@
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/exit/departure_lounge)
|
||||
"biD" = (
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"biF" = (
|
||||
/obj/structure/window/spawner/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
@@ -3792,6 +3807,18 @@
|
||||
/obj/item/clothing/mask/cigarette/pipe,
|
||||
/turf/open/floor/wood,
|
||||
/area/station/commons/lounge)
|
||||
"bqJ" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"bqX" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/station/medical/chemistry)
|
||||
@@ -4203,14 +4230,6 @@
|
||||
/obj/effect/turf_decal/tile/yellow/half/contrasted,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/chemistry)
|
||||
"bxF" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
/obj/structure/microscope,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"bxX" = (
|
||||
/obj/structure/flora/bush/ferny/style_random,
|
||||
/obj/structure/flora/bush/fullgrass/style_random,
|
||||
@@ -5066,6 +5085,19 @@
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/maintenance/port/aft)
|
||||
"bOL" = (
|
||||
/obj/machinery/button/door/directional/south{
|
||||
id = "roboticsprivacy2";
|
||||
name = "Robotics Privacy Control";
|
||||
req_access = list("robotics")
|
||||
},
|
||||
/obj/structure/closet/crate/mod,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/robotics/lab)
|
||||
"bPa" = (
|
||||
/obj/machinery/computer/security/qm{
|
||||
dir = 4
|
||||
@@ -5553,6 +5585,21 @@
|
||||
/obj/machinery/atmospherics/components/trinary/filter,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/starboard/greater)
|
||||
"bXs" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/stack/sheet/mineral/plasma{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/reagent_containers/dropper{
|
||||
pixel_y = -4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/light_switch/directional/west,
|
||||
/obj/effect/turf_decal/tile/purple/half/contrasted{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"bXO" = (
|
||||
/turf/closed/indestructible/riveted{
|
||||
desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease";
|
||||
@@ -6882,15 +6929,6 @@
|
||||
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/abandoned)
|
||||
"czf" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/plumbing/growing_vat{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"czs" = (
|
||||
/obj/structure/easel,
|
||||
/obj/effect/mapping_helpers/broken_floor,
|
||||
@@ -7517,16 +7555,6 @@
|
||||
/obj/effect/turf_decal/tile/brown/anticorner/contrasted,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/cargo/sorting)
|
||||
"cOM" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Cytology Lab - Worklab";
|
||||
network = list("ss13","rd","xeno")
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"cON" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/pai_card,
|
||||
@@ -7981,23 +8009,6 @@
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/science/robotics/mechbay)
|
||||
"cXl" = (
|
||||
/obj/machinery/door_buttons/access_button{
|
||||
idDoor = "xeno_airlock_interior";
|
||||
idSelf = "xeno_airlock_control";
|
||||
name = "Access Button";
|
||||
pixel_x = 29;
|
||||
pixel_y = -8;
|
||||
req_access = list("xenobiology")
|
||||
},
|
||||
/obj/machinery/firealarm/directional/north,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
|
||||
/obj/item/soap,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology/hallway)
|
||||
"cXw" = (
|
||||
/obj/machinery/holopad,
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
@@ -8364,30 +8375,6 @@
|
||||
/obj/machinery/vending/wardrobe/law_wardrobe,
|
||||
/turf/open/floor/wood,
|
||||
/area/station/service/lawoffice)
|
||||
"deH" = (
|
||||
/obj/machinery/button/door/directional/south{
|
||||
id = "roboticsprivacy2";
|
||||
name = "Robotics Privacy Control";
|
||||
req_access = list("robotics")
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = 4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/structure/closet/crate/science{
|
||||
name = "MOD core crate"
|
||||
},
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/robotics/lab)
|
||||
"deO" = (
|
||||
/obj/effect/spawner/random/maintenance,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -11715,6 +11702,15 @@
|
||||
/obj/structure/grille,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/station/engineering/atmos)
|
||||
"eoZ" = (
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"epv" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/hand_labeler{
|
||||
@@ -12485,13 +12481,6 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/atmos/storage/gas)
|
||||
"eEE" = (
|
||||
/obj/structure/chair/office/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple/corner,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"eEG" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
@@ -15112,13 +15101,6 @@
|
||||
/obj/machinery/light/small/directional/north,
|
||||
/turf/open/floor/wood,
|
||||
/area/station/command/corporate_showroom)
|
||||
"fEG" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small/directional/east,
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"fEK" = (
|
||||
/turf/closed/wall,
|
||||
/area/station/medical/medbay/central)
|
||||
@@ -17600,12 +17582,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/virology)
|
||||
"gAC" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"gAH" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -18237,12 +18213,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/security/medical)
|
||||
"gMo" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"gMt" = (
|
||||
/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{
|
||||
dir = 4
|
||||
@@ -19379,6 +19349,21 @@
|
||||
/obj/effect/spawner/random/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/starboard/fore)
|
||||
"hjw" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/book/manual/wiki/cytology{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/biopsy_tool{
|
||||
pixel_x = 8;
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"hjx" = (
|
||||
/obj/effect/turf_decal/tile/yellow/half/contrasted,
|
||||
/obj/machinery/status_display/ai/directional/south,
|
||||
@@ -25052,21 +25037,6 @@
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/treatment_center)
|
||||
"jfp" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/book/manual/wiki/cytology{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/biopsy_tool{
|
||||
pixel_x = 8;
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"jfr" = (
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
@@ -25314,6 +25284,20 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/science/xenobiology)
|
||||
"jjm" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/holopad,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple/fourcorners,
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"jjn" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/structure/cable,
|
||||
@@ -25408,6 +25392,23 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
|
||||
/turf/open/floor/iron/dark/textured,
|
||||
/area/station/medical/cryo)
|
||||
"jkX" = (
|
||||
/obj/machinery/door_buttons/access_button{
|
||||
idDoor = "xeno_airlock_interior";
|
||||
idSelf = "xeno_airlock_control";
|
||||
name = "Access Button";
|
||||
pixel_x = 29;
|
||||
pixel_y = -8;
|
||||
req_access = list("xenobiology")
|
||||
},
|
||||
/obj/machinery/firealarm/directional/north,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
|
||||
/obj/item/soap,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology/hallway)
|
||||
"jld" = (
|
||||
/obj/structure/chair/stool/directional/west,
|
||||
/turf/open/floor/iron,
|
||||
@@ -25801,6 +25802,15 @@
|
||||
/obj/effect/turf_decal/tile/yellow/fourcorners,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/pharmacy)
|
||||
"jsi" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"jsj" = (
|
||||
/obj/machinery/shower/directional/west,
|
||||
/obj/structure/extinguisher_cabinet/directional/north,
|
||||
@@ -26757,6 +26767,12 @@
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/cargo/sorting)
|
||||
"jHX" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"jIg" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/belt/utility,
|
||||
@@ -29322,6 +29338,13 @@
|
||||
/obj/machinery/incident_display/delam/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/engineering/main)
|
||||
"kCr" = (
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"kCt" = (
|
||||
/obj/machinery/status_display/door_timer{
|
||||
id = "Cell 2";
|
||||
@@ -34417,6 +34440,13 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay/central)
|
||||
"myr" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"myB" = (
|
||||
/obj/structure/chair,
|
||||
/obj/structure/cable,
|
||||
@@ -34482,15 +34512,6 @@
|
||||
/obj/structure/window/spawner/directional/south,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/security/prison/mess)
|
||||
"mzn" = (
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"mzs" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -34999,11 +35020,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/virology)
|
||||
"mHn" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
|
||||
/obj/effect/turf_decal/siding/purple,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"mHy" = (
|
||||
/obj/structure/rack,
|
||||
/turf/open/floor/plating,
|
||||
@@ -36231,21 +36247,6 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/security/execution/education)
|
||||
"ncr" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/stack/sheet/mineral/plasma{
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/reagent_containers/dropper{
|
||||
pixel_y = -4
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/light_switch/directional/west,
|
||||
/obj/effect/turf_decal/tile/purple/half/contrasted{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"ncv" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/hoop{
|
||||
@@ -38047,6 +38048,13 @@
|
||||
/obj/machinery/power/apc/auto_name/directional/south,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/security/prison/garden)
|
||||
"nHG" = (
|
||||
/obj/structure/chair/office/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple/corner,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"nIj" = (
|
||||
/obj/structure/easel,
|
||||
/turf/open/floor/plating,
|
||||
@@ -39267,12 +39275,6 @@
|
||||
/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/service/hydroponics)
|
||||
"odP" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"oet" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 1
|
||||
@@ -39351,21 +39353,6 @@
|
||||
/obj/machinery/airalarm/directional/south,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/chemistry)
|
||||
"ogx" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple/half/contrasted{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"ogL" = (
|
||||
/obj/structure/mirror/directional/north,
|
||||
/obj/structure/sink/directional/south,
|
||||
@@ -39999,6 +39986,16 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/cargo/miningoffice)
|
||||
"oue" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/obj/item/plunger{
|
||||
pixel_y = 20;
|
||||
pixel_x = -7
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"ouj" = (
|
||||
/obj/structure/bed/roller,
|
||||
/obj/structure/bed/roller,
|
||||
@@ -40133,35 +40130,6 @@
|
||||
/obj/structure/closet/secure_closet/hop,
|
||||
/turf/open/floor/wood,
|
||||
/area/station/command/heads_quarters/hop)
|
||||
"ovQ" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/radio/intercom/directional/west,
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Xenobiology Lab - Fore";
|
||||
network = list("ss13","rd","xeno")
|
||||
},
|
||||
/obj/machinery/light/directional/west,
|
||||
/obj/structure/cable,
|
||||
/obj/effect/turf_decal/tile/purple/half/contrasted{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/reagent_containers/cup/beaker/large{
|
||||
pixel_x = -6;
|
||||
pixel_y = 22
|
||||
},
|
||||
/obj/item/reagent_containers/cup/beaker{
|
||||
pixel_x = 4;
|
||||
pixel_y = 17
|
||||
},
|
||||
/obj/item/food/tofu{
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/food/tofu,
|
||||
/obj/item/food/tofu{
|
||||
pixel_y = -6
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"ovX" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden,
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -41226,6 +41194,13 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/fore)
|
||||
"oQk" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small/directional/east,
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"oQx" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/suit_storage_unit/industrial/loader,
|
||||
@@ -42447,6 +42422,11 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/carpet,
|
||||
/area/station/command/bridge)
|
||||
"ppC" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/floor/grass,
|
||||
/area/station/science/cytology)
|
||||
"ppG" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
@@ -43703,16 +43683,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark/corner,
|
||||
/area/station/engineering/atmos/storage/gas)
|
||||
"pLp" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/obj/item/plunger{
|
||||
pixel_y = 20;
|
||||
pixel_x = -7
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"pLs" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -44678,18 +44648,6 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/port)
|
||||
"qez" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"qeJ" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/door/firedoor,
|
||||
@@ -50983,6 +50941,10 @@
|
||||
/obj/effect/spawner/random/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/port/aft)
|
||||
"sri" = (
|
||||
/obj/machinery/duct,
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"srk" = (
|
||||
/obj/structure/sign/warning/electric_shock,
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -52032,6 +51994,15 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/engineering/supermatter)
|
||||
"sKf" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/plumbing/growing_vat{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"sKs" = (
|
||||
/obj/structure/closet/bombcloset/security,
|
||||
/obj/effect/turf_decal/tile/red/half/contrasted{
|
||||
@@ -52444,6 +52415,11 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/port)
|
||||
"sRa" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
|
||||
/obj/effect/turf_decal/siding/purple,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"sRf" = (
|
||||
/obj/effect/turf_decal/plaque{
|
||||
icon_state = "L11"
|
||||
@@ -53796,6 +53772,12 @@
|
||||
/obj/structure/window/reinforced/spawner/directional/west,
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/xenobiology)
|
||||
"toR" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"toV" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -54152,6 +54134,21 @@
|
||||
/obj/effect/spawner/random/structure/grille,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/port/fore)
|
||||
"twu" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple/half/contrasted{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"twy" = (
|
||||
/obj/effect/turf_decal/siding/purple,
|
||||
/turf/open/floor/iron/dark,
|
||||
@@ -54238,6 +54235,12 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/service/hydroponics)
|
||||
"tyj" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"tyy" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
|
||||
dir = 1
|
||||
@@ -63002,10 +63005,6 @@
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/turf/open/floor/carpet,
|
||||
/area/station/commons/dorms)
|
||||
"wvM" = (
|
||||
/obj/machinery/duct,
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"wvP" = (
|
||||
/obj/machinery/iv_drip,
|
||||
/obj/machinery/airalarm/directional/north,
|
||||
@@ -63432,20 +63431,6 @@
|
||||
/obj/machinery/digital_clock/directional/north,
|
||||
/turf/open/floor/wood,
|
||||
/area/station/service/library)
|
||||
"wEc" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/holopad,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple/fourcorners,
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"wEf" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{
|
||||
dir = 1
|
||||
@@ -64143,6 +64128,16 @@
|
||||
/obj/structure/window/spawner/directional/west,
|
||||
/turf/open/floor/grass,
|
||||
/area/station/service/hydroponics/garden)
|
||||
"wRL" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Cytology Lab - Worklab";
|
||||
network = list("ss13","rd","xeno")
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured_large,
|
||||
/area/station/science/cytology)
|
||||
"wRP" = (
|
||||
/obj/effect/turf_decal/trimline/brown/filled/corner{
|
||||
dir = 8
|
||||
@@ -64834,6 +64829,14 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/research)
|
||||
"xfm" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
/obj/structure/microscope,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"xfx" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/stack/medical/mesh,
|
||||
@@ -66263,11 +66266,6 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/carpet,
|
||||
/area/station/command/heads_quarters/captain/private)
|
||||
"xDl" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/floor/grass,
|
||||
/area/station/science/cytology)
|
||||
"xDu" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -66671,15 +66669,6 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/exit/departure_lounge)
|
||||
"xMG" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/cytology)
|
||||
"xML" = (
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/wood,
|
||||
@@ -97566,7 +97555,7 @@ uBy
|
||||
kiy
|
||||
qDy
|
||||
reL
|
||||
deH
|
||||
bOL
|
||||
eut
|
||||
kwy
|
||||
gwf
|
||||
@@ -109650,7 +109639,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
wmL
|
||||
cXl
|
||||
jkX
|
||||
frs
|
||||
dFo
|
||||
wmL
|
||||
@@ -110163,8 +110152,8 @@ oMA
|
||||
oMA
|
||||
oMA
|
||||
eYu
|
||||
ovQ
|
||||
ncr
|
||||
agN
|
||||
bXs
|
||||
tLc
|
||||
juH
|
||||
pJA
|
||||
@@ -110415,14 +110404,14 @@ lMJ
|
||||
aaa
|
||||
aaa
|
||||
uaR
|
||||
pLp
|
||||
cOM
|
||||
gMo
|
||||
aTh
|
||||
bxF
|
||||
eEE
|
||||
jfp
|
||||
qez
|
||||
oue
|
||||
wRL
|
||||
tyj
|
||||
myr
|
||||
xfm
|
||||
nHG
|
||||
hjw
|
||||
bqJ
|
||||
hzL
|
||||
wNO
|
||||
tml
|
||||
@@ -110672,14 +110661,14 @@ dxK
|
||||
aaa
|
||||
aaa
|
||||
oMA
|
||||
czf
|
||||
wvM
|
||||
wvM
|
||||
biD
|
||||
sKf
|
||||
sri
|
||||
sri
|
||||
kCr
|
||||
tsy
|
||||
mHn
|
||||
xDl
|
||||
ogx
|
||||
sRa
|
||||
ppC
|
||||
twu
|
||||
mKD
|
||||
hxY
|
||||
nae
|
||||
@@ -110929,14 +110918,14 @@ lMJ
|
||||
aaa
|
||||
aaa
|
||||
uaR
|
||||
odP
|
||||
fEG
|
||||
gAC
|
||||
gAC
|
||||
jHX
|
||||
oQk
|
||||
toR
|
||||
toR
|
||||
syV
|
||||
xMG
|
||||
mzn
|
||||
wEc
|
||||
jsi
|
||||
eoZ
|
||||
jjm
|
||||
nui
|
||||
wWV
|
||||
onD
|
||||
|
||||
@@ -13784,17 +13784,6 @@
|
||||
/obj/machinery/light/directional/west,
|
||||
/turf/open/misc/dirt/jungle,
|
||||
/area/station/security/prison/garden)
|
||||
"dAu" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/plate,
|
||||
/obj/item/knife/plastic{
|
||||
pixel_x = 16
|
||||
},
|
||||
/obj/item/food/donkpocket/warm/berry{
|
||||
pixel_y = 7
|
||||
},
|
||||
/turf/open/floor/iron/kitchen,
|
||||
/area/station/command/heads_quarters/rd)
|
||||
"dAB" = (
|
||||
/obj/structure/closet/firecloset,
|
||||
/turf/open/floor/iron/smooth_large,
|
||||
@@ -17124,6 +17113,14 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/floor1/starboard/fore)
|
||||
"eur" = (
|
||||
/obj/effect/mapping_helpers/airlock/access/any/supply/mining,
|
||||
/obj/machinery/door/airlock/multi_tile/public/glass{
|
||||
name = "Xenoflora"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/textured_large,
|
||||
/area/station/cargo/miningdock)
|
||||
"euu" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/iron,
|
||||
@@ -18906,6 +18903,14 @@
|
||||
/obj/machinery/light/directional/north,
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/station/command/heads_quarters/captain/private)
|
||||
"eVs" = (
|
||||
/obj/effect/turf_decal/tile/purple/opposingcorners,
|
||||
/obj/machinery/computer/security/telescreen/rd{
|
||||
pixel_x = -30
|
||||
},
|
||||
/obj/item/kirbyplants/random,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/command/heads_quarters/rd)
|
||||
"eVN" = (
|
||||
/obj/structure/grille/broken,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -20842,6 +20847,12 @@
|
||||
/obj/structure/sign/poster/official/random/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/hallway/floor2/fore)
|
||||
"fAQ" = (
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron/dark/side{
|
||||
dir = 1
|
||||
},
|
||||
/area/station/hallway/secondary/exit)
|
||||
"fAT" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
@@ -46425,6 +46436,16 @@
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/catwalk_floor,
|
||||
/area/station/maintenance/floor4/starboard)
|
||||
"mfY" = (
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Command - Research Director's Quarters #1"
|
||||
},
|
||||
/obj/effect/baseturf_helper/reinforced_plating/ceiling,
|
||||
/obj/machinery/newscaster/directional/west,
|
||||
/obj/item/kirbyplants/random/dead/research_director,
|
||||
/turf/open/floor/iron/large,
|
||||
/area/station/command/heads_quarters/rd)
|
||||
"mge" = (
|
||||
/obj/effect/turf_decal/trimline/blue/line{
|
||||
dir = 4
|
||||
@@ -55820,16 +55841,6 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
|
||||
/turf/open/floor/mineral/silver,
|
||||
/area/station/service/chapel)
|
||||
"oAF" = (
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Command - Research Director's Quarters #1"
|
||||
},
|
||||
/obj/effect/baseturf_helper/reinforced_plating/ceiling,
|
||||
/obj/machinery/newscaster/directional/west,
|
||||
/obj/item/kirbyplants/random/dead/research_director,
|
||||
/turf/open/floor/iron/large,
|
||||
/area/station/command/heads_quarters/rd)
|
||||
"oAH" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/warning{
|
||||
dir = 8
|
||||
@@ -65517,12 +65528,6 @@
|
||||
},
|
||||
/turf/open/floor/glass/reinforced,
|
||||
/area/station/service/library)
|
||||
"rdZ" = (
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron/dark/side{
|
||||
dir = 1
|
||||
},
|
||||
/area/station/hallway/secondary/exit)
|
||||
"rec" = (
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron/dark/side{
|
||||
@@ -66083,14 +66088,6 @@
|
||||
/obj/machinery/computer/records/medical,
|
||||
/turf/open/floor/iron/dark/textured,
|
||||
/area/station/medical/paramedic)
|
||||
"rmg" = (
|
||||
/obj/effect/mapping_helpers/airlock/access/any/supply/mining,
|
||||
/obj/machinery/door/airlock/multi_tile/public/glass{
|
||||
name = "Xenoflora"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/turf/open/floor/iron/textured_large,
|
||||
/area/station/cargo/miningdock)
|
||||
"rmm" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/camera/autoname/directional/north,
|
||||
@@ -66821,19 +66818,6 @@
|
||||
/obj/effect/spawner/random/maintenance,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/station/maintenance/floor2/port/fore)
|
||||
"rwV" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = 4;
|
||||
pixel_y = -4
|
||||
},
|
||||
/obj/item/mod/core/standard,
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/turf/open/floor/iron/dark/smooth_large,
|
||||
/area/station/science/robotics/lab)
|
||||
"rwY" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/modular_computer/preset/civilian{
|
||||
@@ -71927,14 +71911,6 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/service/library/lounge)
|
||||
"sTm" = (
|
||||
/obj/effect/turf_decal/tile/purple/opposingcorners,
|
||||
/obj/machinery/computer/security/telescreen/rd{
|
||||
pixel_x = -30
|
||||
},
|
||||
/obj/item/kirbyplants/random,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/command/heads_quarters/rd)
|
||||
"sTq" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/plating,
|
||||
@@ -81209,6 +81185,10 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/ordnance/testlab)
|
||||
"voZ" = (
|
||||
/obj/structure/closet/crate/mod,
|
||||
/turf/open/floor/iron/dark/smooth_large,
|
||||
/area/station/science/robotics/lab)
|
||||
"vpa" = (
|
||||
/obj/item/kirbyplants/random,
|
||||
/turf/open/floor/iron/dark,
|
||||
@@ -91284,6 +91264,17 @@
|
||||
/obj/machinery/camera/autoname/directional/east,
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/station/service/chapel/office)
|
||||
"xRh" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/plate,
|
||||
/obj/item/knife/plastic{
|
||||
pixel_x = 16
|
||||
},
|
||||
/obj/item/food/donkpocket/warm/berry{
|
||||
pixel_y = 7
|
||||
},
|
||||
/turf/open/floor/iron/kitchen,
|
||||
/area/station/command/heads_quarters/rd)
|
||||
"xRk" = (
|
||||
/obj/structure/frame/computer{
|
||||
dir = 8
|
||||
@@ -107280,7 +107271,7 @@ eSX
|
||||
ylE
|
||||
qiy
|
||||
hhx
|
||||
rdZ
|
||||
fAQ
|
||||
bfX
|
||||
tqx
|
||||
svs
|
||||
@@ -123710,7 +123701,7 @@ cwG
|
||||
qly
|
||||
pEv
|
||||
pnr
|
||||
rmg
|
||||
eur
|
||||
tQf
|
||||
qzm
|
||||
gtX
|
||||
@@ -186409,7 +186400,7 @@ hge
|
||||
hge
|
||||
hge
|
||||
oiO
|
||||
sTm
|
||||
eVs
|
||||
pKO
|
||||
aiN
|
||||
jDc
|
||||
@@ -202378,7 +202369,7 @@ bpA
|
||||
bfs
|
||||
cVT
|
||||
jXc
|
||||
rwV
|
||||
voZ
|
||||
lcv
|
||||
lcv
|
||||
bHU
|
||||
@@ -253232,7 +253223,7 @@ qVO
|
||||
plz
|
||||
bYJ
|
||||
rWT
|
||||
oAF
|
||||
mfY
|
||||
vQs
|
||||
rWT
|
||||
lEo
|
||||
@@ -254261,7 +254252,7 @@ hUT
|
||||
iHm
|
||||
rWT
|
||||
rWT
|
||||
dAu
|
||||
xRh
|
||||
iHm
|
||||
kgT
|
||||
qrd
|
||||
|
||||
@@ -5421,10 +5421,6 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/xenobiology)
|
||||
"aLW" = (
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/floor/grass,
|
||||
/area/station/science/xenobiology)
|
||||
"aMc" = (
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/flipped{
|
||||
dir = 1
|
||||
@@ -6526,14 +6522,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/turret_protected/aisat_interior)
|
||||
"bef" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"bej" = (
|
||||
/obj/machinery/newscaster/directional/north,
|
||||
/obj/effect/turf_decal/trimline/green/filled/line,
|
||||
@@ -7770,21 +7758,6 @@
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/command/nuke_storage)
|
||||
"bEI" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/button/door/directional/east{
|
||||
id = "cytologysecure1";
|
||||
name = "Secure Pen Lockdown"
|
||||
},
|
||||
/obj/machinery/light/directional/north,
|
||||
/obj/item/soap{
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/xenobiology)
|
||||
"bEM" = (
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 10
|
||||
@@ -21505,6 +21478,13 @@
|
||||
/obj/machinery/light/directional/east,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/cargo/miningdock)
|
||||
"gFm" = (
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/xenobiology)
|
||||
"gFt" = (
|
||||
/obj/machinery/power/apc/auto_name/directional/south,
|
||||
/obj/structure/cable,
|
||||
@@ -23672,6 +23652,13 @@
|
||||
dir = 1
|
||||
},
|
||||
/area/station/hallway/secondary/service)
|
||||
"hwQ" = (
|
||||
/obj/effect/turf_decal/box/red,
|
||||
/obj/machinery/plumbing/growing_vat{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/xenobiology)
|
||||
"hyE" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/book/manual/wiki/security_space_law{
|
||||
@@ -26214,27 +26201,6 @@
|
||||
},
|
||||
/turf/open/floor/catwalk_floor,
|
||||
/area/station/maintenance/port/central)
|
||||
"ixu" = (
|
||||
/obj/structure/closet/crate/science{
|
||||
name = "MOD core crate"
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/mod/core/standard{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/structure/noticeboard/directional/north,
|
||||
/obj/machinery/camera/directional/north{
|
||||
c_tag = "Science - Robotics";
|
||||
network = list("ss13","rd")
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/robotics/lab)
|
||||
"ixC" = (
|
||||
/obj/machinery/computer/upload/ai{
|
||||
dir = 8
|
||||
@@ -28304,15 +28270,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/cargo/drone_bay)
|
||||
"jiT" = (
|
||||
/obj/machinery/airalarm/directional/west,
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Science - Cytology West";
|
||||
network = list("ss13","rd","xeno")
|
||||
},
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/floor/grass,
|
||||
/area/station/science/xenobiology)
|
||||
"jjl" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -30327,17 +30284,6 @@
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/hallway/secondary/entry)
|
||||
"jTi" = (
|
||||
/obj/effect/turf_decal/trimline/neutral/warning,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/table_clock{
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/structure/window/reinforced/spawner/directional/north,
|
||||
/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/obj/structure/window/reinforced/spawner/directional/west,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/morgue)
|
||||
"jTC" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
@@ -32018,6 +31964,21 @@
|
||||
"kvt" = (
|
||||
/turf/closed/wall,
|
||||
/area/station/science/genetics)
|
||||
"kvO" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/button/door/directional/east{
|
||||
id = "cytologysecure1";
|
||||
name = "Secure Pen Lockdown"
|
||||
},
|
||||
/obj/machinery/light/directional/north,
|
||||
/obj/item/soap{
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/structure/table/glass,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/xenobiology)
|
||||
"kwe" = (
|
||||
/obj/structure/ladder,
|
||||
/turf/open/floor/iron/grimy,
|
||||
@@ -40447,6 +40408,18 @@
|
||||
},
|
||||
/turf/open/floor/iron/stairs/right,
|
||||
/area/station/hallway/secondary/construction/engineering)
|
||||
"nsK" = (
|
||||
/obj/effect/turf_decal/trimline/purple/filled/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"nti" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -41784,6 +41757,13 @@
|
||||
"nSI" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/station/commons/vacant_room/commissary)
|
||||
"nSR" = (
|
||||
/obj/machinery/light/small/directional/east,
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/xenobiology)
|
||||
"nSV" = (
|
||||
/obj/effect/turf_decal/trimline/red/filled/corner{
|
||||
dir = 1
|
||||
@@ -42833,13 +42813,6 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/commons/fitness/recreation)
|
||||
"okW" = (
|
||||
/obj/machinery/light/small/directional/east,
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/xenobiology)
|
||||
"olc" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/camera_film{
|
||||
@@ -43920,14 +43893,6 @@
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/station/science/xenobiology)
|
||||
"oKW" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"oKZ" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
@@ -47561,6 +47526,15 @@
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space/basic,
|
||||
/area/station/solars/starboard/fore)
|
||||
"pZM" = (
|
||||
/obj/machinery/airalarm/directional/west,
|
||||
/obj/machinery/camera/directional/west{
|
||||
c_tag = "Science - Cytology West";
|
||||
network = list("ss13","rd","xeno")
|
||||
},
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/floor/grass,
|
||||
/area/station/science/xenobiology)
|
||||
"pZW" = (
|
||||
/turf/closed/wall,
|
||||
/area/station/maintenance/port/central)
|
||||
@@ -47752,6 +47726,17 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay/central)
|
||||
"qdO" = (
|
||||
/obj/effect/turf_decal/trimline/neutral/warning,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/table_clock{
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/structure/window/reinforced/spawner/directional/north,
|
||||
/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/obj/structure/window/reinforced/spawner/directional/west,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/morgue)
|
||||
"qdY" = (
|
||||
/obj/effect/turf_decal/siding/thinplating{
|
||||
dir = 10
|
||||
@@ -51697,6 +51682,24 @@
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/ordnance/office)
|
||||
"rzt" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/box/gloves{
|
||||
pixel_x = -4;
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/item/storage/box/masks{
|
||||
pixel_x = 4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/wrench,
|
||||
/obj/item/knife/kitchen,
|
||||
/obj/effect/turf_decal/siding/purple,
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"rzO" = (
|
||||
/obj/structure/chair,
|
||||
/obj/machinery/airalarm/directional/north,
|
||||
@@ -53510,6 +53513,14 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/commons/fitness/recreation)
|
||||
"sjT" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"skb" = (
|
||||
/obj/machinery/disposal/bin,
|
||||
/obj/effect/turf_decal/trimline/brown/filled/line{
|
||||
@@ -54632,6 +54643,19 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/turret_protected/aisat_interior)
|
||||
"sEx" = (
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/firealarm/directional/west,
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"sEV" = (
|
||||
/obj/machinery/computer/monitor{
|
||||
dir = 8
|
||||
@@ -56139,19 +56163,6 @@
|
||||
"tes" = (
|
||||
/turf/open/floor/glass/reinforced,
|
||||
/area/station/command/heads_quarters/rd)
|
||||
"tez" = (
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/firealarm/directional/west,
|
||||
/obj/effect/turf_decal/siding/purple/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"teM" = (
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/corner,
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/corner{
|
||||
@@ -56711,6 +56722,16 @@
|
||||
/obj/machinery/light/directional/west,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/escapepodbay)
|
||||
"tpr" = (
|
||||
/obj/structure/noticeboard/directional/north,
|
||||
/obj/machinery/camera/directional/north{
|
||||
c_tag = "Science - Robotics";
|
||||
network = list("ss13","rd")
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral/fourcorners,
|
||||
/obj/structure/closet/crate/mod,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/robotics/lab)
|
||||
"tpB" = (
|
||||
/obj/machinery/door/airlock/maintenance_hatch{
|
||||
name = "Chapel Maintenance Hatch"
|
||||
@@ -63714,13 +63735,6 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/service/janitor)
|
||||
"vEA" = (
|
||||
/obj/effect/turf_decal/box/red,
|
||||
/obj/machinery/plumbing/growing_vat{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/xenobiology)
|
||||
"vEK" = (
|
||||
/obj/machinery/medical_kiosk,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
@@ -66473,13 +66487,6 @@
|
||||
/obj/effect/turf_decal/siding/thinplating/dark,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/research)
|
||||
"wFD" = (
|
||||
/obj/machinery/light/small/directional/west,
|
||||
/obj/machinery/plumbing/input{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/xenobiology)
|
||||
"wFR" = (
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line,
|
||||
/obj/structure/sign/gym/mirrored{
|
||||
@@ -66937,24 +66944,6 @@
|
||||
/obj/machinery/newscaster/directional/north,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/security/checkpoint/escape)
|
||||
"wPe" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/box/gloves{
|
||||
pixel_x = -4;
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/item/storage/box/masks{
|
||||
pixel_x = 4;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/wrench,
|
||||
/obj/item/knife/kitchen,
|
||||
/obj/effect/turf_decal/siding/purple,
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"wPj" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
|
||||
/turf/open/floor/engine,
|
||||
@@ -67214,6 +67203,10 @@
|
||||
},
|
||||
/turf/open/floor/glass/reinforced,
|
||||
/area/station/science/research)
|
||||
"wXi" = (
|
||||
/obj/machinery/hydroponics/soil,
|
||||
/turf/open/floor/grass,
|
||||
/area/station/science/xenobiology)
|
||||
"wXx" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
@@ -67589,18 +67582,6 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/security/prison/safe)
|
||||
"xfh" = (
|
||||
/obj/effect/turf_decal/trimline/purple/filled/corner{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"xft" = (
|
||||
/obj/machinery/duct,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -67622,6 +67603,14 @@
|
||||
"xfH" = (
|
||||
/turf/open/floor/glass,
|
||||
/area/station/commons/lounge)
|
||||
"xfL" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/turf_decal/siding/purple{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"xfN" = (
|
||||
/obj/structure/cable/layer1,
|
||||
/obj/effect/turf_decal/trimline/yellow/arrow_ccw{
|
||||
@@ -172501,7 +172490,7 @@ hiZ
|
||||
wTP
|
||||
sFA
|
||||
uKP
|
||||
jTi
|
||||
qdO
|
||||
qfS
|
||||
gNN
|
||||
whz
|
||||
@@ -179181,7 +179170,7 @@ gYp
|
||||
mlC
|
||||
wjQ
|
||||
gyP
|
||||
ixu
|
||||
tpr
|
||||
eeE
|
||||
muZ
|
||||
gSF
|
||||
@@ -179979,8 +179968,8 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
qVr
|
||||
wFD
|
||||
vEA
|
||||
gFm
|
||||
hwQ
|
||||
soq
|
||||
abM
|
||||
abM
|
||||
@@ -180751,9 +180740,9 @@ qVr
|
||||
qVr
|
||||
jMs
|
||||
tsg
|
||||
wPe
|
||||
jiT
|
||||
aLW
|
||||
rzt
|
||||
pZM
|
||||
wXi
|
||||
soq
|
||||
vqe
|
||||
soq
|
||||
@@ -181008,10 +180997,10 @@ qVr
|
||||
gYw
|
||||
cHY
|
||||
aLR
|
||||
oKW
|
||||
bef
|
||||
xfh
|
||||
tez
|
||||
sjT
|
||||
xfL
|
||||
nsK
|
||||
sEx
|
||||
vPC
|
||||
qVr
|
||||
aaa
|
||||
@@ -182805,7 +182794,7 @@ qVr
|
||||
qVr
|
||||
qVr
|
||||
qVr
|
||||
bEI
|
||||
kvO
|
||||
cZH
|
||||
pWw
|
||||
uMu
|
||||
@@ -183577,8 +183566,8 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
qVr
|
||||
okW
|
||||
vEA
|
||||
nSR
|
||||
hwQ
|
||||
qVr
|
||||
aaa
|
||||
aaa
|
||||
|
||||
@@ -108,6 +108,10 @@
|
||||
#define COMSIG_CARBON_BLOCK_EAT (1 << 0)
|
||||
///Called when a carbon vomits : (distance, force)
|
||||
#define COMSIG_CARBON_VOMITED "carbon_vomited"
|
||||
///Called from apply_overlay(cache_index, overlay)
|
||||
#define COMSIG_CARBON_APPLY_OVERLAY "carbon_apply_overlay"
|
||||
///Called from remove_overlay(cache_index, overlay)
|
||||
#define COMSIG_CARBON_REMOVE_OVERLAY "carbon_remove_overlay"
|
||||
|
||||
// /mob/living/carbon/human signals
|
||||
|
||||
|
||||
@@ -43,5 +43,13 @@
|
||||
#define MOD_ICON_OVERRIDE "mod_icon_override"
|
||||
#define MOD_WORN_ICON_OVERRIDE "mod_worn_icon_override"
|
||||
|
||||
//Defines for MODlink frequencies
|
||||
#define MODLINK_FREQ_NANOTRASEN "NT"
|
||||
#define MODLINK_FREQ_SYNDICATE "SYND"
|
||||
#define MODLINK_FREQ_CHARLIE "CHRL"
|
||||
#define MODLINK_FREQ_CENTCOM "CC"
|
||||
|
||||
/// Global list of all /datum/mod_theme
|
||||
GLOBAL_LIST_INIT(mod_themes, setup_mod_themes())
|
||||
/// Global list of all ids associated to a /datum/mod_link instance
|
||||
GLOBAL_LIST_EMPTY(mod_link_ids)
|
||||
|
||||
@@ -573,6 +573,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
/// Mobs with this trait do care about a few grisly things, such as digging up graves. They also really do not like bringing people back to life or tending wounds, but love autopsies and amputations.
|
||||
#define TRAIT_MORBID "morbid"
|
||||
|
||||
/// Whether or not the user is in a MODlink call, prevents making more calls
|
||||
#define TRAIT_IN_CALL "in_call"
|
||||
|
||||
// METABOLISMS
|
||||
// Various jobs on the station have historically had better reactions
|
||||
// to various drinks and foodstuffs. Security liking donuts is a classic
|
||||
@@ -760,7 +763,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_CUSTOM_TAP_SOUND "no_tap_sound"
|
||||
/// Makes the feedback message when someone else is putting this item on you more noticeable
|
||||
#define TRAIT_DANGEROUS_OBJECT "dangerous_object"
|
||||
// determines whether or not objects are haunted and teleport/attack randomly
|
||||
/// determines whether or not objects are haunted and teleport/attack randomly
|
||||
#define TRAIT_HAUNTED "haunted"
|
||||
|
||||
//quirk traits
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
#define VV_HK_EDIT_FILTERS "edit_filters"
|
||||
#define VV_HK_EDIT_PARTICLES "edit_particles"
|
||||
#define VV_HK_EDIT_COLOR_MATRIX "edit_color_matrix"
|
||||
#define VV_HK_TEST_MATRIXES "test_matrixes"
|
||||
#define VV_HK_ADD_AI "add_ai"
|
||||
#define VV_HK_ARMOR_MOD "mod_obj_armor"
|
||||
|
||||
|
||||
@@ -103,3 +103,7 @@
|
||||
|
||||
/datum/action/item_action/flip
|
||||
name = "Flip"
|
||||
|
||||
/datum/action/item_action/call_link
|
||||
name = "Call MODlink"
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
/datum/chatmessage/proc/finish_image_generation(mheight, atom/target, mob/owner, complete_text, lifespan)
|
||||
var/rough_time = REALTIMEOFDAY
|
||||
approx_lines = max(1, mheight / CHAT_MESSAGE_APPROX_LHEIGHT)
|
||||
|
||||
var/starting_height = target.maptext_height
|
||||
// Translate any existing messages upwards, apply exponential decay factors to timers
|
||||
message_loc = isturf(target) ? target : get_atom_on_turf(target)
|
||||
if (owned_by.seen_messages)
|
||||
@@ -208,7 +208,12 @@
|
||||
// When choosing to update the remaining time we have to be careful not to update the
|
||||
// scheduled time once the EOL has been executed.
|
||||
if (time_spent >= time_before_fade)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
if(m.message.pixel_y < starting_height)
|
||||
var/max_height = m.message.pixel_y + m.approx_lines * CHAT_MESSAGE_APPROX_LHEIGHT - starting_height
|
||||
if(max_height > 0)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + max_height, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
else if(mheight + starting_height >= m.message.pixel_y)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
continue
|
||||
|
||||
var/remaining_time = time_before_fade * (CHAT_MESSAGE_EXP_DECAY ** idx++) * (CHAT_MESSAGE_HEIGHT_DECAY ** combined_height)
|
||||
@@ -225,7 +230,12 @@
|
||||
animate(alpha = 0, time = CHAT_MESSAGE_EOL_FADE)
|
||||
// We run this after the alpha animate, because we don't want to interrup it, but also don't want to block it by running first
|
||||
// Sooo instead we do this. bit messy but it fuckin works
|
||||
animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
if(m.message.pixel_y < starting_height)
|
||||
var/max_height = m.message.pixel_y + m.approx_lines * CHAT_MESSAGE_APPROX_LHEIGHT - starting_height
|
||||
if(max_height > 0)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + max_height, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
else if(mheight + starting_height >= m.message.pixel_y)
|
||||
animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL)
|
||||
|
||||
// Reset z index if relevant
|
||||
if (current_z_idx >= CHAT_LAYER_MAX_Z)
|
||||
@@ -236,7 +246,7 @@
|
||||
SET_PLANE_EXPLICIT(message, RUNECHAT_PLANE, message_loc)
|
||||
message.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
|
||||
message.alpha = 0
|
||||
message.pixel_y = target.maptext_height
|
||||
message.pixel_y = starting_height
|
||||
message.pixel_x = -target.base_pixel_x
|
||||
message.maptext_width = CHAT_MESSAGE_WIDTH
|
||||
message.maptext_height = mheight * 1.25 // We add extra because some characters are superscript, like actions
|
||||
|
||||
@@ -1298,6 +1298,7 @@
|
||||
VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion")
|
||||
VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters")
|
||||
VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix")
|
||||
VV_DROPDOWN_OPTION(VV_HK_TEST_MATRIXES, "Test Matrices")
|
||||
VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller")
|
||||
VV_DROPDOWN_OPTION(VV_HK_ARMOR_MOD, "Modify Armor")
|
||||
if(greyscale_colors)
|
||||
@@ -1381,7 +1382,7 @@
|
||||
ai_controller = new result(src)
|
||||
|
||||
if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT))
|
||||
var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate")
|
||||
var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate","Shear")
|
||||
var/matrix/M = transform
|
||||
if(!result)
|
||||
return
|
||||
@@ -1398,6 +1399,12 @@
|
||||
if(isnull(x) || isnull(y))
|
||||
return
|
||||
transform = M.Translate(x,y)
|
||||
if("Shear")
|
||||
var/x = input(usr, "Choose x mod","Transform Mod") as null|num
|
||||
var/y = input(usr, "Choose y mod","Transform Mod") as null|num
|
||||
if(isnull(x) || isnull(y))
|
||||
return
|
||||
transform = M.Shear(x,y)
|
||||
if("Rotate")
|
||||
var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num
|
||||
if(isnull(angle))
|
||||
@@ -1440,12 +1447,13 @@
|
||||
vv_auto_rename(newname)
|
||||
|
||||
if(href_list[VV_HK_EDIT_FILTERS] && check_rights(R_VAREDIT))
|
||||
var/client/C = usr.client
|
||||
C?.open_filter_editor(src)
|
||||
usr.client?.open_filter_editor(src)
|
||||
|
||||
if(href_list[VV_HK_EDIT_COLOR_MATRIX] && check_rights(R_VAREDIT))
|
||||
var/client/C = usr.client
|
||||
C?.open_color_matrix_editor(src)
|
||||
usr.client?.open_color_matrix_editor(src)
|
||||
|
||||
if(href_list[VV_HK_TEST_MATRIXES] && check_rights(R_VAREDIT))
|
||||
usr.client?.open_matrix_tester(src)
|
||||
|
||||
/atom/vv_get_header()
|
||||
. = ..()
|
||||
@@ -1632,7 +1640,7 @@
|
||||
/atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool)
|
||||
return
|
||||
|
||||
///Check if the multitool has an item in it's data buffer
|
||||
///Check if an item supports a data buffer (is a multitool)
|
||||
/atom/proc/multitool_check_buffer(user, obj/item/multitool, silent = FALSE)
|
||||
if(!istype(multitool, /obj/item/multitool))
|
||||
if(user && !silent)
|
||||
@@ -2131,16 +2139,18 @@
|
||||
// Now we're gonna do a scanline effect
|
||||
// Gonna take this atom and give it a render target, then use it as a source for a filter
|
||||
// (We use an atom because it seems as if setting render_target on an MA is just invalid. I hate this engine)
|
||||
var/static/atom/movable/scanline
|
||||
if(!scanline)
|
||||
scanline = new(null)
|
||||
scanline.icon = 'icons/effects/effects.dmi'
|
||||
scanline.icon_state = "scanline"
|
||||
// * so it doesn't render
|
||||
scanline.render_target = "*HoloScanline"
|
||||
var/atom/movable/scanline = new(null)
|
||||
scanline.icon = 'icons/effects/effects.dmi'
|
||||
scanline.icon_state = "scanline"
|
||||
scanline.appearance_flags |= RESET_TRANSFORM
|
||||
// * so it doesn't render
|
||||
var/static/uid_scan = 0
|
||||
scanline.render_target = "*HoloScanline [uid_scan]"
|
||||
uid_scan++
|
||||
// Now we add it as a filter, and overlay the appearance so the render source is always around
|
||||
add_filter("HOLO: Scanline", 2, alpha_mask_filter(render_source = scanline.render_target))
|
||||
add_overlay(scanline)
|
||||
qdel(scanline)
|
||||
// Annd let's make the sucker emissive, so it glows in the dark
|
||||
if(!render_target)
|
||||
var/static/uid = 0
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
if(!multitool_check_buffer(user, tool))
|
||||
return
|
||||
var/obj/item/multitool/multitool = tool
|
||||
multitool.buffer = src
|
||||
multitool.set_buffer(src)
|
||||
to_chat(user, span_notice("You save the data in the [multitool.name]'s buffer."))
|
||||
return TOOL_ACT_TOOLTYPE_SUCCESS
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
if(istype(multi_tool.buffer, /obj/machinery/atmospherics/components/unary/outlet_injector))
|
||||
var/obj/machinery/atmospherics/components/unary/outlet_injector/input = multi_tool.buffer
|
||||
inlet_id = input.id_tag
|
||||
multi_tool.buffer = null
|
||||
multi_tool.set_buffer(null)
|
||||
balloon_alert(user, "connected to input")
|
||||
|
||||
else if(istype(multi_tool.buffer, /obj/machinery/atmospherics/components/unary/vent_pump))
|
||||
@@ -105,11 +105,11 @@
|
||||
output.external_pressure_bound = 0
|
||||
//finally assign it to this sensor
|
||||
outlet_id = output.id_tag
|
||||
multi_tool.buffer = null
|
||||
multi_tool.set_buffer(null)
|
||||
balloon_alert(user, "connected to output")
|
||||
|
||||
else
|
||||
multi_tool.buffer = src
|
||||
multi_tool.set_buffer(src)
|
||||
balloon_alert(user, "added to multitool buffer")
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
if(M.buffer && istype(M.buffer, /obj/machinery/launchpad))
|
||||
if(LAZYLEN(launchpads) < maximum_pads)
|
||||
launchpads |= M.buffer
|
||||
M.buffer = null
|
||||
M.set_buffer(null)
|
||||
to_chat(user, span_notice("You upload the data from the [W.name]'s buffer."))
|
||||
else
|
||||
to_chat(user, span_warning("[src] cannot handle any more connections!"))
|
||||
|
||||
@@ -100,11 +100,11 @@
|
||||
if(buffered_pad in mechpads)
|
||||
remove_pad(buffered_pad)
|
||||
connect_launchpad(buffered_pad)
|
||||
multitool.buffer = null
|
||||
multitool.set_buffer(null)
|
||||
to_chat(user, span_notice("You connect the console to the pad with data from the [multitool.name]'s buffer."))
|
||||
else
|
||||
add_pad(buffered_pad)
|
||||
multitool.buffer = null
|
||||
multitool.set_buffer(null)
|
||||
to_chat(user, span_notice("You upload the data from the [multitool.name]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You save the data in the [I.name]'s buffer."))
|
||||
return 1
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
if(!multitool_check_buffer(user, tool))
|
||||
return
|
||||
var/obj/item/multitool/multitool = tool
|
||||
multitool.buffer = src
|
||||
multitool.set_buffer(src)
|
||||
to_chat(user, span_notice("You save the data in the [multitool.name]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -350,7 +350,7 @@ DEFINE_BITFIELD(turret_flags, list(
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You add [src] to multitool buffer."))
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = parent_turret
|
||||
M.set_buffer(parent_turret)
|
||||
to_chat(user, span_notice("You add [parent_turret] to multitool buffer."))
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You save the data in [I]'s buffer. It can now be saved to pads with closed panels."))
|
||||
return TRUE
|
||||
else if(I.tool_behaviour == TOOL_MULTITOOL)
|
||||
|
||||
@@ -153,10 +153,10 @@
|
||||
var/obj/machinery/telecomms/T = heldmultitool.buffer
|
||||
. = add_new_link(T, operator)
|
||||
if("buffer")
|
||||
heldmultitool.buffer = src
|
||||
heldmultitool.set_buffer(src)
|
||||
. = TRUE
|
||||
if("flush")
|
||||
heldmultitool.buffer = null
|
||||
heldmultitool.set_buffer(null)
|
||||
. = TRUE
|
||||
|
||||
add_act(action, params)
|
||||
|
||||
@@ -185,13 +185,13 @@
|
||||
return
|
||||
var/obj/item/multitool/M = W
|
||||
if(panel_open)
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You download the data to the [W.name]'s buffer."))
|
||||
else
|
||||
if(M.buffer && istype(M.buffer, /obj/machinery/teleport/station) && M.buffer != src)
|
||||
if(linked_stations.len < efficiency)
|
||||
linked_stations.Add(M.buffer)
|
||||
M.buffer = null
|
||||
M.set_buffer(null)
|
||||
to_chat(user, span_notice("You upload the data from the [W.name]'s buffer."))
|
||||
else
|
||||
to_chat(user, span_alert("This station can't hold more information, try to use better parts."))
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
connected_botpad = buffered_remote
|
||||
connected_botpad.connected_remote = src
|
||||
connected_botpad.id = id
|
||||
multitool.buffer = null
|
||||
multitool.set_buffer(null)
|
||||
to_chat(user, span_notice("You connect the controller to the pad with data from the [multitool.name]'s buffer."))
|
||||
else
|
||||
to_chat(user, span_warning("Unable to upload!"))
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
custom_premium_price = PAYCHECK_COMMAND * 3
|
||||
toolspeed = 1
|
||||
usesound = 'sound/weapons/empty.ogg'
|
||||
var/obj/machinery/buffer // simple machine buffer for device linkage
|
||||
var/datum/buffer // simple machine buffer for device linkage
|
||||
var/mode = 0
|
||||
|
||||
/obj/item/multitool/examine(mob/user)
|
||||
@@ -41,6 +41,17 @@
|
||||
user.visible_message(span_suicide("[user] puts the [src] to [user.p_their()] chest. It looks like [user.p_theyre()] trying to pulse [user.p_their()] heart off!"))
|
||||
return OXYLOSS//theres a reason it wasn't recommended by doctors
|
||||
|
||||
/obj/item/multitool/proc/set_buffer(datum/buffer)
|
||||
if(buffer)
|
||||
UnregisterSignal(buffer, COMSIG_QDELETING)
|
||||
if(QDELETED(buffer))
|
||||
return
|
||||
src.buffer = buffer
|
||||
RegisterSignal(buffer, COMSIG_QDELETING, PROC_REF(on_buffer_del))
|
||||
|
||||
/obj/item/multitool/proc/on_buffer_del(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
buffer = null
|
||||
|
||||
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
|
||||
|
||||
|
||||
@@ -298,6 +298,18 @@
|
||||
icon_state = "scicrate"
|
||||
base_icon_state = "scicrate"
|
||||
|
||||
/obj/structure/closet/crate/mod
|
||||
name = "MOD crate"
|
||||
icon_state = "scicrate"
|
||||
base_icon_state = "scicrate"
|
||||
|
||||
/obj/structure/closet/crate/mod/PopulateContents()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/mod/core/standard(src)
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/clothing/neck/link_scryer(src)
|
||||
|
||||
/obj/structure/closet/crate/solarpanel_small
|
||||
name = "budget solar panel crate"
|
||||
icon_state = "engi_e_crate"
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
|
||||
/**
|
||||
* ## nobody wants to learn matrix math!
|
||||
*
|
||||
* More than just a completely true statement, this datum is created as a tgui interface
|
||||
* allowing you to modify each vector until you know what you're doing.
|
||||
* Much like filteriffic, 'nobody wants to learn matrix math' is meant for developers like you and I
|
||||
* to implement interesting matrix transformations without the hassle if needing to know... algebra? Damn, i'm stupid.
|
||||
*/
|
||||
/datum/nobody_wants_to_learn_matrix_math
|
||||
var/atom/target
|
||||
var/matrix/testing_matrix
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/New(atom/target)
|
||||
src.target = target
|
||||
testing_matrix = matrix(target.transform)
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/Destroy(force, ...)
|
||||
QDEL_NULL(testing_matrix)
|
||||
return ..()
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/ui_state(mob/user)
|
||||
return GLOB.admin_state
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/ui_close(mob/user)
|
||||
qdel(src)
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "MatrixMathTester")
|
||||
ui.open()
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/ui_data()
|
||||
var/list/data = list()
|
||||
data["matrix_a"] = testing_matrix.a
|
||||
data["matrix_b"] = testing_matrix.b
|
||||
data["matrix_c"] = testing_matrix.c
|
||||
data["matrix_d"] = testing_matrix.d
|
||||
data["matrix_e"] = testing_matrix.e
|
||||
data["matrix_f"] = testing_matrix.f
|
||||
data["pixelated"] = target.appearance_flags & PIXEL_SCALE
|
||||
return data
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/ui_act(action, list/params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("change_var")
|
||||
var/matrix_var_name = params["var_name"]
|
||||
var/matrix_var_value = params["var_value"]
|
||||
if(testing_matrix.vv_edit_var(matrix_var_name, matrix_var_value) == FALSE)
|
||||
to_chat(src, "Your edit was rejected by the object. This is a bug with the matrix tester, not your fault, so report it on github.", confidential = TRUE)
|
||||
return
|
||||
set_transform()
|
||||
if("scale")
|
||||
testing_matrix.Scale(params["x"], params["y"])
|
||||
set_transform()
|
||||
if("translate")
|
||||
testing_matrix.Translate(params["x"], params["y"])
|
||||
set_transform()
|
||||
if("shear")
|
||||
testing_matrix.Shear(params["x"], params["y"])
|
||||
set_transform()
|
||||
if("turn")
|
||||
testing_matrix.Turn(params["angle"])
|
||||
set_transform()
|
||||
if("toggle_pixel")
|
||||
target.appearance_flags ^= PIXEL_SCALE
|
||||
|
||||
/datum/nobody_wants_to_learn_matrix_math/proc/set_transform()
|
||||
animate(target, transform = testing_matrix, time = 0.5 SECONDS)
|
||||
testing_matrix = matrix(target.transform)
|
||||
|
||||
/client/proc/open_matrix_tester(atom/in_atom)
|
||||
if(holder)
|
||||
var/datum/nobody_wants_to_learn_matrix_math/matrix_tester = new(in_atom)
|
||||
matrix_tester.ui_interact(mob)
|
||||
@@ -183,7 +183,7 @@
|
||||
. = ..()
|
||||
if (istype(I))
|
||||
to_chat(user, span_notice("You register [src] in [I]s buffer."))
|
||||
I.buffer = src
|
||||
I.set_buffer(src)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/piratepad/screwdriver_act_secondary(mob/living/user, obj/item/screwdriver/screw)
|
||||
|
||||
@@ -122,7 +122,7 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/bluespace_sender/multitool_act(mob/living/user, obj/item/item)
|
||||
var/obj/item/multitool/multitool = item
|
||||
multitool.buffer = src
|
||||
multitool.set_buffer(src)
|
||||
to_chat(user, span_notice("You store linkage information in [item]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -48,12 +48,12 @@
|
||||
if(istype(multi_tool.buffer, /obj/machinery/air_sensor))
|
||||
var/obj/machinery/air_sensor/sensor = multi_tool.buffer
|
||||
sensor.inlet_id = id_tag
|
||||
multi_tool.buffer = null
|
||||
multi_tool.set_buffer(null)
|
||||
balloon_alert(user, "input linked to sensor")
|
||||
return TOOL_ACT_TOOLTYPE_SUCCESS
|
||||
|
||||
balloon_alert(user, "saved in buffer")
|
||||
multi_tool.buffer = src
|
||||
multi_tool.set_buffer(src)
|
||||
return TOOL_ACT_TOOLTYPE_SUCCESS
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/CtrlClick(mob/user)
|
||||
|
||||
@@ -58,12 +58,12 @@
|
||||
if(istype(multi_tool.buffer, /obj/machinery/air_sensor))
|
||||
var/obj/machinery/air_sensor/sensor = multi_tool.buffer
|
||||
sensor.outlet_id = id_tag
|
||||
multi_tool.buffer = null
|
||||
multi_tool.set_buffer(null)
|
||||
balloon_alert(user, "output linked to sensor")
|
||||
return TOOL_ACT_TOOLTYPE_SUCCESS
|
||||
|
||||
balloon_alert(user, "saved in buffer")
|
||||
multi_tool.buffer = src
|
||||
multi_tool.set_buffer(src)
|
||||
return TOOL_ACT_TOOLTYPE_SUCCESS
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/Destroy()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "beret_badge"
|
||||
inhand_icon_state = null
|
||||
greyscale_colors = "#397F3F#FFCE5B"
|
||||
|
||||
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT
|
||||
flags_inv = 0
|
||||
armor_type = /datum/armor/space_beret
|
||||
strip_delay = 130
|
||||
|
||||
@@ -99,5 +99,5 @@ GLOBAL_LIST_EMPTY(monkey_recyclers)
|
||||
. = ..()
|
||||
if(istype(I))
|
||||
to_chat(user, span_notice("You log [src] in the multitool's buffer."))
|
||||
I.buffer = src
|
||||
I.set_buffer(src)
|
||||
return TRUE
|
||||
|
||||
@@ -82,5 +82,6 @@
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
back = /obj/item/mod/control/pre_equipped/research
|
||||
suit = null
|
||||
head = null
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
internals_slot = ITEM_SLOT_SUITSTORE
|
||||
|
||||
@@ -183,7 +183,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
. = ..()
|
||||
if (istype(I))
|
||||
to_chat(user, span_notice("You log [src] in the multitool's buffer."))
|
||||
I.buffer = src
|
||||
I.set_buffer(src)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
if(!multitool_check_buffer(user, I))
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You store linkage information in [I]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -75,12 +75,14 @@
|
||||
/mob/living/carbon/proc/apply_overlay(cache_index)
|
||||
if((. = overlays_standing[cache_index]))
|
||||
add_overlay(.)
|
||||
SEND_SIGNAL(src, COMSIG_CARBON_APPLY_OVERLAY, cache_index, .)
|
||||
|
||||
/mob/living/carbon/proc/remove_overlay(cache_index)
|
||||
var/I = overlays_standing[cache_index]
|
||||
if(I)
|
||||
cut_overlay(I)
|
||||
overlays_standing[cache_index] = null
|
||||
SEND_SIGNAL(src, COMSIG_CARBON_REMOVE_OVERLAY, cache_index, I)
|
||||
|
||||
//used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body.
|
||||
/mob/living/carbon/human/proc/update_mutant_bodyparts(force_update = FALSE) // SKYRAT EDIT CHANGE
|
||||
|
||||
@@ -163,6 +163,7 @@
|
||||
if(!module.active || (module.allow_flags & MODULE_ALLOW_INACTIVE))
|
||||
continue
|
||||
module.on_deactivation(display_message = FALSE)
|
||||
mod_link.end_call()
|
||||
activating = TRUE
|
||||
to_chat(wearer, span_notice("MODsuit [active ? "shutting down" : "starting up"]."))
|
||||
|
||||
@@ -233,17 +234,15 @@
|
||||
if (!seal && wearer?.invalid_internals())
|
||||
wearer.cutoff_internals()
|
||||
|
||||
/// Finishes the suit's activation, starts processing
|
||||
/// Finishes the suit's activation
|
||||
/obj/item/mod/control/proc/finish_activation(on)
|
||||
active = on
|
||||
if(active)
|
||||
for(var/obj/item/mod/module/module as anything in modules)
|
||||
module.on_suit_activation()
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
for(var/obj/item/mod/module/module as anything in modules)
|
||||
module.on_suit_deactivation()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
update_speed()
|
||||
update_icon_state()
|
||||
wearer.update_clothing(slot_flags)
|
||||
|
||||
@@ -85,6 +85,10 @@
|
||||
var/obj/item/mod/module/selected_module
|
||||
/// AI or pAI mob inhabiting the MOD.
|
||||
var/mob/living/silicon/ai_assistant
|
||||
/// The MODlink datum, letting us call people from the suit.
|
||||
var/datum/mod_link/mod_link
|
||||
/// The starting MODlink frequency, overridden on subtypes that want it to be something.
|
||||
var/starting_frequency = null
|
||||
/// Delay between moves as AI.
|
||||
var/static/movedelay = 0
|
||||
/// Cooldown for AI moves.
|
||||
@@ -142,10 +146,10 @@
|
||||
for(var/obj/item/mod/module/module as anything in theme.inbuilt_modules)
|
||||
module = new module(src)
|
||||
install(module)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/mod/control/Destroy()
|
||||
if(active)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
for(var/obj/item/mod/module/module as anything in modules)
|
||||
uninstall(module, deleting = TRUE)
|
||||
for(var/obj/item/part as anything in mod_parts)
|
||||
@@ -174,6 +178,7 @@
|
||||
if(core)
|
||||
QDEL_NULL(core)
|
||||
QDEL_NULL(wires)
|
||||
QDEL_NULL(mod_link)
|
||||
return ..()
|
||||
|
||||
/obj/item/mod/control/atom_destruction(damage_flag)
|
||||
@@ -220,6 +225,7 @@
|
||||
. += span_notice("You could install a pAI with a <b>pAI card</b>.") // SKYRAT EDIT CHANGE - ORIGINAL: . += span_notice("You could install an AI or pAI using their <b>storage card</b>.")
|
||||
else if(isAI(ai_assistant))
|
||||
. += span_notice("You could remove [ai_assistant] with an <b>intellicard</b>.")
|
||||
. += span_notice("You could copy/set link frequency with a <b>multitool</b>.")
|
||||
. += span_notice("<i>You could examine it more thoroughly...</i>")
|
||||
|
||||
/obj/item/mod/control/examine_more(mob/user)
|
||||
@@ -229,13 +235,17 @@
|
||||
/obj/item/mod/control/process(seconds_per_tick)
|
||||
if(seconds_electrified > MACHINE_NOT_ELECTRIFIED)
|
||||
seconds_electrified--
|
||||
if(mod_link.link_call)
|
||||
subtract_charge((DEFAULT_CHARGE_DRAIN * 0.25) * seconds_per_tick)
|
||||
if(!active)
|
||||
return
|
||||
if(!get_charge() && active && !activating)
|
||||
power_off()
|
||||
return PROCESS_KILL
|
||||
return
|
||||
var/malfunctioning_charge_drain = 0
|
||||
if(malfunctioning)
|
||||
malfunctioning_charge_drain = rand(1,20)
|
||||
subtract_charge((charge_drain + malfunctioning_charge_drain)*seconds_per_tick)
|
||||
subtract_charge((charge_drain + malfunctioning_charge_drain) * seconds_per_tick)
|
||||
update_charge_alert()
|
||||
for(var/obj/item/mod/module/module as anything in modules)
|
||||
if(malfunctioning && module.active && SPT_PROB(5, seconds_per_tick))
|
||||
@@ -506,6 +516,7 @@
|
||||
retract(null, part)
|
||||
if(active)
|
||||
finish_activation(on = FALSE)
|
||||
mod_link?.end_call()
|
||||
var/mob/old_wearer = wearer
|
||||
unset_wearer()
|
||||
old_wearer.temporarilyRemoveItemFromInventory(src)
|
||||
@@ -600,6 +611,10 @@
|
||||
QDEL_LIST_ASSOC_VAL(old_module.pinned_to)
|
||||
old_module.mod = null
|
||||
|
||||
/// Intended for callbacks, don't use normally, just get wearer by itself.
|
||||
/obj/item/mod/control/proc/get_wearer()
|
||||
return wearer
|
||||
|
||||
/obj/item/mod/control/proc/update_access(mob/user, obj/item/card/id/card)
|
||||
if(!allowed(user))
|
||||
balloon_alert(user, "insufficient access!")
|
||||
|
||||
@@ -0,0 +1,520 @@
|
||||
/proc/make_link_visual_generic(datum/mod_link/mod_link, proc_path)
|
||||
var/mob/living/user = mod_link.get_user_callback.Invoke()
|
||||
var/obj/effect/overlay/link_visual = new()
|
||||
link_visual.name = "holocall ([mod_link.id])"
|
||||
link_visual.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
LAZYADD(mod_link.holder.update_on_z, link_visual)
|
||||
link_visual.appearance_flags |= KEEP_TOGETHER
|
||||
link_visual.makeHologram(0.75)
|
||||
mod_link.visual_overlays = user.overlays - user.active_thinking_indicator
|
||||
link_visual.add_overlay(mod_link.visual_overlays)
|
||||
mod_link.visual = link_visual
|
||||
mod_link.holder.become_hearing_sensitive(REF(mod_link))
|
||||
mod_link.holder.RegisterSignals(user, list(COMSIG_CARBON_APPLY_OVERLAY, COMSIG_CARBON_REMOVE_OVERLAY), proc_path)
|
||||
return link_visual
|
||||
|
||||
/proc/get_link_visual_generic(datum/mod_link/mod_link, atom/movable/visuals, proc_path)
|
||||
var/mob/living/user = mod_link.get_user_callback.Invoke()
|
||||
playsound(mod_link.holder, 'sound/machines/terminal_processing.ogg', 50, vary = TRUE)
|
||||
visuals.add_overlay(mutable_appearance('icons/effects/effects.dmi', "static_base", TURF_LAYER))
|
||||
visuals.add_overlay(mutable_appearance('icons/effects/effects.dmi', "modlink", ABOVE_ALL_MOB_LAYER))
|
||||
visuals.add_filter("crop_square", 1, alpha_mask_filter(icon = icon('icons/effects/effects.dmi', "modlink_filter")))
|
||||
visuals.maptext_height = 6
|
||||
visuals.alpha = 0
|
||||
user.vis_contents += visuals
|
||||
visuals.forceMove(user)
|
||||
animate(visuals, 0.5 SECONDS, alpha = 255)
|
||||
var/datum/callback/setdir_callback = CALLBACK(mod_link.holder, proc_path)
|
||||
setdir_callback.Invoke(user, user.dir, user.dir)
|
||||
mod_link.holder.RegisterSignal(mod_link.holder.loc, COMSIG_ATOM_DIR_CHANGE, proc_path)
|
||||
|
||||
/proc/delete_link_visual_generic(datum/mod_link/mod_link)
|
||||
var/mob/living/user = mod_link.get_user_callback.Invoke()
|
||||
playsound(mod_link.get_other().holder, 'sound/machines/terminal_processing.ogg', 50, vary = TRUE, frequency = -1)
|
||||
LAZYREMOVE(mod_link.holder.update_on_z, mod_link.visual)
|
||||
mod_link.holder.lose_hearing_sensitivity(REF(mod_link))
|
||||
mod_link.holder.UnregisterSignal(user, list(COMSIG_CARBON_APPLY_OVERLAY, COMSIG_CARBON_REMOVE_OVERLAY, COMSIG_ATOM_DIR_CHANGE))
|
||||
QDEL_NULL(mod_link.visual)
|
||||
|
||||
/proc/on_user_set_dir_generic(datum/mod_link/mod_link, newdir)
|
||||
var/atom/other_visual = mod_link.get_other().visual
|
||||
if(!newdir) //can sometimes be null or 0
|
||||
return
|
||||
other_visual.setDir(SOUTH)
|
||||
other_visual.pixel_x = 0
|
||||
other_visual.pixel_y = 0
|
||||
var/matrix/new_transform = matrix()
|
||||
if(newdir & NORTH)
|
||||
other_visual.pixel_y = 13
|
||||
other_visual.layer = BELOW_MOB_LAYER
|
||||
SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN)
|
||||
if(newdir & SOUTH)
|
||||
other_visual.pixel_y = -24
|
||||
other_visual.layer = ABOVE_ALL_MOB_LAYER
|
||||
SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_UPPER_FOV_HIDDEN)
|
||||
new_transform.Scale(-1, 1)
|
||||
new_transform.Translate(-1, 0)
|
||||
if(newdir & EAST)
|
||||
other_visual.pixel_x = 14
|
||||
other_visual.layer = BELOW_MOB_LAYER
|
||||
SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN)
|
||||
new_transform.Shear(0.5, 0)
|
||||
new_transform.Scale(0.65, 1)
|
||||
if(newdir & WEST)
|
||||
other_visual.pixel_x = -14
|
||||
other_visual.layer = BELOW_MOB_LAYER
|
||||
SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN)
|
||||
new_transform.Shear(-0.5, 0)
|
||||
new_transform.Scale(0.65, 1)
|
||||
other_visual.transform = new_transform
|
||||
|
||||
/obj/item/mod/control/Initialize(mapload, datum/mod_theme/new_theme, new_skin, obj/item/mod/core/new_core)
|
||||
. = ..()
|
||||
mod_link = new(
|
||||
src,
|
||||
starting_frequency,
|
||||
CALLBACK(src, PROC_REF(get_wearer)),
|
||||
CALLBACK(src, PROC_REF(can_call)),
|
||||
CALLBACK(src, PROC_REF(make_link_visual)),
|
||||
CALLBACK(src, PROC_REF(get_link_visual)),
|
||||
CALLBACK(src, PROC_REF(delete_link_visual))
|
||||
)
|
||||
|
||||
/obj/item/mod/control/multitool_act_secondary(mob/living/user, obj/item/multitool/tool)
|
||||
if(!multitool_check_buffer(user, tool))
|
||||
return
|
||||
var/tool_frequency = null
|
||||
if(istype(tool.buffer, /datum/mod_link))
|
||||
var/datum/mod_link/buffer_link = tool.buffer
|
||||
tool_frequency = buffer_link.frequency
|
||||
if(!tool_frequency && mod_link.frequency)
|
||||
tool.set_buffer(mod_link)
|
||||
else if(tool_frequency && !mod_link.frequency)
|
||||
mod_link.frequency = tool_frequency
|
||||
else if(tool_frequency && mod_link.frequency)
|
||||
var/response = tgui_alert(user, "Would you like to copy or imprint the frequency?", "MODlink Frequency", list("Copy", "Imprint"))
|
||||
if(!user.is_holding(tool))
|
||||
return
|
||||
switch(response)
|
||||
if("Copy")
|
||||
tool.set_buffer(mod_link)
|
||||
if("Imprint")
|
||||
mod_link.frequency = tool_frequency
|
||||
|
||||
/obj/item/mod/control/proc/can_call()
|
||||
return wearer && wearer.stat < DEAD
|
||||
|
||||
/obj/item/mod/control/proc/make_link_visual()
|
||||
return make_link_visual_generic(mod_link, PROC_REF(on_overlay_change))
|
||||
|
||||
/obj/item/mod/control/proc/get_link_visual(atom/movable/visuals)
|
||||
return get_link_visual_generic(mod_link, visuals, PROC_REF(on_wearer_set_dir))
|
||||
|
||||
/obj/item/mod/control/proc/delete_link_visual()
|
||||
return delete_link_visual_generic(mod_link)
|
||||
|
||||
/obj/item/mod/control/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods, message_range)
|
||||
. = ..()
|
||||
if(speaker != wearer && speaker != ai_assistant)
|
||||
return
|
||||
mod_link.visual.say(raw_message, sanitize = FALSE, message_range = 2)
|
||||
|
||||
/obj/item/mod/control/proc/on_overlay_change(atom/source, cache_index, overlay)
|
||||
SIGNAL_HANDLER
|
||||
addtimer(CALLBACK(src, PROC_REF(update_link_visual)), 1 TICKS, TIMER_UNIQUE)
|
||||
|
||||
/obj/item/mod/control/proc/update_link_visual()
|
||||
if(QDELETED(mod_link.link_call))
|
||||
return
|
||||
mod_link.visual.cut_overlay(mod_link.visual_overlays)
|
||||
mod_link.visual_overlays = wearer.overlays - wearer.active_thinking_indicator
|
||||
mod_link.visual.add_overlay(mod_link.visual_overlays)
|
||||
|
||||
/obj/item/mod/control/proc/on_wearer_set_dir(atom/source, dir, newdir)
|
||||
SIGNAL_HANDLER
|
||||
on_user_set_dir_generic(mod_link, newdir)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer
|
||||
name = "\improper MODlink scryer"
|
||||
desc = "An intricate piece of machinery that creates a holographic video call with another MODlink-compatible device. Essentially a video necklace."
|
||||
icon_state = "modlink"
|
||||
actions_types = list(/datum/action/item_action/call_link)
|
||||
/// The installed power cell.
|
||||
var/obj/item/stock_parts/cell/cell
|
||||
/// The MODlink datum we operate.
|
||||
var/datum/mod_link/mod_link
|
||||
/// Initial frequency of the MODlink.
|
||||
var/starting_frequency = "NT"
|
||||
/// An additional name tag for the scryer, seen as "MODlink scryer - [label]"
|
||||
var/label
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/Initialize(mapload)
|
||||
. = ..()
|
||||
mod_link = new(
|
||||
src,
|
||||
starting_frequency,
|
||||
CALLBACK(src, PROC_REF(get_user)),
|
||||
CALLBACK(src, PROC_REF(can_call)),
|
||||
CALLBACK(src, PROC_REF(make_link_visual)),
|
||||
CALLBACK(src, PROC_REF(get_link_visual)),
|
||||
CALLBACK(src, PROC_REF(delete_link_visual))
|
||||
)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/Destroy()
|
||||
QDEL_NULL(cell)
|
||||
QDEL_NULL(mod_link)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/examine(mob/user)
|
||||
. = ..()
|
||||
if(cell)
|
||||
. += span_notice("The battery charge reads [cell.percent()]%. <b>Right-click</b> with an empty hand to remove it.")
|
||||
else
|
||||
. += span_notice("It is missing a battery, one can be installed by clicking with a power cell on it.")
|
||||
. += span_notice("The MODlink ID is [mod_link.id], frequency is [mod_link.frequency]. <b>Right-click</b> with multitool to copy/imprint frequency.")
|
||||
. += span_notice("Use in hand to set name.")
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/equipped(mob/living/user, slot)
|
||||
. = ..()
|
||||
if(slot != ITEM_SLOT_NECK)
|
||||
mod_link?.end_call()
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/dropped(mob/living/user)
|
||||
. = ..()
|
||||
mod_link?.end_call()
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/attack_self(mob/user, modifiers)
|
||||
var/new_label = reject_bad_text(tgui_input_text(user, "Change the visible name", "Set Name", label, MAX_NAME_LEN))
|
||||
if(!new_label)
|
||||
balloon_alert(user, "invalid name!")
|
||||
return
|
||||
label = new_label
|
||||
balloon_alert(user, "name set")
|
||||
update_name()
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/process(seconds_per_tick)
|
||||
if(!mod_link.link_call)
|
||||
return
|
||||
cell.use(min(20 * seconds_per_tick, cell.charge))
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, params)
|
||||
. = ..()
|
||||
if(cell || !istype(attacked_by, /obj/item/stock_parts/cell))
|
||||
return
|
||||
if(!user.transferItemToLoc(attacked_by, src))
|
||||
return
|
||||
cell = attacked_by
|
||||
balloon_alert(user, "installed [cell.name]")
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/update_name(updates)
|
||||
. = ..()
|
||||
name = "[initial(name)][label ? " - [label]" : ""]"
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/Exited(atom/movable/gone, direction)
|
||||
. = ..()
|
||||
if(gone == cell)
|
||||
cell = null
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/attack_hand_secondary(mob/user, list/modifiers)
|
||||
if(!cell)
|
||||
return SECONDARY_ATTACK_CONTINUE_CHAIN
|
||||
balloon_alert(user, "removed [cell.name]")
|
||||
user.put_in_hands(cell)
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/multitool_act_secondary(mob/living/user, obj/item/multitool/tool)
|
||||
if(!multitool_check_buffer(user, tool))
|
||||
return
|
||||
var/tool_frequency = null
|
||||
if(istype(tool.buffer, /datum/mod_link))
|
||||
var/datum/mod_link/buffer_link = tool.buffer
|
||||
tool_frequency = buffer_link.frequency
|
||||
if(!tool_frequency && mod_link.frequency)
|
||||
tool.set_buffer(mod_link)
|
||||
else if(tool_frequency && !mod_link.frequency)
|
||||
mod_link.frequency = tool_frequency
|
||||
else if(tool_frequency && mod_link.frequency)
|
||||
var/response = tgui_alert(user, "Would you like to copy or imprint the frequency?", "MODlink Frequency", list("Copy", "Imprint"))
|
||||
switch(response)
|
||||
if("Copy")
|
||||
tool.set_buffer(mod_link)
|
||||
if("Imprint")
|
||||
mod_link.frequency = tool_frequency
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/worn_overlays(mutable_appearance/standing, isinhands)
|
||||
. = ..()
|
||||
if(!QDELETED(mod_link.link_call))
|
||||
. += mutable_appearance('icons/mob/clothing/neck.dmi', "modlink_active")
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/ui_action_click(mob/user)
|
||||
if(mod_link.link_call)
|
||||
mod_link.end_call()
|
||||
else
|
||||
call_link(user, mod_link)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/get_user()
|
||||
var/mob/living/carbon/user = loc
|
||||
return istype(user) && user.wear_neck == src ? user : null
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/can_call()
|
||||
var/mob/living/user = loc
|
||||
return istype(user) && cell.charge && user.stat < DEAD
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/make_link_visual()
|
||||
var/mob/living/user = mod_link.get_user_callback.Invoke()
|
||||
user.update_worn_neck()
|
||||
return make_link_visual_generic(mod_link, PROC_REF(on_overlay_change))
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/get_link_visual(atom/movable/visuals)
|
||||
return get_link_visual_generic(mod_link, visuals, PROC_REF(on_user_set_dir))
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/delete_link_visual()
|
||||
var/mob/living/user = mod_link.get_user_callback.Invoke()
|
||||
if(!QDELETED(user))
|
||||
user.update_worn_neck()
|
||||
return delete_link_visual_generic(mod_link)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods, message_range)
|
||||
. = ..()
|
||||
if(speaker != loc)
|
||||
return
|
||||
mod_link.visual.say(raw_message, sanitize = FALSE, message_range = 3)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/on_overlay_change(atom/source, cache_index, overlay)
|
||||
SIGNAL_HANDLER
|
||||
addtimer(CALLBACK(src, PROC_REF(update_link_visual)), 1 TICKS, TIMER_UNIQUE)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/update_link_visual()
|
||||
if(QDELETED(mod_link.link_call))
|
||||
return
|
||||
var/mob/living/user = loc
|
||||
mod_link.visual.cut_overlay(mod_link.visual_overlays)
|
||||
mod_link.visual_overlays = user.overlays - user.active_thinking_indicator
|
||||
mod_link.visual.add_overlay(mod_link.visual_overlays)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/proc/on_user_set_dir(atom/source, dir, newdir)
|
||||
SIGNAL_HANDLER
|
||||
on_user_set_dir_generic(mod_link, newdir)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/loaded/Initialize(mapload)
|
||||
. = ..()
|
||||
cell = new /obj/item/stock_parts/cell/high(src)
|
||||
|
||||
/obj/item/clothing/neck/link_scryer/loaded/charlie
|
||||
starting_frequency = MODLINK_FREQ_CHARLIE
|
||||
|
||||
/// A MODlink datum, used to handle unique functions that will be used in the MODlink call.
|
||||
/datum/mod_link
|
||||
/// The frequency of the MODlink. You can only call other MODlinks on the same frequency.
|
||||
var/frequency
|
||||
/// The unique ID of the MODlink.
|
||||
var/id = ""
|
||||
/// The atom that holds the MODlink.
|
||||
var/atom/movable/holder
|
||||
/// A reference to the visuals generated by the MODlink.
|
||||
var/atom/movable/visual
|
||||
/// A list of all overlays of the user, copied everytime they have an overlay change.
|
||||
var/list/visual_overlays = list()
|
||||
/// A reference to the call between two MODlinks.
|
||||
var/datum/mod_link_call/link_call
|
||||
/// A callback that returns the user of the MODlink.
|
||||
var/datum/callback/get_user_callback
|
||||
/// A callback that returns whether the MODlink can currently call.
|
||||
var/datum/callback/can_call_callback
|
||||
/// A callback that returns the visuals of the MODlink.
|
||||
var/datum/callback/make_visual_callback
|
||||
/// A callback that receives the visuals of the other MODlink.
|
||||
var/datum/callback/get_visual_callback
|
||||
/// A callback that deletes the visuals of the MODlink.
|
||||
var/datum/callback/delete_visual_callback
|
||||
|
||||
/datum/mod_link/New(
|
||||
atom/holder,
|
||||
frequency,
|
||||
datum/callback/get_user_callback,
|
||||
datum/callback/can_call_callback,
|
||||
datum/callback/make_visual_callback,
|
||||
datum/callback/get_visual_callback,
|
||||
datum/callback/delete_visual_callback
|
||||
)
|
||||
var/attempts = 0
|
||||
var/digits_to_make = 3
|
||||
do
|
||||
if(attempts == 10)
|
||||
attempts = 0
|
||||
digits_to_make++
|
||||
id = ""
|
||||
for(var/i in 1 to digits_to_make)
|
||||
id += num2text(rand(0,9))
|
||||
attempts++
|
||||
while(GLOB.mod_link_ids[id])
|
||||
GLOB.mod_link_ids[id] = src
|
||||
src.frequency = frequency
|
||||
src.holder = holder
|
||||
src.get_user_callback = get_user_callback
|
||||
src.can_call_callback = can_call_callback
|
||||
src.make_visual_callback = make_visual_callback
|
||||
src.get_visual_callback = get_visual_callback
|
||||
src.delete_visual_callback = delete_visual_callback
|
||||
RegisterSignal(holder, COMSIG_QDELETING, PROC_REF(on_holder_delete))
|
||||
|
||||
/datum/mod_link/Destroy()
|
||||
GLOB.mod_link_ids -= id
|
||||
if(link_call)
|
||||
end_call()
|
||||
return ..()
|
||||
|
||||
/datum/mod_link/proc/get_other()
|
||||
RETURN_TYPE(/datum/mod_link)
|
||||
if(!link_call)
|
||||
return
|
||||
return link_call.caller == src ? link_call.receiver : link_call.caller
|
||||
|
||||
/datum/mod_link/proc/call_link(datum/mod_link/called, mob/user)
|
||||
if(!frequency)
|
||||
return
|
||||
if(!istype(called))
|
||||
holder.balloon_alert(user, "invalid target!")
|
||||
return
|
||||
var/mob/living/link_user = get_user_callback.Invoke()
|
||||
if(!link_user)
|
||||
return
|
||||
if(HAS_TRAIT(link_user, TRAIT_IN_CALL))
|
||||
holder.balloon_alert(user, "user already in call!")
|
||||
return
|
||||
var/mob/living/link_target = called.get_user_callback.Invoke()
|
||||
if(!link_target)
|
||||
holder.balloon_alert(user, "invalid target!")
|
||||
return
|
||||
if(HAS_TRAIT(link_target, TRAIT_IN_CALL))
|
||||
holder.balloon_alert(user, "target already in call!")
|
||||
return
|
||||
if(!can_call_callback.Invoke() || !called.can_call_callback.Invoke())
|
||||
holder.balloon_alert(user, "can't call!")
|
||||
return
|
||||
link_target.playsound_local(get_turf(called.holder), 'sound/weapons/ring.ogg', 15, vary = TRUE)
|
||||
var/atom/movable/screen/alert/modlink_call/alert = link_target.throw_alert("[REF(src)]_modlink", /atom/movable/screen/alert/modlink_call)
|
||||
alert.desc = "[holder] ([id]) is calling you! Left-click this to accept the call. Right-click to deny it."
|
||||
alert.caller_ref = WEAKREF(src)
|
||||
alert.receiver_ref = WEAKREF(called)
|
||||
alert.user_ref = WEAKREF(user)
|
||||
|
||||
/datum/mod_link/proc/end_call()
|
||||
QDEL_NULL(link_call)
|
||||
|
||||
/datum/mod_link/proc/on_holder_delete(atom/source)
|
||||
SIGNAL_HANDLER
|
||||
qdel(src)
|
||||
|
||||
/// A MODlink call datum, used to handle the call between two MODlinks.
|
||||
/datum/mod_link_call
|
||||
/// The MODlink that is calling.
|
||||
var/datum/mod_link/caller
|
||||
/// The MODlink that is being called.
|
||||
var/datum/mod_link/receiver
|
||||
|
||||
/datum/mod_link_call/New(datum/mod_link/caller, datum/mod_link/receiver)
|
||||
caller.link_call = src
|
||||
receiver.link_call = src
|
||||
src.caller = caller
|
||||
src.receiver = receiver
|
||||
var/mob/living/caller_mob = caller.get_user_callback.Invoke()
|
||||
ADD_TRAIT(caller_mob, TRAIT_IN_CALL, REF(src))
|
||||
var/mob/living/receiver_mob = receiver.get_user_callback.Invoke()
|
||||
ADD_TRAIT(receiver_mob, TRAIT_IN_CALL, REF(src))
|
||||
make_visuals()
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/datum/mod_link_call/Destroy()
|
||||
var/mob/living/caller_mob = caller.get_user_callback.Invoke()
|
||||
if(!QDELETED(caller_mob))
|
||||
REMOVE_TRAIT(caller_mob, TRAIT_IN_CALL, REF(src))
|
||||
var/mob/living/receiver_mob = receiver.get_user_callback.Invoke()
|
||||
if(!QDELETED(receiver_mob))
|
||||
REMOVE_TRAIT(receiver_mob, TRAIT_IN_CALL, REF(src))
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
clear_visuals()
|
||||
caller.link_call = null
|
||||
receiver.link_call = null
|
||||
return ..()
|
||||
|
||||
/datum/mod_link_call/process(seconds_per_tick)
|
||||
if(can_continue_call())
|
||||
return
|
||||
qdel(src)
|
||||
|
||||
/datum/mod_link_call/proc/can_continue_call()
|
||||
return caller.frequency == receiver.frequency && caller.can_call_callback.Invoke() && receiver.can_call_callback.Invoke()
|
||||
|
||||
/datum/mod_link_call/proc/make_visuals()
|
||||
var/caller_visual = caller.make_visual_callback.Invoke()
|
||||
var/receiver_visual = receiver.make_visual_callback.Invoke()
|
||||
caller.get_visual_callback.Invoke(receiver_visual)
|
||||
receiver.get_visual_callback.Invoke(caller_visual)
|
||||
|
||||
/datum/mod_link_call/proc/clear_visuals()
|
||||
caller.delete_visual_callback.Invoke()
|
||||
receiver.delete_visual_callback.Invoke()
|
||||
|
||||
/proc/call_link(mob/user, datum/mod_link/calling_link)
|
||||
if(!calling_link.frequency)
|
||||
return
|
||||
var/list/callers = list()
|
||||
for(var/id in GLOB.mod_link_ids)
|
||||
var/datum/mod_link/link = GLOB.mod_link_ids[id]
|
||||
if(link.frequency != calling_link.frequency)
|
||||
continue
|
||||
if(link == calling_link)
|
||||
continue
|
||||
if(!link.can_call_callback.Invoke())
|
||||
continue
|
||||
callers["[link.holder] ([id])"] = id
|
||||
if(!length(callers))
|
||||
calling_link.holder.balloon_alert(user, "no targets on freq [calling_link.frequency]!")
|
||||
return
|
||||
var/chosen_link = tgui_input_list(user, "Choose ID to call from [calling_link.frequency] frequency", "MODlink", callers)
|
||||
if(!chosen_link)
|
||||
return
|
||||
calling_link.call_link(GLOB.mod_link_ids[callers[chosen_link]], user)
|
||||
|
||||
/atom/movable/screen/alert/modlink_call
|
||||
name = "MODlink Call Incoming"
|
||||
desc = "Someone is calling you! Left-click this to accept the call. Right-click to deny it."
|
||||
icon_state = "called"
|
||||
timeout = 10 SECONDS
|
||||
var/end_message = "call timed out!"
|
||||
/// A weak reference to the MODlink that is calling.
|
||||
var/datum/weakref/caller_ref
|
||||
/// A weak reference to the MODlink that is being called.
|
||||
var/datum/weakref/receiver_ref
|
||||
/// A weak reference to the mob that is calling.
|
||||
var/datum/weakref/user_ref
|
||||
|
||||
/atom/movable/screen/alert/modlink_call/Click(location, control, params)
|
||||
. = ..()
|
||||
if(usr != owner)
|
||||
return
|
||||
var/datum/mod_link/caller = caller_ref.resolve()
|
||||
var/datum/mod_link/receiver = receiver_ref.resolve()
|
||||
if(!caller || !receiver)
|
||||
return
|
||||
if(caller.link_call || receiver.link_call)
|
||||
return
|
||||
var/list/modifiers = params2list(params)
|
||||
if(LAZYACCESS(modifiers, RIGHT_CLICK))
|
||||
end_message = "call denied!"
|
||||
owner.clear_alert("[REF(caller)]_modlink")
|
||||
return
|
||||
end_message = "call accepted"
|
||||
new /datum/mod_link_call(caller, receiver)
|
||||
owner.clear_alert("[REF(caller)]_modlink")
|
||||
|
||||
/atom/movable/screen/alert/modlink_call/Destroy()
|
||||
var/mob/living/user = user_ref?.resolve()
|
||||
var/datum/mod_link/caller = caller_ref?.resolve()
|
||||
if(!user || !caller)
|
||||
return ..()
|
||||
caller.holder.balloon_alert(user, end_message)
|
||||
return ..()
|
||||
@@ -306,7 +306,7 @@
|
||||
the bare essentials, geared far more for environmental hazards than combat against fauna; however, \
|
||||
this gives way to incredible protection against corrosives and thermal protection good enough for \
|
||||
both casual backstroking through molten magma and romantic walks through arctic terrain. \
|
||||
Instead, the suit is capable of using its' anomalous properties to attract and \
|
||||
Instead, the suit is capable of using its anomalous properties to attract and \
|
||||
carefully distribute layers of ash or ice across the surface; these layers are ablative, but incredibly strong. \
|
||||
Lastly, the suit is capable of compressing and shrinking the mass of the wearer, as well as \
|
||||
rearranging its own constitution, to allow them to fit upright in a sphere form that can \
|
||||
@@ -1437,7 +1437,7 @@
|
||||
|
||||
/datum/mod_theme/responsory
|
||||
name = "responsory"
|
||||
desc = "A high-speed rescue suit by Nanotrasen, intended for its' emergency response teams."
|
||||
desc = "A high-speed rescue suit by Nanotrasen, intended for its emergency response teams."
|
||||
extended_desc = "A streamlined suit of Nanotrasen design, these sleek black suits are only worn by \
|
||||
elite emergency response personnel to help save the day. While the slim and nimble design of the suit \
|
||||
cuts the ceramics and ablatives in it down, dropping the protection, \
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/obj/item/mod/control/pre_equipped
|
||||
starting_frequency = MODLINK_FREQ_NANOTRASEN
|
||||
/// The skin we apply to the suit, defaults to the default_skin of the theme.
|
||||
var/applied_skin
|
||||
/// The MOD core we apply to the suit.
|
||||
@@ -196,6 +197,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/traitor
|
||||
theme = /datum/mod_theme/syndicate
|
||||
starting_frequency = MODLINK_FREQ_SYNDICATE
|
||||
applied_cell = /obj/item/stock_parts/cell/super
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/storage/syndicate,
|
||||
@@ -213,6 +215,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/traitor_elite
|
||||
theme = /datum/mod_theme/elite
|
||||
starting_frequency = MODLINK_FREQ_SYNDICATE
|
||||
applied_cell = /obj/item/stock_parts/cell/bluespace
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/storage/syndicate,
|
||||
@@ -229,6 +232,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/nuclear
|
||||
theme = /datum/mod_theme/syndicate
|
||||
starting_frequency = MODLINK_FREQ_SYNDICATE
|
||||
applied_cell = /obj/item/stock_parts/cell/hyper
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
applied_modules = list(
|
||||
@@ -248,6 +252,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/elite
|
||||
theme = /datum/mod_theme/elite
|
||||
starting_frequency = MODLINK_FREQ_SYNDICATE
|
||||
applied_cell = /obj/item/stock_parts/cell/bluespace
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
applied_modules = list(
|
||||
@@ -280,6 +285,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/infiltrator
|
||||
theme = /datum/mod_theme/infiltrator
|
||||
starting_frequency = MODLINK_FREQ_SYNDICATE
|
||||
applied_cell = /obj/item/stock_parts/cell/super
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/emp_shield,
|
||||
@@ -291,6 +297,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/interdyne
|
||||
theme = /datum/mod_theme/interdyne
|
||||
starting_frequency = MODLINK_FREQ_SYNDICATE
|
||||
applied_cell = /obj/item/stock_parts/cell/super
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/defibrillator/combat,
|
||||
@@ -304,6 +311,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/enchanted
|
||||
theme = /datum/mod_theme/enchanted
|
||||
starting_frequency = null
|
||||
applied_core = /obj/item/mod/core/infinite
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/storage/large_capacity,
|
||||
@@ -313,6 +321,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/ninja
|
||||
theme = /datum/mod_theme/ninja
|
||||
starting_frequency = null
|
||||
applied_cell = /obj/item/stock_parts/cell/ninja
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/storage,
|
||||
@@ -334,6 +343,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/prototype
|
||||
theme = /datum/mod_theme/prototype
|
||||
starting_frequency = MODLINK_FREQ_CHARLIE
|
||||
req_access = list(ACCESS_AWAY_GENERAL)
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/storage,
|
||||
@@ -349,6 +359,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/responsory
|
||||
theme = /datum/mod_theme/responsory
|
||||
starting_frequency = MODLINK_FREQ_CENTCOM
|
||||
applied_cell = /obj/item/stock_parts/cell/hyper
|
||||
req_access = list(ACCESS_CENT_GENERAL)
|
||||
applied_modules = list(
|
||||
@@ -427,6 +438,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/apocryphal
|
||||
theme = /datum/mod_theme/apocryphal
|
||||
starting_frequency = MODLINK_FREQ_CENTCOM
|
||||
applied_cell = /obj/item/stock_parts/cell/bluespace
|
||||
req_access = list(ACCESS_CENT_SPECOPS)
|
||||
applied_modules = list(
|
||||
@@ -452,6 +464,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/corporate
|
||||
theme = /datum/mod_theme/corporate
|
||||
starting_frequency = MODLINK_FREQ_CENTCOM
|
||||
applied_core = /obj/item/mod/core/infinite
|
||||
req_access = list(ACCESS_CENT_SPECOPS)
|
||||
applied_modules = list(
|
||||
@@ -463,6 +476,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/chrono
|
||||
theme = /datum/mod_theme/chrono
|
||||
starting_frequency = null
|
||||
applied_core = /obj/item/mod/core/infinite
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/eradication_lock,
|
||||
@@ -483,6 +497,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/debug
|
||||
theme = /datum/mod_theme/debug
|
||||
starting_frequency = null
|
||||
applied_core = /obj/item/mod/core/infinite
|
||||
applied_modules = list( //one of every type of module, for testing if they all work correctly
|
||||
/obj/item/mod/module/storage/bluespace,
|
||||
@@ -496,6 +511,7 @@
|
||||
|
||||
/obj/item/mod/control/pre_equipped/administrative
|
||||
theme = /datum/mod_theme/administrative
|
||||
starting_frequency = MODLINK_FREQ_CENTCOM
|
||||
applied_core = /obj/item/mod/core/infinite
|
||||
applied_modules = list(
|
||||
/obj/item/mod/module/storage/bluespace,
|
||||
@@ -516,6 +532,7 @@
|
||||
|
||||
//these exist for the prefs menu
|
||||
/obj/item/mod/control/pre_equipped/empty
|
||||
starting_frequency = null
|
||||
|
||||
/obj/item/mod/control/pre_equipped/empty/syndicate
|
||||
theme = /datum/mod_theme/syndicate
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
"ai_name" = ai_assistant?.name,
|
||||
"has_pai" = ispAI(ai_assistant),
|
||||
"is_ai" = ai_assistant && ai_assistant == user,
|
||||
"link_id" = mod_link.id,
|
||||
"link_call" = mod_link.get_other()?.id,
|
||||
// Wires
|
||||
"open" = open,
|
||||
"seconds_electrified" = seconds_electrified,
|
||||
@@ -76,10 +78,6 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(locked && (!allowed(usr) || !ispAI(usr))) // pAIs automatically fail out of allowed()
|
||||
balloon_alert(usr, "insufficient access!")
|
||||
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
|
||||
return
|
||||
if(malfunctioning && prob(75))
|
||||
balloon_alert(usr, "button malfunctions!")
|
||||
return
|
||||
@@ -87,6 +85,11 @@
|
||||
if("lock")
|
||||
locked = !locked
|
||||
balloon_alert(usr, "[locked ? "locked" : "unlocked"]!")
|
||||
if("call")
|
||||
if(!mod_link.link_call)
|
||||
call_link(usr, mod_link)
|
||||
else
|
||||
mod_link.end_call()
|
||||
if("activate")
|
||||
toggle_activate(usr)
|
||||
if("select")
|
||||
|
||||
@@ -54,7 +54,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32)
|
||||
if(!multitool_check_buffer(user, I)) //make sure it has a data buffer
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You store linkage information in [I]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
return
|
||||
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You store linkage information in [I]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -421,7 +421,7 @@
|
||||
//log rotor to link later to computer
|
||||
balloon_alert(user, "all parts linked")
|
||||
var/obj/item/multitool/multitool = tool
|
||||
multitool.buffer = src
|
||||
multitool.set_buffer(src)
|
||||
to_chat(user, span_notice("You store linkage information in [tool]'s buffer."))
|
||||
|
||||
//success
|
||||
|
||||
@@ -1515,6 +1515,18 @@
|
||||
RND_CATEGORY_MODSUITS + RND_SUBCATEGORY_MODSUITS_MISC
|
||||
)
|
||||
|
||||
/datum/design/modlink_scryer
|
||||
name = "MODlink Scryer"
|
||||
desc = "A neck-worn piece of gear that can call with another MODlink-compatible device."
|
||||
id = "modlink_scryer"
|
||||
build_type = MECHFAB
|
||||
materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3)
|
||||
construction_time = 5 SECONDS
|
||||
build_path = /obj/item/clothing/neck/link_scryer
|
||||
category = list(
|
||||
RND_CATEGORY_MODSUITS + RND_SUBCATEGORY_MODSUITS_MISC
|
||||
)
|
||||
|
||||
//MODsuit modules
|
||||
|
||||
/datum/design/module
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
/obj/machinery/rnd/server/multitool_act(mob/living/user, obj/item/multitool/tool)
|
||||
if(!stored_research)
|
||||
return
|
||||
tool.buffer = stored_research
|
||||
tool.set_buffer(stored_research)
|
||||
to_chat(user, span_notice("Stored [src]'s techweb information in [tool]."))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -1741,6 +1741,7 @@
|
||||
"mod_clamp",
|
||||
"mod_drill",
|
||||
"mod_orebag",
|
||||
"modlink_scryer",
|
||||
)
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE)
|
||||
if(!multitool_check_buffer(user, I)) //make sure it has a data buffer
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You store linkage information in [I]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
@@ -73,7 +73,7 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE)
|
||||
if(!multitool_check_buffer(user, I)) //make sure it has a data buffer
|
||||
return
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
M.set_buffer(src)
|
||||
to_chat(user, span_notice("You store linkage information in [I]'s buffer."))
|
||||
return TRUE
|
||||
|
||||
@@ -96,11 +96,11 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE)
|
||||
if(istype(M.buffer, /obj/machinery/bsa/back))
|
||||
back_ref = WEAKREF(M.buffer)
|
||||
to_chat(user, span_notice("You link [src] with [M.buffer]."))
|
||||
M.buffer = null
|
||||
M.set_buffer(null)
|
||||
else if(istype(M.buffer, /obj/machinery/bsa/front))
|
||||
front_ref = WEAKREF(M.buffer)
|
||||
to_chat(user, span_notice("You link [src] with [M.buffer]."))
|
||||
M.buffer = null
|
||||
M.set_buffer(null)
|
||||
else
|
||||
to_chat(user, span_warning("[I]'s data buffer is empty!"))
|
||||
return TRUE
|
||||
|
||||
|
Before Width: | Height: | Size: 922 KiB After Width: | Height: | Size: 916 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.7 KiB |
@@ -2676,6 +2676,7 @@
|
||||
#include "code\modules\admin\view_variables\mark_datum.dm"
|
||||
#include "code\modules\admin\view_variables\mass_edit_variables.dm"
|
||||
#include "code\modules\admin\view_variables\modify_variables.dm"
|
||||
#include "code\modules\admin\view_variables\nobody_wants_to_learn_matrix_math.dm"
|
||||
#include "code\modules\admin\view_variables\particle_editor.dm"
|
||||
#include "code\modules\admin\view_variables\reference_tracking.dm"
|
||||
#include "code\modules\admin\view_variables\tag_datum.dm"
|
||||
@@ -4623,6 +4624,7 @@
|
||||
#include "code\modules\mod\mod_construction.dm"
|
||||
#include "code\modules\mod\mod_control.dm"
|
||||
#include "code\modules\mod\mod_core.dm"
|
||||
#include "code\modules\mod\mod_link.dm"
|
||||
#include "code\modules\mod\mod_paint.dm"
|
||||
#include "code\modules\mod\mod_theme.dm"
|
||||
#include "code\modules\mod\mod_types.dm"
|
||||
|
||||
@@ -35,6 +35,8 @@ type SuitStatus = {
|
||||
ai_name: string;
|
||||
has_pai: boolean;
|
||||
is_ai: boolean;
|
||||
link_id: string;
|
||||
link_call: string;
|
||||
};
|
||||
|
||||
type UserStatus = {
|
||||
@@ -317,6 +319,8 @@ const SuitStatusSection = (props, context) => {
|
||||
ai_name,
|
||||
has_pai,
|
||||
is_ai,
|
||||
link_id,
|
||||
link_call,
|
||||
} = data.suit_status;
|
||||
const { display_time, shift_time, shift_id } = data.module_custom_status;
|
||||
const status = malfunctioning
|
||||
@@ -377,6 +381,19 @@ const SuitStatusSection = (props, context) => {
|
||||
onClick={() => act('lock')}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="MODLink">
|
||||
<Button
|
||||
icon={'wifi'}
|
||||
color={link_call ? 'good' : 'default'}
|
||||
disabled={!link_id}
|
||||
content={
|
||||
link_call
|
||||
? 'Calling (' + link_call + ')'
|
||||
: 'Call (' + link_id + ')'
|
||||
}
|
||||
onClick={() => act('call')}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
{!!open && (
|
||||
<LabeledList.Item label="Cover">
|
||||
<Box color="red">Open</Box>
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
import { useBackend, useLocalState } from '../backend';
|
||||
import { Input, NumberInput, Section, Button, Table } from '../components';
|
||||
import { toFixed } from 'common/math';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
const MatrixMathTesterInput = (
|
||||
props: { value: number; varName: string },
|
||||
context
|
||||
) => {
|
||||
const { act } = useBackend(context);
|
||||
return (
|
||||
<NumberInput
|
||||
value={props.value}
|
||||
step={0.005}
|
||||
format={(value) => toFixed(value, 3)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) =>
|
||||
act('change_var', { var_name: props.varName, var_value: value })
|
||||
}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
type MatrixData = {
|
||||
matrix_a: number;
|
||||
matrix_b: number;
|
||||
matrix_c: number;
|
||||
matrix_d: number;
|
||||
matrix_e: number;
|
||||
matrix_f: number;
|
||||
pixelated: boolean;
|
||||
};
|
||||
|
||||
export const MatrixMathTester = (props, context) => {
|
||||
const { act, data } = useBackend<MatrixData>(context);
|
||||
const {
|
||||
matrix_a,
|
||||
matrix_b,
|
||||
matrix_c,
|
||||
matrix_d,
|
||||
matrix_e,
|
||||
matrix_f,
|
||||
pixelated,
|
||||
} = data;
|
||||
const [scaleX, setScaleX] = useLocalState(context, 'scale_x', 1);
|
||||
const [scaleY, setScaleY] = useLocalState(context, 'scale_y', 1);
|
||||
const [translateX, setTranslateX] = useLocalState(context, 'translate_x', 0);
|
||||
const [translateY, setTranslateY] = useLocalState(context, 'translate_y', 0);
|
||||
const [shearX, setShearX] = useLocalState(context, 'shear_x', 0);
|
||||
const [shearY, setShearY] = useLocalState(context, 'shear_y', 0);
|
||||
const [angle, setAngle] = useLocalState(context, 'angle', 0);
|
||||
return (
|
||||
<Window title="Nobody Wants to Learn Matrix Math" width={290} height={270}>
|
||||
<Window.Content>
|
||||
<Section fill>
|
||||
<Table>
|
||||
<Table.Row header>
|
||||
<Table.Cell width={'30%'}>X</Table.Cell>
|
||||
<Table.Cell width={'30%'}>Y</Table.Cell>
|
||||
<Table.Cell width={'40%'}>Z</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<MatrixMathTesterInput value={matrix_a} varName="a" />
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<MatrixMathTesterInput value={matrix_d} varName="d" />
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<Input disabled placeholder="0 (fixed value)" width={'100%'} />
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<MatrixMathTesterInput value={matrix_b} varName="b" />
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<MatrixMathTesterInput value={matrix_e} varName="e" />
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<Input disabled placeholder="0 (fixed value)" width={'100%'} />
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<MatrixMathTesterInput value={matrix_c} varName="c" />
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<MatrixMathTesterInput value={matrix_f} varName="f" />
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<Input disabled placeholder="1 (fixed value)" width={'100%'} />
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
</Table>
|
||||
<Table mt={3}>
|
||||
<Table.Row header>
|
||||
<Table.Cell>Action</Table.Cell>
|
||||
<Table.Cell>X</Table.Cell>
|
||||
<Table.Cell>Y</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<Button
|
||||
icon={'up-right-and-down-left-from-center'}
|
||||
content={'Scale'}
|
||||
width={'100%'}
|
||||
onClick={() => act('scale', { x: scaleX, y: scaleY })}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<NumberInput
|
||||
value={scaleX}
|
||||
step={0.05}
|
||||
format={(value) => toFixed(value, 2)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) => setScaleX(value)}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<NumberInput
|
||||
value={scaleY}
|
||||
step={0.05}
|
||||
format={(value) => toFixed(value, 2)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) => setScaleY(value)}
|
||||
/>
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<Button
|
||||
icon={'arrow-right'}
|
||||
content={'Translate'}
|
||||
width={'100%'}
|
||||
onClick={() =>
|
||||
act('translate', { x: translateX, y: translateY })
|
||||
}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<NumberInput
|
||||
value={translateX}
|
||||
step={1}
|
||||
format={(value) => toFixed(value, 0)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) => setTranslateX(value)}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<NumberInput
|
||||
value={translateY}
|
||||
step={1}
|
||||
format={(value) => toFixed(value, 0)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) => setTranslateY(value)}
|
||||
/>
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<Button
|
||||
icon={'maximize'}
|
||||
content={'Shear'}
|
||||
width={'100%'}
|
||||
onClick={() => act('shear', { x: shearX, y: shearY })}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<NumberInput
|
||||
value={shearX}
|
||||
step={0.005}
|
||||
format={(value) => toFixed(value, 3)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) => setShearX(value)}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<NumberInput
|
||||
value={shearY}
|
||||
step={0.005}
|
||||
format={(value) => toFixed(value, 3)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) => setShearY(value)}
|
||||
/>
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<Button
|
||||
icon={'rotate-right'}
|
||||
content={'Rotate'}
|
||||
width={'100%'}
|
||||
onClick={() => act('turn', { angle: angle })}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<NumberInput
|
||||
value={angle}
|
||||
step={0.5}
|
||||
maxValue={360}
|
||||
minValue={-360}
|
||||
format={(value) => toFixed(value, 1)}
|
||||
width={'100%'}
|
||||
onChange={(e, value) => setAngle(value)}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
<Button
|
||||
icon={'dog'}
|
||||
color={'bad'}
|
||||
selected={pixelated}
|
||||
content={'PET'}
|
||||
tooltip={'Pixel Enhanced Transforming'}
|
||||
tooltipPosition={'bottom'}
|
||||
width={'100%'}
|
||||
onClick={() => act('toggle_pixel')}
|
||||
/>
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
</Table>
|
||||
</Section>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||