diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm
new file mode 100644
index 0000000000..a7d5c780c3
--- /dev/null
+++ b/code/game/machinery/pda_multicaster.dm
@@ -0,0 +1,101 @@
+/obj/machinery/pda_multicaster
+ name = "\improper PDA multicaster"
+ desc = "This machine mirrors messages sent to it to specific departments."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "controller"
+ density = 1
+ anchored = 1
+ circuit = /obj/item/weapon/circuitboard/telecomms/pda_multicaster
+ use_power = 1
+ idle_power_usage = 750
+ var/on = 1 // If we're currently active,
+ var/toggle = 1 // If we /should/ be active or not,
+ var/list/internal_PDAs = list() // Assoc list of PDAs inside of this, with the department name being the index,
+
+/obj/machinery/pda_multicaster/New()
+ ..()
+ internal_PDAs = list("command" = new /obj/item/device/pda/multicaster/command(src),
+ "security" = new /obj/item/device/pda/multicaster/security(src),
+ "engineering" = new /obj/item/device/pda/multicaster/engineering(src),
+ "medical" = new /obj/item/device/pda/multicaster/medical(src),
+ "research" = new /obj/item/device/pda/multicaster/research(src),
+ "cargo" = new /obj/item/device/pda/multicaster/cargo(src),
+ "civilian" = new /obj/item/device/pda/multicaster/civilian(src))
+
+/obj/machinery/pda_multicaster/prebuilt/New()
+ ..()
+
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/telecomms/pda_multicaster(src)
+ component_parts += new /obj/item/weapon/stock_parts/subspace/ansible(src)
+ component_parts += new /obj/item/weapon/stock_parts/subspace/filter(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 2)
+ RefreshParts()
+
+/obj/machinery/pda_multicaster/Destroy()
+ for(var/atom/movable/AM in contents)
+ qdel(AM)
+ ..()
+
+/obj/machinery/pda_multicaster/update_icon()
+ if(on)
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-p"
+
+/obj/machinery/pda_multicaster/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ default_deconstruction_screwdriver(user, I)
+ else if(istype(I, /obj/item/weapon/crowbar))
+ default_deconstruction_crowbar(user, I)
+ else
+ ..()
+
+/obj/machinery/pda_multicaster/attack_ai(mob/user)
+ attack_hand(user)
+
+/obj/machinery/pda_multicaster/attack_hand(mob/user)
+ toggle_power(user)
+
+/obj/machinery/pda_multicaster/proc/toggle_power(mob/user)
+ toggle = !toggle
+ visible_message("\the [user] turns \the [src] [toggle ? "on" : "off"].")
+ update_power()
+ if(!toggle)
+ var/msg = "[usr.client.key] ([usr]) has turned [src] off, at [x],[y],[z]."
+ message_admins(msg)
+ log_game(msg)
+
+/obj/machinery/pda_multicaster/proc/update_PDAs(var/turn_off)
+ for(var/obj/item/device/pda/pda in contents)
+ pda.toff = turn_off
+
+/obj/machinery/pda_multicaster/proc/update_power()
+ if(toggle)
+ if(stat & (BROKEN|NOPOWER|EMPED))
+ on = 0
+ update_PDAs(1) // 1 being to turn off.
+ idle_power_usage = 0
+ else
+ on = 1
+ update_PDAs(0)
+ idle_power_usage = 750
+ else
+ on = 0
+ update_PDAs(1)
+ idle_power_usage = 0
+ update_icon()
+
+/obj/machinery/pda_multicaster/process()
+ update_power()
+
+/obj/machinery/pda_multicaster/emp_act(severity)
+ if(!(stat & EMPED))
+ stat |= EMPED
+ var/duration = (300 * 10)/severity
+ spawn(rand(duration - 20, duration + 20))
+ stat &= ~EMPED
+ update_icon()
+ ..()
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index a3db6b15a1..f0bb82efd0 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -163,6 +163,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/shaftminer
icon_state = "pda-miner"
+ default_cartridge = /obj/item/weapon/cartridge/miner
/obj/item/device/pda/syndicate
default_cartridge = /obj/item/weapon/cartridge/syndicate
@@ -172,6 +173,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
hidden = 1
/obj/item/device/pda/chaplain
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-holy"
ttone = "holy"
@@ -181,13 +183,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
ttone = "..."
/obj/item/device/pda/botanist
- //default_cartridge = /obj/item/weapon/cartridge/botanist
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-hydro"
/obj/item/device/pda/roboticist
+ default_cartridge = /obj/item/weapon/cartridge/signal/science
icon_state = "pda-robot"
/obj/item/device/pda/librarian
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-libb"
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is 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!"
@@ -200,9 +204,11 @@ var/global/list/obj/item/device/pda/PDAs = list()
note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!"
/obj/item/device/pda/chef
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-chef"
/obj/item/device/pda/bar
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-bar"
/obj/item/device/pda/atmos
@@ -304,6 +310,99 @@ var/global/list/obj/item/device/pda/PDAs = list()
ttone = "assist"
+// Used for the PDA multicaster, which mirrors messages sent to it to a specific department,
+/obj/item/device/pda/multicaster
+ ownjob = "Relay"
+ icon_state = "NONE"
+ ttone = "data"
+ detonate = 0
+ news_silent = 1
+ var/list/cartridges_to_send_to = list()
+
+// This is what actually mirrors the message,
+/obj/item/device/pda/multicaster/new_message(var/sending_unit, var/sender, var/sender_job, var/message)
+ if(sender)
+ var/list/targets = list()
+ for(var/obj/item/device/pda/pda in PDAs)
+ if(pda.cartridge && pda.owner && is_type_in_list(pda.cartridge, cartridges_to_send_to))
+ targets |= pda
+ if(targets.len)
+ for(var/obj/item/device/pda/target in targets)
+ create_message(target, sender, sender_job, message)
+
+// This has so much copypasta,
+/obj/item/device/pda/multicaster/create_message(var/obj/item/device/pda/P, var/original_sender, var/original_job, var/t)
+ t = sanitize(t, MAX_MESSAGE_LEN, 0)
+ t = replace_characters(t, list(""" = "\""))
+ if (!t || !istype(P))
+ return
+
+ if (isnull(P)||P.toff || toff)
+ return
+
+ last_text = world.time
+ var/datum/reception/reception = get_reception(src, P, t)
+ t = reception.message
+
+ if(reception.message_server && (reception.telecomms_reception & TELECOMMS_RECEPTION_SENDER)) // only send the message if it's stable,
+ if(reception.telecomms_reception & TELECOMMS_RECEPTION_RECEIVER == 0) // Does our recipient have a broadcaster on their level?,
+ return
+ var/send_result = reception.message_server.send_pda_message("[P.owner]","[owner]","[t]")
+ if (send_result)
+ return
+
+ P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
+
+ if(!P.conversations.Find("\ref[src]"))
+ P.conversations.Add("\ref[src]")
+
+ P.new_message(src, "[original_sender] \[Relayed\]", original_job, t, 0)
+
+ else
+ return
+
+/obj/item/device/pda/multicaster/command/New()
+ ..()
+ owner = "Command Department"
+ name = "Command Department (Relay)"
+ cartridges_to_send_to = command_cartridges
+
+/obj/item/device/pda/multicaster/security/New()
+ ..()
+ owner = "Security Department"
+ name = "Security Department (Relay)"
+ cartridges_to_send_to = security_cartridges
+
+/obj/item/device/pda/multicaster/engineering/New()
+ ..()
+ owner = "Engineering Department"
+ name = "Engineering Department (Relay)"
+ cartridges_to_send_to = engineering_cartridges
+
+/obj/item/device/pda/multicaster/medical/New()
+ ..()
+ owner = "Medical Department"
+ name = "Medical Department (Relay)"
+ cartridges_to_send_to = medical_cartridges
+
+/obj/item/device/pda/multicaster/research/New()
+ ..()
+ owner = "Research Department"
+ name = "Research Department (Relay)"
+ cartridges_to_send_to = research_cartridges
+
+/obj/item/device/pda/multicaster/cargo/New()
+ ..()
+ owner = "Cargo Department"
+ name = "Cargo Department (Relay)"
+ cartridges_to_send_to = cargo_cartridges
+
+/obj/item/device/pda/multicaster/civilian/New()
+ ..()
+ owner = "Civilian Services Department"
+ name = "Civilian Services Department (Relay)"
+ cartridges_to_send_to = civilian_cartridges
+
/*
* The Actual PDA
*/
@@ -932,7 +1031,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
message += "Your [P] bleeps loudly."
j = prob(10)
- if(j) //This kills the PDA
+ if(j && detonate) //This kills the PDA
qdel(P)
if(message)
message += "It melts in a puddle of plastic."
@@ -1046,8 +1145,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/proc/new_message_from_pda(var/obj/item/device/pda/sending_device, var/message)
new_message(sending_device, sending_device.owner, sending_device.ownjob, message)
-/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message)
- var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" (Reply)"
+/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message, var/reply = 1)
+ var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" ([reply ? "Reply" : "Unable to Reply"])"
new_info(message_silent, ttone, reception_message)
log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]")
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 5d576959fb..a0e37e28b8 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -1,3 +1,48 @@
+var/list/command_cartridges = list(
+ /obj/item/weapon/cartridge/captain,
+ /obj/item/weapon/cartridge/hop,
+ /obj/item/weapon/cartridge/hos,
+ /obj/item/weapon/cartridge/ce,
+ /obj/item/weapon/cartridge/rd,
+ /obj/item/weapon/cartridge/head,
+ /obj/item/weapon/cartridge/lawyer // Internal Affaris,
+ )
+
+var/list/security_cartridges = list(
+ /obj/item/weapon/cartridge/security,
+ /obj/item/weapon/cartridge/detective,
+ /obj/item/weapon/cartridge/hos
+ )
+
+var/list/engineering_cartridges = list(
+ /obj/item/weapon/cartridge/engineering,
+ /obj/item/weapon/cartridge/atmos,
+ /obj/item/weapon/cartridge/ce
+ )
+
+var/list/medical_cartridges = list(
+ /obj/item/weapon/cartridge/medical,
+ /obj/item/weapon/cartridge/chemistry,
+ /obj/item/weapon/cartridge/cmo
+ )
+
+var/list/research_cartridges = list(
+ /obj/item/weapon/cartridge/signal/science,
+ /obj/item/weapon/cartridge/rd
+ )
+
+var/list/cargo_cartridges = list(
+ /obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently,
+ /obj/item/weapon/cartridge/miner,
+ /obj/item/weapon/cartridge/hop
+ )
+
+var/list/civilian_cartridges = list(
+ /obj/item/weapon/cartridge/janitor,
+ /obj/item/weapon/cartridge/service,
+ /obj/item/weapon/cartridge/hop
+ )
+
/obj/item/weapon/cartridge
name = "generic cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -98,6 +143,10 @@
access_flora = 1
*/
+/obj/item/weapon/cartridge/service
+ name = "\improper Serv-U Pro"
+ desc = "A data cartridge designed to serve YOU!"
+
/obj/item/weapon/cartridge/signal
name = "generic signaler cartridge"
desc = "A data cartridge with an integrated radio signaler module."
@@ -124,6 +173,11 @@
icon_state = "cart-q"
access_quartermaster = 1
+/obj/item/weapon/cartridge/miner
+ name = "\improper Drill-Jockey 4.5"
+ desc = "It's covered in some sort of sand."
+ icon_state = "cart-q"
+
/obj/item/weapon/cartridge/head
name = "\improper Easy-Record DELUXE"
icon_state = "cart-h"
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
index 43b654d58d..8a7516f476 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
@@ -87,3 +87,14 @@
/obj/item/weapon/stock_parts/subspace/crystal = 1,
/obj/item/weapon/stock_parts/subspace/treatment = 2,
/obj/item/stack/cable_coil = 2)
+
+/obj/item/weapon/circuitboard/telecomms/pda_multicaster
+ name = T_BOARD("pda multicaster")
+ build_path = "/obj/machinery/pda_multicaster"
+ origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2)
+ req_components = list(
+ /obj/item/weapon/stock_parts/subspace/ansible = 1,
+ /obj/item/weapon/stock_parts/subspace/filter = 1,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/stock_parts/subspace/treatment = 1,
+ /obj/item/stack/cable_coil = 2)
diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm
index 3e4489a897..b9a4285c6d 100644
--- a/maps/polaris-3.dmm
+++ b/maps/polaris-3.dmm
@@ -233,6 +233,7 @@
"ey" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381; id_tag = "server_access_in_sensor"; name = "interior sensor"; pixel_y = 25},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ez" = (/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"eB" = (/obj/machinery/pda_multicaster/prebuilt,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat)
"eD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/tcomsat)
"eE" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -541,7 +542,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaTaTaTaTaTaTaTaTcecgcfclclcncncnefdSfldGfmfofnfpewfqfhfxewfsfrftfudGfvfwdyfIfyfzfAclclchcgciaTaTaTaTaTaTaTaTaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocRdScXdGerfEfDezeEezerezeEezfFfGerdGcRemfHfLfJfKfMclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacabqaabqclclcocncocReVcXdGerezezezeEezerezeEezezezerdGcRemcXeLfNfOfPclclbqaabqcacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbboaTbqclclcocncocRdScXdGerfRfQfTfSezezezfUfWfVfXerdGcRemcXfYeFeHclclclbqaTblccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbboaTbqclclcocncocRdScXdGerfRfQfTfSezeBezfUfWfVfXerdGcRemcXfYeFeHclclclbqaTblccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacdcdcdcdcdcdcdcdcdcdaaaabqclclcocncocRdScXdGerererfZerergaerergberererdGcRemcXcocncoclclbtboaaaacdcdcdcdcdcdcdcdcdcdaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaabqclclcneecnefeVcIdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGefemcIcneecnclclbqaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaabqclclcocncocReVgdgedkdkgfgggcgighglgjgmgfdkdkgngoemcXcocncoclclbqaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/polaris.dme b/polaris.dme
index 11d173eaa4..588cc73c5c 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -406,6 +406,7 @@
#include "code\game\machinery\nuclear_bomb.dm"
#include "code\game\machinery\OpTable.dm"
#include "code\game\machinery\overview.dm"
+#include "code\game\machinery\pda_multicaster.dm"
#include "code\game\machinery\portable_turret.dm"
#include "code\game\machinery\recharger.dm"
#include "code\game\machinery\rechargestation.dm"