diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cafe_of_broken_dreams.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cafe_of_broken_dreams.dmm
index f06aa272a98a..d289d6279703 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cafe_of_broken_dreams.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cafe_of_broken_dreams.dmm
@@ -105,11 +105,6 @@
/obj/machinery/light/small,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/powered)
-"aT" = (
-/obj/structure/table/wood/bar,
-/obj/item/pda/chameleon,
-/turf/open/floor/wood,
-/area/ruin/powered)
"aU" = (
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
@@ -121,7 +116,6 @@
/obj/structure/sink{
desc = "Clean off your radiation.";
dir = 8;
- icon_state = "sink";
pixel_x = -12;
pixel_y = 2
},
@@ -187,8 +181,7 @@
/area/ruin/powered)
"bi" = (
/obj/machinery/light{
- dir = 8;
- icon_state = "tube"
+ dir = 8
},
/turf/open/floor/wood,
/area/ruin/powered)
@@ -243,8 +236,7 @@
/area/ruin/powered)
"bv" = (
/obj/structure/chair/comfy/beige{
- dir = 4;
- icon_state = "comfychair"
+ dir = 4
},
/turf/open/floor/wood,
/area/ruin/powered)
@@ -264,8 +256,7 @@
/area/ruin/powered)
"bz" = (
/obj/structure/chair/comfy/beige{
- dir = 1;
- icon_state = "comfychair"
+ dir = 1
},
/turf/open/floor/wood,
/area/ruin/powered)
@@ -274,8 +265,7 @@
dir = 4
},
/obj/machinery/light{
- dir = 8;
- icon_state = "tube"
+ dir = 8
},
/turf/open/floor/wood,
/area/ruin/powered)
@@ -286,8 +276,7 @@
/area/ruin/powered)
"bE" = (
/obj/machinery/light{
- dir = 4;
- icon_state = "tube"
+ dir = 4
},
/turf/open/floor/wood{
icon_state = "wood-broken4"
@@ -322,8 +311,7 @@
"bR" = (
/obj/structure/table/wood,
/obj/machinery/light{
- dir = 8;
- icon_state = "tube"
+ dir = 8
},
/turf/open/floor/wood,
/area/ruin/powered)
@@ -427,8 +415,7 @@
/area/ruin/powered)
"zW" = (
/obj/machinery/light{
- dir = 1;
- icon_state = "tube"
+ dir = 1
},
/turf/open/floor/wood,
/area/ruin/powered)
@@ -2681,7 +2668,7 @@ ai
bj
ai
ai
-aT
+aw
ai
ai
ai
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm
index c6ca0c00762e..29c539fa9a12 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm
@@ -49,8 +49,7 @@
/area/ruin/unpowered)
"al" = (
/obj/structure/chair/bananium{
- dir = 8;
- icon_state = "bananium_chair"
+ dir = 8
},
/turf/open/floor/mineral/bananium,
/area/ruin/unpowered)
@@ -62,10 +61,8 @@
/obj/item/clothing/gloves/color/rainbow,
/obj/item/clothing/mask/gas/clown_hat,
/obj/item/clothing/shoes/clown_shoes,
-/obj/item/clothing/under/rank/clown,
/obj/item/storage/backpack/clown,
/obj/item/storage/backpack/duffelbag/clown,
-/obj/item/cartridge/virus/clown,
/turf/open/floor/mineral/bananium,
/area/ruin/unpowered)
"ao" = (
@@ -73,9 +70,7 @@
/turf/open/floor/mineral/bananium,
/area/ruin/unpowered)
"ap" = (
-/obj/structure/bed{
- pixel_y = 0
- },
+/obj/structure/bed,
/obj/item/bedsheet/clown,
/turf/open/floor/mineral/bananium,
/area/ruin/unpowered)
@@ -350,16 +345,13 @@
"bl" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
@@ -391,24 +383,20 @@
},
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
"br" = (
/obj/item/grown/bananapeel,
/obj/effect/turf_decal/stripes/line{
- dir = 8;
- icon_state = "warningline"
+ dir = 8
},
/turf/open/floor/plasteel/dark{
dir = 8
@@ -418,16 +406,13 @@
/obj/effect/decal/cleanable/oil/streak,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
@@ -448,16 +433,13 @@
/obj/item/paperplane,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
@@ -465,23 +447,19 @@
/obj/item/coin/bananium,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
"bx" = (
/obj/effect/turf_decal/stripes/line{
- dir = 8;
- icon_state = "warningline"
+ dir = 8
},
/turf/open/floor/plasteel/dark{
dir = 8
@@ -493,16 +471,13 @@
/obj/item/pickaxe/drill,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
@@ -523,16 +498,13 @@
/obj/structure/mecha_wreckage/honker,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
@@ -540,16 +512,13 @@
/obj/effect/decal/cleanable/robot_debris,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
@@ -557,16 +526,13 @@
/obj/effect/decal/cleanable/shreds,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
- dir = 4;
- icon_state = "tile_corner"
+ dir = 4
},
/obj/effect/turf_decal/tile/red{
- dir = 1;
- icon_state = "tile_corner"
+ dir = 1
},
/obj/effect/turf_decal/tile/red{
- dir = 8;
- icon_state = "tile_corner"
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered)
diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
index c6eac51cbe7d..37a3cde83a85 100644
--- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
+++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
@@ -613,7 +613,6 @@
/obj/item/ammo_casing/c45{
caliber = null;
desc = "A .45 bullet casing. This one is spent.";
- icon_state = "s-casing";
name = "spent bullet casing"
},
/obj/machinery/light{
@@ -924,7 +923,6 @@
/area/ruin/space/has_grav/derelictoutpost)
"ck" = (
/obj/machinery/power/apc{
- dir = 2;
name = "Tradepost APC";
pixel_y = -23;
start_charge = 0
@@ -1278,7 +1276,6 @@
/obj/item/ammo_casing/c45{
caliber = null;
desc = "A .45 bullet casing. This one is spent.";
- icon_state = "s-casing";
name = "spent bullet casing"
},
/turf/open/floor/plasteel,
@@ -1345,7 +1342,6 @@
/obj/item/ammo_casing/c45{
caliber = null;
desc = "A .45 bullet casing. This one is spent.";
- icon_state = "s-casing";
name = "spent bullet casing"
},
/obj/structure/alien/weeds{
@@ -1742,7 +1738,6 @@
/obj/item/ammo_casing/c45{
caliber = null;
desc = "A .45 bullet casing. This one is spent.";
- icon_state = "s-casing";
name = "spent bullet casing"
},
/obj/structure/alien/weeds{
@@ -2124,12 +2119,6 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/derelictoutpost/cargostorage)
-"eC" = (
-/obj/structure/closet/crate,
-/obj/item/pda/clear,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/ruin/space/has_grav/derelictoutpost/cargostorage)
"eE" = (
/obj/structure/closet/crate/internals,
/obj/item/tank/internals/emergency_oxygen/engi,
@@ -2589,7 +2578,7 @@ dV
ej
eo
ex
-eC
+eF
dL
aR
aZ
diff --git a/_maps/RandomRuins/SpaceRuins/gameroom.dmm b/_maps/RandomRuins/SpaceRuins/gameroom.dmm
index 7eafae0e9cc8..a08d0f63384d 100644
--- a/_maps/RandomRuins/SpaceRuins/gameroom.dmm
+++ b/_maps/RandomRuins/SpaceRuins/gameroom.dmm
@@ -743,7 +743,7 @@
/area/ruin/space/has_grav/powered/gaming)
"HV" = (
/obj/machinery/vending/gifts{
- products = list(/obj/item/toy/heartballoon = 3, /obj/item/toy/toyballoon = 3, /obj/item/toy/gun/toyglock = 3, /obj/item/toy/gun/toyflaregun = 3, /obj/item/toy/toygrenade = 15, /obj/item/toy/plush/teddybear = 5, /obj/item/toy/plush/stuffedmonkey = 5, /obj/item/toy/plush/flowerbunch = 5, /obj/item/camera_film = 30, /obj/item/storage/photo_album = 5, /obj/item/storage/photobook = 5, /obj/item/hourglass = 2, /obj/item/toy/frisbee = 2, /obj/item/toy/boomerang = 2, /obj/item/storage/bag/photo = 5, /obj/item/toy/plush/bubbleplush = 2, /obj/item/toy/plush/plushvar = 2, /obj/item/toy/plush/narplush = 2, /obj/item/toy/plush/lizardplushie = 2, /obj/item/toy/plush/snakeplushie = 2, /obj/item/toy/plush/nukeplushie = 2, /obj/item/toy/plush/slimeplushie = 2, /obj/item/toy/plush/inorixplushie = 2, /obj/item/toy/plush/beeplushie = 2, /obj/item/instrument/accordion = 1, /obj/item/instrument/eguitar = 1, /obj/item/instrument/glockenspiel = 1, /obj/item/instrument/harmonica = 1, /obj/item/instrument/recorder = 1, /obj/item/instrument/saxophone = 1, /obj/item/instrument/trombone = 1, /obj/item/instrument/trumpet = 1, /obj/item/instrument/piano_synth = 1, /obj/item/instrument/banjo = 1, /obj/item/storage/backpack = 4, /obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 2, /obj/item/reagent_containers/pill/patch/silver_sulf = 2, /obj/item/reagent_containers/glass/bottle/charcoal = 1, /obj/item/reagent_containers/pill/epinephrine = 1, /obj/item/reagent_containers/glass/beaker/large = 2, /obj/item/flashlight = 3, /obj/item/flashlight/flare = 1, /obj/item/storage/toolbox/mechanical = 1, /obj/item/stack/cable_coil/random = 4, /obj/item/pda = 8, /obj/item/cartridge/engineering = 2, /obj/item/cartridge/atmos = 2, /obj/item/cartridge/medical = 2, /obj/item/cartridge/chemistry = 2, /obj/item/cartridge/janitor = 2, /obj/item/cartridge/lawyer = 2, /obj/item/cartridge/curator = 2, /obj/item/cartridge/roboticist = 2, /obj/item/cartridge/quartermaster = 2, /obj/item/storage/fancy/candle_box = 2, /obj/item/storage/crayons = 2)
+ products = list(/obj/item/toy/heartballoon = 3, /obj/item/toy/toyballoon = 3, /obj/item/toy/gun/toyglock = 3, /obj/item/toy/gun/toyflaregun = 3, /obj/item/toy/toygrenade = 15, /obj/item/toy/plush/teddybear = 5, /obj/item/toy/plush/stuffedmonkey = 5, /obj/item/toy/plush/flowerbunch = 5, /obj/item/camera_film = 30, /obj/item/storage/photo_album = 5, /obj/item/storage/photobook = 5, /obj/item/hourglass = 2, /obj/item/toy/frisbee = 2, /obj/item/toy/boomerang = 2, /obj/item/storage/bag/photo = 5, /obj/item/toy/plush/bubbleplush = 2, /obj/item/toy/plush/plushvar = 2, /obj/item/toy/plush/narplush = 2, /obj/item/toy/plush/lizardplushie = 2, /obj/item/toy/plush/snakeplushie = 2, /obj/item/toy/plush/nukeplushie = 2, /obj/item/toy/plush/slimeplushie = 2, /obj/item/toy/plush/inorixplushie = 2, /obj/item/toy/plush/beeplushie = 2, /obj/item/instrument/accordion = 1, /obj/item/instrument/eguitar = 1, /obj/item/instrument/glockenspiel = 1, /obj/item/instrument/harmonica = 1, /obj/item/instrument/recorder = 1, /obj/item/instrument/saxophone = 1, /obj/item/instrument/trombone = 1, /obj/item/instrument/trumpet = 1, /obj/item/instrument/piano_synth = 1, /obj/item/instrument/banjo = 1, /obj/item/storage/backpack = 4, /obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 2, /obj/item/reagent_containers/pill/patch/silver_sulf = 2, /obj/item/reagent_containers/glass/bottle/charcoal = 1, /obj/item/reagent_containers/pill/epinephrine = 1, /obj/item/reagent_containers/glass/beaker/large = 2, /obj/item/flashlight = 3, /obj/item/flashlight/flare = 1, /obj/item/storage/toolbox/mechanical = 1, /obj/item/stack/cable_coil/random = 4, /obj/item/storage/fancy/candle_box = 2, /obj/item/storage/crayons = 2)
},
/obj/machinery/light{
dir = 8
diff --git a/_maps/RandomZLevels/VR/syndicate_trainer.dmm b/_maps/RandomZLevels/VR/syndicate_trainer.dmm
index c05dddb97fd0..506717885e7d 100644
--- a/_maps/RandomZLevels/VR/syndicate_trainer.dmm
+++ b/_maps/RandomZLevels/VR/syndicate_trainer.dmm
@@ -538,9 +538,7 @@
/area/awaymission/centcomAway/hangar)
"dm" = (
/obj/machinery/door/window/northright{
- base_state = "right";
dir = 4;
- icon_state = "right";
name = "Security Desk";
req_access = list("cent_specops")
},
@@ -645,9 +643,7 @@
/area/awaymission/centcomAway/hangar)
"dN" = (
/obj/structure/closet/crate,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/indestructible,
/area/awaymission/centcomAway/hangar)
"dO" = (
@@ -1087,10 +1083,6 @@
/obj/effect/spawner/structure/window/hollow/reinforced/end,
/turf/open/indestructible,
/area/awaymission/centcomAway/general)
-"gs" = (
-/obj/machinery/pdapainter,
-/turf/open/indestructible,
-/area/awaymission/centcomAway/general)
"gt" = (
/obj/machinery/photocopier,
/obj/item/paper/fluff/awaymissions/centcom/gateway_memo,
@@ -1785,8 +1777,7 @@
/area/awaymission/centcomAway/general)
"kD" = (
/obj/machinery/door/window/northright{
- dir = 2;
- icon_state = "right"
+ dir = 2
},
/turf/open/indestructible,
/area/awaymission/centcomAway/general)
@@ -2236,9 +2227,7 @@
/turf/open/indestructible,
/area/awaymission/centcomAway/cafe)
"mK" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/indestructible,
/area/awaymission/centcomAway/cafe)
"mN" = (
@@ -2317,9 +2306,7 @@
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/thunderdome)
"nc" = (
-/obj/effect/turf_decal/tile/green{
- dir = 2
- },
+/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/thunderdome)
"nd" = (
@@ -2447,9 +2434,7 @@
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/thunderdome)
"nt" = (
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/thunderdome)
"nu" = (
@@ -2529,6 +2514,10 @@
/obj/effect/landmark/vr_spawn/syndicate,
/turf/open/indestructible,
/area/awaymission/centcomAway/hangar)
+"Xf" = (
+/obj/machinery/pdapainter,
+/turf/open/indestructible,
+/area/awaymission/centcomAway/general)
(1,1,1) = {"
aa
@@ -11036,7 +11025,7 @@ fw
gW
gW
fw
-gs
+Xf
gW
gN
gN
diff --git a/_maps/RandomZLevels/VR/vrhub.dmm b/_maps/RandomZLevels/VR/vrhub.dmm
index 0afe20e162df..5a751960db7b 100644
--- a/_maps/RandomZLevels/VR/vrhub.dmm
+++ b/_maps/RandomZLevels/VR/vrhub.dmm
@@ -503,16 +503,13 @@
"da" = (
/obj/item/toy/spinningtoy{
desc = "I hear if you suicide near it, it turns red!";
- dir = 2;
icon = 'icons/effects/160x160.dmi';
icon_state = "singularity_s5";
light_color = "#FAA019";
- light_power = 1;
light_range = 10;
name = "obvious reference";
pixel_x = -96;
- pixel_y = -64;
- worn_x_dimension = 32
+ pixel_y = -64
},
/turf/open/floor/fakespace,
/area/awaymission/vr/hub)
@@ -630,6 +627,10 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/awaymission/vr/megafauna_arena)
+"ew" = (
+/obj/machinery/pdapainter,
+/turf/open/indestructible,
+/area/awaymission/vr/syndicate)
"ez" = (
/obj/structure/barricade/security/murderdome,
/obj/structure/barricade/security/murderdome,
@@ -1429,8 +1430,7 @@
/area/awaymission/vr/syndicate)
"rY" = (
/obj/machinery/sleep_console{
- dir = 8;
- icon_state = "console"
+ dir = 8
},
/turf/open/indestructible,
/area/awaymission/vr/syndicate)
@@ -1535,9 +1535,7 @@
/turf/open/indestructible,
/area/awaymission/vr/syndicate)
"tB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/indestructible,
/area/awaymission/vr/syndicate)
"tC" = (
@@ -1889,8 +1887,7 @@
/area/awaymission/vr/syndicate)
"Aa" = (
/obj/machinery/sleep_console{
- dir = 8;
- icon_state = "console"
+ dir = 8
},
/turf/open/floor/mineral/titanium/blue,
/area/awaymission/vr/syndicate)
@@ -2025,7 +2022,6 @@
dir = 1;
network = list("ss13","virtual");
pixel_x = 16;
- pixel_y = 0;
resistance_flags = 64
},
/obj/effect/light_emitter/vr_hub,
@@ -2366,16 +2362,11 @@
c_tag = "Virtual Reality";
dir = 8;
network = list("ss13","virtual");
- pixel_x = 0;
pixel_y = -16;
resistance_flags = 64
},
/turf/open/indestructible,
/area/awaymission/vr/hub)
-"In" = (
-/obj/machinery/pdapainter,
-/turf/open/indestructible,
-/area/awaymission/vr/syndicate)
"Ir" = (
/turf/closed/indestructible/riveted,
/area/awaymission/vr/megafauna_arena)
@@ -2531,8 +2522,7 @@
/area/awaymission/vr/murderdome)
"KV" = (
/obj/machinery/door/window/northright{
- dir = 2;
- icon_state = "right"
+ dir = 2
},
/turf/open/indestructible,
/area/awaymission/vr/syndicate)
@@ -2786,9 +2776,7 @@
/turf/open/indestructible,
/area/awaymission/vr/syndicate)
"Pc" = (
-/obj/effect/turf_decal/tile/green{
- dir = 2
- },
+/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel,
/area/awaymission/vr/syndicate)
"Pd" = (
@@ -2854,9 +2842,7 @@
/turf/open/floor/mineral/titanium,
/area/awaymission/vr/syndicate)
"PV" = (
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/awaymission/vr/syndicate)
"PX" = (
@@ -3004,9 +2990,7 @@
/area/awaymission/vr/syndicate)
"RW" = (
/obj/structure/table/reinforced,
-/obj/item/clothing/head/that{
- throwforce = 1
- },
+/obj/item/clothing/head/that,
/turf/open/indestructible,
/area/awaymission/vr/hub)
"RY" = (
@@ -3084,8 +3068,7 @@
/area/awaymission/vr/syndicate)
"TC" = (
/obj/effect/mob_spawn/human/virtual_reality{
- light_color = null;
- light_range = 0
+ light_color = null
},
/obj/effect/landmark/vr_spawn,
/obj/effect/vr_clean_master,
@@ -3200,9 +3183,7 @@
/area/awaymission/vr/megafauna_arena/arena)
"Wp" = (
/obj/machinery/door/window/northright{
- base_state = "right";
dir = 4;
- icon_state = "right";
name = "Security Desk";
req_access = list("cent_specops")
},
@@ -3352,9 +3333,7 @@
/area/awaymission/vr/syndicate)
"XX" = (
/obj/structure/closet/crate,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/indestructible,
/area/awaymission/vr/syndicate)
"XZ" = (
@@ -54369,7 +54348,7 @@ eb
gz
gz
eb
-In
+ew
gz
xp
xp
diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm
index a2f5f74a2b83..ea95dfad2a83 100644
--- a/_maps/RandomZLevels/moonoutpost19.dmm
+++ b/_maps/RandomZLevels/moonoutpost19.dmm
@@ -18,9 +18,7 @@
/area/awaymission/moonoutpost19/hive)
"ag" = (
/obj/structure/alien/weeds,
-/obj/structure/alien/egg/burst{
- desc = "A large mottled egg."
- },
+/obj/structure/alien/egg/burst,
/turf/open/floor/plating/asteroid{
heat_capacity = 1e+006;
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
@@ -238,9 +236,7 @@
/area/awaymission/moonoutpost19/syndicate)
"aJ" = (
/obj/structure/alien/weeds,
-/obj/structure/alien/egg/burst{
- desc = "A large mottled egg."
- },
+/obj/structure/alien/egg/burst,
/obj/effect/decal/cleanable/blood/gibs,
/turf/open/floor/plating/asteroid{
heat_capacity = 1e+006;
@@ -249,9 +245,7 @@
/area/awaymission/moonoutpost19/hive)
"aK" = (
/obj/structure/alien/weeds,
-/obj/structure/alien/egg/burst{
- desc = "A large mottled egg."
- },
+/obj/structure/alien/egg/burst,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating/asteroid{
heat_capacity = 1e+006;
@@ -419,9 +413,7 @@
},
/area/awaymission/moonoutpost19/syndicate)
"aZ" = (
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel/dark{
heat_capacity = 1e+006
},
@@ -474,9 +466,7 @@
/area/awaymission/moonoutpost19/syndicate)
"bh" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel/dark{
heat_capacity = 1e+006
},
@@ -897,11 +887,9 @@
/area/awaymission/moonoutpost19/syndicate)
"bT" = (
/obj/machinery/power/smes{
- charge = 0;
input_level = 10000;
inputting = 0;
- output_level = 15000;
- outputting = 1
+ output_level = 15000
},
/obj/structure/cable{
icon_state = "0-8"
@@ -941,7 +929,6 @@
/area/awaymission/moonoutpost19/hive)
"bX" = (
/obj/machinery/conveyor{
- dir = 2;
id = "awaysyndie"
},
/obj/effect/turf_decal/stripes/line{
@@ -1309,8 +1296,7 @@
/area/awaymission/moonoutpost19/syndicate)
"cC" = (
/obj/machinery/mineral/processing_unit{
- dir = 1;
- output_dir = 2
+ dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -1401,8 +1387,6 @@
"cK" = (
/obj/structure/cable,
/obj/machinery/power/apc/highcap/fifteen_k{
- dir = 2;
- locked = 1;
name = "Worn-out APC";
pixel_y = -23;
start_charge = 0;
@@ -1446,12 +1430,9 @@
"cN" = (
/obj/structure/cable,
/obj/machinery/power/port_gen/pacman{
- desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating{
heat_capacity = 1e+006
},
@@ -1460,12 +1441,9 @@
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/power/port_gen/pacman/super{
- desc = "A portable generator for emergency backup power.";
name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating{
heat_capacity = 1e+006
},
@@ -2223,9 +2201,7 @@
dir = 1
},
/obj/structure/alien/weeds,
-/obj/structure/alien/egg/burst{
- desc = "A large mottled egg."
- },
+/obj/structure/alien/egg/burst,
/obj/machinery/camera{
c_tag = "Xenobiology Containment North";
network = list("mo19x")
@@ -2328,9 +2304,7 @@
/area/awaymission/moonoutpost19/research)
"eH" = (
/obj/structure/alien/weeds,
-/obj/structure/alien/egg/burst{
- desc = "A large mottled egg."
- },
+/obj/structure/alien/egg/burst,
/turf/open/floor/engine,
/area/awaymission/moonoutpost19/research)
"eI" = (
@@ -2341,14 +2315,12 @@
/area/awaymission/moonoutpost19/research)
"eK" = (
/turf/open/floor/plasteel/white/side{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
"eL" = (
/obj/structure/alien/weeds,
/turf/open/floor/plasteel/white/side{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
@@ -2405,7 +2377,6 @@
/area/awaymission/moonoutpost19/research)
"eS" = (
/obj/machinery/power/port_gen/pacman{
- desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -2417,7 +2388,6 @@
/area/awaymission/moonoutpost19/research)
"eT" = (
/obj/machinery/power/port_gen/pacman/super{
- desc = "A portable generator for emergency backup power.";
name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -2463,8 +2433,7 @@
charge = 3e+007;
input_level = 10000;
inputting = 0;
- output_level = 15000;
- outputting = 1
+ output_level = 15000
},
/turf/open/floor/plating{
heat_capacity = 1e+006
@@ -2556,9 +2525,7 @@
icon_state = "2-8"
},
/obj/structure/alien/weeds,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -2589,7 +2556,6 @@
/area/awaymission/moonoutpost19/research)
"fh" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/structure/table,
@@ -2735,9 +2701,7 @@
icon_state = "1-4"
},
/obj/structure/alien/weeds,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -2972,7 +2936,6 @@
"fT" = (
/obj/structure/closet/secure_closet{
icon_state = "sec";
- locked = 1;
name = "security officer's locker";
req_access = list("ruins_maintenance")
},
@@ -3040,9 +3003,7 @@
icon_state = "1-2"
},
/obj/structure/alien/weeds,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3172,9 +3133,7 @@
pixel_x = 28
},
/obj/structure/alien/weeds,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3402,9 +3361,7 @@
req_access = null;
start_charge = 100
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3548,9 +3505,7 @@
pixel_x = 24;
req_access = null
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3632,9 +3587,7 @@
/turf/open/floor/engine,
/area/awaymission/moonoutpost19/research)
"hb" = (
-/obj/machinery/light/broken{
- dir = 2
- },
+/obj/machinery/light/broken,
/obj/structure/alien/weeds,
/obj/machinery/camera{
c_tag = "Xenobiology Containment South";
@@ -3745,7 +3698,6 @@
req_access = list("ruins_maintenance")
},
/turf/open/floor/plasteel/white/side{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
@@ -3758,7 +3710,6 @@
dir = 1
},
/turf/open/floor/plasteel/white/side{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
@@ -3783,7 +3734,6 @@
"hq" = (
/obj/structure/closet/secure_closet{
icon_state = "rd";
- locked = 1;
name = "research director's locker";
req_access = list("ruins_maintenance")
},
@@ -3795,13 +3745,7 @@
/area/awaymission/moonoutpost19/research)
"hr" = (
/obj/structure/table,
-/obj/item/cartridge/signal/toxins,
-/obj/item/cartridge/signal/toxins{
- pixel_x = -4;
- pixel_y = 2
- },
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel/cafeteria{
@@ -3848,9 +3792,7 @@
},
/area/awaymission/moonoutpost19/research)
"hw" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3938,9 +3880,7 @@
dir = 1;
pixel_y = -32
},
-/obj/machinery/light/small/broken{
- dir = 2
- },
+/obj/machinery/light/small/broken,
/obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation,
/obj/machinery/camera{
c_tag = "Research Division";
@@ -4211,9 +4151,7 @@
/area/awaymission/moonoutpost19/research)
"ig" = (
/obj/structure/closet/l3closet,
-/obj/machinery/light/small/broken{
- dir = 2
- },
+/obj/machinery/light/small/broken,
/turf/open/floor/plasteel/white/side{
dir = 1;
heat_capacity = 1e+006
@@ -4485,9 +4423,7 @@
/obj/machinery/computer/security/telescreen/entertainment{
pixel_y = -32
},
-/obj/machinery/light/small/broken{
- dir = 2
- },
+/obj/machinery/light/small/broken,
/obj/machinery/camera{
c_tag = "Research Director's Office";
dir = 1;
@@ -4526,9 +4462,7 @@
/area/awaymission/moonoutpost19/research)
"iL" = (
/obj/machinery/light/small,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -5581,9 +5515,7 @@
/obj/machinery/door/firedoor/closed{
opacity = 0
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -6118,9 +6050,7 @@
},
/area/awaymission/moonoutpost19/arrivals)
"mh" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006;
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
@@ -6164,7 +6094,6 @@
/area/awaymission/moonoutpost19/arrivals)
"mm" = (
/obj/structure/closet/secure_closet{
- icon_state = "secure";
locked = 0;
name = "kitchen Cabinet";
req_access = list("ruins_maintenance")
@@ -6266,9 +6195,7 @@
/area/awaymission/moonoutpost19/arrivals)
"mx" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006;
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
@@ -6734,9 +6661,7 @@
pixel_x = 24;
req_access = null
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006;
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
@@ -7005,9 +6930,7 @@
dir = 4
},
/obj/effect/decal/cleanable/generic,
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006;
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
@@ -7091,7 +7014,6 @@
/obj/structure/window/reinforced,
/obj/structure/closet/secure_closet{
icon_state = "science";
- locked = 1;
name = "scientist's locker";
req_access = list("ruins_maintenance")
},
diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm
index e88279800a70..5be35125f0af 100644
--- a/_maps/RandomZLevels/undergroundoutpost45.dmm
+++ b/_maps/RandomZLevels/undergroundoutpost45.dmm
@@ -252,9 +252,7 @@
/area/awaymission/undergroundoutpost45/central)
"aO" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -407,7 +405,6 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/secure_closet{
icon_state = "sec";
- locked = 1;
name = "security officer's locker";
req_access = list("ruins_general")
},
@@ -1405,7 +1402,6 @@
/area/awaymission/undergroundoutpost45/central)
"dm" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel{
@@ -1425,9 +1421,7 @@
layer = 5
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/green{
- dir = 2
- },
+/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -1706,7 +1700,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/effect/turf_decal/tile/green{
@@ -1833,9 +1826,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -2282,9 +2273,7 @@
/obj/machinery/door/firedoor,
/obj/item/folder/red,
/obj/machinery/door/window/southleft{
- base_state = "left";
dir = 8;
- icon_state = "left";
name = "Security Checkpoint"
},
/obj/effect/mapping_helpers/windoor/access/all/ruins/general{
@@ -2325,9 +2314,7 @@
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/machinery/door/window/southleft{
- base_state = "left";
dir = 4;
- icon_state = "left";
name = "Hydroponics Desk"
},
/obj/effect/mapping_helpers/windoor/access/all/ruins/general{
@@ -2466,9 +2453,7 @@
},
/area/awaymission/undergroundoutpost45/central)
"fb" = (
-/obj/effect/turf_decal/tile/green{
- dir = 2
- },
+/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -2528,7 +2513,6 @@
network = list("uo45")
},
/obj/machinery/power/apc/highcap/fifteen_k{
- dir = 2;
locked = 0;
name = "Hydroponics APC";
pixel_y = -23;
@@ -3278,7 +3262,6 @@
amount = 23
},
/turf/open/floor/plasteel/white/side{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -3286,7 +3269,6 @@
/obj/structure/table,
/obj/item/storage/toolbox/mechanical,
/turf/open/floor/plasteel/white/side{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -3411,7 +3393,6 @@
},
/obj/machinery/camera{
c_tag = "Research Lab";
- dir = 2;
network = list("uo45","uo45r")
},
/turf/open/floor/plasteel/white{
@@ -3420,7 +3401,6 @@
/area/awaymission/undergroundoutpost45/research)
"gZ" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel/white{
@@ -4580,7 +4560,6 @@
/area/awaymission/undergroundoutpost45/crew_quarters)
"jf" = (
/obj/structure/closet/secure_closet{
- icon_state = "secure";
locked = 0;
name = "kitchen Cabinet";
req_access = list("ruins_general")
@@ -5123,7 +5102,6 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/secure_closet{
icon_state = "rd";
- locked = 1;
name = "research director's locker";
req_access = list("ruins_general")
},
@@ -5885,7 +5863,6 @@
},
/obj/machinery/camera{
c_tag = "Gateway Ready Room";
- dir = 2;
network = list("uo45","uo45r")
},
/turf/open/floor/plasteel{
@@ -5922,7 +5899,6 @@
/obj/item/reagent_containers/spray/pepper,
/obj/structure/closet/secure_closet{
icon_state = "sec";
- locked = 1;
name = "security officer's locker";
req_access = list("ruins_general")
},
@@ -5980,9 +5956,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -5992,9 +5966,7 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6015,9 +5987,7 @@
dir = 1;
network = list("uo45","uo45r")
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6032,9 +6002,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6047,9 +6015,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6065,9 +6031,7 @@
/obj/machinery/door/airlock/research{
name = "Research Division Access"
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/obj/effect/mapping_helpers/airlock/access/all/ruins/general,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
@@ -6081,9 +6045,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6102,9 +6064,7 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6122,9 +6082,7 @@
pixel_y = -24
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6134,7 +6092,6 @@
icon_state = "0-8"
},
/obj/machinery/power/apc/highcap/fifteen_k{
- dir = 2;
locked = 0;
name = "UO45 Research Division APC";
pixel_y = -23;
@@ -6147,9 +6104,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6162,9 +6117,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6185,9 +6138,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6196,17 +6147,13 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
"lM" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6221,9 +6168,7 @@
dir = 1;
network = list("uo45","uo45r")
},
-/obj/effect/turf_decal/tile/purple{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6359,7 +6304,6 @@
},
/obj/machinery/camera{
c_tag = "Engineering Secure Storage";
- dir = 2;
network = list("uo45")
},
/turf/open/floor/plating{
@@ -6497,9 +6441,7 @@
pixel_y = -32
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6692,7 +6634,6 @@
"mE" = (
/obj/structure/cable,
/obj/machinery/power/apc/highcap/fifteen_k{
- dir = 2;
locked = 0;
name = "UO45 Gateway APC";
pixel_y = -23;
@@ -7046,11 +6987,6 @@
/area/awaymission/undergroundoutpost45/research)
"nk" = (
/obj/structure/table,
-/obj/item/cartridge/signal/toxins,
-/obj/item/cartridge/signal/toxins{
- pixel_x = -4;
- pixel_y = 2
- },
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/cafeteria{
dir = 5;
@@ -7355,9 +7291,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark{
heat_capacity = 1e+006
},
@@ -7441,7 +7375,6 @@
},
/obj/machinery/computer/security/telescreen{
desc = "Used for monitoring the research division and the labs within.";
- dir = 2;
name = "research monitor";
network = list("uo45r")
},
@@ -7633,7 +7566,6 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Dormitories";
- dir = 2;
network = list("uo45")
},
/obj/effect/turf_decal/tile/neutral{
@@ -7889,8 +7821,7 @@
charge = 3e+007;
input_level = 10000;
inputting = 0;
- output_level = 7000;
- outputting = 1
+ output_level = 7000
},
/turf/open/floor/plating{
heat_capacity = 1e+006
@@ -7902,8 +7833,7 @@
charge = 3e+007;
input_level = 30000;
inputting = 0;
- output_level = 7000;
- outputting = 1
+ output_level = 7000
},
/turf/open/floor/plating{
heat_capacity = 1e+006
@@ -8037,9 +7967,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -8067,9 +7995,7 @@
"oJ" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -8110,9 +8036,7 @@
/area/awaymission/undergroundoutpost45/crew_quarters)
"oM" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -8227,7 +8151,6 @@
dir = 1
},
/obj/machinery/power/port_gen/pacman{
- desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -8242,7 +8165,6 @@
dir = 1
},
/obj/machinery/power/port_gen/pacman/super{
- desc = "A portable generator for emergency backup power.";
name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
},
/obj/item/wrench,
@@ -8261,7 +8183,6 @@
dir = 1
},
/obj/machinery/power/port_gen/pacman{
- desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -8622,7 +8543,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"pE" = (
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos{
- dir = 2;
icon_state = "in";
id_tag = "UO45_air_out";
name = "air out"
@@ -8634,7 +8554,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"pF" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos{
- dir = 2;
id = "UO45_air_in"
},
/turf/open/floor/engine/air,
@@ -8959,7 +8878,6 @@
/obj/item/clothing/glasses/hud/health,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/corner{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -8972,7 +8890,6 @@
/obj/item/hand_labeler,
/obj/item/clothing/neck/stethoscope,
/turf/open/floor/plasteel/white/side{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -9194,7 +9111,6 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics";
- dir = 2;
network = list("uo45")
},
/obj/structure/table,
@@ -9203,7 +9119,6 @@
pixel_y = 5
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/item/multitool,
@@ -9249,21 +9164,15 @@
dir = 10
},
/obj/machinery/portable_atmospherics/scrubber,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
"qN" = (
/obj/machinery/portable_atmospherics/canister/air,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -9506,7 +9415,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"rl" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/structure/tank_dispenser{
@@ -9589,7 +9497,6 @@
},
/obj/machinery/power/apc/highcap/fifteen_k{
dir = 8;
- locked = 1;
name = "UO45 Engineering APC";
pixel_x = -25;
req_access = list("ruins_general");
@@ -9628,7 +9535,6 @@
/obj/item/clothing/head/helmet,
/obj/structure/closet/secure_closet{
icon_state = "sec";
- locked = 1;
name = "security officer's locker";
req_access = list("ruins_general")
},
@@ -9691,11 +9597,8 @@
"rx" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/portable_atmospherics/scrubber,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -10107,9 +10010,7 @@
name = "Privacy Shutters"
},
/obj/machinery/door/window/southleft{
- base_state = "left";
dir = 4;
- icon_state = "left";
name = "Engineering Reception"
},
/obj/item/paper_bin{
@@ -10199,7 +10100,6 @@
"sj" = (
/obj/structure/cable,
/obj/machinery/power/apc/highcap/fifteen_k{
- dir = 2;
locked = 0;
name = "UO45 Mining APC";
pixel_y = -23;
@@ -10218,9 +10118,7 @@
},
/obj/item/storage/backpack/satchel/eng,
/obj/item/clothing/gloves/fingerless,
-/obj/effect/turf_decal/tile/brown{
- dir = 2
- },
+/obj/effect/turf_decal/tile/brown,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -10228,8 +10126,7 @@
"sk" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
- name = "Mix to Distro";
- on = 0
+ name = "Mix to Distro"
},
/turf/open/floor/plasteel{
heat_capacity = 1e+006
@@ -10895,9 +10792,7 @@
},
/area/awaymission/undergroundoutpost45/crew_quarters)
"tv" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/machinery/portable_atmospherics/pump,
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -10909,9 +10804,7 @@
/area/awaymission/undergroundoutpost45/engineering)
"tw" = (
/obj/machinery/light/small,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/structure/window/reinforced{
dir = 4;
layer = 2.9
@@ -11343,11 +11236,8 @@
dir = 1
},
/obj/machinery/portable_atmospherics/canister/air,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -11655,17 +11545,13 @@
},
/area/awaymission/undergroundoutpost45/research)
"uL" = (
-/obj/machinery/atmospherics/components/binary/valve{
- dir = 2
- },
+/obj/machinery/atmospherics/components/binary/valve,
/turf/open/floor/plating{
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
"uM" = (
-/obj/machinery/atmospherics/components/binary/valve{
- dir = 2
- },
+/obj/machinery/atmospherics/components/binary/valve,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -12337,11 +12223,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -12350,11 +12233,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -12363,11 +12243,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
- dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -13208,7 +13085,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"xl" = (
/obj/machinery/conveyor{
- dir = 2;
id = "UO45_mining"
},
/obj/effect/turf_decal/stripes/line{
@@ -13262,7 +13138,6 @@
/area/awaymission/undergroundoutpost45/mining)
"xq" = (
/obj/machinery/conveyor{
- dir = 2;
id = "UO45_mining"
},
/obj/structure/sign/warning/nosmoking{
@@ -13317,8 +13192,7 @@
/area/awaymission/undergroundoutpost45/mining)
"xw" = (
/obj/machinery/mineral/processing_unit{
- dir = 1;
- output_dir = 2
+ dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -13402,7 +13276,6 @@
/area/awaymission/undergroundoutpost45/mining)
"xE" = (
/obj/machinery/conveyor{
- dir = 2;
id = "UO45_mining"
},
/obj/machinery/light/small{
diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
index c6d3f9c2543f..14efb761b3cf 100644
--- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm
+++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
@@ -68,9 +68,7 @@
/turf/closed/wall,
/area/quartermaster/qm)
"aaD" = (
-/obj/machinery/airalarm/directional/south{
- pixel_y = -24
- },
+/obj/machinery/airalarm/directional/south,
/obj/structure/table,
/obj/item/reagent_containers/glass/bottle/ethanol{
pixel_x = -5;
@@ -182,9 +180,7 @@
/turf/open/floor/carpet,
/area/crew_quarters/cryopods)
"abM" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
"abP" = (
@@ -2616,7 +2612,6 @@
"axy" = (
/obj/structure/chair/comfy{
dir = 4;
- icon_state = "comfychair";
tag = ""
},
/obj/machinery/light/broken{
@@ -5928,9 +5923,7 @@
/turf/open/floor/plasteel,
/area/engine/foyer)
"bcH" = (
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -8702,8 +8695,7 @@
/area/medical/sleeper)
"cah" = (
/obj/machinery/camera{
- c_tag = "Theatre Stage";
- dir = 2
+ c_tag = "Theatre Stage"
},
/obj/item/radio/intercom{
dir = 8;
@@ -11611,7 +11603,6 @@
/obj/structure/cable,
/obj/machinery/power/apc{
areastring = "/area/medical/storage";
- dir = 2;
name = "Medbay Storage APC";
pixel_y = -23
},
@@ -12067,8 +12058,7 @@
/obj/machinery/camera{
c_tag = "Medbay Treatment Center";
dir = 8;
- network = list("ss13","medbay");
- pixel_x = 0
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/dark,
/area/medical/sleeper)
@@ -12488,9 +12478,7 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hor)
"dfv" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/turf/open/floor/plasteel/dark,
/area/science/mixing)
"dfz" = (
@@ -16067,7 +16055,6 @@
"ekL" = (
/obj/machinery/requests_console{
department = "Mining";
- departmentType = 0;
name = "Mining RC";
pixel_x = 32;
pixel_y = 29
@@ -16906,7 +16893,6 @@
"evS" = (
/obj/machinery/light,
/obj/structure/tank_dispenser/oxygen{
- layer = 2.9;
pixel_x = -1;
pixel_y = 2
},
@@ -17598,7 +17584,6 @@
/obj/structure/cable,
/obj/machinery/power/apc{
areastring = "/area/medical/storage/backroom";
- dir = 2;
name = "Medical Backrooms APC";
pixel_y = -23
},
@@ -17989,9 +17974,7 @@
icon_state = "1-2";
tag = ""
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark,
/area/medical/sleeper)
"eNk" = (
@@ -18540,9 +18523,7 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"eUU" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,
/turf/open/floor/plasteel,
/area/engine/atmos/distro)
"eVg" = (
@@ -18763,9 +18744,7 @@
},
/area/crew_quarters/bar)
"eZj" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/effect/turf_decal/trimline/purple/filled/line/lower{
dir = 8
},
@@ -21850,9 +21829,6 @@
/area/security/prison)
"fYo" = (
/obj/machinery/door/window/southleft{
- base_state = "left";
- dir = 2;
- icon_state = "left";
name = "Kitchen Delivery"
},
/obj/effect/turf_decal/delivery,
@@ -22728,9 +22704,6 @@
/area/engine/atmos/distro)
"gng" = (
/obj/machinery/door/window/southleft{
- base_state = "left";
- dir = 2;
- icon_state = "left";
name = "Bar Delivery"
},
/obj/effect/turf_decal/delivery,
@@ -24369,9 +24342,7 @@
/obj/structure/disposalpipe/segment{
dir = 10
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"gND" = (
@@ -27231,9 +27202,7 @@
/area/science/xenobiology)
"hGo" = (
/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -27506,9 +27475,7 @@
/turf/open/floor/plasteel,
/area/engine/atmos/hfr)
"hKm" = (
-/obj/structure/table/glass{
- name = "glass table"
- },
+/obj/structure/table/glass,
/obj/machinery/cell_charger,
/obj/effect/turf_decal/trimline/blue/filled/line/lower{
dir = 8
@@ -27794,9 +27761,7 @@
/turf/open/floor/plasteel/white,
/area/medical/genetics/cloning)
"hOq" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"hOL" = (
@@ -28823,9 +28788,7 @@
/area/bridge/meeting_room)
"ihh" = (
/obj/structure/table/glass,
-/obj/machinery/airalarm/directional/south{
- pixel_y = -24
- },
+/obj/machinery/airalarm/directional/south,
/obj/item/storage/firstaid/fire{
pixel_x = 3;
pixel_y = 3
@@ -28948,9 +28911,7 @@
/turf/open/floor/plasteel/dark,
/area/bridge)
"ija" = (
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -29867,8 +29828,7 @@
dir = 8
},
/obj/machinery/computer/atmos_sim{
- dir = 8;
- mode = 1
+ dir = 8
},
/obj/effect/turf_decal/trimline/purple/filled/line/lower{
dir = 6
@@ -31143,17 +31103,9 @@
/obj/effect/mapping_helpers/airlock/access/all/command/general,
/turf/open/floor/plasteel/dark,
/area/bridge)
-"iTl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
"iTs" = (
/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -32372,8 +32324,7 @@
dir = 8
},
/obj/machinery/door/poddoor/preopen{
- id = "executionfireblast";
- name = "blast door"
+ id = "executionfireblast"
},
/obj/machinery/door/airlock/security/glass{
name = "Transfer Chamber"
@@ -32529,7 +32480,6 @@
/obj/machinery/requests_console{
department = "AI";
departmentType = 5;
- pixel_x = 0;
pixel_y = -32
},
/turf/open/floor/circuit/telecomms/server,
@@ -36527,9 +36477,7 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai_upload_foyer)
"kxB" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/turf/open/floor/plasteel/white,
/area/science/mixing)
"kxL" = (
@@ -37864,7 +37812,6 @@
/area/medical/medbay/aft)
"kXj" = (
/obj/item/reagent_containers/food/snacks/fish/goldfish{
- bitecount = 0;
length = 1;
weight = 2
},
@@ -39560,12 +39507,6 @@
/obj/effect/turf_decal/trimline/green/warning/lower,
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
-"lBg" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos/hfr)
"lBP" = (
/obj/machinery/conveyor{
id = "QMLoad"
@@ -40693,8 +40634,7 @@
icon_state = "0-2"
},
/obj/machinery/door/poddoor/preopen{
- id = "executionfireblast";
- name = "blast door"
+ id = "executionfireblast"
},
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -41001,9 +40941,7 @@
/area/maintenance/starboard/fore)
"lYP" = (
/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -41623,9 +41561,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
},
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -42189,7 +42125,6 @@
pixel_x = -4;
pixel_y = 36
},
-/obj/machinery/pdapainter,
/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{
dir = 9
},
@@ -44815,12 +44750,6 @@
/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"nda" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
"ndb" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -44872,9 +44801,7 @@
/turf/open/floor/plating/asteroid,
/area/space/nearstation)
"ndK" = (
-/obj/machinery/airalarm/directional/west{
- pixel_x = -24
- },
+/obj/machinery/airalarm/directional/west,
/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{
dir = 8
},
@@ -46298,7 +46225,6 @@
dir = 4
},
/obj/machinery/defibrillator_mount/loaded{
- pixel_x = 0;
pixel_y = -31
},
/turf/open/floor/plasteel/dark,
@@ -47709,8 +47635,7 @@
dir = 4
},
/obj/machinery/door/poddoor/preopen{
- id = "cell3 blast";
- name = "blast door"
+ id = "cell3 blast"
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
@@ -48445,9 +48370,7 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"okt" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/medical/storage/backroom)
"okv" = (
@@ -50269,7 +50192,6 @@
"oLK" = (
/obj/structure/chair/comfy{
dir = 4;
- icon_state = "comfychair";
tag = ""
},
/obj/machinery/light/broken,
@@ -52496,8 +52418,7 @@
/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower,
/obj/effect/turf_decal/trimline/atmos/warning/lower/nobottom,
/obj/machinery/computer/atmos_sim{
- dir = 1;
- mode = 1
+ dir = 1
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
@@ -52555,9 +52476,7 @@
/obj/effect/turf_decal/trimline/blue/filled/line/lower{
dir = 8
},
-/obj/machinery/airalarm/directional/west{
- pixel_x = -24
- },
+/obj/machinery/airalarm/directional/west,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"puV" = (
@@ -54413,9 +54332,7 @@
/area/security/brig)
"pXG" = (
/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -59047,8 +58964,7 @@
pixel_y = 1
},
/obj/machinery/door/poddoor/preopen{
- id = "executionfireblast";
- name = "blast door"
+ id = "executionfireblast"
},
/turf/open/floor/plating,
/area/security/execution/transfer)
@@ -62259,9 +62175,7 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
"sps" = (
-/obj/machinery/airalarm/directional/west{
- pixel_x = -24
- },
+/obj/machinery/airalarm/directional/west,
/obj/effect/turf_decal/trimline/blue/filled/line/lower{
dir = 8
},
@@ -62437,9 +62351,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"srW" = (
@@ -62523,9 +62435,7 @@
/area/hallway/secondary/entry)
"stF" = (
/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -63475,7 +63385,6 @@
pixel_y = 3
},
/obj/item/flashlight/lamp/green{
- light_on = 0;
pixel_x = -6;
pixel_y = 11
},
@@ -67351,6 +67260,7 @@
/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{
dir = 8
},
+/obj/machinery/pdapainter,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
"tPT" = (
@@ -68000,8 +67910,7 @@
"tYo" = (
/obj/structure/cable,
/obj/machinery/door/poddoor/preopen{
- id = "executionfireblast";
- name = "blast door"
+ id = "executionfireblast"
},
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -68787,8 +68696,7 @@
icon_state = "1-2"
},
/obj/machinery/door/poddoor/preopen{
- id = "executionfireblast";
- name = "blast door"
+ id = "executionfireblast"
},
/turf/open/floor/plating,
/area/security/execution/transfer)
@@ -69412,8 +69320,7 @@
dir = 4
},
/obj/machinery/door/poddoor/preopen{
- id = "cell2 blast";
- name = "blast door"
+ id = "cell2 blast"
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
@@ -69650,9 +69557,7 @@
/area/security/execution/transfer)
"uAH" = (
/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -71104,7 +71009,6 @@
},
/obj/machinery/vending/wallhypo{
dir = 1;
- pixel_x = 0;
pixel_y = -28
},
/obj/effect/turf_decal/trimline/blue/filled/line/lower,
@@ -71135,9 +71039,7 @@
/obj/structure/chair/office/dark{
dir = 1
},
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -71603,9 +71505,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/port/aft)
"vjp" = (
@@ -71727,9 +71627,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 9
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"vlg" = (
@@ -75952,24 +75850,19 @@
icon_state = "0-4"
},
/obj/item/radio/intercom{
- anyai = 1;
freerange = 1;
listening = 0;
name = "Custom Channel";
pixel_y = -27
},
/obj/item/radio/intercom{
- anyai = 1;
- broadcasting = 0;
freerange = 1;
frequency = 1447;
name = "Private Channel";
pixel_y = 20
},
/obj/item/radio/intercom{
- broadcasting = 0;
freerange = 1;
- listening = 1;
name = "Common Channel";
pixel_y = -37
},
@@ -77062,8 +76955,7 @@
dir = 4
},
/obj/machinery/door/poddoor/preopen{
- id = "cell1 blast";
- name = "blast door"
+ id = "cell1 blast"
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
@@ -77450,7 +77342,6 @@
pixel_y = 5
},
/obj/item/pen/red{
- pixel_x = 0;
pixel_y = 5
},
/turf/open/floor/carpet,
@@ -77933,13 +77824,6 @@
/obj/structure/chair/stool/bar,
/turf/open/floor/eighties,
/area/maintenance/starboard/fore)
-"xdI" = (
-/obj/effect/turf_decal/box/corners{
- dir = 1;
- icon_state = "box_corners"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
"xdL" = (
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
@@ -78335,9 +78219,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/general/visible,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,
/turf/open/floor/plasteel,
/area/engine/atmos/pumproom)
"xkS" = (
@@ -78818,7 +78700,6 @@
dir = 4
},
/obj/item/radio/intercom{
- anyai = 1;
broadcasting = 1;
frequency = 1423;
listening = 0;
@@ -78935,9 +78816,7 @@
/obj/structure/disposalpipe/segment{
dir = 2
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"xvF" = (
@@ -80413,15 +80292,6 @@
},
/turf/open/floor/plating,
/area/maintenance/central)
-"xSH" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"xTc" = (
/obj/structure/disposalpipe/segment{
dir = 8
@@ -80767,9 +80637,7 @@
/turf/open/floor/plating,
/area/maintenance/port)
"xYM" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/central)
"xYX" = (
@@ -98780,7 +98648,7 @@ aii
aii
aii
aii
-iTl
+awU
alR
meo
aoq
@@ -104210,7 +104078,7 @@ uxp
fFP
oIN
nsk
-nda
+iNl
oQP
jsE
aQo
@@ -110591,7 +110459,7 @@ gjq
gjq
gjq
gjq
-xSH
+kPF
ycw
jbn
aiZ
@@ -112918,16 +112786,16 @@ okp
vGq
nFW
adX
-xdI
+faj
aFu
xxt
-xdI
+faj
aFu
obD
-xdI
+faj
aFu
obD
-xdI
+faj
aFu
tdf
aBD
@@ -130680,7 +130548,7 @@ qIN
tEi
odT
tEi
-lBg
+eBw
uzL
nxO
hVs
diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm
index af57ea9a4f96..c77c9fa2b129 100644
--- a/_maps/map_files/GaxStation/GaxStation.dmm
+++ b/_maps/map_files/GaxStation/GaxStation.dmm
@@ -28181,10 +28181,10 @@
/turf/open/floor/plating,
/area/quartermaster/office)
"nzI" = (
-/obj/machinery/pdapainter,
/obj/machinery/light{
dir = 1
},
+/obj/machinery/pdapainter,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
"nzN" = (
diff --git a/_maps/map_files/IceMeta/IceMeta.dmm b/_maps/map_files/IceMeta/IceMeta.dmm
index b483b62e791d..5782fab33b15 100644
--- a/_maps/map_files/IceMeta/IceMeta.dmm
+++ b/_maps/map_files/IceMeta/IceMeta.dmm
@@ -10498,8 +10498,7 @@
icon_state = "1-2"
},
/obj/machinery/defibrillator_mount/loaded{
- pixel_x = -31;
- pixel_y = 0
+ pixel_x = -31
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
@@ -13456,9 +13455,7 @@
/obj/structure/cable/yellow{
icon_state = "0-2"
},
-/obj/machinery/power/apc/auto_name/west{
- pixel_x = -25
- },
+/obj/machinery/power/apc/auto_name/west,
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"dWi" = (
@@ -44790,9 +44787,7 @@
name = "Head of Personnel RC";
pixel_y = 30
},
-/obj/machinery/pdapainter{
- pixel_y = 2
- },
+/obj/machinery/pdapainter,
/turf/open/floor/wood,
/area/crew_quarters/heads/hop)
"mTT" = (
@@ -62599,9 +62594,7 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"san" = (
-/obj/machinery/airalarm/directional/west{
- pixel_x = -24
- },
+/obj/machinery/airalarm/directional/west,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index a6d6279e0406..60fa12380403 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -18617,10 +18617,10 @@
pixel_x = -4;
pixel_y = 36
},
-/obj/machinery/pdapainter,
/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{
dir = 9
},
+/obj/machinery/pdapainter,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
"dQj" = (
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 148a7be4d4cc..8e4ccad436bf 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -4704,7 +4704,6 @@
},
/obj/machinery/turretid{
ailock = 1;
- control_area = null;
desc = "A specially designed set of turret controls. Looks to be covered in protective casing to prevent AI interfacing.";
icon_state = "control_stun";
name = "Security turret control";
@@ -7739,20 +7738,6 @@
},
/turf/open/floor/plasteel,
/area/centcom/control)
-"avI" = (
-/obj/machinery/pdapainter,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/centcom/control)
"avJ" = (
/obj/machinery/photocopier,
/obj/machinery/light{
@@ -15374,9 +15359,7 @@
pixel_x = 24
},
/obj/machinery/turretid/syndicate{
- icon_state = "control_kill";
lethal = 1;
- locked = 1;
pixel_y = 28
},
/turf/open/floor/plasteel/dark/side{
@@ -15493,9 +15476,7 @@
/area/yogs/infiltrator_base)
"aLx" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/yogs/infiltrator_base)
"aLz" = (
/obj/effect/turf_decal/stripes/corner,
@@ -16779,9 +16760,7 @@
/obj/item/storage/crayons,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/yogs/infiltrator_base)
"aOK" = (
/obj/machinery/door/airlock/external{
@@ -18422,7 +18401,6 @@
pixel_y = -2
},
/obj/item/toy/cards/deck/syndicate{
- icon_state = "deck_syndicate_full";
pixel_x = -6;
pixel_y = 6
},
@@ -19465,9 +19443,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/yogs/infiltrator_base)
"aVC" = (
/obj/effect/turf_decal/tile/neutral{
@@ -20873,8 +20849,7 @@
"aZi" = (
/obj/effect/turf_decal/bot_white,
/obj/machinery/door/airlock/centcom{
- name = "Equipment Room";
- opacity = 1
+ name = "Equipment Room"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
@@ -20946,9 +20921,7 @@
"aZt" = (
/obj/machinery/washing_machine,
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/yogs/infiltrator_base)
"aZu" = (
/obj/structure/chair/stool,
@@ -21897,9 +21870,7 @@
},
/obj/machinery/light/small,
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/yogs/infiltrator_base)
"gCx" = (
/obj/effect/landmark/wiki,
@@ -22664,7 +22635,6 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/structure/table,
@@ -23078,6 +23048,20 @@
/obj/machinery/vending/cigarette,
/turf/open/floor/plasteel/bluespace,
/area/centcom)
+"qZP" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/pdapainter,
+/turf/open/floor/plasteel/dark,
+/area/centcom/control)
"rhy" = (
/obj/item/bedsheet/syndie,
/obj/structure/bed,
@@ -23372,9 +23356,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/yogs/infiltrator_base)
"uDo" = (
/obj/item/storage/firstaid/toxin,
@@ -23907,9 +23889,7 @@
/obj/machinery/door/window{
name = "Shower Door"
},
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/yogs/infiltrator_base)
(1,1,1) = {"
@@ -66458,7 +66438,7 @@ aio
atK
anq
aiu
-avI
+qZP
aiC
axm
axU
diff --git a/code/__DEFINES/dcs/signals/signals_modular_computer.dm b/code/__DEFINES/dcs/signals/signals_modular_computer.dm
index dd325e41984d..9698e89e1992 100644
--- a/code/__DEFINES/dcs/signals/signals_modular_computer.dm
+++ b/code/__DEFINES/dcs/signals/signals_modular_computer.dm
@@ -38,10 +38,12 @@
/// From /datum/computer_file/program/radar/ui_act, when action is "selecttarget": (selected_ref)
#define COMSIG_MODULAR_COMPUTER_RADAR_SELECTED "comsig_modular_computer_radar_selected"
+/* //unused as saved identification stuff hasn't been added.
/// from /obj/item/modular_computer/imprint_id(): (name, job)
#define COMSIG_MODULAR_PDA_IMPRINT_UPDATED "comsig_modular_pda_imprint_updated"
/// from /obj/item/modular_computer/reset_id(): ()
#define COMSIG_MODULAR_PDA_IMPRINT_RESET "comsig_modular_pda_imprint_reset"
+*/
/// From /datum/computer_file/program/messenger/receive_message, sent to the computer: (signal/subspace/messaging/tablet_message/signal, sender_job, sender_name)
#define COMSIG_MODULAR_PDA_MESSAGE_RECEIVED "comsig_modular_pda_message_received"
diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm
index 63799978ccff..6c3915aeab5c 100644
--- a/code/__DEFINES/dcs/signals/signals_object.dm
+++ b/code/__DEFINES/dcs/signals/signals_object.dm
@@ -300,17 +300,11 @@
#define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists"
//This uses all return values of COMSIG_IMPLANT_OTHER
-// /obj/item/pda signals
-
-///called on pda when the user changes the ringtone: (mob/living/user, new_ringtone)
-#define COMSIG_TABLET_CHANGE_ID "comsig_tablet_change_id"
- #define COMPONENT_STOP_RINGTONE_CHANGE (1<<0)
-#define COMSIG_TABLET_CHECK_DETONATE "pda_check_detonate"
- #define COMPONENT_TABLET_NO_DETONATE (1<<0)
-
// /obj/item/modular_computer signals
#define COMSIG_NTOS_CHANGE_RINGTONE "ntos_change_ringtone"
-#define COMPONENT_NTOS_STOP_RINGTONE_CHANGE 1
+ #define COMPONENT_STOP_RINGTONE_CHANGE 1
+#define COMSIG_TABLET_CHECK_DETONATE "pda_check_detonate"
+ #define COMPONENT_TABLET_NO_DETONATE (1<<0)
// /obj/item/radio signals
diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index c8cbfe96db61..51759711993c 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -189,7 +189,6 @@
#define ui_pai_crew_manifest "SOUTH:6,WEST+7"
#define ui_pai_state_laws "SOUTH:6,WEST+8"
#define ui_pai_pda_send "SOUTH:6,WEST+9"
-#define ui_pai_pda_log "SOUTH:6,WEST+10"
#define ui_pai_take_picture "SOUTH:6,WEST+12"
#define ui_pai_view_images "SOUTH:6,WEST+13"
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 67be4e6941d6..8f8beb9c7006 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -721,7 +721,6 @@ GLOBAL_LIST_INIT(maintenance_loot_minor,list(
/obj/item/melee/baton/cattleprod = W_UNCOMMON,
/obj/item/melee/flyswatter = W_UNCOMMON,
/obj/item/melee/roastingstick = W_RARE,
- /obj/item/pda/clear = W_RARE,
/obj/item/pickaxe = W_UNCOMMON,
/obj/item/pneumatic_cannon/ghetto = W_RARE,
/obj/item/reagent_containers/autoinjector/medipen/survival = W_MYTHICAL,
@@ -849,7 +848,6 @@ GLOBAL_LIST_INIT(maintenance_loot_moderate,list(
/obj/item/mmi = W_RARE,
/obj/item/multitool/tricorder = W_UNCOMMON,
/obj/item/papercutter = W_RARE,
- /obj/item/pda/chameleon/broken = W_RARE,
/obj/item/pet_carrier = W_RARE,
/obj/item/pipe_dispenser = W_MYTHICAL,
/obj/item/pneumatic_cannon/pie = W_RARE,
@@ -943,7 +941,6 @@ GLOBAL_LIST_INIT(maintenance_loot_major,list(
/obj/item/melee/arm_blade/false = W_LEGENDARY,
/obj/item/melee/classic_baton/donkbat = W_LEGENDARY,
/obj/item/melee/transforming/energy/sword/bananium = W_LEGENDARY,
- /obj/item/pda/chameleon = W_MYTHICAL,
/obj/item/radio/headset/chameleon = W_MYTHICAL,
/obj/item/reagent_containers/food/snacks/monkeycube/gorilla = W_RARE,
/obj/item/reagent_containers/food/snacks/monkeycube/mouse/syndicate = W_RARE,
diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm
index 3da5caf44238..c7feb999f612 100644
--- a/code/_onclick/hud/pai.dm
+++ b/code/_onclick/hud/pai.dm
@@ -113,27 +113,17 @@
var/mob/living/silicon/pai/pAI = usr
pAI.checklaws()
-/atom/movable/screen/pai/pda_msg_send
- name = "PDA - Send Message"
+/atom/movable/screen/pai/modpc
+ name = "Messenger"
icon_state = "pda_send"
required_software = "digital messenger"
+ var/mob/living/silicon/pai/pAI
-/atom/movable/screen/pai/pda_msg_send/Click()
- if(!..())
- return
- var/mob/living/silicon/pai/pAI = usr
- pAI.cmd_send_pdamesg(usr)
-
-/atom/movable/screen/pai/pda_msg_show
- name = "PDA - Show Message Log"
- icon_state = "pda_receive"
- required_software = "digital messenger"
-
-/atom/movable/screen/pai/pda_msg_show/Click()
- if(!..())
+/atom/movable/screen/pai/modpc/Click()
+ . = ..()
+ if(!.) // this works for some reason.
return
- var/mob/living/silicon/pai/pAI = usr
- pAI.cmd_show_message_log(usr)
+ pAI.modularInterface?.interact(pAI)
/atom/movable/screen/pai/image_take
name = "Take Image"
@@ -171,6 +161,7 @@
/datum/hud/pai/New(mob/living/silicon/pai/owner)
..()
var/atom/movable/screen/using
+ var/mob/living/silicon/pai/mypai = mymob
// Software menu
using = new /atom/movable/screen/pai/software(src)
@@ -222,15 +213,13 @@
using.screen_loc = ui_pai_state_laws
static_inventory += using
-// PDA message
- using = new /atom/movable/screen/pai/pda_msg_send(src)
+// Modular Interface
+ using = new /atom/movable/screen/pai/modpc(src)
using.screen_loc = ui_pai_pda_send
static_inventory += using
-
-// PDA log
- using = new /atom/movable/screen/pai/pda_msg_show(src)
- using.screen_loc = ui_pai_pda_log
- static_inventory += using
+ mypai.interfaceButton = using
+ var/atom/movable/screen/pai/modpc/tabletbutton = using
+ tabletbutton.pAI = mypai
// Take image
using = new /atom/movable/screen/pai/image_take(src)
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index 15fade6a372e..4a20b9efd184 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -66,7 +66,7 @@ SUBSYSTEM_DEF(traumas)
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/civilian/clown, /obj/item/clothing/shoes/clown_shoes,
/obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn,
- /obj/item/pda/clown, /obj/item/grown/bananapeel, /obj/item/reagent_containers/food/snacks/cheesiehonkers,
+ /obj/item/modular_computer/tablet/pda/preset/clown, /obj/item/grown/bananapeel, /obj/item/reagent_containers/food/snacks/cheesiehonkers,
/obj/item/trash/cheesie)),
"greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod,
diff --git a/code/controllers/subsystem/wardrobe.dm b/code/controllers/subsystem/wardrobe.dm
index 69c506105baa..25ae49a34faa 100644
--- a/code/controllers/subsystem/wardrobe.dm
+++ b/code/controllers/subsystem/wardrobe.dm
@@ -42,7 +42,6 @@ SUBSYSTEM_DEF(wardrobe)
setup_callbacks()
load_outfits()
load_species()
- load_pda_nicknacks()
load_storage_contents()
hard_refresh_queue()
stock_hit = 0
@@ -317,9 +316,6 @@ SUBSYSTEM_DEF(wardrobe)
/// Mind this
/datum/controller/subsystem/wardrobe/proc/setup_callbacks()
var/list/play_with = new /list(WARDROBE_CALLBACK_REMOVE) // Turns out there's a global list of pdas. Let's work around that yeah?
- play_with[WARDROBE_CALLBACK_INSERT] = CALLBACK(null, TYPE_PROC_REF(/obj/item/pda, display_pda))
- play_with[WARDROBE_CALLBACK_REMOVE] = CALLBACK(null, TYPE_PROC_REF(/obj/item/pda, cloak_pda))
- initial_callbacks[/obj/item/pda] = play_with
play_with = new /list(WARDROBE_CALLBACK_REMOVE) // Don't want organs rotting on the job
play_with[WARDROBE_CALLBACK_INSERT] = CALLBACK(null, TYPE_PROC_REF(/obj/item/organ, enter_wardrobe))
@@ -349,19 +345,11 @@ SUBSYSTEM_DEF(wardrobe)
canonize_type(species_request)
CHECK_TICK
-/datum/controller/subsystem/wardrobe/proc/load_pda_nicknacks()
- for(var/obj/item/pda/pager as anything in typesof(/obj/item/pda))
- var/obj/item/pda/flip_phone = new pager()
- for(var/datum/outfit_item_type as anything in flip_phone.get_types_to_preload())
- canonize_type(outfit_item_type)
- qdel(flip_phone)
- CHECK_TICK
-
/datum/controller/subsystem/wardrobe/proc/load_storage_contents()
for(var/obj/item/storage/crate as anything in subtypesof(/obj/item/storage))
if(!initial(crate.preload))
continue
- var/obj/item/pda/another_crate = new crate()
+ var/obj/item/storage/another_crate = new crate()
//Unlike other uses, I really don't want people being lazy with this one.
var/list/somehow_more_boxes = another_crate.get_types_to_preload()
if(!length(somehow_more_boxes))
diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm
index a5afbc16fcb4..85f22414fffd 100644
--- a/code/datums/components/uplink.dm
+++ b/code/datums/components/uplink.dm
@@ -74,9 +74,6 @@ GLOBAL_LIST_EMPTY(uplinks)
RegisterSignal(parent, COMSIG_IMPLANT_IMPLANTING, PROC_REF(implanting))
RegisterSignal(parent, COMSIG_IMPLANT_OTHER, PROC_REF(old_implant))
RegisterSignal(parent, COMSIG_IMPLANT_EXISTING_UPLINK, PROC_REF(new_implant))
- else if(istype(parent, /obj/item/pda))
- RegisterSignal(parent, COMSIG_TABLET_CHANGE_ID, PROC_REF(new_ringtone))
- RegisterSignal(parent, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(check_detonate))
else if(istype(parent, /obj/item/modular_computer))
RegisterSignal(parent, COMSIG_NTOS_CHANGE_RINGTONE, PROC_REF(ntos_ringtone))
RegisterSignal(parent, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(check_detonate))
@@ -296,31 +293,16 @@ GLOBAL_LIST_EMPTY(uplinks)
return COMPONENT_DELETE_NEW_IMPLANT
// PDA signal responses
-
-/datum/component/uplink/proc/new_ringtone(datum/source, mob/living/user, new_ring_text)
- var/obj/item/pda/master = parent
- if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code)))
- if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code)))
- failsafe()
- return COMPONENT_STOP_RINGTONE_CHANGE
- return
- locked = FALSE
- interact(null, user)
- to_chat(user, "The PDA softly beeps.")
- user << browse(null, "window=pda")
- master.mode = 0
- return COMPONENT_STOP_RINGTONE_CHANGE
-
/datum/component/uplink/proc/ntos_ringtone(datum/source, mob/living/user, new_ring_text)
if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code)))
if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code)))
failsafe()
- return COMPONENT_NTOS_STOP_RINGTONE_CHANGE
+ return COMPONENT_STOP_RINGTONE_CHANGE
return
locked = FALSE
interact(null, user)
to_chat(user, "The [parent] softly beeps.")
- return COMPONENT_NTOS_STOP_RINGTONE_CHANGE
+ return COMPONENT_STOP_RINGTONE_CHANGE
/datum/component/uplink/proc/check_detonate()
return COMPONENT_TABLET_NO_DETONATE
@@ -359,7 +341,7 @@ GLOBAL_LIST_EMPTY(uplinks)
/datum/component/uplink/proc/setup_unlock_code()
unlock_code = generate_code()
var/obj/item/P = parent
- if(istype(parent,/obj/item/pda) || istype(parent,/obj/item/modular_computer))
+ if(istype(parent, /obj/item/modular_computer))
unlock_note = "Uplink Passcode: [unlock_code] ([P.name])."
else if(istype(parent,/obj/item/radio))
unlock_note = "Radio Frequency: [format_frequency(unlock_code)] ([P.name])."
@@ -367,7 +349,7 @@ GLOBAL_LIST_EMPTY(uplinks)
unlock_note = "Uplink Degrees: [english_list(unlock_code)] ([P.name])."
/datum/component/uplink/proc/generate_code()
- if(istype(parent,/obj/item/pda) || istype(parent,/obj/item/modular_computer))
+ if(istype(parent,/obj/item/modular_computer))
return "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]"
else if(istype(parent,/obj/item/radio))
return sanitize_frequency(rand(FREQ_COMMON+1, MAX_FREQ))
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index 30c0f2adbeae..8bfa296c526f 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -1,12 +1,30 @@
+#define PDA_EJECT "Eject"
+#define PDA_GREYSCALE_CONFIG 1
+#define PDA_GREYSCALE_COLORS 2
+#define PDA_ICON 3
+#define PDA_ICON_STATE 4
+#define PDA_ICON_STATE_UNPOWERED 5
+#define PDA_ICON_STATE_POWERED 6
+#define PHONE_FINISH_COLOR 1
+
/obj/machinery/pdapainter
name = "\improper PDA painter"
- desc = "A PDA painting machine. To use, simply insert your PDA and choose the desired preset paint scheme."
+ desc = "A PDA painting machine. To use, simply insert your PDA or phone and choose the desired preset paint scheme."
icon = 'icons/obj/pda.dmi'
icon_state = "pdapainter"
density = TRUE
max_integrity = 200
- var/obj/item/pda/storedpda = null
- var/list/colorlist = list()
+ var/obj/item/modular_computer/tablet/inserted_pda
+ var/static/list/pda_skins
+ var/static/list/phone_skins
+
+/obj/machinery/pdapainter/Initialize(mapload)
+ . = ..()
+ if(!pda_skins)
+ pda_skins = list()
+ if(!phone_skins)
+ phone_skins = list()
+ load_pda_skins()
/obj/machinery/pdapainter/update_icon_state()
. = ..()
@@ -23,119 +41,119 @@
. = ..()
if(stat & BROKEN)
return
- if(storedpda)
+ if(inserted_pda)
. += "[initial(icon_state)]-closed"
-/obj/machinery/pdapainter/Initialize(mapload)
- . = ..()
- var/list/blocked = list(
- /obj/item/pda/ai/pai,
- /obj/item/pda/ai,
- /obj/item/pda/heads,
- /obj/item/pda/clear,
- /obj/item/pda/syndicate,
- /obj/item/pda/chameleon,
- /obj/item/pda/chameleon/broken)
-
- for(var/P in typesof(/obj/item/pda) - blocked)
- var/obj/item/pda/D = new P
-
- //D.name = "PDA Style [colorlist.len+1]" //Gotta set the name, otherwise it all comes up as "PDA"
- D.name = D.icon_state //PDAs don't have unique names, but using the sprite names works.
-
- src.colorlist += D
+/obj/machinery/pdapainter/proc/load_pda_skins()
+ if(length(pda_skins)) // We only want to load once
+ return
-/obj/machinery/pdapainter/Destroy()
- QDEL_NULL(storedpda)
+ // PDAs
+ for(var/obj/item/modular_computer/tablet/pda/preset/pda_type as anything in subtypesof(/obj/item/modular_computer/tablet/pda/preset))
+ if(!initial(pda_type.reskin_name))
+ continue
+ if(pda_skins[initial(pda_type.reskin_name)])
+ continue
+ var/list/combination = list(
+ initial(pda_type.greyscale_config),
+ initial(pda_type.greyscale_colors),
+ initial(pda_type.icon),
+ initial(pda_type.icon_state),
+ initial(pda_type.icon_state_unpowered),
+ initial(pda_type.icon_state_powered),
+ )
+ pda_skins[initial(pda_type.reskin_name)] = combination
+
+ // Phones
+ for(var/obj/item/modular_computer/tablet/phone/preset/phone_type as anything in subtypesof(/obj/item/modular_computer/tablet/phone/preset))
+ if(!initial(phone_type.reskin_name))
+ continue
+ if(phone_skins[initial(phone_type.reskin_name)])
+ continue
+ var/list/combination = list(
+ initial(phone_type.finish_color),
+ )
+ phone_skins[initial(phone_type.reskin_name)] = combination
+ return TRUE
+
+/obj/machinery/pdapainter/attackby(obj/item/attacking_item, mob/user, params)
+ if(istype(attacking_item, /obj/item/modular_computer/tablet/pda) || istype(attacking_item, /obj/item/modular_computer/tablet/phone))
+ inserted_pda = attacking_item
+ inserted_pda.forceMove(src)
+ update_icon(UPDATE_OVERLAYS)
+ return TRUE
return ..()
-/obj/machinery/pdapainter/on_deconstruction()
- if(storedpda)
- storedpda.forceMove(loc)
- storedpda = null
-
-/obj/machinery/pdapainter/contents_explosion(severity, target)
- if(storedpda)
- storedpda.ex_act(severity, target)
-
-/obj/machinery/pdapainter/handle_atom_del(atom/A)
- if(A == storedpda)
- storedpda = null
- update_appearance(UPDATE_ICON)
-
-/obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, params)
- if(default_unfasten_wrench(user, O))
- power_change()
+/obj/machinery/pdapainter/interact(mob/user, special_state)
+ . = ..()
+ if(!inserted_pda)
+ balloon_alert(user, "no pda found!")
return
- else if(istype(O, /obj/item/pda))
- if(storedpda)
- to_chat(user, span_warning("There is already a PDA inside!"))
+ var/list/choices = list(PDA_EJECT)
+ if(istype(inserted_pda, /obj/item/modular_computer/tablet/pda))
+ for(var/skin_name in pda_skins)
+ choices += skin_name
+ var/choice = tgui_input_list(user, "Choose what skin to apply", "PDA Skin", choices, PDA_EJECT)
+ if(!in_range(src, user))
+ to_chat(src, span_warning("You are too far away!"))
return
- else if(!user.transferItemToLoc(O, src))
+ if(choice == PDA_EJECT)
+ balloon_alert(user, "ejected pda")
+ ejectpda(user)
return
- storedpda = O
- O.add_fingerprint(user)
- update_appearance(UPDATE_ICON)
-
- else if(O.tool_behaviour == TOOL_WELDER && !user.combat_mode)
- if(stat & BROKEN)
- if(!O.tool_start_check(user, amount=0))
- return
- user.visible_message("[user] is repairing [src].", \
- span_notice("You begin repairing [src]..."), \
- span_italics("You hear welding."))
- if(O.use_tool(src, user, 40, volume=50))
- if(!(stat & BROKEN))
- return
- to_chat(user, span_notice("You repair [src]."))
- stat &= ~BROKEN
- update_integrity(max_integrity)
- update_appearance(UPDATE_ICON)
- else
- to_chat(user, span_notice("[src] does not need repairs."))
- else
- return ..()
-
-/obj/machinery/pdapainter/deconstruct(disassembled = TRUE)
- atom_break()
-
-/obj/machinery/pdapainter/attack_hand(mob/user)
- . = ..()
- if(.)
- return
-
- if(storedpda)
- var/obj/item/pda/P
- P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist
- if(!P)
+ if(!pda_skins[choice])
return
+
+ var/list/skin_choice = pda_skins[choice]
+ inserted_pda.icon = skin_choice[PDA_ICON]
+ inserted_pda.icon_state = skin_choice[PDA_ICON_STATE]
+ inserted_pda.icon_state_powered = skin_choice[PDA_ICON_STATE_POWERED]
+ inserted_pda.icon_state_unpowered = skin_choice[PDA_ICON_STATE_UNPOWERED]
+ if(skin_choice[PDA_GREYSCALE_COLORS] && skin_choice[PDA_GREYSCALE_CONFIG])
+ inserted_pda.set_greyscale(
+ skin_choice[PDA_GREYSCALE_COLORS],
+ skin_choice[PDA_GREYSCALE_CONFIG]
+ )
+ balloon_alert(user, "skin applied")
+ ejectpda(user)
+
+ else if(istype(inserted_pda, /obj/item/modular_computer/tablet/phone))
+ for(var/skin_name in phone_skins)
+ choices += skin_name
+ var/choice = tgui_input_list(user, "Choose what skin to apply", "Phone Skin", choices, PDA_EJECT)
if(!in_range(src, user))
+ to_chat(src, span_warning("You are too far away!"))
+ return
+ if(choice == PDA_EJECT)
+ balloon_alert(user, "ejected phone")
+ ejectpda(user)
return
- if(!storedpda)//is the pda still there?
+ if(!phone_skins[choice])
return
- storedpda.icon_state = P.icon_state
- storedpda.desc = P.desc
- storedpda.light_color = P.light_color //yogs start - pda flashlight colouring
- storedpda.icon = P.icon // This is to prevent yogs PDAs from being blank when switched to normal PDAs, and the other way around.
- storedpda.update_light() //yogs end - pda flashlight colouring
- ejectpda()
+ var/list/skin_choice = phone_skins[choice]
+ inserted_pda.finish_color = skin_choice[PHONE_FINISH_COLOR]
+ inserted_pda.update_appearance(UPDATE_ICON)
+ balloon_alert(user, "skin applied")
+ ejectpda(user)
else
- to_chat(user, span_notice("[src] is empty."))
-
+ balloon_alert(user, "invalid pda")
+ ejectpda(user)
-/obj/machinery/pdapainter/verb/ejectpda()
- set name = "Eject PDA"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat || usr.restrained())
+/obj/machinery/pdapainter/proc/ejectpda(mob/user)
+ if(!inserted_pda)
return
-
- if(storedpda)
- storedpda.forceMove(drop_location())
- storedpda = null
- update_appearance(UPDATE_ICON)
- else
- to_chat(usr, span_warning("[src] is empty!"))
+ if(!user || !user.put_in_hands(inserted_pda))
+ inserted_pda.forceMove(drop_location())
+ inserted_pda = null
+ update_icon(UPDATE_OVERLAYS)
+
+#undef PDA_EJECT
+#undef PDA_GREYSCALE_CONFIG
+#undef PDA_GREYSCALE_COLORS
+#undef PDA_ICON
+#undef PDA_ICON_STATE
+#undef PDA_ICON_STATE_UNPOWERED
+#undef PDA_ICON_STATE_POWERED
+#undef PHONE_FINISH_COLOR
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index f6eb65ae0d1d..5231e4953419 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -286,10 +286,9 @@
return
// OTHER
- if((istype(I, /obj/item/paper) || istype(I, /obj/item/pda)) && isliving(user))
+ if(istype(I, /obj/item/paper) && isliving(user))
var/mob/living/U = user
var/obj/item/paper/X = null
- var/obj/item/pda/P = null
var/itemname = ""
var/info = ""
@@ -297,10 +296,6 @@
X = I
itemname = X.name
info = X.info
- else
- P = I
- itemname = P.name
- info = P.notehtml
to_chat(U, span_notice("You hold \the [itemname] up to the camera..."))
U.changeNext_move(CLICK_CD_MELEE)
for(var/mob/O in GLOB.player_list)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 8c650a44566a..d9c82157eaf8 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -684,18 +684,6 @@
if(!valid_record_change(usr, name, null, active_security_record))
return
var/crime = GLOB.data_core.createCrimeEntry(name, "", logged_in, station_time_timestamp(), fine)
- for (var/obj/item/pda/P in GLOB.PDAs)
- if(P.owner == active_general_record.fields["name"])
- var/message = "You have been fined [fine] credits for '[name]'. Fines may be paid at security."
- var/datum/signal/subspace/messaging/pda/signal = new(src, list(
- "name" = "Security Citation",
- "job" = "Citation Server",
- "message" = message,
- "targets" = list("[P.owner] ([P.ownjob])"),
- "automated" = 1
- ))
- signal.send_to_receivers()
- usr.log_message("(PDA: Citation Server) sent \"[message]\" to [signal.format_target()]", LOG_PDA)
GLOB.data_core.addCitation(active_general_record.fields["id"], crime)
investigate_log("New Citation: [name] Fine: [fine] | Added to [active_general_record.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS)
if("citation_delete")
diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm
index 715140a1cdf0..4d138151b6c5 100644
--- a/code/game/machinery/telecomms/computers/message.dm
+++ b/code/game/machinery/telecomms/computers/message.dm
@@ -8,8 +8,7 @@
#define MSG_MON_SCREEN_MAIN 0
#define MSG_MON_SCREEN_LOGS 1
#define MSG_MON_SCREEN_HACKED 2
-#define MSG_MON_SCREEN_CUSTOM_MSG 3
-#define MSG_MON_SCREEN_REQUEST_LOGS 4
+#define MSG_MON_SCREEN_REQUEST_LOGS 3
// The monitor itself.
/obj/machinery/computer/message_monitor
@@ -32,11 +31,6 @@
var/message = span_notice("System bootup complete. Please select an option.") // The message that shows on the main menu.
var/auth = FALSE // Are they authenticated?
var/optioncount = 7
- // Custom Message Properties
- var/customsender = "System Administrator"
- var/obj/item/pda/customrecepient = null
- var/customjob = "Admin"
- var/custommessage = "This is a test, please ignore."
light_color = LIGHT_COLOR_GREEN
@@ -120,7 +114,6 @@
dat += "
[++i]. Clear Message Logs "
dat += " [++i]. Clear Request Console Logs "
dat += " [++i]. Set Custom Key "
- dat += " [++i]. Send Admin Message "
else
for(var/n = ++i; n <= optioncount; n++)
dat += " [n]. --------------- "
@@ -193,24 +186,6 @@
10010000001110100011010000110000101110100001000000111010
001101001011011010110010100101110"}
- //Fake messages
- if(MSG_MON_SCREEN_CUSTOM_MSG)
- dat += "Back - Reset "
-
- dat += {"
- Sender
- Sender's Job
- Recipient
- Message "}
- //Sender - Sender's Job - Recepient - Message
- //Al Green- Your Dad - Your Mom - WHAT UP!?
-
- dat += {"[customsender]
- [customjob]
- [customrecepient ? customrecepient.owner : "NONE"]
- [custommessage] "}
- dat += "
Send "
-
//Request Console Logs
if(MSG_MON_SCREEN_REQUEST_LOGS)
@@ -254,12 +229,6 @@
/obj/machinery/computer/message_monitor/proc/UnmagConsole()
obj_flags &= ~EMAGGED
-/obj/machinery/computer/message_monitor/proc/ResetMessage()
- customsender = "System Administrator"
- customrecepient = null
- custommessage = "This is a test, please ignore."
- customjob = "Admin"
-
/obj/machinery/computer/message_monitor/Topic(href, href_list)
if(..())
return
@@ -369,70 +338,6 @@
else //if(istype(href_list["delete_logs"], /datum/data_pda_msg))
linkedServer.rc_msgs -= locate(href_list["delete_requests"]) in linkedServer.rc_msgs
message = span_notice("NOTICE: Log Deleted!")
- //Create a custom message
- if (href_list["msg"])
- if(LINKED_SERVER_NONRESPONSIVE)
- message = noserver
- else if(auth)
- screen = MSG_MON_SCREEN_CUSTOM_MSG
- //Fake messaging selection - KEY REQUIRED
- if (href_list["select"])
- if(LINKED_SERVER_NONRESPONSIVE)
- message = noserver
- screen = MSG_MON_SCREEN_MAIN
- else
- switch(href_list["select"])
-
- //Reset
- if("Reset")
- ResetMessage()
-
- //Select Your Name
- if("Sender")
- customsender = stripped_input(usr, "Please enter the sender's name.") || customsender
-
- //Select Receiver
- if("Recepient")
- //Get out list of viable PDAs
- var/list/obj/item/pda/sendPDAs = get_viewable_pdas()
- if(GLOB.PDAs && GLOB.PDAs.len > 0)
- customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortUsernames(sendPDAs)
- else
- customrecepient = null
-
- //Enter custom job
- if("RecJob")
- customjob = stripped_input(usr, "Please enter the sender's job.") || customjob
-
- //Enter message
- if("Message")
- custommessage = stripped_input(usr, "Please enter your message.") || custommessage
-
- //Send message
- if("Send")
- if(isnull(customsender) || customsender == "")
- customsender = "UNKNOWN"
-
- if(isnull(customrecepient))
- message = span_notice("NOTICE: No recepient selected!")
- return attack_hand(usr)
-
- if(isnull(custommessage) || custommessage == "")
- message = span_notice("NOTICE: No message entered!")
- return attack_hand(usr)
-
- var/datum/signal/subspace/messaging/pda/signal = new(src, list(
- "name" = "[customsender]",
- "job" = "[customjob]",
- "message" = custommessage,
- "language" = usr.get_selected_language(), // PDAs now use the language system!
- "targets" = list("[customrecepient.owner] ([customrecepient.ownjob])")
- ))
- // this will log the signal and transmit it to the target
- linkedServer.receive_information(signal, null)
- usr.log_message("(PDA: [name] | [usr.real_name]) sent \"[custommessage]\" to [signal.format_target()]", LOG_PDA)
-
-
//Request Console Logs - KEY REQUIRED
if(href_list["view_requests"])
if(LINKED_SERVER_NONRESPONSIVE)
@@ -448,7 +353,6 @@
#undef MSG_MON_SCREEN_MAIN
#undef MSG_MON_SCREEN_LOGS
#undef MSG_MON_SCREEN_HACKED
-#undef MSG_MON_SCREEN_CUSTOM_MSG
#undef MSG_MON_SCREEN_REQUEST_LOGS
#undef LINKED_SERVER_NONRESPONSIVE
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index dd883f36f967..019b737fc82d 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -129,13 +129,7 @@
if(!istype(signal) || !signal.data["message"] || !on || calibrating)
return
- // log the signal
- if(istype(signal, /datum/signal/subspace/messaging/pda))
- var/datum/signal/subspace/messaging/pda/PDAsignal = signal
- var/datum/data_pda_msg/M = new(PDAsignal.format_target(), "[PDAsignal.data["name"]] ([PDAsignal.data["job"]])", PDAsignal.data["message"], PDAsignal.data["photo"])
- pda_msgs += M
- signal.logged = M
- else if(istype(signal, /datum/signal/subspace/messaging/ntospda))
+ if(istype(signal, /datum/signal/subspace/messaging/ntospda))
var/datum/computer_file/program/pdamessager/recipient = signal.data["targets"][1]
var/datum/computer_file/program/pdamessager/sender = signal.data["program"]
GLOB.NTPDAMessages += list(list(sender.username, recipient.username, signal.data["message"]))
@@ -187,35 +181,6 @@
copy.levels = levels
return copy
-// PDA signal datum
-/datum/signal/subspace/messaging/pda
- var/datum/language/lang // Stores what language the message was written in.
-
-/datum/signal/subspace/messaging/pda/New(init_source,init_data)
- ..()
- lang = data["language"] || /datum/language/common
-
-/datum/signal/subspace/messaging/pda/proc/format_target()
- if (length(data["targets"]) > 1)
- return "Everyone"
- return data["targets"][1]
-
-/datum/signal/subspace/messaging/pda/proc/format_message(mob/living/listener)
- var/msg = data["message"]
- if(istype(listener) && !listener.has_language(lang))
- var/datum/language/langue = GLOB.language_datum_instances[lang]
- msg = langue.scramble(msg)
- if (logged && data["photo"])
- return "\"[msg]\" (Photo )"
- return "\"[msg]\""
-
-/datum/signal/subspace/messaging/pda/broadcast()
- if (!logged) // Can only go through if a message server logs it
- return
- for (var/obj/item/pda/P in GLOB.PDAs)
- if ("[P.owner] ([P.ownjob])" in data["targets"])
- P.receive_message(src)
-
// NTOS PDA signal datum
/datum/signal/subspace/messaging/ntospda
var/datum/language/lang // Stores what language the message was written in.
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
deleted file mode 100644
index 12e9285fcb8e..000000000000
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ /dev/null
@@ -1,1288 +0,0 @@
-
-//The advanced pea-green monochrome lcd of tomorrow.
-
-GLOBAL_LIST_EMPTY(PDAs)
-
-#define PDA_SCANNER_NONE 0
-#define PDA_SCANNER_MEDICAL 1
-#define PDA_SCANNER_FORENSICS 2 //unused
-#define PDA_SCANNER_REAGENT 3
-#define PDA_SCANNER_HALOGEN 4
-#define PDA_SCANNER_GAS 5
-#define PDA_SPAM_DELAY 2 MINUTES
-
-//redd's defines, do not touch
-#define PDA_PRINTING_GENERAL_REQUEST "0"
-#define PDA_PRINTING_COMPLAINT "1"
-#define PDA_PRINTING_INCIDENT_REPORT "2"
-#define PDA_PRINTING_SECURITY_INCIDENT_REPORT "3"
-#define PDA_PRINTING_ITEM_REQUEST "4"
-#define PDA_PRINTING_CYBERIZATION_CONSENT "5"
-#define PDA_PRINTING_HOP_ACCESS_REQUEST "6"
-#define PDA_PRINTING_JOB_CHANGE "7"
-#define PDA_PRINTING_RESEARCH_REQUEST "8"
-#define PDA_PRINTING_MECH_REQUEST "9"
-#define PDA_PRINTING_JOB_REASSIGNMENT_CERTIFICATE "10"
-#define PDA_PRINTING_LITERACY_TEST "11"
-#define PDA_PRINTING_LITERACY_ANSWERS "12"
-
-
-/obj/item/pda
- name = "\improper antique PDA"
- desc = "An outdated, portable microcomputer developed by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
- icon = 'icons/obj/pda.dmi'
- icon_state = "pda"
- item_state = "electronic"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- item_flags = NOBLUDGEON
- w_class = WEIGHT_CLASS_TINY
- slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT
- armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
- resistance_flags = FIRE_PROOF | ACID_PROOF
- light_system = MOVABLE_LIGHT
- light_range = 2.3
- light_power = 0.6
- light_color = "#FFCC66"
- light_on = FALSE
-
- //Main variables
- var/owner = null // String name of owner
- var/default_cartridge = 0 // Typepath of the default cartridge to use
- var/obj/item/cartridge/cartridge = null //current cartridge
- var/mode = 0 //Controls what menu the PDA will display. 0 is hub; the rest are either built in or based on cartridge.
- var/icon_alert = "pda-r" //Icon to be overlayed for message alerts. Taken from the pda icon file.
- var/font_index = 0 //This int tells DM which font is currently selected and lets DM know when the last font has been selected so that it can cycle back to the first font when "toggle font" is pressed again.
- var/font_mode = "font-family:monospace;" //The currently selected font.
- var/background_color = "#808000" //The currently selected background color.
-
- #define FONT_MONO "font-family:monospace;"
- #define FONT_SHARE "font-family:\"Share Tech Mono\", monospace;letter-spacing:0px;"
- #define FONT_ORBITRON "font-family:\"Orbitron\", monospace;letter-spacing:0px; font-size:15px"
- #define FONT_VT "font-family:\"VT323\", monospace;letter-spacing:1px;"
- #define MODE_MONO 0
- #define MODE_SHARE 1
- #define MODE_ORBITRON 2
- #define MODE_VT 3
-
- //Secondary variables
- var/scanmode = PDA_SCANNER_NONE
- var/silent = FALSE //To beep or not to beep, that is the question
- var/toff = FALSE //If TRUE, messenger disabled
- var/list/tnote = list() //Current list of received signals, which are transmuted into messages on-the-spot. Can also be just plain strings, y'know, like, who really gives a shit, y'know
- var/last_text //No text spamming
- var/last_everyone //No text for everyone spamming
- var/last_noise //Also no honk spamming that's bad too
- var/ttone = "beep" //The ringtone!
- var/honkamt = 0 //How many honks left when infected with honk.exe
- var/mimeamt = 0 //How many silence left when infected with mime.exe
- var/note = "Congratulations, your station has chosen the Thinktronic 5235 Personal Data Assistant!" //Current note in the notepad function
- var/notehtml = ""
- var/notescanned = FALSE // True if what is in the notekeeper was from a paper.
- var/hidden = FALSE // Is the PDA hidden from the PDA list?
- var/emped = FALSE
- var/equipped = FALSE //used here to determine if this is the first time its been picked up
-
- var/obj/item/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
- var/ownjob = null //related to above
-
- var/obj/item/paicard/pai = null // A slot for a personal AI device
-
- var/datum/picture/picture //Scanned photo
-
- var/list/contained_item = list(/obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/flashlight/pen, /obj/item/clothing/mask/cigarette)
- //This is the typepath to load "into" the pda
- var/obj/item/insert_type = /obj/item/pen
- //This is the currently inserted item
- var/obj/item/inserted_item
- var/overlays_x_offset = 0 //x offset to use for certain overlays
-
- var/underline_flag = TRUE //flag for underline
- var/beep_cooldown = 0
-
-/obj/item/pda/suicide_act(mob/living/carbon/user)
- var/deathMessage = msg_input(user)
- if (!deathMessage)
- deathMessage = "i ded"
- user.visible_message(span_suicide("[user] is sending a message to the Grim Reaper! It looks like [user.p_theyre()] trying to commit suicide!"))
- tnote += "→ To The Grim Reaper: [deathMessage] "//records a message in their PDA as being sent to the grim reaper
- return BRUTELOSS
-
-/obj/item/pda/examine(mob/user)
- . = ..()
- if(!id && !inserted_item)
- return
-
- if(id)
- . += span_notice("Alt-click to remove the id.")
-
- if(inserted_item && (!isturf(loc)))
- . += span_notice("Ctrl-click to remove [inserted_item].")
-
-/obj/item/pda/Initialize(mapload)
- . = ..()
-
- GLOB.PDAs += src
- if(default_cartridge)
- cartridge = SSwardrobe.provide_type(default_cartridge, src)
- cartridge.host_pda = src
- if(insert_type)
- inserted_item = SSwardrobe.provide_type(insert_type, src)
- update_appearance(UPDATE_ICON)
-
-/obj/item/pda/Destroy()
- GLOB.PDAs -= src
- if(istype(id))
- QDEL_NULL(id)
- if(istype(cartridge))
- QDEL_NULL(cartridge)
- if(istype(pai))
- QDEL_NULL(pai)
- if(istype(inserted_item))
- QDEL_NULL(inserted_item)
- return ..()
-
-/obj/item/pda/equipped(mob/user, slot)
- . = ..()
- if(!equipped)
- if(user.client)
- background_color = user.client.prefs.read_preference(/datum/preference/color/pda_color)
- switch(user.client.prefs.read_preference(/datum/preference/choiced/pda_style))
- if(PDA_FONT_MONO)
- font_index = MODE_MONO
- font_mode = FONT_MONO
- if(PDA_FONT_SHARE)
- font_index = MODE_SHARE
- font_mode = FONT_SHARE
- if(PDA_FONT_ORBITRON)
- font_index = MODE_ORBITRON
- font_mode = FONT_ORBITRON
- if(PDA_FONT_VT)
- font_index = MODE_VT
- font_mode = FONT_VT
- else
- font_index = MODE_MONO
- font_mode = FONT_MONO
- equipped = TRUE
-
-/obj/item/pda/Exited(atom/movable/gone, direction)
- . = ..()
- if(gone == cartridge)
- cartridge.host_pda = null
- cartridge = null
- if(gone == inserted_item)
- inserted_item = null
-
-/obj/item/pda/proc/update_label()
- name = "\improper antique PDA-[owner] ([ownjob])" //Name generalisation
-
-/obj/item/pda/GetAccess()
- if(id)
- return id.GetAccess()
- else
- return ..()
-
-/obj/item/pda/GetID()
- return id
-
-/obj/item/pda/RemoveID()
- return do_remove_id()
-
-/obj/item/pda/InsertID(obj/item/inserting_item)
- var/obj/item/card/inserting_id = inserting_item.RemoveID()
- if(!inserting_id)
- return
- insert_id(inserting_id)
- if(id == inserting_id)
- return TRUE
- return FALSE
-
-/obj/item/pda/update_overlays()
- . = ..()
- var/mutable_appearance/overlay = new()
- overlay.pixel_x = overlays_x_offset
- if(id)
- overlay.icon_state = "id_overlay"
- . += new /mutable_appearance(overlay)
- if(inserted_item)
- overlay.icon_state = "insert_overlay"
- . += new /mutable_appearance(overlay)
- if(light_on)
- overlay.icon_state = "light_overlay"
- . += new /mutable_appearance(overlay)
- if(pai)
- if(pai.pai)
- overlay.icon_state = "pai_overlay"
- . += new /mutable_appearance(overlay)
- else
- overlay.icon_state = "pai_off_overlay"
- . += new /mutable_appearance(overlay)
-
-/obj/item/pda/MouseDrop(mob/over, src_location, over_location)
- var/mob/M = usr
- if((M == over) && usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return attack_self(M)
- return ..()
-
-/obj/item/pda/attack_self_tk(mob/user)
- to_chat(user, span_warning("The PDA's capacitive touch screen doesn't seem to respond!"))
- return
-
-/obj/item/pda/interact(mob/user)
- if(!user.IsAdvancedToolUser())
- to_chat(user, span_warning("You don't have the dexterity to do this!"))
- return
-
- ..()
-
- var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/simple/pda)
- assets.send(user)
-
- user.set_machine(src)
-
- var/dat = "Personal Data Assistant "
- dat += assets.css_tag()
-
- dat += "[PDAIMG(refresh)]Refresh "
-
- if ((!isnull(cartridge)) && (mode == 0))
- dat += " | [PDAIMG(eject)]Eject [cartridge] "
- if (mode)
- dat += " | [PDAIMG(menu)]Return "
-
- if (mode == 0)
- dat += ""
-
- dat += " "
-
- if (!owner)
- dat += "Warning: No owner information entered. Please swipe card. "
- dat += "[PDAIMG(refresh)]Retry "
- else
- switch (mode)
- if (0)
- dat += "PERSONAL DATA ASSISTANT v.1.3 "
- dat += "Owner: [owner], [ownjob] "
- dat += text("ID: [id ? "[id.registered_name], [id.assignment]" : "----------"]")
- dat += text(" [id ? "Update PDA Info" : ""] ")
-
- dat += "[station_time_timestamp()] " //:[world.time / 100 % 6][world.time / 100 % 10]"
- dat += "[time2text(world.realtime, "MMM DD")] [GLOB.year_integer+540]"
-
- dat += " "
-
- dat += "General Functions "
- dat += ""
- if (cartridge.access & CART_ENGINE)
- dat += "Engineering Functions "
- dat += ""
- if (cartridge.access & CART_MEDICAL)
- dat += "Medical Functions "
- dat += ""
- if (cartridge.access & CART_SECURITY)
- dat += "Security Functions "
- dat += ""
- if(cartridge.access & CART_QUARTERMASTER)
- dat += "Quartermaster Functions: "
- dat += ""
- dat += ""
-
- dat += "Utilities "
- dat += ""
-
- if (1)
- dat += "[PDAIMG(notes)] Notekeeper V2.2 "
- dat += "Edit "
- if(notescanned)
- dat += "(This is a scanned image, editing it may cause some text formatting to change.) "
- dat += "[(!notehtml ? note : notehtml)] "
-
- if (2)
- dat += "[PDAIMG(mail)] SpaceMessenger V3.9.6 "
- dat += "[PDAIMG(bell)]Ringer: [silent == 1 ? "Off" : "On"] | "
- dat += "[PDAIMG(mail)]Send / Receive: [toff == 1 ? "Off" : "On"] | "
- dat += "[PDAIMG(bell)]Set Ringtone | "
- dat += "[PDAIMG(mail)]Messages "
-
- if(cartridge)
- dat += cartridge.message_header()
-
- dat += "[PDAIMG(menu)] Detected PDAs "
-
- dat += ""
- var/count = 0
-
- if (!toff)
- for (var/obj/item/pda/P in sortNames(get_viewable_pdas()))
- if (P == src)
- continue
- dat += "[P] "
- if(cartridge)
- dat += cartridge.message_special(P)
- dat += " "
- count++
- dat += " "
- if (count == 0)
- dat += "None detected. "
- else if(cartridge && cartridge.spam_enabled)
- dat += "Send To All "
-
- if(21)
- dat += "[PDAIMG(mail)] SpaceMessenger V3.9.6 "
- dat += "[PDAIMG(blank)]Clear Messages "
-
- dat += "[PDAIMG(mail)] Messages "
-
- //Build the message list
- for(var/x in tnote)
- if(istext(x)) // If it's literally just text
- dat += tnote
- else // It's hopefully a signal
- var/datum/signal/subspace/messaging/pda/sig = x
- dat += "[sig.data["name"]] ([sig.data["job"]]): [sig.format_message(user)] "
- dat += " "
-
- if (3)
- dat += "[PDAIMG(atmos)] Atmospheric Readings "
-
- if (!isopenturf(get_turf(user)))
- dat += "Unable to obtain a reading. "
- else
- var/datum/gas_mixture/environment = user.return_air()
-
- var/pressure = environment?.return_pressure()
- var/total_moles = environment?.total_moles()
-
- dat += "Air Pressure: [round(pressure,0.1)] kPa "
-
- if (total_moles)
- for(var/id in environment.get_gases())
- var/gas_level = environment.get_moles(id)/total_moles
- if(gas_level > 0)
- dat += "[GLOB.gas_data.names[id]]: [round(gas_level*100, 0.01)]% "
-
- dat += "Temperature: [round(environment.return_temperature()-T0C)]°C "
- dat += " "
-
- if (5)
- dat += "Bluespace Paperwork Printing Putting the paper in paperwork! "
-
- // I swear, whoever thought that these magical numbers were a good way to create a menu was a good idea should be fucking shot.
- if(6)
- if(!id || !id.registered_account || !id.registered_account.account_job.paycheck_department)
- mode = 0
- return
- var/dep_account = id.registered_account.account_job.paycheck_department
- dat += "Department Goals for the [SSYogs.getDepartmentFromAccount(dep_account)] department: "
- for(var/datum/department_goal/dg in SSYogs.department_goals)
- if(dg.account == dep_account)
- dat += "[dg.name]: "
- dat += "[dg.desc] "
- dat += " "
-
- else//Else it links to the cart menu proc. Although, it really uses menu hub 4--menu 4 doesn't really exist as it simply redirects to hub.
- dat += cartridge.generate_menu()
-
- dat += ""
-
- if (underline_flag)
- dat = replacetext(dat, "text-decoration:none", "text-decoration:underline")
- if (!underline_flag)
- dat = replacetext(dat, "text-decoration:underline", "text-decoration:none")
-
- user << browse(dat, "window=pda;size=400x450;border=1;can_resize=1;can_minimize=0")
- onclose(user, "pda", src)
-
-/obj/item/pda/Topic(href, href_list)
- ..()
- var/mob/living/U = usr
- //Looking for master was kind of pointless since PDAs don't appear to have one.
-
- if(usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK) && !href_list["close"])
- add_fingerprint(U)
- U.set_machine(src)
-
- switch(href_list["choice"])
-
-//BASIC FUNCTIONS===================================
-
- if ("Toggle_Font")
- //CODE REVISION 2
- font_index = (font_index + 1) % 4
-
- switch(font_index)
- if (MODE_MONO)
- font_mode = FONT_MONO
- if (MODE_SHARE)
- font_mode = FONT_SHARE
- if (MODE_ORBITRON)
- font_mode = FONT_ORBITRON
- if (MODE_VT)
- font_mode = FONT_VT
- if ("Change_Color")
- var/new_color = input("Please enter a color name or hex value (Default is \'#808000\').",background_color)as color
- background_color = new_color
-
- if ("Toggle_Underline")
- underline_flag = !underline_flag
-
- if("Return")//Return
- if(mode<=9) //this is really shitcode. If there are ever more than 9 regular PDA modes this whole thing has to be rewritten. Note to self
- mode = 0
- else
- mode = round(mode/10)
- if(mode==4 || mode == 5)//Fix for cartridges. Redirects to hub.
- mode = 0
- if ("Authenticate")//Checks for ID
- id_check(U)
- if("UpdateInfo")
- ownjob = id.assignment
- if(istype(id, /obj/item/card/id/syndicate))
- owner = id.registered_name
- update_label()
- if("Eject")//Ejects the cart, only done from hub.
- if (!isnull(cartridge))
- U.put_in_hands(cartridge)
- to_chat(U, span_notice("You remove [cartridge] from [src]."))
- scanmode = PDA_SCANNER_NONE
- cartridge.host_pda = null
- cartridge = null
- update_appearance(UPDATE_ICON)
-
-//MENU FUNCTIONS===================================
-
- if("0")//Hub
- mode = 0
- if("1")//Notes
- mode = 1
- if("2")//Messenger
- mode = 2
- if("21")//Read messeges
- mode = 21
- if("3")//Atmos scan
- mode = 3
- if("4")//Redirects to hub
- mode = 0
- if("5") //Paperwork Printer
- mode = 5
- if("6") // Department goals
- if(!id || !id.registered_account || !id.registered_account.account_job.paycheck_department)
- mode = 0
- return
- mode = 6
-
-
-//MAIN FUNCTIONS===================================
-
- if("Light")
- toggle_light()
- if("Medical Scan")
- if(scanmode == PDA_SCANNER_MEDICAL)
- scanmode = PDA_SCANNER_NONE
- else if((!isnull(cartridge)) && (cartridge.access & CART_MEDICAL))
- scanmode = PDA_SCANNER_MEDICAL
- if("Reagent Scan")
- if(scanmode == PDA_SCANNER_REAGENT)
- scanmode = PDA_SCANNER_NONE
- else if((!isnull(cartridge)) && (cartridge.access & CART_REAGENT_SCANNER))
- scanmode = PDA_SCANNER_REAGENT
- if("Halogen Counter")
- if(scanmode == PDA_SCANNER_HALOGEN)
- scanmode = PDA_SCANNER_NONE
- else if((!isnull(cartridge)) && (cartridge.access & CART_ENGINE))
- scanmode = PDA_SCANNER_HALOGEN
- if("Honk")
- if ( !(last_noise && world.time < last_noise + 20) )
- playsound(src, 'sound/items/bikehorn.ogg', 50, 1)
- last_noise = world.time
- if("Trombone")
- if ( !(last_noise && world.time < last_noise + 20) )
- playsound(src, 'sound/misc/sadtrombone.ogg', 50, 1)
- last_noise = world.time
- if("Gas Scan")
- if(scanmode == PDA_SCANNER_GAS)
- scanmode = PDA_SCANNER_NONE
- else if((!isnull(cartridge)) && (cartridge.access & CART_ATMOS))
- scanmode = PDA_SCANNER_GAS
- if("Drone Phone")
- var/alert_s = input(U,"Alert severity level","Ping Drones",null) as null|anything in list("Low","Medium","High","Critical")
- var/area/A = get_area(U)
- if(A && alert_s && !QDELETED(U))
- var/msg = span_boldnotice("NON-DRONE PING: [U.name]: [alert_s] priority alert in [A.name]!")
- _alert_drones(msg, TRUE, U)
- to_chat(U, msg)
- if("Assistant Pager")
- ping_assistants(U)
-
-
-
-//NOTEKEEPER FUNCTIONS===================================
-
- if ("Edit")
- var/n = stripped_multiline_input(U, "Please enter message", name, note)
- if (in_range(src, U) && loc == U)
- if (mode == 1 && n)
- note = n
- notehtml = parsemarkdown(n, U)
- notescanned = FALSE
- else
- U << browse(null, "window=pda")
- return
-
-//MESSENGER FUNCTIONS===================================
-
- if("Toggle Messenger")
- toff = !toff
- if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
- silent = !silent
- if("Clear")//Clears messages
- tnote = list()
- if("Ringtone")
- var/t = stripped_input(U, "Please enter new ringtone", name, ttone, 20)
- if(in_range(src, U) && loc == U && t)
- if(SEND_SIGNAL(src, COMSIG_TABLET_CHANGE_ID, U, t) & COMPONENT_STOP_RINGTONE_CHANGE)
- U << browse(null, "window=pda")
- return
- else
- ttone = t
- else
- U << browse(null, "window=pda")
- return
- if("Message")
- create_message(U, locate(href_list["target"]) in GLOB.PDAs)
-
- if("MessageAll")
- send_to_all(U)
-
- if("cart")
- if(cartridge)
- cartridge.special(U, href_list)
- else
- U << browse(null, "window=pda")
- return
-
-//SYNDICATE FUNCTIONS===================================
-
- if("Toggle Door")
- if(cartridge && cartridge.access & CART_REMOTE_DOOR)
- for(var/obj/machinery/door/poddoor/M in GLOB.machines)
- if(M.id == cartridge.remote_door_id)
- if(M.density)
- M.open()
- else
- M.close()
-
-//pAI FUNCTIONS===================================
- if("pai")
- switch(href_list["option"])
- if("1") // Configure pAI device
- pai.attack_self(U)
- if("2") // Eject pAI device
- usr.put_in_hands(pai)
- to_chat(usr, span_notice("You remove the pAI from the [name]."))
-//Redd's Shitty Paperwork Printing Functions=======
-
- if("print")
- //check if it's a head cartridge or a sec cartridge
- var/turf/user_turf = get_turf(usr)
- if (cartridge.access & CART_STATUS_DISPLAY)
- to_chat(usr, span_warning("The PDA whirrs as a paper materializes!"))
- playsound(src,"sound/items/polaroid1.ogg",30,1)
- //figure out which one we're trying to print
- switch(href_list["paper"])
- if (PDA_PRINTING_GENERAL_REQUEST) //obj/item/paper/paperwork/general_request_form(src)
- usr.put_in_hands(new /obj/item/paper/paperwork/general_request_form(user_turf))
- if (PDA_PRINTING_COMPLAINT)//obj/item/paper/paperwork/complaint_form
- usr.put_in_hands(new /obj/item/paper/paperwork/complaint_form(user_turf))
- if (PDA_PRINTING_INCIDENT_REPORT)
- usr.put_in_hands(new /obj/item/paper/paperwork/incident_report(user_turf))
- if (PDA_PRINTING_SECURITY_INCIDENT_REPORT)
- usr.put_in_hands(new /obj/item/paper/paperwork/sec_incident_report(user_turf))
- if (PDA_PRINTING_ITEM_REQUEST)
- usr.put_in_hands(new /obj/item/paper/paperwork/item_form(user_turf))
- if (PDA_PRINTING_CYBERIZATION_CONSENT)
- usr.put_in_hands(new /obj/item/paper/paperwork/cyborg_request_form(user_turf))
- if (PDA_PRINTING_HOP_ACCESS_REQUEST)
- usr.put_in_hands(new /obj/item/paper/paperwork/hopaccessrequestform(user_turf))
- if (PDA_PRINTING_JOB_CHANGE)
- usr.put_in_hands(new /obj/item/paper/paperwork/hop_job_change_form(user_turf))
- if (PDA_PRINTING_RESEARCH_REQUEST)
- usr.put_in_hands(new /obj/item/paper/paperwork/rd_form(user_turf))
- if (PDA_PRINTING_MECH_REQUEST)
- usr.put_in_hands(new /obj/item/paper/paperwork/mech_form(user_turf))
- if (PDA_PRINTING_JOB_REASSIGNMENT_CERTIFICATE)
- usr.put_in_hands(new /obj/item/paper/paperwork/jobchangecert(user_turf))
- if (PDA_PRINTING_LITERACY_TEST)
- usr.put_in_hands(new /obj/item/paper/paperwork/literacytest(user_turf))
- if (PDA_PRINTING_LITERACY_ANSWERS)
- usr.put_in_hands(new /obj/item/paper/paperwork/literacytest/answers(user_turf))
- else if (cartridge.access & CART_SECURITY)
- to_chat(usr, span_warning("The PDA whirrs as a paper materializes!"))
- playsound(src,"sound/items/polaroid1.ogg",30,1)
- switch(href_list["paper"])
- if (PDA_PRINTING_INCIDENT_REPORT)
- usr.put_in_hands(new /obj/item/paper/paperwork/incident_report(user_turf))
- if (PDA_PRINTING_SECURITY_INCIDENT_REPORT)
- usr.put_in_hands(new /obj/item/paper/paperwork/sec_incident_report(user_turf))
-
-
-
-//LINK FUNCTIONS===================================
-
- else //Cartridge menu linking
- mode = max(text2num(href_list["choice"]), 0)
-
- else//If not in range, can't interact or not using the pda.
- U.unset_machine()
- U << browse(null, "window=pda")
- return
-
-//EXTRA FUNCTIONS===================================
-
- if (mode == 2 || mode == 21)//To clear message overlays.
- update_appearance(UPDATE_ICON)
-
- if ((honkamt > 0) && (prob(60)))//For clown virus.
- honkamt--
- playsound(src, 'sound/items/bikehorn.ogg', 30, 1)
-
- if(U.machine == src && href_list["skiprefresh"]!="1")//Final safety.
- attack_self(U)//It auto-closes the menu prior if the user is not in range and so on.
- else
- U.unset_machine()
- U << browse(null, "window=pda")
- return
-
-/obj/item/pda/proc/remove_id()
-
- if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return
- do_remove_id(usr)
-
-
-/obj/item/pda/proc/do_remove_id(mob/user)
- if(!id)
- return
- if(user)
- user.put_in_hands(id)
- to_chat(user, "You remove the ID from the [name]. ")
- else
- id.forceMove(get_turf(src))
-
- . = id
- id = null
- update_appearance(UPDATE_ICON)
-
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- if(H.wear_id == src)
- H.sec_hud_set_ID()
-
-
-/obj/item/pda/proc/msg_input(mob/living/U = usr)
- var/t = stripped_input(U, "Please enter message", name)
- if (!t || toff)
- return
- if(!U.canUseTopic(src, BE_CLOSE))
- return
- if(emped)
- t = Gibberish(t, 100)
- return t
-
-/obj/item/pda/proc/send_message(mob/living/user, list/obj/item/pda/targets, everyone)
- var/message = msg_input(user)
- if(!message || !targets.len)
- return
- if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY))
- return
- if(prob(1))
- message += "\nSent from my PDA"
- // Send the signal
- var/list/string_targets = list()
- for (var/obj/item/pda/P in targets)
- if (P.owner && P.ownjob) // != src is checked by the UI
- string_targets += "[P.owner] ([P.ownjob])"
- for (var/obj/machinery/computer/message_monitor/M in targets)
- // In case of "Reply" to a message from a console, this will make the
- // message be logged successfully. If the console is impersonating
- // someone by matching their name and job, the reply will reach the
- // impersonated PDA.
- string_targets += "[M.customsender] ([M.customjob])"
- if (!string_targets.len)
- return
-
- var/datum/signal/subspace/messaging/pda/signal = new(src, list(
- "name" = "[owner]",
- "job" = "[ownjob]",
- "message" = message,
- "language" = user.get_selected_language(),
- "targets" = string_targets
- ))
- if (picture)
- signal.data["photo"] = picture
- signal.send_to_receivers()
-
- // If it didn't reach, note that fact
- if (!signal.data["done"])
- to_chat(user, span_notice("ERROR: Server isn't responding."))
- return
-
- var/target_text = signal.format_target()
- // Log it in our logs
- tnote += signal
- // Show it to ghosts
- var/ghost_message = "[span_name("[owner] ")]PDA Message --> [span_name("[target_text]")]: [span_message("[signal.format_message()]")]"
- for(var/mob/M in GLOB.player_list)
- if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
- to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]")
- // Log in the talk log
- user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]")
- to_chat(user, span_info("Message sent to [target_text]: \"[message]\""))
- // Reset the photo
- picture = null
- last_text = world.time
- if (everyone)
- last_everyone = world.time
-
-/obj/item/pda/proc/receive_message(datum/signal/subspace/messaging/pda/signal)
- tnote += signal
-
- if (!silent)
- if(HAS_TRAIT(SSstation, STATION_TRAIT_PDA_GLITCHED))
- playsound(src, pick('sound/machines/twobeep_voice1.ogg', 'sound/machines/twobeep_voice2.ogg'), 50, TRUE)
- else
- playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE)
- audible_message("[icon2html(src, hearers(src))] *[ttone]*", null, 3)
- //Search for holder of the PDA.
- var/mob/living/L = null
- if(loc && isliving(loc))
- L = loc
- //Maybe they are a pAI!
- else
- L = get(src, /mob/living/silicon)
-
- if(L && L.stat != UNCONSCIOUS)
- var/reply = "(Reply )"
- var/hrefstart
- var/hrefend
- if (isAI(L))
- hrefstart = ""
- hrefend = " "
-
- if(signal.data["automated"])
- reply = "\[Automated Message\]"
-
- to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(L)] [reply]")
-
- update_appearance(UPDATE_ICON)
- add_overlay(icon_alert)
-
-/obj/item/pda/proc/receive_ping(message)
- if (!silent)
- if(HAS_TRAIT(SSstation, STATION_TRAIT_PDA_GLITCHED))
- playsound(src, pick('sound/machines/twobeep_voice1.ogg', 'sound/machines/twobeep_voice2.ogg'), 50, TRUE)
- else
- playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE)
- audible_message("[icon2html(src, hearers(src))] *[ttone]*", null, 3)
-
- var/mob/living/L = null
- if(loc && isliving(loc))
- L = loc
- //Maybe they are a pAI!
- else
- L = get(src, /mob/living/silicon)
-
- if(L && L.stat != UNCONSCIOUS)
- to_chat(L, message)
-
-/obj/item/pda/proc/send_to_all(mob/living/U)
- if (last_everyone && world.time < last_everyone + PDA_SPAM_DELAY)
- to_chat(U,span_warning("Send To All function is still on cooldown."))
- return
- send_message(U,get_viewable_pdas(), TRUE)
-
-/obj/item/pda/proc/ping_assistants(mob/living/U)
- if (last_everyone && world.time < last_everyone + PDA_SPAM_DELAY)
- to_chat(U,span_warning("Function is still on cooldown."))
- return
-
- var/area/A = get_area(U)
- var/toSend = stripped_input(U, "Please enter your issue.")
-
- if(!toSend)
- return
-
- toSend = "Assistant requested by [owner] at [A]! Reason: [toSend]"
-
- last_everyone = world.time
- for(var/obj/item/pda/P in get_viewable_assistant_pdas())
- P.receive_ping(toSend)
-
-/obj/item/pda/proc/create_message(mob/living/U, obj/item/pda/P)
- send_message(U,list(P))
-
-/obj/item/pda/AltClick()
- ..()
-
- if(id)
- remove_id()
- else
- remove_pen()
-
-/obj/item/pda/CtrlClick(mob/user)
- . = ..()
-
- if(isturf(loc)) //stops the user from dragging the PDA by ctrl-clicking it.
- return FALSE
-
- remove_pen()
- return FALSE
-
-/obj/item/pda/verb/verb_toggle_light()
- set category = "Object"
- set name = "Toggle Flashlight"
-
- toggle_light()
-
-/obj/item/pda/verb/verb_remove_id()
- set category = "Object"
- set name = "Eject ID"
- set src in usr
-
- if(id)
- remove_id()
- else
- to_chat(usr, span_warning("This PDA does not have an ID in it!"))
-
-/obj/item/pda/verb/verb_remove_pen()
- set category = "Object"
- set name = "Remove Pen"
- set src in usr
-
- remove_pen()
-
-/obj/item/pda/proc/toggle_light()
- if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE))
- return
- if(light_on)
- set_light_on(FALSE)
- else if(light_range)
- set_light_on(TRUE)
- update_appearance(UPDATE_ICON)
- for(var/X in actions)
- var/datum/action/A = X
- A.build_all_button_icons()
-
-/obj/item/pda/proc/remove_pen()
-
- if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return
-
- if(inserted_item)
- to_chat(usr, span_notice("You remove [inserted_item] from [src]."))
- usr.put_in_hands(inserted_item) //Don't need to manage the pen ref, handled on Exited()
- update_appearance(UPDATE_ICON)
- else
- to_chat(usr, span_warning("This PDA does not have a pen in it!"))
-
-//trying to insert or remove an id
-/obj/item/pda/proc/id_check(mob/user, obj/item/card/id/I)
- if(!I)
- if(id && (src in user.contents))
- remove_id()
- return TRUE
- else
- var/obj/item/card/id/C = user.get_active_held_item()
- if(istype(C))
- I = C
-
- if(I && I?.registered_name)
- if(!user.transferItemToLoc(I, src))
- return FALSE
- insert_id(I, user)
- update_appearance(UPDATE_ICON)
- return TRUE
-
-
-/obj/item/pda/proc/insert_id(obj/item/card/id/inserting_id, mob/user)
- var/obj/old_id = id
- id = inserting_id
- if(ishuman(loc))
- var/mob/living/carbon/human/human_wearer = loc
- if(human_wearer.wear_id == src)
- human_wearer.sec_hud_set_ID()
- if(old_id)
- if(user)
- user.put_in_hands(old_id)
- else
- old_id.forceMove(get_turf(src))
-
-
-// access to status display signals
-/obj/item/pda/attackby(obj/item/C, mob/user, params)
- if(istype(C, /obj/item/cartridge) && !cartridge)
- if(!user.transferItemToLoc(C, src))
- return
- cartridge = C
- cartridge.host_pda = src
- to_chat(user, span_notice("You insert [cartridge] into [src]."))
- update_appearance(UPDATE_ICON)
-
- else if(istype(C, /obj/item/card/id))
- var/obj/item/card/id/idcard = C
- if(!idcard.registered_name)
- to_chat(user, span_warning("\The [src] rejects the ID!"))
- return
- if(!owner)
- owner = idcard.registered_name
- ownjob = idcard.assignment
- update_label()
- to_chat(user, span_notice("Card scanned."))
- else
- //Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
- if(((src in user.contents) || (isturf(loc) && in_range(src, user))) && (C in user.contents))
- if(!id_check(user, idcard))
- return
- to_chat(user, span_notice("You put the ID into \the [src]'s slot."))
- updateSelfDialog()//Update self dialog on success.
- return //Return in case of failed check or when successful.
- updateSelfDialog()//For the non-input related code.
- else if(istype(C, /obj/item/paicard) && !pai)
- if(!user.transferItemToLoc(C, src))
- return
- pai = C
- to_chat(user, span_notice("You slot \the [C] into [src]."))
- update_appearance(UPDATE_ICON)
- updateUsrDialog()
- else if(is_type_in_list(C, contained_item)) //Checks if there is a pen
- if(inserted_item)
- to_chat(user, span_warning("There is already \a [inserted_item] in \the [src]!"))
- else
- if(!user.transferItemToLoc(C, src))
- return
- to_chat(user, span_notice("You slide \the [C] into \the [src]."))
- inserted_item = C
- update_appearance(UPDATE_ICON)
- else if(istype(C, /obj/item/photo))
- var/obj/item/photo/P = C
- picture = P.picture
- to_chat(user, span_notice("You scan \the [C]."))
- else
- return ..()
-
-/obj/item/pda/attack(mob/living/carbon/C, mob/living/user)
- if(istype(C))
- switch(scanmode)
-
- if(PDA_SCANNER_MEDICAL)
- if(beep_cooldown < world.time)
- playsound(src, 'sound/effects/fastbeep.ogg', 20)
- beep_cooldown = world.time + 40
- C.visible_message(span_alert("[user] has analyzed [C]'s vitals!"))
- healthscan(user, C, 1)
- add_fingerprint(user)
-
- if(PDA_SCANNER_HALOGEN)
- C.visible_message(span_warning("[user] has analyzed [C]'s radiation levels!"))
-
- user.show_message(span_notice("Analyzing Results for [C]:"))
- if(C.radiation)
- user.show_message("\green Radiation Level: \black [C.radiation]")
- else
- user.show_message(span_notice("No radiation detected."))
-
-/obj/item/pda/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
- . = ..()
- if(!proximity)
- return
- switch(scanmode)
- if(PDA_SCANNER_REAGENT)
- if(!isnull(A.reagents))
- if(A.reagents.reagent_list.len > 0)
- var/reagents_length = A.reagents.reagent_list.len
- to_chat(user, span_notice("[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found."))
- for (var/re in A.reagents.reagent_list)
- to_chat(user, span_notice("\t [re]"))
- else
- to_chat(user, span_notice("No active chemical agents found in [A]."))
- else
- to_chat(user, span_notice("No significant chemical agents found in [A]."))
-
- if(PDA_SCANNER_GAS)
- A.analyzer_act(user, src)
-
- if (!scanmode && istype(A, /obj/item/paper) && owner)
- var/obj/item/paper/PP = A
- if (!PP.info)
- to_chat(user, span_warning("Unable to scan! Paper is blank."))
- return
- notehtml = PP.info
- note = replacetext(notehtml, " ", "\[br\]")
- note = replacetext(note, "", "\[*\]")
- note = replacetext(note, "", "\[list\]")
- note = replacetext(note, " ", "\[/list\]")
- note = html_encode(note)
- notescanned = TRUE
- to_chat(user, span_notice("Paper scanned. Saved to PDA's notekeeper.") )
-
-
-/obj/item/pda/proc/explode() //This needs tuning.
- var/turf/T = get_turf(src)
-
- if (ismob(loc))
- var/mob/M = loc
- M.show_message(span_userdanger("Your [src] explodes!"), MSG_VISUAL, span_warning("You hear a loud *pop*!"), MSG_AUDIBLE)
- else
- visible_message(span_danger("[src] explodes!"), span_warning("You hear a loud *pop*!"))
-
- if(T)
- T.hotspot_expose(700,125)
- if(istype(cartridge, /obj/item/cartridge/virus/syndicate))
- explosion(T, -1, 1, 3, 4)
- else
- explosion(T, -1, -1, 2, 3)
- qdel(src)
- return
-
-//pAI verb and proc for sending PDA messages.
-/mob/living/silicon/proc/cmd_send_pdamesg(mob/user)
- var/list/plist = list()
- var/list/namecounts = list()
-
- if(aiPDA.toff)
- to_chat(user, "Turn on your receiver in order to send messages.")
- return
-
- for (var/obj/item/pda/P in get_viewable_pdas())
- if (P == src)
- continue
- else if (P == aiPDA)
- continue
-
- plist[avoid_assoc_duplicate_keys(P.owner, namecounts)] = P
-
- var/c = input(user, "Please select a PDA") as null|anything in sortList(plist)
-
- if (!c)
- return
-
- var/selected = plist[c]
-
- if(aicamera.stored.len)
- var/add_photo = input(user,"Do you want to attach a photo?","Photo","No") as null|anything in list("Yes","No")
- if(add_photo=="Yes")
- var/datum/picture/Pic = aicamera.selectpicture(user)
- aiPDA.picture = Pic
-
- if(incapacitated())
- return
-
- aiPDA.create_message(src, selected)
-
-/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user)
- if(incapacitated())
- return
- if(!isnull(aiPDA))
- //Build the message list
- var/dat
- for(var/x in aiPDA.tnote)
- if(istext(x)) // If it's literally just text
- dat += aiPDA.tnote
- else // It's hopefully a signal
- var/datum/signal/subspace/messaging/pda/sig = x
- dat += "[sig.data["name"]]([sig.data["job"]]) (Reply ) (Track ): [sig.format_message(user)] "
- dat += " "
- var/HTML = "AI PDA Message Log [dat]"
- user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
- else
- to_chat(user, "You do not have a PDA. You should make an issue report about this.")
-
-/mob/living/silicon/pai/verb/cmd_toggle_pda_receiver()
- set category = "AI Commands"
- set name = "PDA - Toggle Sender/Receiver"
- if(usr.stat == DEAD)
- return //won't work if dead
- if(!isnull(aiPDA))
- aiPDA.toff = !aiPDA.toff
- to_chat(usr, span_notice("PDA sender/receiver toggled [(aiPDA.toff ? "Off" : "On")]!"))
- else
- to_chat(usr, "You do not have a PDA. You should make an issue report about this.")
-
-/mob/living/silicon/pai/verb/cmd_toggle_pda_silent()
- set category = "AI Commands"
- set name = "PDA - Toggle Ringer"
- if(usr.stat == DEAD)
- return //won't work if dead
- if(!isnull(aiPDA))
- //0
- aiPDA.silent = !aiPDA.silent
- to_chat(usr, span_notice("PDA ringer toggled [(aiPDA.silent ? "Off" : "On")]!"))
- else
- to_chat(usr, "You do not have a PDA. You should make an issue report about this.")
-
-/mob/living/silicon/pai/proc/cmd_show_message_log(mob/user)
- if(incapacitated())
- return
- if(!isnull(aiPDA))
- //Build the message list
- var/dat
- for(var/x in aiPDA.tnote)
- if(istext(x)) // If it's literally just text
- dat += aiPDA.tnote
- else // It's hopefully a signal
- var/datum/signal/subspace/messaging/pda/sig = x
- dat += "[sig.data["name"]]([sig.data["job"]]) (Reply ): [sig.format_message(user)] "
- dat += " "
- var/HTML = "AI PDA Message Log [dat]"
- user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
- else
- to_chat(user, "You do not have a PDA. You should make an issue report about this.")
-
-// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
-/obj/item/pda/emp_act(severity)
- . = ..()
- if (!(. & EMP_PROTECT_CONTENTS))
- for(var/atom/A in src)
- A.emp_act(severity)
- if (!(. & EMP_PROTECT_SELF))
- emped += 1
- spawn(20 * severity)
- emped -= 1
-
-/proc/get_viewable_pdas()
- . = list()
- // Returns a list of PDAs which can be viewed from another PDA/message monitor.
- for(var/obj/item/pda/P in GLOB.PDAs)
- if(!P.owner || P.toff || P.hidden)
- continue
- . += P
-
-/proc/get_viewable_assistant_pdas()
- . = list()
- // Same as above except returns only assistant PDAs
- for(var/obj/item/pda/P in GLOB.PDAs)
- if(P.ownjob == "Assistant")
- if(!P.owner|| P.toff || P.hidden)
- continue
- . += P
-
-/obj/item/pda/proc/pda_no_detonate()
- return COMPONENT_TABLET_NO_DETONATE
-
-/// Return a list of types you want to pregenerate and use later
-/// Do not pass in things that care about their init location, or expect extra input
-/// Also as a curtiousy to me, don't pass in any bombs
-/obj/item/pda/proc/get_types_to_preload()
- var/list/preload = list()
- preload += default_cartridge
- preload += insert_type
- return preload
-
-/// Callbacks for preloading pdas
-/obj/item/pda/proc/display_pda()
- GLOB.PDAs += src
-
-/// See above, we don't want jerry from accounting to try and message nullspace his new bike
-/obj/item/pda/proc/cloak_pda()
- GLOB.PDAs -= src
-
-#undef PDA_SCANNER_NONE
-#undef PDA_SCANNER_MEDICAL
-#undef PDA_SCANNER_FORENSICS
-#undef PDA_SCANNER_REAGENT
-#undef PDA_SCANNER_HALOGEN
-#undef PDA_SCANNER_GAS
-#undef PDA_SPAM_DELAY
-#undef PDA_PRINTING_GENERAL_REQUEST
-#undef PDA_PRINTING_COMPLAINT
-#undef PDA_PRINTING_INCIDENT_REPORT
-#undef PDA_PRINTING_SECURITY_INCIDENT_REPORT
-#undef PDA_PRINTING_ITEM_REQUEST
-#undef PDA_PRINTING_CYBERIZATION_CONSENT
-#undef PDA_PRINTING_HOP_ACCESS_REQUEST
-#undef PDA_PRINTING_JOB_CHANGE
-#undef PDA_PRINTING_RESEARCH_REQUEST
-#undef PDA_PRINTING_MECH_REQUEST
-#undef PDA_PRINTING_JOB_REASSIGNMENT_CERTIFICATE
-#undef PDA_PRINTING_LITERACY_TEST
-#undef PDA_PRINTING_LITERACY_ANSWERS
-
diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm
deleted file mode 100644
index 3294e545717a..000000000000
--- a/code/game/objects/items/devices/PDA/PDA_types.dm
+++ /dev/null
@@ -1,215 +0,0 @@
-//Clown PDA is slippery.
-/obj/item/pda/clown
- name = "\improper antique clown PDA"
- default_cartridge = /obj/item/cartridge/virus/clown
- insert_type = /obj/item/toy/crayon/rainbow
- icon_state = "pda-clown"
- desc = "An outdated, portable microcomputer developed by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings."
- ttone = "honk"
-
-/obj/item/pda/clown/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING, CALLBACK(src, PROC_REF(AfterSlip)))
-
-/obj/item/pda/clown/proc/AfterSlip(mob/living/carbon/human/M)
- if (istype(M) && (M.real_name != owner))
- var/obj/item/cartridge/virus/clown/cart = cartridge
- if(istype(cart) && cart.charges < 5)
- cart.charges++
-
-// Special AI/pAI PDAs that cannot explode.
-/obj/item/pda/ai
- icon = null
- ttone = "data"
-
-/obj/item/pda/ai/attack_self(mob/user)
- if ((honkamt > 0) && (prob(60)))//For clown virus.
- honkamt--
- playsound(loc, 'sound/items/bikehorn.ogg', 30, 1)
- return
-
-/obj/item/pda/ai/pai
- ttone = "assist"
-
-/obj/item/pda/ai/Initialize(mapload)
- . = ..()
- RegisterSignal(src, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(pda_no_detonate))
-
-/obj/item/pda/medical
- name = "\improper antique medical PDA"
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-medical"
-
-/obj/item/pda/viro
- name = "\improper antique virology PDA"
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-virology"
-
-/obj/item/pda/engineering
- name = "\improper antique engineering PDA"
- default_cartridge = /obj/item/cartridge/engineering
- icon_state = "pda-engineer"
-
-/obj/item/pda/security
- name = "\improper antique security PDA"
- default_cartridge = /obj/item/cartridge/security
- icon_state = "pda-security"
-
-/obj/item/pda/detective
- name = "\improper antique detective PDA"
- default_cartridge = /obj/item/cartridge/detective
- icon_state = "pda-detective"
-
-/obj/item/pda/warden
- name = "\improper antique warden PDA"
- default_cartridge = /obj/item/cartridge/security
- icon_state = "pda-warden"
-
-/obj/item/pda/janitor
- name = "\improper antique janitor PDA"
- default_cartridge = /obj/item/cartridge/janitor
- icon_state = "pda-janitor"
- ttone = "slip"
-
-/obj/item/pda/toxins
- name = "\improper antique scientist PDA"
- default_cartridge = /obj/item/cartridge/signal/toxins
- icon_state = "pda-science"
- ttone = "boom"
-
-/obj/item/pda/mime
- name = "\improper antique mime PDA"
- default_cartridge = /obj/item/cartridge/virus/mime
- insert_type = /obj/item/toy/crayon/mime
- icon_state = "pda-mime"
- silent = TRUE
- ttone = "silence"
-
-/obj/item/pda/heads
- default_cartridge = /obj/item/cartridge/head
- icon_state = "pda-hop"
-
-/obj/item/pda/heads/hop
- name = "\improper antique head of personnel PDA"
- default_cartridge = /obj/item/cartridge/hop
- icon_state = "pda-hop"
-
-/obj/item/pda/heads/hos
- name = "\improper antique head of security PDA"
- default_cartridge = /obj/item/cartridge/hos
- icon_state = "pda-hos"
-
-/obj/item/pda/heads/ce
- name = "\improper antique chief engineer PDA"
- default_cartridge = /obj/item/cartridge/ce
- icon_state = "pda-ce"
-
-/obj/item/pda/heads/cmo
- name = "\improper antique chief medical officer PDA"
- default_cartridge = /obj/item/cartridge/cmo
- icon_state = "pda-cmo"
-
-/obj/item/pda/heads/rd
- name = "\improper antique research director PDA"
- default_cartridge = /obj/item/cartridge/rd
- insert_type = /obj/item/pen/fountain
- icon_state = "pda-rd"
-
-/obj/item/pda/captain
- name = "\improper antique captain PDA"
- default_cartridge = /obj/item/cartridge/captain
- insert_type = /obj/item/pen/fountain/captain
- icon_state = "pda-captain"
-
-/obj/item/pda/captain/Initialize(mapload)
- . = ..()
- RegisterSignal(src, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(pda_no_detonate))
-
-/obj/item/pda/cargo
- name = "\improper antique cargo technician PDA"
- default_cartridge = /obj/item/cartridge/quartermaster
- icon_state = "pda-cargo"
-
-/obj/item/pda/quartermaster
- name = "\improper antique quartermaster PDA"
- default_cartridge = /obj/item/cartridge/quartermaster
- insert_type = /obj/item/pen/fountain
- icon_state = "pda-qm"
-
-/obj/item/pda/shaftminer
- name = "\improper antique shaft miner PDA"
- icon_state = "pda-miner"
-
-/obj/item/pda/syndicate
- default_cartridge = /obj/item/cartridge/virus/syndicate
- icon_state = "pda-syndi"
- name = "\improper antique military PDA"
- owner = "John Doe"
- hidden = 1
-
-/obj/item/pda/chaplain
- name = "\improper antique chaplain PDA"
- icon_state = "pda-chaplain"
- ttone = "holy"
-
-/obj/item/pda/lawyer
- name = "\improper antique lawyer PDA"
- default_cartridge = /obj/item/cartridge/lawyer
- insert_type = /obj/item/pen/fountain
- icon_state = "pda-lawyer"
- ttone = "objection"
-
-/obj/item/pda/botanist
- name = "\improper antique botanist PDA"
- //default_cartridge = /obj/item/cartridge/botanist
- icon_state = "pda-hydro"
-
-/obj/item/pda/roboticist
- name = "\improper antique roboticist PDA"
- icon_state = "pda-roboticist"
- default_cartridge = /obj/item/cartridge/roboticist
-
-/obj/item/pda/curator
- name = "\improper antique curator PDA"
- icon_state = "pda-library"
- icon_alert = "pda-r-library"
- default_cartridge = /obj/item/cartridge/curator
- insert_type = /obj/item/pen/fountain
- desc = "An outdated, portable microcomputer developed by Thinktronic Systems, LTD. This model is a WGW-11 series e-reader."
- note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
- silent = TRUE //Quiet in the library!
- overlays_x_offset = -3
-
-/obj/item/pda/clear
- name = "\improper antique clear PDA"
- icon_state = "pda-clear"
- desc = "An outdated, portable microcomputer developed by Thinktronic Systems, LTD. This model is a special edition with a transparent case."
- note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!"
-
-/obj/item/pda/artist
- name = "\improper antique aesthetic PDA"
- icon_state = "pda-artist"
-
-/obj/item/pda/cook
- name = "\improper antique cook PDA"
- icon_state = "pda-cook"
-
-/obj/item/pda/bar
- name = "\improper antique bartender PDA"
- icon_state = "pda-bartender"
- insert_type = /obj/item/pen/fountain
-
-/obj/item/pda/atmos
- name = "\improper antique atmospherics PDA"
- default_cartridge = /obj/item/cartridge/atmos
- icon_state = "pda-atmos"
-
-/obj/item/pda/chemist
- name = "\improper antique chemist PDA"
- default_cartridge = /obj/item/cartridge/chemistry
- icon_state = "pda-chemistry"
-
-/obj/item/pda/geneticist
- name = "\improper antique geneticist PDA"
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-genetics"
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
deleted file mode 100644
index 1c2132a8e3a3..000000000000
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ /dev/null
@@ -1,732 +0,0 @@
-#define CART_SECURITY (1<<0)
-#define CART_ENGINE (1<<1)
-#define CART_ATMOS (1<<2)
-#define CART_MEDICAL (1<<3)
-#define CART_MANIFEST (1<<4)
-#define CART_CLOWN (1<<5)
-#define CART_MIME (1<<6)
-#define CART_JANITOR (1<<7)
-#define CART_REAGENT_SCANNER (1<<8)
-#define CART_NEWSCASTER (1<<9)
-#define CART_REMOTE_DOOR (1<<10)
-#define CART_STATUS_DISPLAY (1<<11)
-#define CART_QUARTERMASTER (1<<12)
-#define CART_HYDROPONICS (1<<13)
-#define CART_DRONEPHONE (1<<14)
-
-
-/obj/item/cartridge
- name = "generic cartridge"
- desc = "A data cartridge for those old portable microcomputers."
- icon = 'icons/obj/pda.dmi'
- icon_state = "cart"
- item_state = "electronic"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- w_class = WEIGHT_CLASS_TINY
-
- var/obj/item/integrated_signaler/radio = null
-
- var/access = 0 //Bit flags for cartridge access
-
- var/remote_door_id = ""
-
- var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
- var/spam_enabled = 0 //Enables "Send to All" Option
-
- var/obj/item/pda/host_pda = null
- var/menu
- var/datum/data/record/active1 = null //General
- var/datum/data/record/active2 = null //Medical
- var/datum/data/record/active3 = null //Security
- var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor
- var/list/powermonitors = list()
- var/message1 // used for status_displays
- var/message2
- var/list/stored_data = list()
- var/current_channel
-
- var/mob/living/simple_animal/bot/active_bot
- var/list/botlist = list()
-
-/obj/item/cartridge/engineering
- name = "\improper Power-ON cartridge"
- icon_state = "cart-e"
- access = CART_ENGINE | CART_DRONEPHONE
- bot_access_flags = FLOOR_BOT
-
-/obj/item/cartridge/atmos
- name = "\improper BreatheDeep cartridge"
- icon_state = "cart-a"
- access = CART_ATMOS | CART_DRONEPHONE
- bot_access_flags = FLOOR_BOT | FIRE_BOT
-
-/obj/item/cartridge/medical
- name = "\improper Med-U cartridge"
- icon_state = "cart-m"
- access = CART_MEDICAL
- bot_access_flags = MED_BOT
-
-/obj/item/cartridge/chemistry
- name = "\improper ChemWhiz cartridge"
- icon_state = "cart-chem"
- access = CART_REAGENT_SCANNER
- bot_access_flags = MED_BOT
-
-/obj/item/cartridge/security
- name = "\improper R.O.B.U.S.T. cartridge"
- icon_state = "cart-s"
- access = CART_SECURITY
- bot_access_flags = SEC_BOT
-
-/obj/item/cartridge/detective
- name = "\improper D.E.T.E.C.T. cartridge"
- icon_state = "cart-s"
- access = CART_SECURITY | CART_MEDICAL | CART_MANIFEST
- bot_access_flags = SEC_BOT
-
-/obj/item/cartridge/janitor
- name = "\improper CustodiPRO cartridge"
- desc = "The ultimate in clean-room design."
- icon_state = "cart-j"
- access = CART_JANITOR | CART_DRONEPHONE
- bot_access_flags = CLEAN_BOT
-
-/obj/item/cartridge/lawyer
- name = "\improper P.R.O.V.E. cartridge"
- icon_state = "cart-s"
- access = CART_SECURITY
- spam_enabled = 1
-
-/obj/item/cartridge/curator
- name = "\improper Lib-Tweet cartridge"
- icon_state = "cart-s"
- access = CART_NEWSCASTER
-
-/obj/item/cartridge/roboticist
- name = "\improper B.O.O.P. Remote Control cartridge"
- desc = "Packed with heavy duty quad-bot interlink!"
- bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
- access = CART_DRONEPHONE
-
-/obj/item/cartridge/signal
- name = "generic signaler cartridge"
- desc = "A data cartridge with an integrated radio signaler module."
-
-/obj/item/cartridge/signal/toxins
- name = "\improper Signal Ace 2 cartridge"
- desc = "Complete with integrated radio signaler!"
- icon_state = "cart-tox"
- access = CART_REAGENT_SCANNER | CART_ATMOS
-
-/obj/item/cartridge/signal/Initialize(mapload)
- . = ..()
- radio = new(src)
-
-
-
-/obj/item/cartridge/quartermaster
- name = "space parts & space vendors cartridge"
- desc = "Perfect for the Quartermaster on the go!"
- icon_state = "cart-q"
- access = CART_QUARTERMASTER
- bot_access_flags = MULE_BOT
-
-/obj/item/cartridge/head
- name = "\improper Easy-Record DELUXE cartridge"
- icon_state = "cart-h"
- access = CART_MANIFEST | CART_STATUS_DISPLAY
-
-/obj/item/cartridge/hop
- name = "\improper HumanResources9001 cartridge"
- icon_state = "cart-h"
- access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_JANITOR | CART_SECURITY | CART_NEWSCASTER | CART_QUARTERMASTER | CART_DRONEPHONE
- bot_access_flags = MULE_BOT | CLEAN_BOT
-
-/obj/item/cartridge/hos
- name = "\improper R.O.B.U.S.T. DELUXE cartridge"
- icon_state = "cart-hos"
- access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_SECURITY
- bot_access_flags = SEC_BOT
-
-
-/obj/item/cartridge/ce
- name = "\improper Power-On DELUXE cartridge"
- icon_state = "cart-ce"
- access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_ENGINE | CART_ATMOS | CART_DRONEPHONE
- bot_access_flags = FLOOR_BOT | FIRE_BOT
-
-/obj/item/cartridge/cmo
- name = "\improper Med-U DELUXE cartridge"
- icon_state = "cart-cmo"
- access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_MEDICAL
- bot_access_flags = MED_BOT
-
-/obj/item/cartridge/rd
- name = "\improper Signal Ace DELUXE cartridge"
- icon_state = "cart-rd"
- access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_ATMOS | CART_DRONEPHONE
- bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
-
-/obj/item/cartridge/rd/Initialize(mapload)
- . = ..()
- radio = new(src)
-
-/obj/item/cartridge/captain
- name = "\improper Value-PAK cartridge"
- desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime, Clown, and Syndie)
- icon_state = "cart-c"
- access = ~(CART_CLOWN | CART_MIME | CART_REMOTE_DOOR)
- bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
- spam_enabled = 1
-
-/obj/item/cartridge/captain/Initialize(mapload)
- . = ..()
- radio = new(src)
-
-/obj/item/cartridge/proc/post_status(command, data1, data2)
-
- var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS)
-
- if(!frequency)
- return
-
- var/datum/signal/status_signal = new(list("command" = command))
- switch(command)
- if("message")
- status_signal.data["msg1"] = data1
- status_signal.data["msg2"] = data2
- if("alert")
- status_signal.data["picture_state"] = data1
-
- frequency.post_signal(src, status_signal)
-
-/obj/item/cartridge/proc/generate_menu(mob/user)
- if(!host_pda)
- return
- switch(host_pda.mode)
- if(40) //signaller
- menu = "[PDAIMG(signaler)] Remote Signaling System "
-
- menu += {"
-Send Signal
-Frequency:
--
--
-[format_frequency(radio.frequency)]
-+
-+
-
-Code:
--
--
-[radio.code]
-+
-+ "}
- if (41) //crew manifest
-
- menu = "[PDAIMG(notes)] Crew Manifest "
- menu += "Entries cannot be modified from this terminal. "
- if(GLOB.data_core.general)
- for (var/datum/data/record/t in sortRecord(GLOB.data_core.general))
- menu += "[t.fields["name"]] - [t.fields["rank"]] "
- menu += " "
-
-
- if (42) //status displays
- menu = "[PDAIMG(status)] Station Status Display Interlink "
-
- menu += "\[ Clear \] "
- menu += "\[ Shuttle ETA \] "
- menu += "\[ Message \]"
- menu += " "
- menu += "\[ Alert: None |"
- menu += " Red Alert |"
- menu += " Lockdown |"
- menu += " Biohazard \] "
-
- if (43)
- menu = "[PDAIMG(power)] Power Monitors - Please select one "
- powmonitor = null
- powermonitors = list()
- var/powercount = 0
-
-
-
- var/turf/pda_turf = get_turf(src)
- for(var/obj/machinery/computer/monitor/pMon in GLOB.machines)
- if(pMon.stat & (NOPOWER | BROKEN)) //check to make sure the computer is functional
- continue
- if(pda_turf.z != pMon.z) //and that we're on the same zlevel as the computer (lore: limited signal strength)
- continue
- if(pMon.is_secret_monitor) //make sure it isn't a secret one (ie located on a ruin), allowing people to metagame that the location exists
- continue
- powercount++
- powermonitors += pMon
-
-
- if(!powercount)
- menu += span_danger("No connection ")
- else
-
- menu += ""
- var/count = 0
- for(var/obj/machinery/computer/monitor/pMon in powermonitors)
- count++
- menu += "[pMon] - [get_area_name(pMon, TRUE)] "
-
- menu += " "
-
- if (433)
- menu = "[PDAIMG(power)] Power Monitor "
- if(!powmonitor || !powmonitor.get_powernet())
- menu += span_danger("No connection ")
- else
- var/list/L = list()
- var/datum/powernet/connected_powernet = powmonitor.get_powernet()
- for(var/obj/machinery/power/terminal/term in connected_powernet.nodes)
- if(istype(term.master, /obj/machinery/power/apc))
- var/obj/machinery/power/apc/A = term.master
- L += A
-
- menu += "Location: [get_area_name(powmonitor, TRUE)] Total power: [DisplayPower(connected_powernet.viewavail)] Total load: [DisplayPower(connected_powernet.viewload)] "
-
- menu += ""
-
- if(L.len > 0)
- menu += "Area Eqp./Lgt./Env. Load Cell "
-
- var/list/S = list(" Off","AOff"," On", " AOn")
- var/list/chg = list("N","C","F")
-
- for(var/obj/machinery/power/apc/A in L)
- menu += copytext_char(add_trailing(A.area.name, 30, " "), 1, 30)
- menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_leading(DisplayPower(A.lastused_total), 6, " ")] [A.cell ? "[add_leading(round(A.cell.percent()), 3, " ")]% [chg[A.charging+1]]" : " N/C"] "
-
- menu += " "
-
- if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working.
- menu = "[PDAIMG(medical)] Medical Record List "
- if(GLOB.data_core.general)
- for(var/datum/data/record/R in sortRecord(GLOB.data_core.general))
- menu += "[R.fields["id"]]: [R.fields["name"]] "
- menu += " "
- if(441)
- menu = "[PDAIMG(medical)] Medical Record "
-
- if(active1 in GLOB.data_core.general)
- menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]] "
- menu += "Gender: [active1.fields["gender"]] "
- menu += "Age: [active1.fields["age"]] "
- menu += "Rank: [active1.fields["rank"]] "
- menu += "Fingerprint: [active1.fields["fingerprint"]] "
- menu += "Physical Status: [active1.fields["p_stat"]] "
- menu += "Mental Status: [active1.fields["m_stat"]] "
- else
- menu += "Record Lost! "
-
- menu += " "
-
- menu += "[PDAIMG(medical)] Medical Data "
- if(active2 in GLOB.data_core.medical)
- menu += "Blood Type: [active2.fields["blood_type"]] "
-
- menu += "Minor Disabilities: [active2.fields["mi_dis"]] "
- menu += "Details: [active2.fields["mi_dis_d"]] "
-
- menu += "Major Disabilities: [active2.fields["ma_dis"]] "
- menu += "Details: [active2.fields["ma_dis_d"]] "
-
- menu += "Allergies: [active2.fields["alg"]] "
- menu += "Details: [active2.fields["alg_d"]] "
-
- menu += "Current Diseases: [active2.fields["cdi"]] "
- menu += "Details: [active2.fields["cdi_d"]] "
-
- menu += "Important Notes: [active2.fields["notes"]] "
- else
- menu += "Record Lost! "
-
- menu += " "
- if (45) //security records
- menu = "[PDAIMG(cuffs)] Security Record List "
- if(GLOB.data_core.general)
- for (var/datum/data/record/R in sortRecord(GLOB.data_core.general))
- menu += " [R.fields["id"]]: [R.fields["name"]] "
-
- menu += " "
- if(451)
- menu = "[PDAIMG(cuffs)] Security Record "
-
- if(active1 in GLOB.data_core.general)
- menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]] "
- menu += "Gender: [active1.fields["gender"]] "
- menu += "Age: [active1.fields["age"]] "
- menu += "Rank: [active1.fields["rank"]] "
- menu += "Fingerprint: [active1.fields["fingerprint"]] "
- menu += "Physical Status: [active1.fields["p_stat"]] "
- menu += "Mental Status: [active1.fields["m_stat"]] "
- else
- menu += "Record Lost! "
-
- menu += " "
-
- menu += "[PDAIMG(cuffs)] Security Data "
- if(active3 in GLOB.data_core.security)
- menu += "Criminal Status: [active3.fields["criminal"]] "
-
- menu += text(" \nCrimes:")
-
- menu +={"
-
-Crime
-Details
-Author
-Time Added
- "}
- for(var/datum/data/crime/c in active3.fields["crimes"])
- menu += "[c.crimeName] "
- menu += "[c.crimeDetails] "
- menu += "[c.author] "
- menu += "[c.time] "
- menu += " "
- menu += "
"
-
- menu += text(" \nComments:")
-
- menu +={"
-
-Comment
-Author
-Time Added
- "}
- for(var/datum/data/comment/c in active3.fields["comments"])
- menu += "[c.commentText] "
- menu += "[c.author] "
- menu += "[c.time] "
- menu += " "
- menu += "
"
-
- menu += " \nImportant Notes: "
- menu += "[active3.fields["notes"]]"
- else
- menu += "Record Lost! "
-
- menu += " "
-
- if (47) //quartermaster order records
- menu = "[PDAIMG(crate)] Supply Record Interlink "
-
- menu += "Supply shuttle "
- menu += "Location: "
- switch(SSshuttle.supply.mode)
- if(SHUTTLE_CALL)
- menu += "Moving to "
- if(!is_station_level(SSshuttle.supply.z))
- menu += "station"
- else
- menu += "CentCom"
- menu += " ([SSshuttle.supply.timeLeft(600)] Mins)"
- else
- menu += "At "
- if(!is_station_level(SSshuttle.supply.z))
- menu += "CentCom"
- else
- menu += "station"
- menu += " Current approved orders: "
- for(var/S in SSshuttle.shopping_list)
- var/datum/supply_order/SO = S
- menu += "#[SO.id] - [SO.pack.name] approved by [SO.orderer] [SO.reason ? "([SO.reason])":""] "
- menu += " "
-
- menu += "Current requests: "
- for(var/S in SSshuttle.request_list)
- var/datum/supply_order/SO = S
- menu += "#[SO.id] - [SO.pack.name] requested by [SO.orderer] "
- menu += " Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management."
-
- if (48) // quartermaster ore logs
- menu = list("[PDAIMG(crate)] Ore Silo Logs ")
- if (GLOB.ore_silo_default)
- var/list/logs = GLOB.silo_access_logs[REF(GLOB.ore_silo_default)]
- var/len = LAZYLEN(logs)
- var/i = 0
- for(var/M in logs)
- if (++i > 30)
- menu += "(... older logs not shown ...)"
- break
- var/datum/ore_silo_log/entry = M
- menu += "[len - i]. [entry.formatted] "
- if(i == 0)
- menu += "Nothing!"
- else
- menu += "No ore silo detected! "
- menu = jointext(menu, "")
-
- if (49) //janitorial locator
- menu = "[PDAIMG(bucket)] Persistent Custodial Object Locator "
-
- var/turf/cl = get_turf(src)
- if (cl)
- menu += "Current Orbital Location: \[[cl.x],[cl.y]\] "
-
- menu += "Located Mops: "
-
- var/ldat
- for (var/obj/item/mop/M in world)
- var/turf/ml = get_turf(M)
-
- if(ml)
- if (ml.z != cl.z)
- continue
- var/direction = get_dir(src, M)
- ldat += "Mop - \[[ml.x],[ml.y] ([uppertext(dir2text(direction))])\] - [M.reagents.total_volume ? "Wet" : "Dry"] "
-
- if (!ldat)
- menu += "None"
- else
- menu += "[ldat]"
-
- menu += "Located Janitorial Cart: "
-
- ldat = null
- for (var/obj/structure/janitorialcart/B in world)
- var/turf/bl = get_turf(B)
-
- if(bl)
- if (bl.z != cl.z)
- continue
- var/direction = get_dir(src, B)
- ldat += "Cart - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - Water level: [B.reagents.total_volume]/100 "
-
- if (!ldat)
- menu += "None"
- else
- menu += "[ldat]"
-
- menu += "Located Cleanbots: "
-
- ldat = null
- for (var/mob/living/simple_animal/bot/cleanbot/B in GLOB.alive_mob_list)
- var/turf/bl = get_turf(B)
-
- if(bl)
- if (bl.z != cl.z)
- continue
- var/direction = get_dir(src, B)
- ldat += "Cleanbot - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - [B.on ? "Online" : "Offline"] "
-
- if (!ldat)
- menu += "None"
- else
- menu += "[ldat]"
-
- else
- menu += "ERROR: Unable to determine current location."
- menu += "Refresh GPS Locator "
-
- if (53) // Newscaster
- menu = "[PDAIMG(notes)] Newscaster Access "
- menu += " Current Newsfeed: [current_channel ? current_channel : "None"] "
- var/datum/newscaster/feed_channel/current
- for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels)
- if (chan.channel_name == current_channel)
- current = chan
- if(!current)
- menu += " ERROR : NO CHANNEL FOUND "
- return menu
- var/i = 1
- for(var/datum/newscaster/feed_message/msg in current.messages)
- menu +="-[msg.returnBody(-1)] \[Story by [msg.returnAuthor(-1)] \] "
- menu +="[msg.comments.len] comment[msg.comments.len > 1 ? "s" : ""] "
- if(msg.img)
- user << browse_rsc(msg.img, "tmp_photo[i].png")
- menu +=" "
- i++
- for(var/datum/newscaster/feed_comment/comment in msg.comments)
- menu +="[comment.body] [comment.author] [comment.time_stamp] "
- menu += " Post Message "
-
- if (54) // Beepsky, Medibot, Floorbot, and Cleanbot access
- menu = "[PDAIMG(medbot)] Bots Interlink "
- bot_control()
- if (99) //Newscaster message permission error
- menu = " ERROR : NOT AUTHORIZED [host_pda.id ? "" : "- ID SLOT EMPTY"] "
-
- return menu
-
-/obj/item/cartridge/Topic(href, href_list)
- ..()
-
- if(!usr.canUseTopic(src, !issilicon(usr)))
- usr.unset_machine()
- usr << browse(null, "window=pda")
- return
-
- switch(href_list["choice"])
- if("Medical Records")
- active1 = find_record("id", href_list["target"], GLOB.data_core.general)
- if(active1)
- active2 = find_record("id", href_list["target"], GLOB.data_core.medical)
- host_pda.mode = 441
- if(!active2)
- active1 = null
-
- if("Security Records")
- active1 = find_record("id", href_list["target"], GLOB.data_core.general)
- if(active1)
- active3 = find_record("id", href_list["target"], GLOB.data_core.security)
- host_pda.mode = 451
- if(!active3)
- active1 = null
-
- if("Send Signal")
- INVOKE_ASYNC(radio, TYPE_PROC_REF(/obj/item/integrated_signaler, send_activation))
-
- if("Signal Frequency")
- var/new_frequency = sanitize_frequency(radio.frequency + text2num(href_list["sfreq"]))
- radio.set_frequency(new_frequency)
-
- if("Signal Code")
- radio.code += text2num(href_list["scode"])
- radio.code = round(radio.code)
- radio.code = min(100, radio.code)
- radio.code = max(1, radio.code)
-
- if("Status")
- switch(href_list["statdisp"])
- if("message")
- post_status("message", message1, message2)
- message_admins("[ADMIN_LOOKUPFLW(usr)] set the status lines to: [message1] - [message2].")
- if("alert")
- post_status("alert", href_list["alert"])
- if("setmsg1")
- message1 = reject_bad_text(input("Line 1", "Enter Message Text", message1) as text|null, 40)
- updateSelfDialog()
- if("setmsg2")
- message2 = reject_bad_text(input("Line 2", "Enter Message Text", message2) as text|null, 40)
- updateSelfDialog()
- else
- post_status(href_list["statdisp"])
- if("Power Select")
- var/pnum = text2num(href_list["target"])
- powmonitor = powermonitors[pnum]
- host_pda.mode = 433
-
- if("Supply Orders")
- host_pda.mode =47
-
- if("Newscaster Access")
- host_pda.mode = 53
-
- if("Newscaster Message")
- var/host_pda_owner_name = host_pda.id ? "[host_pda.id.registered_name] ([host_pda.id.assignment])" : "Unknown"
- var/message = host_pda.msg_input()
- var/datum/newscaster/feed_channel/current
- for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels)
- if (chan.channel_name == current_channel)
- current = chan
- if(current.locked && current.author != host_pda_owner_name)
- host_pda.mode = 99
- host_pda.Topic(null,list("choice"="Refresh"))
- return
- GLOB.news_network.SubmitArticle(message,host_pda.owner,current_channel)
- host_pda.Topic(null,list("choice"=num2text(host_pda.mode)))
- return
-
- if("Newscaster Switch Channel")
- current_channel = host_pda.msg_input()
- host_pda.Topic(null,list("choice"=num2text(host_pda.mode)))
- return
-
- //Bot control section! Viciously ripped from radios for being laggy and terrible.
- if(href_list["op"])
- switch(href_list["op"])
-
- if("control")
- active_bot = locate(href_list["bot"]) in GLOB.bots_list
-
- if("botlist")
- active_bot = null
- if("summon") //Args are in the correct order, they are stated here just as an easy reminder.
- active_bot.bot_control("summon", usr, host_pda.GetAccess())
- else //Forward all other bot commands to the bot itself!
- active_bot.bot_control(href_list["op"], usr)
-
- if(href_list["mule"]) //MULEbots are special snowflakes, and need different args due to how they work.
- var/mob/living/simple_animal/bot/mulebot/mule = active_bot
- if (istype(mule))
- mule.bot_control(href_list["mule"], usr, pda=TRUE)
-
- if(!host_pda)
- return
- host_pda.attack_self(usr)
-
-
-/obj/item/cartridge/proc/bot_control()
- if(active_bot)
- menu += "[active_bot] Status: ([PDAIMG(refresh)]refresh ) "
- menu += "Model: [active_bot.model] "
- menu += "Location: [get_area(active_bot)] "
- menu += "Mode: [active_bot.get_mode()]"
- if(active_bot.allow_pai)
- menu += " pAI: "
- if(active_bot.paicard && active_bot.paicard.pai)
- menu += "[active_bot.paicard.pai.name]"
- if(active_bot.bot_core.allowed(usr))
- menu += " (eject )"
- else
- menu += "none "
-
- //MULEs!
- if(active_bot.bot_type == MULE_BOT)
- var/mob/living/simple_animal/bot/mulebot/MULE = active_bot
- var/atom/Load = MULE.load
- menu += " Current Load: [ !Load ? "none " : "[Load.name] (unload )" ] "
- menu += "Destination: [MULE.destination ? MULE.destination : "None "] (set ) "
- menu += "Set ID: [MULE.suffix] Modify "
- menu += "Power: [MULE.cell ? MULE.cell.percent() : 0]% "
- menu += "Home: [!MULE.home_destination ? "none " : MULE.home_destination ] "
- menu += "Delivery Reporting: [MULE.report_delivery ? "(On )": "(Off )"] "
- menu += "Auto Return Home: [MULE.auto_return ? "(On )": "(Off )"] "
- menu += "Auto Pickup Crate: [MULE.auto_pickup ? "(On )": "(Off )"] " //Hue.
-
- menu += "\[Stop \] "
- menu += "\[Proceed \] "
- menu += "\[Return Home \] "
-
- else
- menu += " \[Stop Patrol \] " //patrolon
- menu += "\[Start Patrol \] " //patroloff
- menu += "\[Summon Bot \] " //summon
- menu += "Keep an ID inserted to upload access codes upon summoning."
-
- menu += "[PDAIMG(back)]Return to bot list "
- else
- menu += "[PDAIMG(refresh)]Scan for active bots "
- var/turf/current_turf = get_turf(src)
- var/zlevel = current_turf.z
- var/botcount = 0
- for(var/B in GLOB.bots_list) //Git da botz
- var/mob/living/simple_animal/bot/Bot = B
- if(!Bot.on || Bot.z != zlevel || Bot.remote_disabled || !(bot_access_flags & Bot.bot_type)) //Only non-emagged bots on the same Z-level are detected!
- continue //Also, the PDA must have access to the bot type.
- menu += "[Bot.name] ([Bot.get_mode()]) "
- botcount++
- if(!botcount) //No bots at all? Lame.
- menu += "No bots found. "
- return
-
- return menu
-
-//If the cartridge adds a special line to the top of the messaging app
-/obj/item/cartridge/proc/message_header()
- return ""
-
-//If the cartridge adds something to each potetial messaging target
-/obj/item/cartridge/proc/message_special(obj/item/pda/target)
- return ""
-
-//This is called for special abilities of cartridges
-/obj/item/cartridge/proc/special(mob/living/user, list/params)
diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm
deleted file mode 100644
index 39d1a7b5223f..000000000000
--- a/code/game/objects/items/devices/PDA/radio.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-// Radio Cartridge, essentially a remote signaler with limited spectrum.
-/obj/item/integrated_signaler
- name = "\improper PDA radio module"
- desc = "An electronic radio system of Nanotrasen origin."
- icon = 'icons/obj/module.dmi'
- icon_state = "power_mod"
-
-/obj/item/integrated_signaler
- var/frequency = FREQ_SIGNALER
- var/code = DEFAULT_SIGNALER_CODE
- var/last_transmission
- var/datum/radio_frequency/radio_connection
-
-/obj/item/integrated_signaler/Destroy()
- radio_connection = null
- return ..()
-
-/obj/item/integrated_signaler/Initialize(mapload)
- . = ..()
- if (frequency < MIN_FREE_FREQ || frequency > MAX_FREE_FREQ)
- frequency = sanitize_frequency(frequency)
- set_frequency(frequency)
-
-/obj/item/integrated_signaler/proc/set_frequency(new_frequency)
- frequency = new_frequency
- radio_connection = SSradio.return_frequency(frequency)
-
-/obj/item/integrated_signaler/proc/send_activation()
- if(last_transmission && world.time < (last_transmission + 5))
- return
- last_transmission = world.time
-
- var/time = time2text(world.realtime,"hh:mm:ss")
- var/turf/T = get_turf(src)
- GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location [AREACOORD(T)] : [format_frequency(frequency)]/[code]")
-
- var/datum/signal/signal = new(list("code" = code))
- radio_connection.post_signal(src, signal, filter = RADIO_SIGNALER)
diff --git a/code/game/objects/items/devices/PDA/virus_cart.dm b/code/game/objects/items/devices/PDA/virus_cart.dm
deleted file mode 100644
index e2834cba7e77..000000000000
--- a/code/game/objects/items/devices/PDA/virus_cart.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-/obj/item/cartridge/virus
- name = "Generic Virus PDA cart"
- var/charges = 5
-
-/obj/item/cartridge/virus/proc/send_virus(obj/item/pda/target, mob/living/U)
- return
-
-/obj/item/cartridge/virus/message_header()
- return "[charges] viral files left. "
-
-/obj/item/cartridge/virus/message_special(obj/item/pda/target)
- if (!istype(loc, /obj/item/pda))
- return "" //Sanity check, this shouldn't be possible.
- return " (*Send Virus* )"
-
-/obj/item/cartridge/virus/special(mob/living/user, list/params)
- var/obj/item/pda/P = locate(params["target"]) in GLOB.PDAs //Leaving it alone in case it may do something useful, I guess.
- send_virus(P,user)
-
-/obj/item/cartridge/virus/clown
- name = "\improper Honkworks 5.0 cartridge"
- icon_state = "cart-clown"
- desc = "A data cartridge for portable microcomputers. It smells vaguely of bananas."
- access = CART_CLOWN
-
-/obj/item/cartridge/virus/clown/send_virus(obj/item/pda/target, mob/living/U)
- if(charges <= 0)
- to_chat(U, span_notice("Out of charges."))
- return
- if(!isnull(target) && !target.toff)
- charges--
- to_chat(U, span_notice("Virus Sent!"))
- target.honkamt = (rand(15,20))
- else
- to_chat(U, "PDA not found.")
-
-/obj/item/cartridge/virus/mime
- name = "\improper Gestur-O 1000 cartridge"
- icon_state = "cart-mi"
- access = CART_MIME
-
-/obj/item/cartridge/virus/mime/send_virus(obj/item/pda/target, mob/living/U)
- if(charges <= 0)
- to_chat(U, span_notice("Out of charges."))
- return
- if(!isnull(target) && !target.toff)
- charges--
- to_chat(U, span_notice("Virus Sent!"))
- target.silent = TRUE
- target.ttone = "silence"
- else
- to_chat(U, "PDA not found.")
-
-/obj/item/cartridge/virus/syndicate
- name = "\improper Detomatix cartridge"
- icon_state = "cart"
- access = CART_REMOTE_DOOR
- remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
- charges = 4
-
-/obj/item/cartridge/virus/syndicate/send_virus(obj/item/pda/target, mob/living/U)
- if(charges <= 0)
- to_chat(U, span_notice("Out of charges."))
- return
- if(!isnull(target) && !target.toff)
- charges--
- var/difficulty = 0
- if(target.cartridge)
- difficulty += BitCount(target.cartridge.access&(CART_MEDICAL | CART_SECURITY | CART_ENGINE | CART_CLOWN | CART_JANITOR | CART_MANIFEST))
- if(target.cartridge.access & CART_MANIFEST)
- difficulty++ //if cartridge has manifest access it has extra snowflake difficulty
- else
- difficulty += 2
- if(SEND_SIGNAL(target, COMSIG_TABLET_CHECK_DETONATE) & COMPONENT_TABLET_NO_DETONATE || prob(difficulty * 15))
- U.show_message(span_danger("An error flashes on your [src]."), MSG_VISUAL)
- else
- log_bomber(U, "triggered a PDA explosion on", target, "[!is_special_character(U) ? "(TRIGGED BY NON-ANTAG)" : ""]")
- U.show_message(span_notice("Success!"), MSG_VISUAL)
- target.explode()
- else
- to_chat(U, "PDA not found.")
-
-/obj/item/cartridge/virus/frame
- name = "\improper F.R.A.M.E. cartridge"
- icon_state = "cart"
- var/telecrystals = 0
-
-/obj/item/cartridge/virus/frame/send_virus(obj/item/pda/target, mob/living/U)
- if(charges <= 0)
- to_chat(U, span_notice("Out of charges."))
- return
- if(!isnull(target) && !target.toff)
- charges--
- var/lock_code = "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]"
- to_chat(U, span_notice("Virus Sent! The unlock code to the target is: [lock_code]"))
- var/datum/component/uplink/hidden_uplink = target.GetComponent(/datum/component/uplink)
- if(!hidden_uplink)
- hidden_uplink = target.AddComponent(/datum/component/uplink)
- hidden_uplink.unlock_code = lock_code
- else
- hidden_uplink.hidden_crystals += hidden_uplink.telecrystals //Temporarially hide the PDA's crystals, so you can't steal telecrystals.
- hidden_uplink.telecrystals = telecrystals
- telecrystals = 0
- hidden_uplink.active = TRUE
- else
- to_chat(U, "PDA not found.")
diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm
index e4d93b320205..049579a16bec 100644
--- a/code/game/objects/items/stacks/telecrystal.dm
+++ b/code/game/objects/items/stacks/telecrystal.dm
@@ -50,17 +50,6 @@
else
return ..()
-/obj/item/stack/telecrystal/afterattack(obj/item/I, mob/user, proximity)
- . = ..()
- if(istype(I, /obj/item/cartridge/virus/frame))
- var/obj/item/cartridge/virus/frame/cart = I
- if(!cart.charges)
- to_chat(user, span_notice("[cart] is out of charges, it's refusing to accept [src]."))
- return
- cart.telecrystals += amount
- use(amount)
- to_chat(user, span_notice("You slot [src] into [cart]. The next time it's used, it will also give telecrystals."))
-
/obj/item/stack/telecrystal/five
amount = 5
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index ce0d67d9872a..8822500b5003 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -449,10 +449,9 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
id.update_label()
if(worn)
- if(istype(worn, /obj/item/pda))
- var/obj/item/pda/PDA = worn
- PDA.id = id
- id.forceMove(PDA)
+ if(istype(worn, /obj/item/modular_computer))
+ var/obj/item/modular_computer/worn_computer = worn
+ worn_computer.InsertID(id)
else if(istype(worn, /obj/item/storage/wallet))
var/obj/item/storage/wallet/W = worn
W.front_id = id
diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm
index 5e5d7ab1fc40..08e30015435f 100644
--- a/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm
+++ b/code/modules/antagonists/bloodsuckers/powers/targeted/lasombra.dm
@@ -75,8 +75,8 @@
target_atom.visible_message(span_warning("Shadows harden into a translucent wall, blocking passage!"))
/datum/action/cooldown/bloodsucker/targeted/lasombra/proc/disintegrate(obj/item/O)
- if(istype(O, /obj/item/pda))
- var/obj/item/pda/PDA = O
+ if(istype(O, /obj/item/modular_computer/tablet/pda))
+ var/obj/item/modular_computer/tablet/pda/PDA = O
PDA.set_light_on(FALSE)
PDA.update_appearance(UPDATE_ICON)
O.visible_message(span_danger("The light in [PDA] shorts out!"))
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index b7f67d15d085..f53c70dbb386 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -211,9 +211,12 @@
H.equipOutfit(outfit)
if(disable_pda)
// We don't want corpse PDAs to show up in the messenger list.
- var/obj/item/pda/PDA = locate(/obj/item/pda) in H
- if(PDA)
- PDA.toff = TRUE
+ var/obj/item/modular_computer/tablet/pda/computer = locate(/obj/item/modular_computer/tablet/pda) in H
+ if(computer)
+ var/obj/item/computer_hardware/hard_drive/hdd = computer.all_components[MC_HDD]
+ var/datum/computer_file/program/pdamessager/messenger_app = locate() in hdd.stored_files
+ if(messenger_app)
+ messenger_app.receiving = FALSE
if(disable_sensors)
// Using crew monitors to find corpses while creative makes finding certain ruins too easy.
var/obj/item/clothing/under/C = H.w_uniform
@@ -337,7 +340,7 @@
/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H)
..()
// Remove radio and PDA so they wouldn't annoy station crew.
- var/list/del_types = list(/obj/item/pda, /obj/item/radio/headset)
+ var/list/del_types = list(/obj/item/modular_computer/tablet/pda, /obj/item/radio/headset)
for(var/del_type in del_types)
var/obj/item/I = locate(del_type) in H
qdel(I)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index d3eafcd6e8a9..3a830612c3ca 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -772,38 +772,6 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/pda/chameleon
- name = "PDA"
- var/datum/action/item_action/chameleon/change/chameleon_action
-
-/obj/item/pda/chameleon/syndicate
- syndicate = TRUE
-
-/obj/item/pda/chameleon/Initialize(mapload)
- . = ..()
- chameleon_action = new(src)
- if(syndicate)
- chameleon_action.syndicate = TRUE
- chameleon_action.chameleon_type = /obj/item/pda
- chameleon_action.chameleon_name = "PDA"
- chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/pda/heads, /obj/item/pda/ai, /obj/item/pda/ai/pai), only_root_path = TRUE)
- chameleon_action.initialize_disguises()
- add_item_action(chameleon_action)
-
-/obj/item/pda/chameleon/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- chameleon_action.emp_randomise()
-
-/obj/item/pda/chameleon/broken/Initialize(mapload)
- . = ..()
- chameleon_action.emp_randomise(INFINITY)
-
-/obj/item/pda/chameleon/on_chameleon_change()
- . = ..()
- update_label()
-
/obj/item/stamp/chameleon
var/datum/action/item_action/chameleon/change/chameleon_action
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index d234fd078c12..96ab6946ff8b 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -192,11 +192,6 @@
SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/m44, null, TRUE, TRUE)
SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE)
- var/obj/item/pda/heads/pda = H.belt
- pda.owner = H.real_name
- pda.ownjob = "Reaper"
- pda.update_label()
-
var/obj/item/card/id/syndicate/W = H.wear_id
W.access = get_all_accesses()
W.assignment = "Reaper"
@@ -204,6 +199,9 @@
W.registered_name = H.real_name
W.update_label(H.real_name)
+ var/obj/item/modular_computer/tablet/phone/preset/advanced/command/command_phone = H.belt
+ command_phone.update_label(W)
+
/datum/outfit/spec_ops
name = "Special Ops Officer"
diff --git a/code/modules/goals/department_goals/department_goal.dm b/code/modules/goals/department_goals/department_goal.dm
index f6bdd7ff448f..74afd2c7fbaf 100644
--- a/code/modules/goals/department_goals/department_goal.dm
+++ b/code/modules/goals/department_goals/department_goal.dm
@@ -100,6 +100,7 @@
* * message - Can be either "ded", "new", or "complet". Will output either that the objective has been deleted, created, or completed.
*/
/datum/department_goal/proc/message_players(message)
+/* //does nothing until someone sets it to work with new PDAs.
var/string = "Your department's goals have been updated, please have another look at them."
switch(message)
if("ded")
@@ -108,25 +109,12 @@
string = "Your department now has the goal: " + name
if("complet")
string = "Your department completed the goal: " + name
-
+
var/list/occupationsToSendTo = list()
for(var/datum/job/j in SSjob.occupations)
if(j.paycheck_department == account)
occupationsToSendTo += j.title
-
- for(var/obj/item/pda/p in GLOB.PDAs)
- if(p.ownjob in occupationsToSendTo)
- var/datum/signal/subspace/messaging/pda/signal = new(src, list(
- "name" = "Central Command",
- "job" = "Central Command",
- "message" = string,
- "language" = /datum/language/common, // NT only uses galactic common.
- "targets" = list("[p.owner] ([p.ownjob])")
- ))
- var/obj/machinery/telecomms/message_server/linkedServer
- for(var/obj/machinery/telecomms/message_server/S in GLOB.telecomms_list)
- linkedServer = S
- linkedServer.receive_information(signal, null)
+*/
/**
* If the goal is continuous, this will set the timer to now + how-ever-long-the-timer-is
diff --git a/code/modules/jobs/job_types/centcom.dm b/code/modules/jobs/job_types/centcom.dm
index 04dad777aeb1..8a808fff4316 100644
--- a/code/modules/jobs/job_types/centcom.dm
+++ b/code/modules/jobs/job_types/centcom.dm
@@ -27,11 +27,6 @@
/datum/outfit/centcom/official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
- if(pdaequip)
- var/obj/item/pda/heads/pda = H.r_store
- pda.owner = H.real_name
- pda.ownjob = "CentCom Official"
- pda.update_label()
var/obj/item/card/id/W = H.wear_id
W.icon = 'icons/obj/card.dmi' //Bypasses modularisation.
@@ -43,6 +38,10 @@
W.registered_name = H.real_name
W.update_label()
+ if(pdaequip)
+ var/obj/item/modular_computer/tablet/phone/preset/advanced/command/command_phone = H.r_store
+ command_phone.update_label(W)
+
H.ignores_capitalism = TRUE // Yogs -- Lets Centcom guys buy a damned smoke for christ's sake
/datum/outfit/centcom/official/nopda
diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm
index 284c7c33629b..4d5c7892e270 100644
--- a/code/modules/jobs/job_types/medical_doctor.dm
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -77,4 +77,3 @@
l_hand = /obj/item/storage/firstaid/medical
suit_store = /obj/item/flashlight/pen
gloves = /obj/item/clothing/gloves/color/latex/nitrile
- pda_type = /obj/item/pda/medical
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index f40f238d3461..aa090a60d22e 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -137,7 +137,6 @@
new /obj/item/storage/backpack/clown(src)
new /obj/item/clothing/under/rank/civilian/clown(src)
new /obj/item/clothing/shoes/clown_shoes(src)
- new /obj/item/pda/clown(src)
new /obj/item/clothing/mask/gas/clown_hat(src)
new /obj/item/bikehorn(src)
new /obj/item/toy/crayon/rainbow(src)
@@ -145,7 +144,6 @@
if(95)
new /obj/item/clothing/under/rank/civilian/mime(src)
new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/pda/mime(src)
new /obj/item/clothing/gloves/color/white(src)
new /obj/item/clothing/mask/gas/mime(src)
new /obj/item/clothing/head/beret(src)
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index d942bc2dface..1e4c27b6ae02 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -1420,7 +1420,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
if(!disable_warning)
to_chat(H, "The [I.name] is too big to attach.") //should be src?
return FALSE
- if( istype(I, /obj/item/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) )
+ if( istype(I, /obj/item/modular_computer/tablet/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) )
return TRUE
return FALSE
if(ITEM_SLOT_HANDCUFFED)
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 8d81a51a33d3..87284f977c61 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -15,11 +15,7 @@
if(id)
. = id.assignment
else
- var/obj/item/pda/pda = wear_id
- if(istype(pda))
- . = pda.ownjob
- else
- return if_no_id
+ return if_no_id
if(!.)
return if_no_job
@@ -29,10 +25,7 @@
var/obj/item/card/id/id = get_idcard(FALSE)
if(id)
return id.registered_name
- var/obj/item/pda/pda = wear_id
var/obj/item/modular_computer/tablet/tablet = wear_id
- if(istype(pda))
- return pda.owner
if(istype(tablet))
return tablet.name
return if_no_id
@@ -66,15 +59,13 @@
//Useful when player is being seen by other mobs
/mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown")
var/obj/item/storage/wallet/wallet = wear_id
- var/obj/item/pda/pda = wear_id
var/obj/item/card/id/id = wear_id
var/obj/item/modular_computer/tablet/tablet = wear_id
if(istype(wallet))
id = wallet.front_id
+
if(istype(id))
. = id.registered_name
- else if(istype(pda))
- . = pda.owner
else if(istype(tablet))
var/obj/item/computer_hardware/card_slot/card_slot = tablet.all_components[MC_CARD]
if(card_slot?.stored_card)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 96029a11af14..bead88f57b76 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -57,7 +57,8 @@
var/obj/machinery/door/hackdoor // The airlock being hacked
var/hackprogress = 0 // Possible values: 0 - 100, >= 100 means the hack is complete and will be reset upon next check
- var/obj/item/integrated_signaler/signaler // AI's signaller
+ /// Remote signaler
+ var/obj/item/assembly/signaler/internal/signaler
var/obj/item/instrument/piano_synth/internal_instrument
var/obj/machinery/newscaster //pAI Newscaster
@@ -85,6 +86,8 @@
var/silent = FALSE
var/brightness_power = 5
+ var/atom/movable/screen/ai/mod_pc/interfaceButton
+
/mob/living/silicon/pai/can_unbuckle()
return FALSE
@@ -122,14 +125,9 @@
aicamera = new /obj/item/camera/siliconcam/ai_camera(src)
aicamera.flash_enabled = TRUE
- //PDA
- aiPDA = new/obj/item/pda/ai(src)
- aiPDA.owner = real_name
- aiPDA.ownjob = "pAI Messenger"
- aiPDA.name = real_name + " (" + aiPDA.ownjob + ")"
-
. = ..()
+ create_modularInterface()
emittersemicd = TRUE
addtimer(CALLBACK(src, PROC_REF(emittercool)), 600)
@@ -138,6 +136,18 @@
process_hack()
return ..()
+/mob/living/silicon/pai/can_interact_with(atom/target)
+ if(target == signaler) // Bypass for signaler
+ return TRUE
+ if(target == modularInterface)
+ return TRUE
+ return ..()
+
+/mob/living/silicon/pai/create_modularInterface()
+ if(!modularInterface)
+ modularInterface = new /obj/item/modular_computer/tablet/integrated/pai(src)
+ return ..()
+
/mob/living/silicon/pai/proc/process_hack()
if(cable && cable.machine && istype(cable.machine, /obj/machinery/door) && cable.machine == hackdoor && get_dist(src, hackdoor) <= 1)
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index be4d4842bce1..56a6c225366c 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -20,9 +20,9 @@
addtimer(CALLBACK(src, PROC_REF(emittercool)), emittercd)
mobility_flags = MOBILITY_FLAGS_DEFAULT
density = TRUE
- if(istype(card.loc, /obj/item/pda))
- var/obj/item/pda/P = card.loc
- P.pai = null
+ if(istype(card.loc, /obj/item/modular_computer))
+ var/obj/item/modular_computer/P = card.loc
+ P.inserted_pai = null
P.visible_message(span_notice("[src] ejects itself from [P]!"))
if(isliving(card.loc))
var/mob/living/L = card.loc
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 77739a90a570..1075cd422684 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -50,8 +50,6 @@
left_part = ""
if("directives")
left_part = directives()
- if("pdamessage")
- left_part = pdamessage()
if("buy")
left_part = downloadSoftware()
if("manifest")
@@ -191,7 +189,7 @@
if("signaller")
if(href_list["send"])
- signaler.send_activation()
+ signaler.signal()
audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*")
playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
@@ -215,18 +213,6 @@
to_chat(src, "You are not being carried by anyone!")
return 0 // FALSE ? If you return here you won't call paiinterface() below
- if("pdamessage")
- if(!isnull(aiPDA))
- if(href_list["toggler"])
- aiPDA.toff = !aiPDA.toff
- else if(href_list["ringer"])
- aiPDA.silent = !aiPDA.silent
- else if(href_list["target"])
- if(silent)
- return tgui_alert(usr,"Communications circuits remain uninitialized.")
- var/target = locate(href_list["target"]) in GLOB.PDAs
- aiPDA.create_message(src, target)
-
if("medicalrecord") // Accessing medical records
if(subscreen == 1)
medicalActive1 = find_record("id", href_list["med_rec"], GLOB.data_core.general)
@@ -312,8 +298,6 @@
// Basic
dat += "Basic "
for(var/s in software)
- if(s == "digital messenger")
- dat += "Digital Messenger "
if(s == "crew manifest")
dat += "Crew Manifest "
if(s == "host scan")
@@ -633,26 +617,6 @@
to_chat(AI, "Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location. ")
hacking = TRUE
-// Digital Messenger
-/mob/living/silicon/pai/proc/pdamessage()
-
- var/dat = "Digital Messenger "
- dat += {"Signal/Receiver Status:
- [(aiPDA.toff) ? "\[Off\] " : "\[On\] "]
- Ringer Status:
- [(aiPDA.silent) ? "\[Off\] " : "\[On\] "] "}
- dat += ""
- if(!aiPDA.toff)
- for (var/obj/item/pda/P in sortNames(get_viewable_pdas()))
- if (P == aiPDA)
- continue
- dat += "[P] "
- dat += " "
- dat += " "
- dat += " "
- dat += "Messages: [aiPDA.tnote]"
- return dat
-
// Loudness Booster
/mob/living/silicon/pai/proc/softwareLoudness()
if(!internal_instrument)
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 0e64d588266d..2beb6588a216 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -45,7 +45,6 @@
var/interaction_range = 7 //wireless control range
///The reference to the built-in tablet that borgs carry.
var/obj/item/modular_computer/tablet/integrated/modularInterface
- var/obj/item/pda/aiPDA
/mob/living/silicon/Initialize(mapload)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index e7a0fffefb72..86b4e02e86c1 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -81,7 +81,7 @@
visible_message(span_notice("[user] has fixed some of the dents on [src]."))
return
- else if(istype(O, /obj/item/card/id)||istype(O, /obj/item/pda))
+ else if(istype(O, /obj/item/card/id) || istype(O, /obj/item/modular_computer))
if (!mmi)
to_chat(user, span_warning("There's no reason to swipe your ID - the spiderbot has no brain to remove."))
return 0
@@ -90,8 +90,8 @@
if(istype(O, /obj/item/card/id))
id_card = O
else
- var/obj/item/pda/pda = O
- id_card = pda.id
+ var/obj/item/modular_computer/pda = O
+ id_card = pda.GetID()
if(req_access in id_card.GetAccess())
to_chat(user, span_notice("You swipe your access card and pop the brain out of [src]."))
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 8d648598ac0e..0ad6d4f52fd8 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1191,14 +1191,12 @@
break
search_id = 0
- else if( search_pda && istype(A, /obj/item/pda) )
- var/obj/item/pda/PDA = A
- if(PDA.owner == oldname)
- PDA.owner = newname
- PDA.update_label()
- if(!search_id)
- break
- search_pda = 0
+ else if( search_pda && istype(A, /obj/item/modular_computer/tablet) )
+ var/obj/item/modular_computer/tablet/PDA_or_phone = A
+ PDA_or_phone.update_label()
+ if(!search_id)
+ break
+ search_pda = 0
/mob/proc/update_stat()
return
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index e8ae20e558f7..ee2512aab24d 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -206,21 +206,6 @@
return card_slot.GetID()
return ..()
-/obj/item/modular_computer/RemoveID()
- var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD]
- if(!card_slot)
- return
- return card_slot.RemoveID()
-
-/obj/item/modular_computer/InsertID(obj/item/inserting_item)
- var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD]
- if(!card_slot)
- return FALSE
- var/obj/item/card/inserting_id = inserting_item.RemoveID()
- if(!inserting_id)
- return FALSE
- return card_slot.try_insert(inserting_id)
-
/obj/item/modular_computer/MouseDrop(obj/over_object, src_location, over_location)
var/mob/M = usr
if((!istype(over_object, /atom/movable/screen)) && usr.canUseTopic(src, BE_CLOSE))
@@ -316,15 +301,15 @@
. = ..()
update_appearance()
-
-/obj/item/modular_computer/proc/update_label()
- var/obj/item/card/id/stored_id = GetID()
+/obj/item/modular_computer/proc/update_label(obj/item/card/id/override_card)
+ var/obj/item/card/id/stored_id = override_card || GetID()
if(id_rename && stored_id)
name = "[stored_id.registered_name]'s [initial(name)] ([stored_id.assignment])"
var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD]
- var/datum/computer_file/program/pdamessager/msgr = hard_drive.find_file_by_name("pda_client")
- if(istype(msgr))
- msgr.username = "[stored_id.registered_name] ([stored_id.assignment])"
+ if(hard_drive)
+ var/datum/computer_file/program/pdamessager/msgr = hard_drive.find_file_by_name("pda_client")
+ if(istype(msgr))
+ msgr.username = "[stored_id.registered_name] ([stored_id.assignment])"
else
name = initial(name)
diff --git a/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet.dm b/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet.dm
index 697200c12ba5..82d471411123 100644
--- a/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet.dm
+++ b/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet.dm
@@ -64,6 +64,9 @@
CRASH("Cyborg [borgo]'s tablet hard drive rejected recieving a new copy of the self-manage app. To fix, check the hard drive's space remaining. Please make a bug report about this.")
return robotact
+/obj/item/modular_computer/tablet/integrated/ui_state(mob/user)
+ return GLOB.deep_inventory_state //it's in the silicon
+
//Makes the light settings reflect the borg's headlamp settings
/obj/item/modular_computer/tablet/integrated/ui_data(mob/user)
. = ..()
diff --git a/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet_presets.dm b/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet_presets.dm
index d5cb2d672f20..6d6fba1bd407 100644
--- a/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/integrated_tablet/integrated_tablet_presets.dm
@@ -4,3 +4,11 @@
/obj/item/computer_hardware/hard_drive/small/integrated,
/obj/item/computer_hardware/recharger/cyborg,
/obj/item/computer_hardware/network_card/integrated)
+
+/obj/item/modular_computer/tablet/integrated/pai
+ starting_components = list(
+ /obj/item/computer_hardware/processor_unit/small,
+ /obj/item/computer_hardware/hard_drive/small/integrated/pai,
+ /obj/item/computer_hardware/recharger/cyborg,
+ /obj/item/computer_hardware/network_card/integrated,
+ )
diff --git a/code/modules/modular_computers/computers/item/pda/pda_presets.dm b/code/modules/modular_computers/computers/item/pda/pda_presets.dm
index 8dfb10e50031..3e564abba1c1 100644
--- a/code/modules/modular_computers/computers/item/pda/pda_presets.dm
+++ b/code/modules/modular_computers/computers/item/pda/pda_presets.dm
@@ -10,33 +10,39 @@
starting_files = list( new /datum/computer_file/program/budgetorders,
new /datum/computer_file/program/bounty_board)
+ var/reskin_name = null // Name that shows up in PDA painter, or null if forbidden
// This is literally the worst possible cheap tablet
/obj/item/modular_computer/tablet/pda/preset/basic
+ reskin_name = "Default"
desc = "A standard issue PDA often given to station personnel."
/obj/item/modular_computer/tablet/pda/preset/scientist
+ reskin_name = "Scientist"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#B347BC"
/obj/item/modular_computer/tablet/pda/preset/geneticist
+ reskin_name = "Geneticist"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#FAFAFA#000099#0097CA"
/obj/item/modular_computer/tablet/pda/preset/medical
+ reskin_name = "Medical"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#3F96CC"
/obj/item/modular_computer/tablet/pda/preset/medical/Initialize(mapload)
starting_files |= list(
new /datum/computer_file/program/crew_monitor,
- )
+ )
return ..()
/obj/item/modular_computer/tablet/pda/preset/medical/chem
+ reskin_name = "Chemist"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#355FAC#EA6400"
- starting_components = list(
+ starting_components = list(
/obj/item/computer_hardware/processor_unit/pda,
/obj/item/stock_parts/cell/computer/micro,
/obj/item/computer_hardware/hard_drive/small/pda,
@@ -48,30 +54,33 @@
/obj/item/modular_computer/tablet/pda/preset/medical/chem/Initialize(mapload)
starting_files |= list(
new /datum/computer_file/program/chemscan,
- )
+ )
return ..()
/obj/item/modular_computer/tablet/pda/preset/medical/paramed/Initialize(mapload)
starting_files |= list(
new /datum/computer_file/program/radar/lifeline,
- )
+ )
return ..()
/obj/item/modular_computer/tablet/pda/preset/medical/viro
+ reskin_name = "Virologist"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#FAFAFA#355FAC#57C451"
/obj/item/modular_computer/tablet/pda/preset/robo
+ reskin_name = "Roboticist"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#484848#0099CC#D94927"
/obj/item/modular_computer/tablet/pda/preset/robo/Initialize(mapload)
starting_files |= list(
new /datum/computer_file/program/robocontrol,
- )
+ )
return ..()
/obj/item/modular_computer/tablet/pda/preset/cargo
+ reskin_name = "Cargo"
greyscale_colors = "#D6B328#6506CA"
/obj/item/modular_computer/tablet/pda/preset/cargo/Initialize(mapload)
@@ -79,10 +88,11 @@
// new /datum/computer_file/program/bounty_board, Both of these come with the preset PDA hardware (/obj/item/computer_hardware/hard_drive/small/pda).
// new /datum/computer_file/program/budgetorders, Uncomment if any change is made to that in question.
new /datum/computer_file/program/cargobounty,
- )
+ )
return ..()
/obj/item/modular_computer/tablet/pda/preset/cargo/quartermaster
+ reskin_name = "Quartermaster"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#D6B328#6506CA#927444"
@@ -93,10 +103,12 @@
return ..()
/obj/item/modular_computer/tablet/pda/preset/shaft_miner
+ reskin_name = "Shaft Miner"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#927444#D6B328#6C3BA1"
/obj/item/modular_computer/tablet/pda/preset/engineering
+ reskin_name = "Station Engineer"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#D99A2E#69DBF3#E3DF3D"
@@ -106,13 +118,14 @@
new /datum/computer_file/program/supermatter_monitor,
new /datum/computer_file/program/nuclear_monitor,
new /datum/computer_file/program/power_monitor
- )
+ )
return ..()
/obj/item/modular_computer/tablet/pda/preset/atmos
+ reskin_name = "Atmospheric Technician"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#EEDC43#727272#00E5DA"
- starting_components = list(
+ starting_components = list(
/obj/item/computer_hardware/processor_unit/pda,
/obj/item/stock_parts/cell/computer/micro,
/obj/item/computer_hardware/hard_drive/small/pda,
@@ -127,40 +140,49 @@
new /datum/computer_file/program/alarm_monitor,
new /datum/computer_file/program/supermatter_monitor,
new /datum/computer_file/program/nuclear_monitor
- )
+ )
return ..()
/obj/item/modular_computer/tablet/pda/preset/network_admin
+ reskin_name = "Network Admin"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#EEDC43#69DBF3#00CC00"
/obj/item/modular_computer/tablet/pda/preset/janitor
+ reskin_name = "Janitor"
greyscale_colors = "#933ea8#235AB2"
/obj/item/modular_computer/tablet/pda/preset/chaplain
+ reskin_name = "Chaplain"
greyscale_config = /datum/greyscale_config/tablet/chaplain
greyscale_colors = "#333333#D11818"
/obj/item/modular_computer/tablet/pda/preset/botanist
+ reskin_name = "Botanist"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#50E193#E26F41#71A7CA"
/obj/item/modular_computer/tablet/pda/preset/cook
+ reskin_name = "Cook"
greyscale_colors = "#FAFAFA#A92323"
/obj/item/modular_computer/tablet/pda/preset/artist
+ reskin_name = "Artist"
greyscale_colors = "#3E1111#112334"
/obj/item/modular_computer/tablet/pda/preset/fountainpen //Lawyer, Curator, Bartender
pen_type = /obj/item/pen/fountain
/obj/item/modular_computer/tablet/pda/preset/fountainpen/lawyer
+ reskin_name = "Lawyer"
greyscale_colors = "#4C76C8#FFE243"
/obj/item/modular_computer/tablet/pda/preset/fountainpen/bartender
+ reskin_name = "Bartender"
greyscale_colors = "#333333#C7C7C7"
/obj/item/modular_computer/tablet/pda/preset/fountainpen/curator
+ reskin_name = "Curator"
desc = "A small experimental microcomputer."
icon_state = "pda-library"
icon_state_unpowered = "pda-library"
@@ -171,11 +193,13 @@
// Honk
/obj/item/modular_computer/tablet/pda/preset/mime
+ reskin_name = "Mime"
greyscale_config = /datum/greyscale_config/tablet/mime
greyscale_colors = "#FAFAFA#EA3232"
pen_type = /obj/item/toy/crayon/mime
/obj/item/modular_computer/tablet/pda/preset/clown
+ reskin_name = "Clown"
desc = "A hilarious PDA often given to station pranksters."
icon_state = "pda-clown"
icon_state_unpowered = "pda-clown"
@@ -191,19 +215,22 @@
// Honk end
/obj/item/modular_computer/tablet/pda/preset/security
+ reskin_name = "Security"
greyscale_colors = "#EA3232#0000CC"
/obj/item/modular_computer/tablet/pda/preset/security/detective
+ reskin_name = "Detective"
greyscale_colors = "#805A2F#990202"
/obj/item/modular_computer/tablet/pda/preset/security/warden
+ reskin_name = "Warden"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#EA3232#0000CC#363636"
/obj/item/modular_computer/tablet/pda/preset/security/warden/Initialize(mapload)
starting_files |= list(
new /datum/computer_file/program/secureye,
- )
+ )
return ..()
//for inside one of the nukie lockers
@@ -240,5 +267,5 @@
starting_files |= list(
new /datum/computer_file/program/crew_manifest,
new /datum/computer_file/program/paperwork_printer
- )
+ )
return ..()
diff --git a/code/modules/modular_computers/computers/item/phone/phone_presets.dm b/code/modules/modular_computers/computers/item/phone/phone_presets.dm
index 4804ecb26652..f647d603657c 100644
--- a/code/modules/modular_computers/computers/item/phone/phone_presets.dm
+++ b/code/modules/modular_computers/computers/item/phone/phone_presets.dm
@@ -2,8 +2,10 @@
/obj/item/modular_computer/tablet/phone/preset
starting_files = list( new /datum/computer_file/program/budgetorders,
new /datum/computer_file/program/bounty_board)
+ var/reskin_name = null // Name that shows up in PDA painter, or null if forbidden
/obj/item/modular_computer/tablet/phone/preset/cheap
+ reskin_name = "Default"
desc = "A low-end tablet often seen among low ranked station personnel."
starting_components = list( /obj/item/computer_hardware/processor_unit/small,
/obj/item/stock_parts/cell/computer/micro,
@@ -47,10 +49,11 @@
/obj/item/modular_computer/tablet/phone/preset/advanced/command/Initialize(mapload)
starting_files |= list(
new /datum/computer_file/program/card_mod
- )
+ )
. = ..()
/obj/item/modular_computer/tablet/phone/preset/advanced/command/cap
+ reskin_name = "Captain"
finish_color = "yellow"
pen_type = /obj/item/pen/fountain/captain
@@ -59,18 +62,21 @@
RegisterSignal(src, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(pda_no_detonate))
/obj/item/modular_computer/tablet/phone/preset/advanced/command/hop
+ reskin_name = "Head of Personnel"
finish_color = "brown"
/obj/item/modular_computer/tablet/phone/preset/advanced/command/hop/Initialize(mapload)
starting_files |= list(
new /datum/computer_file/program/cargobounty
- )
+ )
. = ..()
/obj/item/modular_computer/tablet/phone/preset/advanced/command/hos
+ reskin_name = "Head of Security"
finish_color = "red"
/obj/item/modular_computer/tablet/phone/preset/advanced/command/ce
+ reskin_name = "Chief Engineer"
starting_components = list( /obj/item/computer_hardware/processor_unit/small,
/obj/item/stock_parts/cell/computer,
/obj/item/computer_hardware/hard_drive/small/pda,
@@ -88,6 +94,7 @@
. = ..()
/obj/item/modular_computer/tablet/phone/preset/advanced/command/rd
+ reskin_name = "Research Director"
finish_color = "purple"
pen_type = /obj/item/pen/fountain
@@ -96,6 +103,7 @@
. = ..()
/obj/item/modular_computer/tablet/phone/preset/advanced/command/cmo
+ reskin_name = "Chief Medical Officer"
finish_color = "white"
/obj/item/modular_computer/tablet/phone/preset/advanced/command/cmo/Initialize(mapload)
diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm
index 620220a694f7..44250d02a4a8 100644
--- a/code/modules/modular_computers/file_system/program.dm
+++ b/code/modules/modular_computers/file_system/program.dm
@@ -197,6 +197,10 @@
generate_network_log("Connection to [network_destination] closed.")
return TRUE
+/datum/computer_file/program/ui_state(mob/user)
+ if(ispAI(user))
+ return GLOB.deep_inventory_state
+ return ..()
/datum/computer_file/program/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm
index f14950be589e..45c31c0e2e34 100644
--- a/code/modules/modular_computers/hardware/hard_drive.dm
+++ b/code/modules/modular_computers/hardware/hard_drive.dm
@@ -180,7 +180,7 @@
// For silicon integrated tablets.
/obj/item/computer_hardware/hard_drive/small/integrated/install_default_programs()
..()
- var/datum/computer_file/program/pdamessager/P = store_file(new/datum/computer_file/program/pdamessager(src))
+ var/datum/computer_file/program/pdamessager/P = store_file(new /datum/computer_file/program/pdamessager(src))
var/obj/item/modular_computer/stored = holder
if(!stored && istype(loc, /obj/item/modular_computer))
stored = loc
@@ -204,6 +204,13 @@
if(istype(stored?.loc, /mob/living/silicon/robot)) // RoboTact is for cyborgs only, not AIs
store_file(new /datum/computer_file/program/robotact(src))
+/obj/item/computer_hardware/hard_drive/small/integrated/pai
+ //does not come with an ntnet store.
+ default_programs = list(
+ /datum/computer_file/program/computerconfig,
+ /datum/computer_file/program/filemanager,
+ )
+
// Syndicate variant - very slight better
/obj/item/computer_hardware/hard_drive/small/syndicate
desc = "An efficient SSD for portable devices developed by a rival organisation."
diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm
index 45e6b403b591..10872d6bb3b2 100644
--- a/code/modules/paperwork/contract.dm
+++ b/code/modules/paperwork/contract.dm
@@ -250,7 +250,7 @@
id = worn.GetID()
if(id)
id.icon_state = "gold"
- id.access = get_all_accesses()+get_all_centcom_access()
+ id.access = get_all_accesses() + get_all_centcom_access()
id.assignment = "Captain"
id.originalassignment = "Captain"
id.update_label()
@@ -262,10 +262,9 @@
id.originalassignment = "Captain"
id.update_label()
if(worn)
- if(istype(worn, /obj/item/pda))
- var/obj/item/pda/PDA = worn
- PDA.id = id
- id.forceMove(worn)
+ if(istype(worn, /obj/item/modular_computer))
+ var/obj/item/modular_computer/worn_computer = worn
+ worn_computer.InsertID(id)
else if(istype(worn, /obj/item/storage/wallet))
var/obj/item/storage/wallet/W = worn
W.front_id = id
diff --git a/yogstation.dme b/yogstation.dme
index 89f49da8548f..2177a726ddbc 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -1407,11 +1407,6 @@
#include "code\game\objects\items\devices\busterarm\gasharpoon.dm"
#include "code\game\objects\items\devices\busterarm\megabuster.dm"
#include "code\game\objects\items\devices\busterarm\wire_snatch.dm"
-#include "code\game\objects\items\devices\PDA\cart.dm"
-#include "code\game\objects\items\devices\PDA\PDA.dm"
-#include "code\game\objects\items\devices\PDA\PDA_types.dm"
-#include "code\game\objects\items\devices\PDA\radio.dm"
-#include "code\game\objects\items\devices\PDA\virus_cart.dm"
#include "code\game\objects\items\devices\radio\electropack.dm"
#include "code\game\objects\items\devices\radio\encryptionkey.dm"
#include "code\game\objects\items\devices\radio\headset.dm"
@@ -4190,9 +4185,6 @@
#include "yogstation\code\game\objects\items\circuitboards\machine_circuitboards.dm"
#include "yogstation\code\game\objects\items\devices\powersink.dm"
#include "yogstation\code\game\objects\items\devices\scanners.dm"
-#include "yogstation\code\game\objects\items\devices\PDA\cart.dm"
-#include "yogstation\code\game\objects\items\devices\PDA\PDA.dm"
-#include "yogstation\code\game\objects\items\devices\PDA\PDA_types.dm"
#include "yogstation\code\game\objects\items\devices\radio\encryptionkey.dm"
#include "yogstation\code\game\objects\items\devices\radio\headset.dm"
#include "yogstation\code\game\objects\items\devices\radio\radio.dm"
@@ -4340,7 +4332,6 @@
#include "yogstation\code\modules\client\verbs\antag_token.dm"
#include "yogstation\code\modules\client\verbs\looc.dm"
#include "yogstation\code\modules\client\verbs\ooc.dm"
-#include "yogstation\code\modules\clothing\chameleon.dm"
#include "yogstation\code\modules\clothing\clothing.dm"
#include "yogstation\code\modules\clothing\donator.dm"
#include "yogstation\code\modules\clothing\fishing.dm"
diff --git a/yogstation/code/game/objects/items/devices/PDA/PDA.dm b/yogstation/code/game/objects/items/devices/PDA/PDA.dm
deleted file mode 100644
index 76fe3693d5d9..000000000000
--- a/yogstation/code/game/objects/items/devices/PDA/PDA.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/pda/CtrlClick(mob/user)
- if(user.contains_atom(src))
- attack_self(user)
- return TRUE
- return ..()
-
-/obj/item/pda
- light_color = "#ffffff"
diff --git a/yogstation/code/game/objects/items/devices/PDA/PDA_types.dm b/yogstation/code/game/objects/items/devices/PDA/PDA_types.dm
deleted file mode 100644
index 935d444e14b5..000000000000
--- a/yogstation/code/game/objects/items/devices/PDA/PDA_types.dm
+++ /dev/null
@@ -1,107 +0,0 @@
-/obj/item/pda/network_admin
- name = "\improper antique telecomms PDA"
- default_cartridge = /obj/item/cartridge/signal
- icon_state = "pda_tcomms"
- light_color = LIGHT_COLOR_ORANGE
-
-/obj/item/pda/para
- name = "\improper antique paramedic PDA"
- default_cartridge = /obj/item/cartridge/paramedic
- icon_state = "pda-medical"
- light_color = LIGHT_COLOR_LIGHT_CYAN
-
-/obj/item/pda/miningmed
- name = "\improper antique mining medic PDA"
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-miningmed"
- light_color = LIGHT_COLOR_LIGHT_CYAN
-
-/obj/item/pda/physician
- name = "\improper antique brig physician PDA"
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-physician"
- light_color = LIGHT_COLOR_RED
-
-/obj/item/pda/clown
- light_color = LIGHT_COLOR_PINK
-
-/obj/item/pda/medical
- light_color = LIGHT_COLOR_LIGHT_CYAN
-
-/obj/item/pda/viro
- light_color = LIGHT_COLOR_LIGHT_CYAN
-
-/obj/item/pda/engineering
- light_color = LIGHT_COLOR_ORANGE
-
-/obj/item/pda/security
- light_color = LIGHT_COLOR_RED
-
-/obj/item/pda/detective
- light_color = LIGHT_COLOR_RED
-
-/obj/item/pda/warden
- light_color = LIGHT_COLOR_RED
-
-/obj/item/pda/janitor
- light_color = LIGHT_COLOR_LAVENDER
-
-/obj/item/pda/toxins
- light_color = LIGHT_COLOR_PURPLE
-
-/obj/item/pda/heads/hop
- light_color = LIGHT_COLOR_BLUE
-
-/obj/item/pda/heads/hos
- light_color = LIGHT_COLOR_FLARE
-
-/obj/item/pda/heads/ce
- light_color = LIGHT_COLOR_FIRE
-
-/obj/item/pda/heads/cmo
- light_color = LIGHT_COLOR_CYAN
-
-/obj/item/pda/heads/rd
- light_color = LIGHT_COLOR_PURPLE
-
-/obj/item/pda/captain
- light_color = LIGHT_COLOR_BLUE
-
-/obj/item/pda/cargo
- light_color = LIGHT_COLOR_YELLOW
-
-/obj/item/pda/quartermaster
- light_color = LIGHT_COLOR_BROWN
-
-/obj/item/pda/shaftminer
- light_color = LIGHT_COLOR_YELLOW
-
-/obj/item/pda/syndicate
- light_color = LIGHT_COLOR_FIRE
-
-/obj/item/pda/chaplain
- light_color = LIGHT_COLOR_SLIME_LAMP
-
-/obj/item/pda/lawyer
- light_color = LIGHT_COLOR_DARK_BLUE
-
-/obj/item/pda/botanist
- light_color = LIGHT_COLOR_BLUEGREEN
-
-/obj/item/pda/roboticist
- light_color = LIGHT_COLOR_PURPLE
-
-/obj/item/pda/curator
- light_color = LIGHT_COLOR_SLIME_LAMP
-
-/obj/item/pda/bar
- light_color = LIGHT_COLOR_SLIME_LAMP
-
-/obj/item/pda/atmos
- light_color = LIGHT_COLOR_ORANGE
-
-/obj/item/pda/chemist
- light_color = LIGHT_COLOR_LIGHT_CYAN
-
-/obj/item/pda/geneticist
- light_color = LIGHT_COLOR_LIGHT_CYAN
diff --git a/yogstation/code/game/objects/items/devices/PDA/cart.dm b/yogstation/code/game/objects/items/devices/PDA/cart.dm
deleted file mode 100644
index b5bcf0efbe44..000000000000
--- a/yogstation/code/game/objects/items/devices/PDA/cart.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/item/cartridge/paramedic
- name = "\improper ParaHotline cartridge"
- icon_state = "cart-m"
- access = CART_MEDICAL
- bot_access_flags = MED_BOT
\ No newline at end of file
diff --git a/yogstation/code/modules/antagonists/infiltrator/outfit.dm b/yogstation/code/modules/antagonists/infiltrator/outfit.dm
index fd1041e4c7e2..c7065131bd3a 100644
--- a/yogstation/code/modules/antagonists/infiltrator/outfit.dm
+++ b/yogstation/code/modules/antagonists/infiltrator/outfit.dm
@@ -39,8 +39,6 @@
card.access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE)
card.update_label()
- var/obj/item/pda/pda = H.belt
- if(istype(pda))
- pda.owner = H.real_name
- pda.ownjob = "Assistant"
- pda.update_label()
+ var/obj/item/modular_computer/worn_computer = H.belt
+ if(istype(worn_computer))
+ worn_computer.update_label(card)
diff --git a/yogstation/code/modules/clothing/chameleon.dm b/yogstation/code/modules/clothing/chameleon.dm
deleted file mode 100644
index 74215f6649ea..000000000000
--- a/yogstation/code/modules/clothing/chameleon.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/action/item_action/chameleon/change/update_item(obj/item/picked_item, obj/item/target = target)
- ..()
- if(ispath(picked_item, /obj/item/pda) && istype(target, /obj/item/pda))
- target.set_light_color(initial(picked_item.light_color))
diff --git a/yogstation/code/modules/vending/gift.dm b/yogstation/code/modules/vending/gift.dm
index 4f68877106ff..f3ef1c82485f 100644
--- a/yogstation/code/modules/vending/gift.dm
+++ b/yogstation/code/modules/vending/gift.dm
@@ -93,33 +93,17 @@
/obj/item/flashlight/flare/signal = 1,
/obj/item/storage/toolbox/mechanical = 1,
/obj/item/stack/cable_coil/random = 4,
- /obj/item/pda = 8, //Keeping these so the clerk can still sell their amazing "antique PDAs"
- /obj/item/cartridge/engineering = 2,
- /obj/item/cartridge/atmos = 2,
- /obj/item/cartridge/medical = 2,
- /obj/item/cartridge/chemistry = 2,
- /obj/item/cartridge/janitor = 2,
- /obj/item/cartridge/lawyer = 2,
- /obj/item/cartridge/curator = 2,
- /obj/item/cartridge/roboticist = 2,
- /obj/item/cartridge/quartermaster = 2)
- contraband = list(/obj/item/clothing/under/yogs/psyche = 1,
- /obj/item/instrument/violin/golden = 1,
- /obj/item/clothing/gloves/color/fyellow = 1,
- /obj/item/airlock_painter = 1,
- /obj/item/cartridge/security = 2,
- /obj/item/cartridge/detective = 2,
- /obj/item/cartridge/quartermaster = 2,
- /obj/item/cartridge/head = 2,
- /obj/item/cartridge/hop = 2,
- /obj/item/cartridge/hos = 2,
- /obj/item/cartridge/ce = 2,
- /obj/item/cartridge/cmo = 2,
- /obj/item/cartridge/rd = 2,
- /obj/item/cartridge/captain = 1)
- premium = list(/obj/item/multitool = 1,
- /obj/item/clothing/head/soft/fishfear = 4,
- /obj/item/pda/clear = 1)
+ )
+ contraband = list(
+ /obj/item/clothing/under/yogs/psyche = 1,
+ /obj/item/instrument/violin/golden = 1,
+ /obj/item/clothing/gloves/color/fyellow = 1,
+ /obj/item/airlock_painter = 1,
+ )
+ premium = list(
+ /obj/item/multitool = 1,
+ /obj/item/clothing/head/soft/fishfear = 4,
+ )
default_price = 50
extra_price = 75