diff --git a/_maps/map_files/tether/tether-02-surface2.dmm b/_maps/map_files/tether/tether-02-surface2.dmm
index 87b4f6774aa..e6b2fd70ef3 100644
--- a/_maps/map_files/tether/tether-02-surface2.dmm
+++ b/_maps/map_files/tether/tether-02-surface2.dmm
@@ -15846,7 +15846,7 @@
/turf/simulated/floor/tiled,
/area/teleporter)
"aAr" = (
-/obj/machinery/teleport/station{
+/obj/machinery/tele_projector{
dir = 2
},
/turf/simulated/floor/tiled/dark,
@@ -16022,7 +16022,7 @@
/turf/simulated/floor/tiled/dark,
/area/teleporter)
"aAP" = (
-/obj/machinery/teleport/hub{
+/obj/machinery/tele_pad{
dir = 2
},
/turf/simulated/floor/tiled/dark,
diff --git a/_maps/map_files/tether/tether-05-station1.dmm b/_maps/map_files/tether/tether-05-station1.dmm
index d6c71a05a65..a40a60dc60d 100644
--- a/_maps/map_files/tether/tether-05-station1.dmm
+++ b/_maps/map_files/tether/tether-05-station1.dmm
@@ -11473,7 +11473,7 @@
/turf/simulated/floor/tiled,
/area/bridge/secondary)
"ayv" = (
-/obj/machinery/teleport/station{
+/obj/machinery/tele_projector{
dir = 2
},
/turf/simulated/floor/tiled/dark,
@@ -11562,7 +11562,7 @@
/turf/simulated/floor/tiled,
/area/bridge/secondary/teleporter)
"ayK" = (
-/obj/machinery/teleport/hub{
+/obj/machinery/tele_pad{
dir = 2
},
/turf/simulated/floor/tiled/dark,
diff --git a/_maps/map_files/tether/tether_misc.dmm b/_maps/map_files/tether/tether_misc.dmm
index a22738332e1..cbd4a2e90be 100644
--- a/_maps/map_files/tether/tether_misc.dmm
+++ b/_maps/map_files/tether/tether_misc.dmm
@@ -1496,11 +1496,11 @@
/area/centcom/control)
"eF" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/voidcraft,
/area/unknown/dorm5)
"eG" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/alienplating,
/area/unknown/dorm5)
"eH" = (
@@ -1529,11 +1529,11 @@
/area/holodeck/source_beach)
"eN" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/voidcraft,
/area/unknown/dorm6)
"eO" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/alienplating,
/area/unknown/dorm6)
"eP" = (
@@ -4960,11 +4960,11 @@
/area/unknown/dorm4)
"SQ" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/voidcraft,
/area/unknown/dorm4)
"SR" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/alienplating,
/area/unknown/dorm4)
"SS" = (
@@ -5111,11 +5111,11 @@
/area/unknown/dorm3)
"TC" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/voidcraft,
/area/unknown/dorm3)
"TD" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/alienplating,
/area/unknown/dorm3)
"TE" = (
@@ -5268,11 +5268,11 @@
/area/unknown/dorm2)
"Uk" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/voidcraft,
/area/unknown/dorm2)
"Ul" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/alienplating,
/area/unknown/dorm2)
"Um" = (
@@ -5430,11 +5430,11 @@
/area/unknown/dorm1)
"UW" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/voidcraft,
/area/unknown/dorm1)
"UX" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/alienplating,
/area/unknown/dorm1)
"UY" = (
diff --git a/_maps/map_files/triumph/triumph-04-deck4.dmm b/_maps/map_files/triumph/triumph-04-deck4.dmm
index c53dfbb621b..8c933c35488 100644
--- a/_maps/map_files/triumph/triumph-04-deck4.dmm
+++ b/_maps/map_files/triumph/triumph-04-deck4.dmm
@@ -4287,7 +4287,7 @@
/turf/simulated/floor/tiled,
/area/triumph/surfacebase/sauna)
"dma" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/floor/tiled,
/area/teleporter)
"dmC" = (
@@ -14687,7 +14687,7 @@
/turf/simulated/floor/tiled,
/area/gateway/prep_room)
"keg" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/floor/tiled,
/area/teleporter)
"kfJ" = (
diff --git a/_maps/map_files/triumph/triumph-05-flagship.dmm b/_maps/map_files/triumph/triumph-05-flagship.dmm
index 540472d11f3..da85bae3a8a 100644
--- a/_maps/map_files/triumph/triumph-05-flagship.dmm
+++ b/_maps/map_files/triumph/triumph-05-flagship.dmm
@@ -1674,13 +1674,13 @@
},
/area/centcom/specops)
"cE" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/unsimulated/floor{
icon_state = "dark"
},
/area/centcom/specops)
"cF" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -6526,11 +6526,11 @@
/turf/unsimulated/floor/steel,
/area/centcom/control)
"lW" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/unsimulated/floor/steel,
/area/centcom/control)
"lX" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/unsimulated/floor/steel,
/area/centcom/control)
"lY" = (
diff --git a/_maps/submaps/level_specific/debrisfield_vr/old_teleporter.dmm b/_maps/submaps/level_specific/debrisfield_vr/old_teleporter.dmm
index 6a7b3ec814c..a4418a0a69c 100644
--- a/_maps/submaps/level_specific/debrisfield_vr/old_teleporter.dmm
+++ b/_maps/submaps/level_specific/debrisfield_vr/old_teleporter.dmm
@@ -10,13 +10,13 @@
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/old_tele)
"d" = (
-/obj/machinery/teleport/station{
+/obj/machinery/tele_projector{
icon = 'icons/obj/stationobjs.dmi'
},
/turf/simulated/floor/airless,
/area/submap/debrisfield_vr/old_tele)
"e" = (
-/obj/machinery/teleport/hub{
+/obj/machinery/tele_pad{
icon = 'icons/obj/stationobjs.dmi'
},
/turf/simulated/floor/airless,
diff --git a/_maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm b/_maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm
index 54bfd955810..6f362ab0f1f 100644
--- a/_maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm
+++ b/_maps/submaps/level_specific/debrisfield_vr/tinycarrier.dmm
@@ -380,7 +380,7 @@
/obj/structure/prop{
desc = "A man-sized pod for entering suspended animation. This one is room temperature.";
dir = 8;
- icon = 'icons/obj/Cryogenic2_vr.dmi';
+ icon = 'icons/obj/Cryogenic2.dmi';
icon_state = "cryopod_0";
name = "cryogenic freezer"
},
@@ -1166,7 +1166,7 @@
/obj/structure/prop{
desc = "A man-sized pod for entering suspended animation. This one is room temperature.";
dir = 8;
- icon = 'icons/obj/Cryogenic2_vr.dmi';
+ icon = 'icons/obj/Cryogenic2.dmi';
icon_state = "cryopod_0";
name = "cryogenic freezer"
},
diff --git a/_maps/templates/admin/dhael_centcom.dmm b/_maps/templates/admin/dhael_centcom.dmm
index 6fd7c0e000e..fb12d47ee40 100644
--- a/_maps/templates/admin/dhael_centcom.dmm
+++ b/_maps/templates/admin/dhael_centcom.dmm
@@ -1295,13 +1295,13 @@
},
/area/centcom/specops)
"cE" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/unsimulated/floor{
icon_state = "dark"
},
/area/centcom/specops)
"cF" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/unsimulated/floor{
icon_state = "dark"
},
@@ -5703,11 +5703,11 @@
/turf/unsimulated/floor/steel,
/area/centcom/control)
"lW" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/unsimulated/floor/steel,
/area/centcom/control)
"lX" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/unsimulated/floor/steel,
/area/centcom/control)
"lY" = (
diff --git a/_maps/templates/admin/dojo.dmm b/_maps/templates/admin/dojo.dmm
index 69a2472bab5..a338bf59b14 100644
--- a/_maps/templates/admin/dojo.dmm
+++ b/_maps/templates/admin/dojo.dmm
@@ -129,7 +129,7 @@
},
/area/ninja_dojo/dojo)
"au" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/unsimulated/floor{
icon_state = "plating";
@@ -137,7 +137,7 @@
},
/area/ninja_dojo/dojo)
"av" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/unsimulated/floor{
icon_state = "plating";
name = "plating"
@@ -194,11 +194,11 @@
/turf/simulated/shuttle/plating,
/area/shuttle/ninja)
"aE" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/plating,
/area/shuttle/ninja)
"aF" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/shuttle/plating,
/area/shuttle/ninja)
diff --git a/_maps/templates/admin/ert.dmm b/_maps/templates/admin/ert.dmm
index bf06e694ef0..96366573891 100644
--- a/_maps/templates/admin/ert.dmm
+++ b/_maps/templates/admin/ert.dmm
@@ -1092,7 +1092,7 @@
/turf/simulated/floor/tiled/techmaint,
/area/ship/ert/barracks)
"jI" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/floor/tiled/techfloor,
/area/ship/ert/teleporter)
"jK" = (
@@ -2990,7 +2990,7 @@
/area/ship/ert/teleporter)
"wo" = (
/obj/machinery/light,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled/techmaint,
/area/ship/ert/teleporter)
diff --git a/_maps/templates/admin/ert_base.dmm b/_maps/templates/admin/ert_base.dmm
index 4477f737203..3eab9462a86 100644
--- a/_maps/templates/admin/ert_base.dmm
+++ b/_maps/templates/admin/ert_base.dmm
@@ -1263,11 +1263,11 @@
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"cC" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"cD" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"cE" = (
diff --git a/_maps/templates/admin/kk_mercship.dmm b/_maps/templates/admin/kk_mercship.dmm
index 54a930c339d..005b4b78a88 100644
--- a/_maps/templates/admin/kk_mercship.dmm
+++ b/_maps/templates/admin/kk_mercship.dmm
@@ -1222,7 +1222,7 @@
/turf/simulated/floor/tiled/white,
/area/ship/manta/med)
"fR" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/obj/effect/floor_decal/techfloor{
dir = 1
},
@@ -9014,7 +9014,7 @@
/turf/simulated/floor/tiled/techfloor,
/area/ship/manta/armoury_as)
"RO" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/obj/effect/floor_decal/techfloor{
dir = 1
},
diff --git a/_maps/templates/admin/mercbase.dmm b/_maps/templates/admin/mercbase.dmm
index 08c36d6b2b8..b2de78f75e5 100644
--- a/_maps/templates/admin/mercbase.dmm
+++ b/_maps/templates/admin/mercbase.dmm
@@ -3739,13 +3739,13 @@
},
/area/shuttle/mercenary)
"gy" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor{
icon_state = "floor_yellow"
},
/area/shuttle/mercenary)
"gz" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor{
icon_state = "floor_yellow"
},
diff --git a/_maps/templates/admin/spa.dmm b/_maps/templates/admin/spa.dmm
index 9e1015cf155..882b5b7dc7f 100644
--- a/_maps/templates/admin/spa.dmm
+++ b/_maps/templates/admin/spa.dmm
@@ -382,12 +382,12 @@
/turf/simulated/floor/reinforced,
/area/submap/spa)
"bn" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/reinforced,
/area/submap/spa)
"bo" = (
-/obj/machinery/teleport/station{
+/obj/machinery/tele_projector{
dir = 8
},
/obj/effect/floor_decal/industrial/warning,
diff --git a/_maps/templates/admin/wizard.dmm b/_maps/templates/admin/wizard.dmm
index 6e828f6cc0a..cbb6ed3796f 100644
--- a/_maps/templates/admin/wizard.dmm
+++ b/_maps/templates/admin/wizard.dmm
@@ -1106,13 +1106,13 @@
},
/area/wizard_station)
"cC" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/unsimulated/floor{
icon_state = "dark"
},
/area/wizard_station)
"cD" = (
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/unsimulated/floor{
icon_state = "dark"
},
diff --git a/_maps/templates/shuttles/overmaps/generic/abductor.dmm b/_maps/templates/shuttles/overmaps/generic/abductor.dmm
index 5c2e2ed62be..d97a5270c0b 100644
--- a/_maps/templates/shuttles/overmaps/generic/abductor.dmm
+++ b/_maps/templates/shuttles/overmaps/generic/abductor.dmm
@@ -5,7 +5,7 @@
/area/abductor/exterior)
"bG" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/shuttle/floor/voidcraft,
/area/abductor/interior)
"bP" = (
@@ -571,7 +571,7 @@
/turf/simulated/shuttle/floor/alienplating,
/area/abductor/interior)
"Ji" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/shuttle/floor/alienplating,
/area/abductor/interior)
"JF" = (
diff --git a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm
index b9a1103a8fd..68f2df9f698 100644
--- a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm
+++ b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm
@@ -2323,11 +2323,11 @@
/area/mothership/hallway)
"eN" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/teleport/hub,
+/obj/machinery/tele_pad,
/turf/simulated/floor/tiled/techfloor/grid,
/area/mothership/teleporter)
"eO" = (
-/obj/machinery/teleport/station,
+/obj/machinery/tele_projector,
/turf/simulated/floor/tiled/techfloor/grid,
/area/mothership/teleporter)
"eP" = (
diff --git a/code/__DEFINES/_flags/_flags.dm b/code/__DEFINES/_flags/_flags.dm
index 77c189a2b59..2f07afa95a4 100644
--- a/code/__DEFINES/_flags/_flags.dm
+++ b/code/__DEFINES/_flags/_flags.dm
@@ -47,15 +47,16 @@ GLOBAL_LIST_INIT(bitflags, list(
#define OVERLAY_QUEUED (1<<12) // Atom queued to SSoverlay for COMPILE_OVERLAYS
#define PHORONGUARD (1<<13) // Does not get contaminated by phoron.
#define PROXMOVE (1<<14) // Does this object require proximity checking in Enter()?
+#define NOPRINT (1<<15) // Does not leave user's fingerprints/fibers when used on things?
///CITMAIN FLAG BITMASKS - Completely unused
-#define BLOCK_FACE_ATOM (1<<15) // Early returns mob.face_atom()
-#define SHOCKED (1<<16) // Prevents mobs from getting chainshocked by teslas and the supermatter.
-#define DEFAULT_RICOCHET (1<<17) // Projectiles will use default chance-based ricochet handling on things with this.
-#define NODECONSTRUCT (1<<18) // For machines and structures that should not break into parts, eg, holodeck stuff.
-#define PREVENT_CLICK_UNDER (1<<19) // Prevent clicking things below it on the same turf eg. doors/ fulltile windows.
-#define HOLOGRAM (1<<20)
-#define PREVENT_CONTENTS_EXPLOSION (1<<21) // should not get harmed if this gets caught by an explosion?
-#define HTML_USE_INITAL_ICON (1<<22)
+#define BLOCK_FACE_ATOM (1<<16) // Early returns mob.face_atom()
+#define SHOCKED (1<<17) // Prevents mobs from getting chainshocked by teslas and the supermatter.
+#define DEFAULT_RICOCHET (1<<18) // Projectiles will use default chance-based ricochet handling on things with this.
+#define NODECONSTRUCT (1<<19) // For machines and structures that should not break into parts, eg, holodeck stuff.
+#define PREVENT_CLICK_UNDER (1<<20) // Prevent clicking things below it on the same turf eg. doors/ fulltile windows.
+#define HOLOGRAM (1<<21)
+#define PREVENT_CONTENTS_EXPLOSION (1<<22) // should not get harmed if this gets caught by an explosion?
+#define HTML_USE_INITAL_ICON (1<<23)
///TURF FLAGS
#define NO_JAUNT (1<<0) // This is used in literally one place, turf.dm, to block ethereal jaunt.
diff --git a/code/__DEFINES/_planes+layers.dm b/code/__DEFINES/_planes+layers.dm
index 7f54b88086d..74a8d6c69f3 100644
--- a/code/__DEFINES/_planes+layers.dm
+++ b/code/__DEFINES/_planes+layers.dm
@@ -40,127 +40,134 @@ What is the naming convention for planes or layers?
*/
-#define SPACE_PLANE -82 // Reserved for use in space/parallax
-#define PARALLAX_PLANE -80 // Reserved for use in space/parallax
-#define SKYBOX_PLANE -79 // Skybox parallax
-#define DUST_PLANE -78 // For dust overlay on space turfs. Should be above skybox for parallax effect.
+#define SPACE_PLANE -82 //Reserved for use in space/parallax
+#define PARALLAX_PLANE -80 //Reserved for use in space/parallax
+#define SKYBOX_PLANE -79 //Skybox parallax
+#define DUST_PLANE -78 //For dust overlay on space turfs. Should be above skybox for parallax effect.
-#define PLANE_LOOKINGGLASS -77 // For the Looking Glass holodecks
-#define PLANE_LOOKINGGLASS_IMG -76 // For the Looking Glass holodecks
+#define PLANE_LOOKINGGLASS -77 //For the Looking Glass holodecks
+#define PLANE_LOOKINGGLASS_IMG -76 //For the Looking Glass holodecks
-// OPENSPACE_PLANE reserves all planes between OPENSPACE_PLANE_START and OPENSPACE_PLANE_END inclusive
-#define OPENSPACE_PLANE -75 // /turf/simulated/open will use OPENSPACE_PLANE + z (Valid z's being 2 thru 17)
+//OPENSPACE_PLANE reserves all planes between OPENSPACE_PLANE_START and OPENSPACE_PLANE_END inclusive
+#define OPENSPACE_PLANE -75 ///turf/simulated/open will use OPENSPACE_PLANE + z (Valid z's being 2 thru 17)
#define OPENSPACE_PLANE_START -73
#define OPENSPACE_PLANE_END -58
#define OVER_OPENSPACE_PLANE -57
-// Turf Planes
-#define PLATING_PLANE -44 // Plating
- #define DISPOSAL_LAYER 2.1 // Under objects, even when planeswapped
- #define PIPES_LAYER 2.2 // Under objects, even when planeswapped
- #define WIRES_LAYER 2.3 // Under objects, even when planeswapped
- #define ATMOS_LAYER 2.4 // Pipe-like atmos machinery that goes on the floor, like filters.
- #define ABOVE_UTILITY 2.5 // Above stuff like pipes and wires
-#define TURF_PLANE -45 // Turfs themselves, most flooring
- #define WATER_FLOOR_LAYER 2.0 // The 'bottom' of water tiles.
- #define BUILTIN_DECAL_LAYER 2.01 // For floors that automatically add decal overlays
- #define MAPPER_DECAL_LAYER 2.02 // For intentionally placed floor decal overlays
- #define UNDERWATER_LAYER 2.5 // Anything on this layer will render under the water layer.
- #define WATER_LAYER 3.0 // Layer for water overlays.
- #define ABOVE_TURF_LAYER 3.1 // Snow and wallmounted/floormounted equipment
-#define DECAL_PLANE -44 // Permanent decals
-#define DIRTY_PLANE -43 // Nonpermanent decals
-#define BLOOD_PLANE -42 // Blood is really dirty, but we can do special stuff if we separate it
+//Turf Planes
+#define PLATING_PLANE -44 //Plating
+ #define DISPOSAL_LAYER 2.1 //Under objects, even when planeswapped
+ #define PIPES_LAYER 2.2 //Under objects, even when planeswapped
+ #define WIRES_LAYER 2.3 //Under objects, even when planeswapped
+ #define ATMOS_LAYER 2.4 //Pipe-like atmos machinery that goes on the floor, like filters.
+ #define ABOVE_UTILITY 2.5 //Above stuff like pipes and wires
+#define TURF_PLANE -45 //Turfs themselves, most flooring
+ #define WATER_FLOOR_LAYER 2.0 //The 'bottom' of water tiles.
+ #define BUILTIN_DECAL_LAYER 2.01 //For floors that automatically add decal overlays
+ #define MAPPER_DECAL_LAYER 2.02 //For intentionally placed floor decal overlays
+ #define UNDERWATER_LAYER 2.5 //Anything on this layer will render under the water layer.
+ #define WATER_LAYER 3.0 //Layer for water overlays.
+ #define ABOVE_TURF_LAYER 3.1 //Snow and wallmounted/floormounted equipment
+#define DECAL_PLANE -44 //Permanent decals
+#define DIRTY_PLANE -43 //Nonpermanent decals
+#define BLOOD_PLANE -42 //Blood is really dirty, but we can do special stuff if we separate it
-// Obj planes
+//Obj planes
#define OBJ_PLANE -35
- #define STAIRS_LAYER 2.5 // Layer for stairs
- #define HIDING_LAYER 2.6 // Layer at which mobs hide to be under things like tables
- #define DOOR_OPEN_LAYER 2.7 // Under all objects if opened. 2.7 due to tables being at 2.6
- #define TABLE_LAYER 2.8 // Just under stuff that wants to be slightly below common objects.
+ #define STAIRS_LAYER 2.5 //Layer for stairs
+ #define HIDING_LAYER 2.6 //Layer at which mobs hide to be under things like tables
+ #define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
+ #define TABLE_LAYER 2.8 //Just under stuff that wants to be slightly below common objects.
#define PROJECTILE_HIT_THRESHOLD_LAYER 2.8
- #define UNDER_JUNK_LAYER 2.9 // Things that want to be slightly below common objects
- // Turf/Obj layer boundary
- #define ABOVE_JUNK_LAYER 3.1 // Things that want to be slightly above common objects
- #define DOOR_CLOSED_LAYER 3.1 // Doors when closed
- #define WINDOW_LAYER 3.2 // Windows
- #define ON_WINDOW_LAYER 3.3 // Ontop of a window
- #define ABOVE_WINDOW_LAYER 3.4 //Above full tile windows so wall items are clickable
+ #define UNDER_JUNK_LAYER 2.9 //Things that want to be slightly below common objects
+ //Turf/Obj layer boundary
+ #define ABOVE_JUNK_LAYER 3.1 //Things that want to be slightly above common objects
+ #define DOOR_CLOSED_LAYER 3.1 //Doors when closed
+ #define WINDOW_LAYER 3.2 //Windows
+ #define ON_WINDOW_LAYER 3.3 //Ontop of a window
+ #define ABOVE_WINDOW_LAYER 3.4 //Above full tile windows so wall items are clickable
-// Mob planes
+//Mob planes
#define MOB_PLANE -25
- #define BELOW_MOB_LAYER 3.9 // Should be converted to plane swaps
- #define ABOVE_MOB_LAYER 4.1 // Should be converted to plane swaps
+ #define BELOW_MOB_LAYER 3.9 //Should be converted to plane swaps
+ #define ABOVE_MOB_LAYER 4.1 //Should be converted to plane swaps
-// Invisible things plane
+//Invisible things plane
#define CLOAKED_PLANE -15
-// Top plane (in the sense that it's the highest in 'the world' and not a UI element)
+//Top plane (in the sense that it's the highest in 'the world' and not a UI element)
#define ABOVE_PLANE -10
+ //define FLOAT_LAYER -1 //For easy recordkeeping; this is a byond define
+
////////////////////////////////////////////////////////////////////////////////////////
-#define PLANE_WORLD 0 // BYOND's default value for plane, the "base plane"
+#define PLANE_WORLD 0 //BYOND's default value for plane, the "base plane"
////////////////////////////////////////////////////////////////////////////////////////
- //#define AREA_LAYER 1 //For easy recordkeeping; this is a byond define
+ //#define AREA_LAYER 1 //For easy recordkeeping; this is a byond define
- //#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define
+ //#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define
- //#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define
+ //#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define
- //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define
+ //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define
- //#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
+ //#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
- #define HUD_LAYER 20 // Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
- #define SCREEN_LAYER 22 // Mob HUD/effects layer
+ #define HUD_LAYER 20 //Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
+ #define SCREEN_LAYER 22 //Mob HUD/effects layer
-#define PLANE_STATUS 2 //Status Indicators that show over mobs' heads when certain things like stuns affect them.
+#define PLANE_STATUS 2 //Status Indicators that show over mobs' heads when certain things like stuns affect them.
-#define PLANE_ADMIN1 3 //Purely for shenanigans (below lighting)
-#define PLANE_PLANETLIGHTING 4 //Lighting on planets
-#define PLANE_LIGHTING 5 //Where the lighting (and darkness) lives
-#define LIGHTING_LAYER 15
-#define PLANE_LIGHTING_ABOVE 6 //For glowy eyes etc. that shouldn't be affected by darkness
+#define PLANE_ADMIN1 3 //Purely for shenanigans (below lighting)
+#define PLANE_PLANETLIGHTING 4 //Lighting on planets
+#define PLANE_LIGHTING 5 //Where the lighting (and darkness) lives (ignoring all other higher planes)
+ #define LIGHTBULB_LAYER 0
+ #define LIGHTING_LAYER 1
+ #define ABOVE_LIGHTING_LAYER 2
+#define PLANE_LIGHTING_ABOVE 6 //For glowy eyes etc. that shouldn't be affected by darkness
+ #define EYE_GLOW_LAYER 1
+ #define BEAM_PROJECTILE_LAYER 2
+ #define SUPERMATTER_WALL_LAYER 3
-#define PLANE_GHOSTS 10 //Spooooooooky ghooooooosts
-#define PLANE_AI_EYE 11 //The AI eye lives here
+#define PLANE_GHOSTS 10 //Spooooooooky ghooooooosts
+#define PLANE_AI_EYE 11 //The AI eye lives here
-// "Character HUDs", aka HUDs, but not the game's UI. Things like medhuds. I know Planes say they must be intergers, but it's lies.
-#define PLANE_CH_STATUS 15 //Status icon
-#define PLANE_CH_HEALTH 16 //Health icon
-#define PLANE_CH_LIFE 17 //Health bar
-#define PLANE_CH_ID 18 //Job icon
-#define PLANE_CH_WANTED 19 //Arrest icon
-#define PLANE_CH_IMPLOYAL 20 //Loyalty implant icon
-#define PLANE_CH_IMPTRACK 21 //Tracking implant icon
-#define PLANE_CH_IMPCHEM 22 //Chemical implant icon
-#define PLANE_CH_SPECIAL 23 //Special role icon (revhead or w/e)
-#define PLANE_CH_STATUS_OOC 24 //OOC status hud for spooks
+//"Character HUDs", aka HUDs, but not the game's UI. Things like medhuds. I know Planes say they must be intergers, but it's lies.
+#define PLANE_CH_STATUS 15 //Status icon
+#define PLANE_CH_HEALTH 16 //Health icon
+#define PLANE_CH_LIFE 17 //Health bar
+#define PLANE_CH_ID 18 //Job icon
+#define PLANE_CH_WANTED 19 //Arrest icon
+#define PLANE_CH_IMPLOYAL 20 //Loyalty implant icon
+#define PLANE_CH_IMPTRACK 21 //Tracking implant icon
+#define PLANE_CH_IMPCHEM 22 //Chemical implant icon
+#define PLANE_CH_SPECIAL 23 //Special role icon (revhead or w/e)
+#define PLANE_CH_STATUS_OOC 24 //OOC status hud for spooks
-#define PLANE_MESONS 30 //Stuff seen with mesons, like open ceilings. This is 30 for downstreams.
+#define PLANE_MESONS 30 //Stuff seen with mesons, like open ceilings. This is 30 for downstreams.
-#define PLANE_ADMIN2 33 //Purely for shenanigans (above lighting)
+#define PLANE_ADMIN2 33 //Purely for shenanigans (above lighting)
//Fullscreen overlays under inventory
-#define PLANE_FULLSCREEN 90 //Blindness, mesons, druggy, etc
- #define OBFUSCATION_LAYER 5 //Where images covering the view for eyes are put
- #define FULLSCREEN_LAYER 18
+#define PLANE_FULLSCREEN 90 //Blindness, mesons, druggy, etc
+ #define OBFUSCATION_LAYER 5 //Where images covering the view for eyes are put
+ #define FULLSCREEN_LAYER 18
#define DAMAGE_SCREEN_LAYER 18.1
- #define BLIND_LAYER 18.2
- #define CRIT_LAYER 18.3
+ #define BLIND_LAYER 18.2
+ #define CRIT_LAYER 18.3
//Client UI HUD stuff
-#define PLANE_PLAYER_HUD 95 //The character's UI is on this plane
- #define LAYER_HUD_UNDER 1 //Under the HUD items
- #define LAYER_HUD_BASE 2 //The HUD items themselves
- #define LAYER_HUD_ITEM 3 //Things sitting on HUD items (largely irrelevant because PLANE_PLAYER_HUD_ITEMS)
- #define LAYER_HUD_ABOVE 4 //Things that reside above items (highlights)
-#define PLANE_PLAYER_HUD_ITEMS 96 //Separate layer with which to apply colorblindness
-#define PLANE_PLAYER_HUD_ABOVE 97 //Things above the player hud
+#define PLANE_PLAYER_HUD 95 //The character's UI is on this plane
+ #define LAYER_HUD_UNDER 1 //Under the HUD items
+ #define LAYER_HUD_BASE 2 //The HUD items themselves
+ #define LAYER_HUD_ITEM 3 //Things sitting on HUD items (largely irrelevant because PLANE_PLAYER_HUD_ITEMS)
+ #define LAYER_HUD_ABOVE 4 //Things that reside above items (highlights)
+#define PLANE_PLAYER_HUD_ITEMS 96 //Separate layer with which to apply colorblindness
+#define PLANE_PLAYER_HUD_ABOVE 97 //Things above the player hud
-#define PLANE_ADMIN3 99 //Purely for shenanigans (above HUD)
+#define PLANE_ADMIN3 99 //Purely for shenanigans (above HUD)
//////////////////////////
@@ -172,15 +179,15 @@ What is the naming convention for planes or layers?
plane = initial(plane)
set_base_layer(initial(layer))
-// Check if a mob can "logically" see an atom plane
+//Check if a mob can "logically" see an atom plane
#define MOB_CAN_SEE_PLANE(M, P) (P <= PLANE_WORLD || (P in M.planes_visible))
//VR FILE MERGE
-// "Character HUDs", aka HUDs, but not the game's UI. Things like medhuds.
-#define PLANE_CH_HEALTH_VR 26 //Hidden healthbar when at full health
-#define PLANE_CH_STATUS_R 27 //Right-side status icon
-#define PLANE_CH_BACKUP 28 //Backup implant
-#define PLANE_CH_VANTAG 29 //Vore Antag hud
+//"Character HUDs", aka HUDs, but not the game's UI. Things like medhuds.
+#define PLANE_CH_HEALTH_VR 26 //Hidden healthbar when at full health
+#define PLANE_CH_STATUS_R 27 //Right-side status icon
+#define PLANE_CH_BACKUP 28 //Backup implant
+#define PLANE_CH_VANTAG 29 //Vore Antag hud
-#define PLANE_AUGMENTED 40 //Augmented-reality plane
+#define PLANE_AUGMENTED 40 //Augmented-reality plane
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index d0186bc4e21..de96742180b 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -136,13 +136,6 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
// Area flags, possibly more to come
#define RAD_SHIELDED 1 // Shielded from radiation, clearly
-// OnTopic return values
-#define TOPIC_NOACTION 0
-#define TOPIC_HANDLED 1
-#define TOPIC_REFRESH 2
-#define TOPIC_UPDATE_PREVIEW 4
-#define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_REFRESH|TOPIC_UPDATE_PREVIEW)
-
// Convoluted setup so defines can be supplied by Bay12 main server compile script.
// Should still work fine for people jamming the icons into their repo.
#ifndef CUSTOM_ITEM_OBJ
@@ -542,7 +535,9 @@ GLOBAL_LIST_EMPTY(##LIST_NAME);\
"pink" = "lightgrey" \
)
-#define SPAN_NOTICE(X) "[X]"
-#define SPAN_WARNING(X) "[X]"
+#define SPAN_CAUTION(X) "[X]"
#define SPAN_DANGER(X) "[X]"
+#define SPAN_INFO(X) "[X]"
+#define SPAN_NOTICE(X) "[X]"
#define SPAN_OCCULT(X) "[X]"
+#define SPAN_WARNING(X) "[X]"
diff --git a/code/__DEFINES/topic.dm b/code/__DEFINES/topic.dm
new file mode 100644
index 00000000000..19802eb606f
--- /dev/null
+++ b/code/__DEFINES/topic.dm
@@ -0,0 +1,6 @@
+///OnTopic return values
+#define TOPIC_NOACTION 0
+#define TOPIC_HANDLED 1
+#define TOPIC_REFRESH 2
+#define TOPIC_UPDATE_PREVIEW 4
+#define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_REFRESH|TOPIC_UPDATE_PREVIEW)
diff --git a/code/__HELPERS/lists/misc.dm b/code/__HELPERS/lists/misc.dm
index fabfeaf949d..5a07664a3fa 100644
--- a/code/__HELPERS/lists/misc.dm
+++ b/code/__HELPERS/lists/misc.dm
@@ -14,3 +14,5 @@
r += bit
return r
+
+#define IS_VALID_INDEX(list, index) (list.len && index > 0 && index <= list.len)
diff --git a/code/_macros.dm b/code/_macros.dm
index 4839111eeb6..22f6a412ecb 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -16,9 +16,11 @@
#define from_file(file_entry, target_var) file_entry >> target_var
#define show_browser(target, browser_content, browser_name) target << browse(browser_content, browser_name)
+#define close_browser(target, browser_name) target << browse(null, browser_name)
#define CanInteract(user, state) (CanUseTopic(user, state) == UI_INTERACTIVE)
+#define CanDefaultInteract(user) (CanUseTopic(user, DefaultTopicState()) == UI_INTERACTIVE)
#define sequential_id(key) uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, key)
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index b41e005a3e0..cf60ce62de2 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -122,7 +122,7 @@
/obj/machinery/door/airlock/AIShiftClick(mob/user) // Opens and closes doors!
add_hiddenprint(user)
toggle_open(user)//instead of topic() procs
- return 1
+ return TRUE
/atom/proc/AICtrlClick(mob/user)
return
@@ -130,17 +130,17 @@
/obj/machinery/door/airlock/AICtrlClick(mob/user) // Bolts doors
add_hiddenprint(user)
toggle_bolt(user)//apparently this is better than the topic function
- return 1
+ return TRUE
/obj/machinery/power/apc/AICtrlClick(mob/user) // turns off/on APCs.
add_hiddenprint(user)
toggle_breaker(user)
- return 1
+ return TRUE
/obj/machinery/turretid/AICtrlClick(mob/user) //turns off/on Turrets
add_hiddenprint(user)
enabled = !enabled //toggles the turret on/off
- return 1
+ return TRUE
/atom/proc/AIAltClick(var/atom/A)
return AltClick(A)
@@ -150,15 +150,15 @@
electrify(0, 1)
else
electrify(-1,1)
- return 1
+ return TRUE
/obj/machinery/turretid/AIAltClick(mob/user) //toggles lethal on turrets
add_hiddenprint(user)
lethal = !lethal
- return 1
+ return TRUE
/atom/proc/AIMiddleClick(var/mob/living/silicon/user)
- return 0
+ return FALSE
/obj/machinery/door/airlock/AIMiddleClick(mob/user) // Toggles door bolt lights.
if(..())
@@ -168,9 +168,9 @@
to_chat(user, "The lights are not responsive to your command.")
return
lights = !lights
- to_chat(user, "Lights are now [lights ? "enabled." : "disabled."]")
+ to_chat(user, SPAN_NOTICE("Lights are now [lights ? "enabled." : "disabled."]"))
update_icon()
- return 1
+ return TRUE
//
// Override AdjacentQuick for AltClicking
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 2c5d385398d..0efee9eef1c 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -30,7 +30,8 @@ avoid code duplication. This includes items that may sometimes act as a standard
//I would prefer to rename this to attack(), but that would involve touching hundreds of files.
/obj/item/proc/resolve_attackby(atom/A, mob/user, params, attack_modifier = 1)
pre_attack(A, user)
- add_fingerprint(user)
+ if(!(flags & NOPRINT))
+ add_fingerprint(user)
return A.attackby(src, user, params, attack_modifier)
// No comment
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index 2a5d201b72c..c6d6670538b 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -58,13 +58,13 @@
// ---------------------------------------
// And here are some good things for free:
// Now you can click through portals, wormholes, gateways, and teleporters while observing. -Sayu
-
-/obj/machinery/teleport/hub/attack_ghost(mob/user as mob)
+/*
+/obj/machinery/tele_pad/attack_ghost(mob/user as mob)
var/atom/l = loc
var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(l.x - 2, l.y, l.z))
- if(com.locked)
+ if(com.locked)
user.loc = get_turf(com.locked)
-
+*/
/obj/effect/portal/attack_ghost(mob/user as mob)
if(target)
user.loc = get_turf(target)
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 052a670df30..ff66cbc7106 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -4,83 +4,83 @@
return
/datum/teleport
- var/atom/movable/teleatom //atom to teleport
- var/atom/destination //destination to teleport to
- var/precision = 0 //teleport precision
- var/datum/effect_system/effectin //effect to show right before teleportation
- var/datum/effect_system/effectout //effect to show right after teleportation
- var/soundin //soundfile to play before teleportation
- var/soundout //soundfile to play after teleportation
- var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation)
- var/local = TRUE //VOREStation Add - If false, can teleport from/to any z-level
- var/bohsafe = FALSE //if true, can teleport safely with a BoH
+ var/atom/movable/teleatom //Atom to teleport
+ var/atom/destination //Destination to teleport to
+ var/precision = 0 //Teleport precision
+ var/datum/effect_system/effectin //Effect to show right before teleportation
+ var/datum/effect_system/effectout //Effect to show right after teleportation
+ var/soundin //Soundfile to play before teleportation
+ var/soundout //Soundfile to play after teleportation
+ var/force_teleport = 1 //If false, teleport will use Move() proc (dense objects will prevent teleportation)
+ var/local = TRUE //If false, can teleport from/to any z-level
+ var/bohsafe = FALSE //If true, can teleport safely with a BoH
-/datum/teleport/New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE, bohsafe=FALSE) //VOREStation Edit
+/datum/teleport/New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE, bohsafe=FALSE)
..()
if(!initTeleport(arglist(args)))
- return 0
- return 1
+ return FALSE
+ return TRUE
-/datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout,local,bohsafe) //VOREStation Edit
+/datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout,local,bohsafe)
if(!setTeleatom(ateleatom))
- return 0
+ return FALSE
if(!setDestination(adestination))
- return 0
+ return FALSE
src.bohsafe = bohsafe
if(!setPrecision(aprecision))
- return 0
+ return FALSE
setEffects(aeffectin,aeffectout)
setForceTeleport(afteleport)
setSounds(asoundin,asoundout)
- src.local = local // VOREStation Add
- return 1
+ src.local = local
+ return TRUE
//must succeed
/datum/teleport/proc/setPrecision(aprecision)
if(isnum(aprecision))
precision = aprecision
- return 1
- return 0
+ return TRUE
+ return FALSE
//must succeed
/datum/teleport/proc/setDestination(atom/adestination)
if(istype(adestination))
destination = adestination
- return 1
- return 0
+ return TRUE
+ return FALSE
//must succeed in most cases
/datum/teleport/proc/setTeleatom(atom/movable/ateleatom)
if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon))
qdel(ateleatom)
- return 0
+ return FALSE
if(istype(ateleatom))
teleatom = ateleatom
- return 1
- return 0
+ return TRUE
+ return FALSE
//custom effects must be properly set up first for instant-type teleports
//optional
/datum/teleport/proc/setEffects(datum/effect_system/aeffectin=null,datum/effect_system/aeffectout=null)
effectin = istype(aeffectin) ? aeffectin : null
effectout = istype(aeffectout) ? aeffectout : null
- return 1
+ return TRUE
//optional
/datum/teleport/proc/setForceTeleport(afteleport)
force_teleport = afteleport
- return 1
+ return TRUE
//optional
/datum/teleport/proc/setSounds(asoundin=null,asoundout=null)
soundin = isfile(asoundin) ? asoundin : null
soundout = isfile(asoundout) ? asoundout : null
- return 1
+ return TRUE
//placeholder
/datum/teleport/proc/teleportChecks()
- return 1
+ return TRUE
/datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound)
if(location)
@@ -95,7 +95,7 @@
playsound(location,sound,60,1)
return
-//do the monkey dance
+//Do the monkey dance
/datum/teleport/proc/doTeleport()
var/turf/destturf
@@ -108,7 +108,7 @@
destturf = get_turf(destination)
if(!destturf || !curturf)
- return 0
+ return FALSE
playSpecials(curturf,effectin,soundin)
@@ -118,7 +118,7 @@
var/mob/living/L = teleatom
if(L.buckled)
C = L.buckled
- if(attempt_vr(src,"try_televore",args)) return //VOREStation Edit - Telenoms.
+ if(attempt_vr(src,"try_televore",args)) return //Sigh...
if(force_teleport)
teleatom.forceMove(destturf)
playSpecials(destturf,effectout,soundout)
@@ -130,14 +130,14 @@
destarea.Entered(teleatom)
- return 1
+ return TRUE
/datum/teleport/proc/teleport()
if(teleportChecks())
return doTeleport()
- return 0
+ return FALSE
-/datum/teleport/instant //teleports when datum is created
+/datum/teleport/instant //Teleports when datum is created
/datum/teleport/instant/New(ateleatom, adestination, aprecision=0, afteleport=1, bohsafe=0, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null)
if(..())
@@ -150,17 +150,17 @@
var/datum/effect_system/spark_spread/aeffect = new
aeffect.set_up(5, 1, teleatom)
var/datum/effect_system/spark_spread/aeffect2 = new
- aeffect2.set_up(5, 1, teleatom) //This looks stupid, but it doesn't work unless I do
+ aeffect2.set_up(5, 1, teleatom) //This looks stupid, but it doesn't work unless I do
effectin = effectin || aeffect
effectout = effectout || aeffect2
- return 1
+ return TRUE
else
return ..()
/datum/teleport/instant/science/setPrecision(aprecision)
..()
if(bohsafe)
- return 1
+ return TRUE
if(istype(teleatom, /obj/item/storage/backpack/holding))
precision = rand(1,100)
@@ -169,56 +169,56 @@
precision = max(rand(1,100)*bagholding.len,100)
if(istype(teleatom, /mob/living))
var/mob/living/MM = teleatom
- to_chat(MM, "The Bluespace interface on your [teleatom] interferes with the teleport!")
- return 1
+ to_chat(MM, SPAN_DANGER("The Bluespace interface on your [teleatom] interferes with the teleport!"))
+ return TRUE
/datum/teleport/instant/science/teleportChecks()
if(istype(teleatom, /obj/item/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite
- teleatom.visible_message("\The [teleatom] bounces off of the portal!")
- return 0
+ teleatom.visible_message(SPAN_DANGER("\The [teleatom] bounces off of the portal!"))
+ return FALSE
if(!!length(teleatom.search_contents_for(/obj/item/disk/nuclear)))
if(istype(teleatom, /mob/living))
var/mob/living/MM = teleatom
- MM.visible_message("\The [MM] bounces off of the portal!","Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.")
+ MM.visible_message(SPAN_DANGER("\The [MM] bounces off of the portal!"), SPAN_WARNING("Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through."))
else
- teleatom.visible_message("\The [teleatom] bounces off of the portal!")
- return 0
+ teleatom.visible_message(SPAN_DANGER("\The [teleatom] bounces off of the portal!"))
+ return FALSE
/* VOREStation Removal
if(destination.z in GLOB.using_map.admin_levels) //CentCom z-level
if(istype(teleatom, /obj/mecha))
var/obj/mecha/MM = teleatom
- to_chat(MM.occupant, "\The [MM] would not survive the jump to a location so far away!")
- return 0
+ to_chat(MM.occupant, SPAN_DANGER("\The [MM] would not survive the jump to a location so far away!"))
+ return FALSE
if(!!length(teleatom.search_contents_for(/obj/item/storage/backpack/holding)))
- teleatom.visible_message("\The [teleatom] bounces off of the portal!")
- return 0
+ teleatom.visible_message(SPAN_DANGER("\The [teleatom] bounces off of the portal!"))
+ return FALSE
*/ //VOREStation Removal End
//VOREStation Edit Start
var/obstructed = 0
var/turf/dest_turf = get_turf(destination)
if(local && !(dest_turf.z in GLOB.using_map.player_levels))
if(istype(teleatom, /mob/living))
- to_chat(teleatom, "The portal refuses to carry you that far away!")
- return 0
+ to_chat(teleatom, SPAN_WARNING("The portal refuses to carry you that far away!"))
+ return FALSE
else if(istype(destination.loc, /obj/belly))
var/obj/belly/destination_belly = destination.loc
var/mob/living/telenommer = destination_belly.owner
if(istype(telenommer))
if(!isliving(teleatom))
- return 1
+ return TRUE
else
var/mob/living/telemob = teleatom
if(telemob.can_be_drop_prey && telenommer.can_be_drop_pred)
- return 1
+ return TRUE
obstructed = 1
else if(!((isturf(destination) && !destination.density) || (isturf(destination.loc) && !destination.loc.density)) || !destination.x || !destination.y || !destination.z) //If we're inside something or outside universe
obstructed = 1
- to_chat(teleatom, "Something is blocking way on the other side!")
+ to_chat(teleatom, SPAN_WARNING("Something is blocking way on the other side!"))
if(obstructed)
- return 0
+ return FALSE
else
- return 1
+ return TRUE
//VOREStation Edit End
//VR FILE MERGE
@@ -229,7 +229,7 @@
return
/datum/teleport/instant/science/noeffect/setEffects(datum/effect_system/aeffectin,datum/effect_system/aeffectout)
- return 1
+ return TRUE
/datum/teleport/proc/try_televore()
//Destination is in a belly
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index a3091dddad5..a944fad27e9 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -466,10 +466,15 @@
src.fingerprintslast = M.key
return
-/atom/proc/add_fingerprint(mob/living/M as mob, ignoregloves = 0)
- if(isnull(M)) return
- if(isAI(M)) return
- if(isnull(M.key)) return
+/atom/proc/add_fingerprint(mob/M, ignoregloves, obj/item/tool)
+ if(isnull(M))
+ return
+ if(isAI(M))
+ return
+ if(!M || !M.key)
+ return
+ if(istype(tool) && (tool.flags & NOPRINT))
+ return
if (ishuman(M))
//Add the list if it does not exist.
if(!fingerprintshidden)
diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm
index 0f62f649777..285143eab0e 100644
--- a/code/game/gamemodes/cult/hell_universe.dm
+++ b/code/game/gamemodes/cult/hell_universe.dm
@@ -81,4 +81,4 @@ In short:
for (var/obj/machinery/power/apc/APC in GLOB.apcs)
if (!(APC.stat & BROKEN) && !APC.is_critical)
APC.emagged = 1
- APC.queue_icon_update()
+ APC.update_icon()
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
index 93f8b6f34d7..1ddcc35d470 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
@@ -113,7 +113,7 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked
if(APC.cell)
APC.cell.charge = 0
APC.emagged = 1
- APC.queue_icon_update()
+ APC.update_icon()
/datum/universal_state/supermatter_cascade/proc/PlayerSet()
for(var/datum/mind/M in player_list)
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 8baf0ca36d9..c13b3c18f5a 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -1,6 +1,6 @@
/obj/machinery/sleep_console
name = "sleeper console"
- icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icon.
+ icon = 'icons/obj/Cryogenic2.dmi' //VOREStation Edit - Better icon.
icon_state = "sleeperconsole"
var/obj/machinery/sleeper/sleeper
anchored = 1 //About time someone fixed this.
@@ -130,16 +130,14 @@
/obj/machinery/sleep_console/Topic(href, href_list)
if(..())
- return 1
+ return TRUE
var/obj/machinery/sleeper/S = sleeper
if(usr == S.occupant)
- to_chat(usr, "You can't reach the controls from the inside.")
+ to_chat(usr, SPAN_WARNING("You can't reach the controls from the inside."))
return
- add_fingerprint(usr)
-
if(href_list["eject"])
S.go_out()
if(href_list["beaker"])
@@ -159,22 +157,22 @@
if(new_stasis && CanUseTopic(usr, default_state) == UI_INTERACTIVE)
S.stasis_level = S.stasis_choices[new_stasis]
- return 1
+ return TRUE
/obj/machinery/sleeper
name = "sleeper"
desc = "A stasis pod with built-in injectors, a dialysis machine, and a limited health scanner."
- icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icons
+ icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper_0"
- density = 1
- anchored = 1
+ density = TRUE
+ anchored = TRUE
circuit = /obj/item/circuitboard/sleeper
var/mob/living/carbon/human/occupant = null
var/list/available_chemicals = list()
var/list/base_chemicals = list("inaprovaline" = "Inaprovaline", "paracetamol" = "Paracetamol", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin")
var/obj/item/reagent_containers/glass/beaker = null
- var/filtering = 0
- var/pumping = 0
+ var/filtering = FALSE
+ var/pumping = FALSE
var/obj/machinery/sleep_console/console
var/stasis_level = 0 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1)
var/stasis_choices = list("Complete (1%)" = 100, "Deep (10%)" = 10, "Moderate (20%)" = 5, "Light (50%)" = 2, "None (100%)" = 0)
@@ -186,17 +184,7 @@
/obj/machinery/sleeper/Initialize(mapload)
. = ..()
beaker = new /obj/item/reagent_containers/glass/beaker/large(src)
- component_parts = list()
- component_parts += new /obj/item/stock_parts/manipulator(src)
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/reagent_containers/glass/beaker(src)
- component_parts += new /obj/item/reagent_containers/glass/beaker(src)
- component_parts += new /obj/item/reagent_containers/glass/beaker(src)
- component_parts += new /obj/item/reagent_containers/syringe(src)
- component_parts += new /obj/item/reagent_containers/syringe(src)
- component_parts += new /obj/item/reagent_containers/syringe(src)
- component_parts += new /obj/item/stack/material/glass/reinforced(src, 2)
-
+ default_apply_parts()
RefreshParts()
/obj/machinery/sleeper/Destroy()
@@ -281,24 +269,15 @@
toggle_pump()
/obj/machinery/sleeper/update_icon()
- icon_state = "sleeper_[occupant ? "1" : "0"]"
+ icon_state = "sleeper_[occupant ? TRUE : FALSE]"
/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user)
- add_fingerprint(user)
if(istype(I, /obj/item/grab))
var/obj/item/grab/G = I
if(G.affecting)
go_in(G.affecting, user)
return
- if(istype(I, /obj/item/reagent_containers/glass))
- if(!beaker)
- beaker = I
- user.drop_item()
- I.loc = src
- user.visible_message("\The [user] adds \a [I] to \the [src].", "You add \a [I] to \the [src].")
- else
- to_chat(user, "\The [src] has a beaker already.")
- return
+
if(!occupant)
if(default_deconstruction_screwdriver(user, I))
return
@@ -307,6 +286,19 @@
if(default_part_replacement(user, I))
return
+ if(istype(I, /obj/item/reagent_containers/glass))
+ add_fingerprint(user)
+ if(!beaker)
+ beaker = I
+ user.drop_item()
+ I.loc = src
+ user.visible_message(SPAN_NOTICE("\The [user] adds \a [I] to \the [src]."), SPAN_NOTICE("You add \a [I] to \the [src]."))
+ else
+ to_chat(user, SPAN_WARNING("\The [src] has a beaker already."))
+ return
+ else
+ ..()
+
/obj/machinery/sleeper/verb/move_eject()
set name = "Eject occupant"
set category = "Object"
@@ -316,7 +308,7 @@
if(DEAD)
return
if(UNCONSCIOUS)
- to_chat(usr, "You struggle through the haze to hit the eject button. This will take a couple of minutes...")
+ to_chat(usr, SPAN_NOTICE("You struggle through the haze to hit the eject button. This will take a couple of minutes..."))
if(do_after(usr, 2 MINUTES, src))
go_out()
if(CONSCIOUS)
@@ -369,13 +361,13 @@
if(stat & (BROKEN|NOPOWER))
return
if(occupant)
- to_chat(user, "\The [src] is already occupied.")
+ to_chat(user, SPAN_WARNING("\The [src] is already occupied."))
return
if(!ishuman(M))
- to_chat(user, "\The [src] is not designed for that organism!")
+ to_chat(user, SPAN_WARNING("\The [src] is not designed for that organism!"))
return
if(M.buckled)
- to_chat(user, "[M == user? "You are" : "[M] is"] buckled to something!")
+ to_chat(user, SPAN_WARNING("[M == user? "You are" : "[M] is"] buckled to something!"))
return
if(M == user)
visible_message("\The [user] starts climbing into \the [src].")
@@ -384,7 +376,7 @@
if(do_after(user, 20))
if(occupant)
- to_chat(user, "\The [src] is already occupied.")
+ to_chat(user, SPAN_WARNING("\The [src] is already occupied."))
return
M.forceMove(src)
update_use_power(USE_POWER_ACTIVE)
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 16640b41f30..50912466c7d 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -257,8 +257,6 @@ Class Procs:
if(clicksound && istype(user, /mob/living/carbon))
playsound(src, clicksound, clickvol)
- add_fingerprint(user)
-
return ..()
/obj/machinery/proc/RefreshParts() //Placeholder proc for machines that are built using frames.
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index efd361f7a45..658d09b7700 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -4,7 +4,7 @@
var/mob/living/carbon/occupant
var/locked
name = "Body Scanner"
- icon = 'icons/obj/Cryogenic2_vr.dmi'
+ icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "scanner_open"
density = 1
anchored = 1
@@ -17,11 +17,7 @@
/obj/machinery/bodyscanner/Initialize(mapload, newdir)
. = ..()
- component_parts = list()
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stack/material/glass/reinforced(src, 2)
+ default_apply_parts()
RefreshParts()
/obj/machinery/bodyscanner/Destroy()
@@ -37,25 +33,27 @@
set_light(0)
/obj/machinery/bodyscanner/attackby(var/obj/item/G, user as mob)
+ if(!istype(G))
+ return ..()
if(istype(G, /obj/item/grab))
var/obj/item/grab/H = G
if(panel_open)
- to_chat(user, "Close the maintenance panel first.")
+ to_chat(user, SPAN_NOTICE("Close the maintenance panel first."))
return
if(!ismob(H.affecting))
return
if(!ishuman(H.affecting))
- to_chat(user, "\The [src] is not designed for that organism!")
+ to_chat(user, SPAN_WARNING("\The [src] is not designed for that organism!"))
return
if(occupant)
- to_chat(user, "\The [src] is already occupied!")
+ to_chat(user, SPAN_NOTICE("\The [src] is already occupied!"))
return
if(H.affecting.has_buckled_mobs())
- to_chat(user, span("warning", "\The [H.affecting] has other entities attached to it. Remove them first."))
+ to_chat(user, SPAN_WARNING("\The [H.affecting] has other entities attached to it. Remove them first."))
return
var/mob/M = H.affecting
if(M.abiotic())
- to_chat(user, "Subject cannot have abiotic items on.")
+ to_chat(user, SPAN_NOTICE("Subject cannot have abiotic items on."))
return
M.forceMove(src)
occupant = M
@@ -71,29 +69,29 @@
/obj/machinery/bodyscanner/MouseDrop_T(mob/living/carbon/O, mob/user as mob)
if(!istype(O))
- return 0 //not a mob
+ return FALSE //not a mob
if(user.incapacitated())
- return 0 //user shouldn't be doing things
+ return FALSE //user shouldn't be doing things
if(O.anchored)
- return 0 //mob is anchored???
+ return FALSE //mob is anchored???
if(get_dist(user, src) > 1 || get_dist(user, O) > 1)
- return 0 //doesn't use adjacent() to allow for non-GLOB.cardinal (fuck my life)
+ return FALSE //doesn't use adjacent() to allow for non-GLOB.cardinal (fuck my life)
if(!ishuman(user) && !isrobot(user))
- return 0 //not a borg or human
+ return FALSE //not a borg or human
if(panel_open)
- to_chat(user, "Close the maintenance panel first.")
- return 0 //panel open
+ to_chat(user, SPAN_NOTICE("Close the maintenance panel first."))
+ return FALSE //panel open
if(occupant)
- to_chat(user, "\The [src] is already occupied.")
- return 0 //occupied
+ to_chat(user, SPAN_NOTICE("\The [src] is already occupied."))
+ return FALSE //occupied
if(O.buckled)
- return 0
+ return FALSE
if(O.abiotic())
- to_chat(user, "Subject cannot have abiotic items on.")
- return 0
+ to_chat(user, SPAN_NOTICE("Subject cannot have abiotic items on."))
+ return FALSE
if(O.has_buckled_mobs())
- to_chat(user, span("warning", "\The [O] has other entities attached to it. Remove them first."))
+ to_chat(user, SPAN_WARNING("\The [O] has other entities attached to it. Remove them first."))
return
if(O == user)
@@ -103,13 +101,13 @@
O.forceMove(src)
occupant = O
- update_icon() //icon_state = "body_scanner_1" //VOREStation Edit - Health display for consoles with light and such.
+ update_icon() //Health display for consoles with light and such.
playsound(src, 'sound/machines/medbayscanner1.ogg', 50) // Beepboop you're being scanned. <3
add_fingerprint(user)
/obj/machinery/bodyscanner/relaymove(mob/user as mob)
if(user.incapacitated())
- return 0 //maybe they should be able to get out with cuffs, but whatever
+ return FALSE //maybe they should be able to get out with cuffs, but whatever
go_out()
/obj/machinery/bodyscanner/verb/eject()
@@ -130,7 +128,7 @@
occupant.client.perspective = MOB_PERSPECTIVE
occupant.loc = src.loc
occupant = null
- update_icon() //icon_state = "body_scanner_1" //VOREStation Edit - Health display for consoles with light and such.
+ update_icon() //Health display for consoles with light and such.
return
/obj/machinery/bodyscanner/ex_act(severity)
@@ -171,7 +169,7 @@
var/delete
var/temphtml
name = "Body Scanner Console"
- icon = 'icons/obj/Cryogenic2_vr.dmi'
+ icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "scanner_terminal_off"
dir = 8
density = 1
@@ -204,9 +202,9 @@
var/obj/machinery/bodyscanner/C = P.connectable
scanner = C
C.console = src
- to_chat(user, " You link the [src] to the [P.connectable]!")
+ to_chat(user, SPAN_WARNING("You link the [src] to the [P.connectable]!"))
else
- to_chat(user, " You store the [src] in the [P]'s buffer!")
+ to_chat(user, SPAN_WARNING("You store the [src] in the [P]'s buffer!"))
P.connectable = src
return
else
@@ -224,7 +222,7 @@
icon_state = "body_scannerconsole-p"
stat |= NOPOWER
*/
- update_icon() //icon_state = "body_scanner_1" //VOREStation Edit - Health display for consoles with light and such.
+ update_icon() //Health display for consoles with light and such.
/obj/machinery/body_scanconsole/ex_act(severity)
switch(severity)
@@ -266,11 +264,11 @@
if(!scanner)
findscanner()
if(!scanner)
- to_chat(user, "Scanner not found!")
+ to_chat(user, SPAN_NOTICE("Scanner not found!"))
return
if (scanner.panel_open)
- to_chat(user, "Close the maintenance panel first.")
+ to_chat(user, SPAN_NOTICE("Close the maintenance panel first."))
return
if(scanner)
@@ -427,7 +425,7 @@
if (!(printing) && printing_text)
printing = 1
- visible_message("\The [src] rattles and prints out a sheet of paper.")
+ visible_message(SPAN_NOTICE("\The [src] rattles and prints out a sheet of paper."))
playsound(src, 'sound/machines/printer.ogg', 50, 1)
var/obj/item/paper/P = new /obj/item/paper(loc)
P.info = "
Body Scan - [href_list["name"]]
"
@@ -442,9 +440,9 @@
if(mirror != null)
var/obj/item/implant/mirror/E = mirror
E.post_implant(scanner.occupant)
- visible_message("Manual backup complete.")
+ visible_message(SPAN_NOTICE("Manual backup complete."))
else
- visible_message("No mirror detected!")
+ visible_message(SPAN_NOTICE("No mirror detected!"))
return
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 0a32496f624..889c7f8f585 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -605,7 +605,7 @@
/obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list())
if(aidisabled && isAI(user))
- to_chat(user, "AI control for \the [src] interface has been disabled.")
+ to_chat(user, SPAN_WARNING("AI control for \the [src] interface has been disabled."))
return UI_CLOSE
. = shorted ? UI_DISABLED : UI_INTERACTIVE
@@ -760,7 +760,6 @@
return 1
/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob)
- add_fingerprint(user)
if(alarm_deconstruction_screwdriver(user, W))
return
if(alarm_deconstruction_wirecutters(user, W))
@@ -773,9 +772,9 @@
else
if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN))
locked = !locked
- to_chat(user, "You [ locked ? "lock" : "unlock"] the Air Alarm interface.")
+ to_chat(user, SPAN_NOTICE("You [ locked ? "lock" : "unlock"] the Air Alarm interface."))
else
- to_chat(user, "Access denied.")
+ to_chat(user, SPAN_WARNING("Access denied."))
return
return ..()
@@ -784,9 +783,9 @@
if(user.Adjacent(src))
if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN))
locked = !locked
- to_chat(user, "You [ locked ? "lock" : "unlock"] the Air Alarm interface.")
+ to_chat(user, SPAN_NOTICE("You [ locked ? "lock" : "unlock"] the Air Alarm interface."))
else
- to_chat(user, "Access denied.")
+ to_chat(user, SPAN_WARNING("Access denied."))
/obj/machinery/alarm/power_change()
..()
@@ -881,7 +880,6 @@ FIRE ALARM
..()
/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob)
- add_fingerprint(user)
if(alarm_deconstruction_screwdriver(user, W))
return
@@ -892,9 +890,9 @@ FIRE ALARM
if(istype(W, /obj/item/multitool))
detecting = !(detecting)
if(detecting)
- user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.")
+ user.visible_message(SPAN_NOTICE("\The [user] has reconnected [src]'s detecting unit!"), SPAN_NOTICE("You have reconnected [src]'s detecting unit."))
else
- user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.")
+ user.visible_message(SPAN_NOTICE("\The [user] has disconnected [src]'s detecting unit!"), SPAN_NOTICE("You have disconnected [src]'s detecting unit."))
return
alarm()
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index 5b652739c30..e86d76190c8 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -24,7 +24,6 @@
/obj/machinery/computer/area_atmos/attack_hand(var/mob/user as mob)
if(..(user))
return
- src.add_fingerprint(usr)
var/dat = {"
@@ -95,7 +94,6 @@
if(..())
return
usr.set_machine(src)
- src.add_fingerprint(usr)
if(href_list["scan"])
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index d8bda4db45e..5f03ae1fcdd 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -287,9 +287,8 @@ update_flag
/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W as obj, var/mob/user as mob)
if(!W.is_wrench() && !istype(W, /obj/item/tank) && !istype(W, /obj/item/analyzer) && !istype(W, /obj/item/pda))
- visible_message("\The [user] hits \the [src] with \a [W]!")
+ visible_message(SPAN_WARNING("\The [user] hits \the [src] with \a [W]!"))
src.health -= W.force
- src.add_fingerprint(user)
healthcheck()
if(istype(user, /mob/living/silicon/robot) && istype(W, /obj/item/tank/jetpack))
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index c20fa34f5d3..8638e674716 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -54,7 +54,7 @@
update_recipe_list()
if(..() || (disabled && !panel_open))
- to_chat(user, "\The [src] is disabled!")
+ to_chat(user, SPAN_DANGER("\The [src] is disabled!"))
return
if(shocked)
@@ -122,7 +122,7 @@
/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(busy)
- to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.")
+ to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation."))
return
if(default_deconstruction_screwdriver(user, O))
@@ -200,7 +200,7 @@
mass_per_sheet += eating.matter[material]
if(!filltype)
- to_chat(user, "\The [src] is full. Please remove material from the autolathe in order to insert more.")
+ to_chat(user, SPAN_NOTICE("\The [src] is full. Please remove material from the autolathe in order to insert more."))
return
else if(filltype == 1)
to_chat(user, "You fill \the [src] to capacity with \the [eating].")
@@ -228,10 +228,9 @@
return
usr.set_machine(src)
- add_fingerprint(usr)
if(busy)
- to_chat(usr, "The autolathe is busy. Please wait for completion of previous operation.")
+ to_chat(usr, SPAN_NOTICE("The autolathe is busy. Please wait for completion of previous operation."))
return
else if(href_list["setfilter"])
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/beacon.dm
similarity index 100%
rename from code/game/machinery/Beacon.dm
rename to code/game/machinery/beacon.dm
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index 3115733de26..b45f91c0b2b 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -1,20 +1,59 @@
+// Use this define to register something as a creatable!
+// * n - The proper name of the purchasable
+// * o - The object type path of the purchasable to spawn
+// * r - The amount to dispense
+// * p - The price of the purchasable in biomass
+#define BIOGEN_ITEM(n, o, r, p) n = new /datum/data/biogenerator_item(n, o, r, p)
+
+// Use this define to register something as dispensable
+// * n - The proper name of the purchasable
+// * o - The reagent ID
+// * r - The amount of reagent to dispense
+// * p - The price of the purchasable in biomass
+#define BIOGEN_REAGENT(n, o, r, p) n = new /datum/data/biogenerator_reagent(n, o, r, p)
+
/obj/machinery/biogenerator
name = "biogenerator"
desc = "Converts plants into biomass, which can be used for fertilizer and sort-of-synthetic products."
icon = 'icons/obj/biogenerator.dmi'
- icon_state = "biogen-stand"
- density = 1
- anchored = 1
+ icon_state = "biogen"
+ base_icon_state = "biogen"
+ density = TRUE
+ anchored = TRUE
circuit = /obj/item/circuitboard/biogenerator
use_power = USE_POWER_IDLE
idle_power_usage = 40
- var/processing = 0
+ var/processing = FALSE //Are we currently processing?
var/obj/item/reagent_containers/glass/beaker = null
var/points = 0
- var/menustat = "menu"
var/build_eff = 1
var/eat_eff = 1
+ var/list/item_list
+
+/datum/data/biogenerator_item
+ var/equipment_path = null
+ var/equipment_amt = 1
+ var/cost = 0
+
+/datum/data/biogenerator_item/New(name, path, amt, cost)
+ src.name = name
+ src.equipment_path = path
+ src.equipment_amt = amt
+ src.cost = cost
+
+/datum/data/biogenerator_reagent
+ var/reagent_id = null
+ var/reagent_amt = 0
+ var/cost = 0
+
+/datum/data/biogenerator_reagent/New(name, id, amt, cost)
+ src.name = name
+ src.reagent_id = id
+ src.reagent_amt = amt
+ src.cost = cost
+
+
/obj/machinery/biogenerator/Initialize(mapload, newdir)
. = ..()
var/datum/reagents/R = new/datum/reagents(1000)
@@ -22,22 +61,150 @@
R.my_atom = src
beaker = new /obj/item/reagent_containers/glass/bottle(src)
- component_parts = list()
- component_parts += new /obj/item/stock_parts/matter_bin(src)
- component_parts += new /obj/item/stock_parts/manipulator(src)
+ default_apply_parts()
RefreshParts()
-/obj/machinery/biogenerator/on_reagent_change() //When the reagents change, change the icon as well.
+ item_list = list()
+ item_list["Food Items"] = list(
+ BIOGEN_REAGENT("10 milk", "milk", 10, 20),
+ BIOGEN_REAGENT("50 milk", "milk", 50, 95),
+ BIOGEN_REAGENT("10 Cream", "cream", 10, 30),
+ BIOGEN_REAGENT("50 Cream", "cream", 50, 120),
+ BIOGEN_ITEM("Slab of meat", /obj/item/reagent_containers/food/snacks/meat, 1, 50),
+ BIOGEN_ITEM("5 slabs of meat", /obj/item/reagent_containers/food/snacks/meat, 5, 250),
+ )
+ item_list["Cooking Ingredients"] = list(
+ BIOGEN_REAGENT("10 Universal Enzyme", "enzyme", 10, 30),
+ BIOGEN_REAGENT("50 Universal Enzyme", "enzyme", 50, 120),
+ BIOGEN_ITEM("Nutri-spread", /obj/item/reagent_containers/food/snacks/spreads, 1, 30),
+ BIOGEN_ITEM("5 nutri-spread", /obj/item/reagent_containers/food/snacks/spreads, 5, 120),
+ )
+ item_list["Gardening Nutrients"] = list(
+ BIOGEN_ITEM("E-Z-Nutrient", /obj/item/reagent_containers/glass/bottle/eznutrient, 1, 60),
+ BIOGEN_ITEM("5 E-Z-Nutrient", /obj/item/reagent_containers/glass/bottle/eznutrient, 5, 300),
+ BIOGEN_ITEM("Left 4 Zed", /obj/item/reagent_containers/glass/bottle/left4zed, 1, 120),
+ BIOGEN_ITEM("5 Left 4 Zed", /obj/item/reagent_containers/glass/bottle/left4zed, 5, 600),
+ BIOGEN_ITEM("Robust Harvest", /obj/item/reagent_containers/glass/bottle/robustharvest, 1, 150),
+ BIOGEN_ITEM("5 Robust Harvest", /obj/item/reagent_containers/glass/bottle/robustharvest, 5, 750),
+ )
+ item_list["Leather Products"] = list(
+ BIOGEN_ITEM("Wallet", /obj/item/storage/wallet, 1, 100),
+ BIOGEN_ITEM("Botanical gloves", /obj/item/clothing/gloves/botanic_leather, 1, 250),
+ BIOGEN_ITEM("Plant bag", /obj/item/storage/bag/plants, 1, 320),
+ BIOGEN_ITEM("Large plant bag", /obj/item/storage/bag/plants/large, 1, 640),
+ BIOGEN_ITEM("Utility belt", /obj/item/storage/belt/utility, 1, 300),
+ BIOGEN_ITEM("Leather Satchel", /obj/item/storage/backpack/satchel, 1, 400),
+ BIOGEN_ITEM("Cash Bag", /obj/item/storage/bag/cash, 1, 400),
+ BIOGEN_ITEM("Chemistry Bag", /obj/item/storage/bag/chemistry, 1, 400),
+ BIOGEN_ITEM("Workboots", /obj/item/clothing/shoes/boots/workboots, 1, 400),
+ BIOGEN_ITEM("Leather Chaps", /obj/item/clothing/under/pants/chaps, 1, 400),
+ BIOGEN_ITEM("Leather Coat", /obj/item/clothing/suit/leathercoat, 1, 500),
+ BIOGEN_ITEM("Leather Jacket", /obj/item/clothing/suit/storage/toggle/brown_jacket, 1, 500),
+ BIOGEN_ITEM("Winter Coat", /obj/item/clothing/suit/storage/hooded/wintercoat, 1, 500),
+ BIOGEN_ITEM("4 Algae Sheets", /obj/item/stack/material/algae, 4, 400),
+ )
+
+/obj/machinery/biogenerator/ui_static_data(mob/user)
+ var/list/static_data[0]
+
+ // Available items - in static data because we don't wanna compute this list every time! It hardly changes.
+ static_data["items"] = list()
+ for(var/cat in item_list)
+ var/list/cat_items = list()
+ for(var/prize_name in item_list[cat])
+ var/datum/data/biogenerator_reagent/prize = item_list[cat][prize_name]
+ cat_items[prize_name] = list("name" = prize_name, "price" = prize.cost, "reagent" = istype(prize))
+ static_data["items"][cat] = cat_items
+
+ return static_data
+
+/obj/machinery/biogenerator/ui_data(mob/user)
+ var/list/data = ..()
+
+ data["build_eff"] = build_eff
+ data["points"] = points
+ data["processing"] = processing
+ data["beaker"] = !!beaker
+
+ return data
+
+/obj/machinery/biogenerator/ui_interact(mob/user, datum/tgui/ui = null)
+ // Open the window
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Biogenerator", name)
+ ui.open()
+
+/obj/machinery/biogenerator/ui_act(action, params)
+ if(..())
+ return
+
+ . = TRUE
+ switch(action)
+ if("activate")
+ INVOKE_ASYNC(src, .proc/activate)
+ return TRUE
+ if("detach")
+ if(beaker)
+ beaker.forceMove(loc)
+ beaker = null
+ update_icon()
+ return TRUE
+ if("purchase")
+ var/category = params["cat"] // meow
+ var/name = params["name"]
+
+ if(!(category in item_list) || !(name in item_list[category])) // Not trying something that's not in the list, are you?
+ return
+
+ var/datum/data/biogenerator_item/bi = item_list[category][name]
+ if(!istype(bi))
+ var/datum/data/biogenerator_reagent/br = item_list[category][name]
+ if(!istype(br))
+ return
+ if(!beaker)
+ return
+ var/cost = round(br.cost / build_eff)
+ if(cost > points)
+ to_chat(usr, SPAN_DANGER("Insufficient biomass."))
+ return
+ var/amt_to_actually_dispense = round(min(beaker.reagents.get_free_space(), br.reagent_amt))
+ if(amt_to_actually_dispense <= 0)
+ to_chat(usr, SPAN_DANGER("The loaded beaker is full!"))
+ return
+ points -= (cost * (amt_to_actually_dispense / br.reagent_amt))
+ beaker.reagents.add_reagent(br.reagent_id, amt_to_actually_dispense)
+ playsound(src, 'sound/machines/reagent_dispense.ogg', 25, 1)
+ return
+
+ var/cost = round(bi.cost / build_eff)
+ if(cost > points)
+ to_chat(usr, SPAN_DANGER("Insufficient biomass."))
+ return
+
+ points -= cost
+ if(ispath(bi.equipment_path, /obj/item/stack))
+ var/obj/item/stack/S = new bi.equipment_path(loc)
+ S.amount = bi.equipment_amt
+ playsound(src, 'sound/machines/vending/vending_drop.ogg', 100, 1)
+ return TRUE
+
+ for(var/i in 1 to bi.equipment_amt)
+ new bi.equipment_path(loc)
+ playsound(src, 'sound/machines/vending/vending_drop.ogg', 100, 1)
+ return TRUE
+ else
+ return FALSE
+
+/obj/machinery/biogenerator/on_reagent_change() //When the reagents change, change the icon as well.
update_icon()
/obj/machinery/biogenerator/update_icon()
- if(!beaker)
- icon_state = "biogen-empty"
- else if(!processing)
- icon_state = "biogen-stand"
- else
- icon_state = "biogen-work"
- return
+ cut_overlays()
+ if(beaker)
+ add_overlay("[base_icon_state]-standby")
+ if(processing)
+ add_overlay("[base_icon_state]-work")
/obj/machinery/biogenerator/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(default_deconstruction_screwdriver(user, O))
@@ -50,106 +217,48 @@
return
if(istype(O, /obj/item/reagent_containers/glass))
if(beaker)
- to_chat(user, "\The [src] is already loaded.")
+ to_chat(user, SPAN_NOTICE("\The [src] is already loaded."))
else
user.remove_from_mob(O)
O.loc = src
- beaker = O
+ beaker = FALSE
updateUsrDialog()
else if(processing)
- to_chat(user, "\The [src] is currently processing.")
+ to_chat(user, SPAN_NOTICE("\The [src] is currently processing."))
else if(istype(O, /obj/item/storage/bag))
var/i = 0
for(var/obj/item/reagent_containers/food/snacks/grown/G in contents)
i++
if(i >= 10)
- to_chat(user, "\The [src] is already full! Activate it.")
+ to_chat(user, SPAN_NOTICE("\The [src] is already full! Activate it."))
else
for(var/obj/item/reagent_containers/food/snacks/grown/G in O.contents)
G.loc = src
i++
if(i >= 10)
- to_chat(user, "You fill \the [src] to its capacity.")
+ to_chat(user, SPAN_NOTICE("You fill \the [src] to its capacity."))
break
if(i < 10)
- to_chat(user, "You empty \the [O] into \the [src].")
+ to_chat(user, SPAN_NOTICE("You empty \the [O] into \the [src]."))
else if(!istype(O, /obj/item/reagent_containers/food/snacks/grown))
- to_chat(user, "You cannot put this in \the [src].")
+ to_chat(user, SPAN_NOTICE("You cannot put this in \the [src]."))
else
var/i = 0
for(var/obj/item/reagent_containers/food/snacks/grown/G in contents)
i++
if(i >= 10)
- to_chat(user, "\The [src] is full! Activate it.")
+ to_chat(user, SPAN_NOTICE("\The [src] is full! Activate it."))
else
user.remove_from_mob(O)
O.loc = src
- to_chat(user, "You put \the [O] in \the [src]")
+ to_chat(user, SPAN_NOTICE("You put \the [O] in \the [src]"))
update_icon()
return
-/obj/machinery/biogenerator/interact(mob/user as mob)
- if(stat & BROKEN)
- return
- user.set_machine(src)
- var/dat = "BiogeneratorBiogenerator:
"
- if(processing)
- dat += "Biogenerator is processing! Please wait..."
- else
- dat += "Biomass: [points] points.
"
- switch(menustat)
- if("menu")
- if(beaker)
- dat += "Activate Biogenerator!
"
- dat += "Detach Container
"
- dat += "Food:
"
- dat += "10 milk ([round(20/build_eff)]) | x5
"
- dat += "10 cream ([round(30/build_eff)]) | x5
"
- dat += "Slab of meat ([round(50/build_eff)]) | x5
"
- dat += "A dozen eggs ([round(80/build_eff)])
"
- dat += "Nutrient:
"
- dat += "E-Z-Nutrient ([round(60/build_eff)]) | x5
"
- dat += "Left 4 Zed ([round(120/build_eff)]) | x5
"
- dat += "Robust Harvest ([round(150/build_eff)]) | x5
"
- dat += "Universal Enzyme ([round(100/build_eff)]) | x5
"
- dat += "Leather:
"
- dat += "Leather Sheet ([round(20/build_eff)]) | x5
"
- dat += "Wallet ([round(100/build_eff)])
"
- dat += "Botanical gloves ([round(250/build_eff)])
"
- dat += "Plant bag ([round(320/build_eff)])
"
- dat += "Large plant bag ([round(640/build_eff)])
"
- dat += "Utility belt ([round(300/build_eff)])
"
- dat += "Leather Satchel ([round(400/build_eff)])
"
- dat += "Cash Bag ([round(400/build_eff)])
"
- dat += "Chemistry Bag ([round(400/build_eff)])
"
- dat += "Workboots ([round(400/build_eff)])
"
- dat += "Leather Shoes ([round(400/build_eff)])
"
- dat += "Leather Chaps ([round(400/build_eff)])
"
- dat += "Leather Coat ([round(500/build_eff)])
"
- dat += "Leather Jacket ([round(500/build_eff)])
"
- dat += "Winter Coat ([round(500/build_eff)])
"
- dat += "4 Algae Sheets ([round(400/build_eff)])
" //VOREStation Edit - Algae for oxygen generator
- //dat += "Other
"
- //dat += "Monkey (500)
"
- else
- dat += "
No beaker inside. Please insert a beaker.
"
- if("nopoints")
- dat += "You do not have biomass to create products.
Please, put growns into reactor and activate it.
"
- dat += "Return to menu"
- if("complete")
- dat += "Operation complete.
"
- dat += "Return to menu"
- if("void")
- dat += "Error: No growns inside.
Please, put growns into reactor.
"
- dat += "Return to menu"
- user << browse(dat, "window=biogenerator")
- onclose(user, "biogenerator")
- return
-
/obj/machinery/biogenerator/attack_hand(mob/user as mob)
- interact(user)
+ ui_interact(user)
/obj/machinery/biogenerator/proc/activate()
if(usr.stat)
@@ -157,7 +266,7 @@
if(stat) //NOPOWER etc
return
if(processing)
- to_chat(usr, "The biogenerator is in the process of working.")
+ to_chat(usr, SPAN_NOTICE("The biogenerator is in the process of working."))
return
var/S = 0
for(var/obj/item/reagent_containers/food/snacks/grown/I in contents)
@@ -167,147 +276,19 @@
else points += I.reagents.get_reagent_amount("nutriment") * 10 * eat_eff
qdel(I)
if(S)
- processing = 1
+ processing = TRUE
update_icon()
- updateUsrDialog()
playsound(src.loc, 'sound/machines/blender.ogg', 40, 1)
use_power(S * 30)
sleep((S + 15) / eat_eff)
- processing = 0
+ processing = FALSE
+ SStgui.update_uis(src)
playsound(src.loc, 'sound/machines/biogenerator_end.ogg', 40, 1)
update_icon()
else
- menustat = "void"
+ to_chat(usr, SPAN_WARNING("Error: No growns inside. Please insert growns."))
return
-/obj/machinery/biogenerator/proc/create_product(var/item, var/cost)
- cost = round(cost/build_eff)
- if(cost > points)
- menustat = "nopoints"
- return 0
- processing = 1
- update_icon()
- updateUsrDialog()
- points -= cost
- sleep(30)
- switch(item)
- if("milk")
- beaker.reagents.add_reagent("milk", 10)
- if("milk5")
- beaker.reagents.add_reagent("milk", 50)
- if("cream")
- beaker.reagents.add_reagent("cream", 10)
- if("cream5")
- beaker.reagents.add_reagent("cream", 50)
- if("meat")
- new/obj/item/reagent_containers/food/snacks/meat(loc)
- if("meat5")
- new/obj/item/reagent_containers/food/snacks/meat(loc) //This is ugly.
- new/obj/item/reagent_containers/food/snacks/meat(loc)
- new/obj/item/reagent_containers/food/snacks/meat(loc)
- new/obj/item/reagent_containers/food/snacks/meat(loc)
- new/obj/item/reagent_containers/food/snacks/meat(loc)
- if("eggbox")
- new/obj/item/storage/fancy/egg_box(loc)
- if("ez")
- new/obj/item/reagent_containers/glass/bottle/eznutrient(loc)
- if("l4z")
- new/obj/item/reagent_containers/glass/bottle/left4zed(loc)
- if("rh")
- new/obj/item/reagent_containers/glass/bottle/robustharvest(loc)
- if("ez5") //It's not an elegant method, but it's safe and easy. -Cheridan
- new/obj/item/reagent_containers/glass/bottle/eznutrient(loc)
- new/obj/item/reagent_containers/glass/bottle/eznutrient(loc)
- new/obj/item/reagent_containers/glass/bottle/eznutrient(loc)
- new/obj/item/reagent_containers/glass/bottle/eznutrient(loc)
- new/obj/item/reagent_containers/glass/bottle/eznutrient(loc)
- if("l4z5")
- new/obj/item/reagent_containers/glass/bottle/left4zed(loc)
- new/obj/item/reagent_containers/glass/bottle/left4zed(loc)
- new/obj/item/reagent_containers/glass/bottle/left4zed(loc)
- new/obj/item/reagent_containers/glass/bottle/left4zed(loc)
- new/obj/item/reagent_containers/glass/bottle/left4zed(loc)
- if("rh5")
- new/obj/item/reagent_containers/glass/bottle/robustharvest(loc)
- new/obj/item/reagent_containers/glass/bottle/robustharvest(loc)
- new/obj/item/reagent_containers/glass/bottle/robustharvest(loc)
- new/obj/item/reagent_containers/glass/bottle/robustharvest(loc)
- new/obj/item/reagent_containers/glass/bottle/robustharvest(loc)
- if("enzyme")
- new/obj/item/reagent_containers/food/condiment/enzyme(loc)
- if("enzyme5")
- new/obj/item/reagent_containers/food/condiment/enzyme(loc)
- new/obj/item/reagent_containers/food/condiment/enzyme(loc)
- new/obj/item/reagent_containers/food/condiment/enzyme(loc)
- new/obj/item/reagent_containers/food/condiment/enzyme(loc)
- new/obj/item/reagent_containers/food/condiment/enzyme(loc)
- if("leather_sheet")
- new/obj/item/stack/material/leather(loc)
- if("leather_sheet5")
- new/obj/item/stack/material/leather(loc)
- new/obj/item/stack/material/leather(loc)
- new/obj/item/stack/material/leather(loc)
- new/obj/item/stack/material/leather(loc)
- new/obj/item/stack/material/leather(loc)
- if("wallet")
- new/obj/item/storage/wallet(loc)
- if("gloves")
- new/obj/item/clothing/gloves/botanic_leather(loc)
- if("plantbag")
- new/obj/item/storage/bag/plants(loc)
- if("plantbaglarge")
- new/obj/item/storage/bag/plants/large(loc)
- if("tbelt")
- new/obj/item/storage/belt/utility(loc)
- if("satchel")
- new/obj/item/storage/backpack/satchel(loc)
- if("cashbag")
- new/obj/item/storage/bag/cash(loc)
- if("chembag")
- new/obj/item/storage/bag/chemistry(loc)
- if("monkey")
- new/mob/living/carbon/human/monkey(loc)
- if("workboots")
- new/obj/item/clothing/shoes/boots/workboots(loc)
- if("leathershoes")
- new/obj/item/clothing/shoes/laceup/brown(loc)
- if("leatherchaps")
- new/obj/item/clothing/under/pants/chaps
- if("leathercoat")
- new/obj/item/clothing/suit/leathercoat(loc)
- if("leatherjacket")
- new/obj/item/clothing/suit/storage/toggle/brown_jacket(loc)
- if("wintercoat")
- new/obj/item/clothing/suit/storage/hooded/wintercoat(loc)
- if("algae") //VOREStation Edit - Algae for oxygen generator
- var/obj/item/stack/material/algae/A = new(loc)
- A.amount = 4 //VOREStation Edit End
- processing = 0
- menustat = "complete"
- update_icon()
- return 1
-
-/obj/machinery/biogenerator/Topic(href, href_list)
- if(stat & BROKEN) return
- if(usr.stat || usr.restrained()) return
- if(!in_range(src, usr)) return
-
- usr.set_machine(src)
-
- switch(href_list["action"])
- if("activate")
- activate()
- if("detach")
- if(beaker)
- beaker.loc = src.loc
- beaker = null
- update_icon()
- if("create")
- create_product(href_list["item"], text2num(href_list["cost"]))
- if("menu")
- menustat = "menu"
- updateUsrDialog()
-
/obj/machinery/biogenerator/RefreshParts()
..()
var/man_rating = 0
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index c086448bb74..0ba8f2a5d85 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -19,14 +19,13 @@
break
/obj/machinery/computer/operating/attack_ai(mob/user)
- add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
nano_ui_interact(user)
/obj/machinery/computer/operating/attack_hand(mob/user)
- add_fingerprint(user)
+ ..()
if(stat & (BROKEN|NOPOWER))
return
nano_ui_interact(user)
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index beb62de66e8..f5939a19664 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -201,7 +201,6 @@
src.New()
emagged = 0
- src.add_fingerprint(usr)
SSnanoui.update_uis(src)
return
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 4902da90d6a..5bfc986f673 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -23,7 +23,7 @@
attack_hand(user)
/obj/machinery/computer/crew/attack_hand(mob/user)
- add_fingerprint(user)
+ ..()
if(stat & (BROKEN|NOPOWER))
return
ui_interact(user)
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index ba477532d49..e56bfb66210 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -74,7 +74,6 @@
dat += "
\nToggle Outer Door
"
dat += "
Close"
user << browse(dat, "window=computer;size=400x500")
- add_fingerprint(usr)
onclose(user, "computer")
return
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index ae8b8787e83..840702b1327 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -95,5 +95,4 @@
var/mob/living/carbon/R = I.imp_in
to_chat(R, "You hear a voice in your head saying: '[warning]'")
- src.add_fingerprint(usr)
src.updateUsrDialog()
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index a6dde9acd57..a5e6dfab5e0 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -179,7 +179,6 @@
return 0 // don't update UIs attached to this object
go_out()
- add_fingerprint(usr)
return 1 // update UIs attached to this object
/obj/machinery/atmospherics/unary/cryo_cell/attackby(var/obj/item/G as obj, var/mob/user as mob)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 879110fd667..060055d7788 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -11,7 +11,7 @@
/obj/machinery/computer/cryopod
name = "cryogenic oversight console"
desc = "An interface between crew and the cryogenic storage oversight systems."
- icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon
+ icon = 'icons/obj/Cryogenic2.dmi' //VOREStation Edit - New Icon
icon_state = "cellconsole"
circuit = /obj/item/circuitboard/cryopodcontrol
density = 0
@@ -80,9 +80,9 @@
/obj/machinery/computer/cryopod/attack_hand(mob/user = usr)
if(stat & (NOPOWER|BROKEN))
return
+ ..()
user.set_machine(src)
- add_fingerprint(usr)
var/dat
@@ -107,8 +107,6 @@
var/mob/user = usr
- add_fingerprint(user)
-
if(href_list["log"])
var/dat = "Recently stored [storage_type]
"
@@ -196,7 +194,7 @@
name = "cryogenic feed"
desc = "A bewildering tangle of machinery and pipes."
- icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon
+ icon = 'icons/obj/Cryogenic2.dmi' //VOREStation Edit - New Icon
icon_state = "cryo_rear"
anchored = 1
dir = WEST
@@ -205,7 +203,7 @@
/obj/machinery/cryopod
name = "cryogenic freezer"
desc = "A man-sized pod for entering suspended animation."
- icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon
+ icon = 'icons/obj/Cryogenic2.dmi' //VOREStation Edit - New Icon
icon_state = "cryopod_0" //VOREStation Edit - New Icon
density = 1
anchored = 1
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index 557159b6c31..7d2f57a4d46 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -38,7 +38,6 @@
if(..())
return
- add_fingerprint(user)
if(stat & (NOPOWER|BROKEN))
return
diff --git a/code/game/machinery/doorbell_vr.dm b/code/game/machinery/doorbell_vr.dm
index 0991953c46b..4d0539a4952 100644
--- a/code/game/machinery/doorbell_vr.dm
+++ b/code/game/machinery/doorbell_vr.dm
@@ -133,7 +133,7 @@
else if(panel_open && istype(W, /obj/item/multitool))
var/obj/item/multitool/M = W
M.connectable = src
- to_chat(user, "You save the data in \the [M]'s buffer.")
+ to_chat(user, SPAN_CAUTION("You save the data in \the [M]'s buffer."))
else if(W.is_wrench())
to_chat(user, "You start to unwrench \the [src].")
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 85b73fbce65..1406e5fb797 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1030,7 +1030,6 @@ About the new airlock wires panel:
if(istype(C, /obj/item/barrier_tape_roll))
return
- src.add_fingerprint(user)
if (attempt_vr(src,"attackby_vr",list(C, user))) return
if(istype(C, /mob/living))
..()
diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm
index 36799b80884..7fa66c4f7d6 100644
--- a/code/game/machinery/doors/airlock_control.dm
+++ b/code/game/machinery/doors/airlock_control.dm
@@ -261,7 +261,7 @@ obj/machinery/access_button/attackby(obj/item/I as obj, mob/user as mob)
..()
obj/machinery/access_button/attack_hand(mob/user)
- add_fingerprint(usr)
+ ..()
if(!allowed(user))
to_chat(user, "Access Denied")
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 097b8e9e7ad..2c9481934a8 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -123,7 +123,7 @@
// Description: If we are clicked with crowbar, wielded fire axe, or armblade, try to manually open the door.
// This only works on broken doors or doors without power. Also allows repair with Plasteel.
/obj/machinery/door/blast/attackby(obj/item/C as obj, mob/user as mob)
- src.add_fingerprint(user)
+ src.add_fingerprint(user, 0, C)
if(istype(C, /obj/item)) // For reasons unknown, sometimes C is actually not what it is advertised as, like a mob.
if(C.pry == 1 && (user.a_intent != INTENT_HARM || (stat & BROKEN))) // Can we pry it open with something, like a crowbar/fireaxe/lingblade?
if(istype(C,/obj/item/material/twohanded/fireaxe)) // Fireaxes need to be in both hands to pry.
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 0c06be0bfad..43607547922 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -211,7 +211,7 @@
..()
/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob)
- src.add_fingerprint(user)
+ src.add_fingerprint(user, 0, I)
if(istype(I))
if(attackby_vr(I, user)) //VOREStation begin: Fireproofing
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 4544f58df9a..0674eaef8ce 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -240,7 +240,7 @@
..()
/obj/machinery/door/firedoor/attackby(obj/item/C as obj, mob/user as mob)
- add_fingerprint(user)
+ add_fingerprint(user, 0, C)
if(istype(C, /obj/item/barrier_tape_roll))
return //Don't open the door if we're putting tape on it to tell people 'don't open the door'.
if(operating)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 8e2b0fd4035..5de975738ba 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -268,7 +268,7 @@
return
- src.add_fingerprint(user)
+ src.add_fingerprint(user, 0, I)
if (src.allowed(user))
if (src.density)
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 9ddf5ccbbc3..46d820e2689 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -36,12 +36,14 @@
//Don't want to render prison breaks impossible
/obj/machinery/flasher/attackby(obj/item/W as obj, mob/user as mob)
if(W.is_wirecutter())
- add_fingerprint(user)
+ add_fingerprint(user, 0, W)
disable = !disable
if(disable)
user.visible_message("[user] has disconnected the [src]'s flashbulb!", "You disconnect the [src]'s flashbulb!")
if(!disable)
user.visible_message("[user] has connected the [src]'s flashbulb!", "You connect the [src]'s flashbulb!")
+ else
+ ..()
//Let the AI trigger them directly.
/obj/machinery/flasher/attack_ai()
diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm
index 514911ce098..637326ea9d0 100644
--- a/code/game/machinery/holosign.dm
+++ b/code/game/machinery/holosign.dm
@@ -62,7 +62,6 @@
/obj/machinery/button/holosign/attack_hand(mob/user as mob)
if(..())
return
- add_fingerprint(user)
use_power(5)
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 55dce2d0140..4d9e54af13d 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -16,12 +16,10 @@
/obj/machinery/igniter/attack_hand(mob/user as mob)
if(..())
return
- add_fingerprint(user)
use_power(50)
on = !(on)
icon_state = text("igniter[]", on)
- return
/obj/machinery/igniter/process(delta_time) //ugh why is this even in process()?
if(on && !(stat & NOPOWER))
@@ -81,6 +79,8 @@
icon_state = "[base_state]"
else
icon_state = "[base_state]-p"
+ else
+ ..()
/obj/machinery/sparker/attack_ai()
if(anchored)
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 7ec6d4f0b4d..4491667b9f0 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -145,8 +145,6 @@
updateDialog()
/obj/machinery/media/jukebox/attackby(obj/item/W as obj, mob/user as mob)
- src.add_fingerprint(user)
-
if(default_deconstruction_screwdriver(user, W))
return
if(default_deconstruction_crowbar(user, W))
@@ -156,6 +154,7 @@
if(istype(W, /obj/item/multitool))
return wires.Interact(user)
if(W.is_wrench())
+ add_fingerprint(user)
if(playing)
StopPlaying()
user.visible_message("[user] has [anchored ? "un" : ""]secured \the [src].", "You [anchored ? "un" : ""]secure \the [src].")
@@ -311,13 +310,12 @@
qdel(src)
/obj/machinery/media/jukebox/attackby(obj/item/W as obj, mob/user as mob)
- src.add_fingerprint(user)
-
if(default_deconstruction_screwdriver(user, W))
return
if(default_deconstruction_crowbar(user, W))
return
if(W.is_wrench())
+ add_fingerprint(user)
if(playing)
StopPlaying()
user.visible_message("[user] has [anchored ? "un" : ""]secured \the [src].", "You [anchored ? "un" : ""]secure \the [src].")
diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm
index 0fb82eef88c..83caeb87839 100644
--- a/code/game/machinery/magnet.dm
+++ b/code/game/machinery/magnet.dm
@@ -266,10 +266,11 @@
onclose(user, "magnet")
/obj/machinery/magnetic_controller/Topic(href, href_list)
+ if(..())
+ return TRUE
if(stat & (BROKEN|NOPOWER))
return
usr.set_machine(src)
- add_fingerprint(usr)
if(href_list["radio-op"])
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 7514062ef1c..9d72ca5d325 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -48,7 +48,6 @@
usr.unset_machine(src)
return
usr.set_machine(src)
- src.add_fingerprint(usr)
if(href_list["setlayer"])
var/new_pipe_layer = text2num(href_list["setlayer"])
if(isnum(new_pipe_layer))
@@ -63,7 +62,6 @@
var/pi_type = initial(p_type.construction_type)
var/obj/item/pipe/P = new pi_type(src.loc, p_type, p_dir)
P.setPipingLayer(p_layer)
- P.add_fingerprint(usr)
wait = 1
spawn(10)
wait = 0
@@ -76,13 +74,14 @@
return
/obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob)
- src.add_fingerprint(usr)
if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter))
to_chat(usr, "You put [W] back to [src].")
user.drop_item()
+ add_fingerprint(usr)
qdel(W)
return
else if(W.is_wrench())
+ add_fingerprint(usr)
if (unwrenched==0)
playsound(src, W.usesound, 50, 1)
to_chat(user, "You begin to unfasten \the [src] from the floor...")
@@ -166,7 +165,6 @@ Nah
var/psub = (href_list["sort"] ? text2num(href_list["sort"]) : 0)
var/obj/structure/disposalconstruct/C = new (src.loc, ptype, pdir, 0, psub)
- C.add_fingerprint(usr)
C.update()
wait = 1
spawn(15)
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index e8a0334235f..67b498074d5 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -106,7 +106,10 @@
return
/obj/machinery/recharger/attack_hand(mob/user as mob)
- add_fingerprint(user)
+ if(istype(user,/mob/living/silicon))
+ return
+
+ ..()
if(charging)
user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].")
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index 62acdf0c7ab..01b1116cedc 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -134,9 +134,9 @@ var/list/obj/machinery/requests_console/allConsoles = list()
ui.open()
/obj/machinery/requests_console/Topic(href, href_list)
- if(..()) return
+ if(..())
+ return
usr.set_machine(src)
- add_fingerprint(usr)
if(reject_bad_text(href_list["write"]))
recipient = href_list["write"] //write contains the string of the receiving department's name
diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm
index 0c9ec5753f9..14643dc4407 100644
--- a/code/game/machinery/robot_fabricator.dm
+++ b/code/game/machinery/robot_fabricator.dm
@@ -65,7 +65,6 @@ Please wait until completion...
return
usr.set_machine(src)
- add_fingerprint(usr)
if(href_list["make"])
if(!operating)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index f04b7ca361b..c4c5336403d 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -83,7 +83,7 @@
return
/obj/machinery/space_heater/attack_hand(mob/user as mob)
- add_fingerprint(user)
+ ..()
interact(user)
/obj/machinery/space_heater/interact(mob/user as mob)
diff --git a/code/game/machinery/suit_storage/suit_storage_unit.dm b/code/game/machinery/suit_storage/suit_storage_unit.dm
index 51061f77ee3..7a2939edacd 100644
--- a/code/game/machinery/suit_storage/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage/suit_storage_unit.dm
@@ -169,9 +169,6 @@
. = TRUE
update_icon()
- add_fingerprint(usr)
-
-
/obj/machinery/suit_storage_unit/proc/toggleUV(mob/user as mob)
// var/protected = 0
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index 932957b46bb..1048a740421 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -76,8 +76,6 @@
if(..())
return TRUE
- add_fingerprint(usr)
-
switch(action)
if("view")
for(var/obj/machinery/telecomms/T in servers)
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 577a9d38cc9..b28ef7e73d4 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -370,8 +370,6 @@
if(Options_Act(action, params))
. = TRUE
- add_fingerprint(usr)
-
/obj/machinery/telecomms/proc/canAccess(var/mob/user)
if(issilicon(user) || in_range(user, src))
return 1
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index e3bd3d8d139..53765ca99d5 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -65,8 +65,6 @@
if(..())
return TRUE
- add_fingerprint(usr)
-
switch(action)
if("view")
for(var/obj/machinery/telecomms/T in machinelist)
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index 7361b2a0997..17205188581 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -123,8 +123,6 @@
if(..())
return
-
- add_fingerprint(usr)
usr.set_machine(src)
if(!src.allowed(usr) && !emagged)
to_chat(usr, "ACCESS DENIED.")
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
deleted file mode 100644
index 7586b11d727..00000000000
--- a/code/game/machinery/teleporter.dm
+++ /dev/null
@@ -1,410 +0,0 @@
-/obj/machinery/computer/teleporter
- name = "teleporter control console"
- desc = "Used to control a linked teleportation Hub and Station."
- icon_keyboard = "teleport_key"
- icon_screen = "teleport"
- circuit = /obj/item/circuitboard/teleporter
- dir = 4
- var/obj/item/locked = null
- var/id = null
- var/one_time_use = 0 //Used for one-time-use teleport cards (such as clown planet coordinates.)
- //Setting this to 1 will set locked to null after a player enters the portal and will not allow hand-teles to open portals to that location.
-
-/obj/machinery/computer/teleporter/Initialize(mapload)
- id = "[rand(1000, 9999)]"
- underlays.Cut()
- underlays += image('icons/obj/stationobjs_vr.dmi', icon_state = "telecomp-wires") //VOREStation Edit: different direction for wires to account for dirs
- . = ..()
- var/obj/machinery/teleport/station/station
- var/obj/machinery/teleport/hub/hub
-
- // Search surrounding turfs for the station, and then search the station's surrounding turfs for the hub.
- for(var/direction in GLOB.cardinal)
- station = locate(/obj/machinery/teleport/station, get_step(src, direction))
- if(station)
- for(direction in GLOB.cardinal)
- hub = locate(/obj/machinery/teleport/hub, get_step(station, direction))
- if(hub)
- break
- break
-
- if(istype(station))
- station.com = hub
-
- if(istype(hub))
- hub.com = src
-
-/obj/machinery/computer/teleporter/attackby(I as obj, mob/living/user as mob)
- if(istype(I, /obj/item/card/data/))
- var/obj/item/card/data/C = I
- if(stat & (NOPOWER|BROKEN) & (C.function != "teleporter"))
- attack_hand()
-
- var/obj/L = null
-
- for(var/obj/effect/landmark/sloc in GLOB.landmarks_list)
- if(sloc.name != C.data) continue
- if(locate(/mob/living) in sloc.loc) continue
- L = sloc
- break
-
- if(!L)
- L = locate("landmark*[C.data]") // use old stype
-
- if(istype(L, /obj/effect/landmark/) && istype(L.loc, /turf))
- to_chat(usr, "You insert the coordinates into the machine.")
- to_chat(usr, "A message flashes across the screen, reminding the user that the nuclear authentication disk is not transportable via insecure means.")
- user.drop_item()
- qdel(I)
-
- if(C.data == "Clown Land")
- //whoops
- for(var/mob/O in hearers(src, null))
- O.show_message("Incoming bluespace portal detected, unable to lock in.", 2)
-
- for(var/obj/machinery/teleport/hub/H in range(1))
- var/amount = rand(2,5)
- for(var/i=0;iLocked In", 2)
- locked = L
- one_time_use = 1
-
- add_fingerprint(usr)
- else
- ..()
-
- return
-
-/obj/machinery/teleport/station/attack_ai()
- attack_hand()
-
-/obj/machinery/computer/teleporter/attack_hand(user as mob)
- if(..()) return
-
- /* Ghosts can't use this one because it's a direct selection */
- if(istype(user, /mob/observer/dead)) return
-
- var/list/L = list()
- var/list/areaindex = list()
-
- for(var/obj/item/radio/beacon/R in GLOB.all_beacons)
- var/turf/T = get_turf(R)
- if(!T)
- continue
- if(!(T.z in GLOB.using_map.player_levels))
- continue
- var/tmpname = T.loc.name
- if(areaindex[tmpname])
- tmpname = "[tmpname] ([++areaindex[tmpname]])"
- else
- areaindex[tmpname] = 1
- L[tmpname] = R
-
- for (var/obj/item/implant/tracking/I in GLOB.all_tracking_implants)
- if(!I.implanted || !ismob(I.loc))
- continue
- else
- var/mob/M = I.loc
- if(M.stat == 2)
- if(M.timeofdeath + 6000 < world.time)
- continue
- var/turf/T = get_turf(M)
- if(T) continue
- if(T.z == 2) continue
- var/tmpname = M.real_name
- if(areaindex[tmpname])
- tmpname = "[tmpname] ([++areaindex[tmpname]])"
- else
- areaindex[tmpname] = 1
- L[tmpname] = I
-
- var/desc = input("Please select a location to lock in.", "Locking Computer") in L|null
- if(!desc)
- return
- if(get_dist(src, usr) > 1 && !issilicon(usr))
- return
-
- locked = L[desc]
- for(var/mob/O in hearers(src, null))
- O.show_message("Locked In", 2)
- add_fingerprint(usr)
- return
-
-/obj/machinery/computer/teleporter/verb/set_id(t as text)
- set category = "Object"
- set name = "Set teleporter ID"
- set src in oview(1)
- set desc = "ID Tag:"
-
- if(stat & (NOPOWER|BROKEN) || !istype(usr,/mob/living))
- return
- if(t)
- id = t
- return
-
-/proc/find_loc(obj/R as obj)
- if(!R) return null
- var/turf/T = R.loc
- while(!istype(T, /turf))
- T = T.loc
- if(!T || istype(T, /area)) return null
- return T
-
-/obj/machinery/teleport
- name = "teleport"
- icon = 'icons/obj/stationobjs.dmi'
- density = 1
- anchored = 1.0
- var/lockeddown = 0
-
-/obj/machinery/teleport/hub
- name = "teleporter hub"
- desc = "It's the hub of a teleporting machine."
- icon_state = "tele0"
- dir = 4
- var/accurate = 0
- use_power = USE_POWER_IDLE
- idle_power_usage = 10
- active_power_usage = 2000
- circuit = /obj/item/circuitboard/teleporter_hub
- var/obj/machinery/computer/teleporter/com
-
-/obj/machinery/teleport/hub/Initialize(mapload)
- . = ..()
- underlays.Cut()
- underlays += image('icons/obj/stationobjs.dmi', icon_state = "tele-wires")
-
- component_parts = list()
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stock_parts/micro_laser(src)
- component_parts += new /obj/item/stock_parts/micro_laser(src)
- component_parts += new /obj/item/stock_parts/micro_laser(src)
- component_parts += new /obj/item/stock_parts/micro_laser(src)
- component_parts += new /obj/item/stack/cable_coil(src, 10)
- RefreshParts()
-
-/obj/machinery/teleport/hub/Bumped(M as mob|obj)
- spawn()
- if(icon_state == "tele1")
- teleport(M)
- use_power(5000)
- return
-
-/obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj)
- if(!com)
- return
- if(!com.locked)
- for(var/mob/O in hearers(src, null))
- O.show_message("Failure: Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.")
- return
- if(istype(M, /atom/movable))
- if(prob(5) && !accurate) //oh dear a problem, put em in deep space
- do_teleport(M, locate(rand((2*TRANSITIONEDGE), world.maxx - (2*TRANSITIONEDGE)), rand((2*TRANSITIONEDGE), world.maxy - (2*TRANSITIONEDGE)), 3), 2)
- else
- do_teleport(M, com.locked) //dead-on precision
-
- if(com.one_time_use) //Make one-time-use cards only usable one time!
- com.one_time_use = 0
- com.locked = null
- else
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, src)
- s.start()
- accurate = 1
- spawn(3000) accurate = 0 //Accurate teleporting for 5 minutes
- for(var/mob/B in hearers(src, null))
- B.show_message("Test fire completed.")
- return
-/*
-/proc/do_teleport(atom/movable/M as mob|obj, atom/destination, precision)
- if(istype(M, /obj/effect))
- qdel(M)
- return
- if(istype(M, /obj/item/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite
- for(var/mob/O in viewers(M, null))
- O.show_message(text("The [] bounces off of the portal!", M.name), 1)
- return
- if(istype(M, /mob/living))
- var/mob/living/MM = M
- if(MM.check_contents_for(/obj/item/disk/nuclear))
- to_chat(MM, "Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.")
- return
- var/disky = 0
- for (var/atom/O in M.contents) //I'm pretty sure this accounts for the maximum amount of container in container stacking. --NeoFite
- if(istype(O, /obj/item/storage) || istype(O, /obj/item/gift))
- for (var/obj/OO in O.contents)
- if(istype(OO, /obj/item/storage) || istype(OO, /obj/item/gift))
- for (var/obj/OOO in OO.contents)
- if(istype(OOO, /obj/item/disk/nuclear))
- disky = 1
- if(istype(OO, /obj/item/disk/nuclear))
- disky = 1
- if(istype(O, /obj/item/disk/nuclear))
- disky = 1
- if(istype(O, /mob/living))
- var/mob/living/MM = O
- if(MM.check_contents_for(/obj/item/disk/nuclear))
- disky = 1
- if(disky)
- for(var/mob/P in viewers(M, null))
- P.show_message(text("The [] bounces off of the portal!", M.name), 1)
- return
-
-//Bags of Holding cause bluespace teleportation to go funky. --NeoFite
- if(istype(M, /mob/living))
- var/mob/living/MM = M
- if(MM.check_contents_for(/obj/item/storage/backpack/holding))
- to_chat(MM, "The Bluespace interface on your Bag of Holding interferes with the teleport!")
- precision = rand(1,100)
- if(istype(M, /obj/item/storage/backpack/holding))
- precision = rand(1,100)
- for (var/atom/O in M.contents) //I'm pretty sure this accounts for the maximum amount of container in container stacking. --NeoFite
- if(istype(O, /obj/item/storage) || istype(O, /obj/item/gift))
- for (var/obj/OO in O.contents)
- if(istype(OO, /obj/item/storage) || istype(OO, /obj/item/gift))
- for (var/obj/OOO in OO.contents)
- if(istype(OOO, /obj/item/storage/backpack/holding))
- precision = rand(1,100)
- if(istype(OO, /obj/item/storage/backpack/holding))
- precision = rand(1,100)
- if(istype(O, /obj/item/storage/backpack/holding))
- precision = rand(1,100)
- if(istype(O, /mob/living))
- var/mob/living/MM = O
- if(MM.check_contents_for(/obj/item/storage/backpack/holding))
- precision = rand(1,100)
-
- var/turf/destturf = get_turf(destination)
-
- var/tx = destturf.x + rand(precision * -1, precision)
- var/ty = destturf.y + rand(precision * -1, precision)
-
- var/tmploc
-
- if(ismob(destination.loc)) //If this is an implant.
- tmploc = locate(tx, ty, destturf.z)
- else
- tmploc = locate(tx, ty, destination.z)
-
- if(tx == destturf.x && ty == destturf.y && (istype(destination.loc, /obj/structure/closet) || istype(destination.loc, /obj/structure/closet/secure_closet)))
- tmploc = destination.loc
-
- if(tmploc==null)
- return
-
- M.loc = tmploc
- sleep(2)
-
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, M)
- s.start()
- return
-*/
-
-/obj/machinery/teleport/station
- name = "station"
- desc = "It's the station thingy of a teleport thingy." //seriously, wtf.
- icon_state = "controller"
- dir = 4
- var/active = 0
- var/engaged = 0
- use_power = USE_POWER_IDLE
- idle_power_usage = 10
- active_power_usage = 2000
- circuit = /obj/item/circuitboard/teleporter_station
- var/obj/machinery/teleport/hub/com
-
-/obj/machinery/teleport/station/Initialize(mapload)
- . = ..()
- overlays.Cut()
- overlays += image('icons/obj/stationobjs.dmi', icon_state = "controller-wires")
-
- component_parts = list()
- component_parts += new /obj/item/stock_parts/console_screen(src)
- component_parts += new /obj/item/stock_parts/capacitor(src)
- component_parts += new /obj/item/stock_parts/capacitor(src)
- component_parts += new /obj/item/stack/cable_coil(src, 10)
- RefreshParts()
-
-/obj/machinery/teleport/station/attackby(var/obj/item/W)
- attack_hand()
-
-/obj/machinery/teleport/station/attack_ai()
- attack_hand()
-
-/obj/machinery/teleport/station/attack_hand()
- if(engaged)
- disengage()
- else
- engage()
-
-/obj/machinery/teleport/station/proc/engage()
- if(stat & (BROKEN|NOPOWER))
- return
-
- if(com)
- com.icon_state = "tele1"
- use_power(5000)
- update_use_power(USE_POWER_ACTIVE)
- com.update_use_power(USE_POWER_ACTIVE)
- for(var/mob/O in hearers(src, null))
- O.show_message("Teleporter engaged!", 2)
- add_fingerprint(usr)
- engaged = 1
- return
-
-/obj/machinery/teleport/station/proc/disengage()
- if(stat & (BROKEN|NOPOWER))
- return
-
- if(com)
- com.icon_state = "tele0"
- com.accurate = 0
- com.update_use_power(USE_POWER_IDLE)
- update_use_power(USE_POWER_IDLE)
- for(var/mob/O in hearers(src, null))
- O.show_message("Teleporter disengaged!", 2)
- add_fingerprint(usr)
- engaged = 0
- return
-
-/obj/machinery/teleport/station/verb/testfire()
- set name = "Test Fire Teleporter"
- set category = "Object"
- set src in oview(1)
-
- if(stat & (BROKEN|NOPOWER) || !istype(usr,/mob/living))
- return
-
- if(com && !active)
- active = 1
- for(var/mob/O in hearers(src, null))
- O.show_message("Test firing!", 2)
- com.teleport()
- use_power(5000)
-
- spawn(30)
- active=0
-
- add_fingerprint(usr)
- return
-
-/obj/machinery/teleport/station/power_change()
- ..()
- if(stat & NOPOWER)
- icon_state = "controller-p"
-
- if(com)
- com.icon_state = "tele0"
- else
- icon_state = "controller"
-
-/atom/proc/laserhit(L as obj)
- return 1
diff --git a/code/game/machinery/teleporter/console.dm b/code/game/machinery/teleporter/console.dm
new file mode 100644
index 00000000000..ce29239acff
--- /dev/null
+++ b/code/game/machinery/teleporter/console.dm
@@ -0,0 +1,196 @@
+/obj/machinery/computer/teleporter
+ name = "Teleporter Control Console"
+ desc = "Used to control a linked teleportation hub and station."
+ icon_keyboard = "teleport_key"
+ icon_screen = "teleport"
+
+ var/obj/machinery/tele_projector/projector
+ var/obj/machinery/tele_pad/pad
+ var/atom/target
+ var/active
+ var/id
+
+
+/obj/machinery/computer/teleporter/Destroy()
+ clear_target()
+ if(projector)
+ projector.lost_computer()
+ clear_projector()
+ if(pad)
+ pad.lost_computer()
+ clear_pad()
+ . = ..()
+
+
+/obj/machinery/computer/teleporter/Initialize(mapload)
+ . = ..()
+ underlays.Cut()
+ underlays += image('icons/obj/stationobjs.dmi', icon_state = "telecomp-wires")
+ id = "[random_id(/obj/machinery/computer/teleporter, 1000, 9999)]"
+ update_refs()
+
+
+/obj/machinery/computer/teleporter/proc/update_refs()
+ for(var/dir in GLOB.cardinal)
+ projector = locate() in get_step(src, dir)
+ if(projector)
+ break
+ if(projector)
+ var/pad_dir
+ for(var/dir in GLOB.cardinal)
+ pad = locate() in get_step(projector, dir)
+ if(pad)
+ pad_dir = dir
+ break
+ if(pad)
+ projector.set_computer(src)
+ projector.setDir(pad_dir)
+ pad.set_computer(src)
+ projector.update_icon()
+ pad.update_icon()
+
+
+/obj/machinery/computer/teleporter/proc/clear_projector()
+ if(!projector)
+ return
+ UnregisterSignal(projector, COMSIG_PARENT_QDELETING)
+ //GLOB.destroyed_event.unregister(projector, src, /obj/machinery/computer/teleporter/proc/lost_projector)
+ projector = null
+ set_active(FALSE)
+
+
+/obj/machinery/computer/teleporter/proc/lost_projector()
+ audible_message(SPAN_WARNING("\The [src] buzzes, \"Projector missing.\""))
+ clear_projector()
+
+
+/obj/machinery/computer/teleporter/proc/set_projector(obj/machinery/tele_projector/_projector)
+ if(projector == _projector)
+ return
+ clear_projector()
+ projector = _projector
+ RegisterSignal(projector, COMSIG_PARENT_QDELETING, .proc/lost_projector)
+ //GLOB.destroyed_event.register(projector, src, /obj/machinery/computer/teleporter/proc/lost_projector)
+
+
+/obj/machinery/computer/teleporter/proc/clear_pad()
+ if(!pad)
+ return
+ UnregisterSignal(pad, COMSIG_PARENT_QDELETING)
+ //GLOB.destroyed_event.unregister(pad, src, /obj/machinery/computer/teleporter/proc/lost_pad)
+ pad = null
+ set_active(FALSE)
+
+
+/obj/machinery/computer/teleporter/proc/lost_pad()
+ audible_message(SPAN_WARNING("\The [src] buzzes, \"Pad missing.\""))
+ clear_pad()
+
+
+/obj/machinery/computer/teleporter/proc/set_pad(obj/machinery/tele_pad/_pad)
+ if(pad == _pad)
+ return
+ clear_pad()
+ pad = _pad
+ RegisterSignal(projector, COMSIG_PARENT_QDELETING, .proc/lost_pad)
+ //GLOB.destroyed_event.register(pad, src, /obj/machinery/computer/teleporter/proc/lost_pad)
+
+
+/obj/machinery/computer/teleporter/proc/clear_target()
+ if(!target)
+ return
+ UnregisterSignal(target, COMSIG_PARENT_QDELETING)
+ //GLOB.destroyed_event.unregister(target, src, /obj/machinery/computer/teleporter/proc/lost_target)
+ target = null
+ set_active(FALSE)
+
+
+/obj/machinery/computer/teleporter/proc/lost_target()
+ audible_message(SPAN_WARNING("\The [src] buzzes, \"Target lost.\""))
+ clear_target()
+
+
+/obj/machinery/computer/teleporter/proc/set_target(atom/_target)
+ if(target == _target)
+ return
+ clear_target()
+ target = _target
+ RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/lost_target)
+ //GLOB.destroyed_event.register(target, src, /obj/machinery/computer/teleporter/proc/lost_target)
+
+
+/obj/machinery/computer/teleporter/proc/set_active(_active, notify)
+ var/effective = _active && target && projector && pad
+ if(active == effective)
+ return
+ active = effective
+ if(notify && effective)
+ if(active)
+ visible_message(SPAN_NOTICE("The teleporter sparks and hums to life."))
+ else
+ visible_message(SPAN_WARNING("The teleporter sputters and fails."))
+ if(projector)
+ projector.update_icon()
+ if(pad)
+ pad.update_icon()
+
+
+/obj/machinery/computer/teleporter/proc/get_targets()
+ var/list/ids = list()
+ var/list/result = list()
+ for(var/obj/item/radio/beacon/B)
+ if(QDELETED(B) || !B.functioning || !isPlayerLevel(B.z))
+ continue
+ var/area/A = get_area(B)
+ if(!A)
+ continue
+ result["[A.name] \[[++ids[A]]\]"] = B
+ for(var/obj/item/implant/tracking/T)
+ if(QDELETED(T) || !T.implanted || !ismob(T.loc))
+ continue
+ var/mob/M = T.loc
+ if(M.stat == DEAD && world.time > M.timeofdeath + 15 MINUTES)
+ continue
+ if(!isPlayerLevel(M.z))
+ continue
+ result["[M.name] \[[++ids[M]]\]"] = T
+ return result
+
+
+/obj/machinery/computer/teleporter/power_change()
+ . = ..()
+ if(!.)
+ return
+ if(stat & NOPOWER)
+ clear_target()
+
+
+/obj/machinery/computer/teleporter/nano_ui_interact(mob/user)
+ . = ..()
+ if(!projector || !pad)
+ var/data_search = alert(user, "Projector or Pad missing. Search?", "Teleporter", "Yes", "No")
+ if(isnull(data_search) || !CanDefaultInteract(usr))
+ return TRUE
+ if(data_search == "Yes")
+ update_refs()
+ return TRUE
+ var/message = "Teleporter [!target ? "Idle" : !active ? "Locked" : "Engaged"]\n[!target ? "" : "\[[get_area(target)]\]"]"
+ var/btn_active = active ? "Shut Down" : target ? "Start Up" : "-"
+ var/btn_target = active ? "-" : "Set Target"
+ var/data_action = alert(user, message, "Teleporter", btn_active, "Cancel", btn_target)
+ if(isnull(data_action) || !CanDefaultInteract(user))
+ return TRUE
+ switch (data_action)
+ if("-", "Cancel")
+ return
+ if("Shut Down")
+ set_active(FALSE, TRUE)
+ if("Start Up")
+ set_active(TRUE, TRUE)
+ if("Set Target")
+ var/list/targets = get_targets()
+ var/data_target = input(user, "Select Target", "Teleporter") in null | targets
+ if(isnull(data_target) || !CanDefaultInteract(user))
+ return TRUE
+ audible_message(SPAN_NOTICE("\The [src] hums, \"Target updated.\""))
+ set_target(targets[data_target])
diff --git a/code/game/machinery/teleporter/old_teleporter.dm b/code/game/machinery/teleporter/old_teleporter.dm
new file mode 100644
index 00000000000..e87be36a92b
--- /dev/null
+++ b/code/game/machinery/teleporter/old_teleporter.dm
@@ -0,0 +1,316 @@
+//Keeping this temporarily incase I forgot to add something.
+
+/obj/machinery/computer/teleporter
+ name = "teleporter control console"
+ desc = "Used to control a linked teleportation Hub and Station."
+ icon_keyboard = "teleport_key"
+ icon_screen = "teleport"
+ circuit = /obj/item/circuitboard/teleporter
+ dir = 4
+ var/obj/machinery/teleport/station/station = null
+ var/obj/machinery/teleport/hub/hub = null
+ var/obj/item/locked = null
+ var/id = null
+ var/one_time_use = 0 //Used for one-time-use teleport cards (such as clown planet coordinates.)
+ //Setting this to 1 will set locked to null after a player enters the portal and will not allow hand-teles to open portals to that location.
+
+/obj/machinery/computer/teleporter/Initialize(mapload)
+ id = "[rand(1000, 9999)]"
+ . = ..()
+
+ // Search surrounding turfs for the station, and then search the station's surrounding turfs for the hub.
+ for(var/direction in GLOB.cardinal)
+ station = locate(/obj/machinery/tele_projector, get_step(src, direction))
+ if(station)
+ for(direction in GLOB.cardinal)
+ hub = locate(/obj/machinery/tele_pad, get_step(station, direction))
+ if(hub)
+ break
+ break
+
+ if(istype(station))
+ station.com = hub
+ station.setDir(dir)
+
+ if(istype(hub))
+ hub.com = src
+ hub.setDir(dir)
+
+/obj/machinery/computer/teleporter/examine(mob/user)
+ . = ..()
+ if(locked)
+ var/turf/T = get_turf(locked)
+ to_chat(user, SPAN_NOTICE("The console is locked on to \[[T.loc.name]\]."))
+
+
+/obj/machinery/computer/teleporter/attackby(I as obj, mob/living/user as mob)
+ if(istype(I, /obj/item/card/data/))
+ var/obj/item/card/data/C = I
+ if(stat & (NOPOWER|BROKEN) & (C.function != "teleporter"))
+ attack_hand()
+
+ var/obj/L = null
+
+ for(var/obj/effect/landmark/sloc in GLOB.landmarks_list)
+ if(sloc.name != C.data) continue
+ if(locate(/mob/living) in sloc.loc) continue
+ L = sloc
+ break
+
+ if(!L)
+ L = locate("landmark*[C.data]") // use old stype
+
+ if(istype(L, /obj/effect/landmark/) && istype(L.loc, /turf))
+ to_chat(usr, "You insert the coordinates into the machine.")
+ to_chat(usr, "A message flashes across the screen, reminding the user that the nuclear authentication disk is not transportable via insecure means.")
+ user.drop_item()
+ qdel(I)
+
+ if(C.data == "Clown Land")
+ //whoops
+ for(var/mob/O in hearers(src, null))
+ O.show_message("Incoming bluespace portal detected, unable to lock in.", 2)
+
+ for(var/obj/machinery/teleport/hub/H in range(1))
+ var/amount = rand(2,5)
+ for(var/i=0;i 1 && !issilicon(usr))
+ return
+
+ locked = L[desc]
+ for(var/mob/O in hearers(src, null))
+ O.show_message(SPAN_NOTICE("Locked In"), 2)
+ return
+
+/obj/machinery/computer/teleporter/verb/set_id(t as text)
+ set category = "Object"
+ set name = "Set teleporter ID"
+ set src in oview(1)
+ set desc = "ID Tag:"
+
+ if(stat & (NOPOWER|BROKEN) || !istype(usr,/mob/living))
+ return
+ if(t)
+ id = t
+ return
+
+/proc/find_loc(obj/R as obj)
+ if(!R) return null
+ var/turf/T = R.loc
+ while(!istype(T, /turf))
+ T = T.loc
+ if(!T || istype(T, /area)) return null
+ return T
+
+/obj/machinery/teleport
+ name = "teleport"
+ icon = 'icons/obj/machines/teleporter.dmi'
+ density = TRUE
+ anchored = TRUE
+ var/lockeddown = FALSE
+
+/obj/machinery/teleport/hub
+ name = "teleporter pad"
+ desc = "The teleporter pad handles all of the impossibly complex busywork required in instant matter transmission."
+ icon_state = "pad"
+ use_power = USE_POWER_IDLE
+ idle_power_usage = 10
+ active_power_usage = 2000
+ circuit = /obj/item/circuitboard/teleporter_hub
+ var/obj/machinery/computer/teleporter/com
+ light_color = "#02d1c7"
+
+/obj/machinery/teleport/hub/Initialize(mapload)
+ . = ..()
+ default_apply_parts()
+ RefreshParts()
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/machinery/teleport/hub/LateInitialize()
+ . = ..()
+ update_icon()
+
+/obj/machinery/teleport/hub/on_update_icon()
+ cut_overlays()
+ if(com?.station?.engaged)
+ var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ add_overlay(I)
+ set_light(0.4, 1.2, 4, 10)
+ else
+ set_light(0)
+ if (operable())
+ var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ add_overlay(I)
+
+/obj/machinery/teleport/hub/Bumped(M as mob|obj)
+ if(com?.station?.engaged)
+ teleport(M)
+ use_power_oneoff(5000)
+
+/obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj)
+ if(!com)
+ return
+ if(!com.locked)
+ for(var/mob/O in hearers(src, null))
+ O.show_message(SPAN_WARNING("Failure: Cannot authenticate locked on coordinates. Please reinstate coordinate matrix."))
+ return
+ do_teleport(M, com.locked)
+ if(com.one_time_use) //Make one-time-use cards only usable one time!
+ com.one_time_use = FALSE
+ com.locked = null
+ if(com.station)
+ com.station.engaged = FALSE
+ update_icon()
+ return
+
+/obj/machinery/teleport/hub/Destroy()
+ com = null
+ return ..()
+
+/obj/machinery/teleport/station
+ name = "projector"
+ desc = "This machine is capable of projecting a miniature wormhole leading directly to its provided target."
+ icon_state = "station"
+ var/engaged = FALSE
+ use_power = USE_POWER_IDLE
+ idle_power_usage = 10
+ active_power_usage = 2000
+ circuit = /obj/item/circuitboard/teleporter_station
+ var/obj/machinery/teleport/hub/com
+
+/obj/machinery/teleport/station/Initialize(mapload)
+ . = ..()
+ for(var/target_dir in GLOB.cardinal)
+ var/obj/machinery/teleport/hub/found_pad = locate() in get_step(src, target_dir)
+ if(found_pad)
+ setDir(get_dir(src, found_pad))
+ break
+ update_icon()
+
+/obj/machinery/teleport/station/on_update_icon()
+ . = ..()
+ cut_overlays()
+ if(engaged)
+ var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ overlays += I
+ else if(operable())
+ var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ overlays += I
+ default_apply_parts()
+ RefreshParts()
+
+/obj/machinery/teleport/station/attackby(var/obj/item/W)
+ attack_hand()
+
+/obj/machinery/teleport/station/attack_ai()
+ attack_hand()
+
+/obj/machinery/teleport/station/attack_hand()
+ if(engaged)
+ disengage()
+ else
+ engage()
+
+/obj/machinery/teleport/station/proc/engage()
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ engaged = TRUE
+ update_icon()
+ if(com)
+ hub.update_icon()
+ use_power(5000)
+ update_use_power(USE_POWER_ACTIVE)
+ com.update_use_power(USE_POWER_ACTIVE)
+ for(var/mob/O in hearers(src, null))
+ O.show_message(SPAN_NOTICE("Teleporter engaged!"), 2)
+ add_fingerprint(usr)
+ return
+
+/obj/machinery/teleport/station/proc/disengage()
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ engaged = FALSE
+ update_icon()
+ if(com)
+ hub.update_icon()
+ com.update_use_power(USE_POWER_IDLE)
+ update_use_power(USE_POWER_IDLE)
+ for(var/mob/O in hearers(src, null))
+ O.show_message(SPAN_NOTICE("Teleporter disengaged!"), 2)
+ add_fingerprint(usr)
+ return
+
+/atom/proc/laserhit(L as obj)
+ return TRUE
diff --git a/code/game/machinery/teleporter/pad.dm b/code/game/machinery/teleporter/pad.dm
new file mode 100644
index 00000000000..97188b58fdd
--- /dev/null
+++ b/code/game/machinery/teleporter/pad.dm
@@ -0,0 +1,86 @@
+/obj/machinery/tele_pad
+ name = "teleporter pad"
+ desc = "The teleporter pad handles all of the impossibly complex busywork required in instant matter transmission."
+ icon = 'icons/obj/machines/teleporter.dmi'
+ icon_state = "pad"
+ density = TRUE
+ anchored = TRUE
+ idle_power_usage = 10
+ active_power_usage = 2000
+ light_color = "#02d1c7"
+
+ var/obj/machinery/computer/teleporter/computer
+
+
+/obj/machinery/tele_pad/Destroy()
+ if (computer)
+ computer.lost_pad()
+ clear_computer()
+ . = ..()
+
+
+/obj/machinery/tele_pad/proc/set_computer(obj/machinery/computer/teleporter/_computer)
+ if (computer == _computer)
+ return
+ clear_computer()
+ computer = _computer
+ RegisterSignal(computer, COMSIG_PARENT_QDELETING, .proc/lost_computer)
+ //GLOB.destroyed_event.register(computer, src, /obj/machinery/tele_pad/proc/lost_computer)
+
+
+/obj/machinery/tele_pad/proc/clear_computer()
+ if (!computer)
+ return
+ //GLOB.unregister(computer, src, /obj/machinery/tele_pad/proc/lost_computer)
+ UnregisterSignal(computer, COMSIG_PARENT_QDELETING)
+ computer = null
+
+
+/obj/machinery/tele_pad/proc/lost_computer()
+ clear_computer()
+ update_icon()
+
+
+/obj/machinery/tele_pad/Bumped(atom/movable/AM)
+ if (!computer?.active)
+ return
+ var/turf/T = get_turf(computer.target)
+ if (!T)
+ return
+ use_power_oneoff(5000)
+ do_teleport(AM, T)
+
+
+/obj/machinery/tele_pad/attack_ghost(mob/user)
+ if (!computer?.active)
+ return
+ var/turf/T = get_turf(computer.target)
+ if (!T)
+ return
+ user.forceMove(T)
+
+
+/obj/machinery/tele_pad/power_change()
+ . = ..()
+ if (!.)
+ return
+ update_icon()
+
+
+/obj/machinery/tele_pad/update_icon()
+ overlays.Cut()
+ if (computer?.active)
+ update_use_power(USE_POWER_ACTIVE)
+ var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ overlays += I
+ set_light(0.4, 1.2, 4, 10)
+ else
+ set_light(0)
+ update_use_power(USE_POWER_IDLE)
+ if (operable())
+ var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ overlays += I
diff --git a/code/game/machinery/teleporter/projector.dm b/code/game/machinery/teleporter/projector.dm
new file mode 100644
index 00000000000..c1e52098c3c
--- /dev/null
+++ b/code/game/machinery/teleporter/projector.dm
@@ -0,0 +1,64 @@
+/obj/machinery/tele_projector
+ name = "projector"
+ desc = "This machine is capable of projecting a miniature wormhole leading directly to its provided target."
+ icon = 'icons/obj/machines/teleporter.dmi'
+ icon_state = "station"
+ density = TRUE
+ anchored = TRUE
+ idle_power_usage = 10
+ active_power_usage = 2000
+
+ var/obj/machinery/computer/teleporter/computer
+
+
+/obj/machinery/tele_projector/Destroy()
+ if (computer)
+ computer.lost_projector()
+ clear_computer()
+ . = ..()
+
+
+/obj/machinery/tele_projector/proc/clear_computer()
+ if (!computer)
+ return
+ UnregisterSignal(computer, COMSIG_PARENT_QDELETING)
+ //GLOB.destroyed_event.unregister(computer, src, /obj/machinery/tele_projector/proc/lost_computer)
+ computer = null
+
+
+/obj/machinery/tele_projector/proc/lost_computer()
+ clear_computer()
+ update_icon()
+
+
+/obj/machinery/tele_projector/proc/set_computer(obj/machinery/computer/teleporter/_computer)
+ if (computer == _computer)
+ return
+ clear_computer()
+ computer = _computer
+ RegisterSignal(computer, COMSIG_PARENT_QDELETING, .proc/lost_computer)
+ //GLOB.destroyed_event.register(computer, src, /obj/machinery/tele_projector/proc/lost_computer)
+
+
+/obj/machinery/tele_projector/power_change()
+ . = ..()
+ if (!.)
+ return
+ update_icon()
+
+
+/obj/machinery/tele_projector/update_icon()
+ overlays.Cut()
+ if (computer?.active)
+ update_use_power(USE_POWER_ACTIVE)
+ var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ overlays += I
+ else
+ update_use_power(USE_POWER_IDLE)
+ if (operable())
+ var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay")
+ I.plane = PLANE_LIGHTING_ABOVE
+ I.layer = ABOVE_LIGHTING_LAYER
+ overlays += I
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 3c0308d6281..d38f30a18eb 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -458,7 +458,6 @@
else if((href_list["togglevoice"]) && (panel_open))
shut_up = !shut_up
- add_fingerprint(usr)
SSnanoui.update_uis(src)
/obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user)
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 50f91180e31..d5d96202513 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -120,7 +120,6 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
..()
if (amount && istype(user))
- add_fingerprint(user)
if (user.gloves)
return
var/taken = rand(1,amount)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index ff64a57fdc4..ca8229e52bb 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -700,7 +700,6 @@ GLOBAL_LIST_EMPTY(PDAs)
ui.close()
return 0
- add_fingerprint(U)
U.set_machine(src)
switch(href_list["choice"])
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 91936453312..08be69eb3b3 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -1,13 +1,30 @@
/obj/item/radio/beacon
name = "tracking beacon"
desc = "A beacon used by a teleporter."
+ icon = 'icons/obj/machines/teleporter.dmi'
icon_state = "beacon"
- item_state = "signaler"
+ item_state = "beacon"
+ base_icon_state = "beacon"
var/code = "electronic"
+ var/functioning = TRUE
origin_tech = list(TECH_BLUESPACE = 1)
GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/radio/beacon)
+
+/obj/item/radio/beacon/Initialize(mapload)
+ . = ..()
+ update_icon()
+
+
+/obj/item/radio/beacon/update_icon()
+ cut_overlays()
+ if(!functioning)
+ add_overlay("[base_icon_state]_malfunction")
+ else
+ add_overlay("[base_icon_state]_on")
+
+
/obj/item/radio/beacon/hear_talk()
return
@@ -16,17 +33,70 @@ GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/radio/beacon)
return null
-/obj/item/radio/beacon/verb/alter_signal(t as text)
+/obj/item/radio/beacon/emp_act(severity)
+ if(functioning && severity >= 1)
+ fry()
+ ..()
+
+
+/obj/item/radio/beacon/emag_act(remaining_charges, user, emag_source)
+ if(functioning)
+ fry()
+
+
+/obj/item/radio/beacon/verb/alter_signal(newcode as text)
set name = "Alter Beacon's Signal"
set category = "Object"
set src in usr
+ var/mob/user = usr
+ if(!user.incapacitated())
+ code = newcode
+ add_fingerprint(user)
- if ((usr.canmove && !( usr.restrained() )))
- src.code = t
- if (!( src.code ))
- src.code = "beacon"
- src.add_fingerprint(usr)
- return
+
+/obj/item/radio/beacon/proc/fry()
+ functioning = FALSE
+ visible_message(SPAN_WARNING("\The [src] pops and cracks, and a thin wisp of dark smoke rises from the casing."))
+ update_icon()
+ for(var/obj/machinery/computer/teleporter/T in machines)
+ if(T.target == src)
+ T.lost_target()
+
+
+/obj/item/radio/beacon/anchored
+ desc = "A beacon used by a teleporter. This one appears to be bolted to the ground."
+ anchored = TRUE
+ w_class = ITEMSIZE_HUGE
+ //randpixel = 0
+
+ var/repair_fail_chance = 35
+
+
+/obj/item/radio/beacon/anchored/Initialize(mapload)
+ . = ..()
+ var/turf/T = get_turf(src)
+ hide(hides_under_flooring() && !T.is_plating())
+
+
+/obj/item/radio/beacon/anchored/attackby(obj/item/I, mob/living/user)
+ ..()
+ if(istype(I, /obj/item/stack/nanopaste))
+ var/obj/item/stack/nanopaste/S = I
+ if(b_stat)
+ if(S.use(1))
+ to_chat(user, SPAN_NOTICE("You pour some of \the [S] over \the [src]'s circuitry."))
+ if(prob(repair_fail_chance))
+ flick("[initial(icon_state)]_flickon", src)
+ visible_message(SPAN_WARNING("The [src]'s lights come back on briefly, then die out again."))
+ else
+ visible_message(SPAN_NOTICE("\The [src]'s lights come back on."))
+ functioning = TRUE
+ repair_fail_chance += pick(5, 10, 10, 15)
+ update_icon()
+ else
+ to_chat(user, SPAN_WARNING("There's not enough of \the [S] left to fix \the [src]."))
+ else
+ to_chat(user, SPAN_WARNING("You can't work on \the [src] until its been opened up."))
/obj/item/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
@@ -44,8 +114,8 @@ GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/radio/beacon)
/obj/item/radio/beacon/syndicate/attack_self(mob/user as mob)
if(user)
- to_chat(user, "Locked In")
- new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
+ to_chat(user, SPAN_NOTICE("Locked In"))
+ new /obj/machinery/power/singularity_beacon/syndicate(user.loc)
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
qdel(src)
return
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index b9535a27b48..8120cdaad47 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -41,7 +41,6 @@
A.part2 = src
user.put_in_hands(A)
- A.add_fingerprint(user)
/obj/item/radio/electropack/Topic(href, href_list)
//..()
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 7cc6c9a875c..755afde5cac 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -1,7 +1,7 @@
/obj/item/radio/intercom
name = "station intercom (General)"
desc = "Talk through this."
- icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon
+ icon = 'icons/obj/radio.dmi' //VOREStation Edit - New Icon
icon_state = "intercom"
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 6112d38b6aa..693c279e363 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -24,7 +24,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
))
/obj/item/radio
- icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit
+ icon = 'icons/obj/radio.dmi' //VOREStation Edit
name = "shortwave radio" //VOREStation Edit
suffix = "\[3\]"
icon_state = "walkietalkie"
@@ -598,10 +598,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
else
user.show_message("\The [src] can no longer be modified or attached!")
updateDialog()
- //Foreach goto(83)
- add_fingerprint(user)
return
- else return
/obj/item/radio/emp_act(severity)
broadcasting = 0
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 4bb2e2c526c..be77b6c557a 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -113,7 +113,6 @@
update_icon()
if(href_list["device"])
attached_device.attack_self(usr)
- src.add_fingerprint(usr)
return 1 // Returning 1 sends an update to attached UIs
/obj/item/transfer_valve/process_activation(var/obj/item/D)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index f9ba55b6566..b96e3f37bb9 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -42,7 +42,6 @@
return
var/obj/item/stack/material/glass/reinforced/RG = new (user.loc)
- RG.add_fingerprint(user)
RG.add_to_stacks(user)
var/obj/item/stack/material/glass/G = src
src = null
@@ -79,7 +78,6 @@
if( istype(W, /obj/item/stack/rods) )
var/obj/item/stack/rods/V = W
var/obj/item/stack/material/glass/phoronrglass/RG = new (user.loc)
- RG.add_fingerprint(user)
RG.add_to_stacks(user)
V.use(1)
var/obj/item/stack/material/glass/G = src
diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm
index 5e5b456d619..34a88b6cc60 100644
--- a/code/game/objects/items/storage/secure.dm
+++ b/code/game/objects/items/storage/secure.dm
@@ -119,7 +119,6 @@
src.code += text("[]", href_list["type"])
if (length(src.code) > 5)
src.code = "ERROR"
- src.add_fingerprint(usr)
for(var/mob/M in viewers(1, src.loc))
if ((M.client && M.machine == src))
src.attack_self(M)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 04ce0eb189b..f98ce0434ca 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -116,10 +116,14 @@
/obj/item/toy/blink
name = "electronic blink toy game"
desc = "Blink. Blink. Blink. Ages 8 and up."
- icon = 'icons/obj/radio.dmi'
+ icon = 'icons/obj/machines/teleporter.dmi'
icon_state = "beacon"
item_state = "signaler"
+/obj/item/toy/blink/Initialize(mapload)
+ . = ..()
+ add_overlay("[initial(icon_state)]_on")
+
/*
* Fake singularity
*/
diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm
index 2e64cb388e3..60b4f5ee5d4 100644
--- a/code/game/objects/items/weapons/circuitboards/frame.dm
+++ b/code/game/objects/items/weapons/circuitboards/frame.dm
@@ -181,7 +181,7 @@
/obj/item/circuitboard/teleporter_hub
name = T_BOARD("teleporter hub")
- build_path = /obj/machinery/teleport/hub
+ build_path = /obj/machinery/tele_pad
board_type = "teleporter_hub"
// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 4)
req_components = list(
@@ -191,7 +191,7 @@
/obj/item/circuitboard/teleporter_station
name = T_BOARD("teleporter station")
- build_path = /obj/machinery/teleport/station
+ build_path = /obj/machinery/tele_projector
board_type = "teleporter_station"
// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 3)
req_components = list(
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 9c1667f4410..56ab830d600 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -238,7 +238,6 @@
W.loc = G
G.add_fingerprint(user)
W.add_fingerprint(user)
- src.add_fingerprint(user)
if (src.amount <= 0)
new /obj/item/c_tube( src.loc )
qdel(src)
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 97274276ed2..ef3ae5766fd 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -136,22 +136,22 @@ Frequency:
to_chat(user, "\The [src] is malfunctioning.")
return
var/list/L = list( )
- for(var/obj/machinery/teleport/hub/R in machines)
+ for(var/obj/machinery/tele_pad/R in machines)
var/obj/machinery/computer/teleporter/com
- var/obj/machinery/teleport/station/station
+ var/obj/machinery/tele_projector/station
for(var/direction in GLOB.cardinal)
- station = locate(/obj/machinery/teleport/station, get_step(R, direction))
+ station = locate(/obj/machinery/tele_projector, get_step(R, direction))
if(station)
for(direction in GLOB.cardinal)
com = locate(/obj/machinery/computer/teleporter, get_step(station, direction))
if(com)
break
break
- if (istype(com, /obj/machinery/computer/teleporter) && com.locked && !com.one_time_use)
- if(R.icon_state == "tele1")
- L["[com.id] (Active)"] = com.locked
- else
- L["[com.id] (Inactive)"] = com.locked
+ // if (istype(com, /obj/machinery/computer/teleporter) && com.locked && !com.one_time_use)
+ // if(R.icon_state == "tele1")
+ // L["[com.id] (Active)"] = com.locked
+ // else
+ // L["[com.id] (Inactive)"] = com.locked
var/list/turfs = list( )
for(var/turf/T in orange(10))
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index bef5ce97d8b..c5840c19c02 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -55,39 +55,6 @@
old_turf.unregister_dangerous_object(src)
new_turf.register_dangerous_object(src)
-/obj/Topic(href, href_list, var/datum/topic_state/state = default_state)
- if(usr && ..())
- return 1
-
- // In the far future no checks are made in an overriding Topic() beyond if(..()) return
- // Instead any such checks are made in CanUseTopic()
- if(CanUseTopic(usr, state, href_list) == UI_INTERACTIVE)
- CouldUseTopic(usr)
- return 0
-
- CouldNotUseTopic(usr)
- return 1
-
-/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state = default_state)
- if(user.CanUseObjTopic(src))
- return ..()
- to_chat(user, "[icon2html(thing = src, target = user)] Access Denied!")
- return UI_CLOSE
-
-/mob/living/silicon/CanUseObjTopic(var/obj/O)
- var/id = src.GetIdCard()
- return O.check_access(id)
-
-/mob/proc/CanUseObjTopic()
- return 1
-
-/obj/proc/CouldUseTopic(var/mob/user)
- var/atom/host = nano_host()
- host.add_hiddenprint(user)
-
-/obj/proc/CouldNotUseTopic(var/mob/user)
- // Nada
-
/obj/item/proc/is_used_on(obj/O, mob/user)
/obj/assume_air(datum/gas_mixture/giver)
@@ -224,3 +191,8 @@
/obj/proc/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
return
+
+/obj/attack_hand(mob/living/user)
+ if(Adjacent(user))
+ add_fingerprint(user)
+ ..()
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index c6f478f975c..7747ac60efe 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -36,7 +36,7 @@
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
if(do_after(user, 20 * O.toolspeed))
src.locked = 0
- to_chat(user, " You disable the locking modules.")
+ to_chat(user, SPAN_CAUTION("You disable the locking modules."))
update_icon()
return
else if(istype(O, /obj/item))
@@ -97,7 +97,7 @@
playsound(user, 'sound/machines/lockenable.ogg', 50, 1)
if(do_after(user,20 * O.toolspeed))
src.locked = 1
- to_chat(user, " You re-enable the locking modules.")
+ to_chat(user, SPAN_CAUTION("You re-enable the locking modules."))
return
else
localopened = !localopened
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index 4a32c1632f1..3f0ba679a50 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -35,7 +35,7 @@
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
if(do_after(user, 20 * O.toolspeed))
locked = 0
- to_chat(user, " You disable the locking modules.")
+ to_chat(user, SPAN_CAUTION("You disable the locking modules."))
update_icon()
return
else if(istype(O, /obj/item))
@@ -86,7 +86,7 @@
playsound(user, 'sound/machines/lockenable.ogg', 50, 1)
if(do_after(user,20 * O.toolspeed))
locked = 1
- to_chat(user, " You re-enable the locking modules.")
+ to_chat(user, SPAN_CAUTION("You re-enable the locking modules."))
return
else
toggle_close_open()
diff --git a/code/game/objects/topic.dm b/code/game/objects/topic.dm
new file mode 100644
index 00000000000..058b137c0d1
--- /dev/null
+++ b/code/game/objects/topic.dm
@@ -0,0 +1,37 @@
+/atom/proc/DefaultTopicState()
+ return GLOB.default_state
+
+/atom/Topic(href, href_list, var/datum/topic_state/state = default_state)
+ if(usr && ..())
+ return TRUE
+
+ state = state || DefaultTopicState() || GLOB.default_state
+
+ // In the far future no checks are made in an overriding Topic() beyond if(..()) return
+ // Instead any such checks are made in CanUseTopic()
+ if(CanUseTopic(usr, state, href_list) == UI_INTERACTIVE)
+ CouldUseTopic(usr)
+ return FALSE
+
+ CouldNotUseTopic(usr)
+ return TRUE
+
+/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state = default_state)
+ if(user.CanUseObjTopic(src))
+ return ..()
+ to_chat(user, "[icon2html(thing = src, target = user)] Access Denied!")
+ return UI_CLOSE
+
+/mob/living/silicon/CanUseObjTopic(var/obj/O)
+ var/id = src.GetIdCard()
+ return O.check_access(id)
+
+/mob/proc/CanUseObjTopic()
+ return TRUE
+
+/atom/proc/CouldUseTopic(var/mob/user)
+ var/atom/host = nano_host()
+ host.add_hiddenprint(user)
+
+/atom/proc/CouldNotUseTopic(var/mob/user)
+ // Nada
diff --git a/code/modules/atmospherics/components/unary/cold_sink.dm b/code/modules/atmospherics/components/unary/cold_sink.dm
index f4525051ee3..71e012df088 100644
--- a/code/modules/atmospherics/components/unary/cold_sink.dm
+++ b/code/modules/atmospherics/components/unary/cold_sink.dm
@@ -4,7 +4,7 @@
/obj/machinery/atmospherics/unary/freezer
name = "gas cooling system"
desc = "Cools gas when connected to pipe network"
- icon = 'icons/obj/Cryogenic2_vr.dmi'
+ icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "freezer_0"
density = 1
anchored = 1
diff --git a/code/modules/atmospherics/components/unary/heat_source.dm b/code/modules/atmospherics/components/unary/heat_source.dm
index 6729d471a50..0fc38525ac0 100644
--- a/code/modules/atmospherics/components/unary/heat_source.dm
+++ b/code/modules/atmospherics/components/unary/heat_source.dm
@@ -4,7 +4,7 @@
/obj/machinery/atmospherics/unary/heater
name = "gas heating system"
desc = "Heats gas when connected to a pipe network"
- icon = 'icons/obj/Cryogenic2_vr.dmi'
+ icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "heater_0"
density = 1
anchored = 1
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 5c253aa6333..eefe0c7c699 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -30,6 +30,7 @@
var/recent_struggle = 0
var/clothing_flags = 0
+
//Updates the icons of the mob wearing the clothing item, if any.
/obj/item/clothing/proc/update_clothing_icon()
return
@@ -39,6 +40,15 @@
..()
gunshot_residue = null
+/obj/item/clothing/proc/get_fibers()
+ . = "material from \a [name]"
+ var/list/acc = list()
+ for(var/obj/item/clothing/accessory/A in accessories)
+ if(prob(40) && A.get_fibers())
+ acc += A.get_fibers()
+ if(acc.len)
+ . += " with traces of [english_list(acc)]"
+
/obj/item/clothing/Initialize(mapload)
. = ..()
if(starting_accessories)
@@ -267,6 +277,9 @@
ring.emp_act(severity)
..()
+/obj/item/clothing/gloves/get_fibers()
+ return "material from a pair of [name]."
+
// Called just before an attack_hand(), in mob/UnarmedAttack()
/obj/item/clothing/gloves/proc/Touch(var/atom/A, var/proximity)
return 0 // return 1 to cancel attack_hand()
diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm
index 7e3af50c031..e0fed398003 100644
--- a/code/modules/clothing/under/accessories/armor.dm
+++ b/code/modules/clothing/under/accessories/armor.dm
@@ -92,6 +92,9 @@
armor = list(melee = 30, bullet = 15, laser = 40, energy = 10, bomb = 25, bio = 0, rad = 0)
slot = ACCESSORY_SLOT_ARMOR_C
+/obj/item/clothing/accessory/armorplate/get_fibers()
+ return null //Plates do not shed
+
/obj/item/clothing/accessory/armor/armorplate/stab
name = "mesh armor plate"
desc = "A mesh armor plate made of steel-reinforced synthetic fibers, great for dealing with small blades. Attaches to a plate carrier."
diff --git a/code/modules/clothing/under/accessories/torch.dm b/code/modules/clothing/under/accessories/torch.dm
index 69a5238c11a..c52e1e891f5 100644
--- a/code/modules/clothing/under/accessories/torch.dm
+++ b/code/modules/clothing/under/accessories/torch.dm
@@ -147,6 +147,9 @@ specialty pins
icon_state = "marinerank_command"
slot = ACCESSORY_SLOT_INSIGNIA
+/obj/item/clothing/accessory/oricon/specialty/get_fibers()
+ return null
+
/obj/item/clothing/accessory/oricon/specialty/janitor
name = "custodial blazes"
desc = "Purple blazes denoting a custodial technician."
@@ -444,6 +447,9 @@ ranks - ec
gender = PLURAL
//high_visibility = 1
+/obj/item/clothing/accessory/oricon/rank/get_fibers()
+ return null
+
/obj/item/clothing/accessory/oricon/rank/ec
name = "explorer ranks"
desc = "Insignia denoting rank of some kind. These appear blank."
diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm
index 3cc6562407a..fa745e5d6d9 100644
--- a/code/modules/detectivework/forensics.dm
+++ b/code/modules/detectivework/forensics.dm
@@ -5,12 +5,12 @@
//This is the output of the stringpercent(print) proc, and means about 80% of
//the print must be there for it to be complete. (Prints are 32 digits)
var/const/FINGERPRINT_COMPLETE = 6
-proc/is_complete_print(var/print)
+/proc/is_complete_print(var/print)
return stringpercent(print) <= FINGERPRINT_COMPLETE
-atom/var/list/suit_fibers
+/atom/var/list/suit_fibers
-atom/proc/add_fibers(mob/living/carbon/human/M)
+/atom/proc/add_fibers(mob/living/carbon/human/M)
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = M.gloves
if(G.transfer_blood) //bloodied gloves transfer blood to touched objects
@@ -24,21 +24,24 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
var/fibertext
var/item_multiplier = istype(src,/obj/item)?1.2:1
var/suit_coverage = 0
- if(M.wear_suit)
- fibertext = "Material from \a [M.wear_suit]."
- if(prob(10*item_multiplier) && !(fibertext in suit_fibers))
- suit_fibers += fibertext
- suit_coverage = M.wear_suit.body_parts_covered
+ if(istype(M.wear_suit, /obj/item/clothing))
+ var/obj/item/clothing/C = M.wear_suit
+ fibertext = C.get_fibers()
+ if(fibertext && prob(10*item_multiplier))
+ suit_fibers |= fibertext
+ suit_coverage = C.body_parts_covered
- if(M.w_uniform && (M.w_uniform.body_parts_covered & ~suit_coverage))
- fibertext = "Fibers from \a [M.w_uniform]."
- if(prob(15*item_multiplier) && !(fibertext in suit_fibers))
- suit_fibers += fibertext
+ if(istype(M.w_uniform, /obj/item/clothing) && (M.w_uniform.body_parts_covered & ~suit_coverage))
+ var/obj/item/clothing/C = M.w_uniform
+ fibertext = C.get_fibers()
+ if(fibertext && prob(15*item_multiplier))
+ suit_fibers |= fibertext
- if(M.gloves && (M.gloves.body_parts_covered & ~suit_coverage))
- fibertext = "Material from a pair of [M.gloves.name]."
- if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
- suit_fibers += "Material from a pair of [M.gloves.name]."
+ if(istype(M.gloves, /obj/item/clothing) && (M.gloves.body_parts_covered & ~suit_coverage))
+ var/obj/item/clothing/C = M.gloves
+ fibertext = C.get_fibers()
+ if(fibertext && prob(20*item_multiplier))
+ suit_fibers |= fibertext
/datum/data/record/forensic
name = "forensic data"
diff --git a/code/modules/detectivework/tools/sample_kits.dm b/code/modules/detectivework/tools/sample_kits.dm
index bbd4534ec4f..f7587922f1b 100644
--- a/code/modules/detectivework/tools/sample_kits.dm
+++ b/code/modules/detectivework/tools/sample_kits.dm
@@ -1,6 +1,7 @@
/obj/item/sample
name = "forensic sample"
icon = 'icons/obj/forensics.dmi'
+ flags = NOPRINT
w_class = ITEMSIZE_TINY
var/list/evidence = list()
@@ -121,6 +122,9 @@
evidence[print] = supplied.fingerprints[print]
supplied.fingerprints.Cut()
+/obj/item/forensics
+ flags = NOPRINT
+
/obj/item/forensics/sample_kit
name = "fiber collection kit"
desc = "A magnifying glass and tweezers. Used to lift suit fibers."
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index 97db41e5c2d..3cfa28a8d83 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -19,7 +19,7 @@ log transactions
desc = "For all your monetary needs!"
icon = 'icons/obj/terminals.dmi'
icon_state = "atm"
- anchored = 1
+ anchored = TRUE
use_power = USE_POWER_IDLE
idle_power_usage = 10
circuit = /obj/item/circuitboard/atm
@@ -67,17 +67,17 @@ log transactions
if(!emagged)
return
- //short out the machine, shoot sparks, spew money!
- emagged = 1
+ //Short out the machine, shoot sparks, spew money!
+ emagged = TRUE
spark_system.start()
spawn_money(rand(100,500),src.loc)
- //we don't want to grief people by locking their id in an emagged ATM
+ //We don't want to grief people by locking their id in an emagged ATM
release_held_id(user)
- //display a message to the user
+ //Display a message to the user
var/response = pick("Initiating withdraw. Have a nice day!", "CRITICAL ERROR: Activating cash chamber panic siphon.","PIN Code accepted! Emptying account balance.", "Jackpot!")
- to_chat(user, "[icon2html(thing = src, target = user)] The [src] beeps: \"[response]\"")
- return 1
+ to_chat(user, SPAN_WARNING("[icon2html(thing = src, target = user)] The [src] beeps: \"[response]\""))
+ return TRUE
/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob)
if(computer_deconstruction_screwdriver(user, I))
@@ -85,7 +85,7 @@ log transactions
if(istype(I, /obj/item/card))
if(emagged > 0)
//prevent inserting id into an emagged ATM
- to_chat(user, "[icon2html(thing = src, target = user)] CARD READER ERROR. This system has been compromised!")
+ to_chat(user, SPAN_CAUTION("[icon2html(thing = src, target = user)] CARD READER ERROR. This system has been compromised!"))
return
else if(istype(I,/obj/item/card/emag))
I.resolve_attackby(src, user)
@@ -117,7 +117,7 @@ log transactions
T.time = stationtime2text()
authenticated_account.transaction_log.Add(T)
- to_chat(user, "You insert [I] into [src].")
+ to_chat(user, SPAN_INFO("You insert [I] into [src]."))
src.attack_hand(user)
qdel(I)
else
@@ -125,7 +125,7 @@ log transactions
/obj/machinery/atm/attack_hand(mob/user as mob)
if(istype(user, /mob/living/silicon))
- to_chat (user, "A firewall prevents you from interfacing with this device!")
+ to_chat (user, SPAN_WARNING("A firewall prevents you from interfacing with this device!"))
return
if(get_dist(src,user) <= 1)
diff --git a/code/modules/food/kitchen/cooking_machines/_cooker.dm b/code/modules/food/kitchen/cooking_machines/_cooker.dm
index 505fc03bbcb..a2b9c0e0eeb 100644
--- a/code/modules/food/kitchen/cooking_machines/_cooker.dm
+++ b/code/modules/food/kitchen/cooking_machines/_cooker.dm
@@ -49,7 +49,7 @@
cooking_objs.Add(new /datum/cooking_item/(new container_type(src)))
cooking = 0
- update_icon() // this probably won't cause issues, but Aurora used SSIcons and queue_icon_update() instead
+ update_icon() // this probably won't cause issues, but Aurora used SSIcons and update_icon() instead
/obj/machinery/appliance/cooker/update_icon()
cut_overlays()
@@ -73,7 +73,7 @@
/obj/machinery/appliance/cooker/power_change()
. = ..()
- update_icon() // this probably won't cause issues, but Aurora used SSIcons and queue_icon_update() instead
+ update_icon() // this probably won't cause issues, but Aurora used SSIcons and update_icon() instead
/obj/machinery/appliance/cooker/proc/update_cooking_power()
var/temp_scale = 0
diff --git a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm
index 0288ceb8201..d3bc8c88215 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm
@@ -101,13 +101,13 @@
// Allows us to process UI clicks, which are relayed in form of hrefs.
/datum/nano_module/power_monitor/Topic(href, href_list)
if(..())
- return 1
- if( href_list["clear"] )
+ return TRUE
+ if(href_list["clear"] )
active_sensor = null
- . = 1
- if( href_list["refresh"] )
+ . = TRUE
+ if(href_list["refresh"] )
refresh_sensors()
- . = 1
- else if( href_list["setsensor"] )
+ . = TRUE
+ else if(href_list["setsensor"] )
active_sensor = href_list["setsensor"]
- . = 1
+ . = TRUE
diff --git a/code/modules/nano/modules/power_monitor.dm b/code/modules/nano/modules/power_monitor.dm
index 22a63c2750f..4173a811712 100644
--- a/code/modules/nano/modules/power_monitor.dm
+++ b/code/modules/nano/modules/power_monitor.dm
@@ -56,10 +56,10 @@
// Allows us to process UI clicks, which are relayed in form of hrefs.
/datum/nano_module/power_monitor/Topic(href, href_list)
if(..())
- return 1
- if( href_list["clear"] )
+ return TRUE
+ if(href_list["clear"] )
active_sensor = null
- if( href_list["refresh"] )
+ if(href_list["refresh"] )
refresh_sensors()
- else if( href_list["setsensor"] )
+ else if(href_list["setsensor"] )
active_sensor = href_list["setsensor"]
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index 44de09c58c2..485b57a1872 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -222,7 +222,7 @@
/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user)
var/nicetype = "pipe"
var/ispipe = 0 // Indicates if we should change the level of this pipe
- src.add_fingerprint(user)
+ add_fingerprint(user, 0, I)
switch(ptype)
if(DISPOSAL_PIPE_BIN)
nicetype = "disposal bin"
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 28fd19bbca7..fbfb5dc92e2 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -56,7 +56,7 @@
if(stat & BROKEN || !I || !user)
return
- src.add_fingerprint(user)
+ add_fingerprint(user, 0, I)
if(mode<=0) // It's off
if(I.is_screwdriver())
if(contents.len > 0)
@@ -879,7 +879,7 @@
var/turf/T = src.loc
if(!T.is_plating())
return // prevent interaction with T-scanner revealed pipes
- src.add_fingerprint(user)
+ src.add_fingerprint(user, 0, I)
if(istype(I, /obj/item/weldingtool))
var/obj/item/weldingtool/W = I
@@ -1360,7 +1360,7 @@
var/turf/T = src.loc
if(!T.is_plating())
return // prevent interaction with T-scanner revealed pipes
- src.add_fingerprint(user)
+ src.add_fingerprint(user, 0, I)
if(istype(I, /obj/item/weldingtool))
var/obj/item/weldingtool/W = I
@@ -1478,7 +1478,7 @@
attackby(var/obj/item/I, var/mob/user)
if(!I || !user)
return
- src.add_fingerprint(user)
+ src.add_fingerprint(user, 0, I)
if(I.is_screwdriver())
if(mode==0)
mode=1
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 3b2f59039f0..222c5cafaba 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -1,7 +1,7 @@
/obj/structure/bigDelivery
desc = "A big wrapped package."
name = "large parcel"
- icon = 'icons/obj/storage.dmi' //VOREStation Edit
+ icon = 'icons/obj/storage.dmi'
icon_state = "deliverycloset"
var/obj/wrapped = null
density = 1
@@ -14,299 +14,97 @@
var/label_x
var/tag_x
- attack_hand(mob/user as mob)
- unwrap()
+/obj/structure/bigDelivery/attack_hand(mob/user as mob)
+ unwrap()
- proc/unwrap()
- // Destroy will drop our wrapped object on the turf, so let it.
- qdel(src)
+/obj/structure/bigDelivery/proc/unwrap()
+ // Destroy will drop our wrapped object on the turf, so let it.
+ qdel(src)
- attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W, /obj/item/destTagger))
- var/obj/item/destTagger/O = W
- if(O.currTag)
- if(src.sortTag != O.currTag)
- to_chat(user, "You have labeled the destination as [O.currTag].")
- if(!src.sortTag)
- src.sortTag = O.currTag
- update_icon()
- else
- src.sortTag = O.currTag
- playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)
+/obj/structure/bigDelivery/attackby(obj/item/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/destTagger))
+ var/obj/item/destTagger/O = W
+ if(O.currTag)
+ if(src.sortTag != O.currTag)
+ to_chat(user, "You have labeled the destination as [O.currTag].")
+ if(!src.sortTag)
+ src.sortTag = O.currTag
+ update_icon()
else
- to_chat(user, "The package is already labeled for [O.currTag].")
+ src.sortTag = O.currTag
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)
else
- to_chat(user, "You need to set a destination first!")
-
- else if(istype(W, /obj/item/pen))
- switch(alert("What would you like to alter?",,"Title","Description", "Cancel"))
- if("Title")
- var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN)
- if(!str || !length(str))
- to_chat(user, " Invalid text.")
- return
- user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\
- "You title \the [src]: \"[str]\"",\
- "You hear someone scribbling a note.")
- name = "[name] ([str])"
- if(!examtext && !nameset)
- nameset = 1
- update_icon()
- else
- nameset = 1
- if("Description")
- var/str = sanitize(input(usr,"Label text?","Set label",""))
- if(!str || !length(str))
- to_chat(user, "Invalid text.")
- return
- if(!examtext && !nameset)
- examtext = str
- update_icon()
- else
- examtext = str
- user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\
- "You label \the [src]: \"[examtext]\"",\
- "You hear someone scribbling a note.")
- return
-
- update_icon()
- overlays = new()
- if(nameset || examtext)
- var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
- if(icon_state == "deliverycloset")
- I.pixel_x = 2
- if(label_y == null)
- label_y = rand(-6, 11)
- I.pixel_y = label_y
- else if(icon_state == "deliverycrate")
- if(label_x == null)
- label_x = rand(-8, 6)
- I.pixel_x = label_x
- I.pixel_y = -3
- overlays += I
- if(src.sortTag)
- var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
- if(icon_state == "deliverycloset")
- if(tag_x == null)
- tag_x = rand(-2, 3)
- I.pixel_x = tag_x
- I.pixel_y = 9
- else if(icon_state == "deliverycrate")
- if(tag_x == null)
- tag_x = rand(-8, 6)
- I.pixel_x = tag_x
- I.pixel_y = -3
- overlays += I
-
- examine(mob/user)
- if(..(user, 4))
- if(sortTag)
- to_chat(user, "It is labeled \"[sortTag]\"")
- if(examtext)
- to_chat(user, "It has a note attached which reads, \"[examtext]\"")
- return
-
-/obj/item/smallDelivery
- desc = "A small wrapped package."
- name = "small parcel"
- icon = 'icons/obj/storage.dmi' //VOREStation Edit
- icon_state = "deliverycrate3"
- drop_sound = 'sound/items/drop/cardboardbox.ogg'
- pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
- var/obj/item/wrapped = null
- var/sortTag = null
- var/examtext = null
- var/nameset = 0
- var/tag_x
-
- attack_self(mob/user as mob)
- if (src.wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
- wrapped.loc = user.loc
- if(ishuman(user))
- user.put_in_hands(wrapped)
- else
- wrapped.loc = get_turf(src)
-
- qdel(src)
- return
-
- attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W, /obj/item/destTagger))
- var/obj/item/destTagger/O = W
- if(O.currTag)
- if(src.sortTag != O.currTag)
- to_chat(user, "You have labeled the destination as [O.currTag].")
- if(!src.sortTag)
- src.sortTag = O.currTag
- update_icon()
- else
- src.sortTag = O.currTag
- playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)
- else
- to_chat(user, "The package is already labeled for [O.currTag].")
- else
- to_chat(user, "You need to set a destination first!")
-
- else if(istype(W, /obj/item/pen))
- switch(alert("What would you like to alter?",,"Title","Description", "Cancel"))
- if("Title")
- var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN)
- if(!str || !length(str))
- to_chat(user, " Invalid text.")
- return
- user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\
- "You title \the [src]: \"[str]\"",\
- "You hear someone scribbling a note.")
- name = "[name] ([str])"
- if(!examtext && !nameset)
- nameset = 1
- update_icon()
- else
- nameset = 1
-
- if("Description")
- var/str = sanitize(input(usr,"Label text?","Set label",""))
- if(!str || !length(str))
- to_chat(user, "Invalid text.")
- return
- if(!examtext && !nameset)
- examtext = str
- update_icon()
- else
- examtext = str
- user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\
- "You label \the [src]: \"[examtext]\"",\
- "You hear someone scribbling a note.")
- return
-
- update_icon()
- overlays = new()
- if((nameset || examtext) && icon_state != "deliverycrate1")
- var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
- if(icon_state == "deliverycrate5")
- I.pixel_y = -1
- overlays += I
- if(src.sortTag)
- var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
- switch(icon_state)
- if("deliverycrate1")
- I.pixel_y = -5
- if("deliverycrate2")
- I.pixel_y = -2
- if("deliverycrate3")
- I.pixel_y = 0
- if("deliverycrate4")
- if(tag_x == null)
- tag_x = rand(0,5)
- I.pixel_x = tag_x
- I.pixel_y = 3
- if("deliverycrate5")
- I.pixel_y = -3
- overlays += I
-
- examine(mob/user)
- if(..(user, 4))
- if(sortTag)
- to_chat(user, "It is labeled \"[sortTag]\"")
- if(examtext)
- to_chat(user, "It has a note attached which reads, \"[examtext]\"")
- return
-
-/obj/item/packageWrap
- name = "package wrapper"
- icon = 'icons/obj/items.dmi'
- icon_state = "deliveryPaper"
- w_class = ITEMSIZE_NORMAL
- var/amount = 25.0
-
-
- afterattack(var/obj/target as obj, mob/user as mob, proximity)
- if(!proximity) return
- if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete
- return
- if(istype(target, /obj/item/smallDelivery) || istype(target,/obj/structure/bigDelivery) \
- || istype(target, /obj/item/gift) || istype(target, /obj/item/evidencebag))
- return
- if(target.anchored)
- return
- if(target in user)
- return
- if(user in target) //no wrapping closets that you are inside - it's not physically possible
- return
-
- user.attack_log += text("\[[time_stamp()]\] Has used [src.name] on \ref[target]")
-
-
- if (istype(target, /obj/item) && !(istype(target, /obj/item/storage) && !istype(target,/obj/item/storage/box)))
- var/obj/item/O = target
- if (src.amount > 1)
- var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up!
- if(!istype(O.loc, /turf))
- if(user.client)
- user.client.screen -= O
- P.wrapped = O
- O.forceMove(P)
- P.w_class = O.w_class
- var/i = round(O.w_class)
- if(i in list(1,2,3,4,5))
- P.icon_state = "deliverycrate[i]"
- switch(i)
- if(1) P.name = "tiny parcel"
- if(3) P.name = "normal-sized parcel"
- if(4) P.name = "large parcel"
- if(5) P.name = "huge parcel"
- if(i < 1)
- P.icon_state = "deliverycrate1"
- P.name = "tiny parcel"
- if(i > 5)
- P.icon_state = "deliverycrate5"
- P.name = "huge parcel"
- P.add_fingerprint(usr)
- O.add_fingerprint(usr)
- src.add_fingerprint(usr)
- src.amount -= 1
- user.visible_message("\The [user] wraps \a [target] with \a [src].",\
- "You wrap \the [target], leaving [amount] units of paper on \the [src].",\
- "You hear someone taping paper around a small object.")
- else if (istype(target, /obj/structure/closet/crate))
- var/obj/structure/closet/crate/O = target
- if (src.amount > 3 && !O.opened)
- var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
- P.icon_state = "deliverycrate"
- P.wrapped = O
- O.loc = P
- src.amount -= 3
- user.visible_message("\The [user] wraps \a [target] with \a [src].",\
- "You wrap \the [target], leaving [amount] units of paper on \the [src].",\
- "You hear someone taping paper around a large object.")
- else if(src.amount < 3)
- to_chat(user, "You need more paper.")
- else if (istype (target, /obj/structure/closet))
- var/obj/structure/closet/O = target
- if (src.amount > 3 && !O.opened)
- var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
- P.wrapped = O
- O.sealed = 1
- O.loc = P
- src.amount -= 3
- user.visible_message("\The [user] wraps \a [target] with \a [src].",\
- "You wrap \the [target], leaving [amount] units of paper on \the [src].",\
- "You hear someone taping paper around a large object.")
- else if(src.amount < 3)
- to_chat(user, "You need more paper.")
+ to_chat(user, "The package is already labeled for [O.currTag].")
else
- to_chat(user, "The object you are trying to wrap is unsuitable for the sorting machinery!")
- if (src.amount <= 0)
- new /obj/item/c_tube( src.loc )
- qdel(src)
- return
- return
+ to_chat(user, "You need to set a destination first!")
- examine(mob/user)
- if(..(user, 0))
- to_chat(user, "There are [amount] units of package wrap left!")
+ else if(istype(W, /obj/item/pen))
+ switch(alert("What would you like to alter?",,"Title","Description", "Cancel"))
+ if("Title")
+ var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN)
+ if(!str || !length(str))
+ to_chat(user, " Invalid text.")
+ return
+ user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\
+ "You title \the [src]: \"[str]\"",\
+ "You hear someone scribbling a note.")
+ name = "[name] ([str])"
+ if(!examtext && !nameset)
+ nameset = 1
+ update_icon()
+ else
+ nameset = 1
+ if("Description")
+ var/str = sanitize(input(usr,"Label text?","Set label",""))
+ if(!str || !length(str))
+ to_chat(user, "Invalid text.")
+ return
+ if(!examtext && !nameset)
+ examtext = str
+ update_icon()
+ else
+ examtext = str
+ user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\
+ "You label \the [src]: \"[examtext]\"",\
+ "You hear someone scribbling a note.")
+ return
- return
+/obj/structure/bigDelivery/update_icon()
+ overlays = new()
+ if(nameset || examtext)
+ var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
+ if(icon_state == "deliverycloset")
+ I.pixel_x = 2
+ if(label_y == null)
+ label_y = rand(-6, 11)
+ I.pixel_y = label_y
+ else if(icon_state == "deliverycrate")
+ if(label_x == null)
+ label_x = rand(-8, 6)
+ I.pixel_x = label_x
+ I.pixel_y = -3
+ overlays += I
+ if(src.sortTag)
+ var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
+ if(icon_state == "deliverycloset")
+ if(tag_x == null)
+ tag_x = rand(-2, 3)
+ I.pixel_x = tag_x
+ I.pixel_y = 9
+ else if(icon_state == "deliverycrate")
+ if(tag_x == null)
+ tag_x = rand(-8, 6)
+ I.pixel_x = tag_x
+ I.pixel_y = -3
+ overlays += I
+
+/obj/structure/bigDelivery/examine(mob/user)
+ if(..(user, 4))
+ if(sortTag)
+ to_chat(user, "It is labeled \"[sortTag]\"")
+ if(examtext)
+ to_chat(user, "It has a note attached which reads, \"[examtext]\"")
+ return
/obj/structure/bigDelivery/Destroy()
if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
@@ -320,6 +118,208 @@
AM.forceMove(T)
return ..()
+/obj/item/smallDelivery
+ desc = "A small wrapped package."
+ name = "small parcel"
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "deliverycrate3"
+ drop_sound = 'sound/items/drop/cardboardbox.ogg'
+ pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
+ var/obj/item/wrapped = null
+ var/sortTag = null
+ var/examtext = null
+ var/nameset = 0
+ var/tag_x
+
+/obj/item/smallDelivery/attack_self(mob/user as mob)
+ if (src.wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
+ wrapped.loc = user.loc
+ if(ishuman(user))
+ user.put_in_hands(wrapped)
+ else
+ wrapped.loc = get_turf(src)
+
+ qdel(src)
+ return
+
+/obj/item/smallDelivery/attackby(obj/item/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/destTagger))
+ var/obj/item/destTagger/O = W
+ if(O.currTag)
+ if(src.sortTag != O.currTag)
+ to_chat(user, "You have labeled the destination as [O.currTag].")
+ if(!src.sortTag)
+ src.sortTag = O.currTag
+ update_icon()
+ else
+ src.sortTag = O.currTag
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)
+ else
+ to_chat(user, "The package is already labeled for [O.currTag].")
+ else
+ to_chat(user, "You need to set a destination first!")
+
+ else if(istype(W, /obj/item/pen))
+ switch(alert("What would you like to alter?",,"Title","Description", "Cancel"))
+ if("Title")
+ var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN)
+ if(!str || !length(str))
+ to_chat(user, " Invalid text.")
+ return
+ user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\
+ "You title \the [src]: \"[str]\"",\
+ "You hear someone scribbling a note.")
+ name = "[name] ([str])"
+ if(!examtext && !nameset)
+ nameset = 1
+ update_icon()
+ else
+ nameset = 1
+
+ if("Description")
+ var/str = sanitize(input(usr,"Label text?","Set label",""))
+ if(!str || !length(str))
+ to_chat(user, "Invalid text.")
+ return
+ if(!examtext && !nameset)
+ examtext = str
+ update_icon()
+ else
+ examtext = str
+ user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\
+ "You label \the [src]: \"[examtext]\"",\
+ "You hear someone scribbling a note.")
+ return
+
+/obj/item/smallDelivery/update_icon()
+ overlays = new()
+ if((nameset || examtext) && icon_state != "deliverycrate1")
+ var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
+ if(icon_state == "deliverycrate5")
+ I.pixel_y = -1
+ overlays += I
+ if(src.sortTag)
+ var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
+ switch(icon_state)
+ if("deliverycrate1")
+ I.pixel_y = -5
+ if("deliverycrate2")
+ I.pixel_y = -2
+ if("deliverycrate3")
+ I.pixel_y = 0
+ if("deliverycrate4")
+ if(tag_x == null)
+ tag_x = rand(0,5)
+ I.pixel_x = tag_x
+ I.pixel_y = 3
+ if("deliverycrate5")
+ I.pixel_y = -3
+ overlays += I
+
+/obj/item/smallDelivery/examine(mob/user)
+ if(..(user, 4))
+ if(sortTag)
+ to_chat(user, "It is labeled \"[sortTag]\"")
+ if(examtext)
+ to_chat(user, "It has a note attached which reads, \"[examtext]\"")
+ return
+
+/obj/item/packageWrap
+ name = "package wrapper"
+ icon = 'icons/obj/items.dmi'
+ icon_state = "deliveryPaper"
+ w_class = ITEMSIZE_NORMAL
+ var/amount = 25.0
+
+
+/obj/item/packageWrap/afterattack(var/obj/target as obj, mob/user as mob, proximity)
+ if(!proximity) return
+ if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete
+ return
+ if(istype(target, /obj/item/smallDelivery) || istype(target,/obj/structure/bigDelivery) \
+ || istype(target, /obj/item/gift) || istype(target, /obj/item/evidencebag))
+ return
+ if(target.anchored)
+ return
+ if(target in user)
+ return
+ if(user in target) //no wrapping closets that you are inside - it's not physically possible
+ return
+
+ user.attack_log += text("\[[time_stamp()]\] Has used [src.name] on \ref[target]")
+
+
+ if (istype(target, /obj/item) && !(istype(target, /obj/item/storage) && !istype(target,/obj/item/storage/box)))
+ var/obj/item/O = target
+ if (src.amount > 1)
+ var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up!
+ if(!istype(O.loc, /turf))
+ if(user.client)
+ user.client.screen -= O
+ P.wrapped = O
+ O.forceMove(P)
+ P.w_class = O.w_class
+ var/i = round(O.w_class)
+ if(i in list(1,2,3,4,5))
+ P.icon_state = "deliverycrate[i]"
+ switch(i)
+ if(1) P.name = "tiny parcel"
+ if(3) P.name = "normal-sized parcel"
+ if(4) P.name = "large parcel"
+ if(5) P.name = "huge parcel"
+ if(i < 1)
+ P.icon_state = "deliverycrate1"
+ P.name = "tiny parcel"
+ if(i > 5)
+ P.icon_state = "deliverycrate5"
+ P.name = "huge parcel"
+ P.add_fingerprint(usr)
+ O.add_fingerprint(usr)
+ src.add_fingerprint(usr)
+ src.amount -= 1
+ user.visible_message("\The [user] wraps \a [target] with \a [src].",\
+ "You wrap \the [target], leaving [amount] units of paper on \the [src].",\
+ "You hear someone taping paper around a small object.")
+ else if (istype(target, /obj/structure/closet/crate))
+ var/obj/structure/closet/crate/O = target
+ if (src.amount > 3 && !O.opened)
+ var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
+ P.icon_state = "deliverycrate"
+ P.wrapped = O
+ O.loc = P
+ src.amount -= 3
+ user.visible_message("\The [user] wraps \a [target] with \a [src].",\
+ "You wrap \the [target], leaving [amount] units of paper on \the [src].",\
+ "You hear someone taping paper around a large object.")
+ else if(src.amount < 3)
+ to_chat(user, "You need more paper.")
+ else if (istype (target, /obj/structure/closet))
+ var/obj/structure/closet/O = target
+ if (src.amount > 3 && !O.opened)
+ var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
+ P.wrapped = O
+ O.sealed = 1
+ O.loc = P
+ src.amount -= 3
+ user.visible_message("\The [user] wraps \a [target] with \a [src].",\
+ "You wrap \the [target], leaving [amount] units of paper on \the [src].",\
+ "You hear someone taping paper around a large object.")
+ else if(src.amount < 3)
+ to_chat(user, "You need more paper.")
+ else
+ to_chat(user, "The object you are trying to wrap is unsuitable for the sorting machinery!")
+ if (src.amount <= 0)
+ new /obj/item/c_tube( src.loc )
+ qdel(src)
+ return
+ return
+
+/obj/item/packageWrap/examine(mob/user)
+ if(..(user, 0))
+ to_chat(user, "There are [amount] units of package wrap left!")
+
+ return
+
/obj/item/destTagger
name = "destination tagger"
desc = "Used to set the destination of properly wrapped packages."
@@ -331,30 +331,30 @@
item_state = "electronic"
slot_flags = SLOT_BELT
- proc/openwindow(mob/user as mob)
- var/dat = "TagMaster 2.3
"
+/obj/item/destTagger/proc/openwindow(mob/user as mob)
+ var/dat = "TagMaster 2.3
"
+ dat += ""
+ for(var/i = 1, i <= GLOB.tagger_locations.len, i++)
+ dat += "| [GLOB.tagger_locations[i]] | "
- dat += ""
- for(var/i = 1, i <= GLOB.tagger_locations.len, i++)
- dat += "| [GLOB.tagger_locations[i]] | "
+ if (i%4==0)
+ dat += "
"
- if (i%4==0)
- dat += "
"
+ dat += "
Current Selection: [currTag ? currTag : "None"]"
- dat += "
Current Selection: [currTag ? currTag : "None"]"
+ user << browse(dat, "window=destTagScreen;size=450x350")
+ onclose(user, "destTagScreen")
- user << browse(dat, "window=destTagScreen;size=450x350")
- onclose(user, "destTagScreen")
+/obj/item/destTagger/attack_self(mob/user as mob)
+ openwindow(user)
+ return
- attack_self(mob/user as mob)
- openwindow(user)
- return
-
- Topic(href, href_list)
- src.add_fingerprint(usr)
- if(href_list["nextTag"] && (href_list["nextTag"] in GLOB.tagger_locations))
- src.currTag = href_list["nextTag"]
- openwindow(usr)
+/obj/item/destTagger/Topic(href, href_list)
+ if(..())
+ return TRUE
+ if(href_list["nextTag"] && (href_list["nextTag"] in GLOB.tagger_locations))
+ src.currTag = href_list["nextTag"]
+ openwindow(usr)
/obj/machinery/disposal/deliveryChute
name = "Delivery chute"
@@ -364,94 +364,94 @@
var/c_mode = 0
- New()
- ..()
- spawn(5)
- trunk = locate() in src.loc
- if(trunk)
- trunk.linked = src // link the pipe trunk to self
+/obj/machinery/disposal/deliveryChute/Initialize(mapload, newdir)
+ . = ..()
+ spawn(5)
+ trunk = locate() in src.loc
+ if(trunk)
+ trunk.linked = src // link the pipe trunk to self
- interact()
- return
+/obj/machinery/disposal/deliveryChute/interact()
+ return
+/obj/machinery/disposal/deliveryChute/update()
+ return
+
+/obj/machinery/disposal/deliveryChute/Bumped(var/atom/movable/AM) //Go straight into the chute
+ if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect) || istype(AM, /obj/mecha)) return
+ switch(dir)
+ if(NORTH)
+ if(AM.loc.y != src.loc.y+1) return
+ if(EAST)
+ if(AM.loc.x != src.loc.x+1) return
+ if(SOUTH)
+ if(AM.loc.y != src.loc.y-1) return
+ if(WEST)
+ if(AM.loc.x != src.loc.x-1) return
+
+ if(istype(AM, /obj))
+ var/obj/O = AM
+ O.loc = src
+ else if(istype(AM, /mob))
+ var/mob/M = AM
+ M.loc = src
+ src.flush()
+
+/obj/machinery/disposal/deliveryChute/flush()
+ flushing = 1
+ flick("intake-closing", src)
+ var/obj/structure/disposalholder/H = new() // virtual holder object which actually
+ // travels through the pipes.
+ air_contents = new() // new empty gas resv.
+
+ sleep(10)
+ playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0)
+ sleep(5) // wait for animation to finish
+
+ H.init(src) // copy the contents of disposer to holder
+
+ H.start(src) // start the holder processing movement
+ flushing = 0
+ // now reset disposal state
+ flush = 0
+ if(mode == 2) // if was ready,
+ mode = 1 // switch to charging
update()
+ return
+
+/obj/machinery/disposal/deliveryChute/attackby(var/obj/item/I, var/mob/user)
+ if(!I || !user)
return
- Bumped(var/atom/movable/AM) //Go straight into the chute
- if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect) || istype(AM, /obj/mecha)) return
- switch(dir)
- if(NORTH)
- if(AM.loc.y != src.loc.y+1) return
- if(EAST)
- if(AM.loc.x != src.loc.x+1) return
- if(SOUTH)
- if(AM.loc.y != src.loc.y-1) return
- if(WEST)
- if(AM.loc.x != src.loc.x-1) return
-
- if(istype(AM, /obj))
- var/obj/O = AM
- O.loc = src
- else if(istype(AM, /mob))
- var/mob/M = AM
- M.loc = src
- src.flush()
-
- flush()
- flushing = 1
- flick("intake-closing", src)
- var/obj/structure/disposalholder/H = new() // virtual holder object which actually
- // travels through the pipes.
- air_contents = new() // new empty gas resv.
-
- sleep(10)
- playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0)
- sleep(5) // wait for animation to finish
-
- H.init(src) // copy the contents of disposer to holder
-
- H.start(src) // start the holder processing movement
- flushing = 0
- // now reset disposal state
- flush = 0
- if(mode == 2) // if was ready,
- mode = 1 // switch to charging
- update()
- return
-
- attackby(var/obj/item/I, var/mob/user)
- if(!I || !user)
+ if(I.is_screwdriver())
+ if(c_mode==0)
+ c_mode=1
+ playsound(src.loc, I.usesound, 50, 1)
+ to_chat(user, "You remove the screws around the power connection.")
+ return
+ else if(c_mode==1)
+ c_mode=0
+ playsound(src.loc, I.usesound, 50, 1)
+ to_chat(user, "You attach the screws around the power connection.")
+ return
+ else if(istype(I, /obj/item/weldingtool) && c_mode==1)
+ var/obj/item/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, W.usesound, 50, 1)
+ to_chat(user, "You start slicing the floorweld off the delivery chute.")
+ if(do_after(user,20 * W.toolspeed))
+ if(!src || !W.isOn()) return
+ to_chat(user, "You sliced the floorweld off the delivery chute.")
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ C.ptype = 8 // 8 = Delivery chute
+ C.update()
+ C.anchored = 1
+ C.density = 1
+ qdel(src)
+ return
+ else
+ to_chat(user, "You need more welding fuel to complete this task.")
return
-
- if(I.is_screwdriver())
- if(c_mode==0)
- c_mode=1
- playsound(src.loc, I.usesound, 50, 1)
- to_chat(user, "You remove the screws around the power connection.")
- return
- else if(c_mode==1)
- c_mode=0
- playsound(src.loc, I.usesound, 50, 1)
- to_chat(user, "You attach the screws around the power connection.")
- return
- else if(istype(I, /obj/item/weldingtool) && c_mode==1)
- var/obj/item/weldingtool/W = I
- if(W.remove_fuel(0,user))
- playsound(src.loc, W.usesound, 50, 1)
- to_chat(user, "You start slicing the floorweld off the delivery chute.")
- if(do_after(user,20 * W.toolspeed))
- if(!src || !W.isOn()) return
- to_chat(user, "You sliced the floorweld off the delivery chute.")
- var/obj/structure/disposalconstruct/C = new (src.loc)
- C.ptype = 8 // 8 = Delivery chute
- C.update()
- C.anchored = 1
- C.density = 1
- qdel(src)
- return
- else
- to_chat(user, "You need more welding fuel to complete this task.")
- return
/obj/machinery/disposal/deliveryChute/Destroy()
if(trunk)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index e90d5cc997f..a1574cf9304 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -1,6 +1,6 @@
/obj/machinery/r_n_d/server
name = "R&D Server"
- icon = 'icons/obj/machines/research_vr.dmi' //VOREStation Edit - New Icon
+ icon = 'icons/obj/machines/research_vr.dmi'
icon_state = "server"
var/datum/research/files
var/health = 100
@@ -17,10 +17,7 @@
/obj/machinery/r_n_d/server/Initialize(mapload)
. = ..()
- component_parts = list()
- component_parts += new /obj/item/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stack/cable_coil(src)
- component_parts += new /obj/item/stack/cable_coil(src)
+ default_apply_parts()
RefreshParts()
/obj/machinery/r_n_d/server/Destroy()
@@ -164,7 +161,6 @@
if(..())
return 1
- add_fingerprint(usr)
usr.set_machine(src)
if(!allowed(usr) && !emagged)
to_chat(usr, "You do not have the required access level")
diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index 78e4b118f97..93e585e133a 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -117,7 +117,6 @@
reset()
updateUsrDialog()
- add_fingerprint(usr)
return
/obj/machinery/keycard_auth/proc/reset()
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index a47b72d70d5..f6aa5716db1 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -14,7 +14,6 @@
/obj/machinery/computer/shuttle_control/attack_hand(user as mob)
if(..(user))
return
- //src.add_fingerprint(user) // Shouldn't need fingerprints just for looking at it.
if(!allowed(user))
to_chat(user, "Access Denied.")
return 1
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index 8c5f3dd7085..6fc0cb28b96 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -278,7 +278,7 @@
/obj/item/spellbook/oneuse/proc/onlearned(mob/user as mob)
used = 1
- user.visible_message("[src] glows dark for a second!")
+ user.visible_message(SPAN_CAUTION("[src] glows dark for a second!"))
/obj/item/spellbook/oneuse/attackby()
return
@@ -302,7 +302,7 @@
/obj/item/spellbook/oneuse/smoke/recoil(mob/user as mob)
..()
- to_chat(user, "Your stomach rumbles...")
+ to_chat(user, SPAN_CAUTION("Your stomach rumbles..."))
if(user.nutrition)
user.nutrition -= 200
if(user.nutrition <= 0)
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 36973dd592c..38e9076cb27 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -4,7 +4,7 @@
desc = "A bluespace telepad used for teleporting objects to and from a location."
icon = 'icons/obj/telescience.dmi'
icon_state = "pad-idle"
- anchored = 1
+ anchored = TRUE
use_power = USE_POWER_IDLE
circuit = /obj/item/circuitboard/telesci_pad
idle_power_usage = 200
@@ -13,12 +13,7 @@
/obj/machinery/telepad/Initialize(mapload)
. = ..()
- component_parts = list()
- component_parts += new /obj/item/ore/bluespace_crystal(src)
- component_parts += new /obj/item/stock_parts/capacitor(src)
- component_parts += new /obj/item/stock_parts/capacitor(src)
- component_parts += new /obj/item/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 5)
+ default_apply_parts()
RefreshParts()
update_icon()
@@ -41,7 +36,7 @@
if(istype(W, /obj/item/multitool))
var/obj/item/multitool/M = W
M.connectable = src
- to_chat(user, "You save the data in the [M.name]'s buffer.")
- return 1
+ to_chat(user, SPAN_CAUTION("You save the data in the [M.name]'s buffer."))
+ return TRUE
return ..()
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index 84b3055d74d..645c9598c73 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -49,26 +49,26 @@
/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/ore/bluespace_crystal))
if(crystals.len >= max_crystals)
- to_chat(user, "There are not enough crystal slots.")
+ to_chat(user, SPAN_WARNING("There are not enough crystal slots."))
return
if(!user.unEquip(W))
return
crystals += W
W.forceMove(src)
- user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.", "You insert [W] into \the [src]'s crystal slot.")
+ user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.", SPAN_NOTICE("You insert [W] into \the [src]'s crystal slot."))
updateDialog()
else if(istype(W, /obj/item/gps))
if(!inserted_gps)
inserted_gps = W
user.unEquip(W)
W.forceMove(src)
- user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.", "You insert [W] into \the [src]'s GPS device slot.")
+ user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.", SPAN_NOTICE("You insert [W] into \the [src]'s GPS device slot."))
else if(istype(W, /obj/item/multitool))
var/obj/item/multitool/M = W
if(M.connectable && istype(M.connectable, /obj/machinery/telepad))
telepad = M.connectable
M.connectable = null
- to_chat(user, "You upload the data from the [W.name]'s buffer.")
+ to_chat(user, SPAN_CAUTION("You upload the data from the [W.name]'s buffer."))
else
return ..()
@@ -88,7 +88,7 @@
var/data[0]
if(!telepad)
- in_use = 0 //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console
+ in_use = 0 //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console
data["noTelepad"] = 1
else
data["insertedGps"] = inserted_gps
diff --git a/code/modules/tgui/modules/teleporter.dm b/code/modules/tgui/modules/teleporter.dm
index f7e7c9808db..032da6bddd8 100644
--- a/code/modules/tgui/modules/teleporter.dm
+++ b/code/modules/tgui/modules/teleporter.dm
@@ -3,8 +3,8 @@
tgui_id = "Teleporter"
var/locked_name = "Not Locked"
var/obj/item/locked = null
- var/obj/machinery/teleport/station/station = null
- var/obj/machinery/teleport/hub/hub = null
+ var/obj/machinery/tele_projector/station = null
+ var/obj/machinery/tele_pad/hub = null
/datum/tgui_module/teleport_control/ui_data(mob/user, datum/tgui/ui, datum/ui_state/state)
var/list/data = ..()
diff --git a/code/modules/unit_tests/teleporters.dm b/code/modules/unit_tests/teleporters.dm
index fa2624adaa0..7463bc70ee8 100644
--- a/code/modules/unit_tests/teleporters.dm
+++ b/code/modules/unit_tests/teleporters.dm
@@ -1,7 +1,7 @@
/datum/unit_test/auto_teleporter_linking/Run()
// Put down the teleporter machinery
- var/obj/machinery/teleport/hub/hub = allocate(/obj/machinery/teleport/hub)
- var/obj/machinery/teleport/station/station = allocate(/obj/machinery/teleport/station, locate(run_loc_bottom_left.x + 1, run_loc_bottom_left.y, run_loc_bottom_left.z))
+ var/obj/machinery/tele_pad/hub = allocate(/obj/machinery/tele_pad)
+ var/obj/machinery/tele_projector/station = allocate(/obj/machinery/tele_projector, locate(run_loc_bottom_left.x + 1, run_loc_bottom_left.y, run_loc_bottom_left.z))
var/obj/machinery/computer/teleporter/computer = allocate(/obj/machinery/computer/teleporter, locate(run_loc_bottom_left.x + 2, run_loc_bottom_left.y, run_loc_bottom_left.z))
TEST_ASSERT_EQUAL(hub.power_station, station, "Hub didn't link to the station")
diff --git a/code/modules/vehicles/Securitrain_vr.dm b/code/modules/vehicles/Securitrain_vr.dm
index 5ee178b57b9..b75208be36e 100644
--- a/code/modules/vehicles/Securitrain_vr.dm
+++ b/code/modules/vehicles/Securitrain_vr.dm
@@ -4,7 +4,7 @@
/obj/vehicle/train/security/engine
name = "Security Cart"
desc = "A ridable electric car designed for pulling trolleys as well as personal transport."
- icon = 'icons/obj/vehicles_vr.dmi'
+ icon = 'icons/obj/vehicles.dmi'
icon_state = "paddywagon"
on = 0
powered = 1
@@ -29,14 +29,14 @@
/obj/item/key/security
name = "The Security Cart key"
desc = "The Security Cart Key used to start it."
- icon = 'icons/obj/vehicles_vr.dmi'
+ icon = 'icons/obj/vehicles.dmi'
icon_state = "securikey"
w_class = ITEMSIZE_TINY
/obj/vehicle/train/security/trolley
name = "Train trolley"
desc = "A trolly designed to transport security personnel or prisoners."
- icon = 'icons/obj/vehicles_vr.dmi'
+ icon = 'icons/obj/vehicles.dmi'
icon_state = "paddy_trailer"
anchored = 0
passenger_allowed = 1
@@ -50,7 +50,7 @@
/obj/vehicle/train/security/trolley/cargo
name = "Train trolley"
desc = "A trolley designed to transport security equipment to a scene."
- icon = 'icons/obj/vehicles_vr.dmi'
+ icon = 'icons/obj/vehicles.dmi'
icon_state = "secitemcarrierbot"
passenger_allowed = 0 //Stick a man inside the box. :v
load_item_visible = 0 //The load is supposed to be invisible.
diff --git a/code/modules/vehicles/rover_vr.dm b/code/modules/vehicles/rover_vr.dm
index c802050ea13..2e7490407f5 100644
--- a/code/modules/vehicles/rover_vr.dm
+++ b/code/modules/vehicles/rover_vr.dm
@@ -39,14 +39,14 @@
/obj/item/key/rover
name = "The Rover key"
desc = "The Rover key used to start it."
- icon = 'icons/obj/vehicles_vr.dmi'
+ icon = 'icons/obj/vehicles.dmi'
icon_state = "securikey"
w_class = ITEMSIZE_TINY
/obj/vehicle/train/rover/trolley
name = "Train trolley"
desc = "A trolley designed to transport security equipment to a scene."
- icon = 'icons/obj/vehicles_vr.dmi'
+ icon = 'icons/obj/vehicles.dmi'
icon_state = "secitemcarrierbot"
anchored = 0
passenger_allowed = 0
diff --git a/code/modules/virus2/centrifuge.dm b/code/modules/virus2/centrifuge.dm
index be9a888be8e..48b1da839fa 100644
--- a/code/modules/virus2/centrifuge.dm
+++ b/code/modules/virus2/centrifuge.dm
@@ -100,8 +100,6 @@
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
- src.add_fingerprint(user)
-
if (href_list["close"])
user.unset_machine()
ui.close()
diff --git a/code/modules/virus2/curer.dm b/code/modules/virus2/curer.dm
index 4f2b4a3844d..79b4992d600 100644
--- a/code/modules/virus2/curer.dm
+++ b/code/modules/virus2/curer.dm
@@ -89,7 +89,6 @@
container.loc = src.loc
container = null
- src.add_fingerprint(usr)
src.updateUsrDialog()
diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm
index 8384db7d7f1..0d9497176ff 100644
--- a/code/modules/virus2/diseasesplicer.dm
+++ b/code/modules/virus2/diseasesplicer.dm
@@ -130,8 +130,6 @@
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
- src.add_fingerprint(user)
-
if (href_list["close"])
user.unset_machine()
ui.close()
diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm
index f0f4350a286..ac4538a74ff 100644
--- a/code/modules/virus2/dishincubator.dm
+++ b/code/modules/virus2/dishincubator.dm
@@ -146,13 +146,12 @@
SSnanoui.update_uis(src)
/obj/machinery/disease2/incubator/Topic(href, href_list)
- if (..()) return 1
+ if (..())
+ return TRUE
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
- src.add_fingerprint(user)
-
if (href_list["close"])
user.unset_machine()
ui.close()
diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm
index f604d87e55b..40ffc91aa81 100644
--- a/code/modules/virus2/isolator.dm
+++ b/code/modules/virus2/isolator.dm
@@ -128,8 +128,6 @@
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
- src.add_fingerprint(user)
-
if (href_list["close"])
user.unset_machine()
ui.close()
diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm
index 8ae7a97208d..9b08eee80f8 100644
--- a/code/modules/xenoarcheaology/artifacts/artifact.dm
+++ b/code/modules/xenoarcheaology/artifacts/artifact.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "ano00"
var/icon_num = 0
- density = 1
+ density = TRUE
var/datum/artifact_effect/my_effect
var/datum/artifact_effect/secondary_effect
var/being_used = 0
diff --git a/code/modules/xenoarcheaology/artifacts/artifact_find.dm b/code/modules/xenoarcheaology/artifacts/artifact_find.dm
index d691b92af9a..934679690dc 100644
--- a/code/modules/xenoarcheaology/artifacts/artifact_find.dm
+++ b/code/modules/xenoarcheaology/artifacts/artifact_find.dm
@@ -16,4 +16,4 @@
100;/obj/machinery/giga_drill,
100;/obj/machinery/replicator,
150;/obj/structure/crystal,
-1000;/obj/machinery/artifact)
+ 1000;/obj/machinery/artifact)
diff --git a/code/modules/xenoarcheaology/artifacts/artifact_vr.dm b/code/modules/xenoarcheaology/artifacts/artifact_vr.dm
deleted file mode 100644
index e52a7228e26..00000000000
--- a/code/modules/xenoarcheaology/artifacts/artifact_vr.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/artifact
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
diff --git a/code/modules/xenoarcheaology/artifacts/crystal.dm b/code/modules/xenoarcheaology/artifacts/crystal.dm
index e598d08590e..29a0b574a1f 100644
--- a/code/modules/xenoarcheaology/artifacts/crystal.dm
+++ b/code/modules/xenoarcheaology/artifacts/crystal.dm
@@ -15,7 +15,7 @@
"It's mesmerizing to behold.")
/obj/structure/crystal/Destroy()
- visible_message("[src] shatters!")
+ visible_message(SPAN_DANGER("[src] shatters!"))
if(prob(75))
new /obj/item/material/shard/phoron(loc)
if(prob(50))
diff --git a/code/modules/xenoarcheaology/finds/eguns_vr.dm b/code/modules/xenoarcheaology/finds/eguns_vr.dm
deleted file mode 100644
index 902905e059b..00000000000
--- a/code/modules/xenoarcheaology/finds/eguns_vr.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/item/gun/energy/laser/xenoarch
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/gun/energy/laser/practice/xenoarch
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/gun/energy/xray/xenoarch
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/gun/energy/captain/xenoarch
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm
index 72ed3469bcf..249e4b98058 100644
--- a/code/modules/xenoarcheaology/finds/find_spawning.dm
+++ b/code/modules/xenoarcheaology/finds/find_spawning.dm
@@ -55,7 +55,7 @@
else
new_item = new /obj/item/reagent_containers/glass/beaker(src.loc)
new_item.icon = 'icons/obj/xenoarchaeology.dmi'
- new_item.icon_state = "urn[rand(1,2)]"
+ new_item.icon_state = "urn[rand(1,3)]"
apply_image_decorations = 1
if(prob(20))
additional_desc = "It [pick("whispers faintly","makes a quiet roaring sound","whistles softly","thrums quietly","throbs")] if you put it to your ear."
@@ -76,7 +76,7 @@
name = "statuette"
icon = 'icons/obj/xenoarchaeology.dmi'
item_type = "statuette"
- icon_state = "statuette[rand(1,3)]"
+ icon_state = "statuette[rand(1,4)]"
additional_desc = "It depicts a [pick("small","ferocious","wild","pleasing","hulking")] \
[pick("alien figure","rodent-like creature","reptilian alien","primate","unidentifiable object")] \
[pick("performing unspeakable acts","posing heroically","in a fetal position","cheering","sobbing","making a plaintive gesture","making a rude gesture")]."
diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm
index 96de1710987..6203d2da40b 100644
--- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm
+++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm
@@ -3,9 +3,9 @@
desc = "Studies the emissions of anomalous materials to discover their uses."
icon = 'icons/obj/virology.dmi'
icon_state = "isolator"
- anchored = 1
- density = 1
- var/scan_in_progress = 0
+ anchored = TRUE
+ density = TRUE
+ var/scan_in_progress = FALSE
var/scan_num = 0
var/obj/scanned_obj
var/obj/machinery/artifact_scanpad/owned_scanner = null
@@ -56,7 +56,7 @@
/obj/machinery/artifact_analyser/process(delta_time)
if(scan_in_progress && world.time > scan_completion_time)
- scan_in_progress = 0
+ scan_in_progress = FALSE
updateDialog()
var/results = ""
@@ -80,8 +80,8 @@
if(scanned_object && istype(scanned_object, /obj/machinery/artifact))
var/obj/machinery/artifact/A = scanned_object
- A.anchored = 0
- A.being_used = 0
+ A.anchored = FALSE
+ A.being_used = FALSE
scanned_object = null
/obj/machinery/artifact_analyser/Topic(href, href_list)
@@ -89,7 +89,7 @@
if(!owned_scanner)
reconnect_scanner()
if(owned_scanner)
- var/artifact_in_use = 0
+ var/artifact_in_use = FALSE
for(var/obj/O in owned_scanner.loc)
if(O == owned_scanner)
continue
@@ -98,23 +98,24 @@
if(istype(O, /obj/machinery/artifact))
var/obj/machinery/artifact/A = O
if(A.being_used)
- artifact_in_use = 1
+ artifact_in_use = TRUE
else
- A.anchored = 1
- A.being_used = 1
+ A.anchored = TRUE
+ A.being_used = TRUE
if(artifact_in_use)
src.visible_message("[name] states, \"Cannot scan. Too much interference.\"")
else
- scanned_object = O
- scan_in_progress = 1
+ scanned_object = FALSE
+ scan_in_progress = TRUE
scan_completion_time = world.time + scan_duration
src.visible_message("[name] states, \"Scanning begun.\"")
+ flick("xenoarch_scanner1", owned_scanner)
break
if(!scanned_object)
src.visible_message("[name] states, \"Unable to isolate scan target.\"")
if(href_list["halt_scan"])
- scan_in_progress = 0
+ scan_in_progress = FALSE
src.visible_message("[name] states, \"Scanning halted.\"")
if(href_list["close"])
diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm
index 80dcecb628a..9fde6a8bb07 100644
--- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm
+++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm
@@ -36,7 +36,7 @@
return..()
/obj/machinery/artifact_harvester/attack_hand(var/mob/user as mob)
- add_fingerprint(user)
+ ..()
interact(user)
/obj/machinery/artifact_harvester/interact(var/mob/user as mob)
diff --git a/code/modules/xenoarcheaology/tools/artifact_scanner.dm b/code/modules/xenoarcheaology/tools/artifact_scanner.dm
index c5bdfe015ab..4addae932db 100644
--- a/code/modules/xenoarcheaology/tools/artifact_scanner.dm
+++ b/code/modules/xenoarcheaology/tools/artifact_scanner.dm
@@ -1,7 +1,7 @@
/obj/machinery/artifact_scanpad
name = "Anomaly Scanner Pad"
desc = "Place things here for scanning."
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "tele0"
- anchored = 1
- density = 0
+ icon = 'icons/obj/xenoarchaeology.dmi'
+ icon_state = "xenoarch_scanner0"
+ anchored = TRUE
+ density = FALSE
diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
index cf5b41cecf9..606c458349d 100644
--- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm
+++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
@@ -358,6 +358,4 @@
if(scanned_item)
scanned_item.loc = loc
scanned_item = null
-
- add_fingerprint(usr)
return 1 // update UIs attached to this object
diff --git a/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm b/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm
deleted file mode 100644
index 5c00caca1ac..00000000000
--- a/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/obj/item/pickaxe/brush
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/pickaxe/one_pick
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/pickaxe/two_pick
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/pickaxe/three_pick
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/pickaxe/four_pick
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/pickaxe/five_pick
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/pickaxe/six_pick
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/pickaxe/hand
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
diff --git a/code/modules/xenoarcheaology/tools/tools_vr.dm b/code/modules/xenoarcheaology/tools/tools_vr.dm
deleted file mode 100644
index 0041c083c9b..00000000000
--- a/code/modules/xenoarcheaology/tools/tools_vr.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-/obj/item/depth_scanner //On second thought, the ano_scanner sprite looks better as a depth scanner instead of an anomaly scanner.
- icon_state = "ano_scanner"
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi
index 1a08b6909d7..641c5862591 100644
Binary files a/icons/obj/Cryogenic2.dmi and b/icons/obj/Cryogenic2.dmi differ
diff --git a/icons/obj/Cryogenic2_vr.dmi b/icons/obj/Cryogenic2_vr.dmi
deleted file mode 100644
index 69d24bc15e8..00000000000
Binary files a/icons/obj/Cryogenic2_vr.dmi and /dev/null differ
diff --git a/icons/obj/airlock_machines.dmi b/icons/obj/airlock_machines.dmi
index 45298943940..cfac1a5e4a9 100644
Binary files a/icons/obj/airlock_machines.dmi and b/icons/obj/airlock_machines.dmi differ
diff --git a/icons/obj/biogenerator.dmi b/icons/obj/biogenerator.dmi
index c65a9571b09..f91840d1c5b 100644
Binary files a/icons/obj/biogenerator.dmi and b/icons/obj/biogenerator.dmi differ
diff --git a/icons/obj/biogenerator_vr.dmi b/icons/obj/biogenerator_vr.dmi
deleted file mode 100644
index aca2c2716fc..00000000000
Binary files a/icons/obj/biogenerator_vr.dmi and /dev/null differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index d359f388d68..61ae2e23a07 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/chemical_vr.dmi b/icons/obj/chemical_vr.dmi
deleted file mode 100644
index ce49f9d4e87..00000000000
Binary files a/icons/obj/chemical_vr.dmi and /dev/null differ
diff --git a/icons/obj/machines/teleporter.dmi b/icons/obj/machines/teleporter.dmi
new file mode 100644
index 00000000000..0f0765d8c2c
Binary files /dev/null and b/icons/obj/machines/teleporter.dmi differ
diff --git a/icons/obj/new console + pad.png b/icons/obj/new console + pad.png
new file mode 100644
index 00000000000..cf74d73796c
Binary files /dev/null and b/icons/obj/new console + pad.png differ
diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi
index 4b299a3d3a6..21c01e7359d 100644
Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ
diff --git a/icons/obj/radio_vr.dmi b/icons/obj/radio_vr.dmi
deleted file mode 100644
index 3abe9253a7e..00000000000
Binary files a/icons/obj/radio_vr.dmi and /dev/null differ
diff --git a/icons/obj/terminals.dmi b/icons/obj/terminals.dmi
index bc4aa308305..5f4a7b1c8de 100644
Binary files a/icons/obj/terminals.dmi and b/icons/obj/terminals.dmi differ
diff --git a/icons/obj/terminals_vr.dmi b/icons/obj/terminals_vr.dmi
deleted file mode 100644
index 1f1376d1b39..00000000000
Binary files a/icons/obj/terminals_vr.dmi and /dev/null differ
diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi
index 18b2f51abfb..2626bdf6610 100644
Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ
diff --git a/icons/obj/vehicles_vr.dmi b/icons/obj/vehicles_vr.dmi
deleted file mode 100644
index 9e1d04217a3..00000000000
Binary files a/icons/obj/vehicles_vr.dmi and /dev/null differ
diff --git a/icons/obj/virology.dmi b/icons/obj/virology.dmi
index a009e83a6d0..224c4c90148 100644
Binary files a/icons/obj/virology.dmi and b/icons/obj/virology.dmi differ
diff --git a/icons/obj/virology_vr.dmi b/icons/obj/virology_vr.dmi
deleted file mode 100644
index 224c4c90148..00000000000
Binary files a/icons/obj/virology_vr.dmi and /dev/null differ
diff --git a/icons/obj/watercloset - Copy.dmi b/icons/obj/watercloset - Copy.dmi
new file mode 100644
index 00000000000..0e452b252cd
Binary files /dev/null and b/icons/obj/watercloset - Copy.dmi differ
diff --git a/icons/obj/xenoarchaeology.dmi b/icons/obj/xenoarchaeology.dmi
index 42642bbe908..3781ab58ee0 100644
Binary files a/icons/obj/xenoarchaeology.dmi and b/icons/obj/xenoarchaeology.dmi differ
diff --git a/icons/obj/xenoarchaeology_vr.dmi b/icons/obj/xenoarchaeology_vr.dmi
deleted file mode 100644
index ff1a8ab4cd0..00000000000
Binary files a/icons/obj/xenoarchaeology_vr.dmi and /dev/null differ
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index 3207855dbc7..783f2d9f9aa 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -1,4 +1,12 @@
-client/script = {"