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 += "" - dat += "
[GLOB.tagger_locations[i]]
" - for(var/i = 1, i <= GLOB.tagger_locations.len, i++) - dat += "" + if (i%4==0) + dat += "" - if (i%4==0) - dat += "" + dat += "
[GLOB.tagger_locations[i]]

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 = {"