diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index e83298a68eb..2ce2ab3022e 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -14,7 +14,7 @@
density = 1
req_access = list(access_engine, access_robotics)
local_transmit = 1
-
+
// We need to keep track of a few module items so we don't need to do list operations
// every time we need them. These get set in New() after the module is chosen.
var/obj/item/stack/sheet/metal/cyborg/stack_metal = null
@@ -25,12 +25,13 @@
//Used for self-mailing.
var/mail_destination = 0
+ var/sprite[0]
/mob/living/silicon/robot/drone/New()
..()
-
+
remove_language("Robot Talk")
add_language("Drone Talk", 1)
@@ -88,9 +89,83 @@
/mob/living/silicon/robot/drone/choose_icon()
return
+
/mob/living/silicon/robot/drone/pick_module()
return
+//Drones can only use binary and say emotes. NOTHING else.
+//TBD, fix up boilerplate. ~ Z
+/mob/living/silicon/robot/drone/say(var/message)
+ if (!message)
+ return
+
+ if (src.client)
+ if(client.prefs.muted & MUTE_IC)
+ src << "You cannot send IC messages (muted)."
+ return
+ if (src.client.handle_spam_prevention(message,MUTE_IC))
+ return
+
+ if (stat == 2)
+ message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
+ return say_dead(message)
+
+ //Must be concious to speak
+ if (stat)
+ return
+
+ if(copytext(message,1,2) == "*")
+ return emote(copytext(message,2))
+
+ if (length(message) >= 2)
+ var/prefix = copytext(message, 1, 3)
+ if (department_radio_keys[prefix] == "drone")
+ message = copytext(message, 3)
+ message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
+
+ if(istype(src, /mob/living/silicon/robot/drone))
+ var/mob/living/silicon/robot/drone/R = src
+ if(!R.is_component_functioning("comms"))
+ src << "\red Your drone communications component isn't functional."
+ return
+ drone_talk(message)
+ else
+ var/list/listeners = hearers(5,src)
+ listeners |= src
+ message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
+ for(var/mob/living/silicon/D in listeners)
+ if(D.client)
+ D << "[src] transmits, \"[message]\""
+
+ for (var/mob/M in player_list)
+ if (!M.client)
+ continue
+ if (istype(M, /mob/new_player))
+ continue
+ else if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTEARS) && src.client)
+ M << "[src] (Follow) transmits, \"[message]\""
+ else if(M.stat == 2 && src.client && M in listeners)
+ M << "[src] (Follow) transmits, \"[message]\""
+
+/mob/living/proc/drone_talk(var/message)
+ log_say("[key_name(src)] : [message]")
+ message = trim(message)
+
+ if (!message)
+ return
+
+ var/message_a = say_quote(message)
+ var/rendered = "Drone Talk, [name] [message_a]"
+
+ for (var/mob/living/S in living_mob_list)
+ if(istype(S, /mob/living/silicon/robot/drone))
+ S.show_message(rendered, 2)
+
+ for (var/mob/S in dead_mob_list)
+ if(!istype(S,/mob/new_player) && !istype(S,/mob/living/carbon/brain))
+ var/rendered2 = "Drone Talk, [name] (Follow) [message_a]"
+ S.show_message(rendered2, 2)
+
//Drones cannot be upgraded with borg modules so we need to catch some items before they get used in ..().
/mob/living/silicon/robot/drone/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -137,12 +212,12 @@
return
..()
-
+
/mob/living/silicon/robot/drone/emag_act(user as mob)
if(!client || stat == 2)
user << "\red There's not much point subverting this heap of junk."
return
-
+
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
@@ -273,6 +348,16 @@
src << "Don't invade their worksites, don't steal their resources, don't tell them about the changeling in the toilets."
src << "If a crewmember has noticed you, you are probably breaking your first law."
+ sprite["Default"] = "repairbot"
+ sprite["Mk2 Mousedrone"] = "mk2"
+ sprite["Mk3 Monkeydrone"] = "mk3"
+ var/icontype
+ icontype = input(player,"Pick an icon") in sprite
+ icon_state = sprite[icontype]
+ updateicon()
+
+ choose_icon(6,sprite)
+
/mob/living/silicon/robot/drone/Bump(atom/movable/AM as mob|obj, yes)
if (!yes || ( \
!istype(AM,/obj/machinery/door) && \
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index f0ddc3b8170..39053002542 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ