diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index f56ff863843..33621a301f3 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -59,7 +59,7 @@
Topic(href, href_list)
..()
- if (usr.stat || usr.restrained() || !ishuman(usr))
+ if (usr.stat || usr.restrained() || (!ishuman(usr) && !istype(usr,/mob/living/silicon)))
return
if (href_list["close"])
usr << browse(null, "window=airlock")
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index cef07c0f7f8..675dae1304c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -131,6 +131,11 @@
now_pushing = 0
return
+ if(istype(tmob,/mob/living/silicon/robot/drone)) //I have no idea why the hell this isn't already happening. How do mice do it?
+ loc = tmob.loc
+ now_pushing = 0
+ return
+
//BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller
if((tmob.a_intent == "help" || tmob.restrained()) && (a_intent == "help" || src.restrained()) && tmob.canmove && canmove) // mutual brohugs all around!
var/turf/oldloc = loc
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 4e9c8068509..2ee40624799 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -12,6 +12,7 @@
braintype = "Robot"
lawupdate = 0
density = 0
+ small = 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.
@@ -298,8 +299,26 @@
if(player.mob && player.mob.mind)
player.mob.mind.transfer_to(src)
- emagged = 0
lawupdate = 0
src << "Systems rebooted. Loading base pattern maintenance protocol... loaded."
full_law_reset()
+ src << "
You are a maintenance drone, a tiny-brained robotic repair machine."
+ src << "You have no individual will, no personality, and no drives or urges other than your laws."
+ src << "Use :b to talk to your fellow synthetics, or use say to speak silently to other drones nearby."
+ src << "Remember, you are lawed against interference with the crew."
+ 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."
+/mob/living/silicon/robot/drone/Bump(atom/movable/AM as mob|obj, yes)
+ if (!yes) return
+ if (istype(AM, /obj/machinery/recharge_station))
+ var/obj/machinery/recharge_station/F = AM
+ F.move_inside()
+ return
+
+/mob/living/silicon/robot/drone/Bumped(AM as mob|obj)
+ return
+
+/mob/living/silicon/robot/drone/start_pulling(var/atom/movable/AM)
+ src << "You are too small to pull anything."
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index ac3522a0853..d214b3f306d 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -160,7 +160,7 @@
stored_comms["plastic"]++
return
- else if(istype(M,/mob/living/silicon/robot/drone) && M.stat == 2 && !M.client)
+ else if(istype(M,/mob/living/silicon/robot/drone) && !M.client)
var/mob/living/silicon/robot/drone/D = src.loc
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 00d179e3470..98b4fe95d4f 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -100,6 +100,9 @@
hands.icon_state = "standard"
icon_state = "secborg"
modtype = "Security"
+ else if(istype(src,/mob/living/silicon/robot/drone))
+ laws = new /datum/ai_laws/drone()
+ connected_ai = null
else
if(mmi.alien || alien)
laws = new /datum/ai_laws/alienmov()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 775e3e90923..73da15f474a 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -274,9 +274,9 @@
src.modules += new /obj/item/weapon/wirecutters(src)
src.modules += new /obj/item/device/multitool(src)
src.modules += new /obj/item/device/lightreplacer(src)
- src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner(src)
src.modules += new /obj/item/weapon/gripper(src)
src.modules += new /obj/item/weapon/matter_decompiler(src)
+ src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src)
src.emag = new /obj/item/weapon/card/emag(src)
src.emag.name = "Cryptographic Sequencer"
@@ -290,7 +290,7 @@
/obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R)
var/obj/item/weapon/reagent_containers/spray/cleaner/C = locate() in src.modules
- C.reagents.add_reagent("cleaner", 10)
+ C.reagents.add_reagent("cleaner", 3)
for(var/T in stacktypes)
var/O = locate(T) in src.modules
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 38b486cb4f1..848c8bb000a 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -107,11 +107,14 @@
name = "space cleaner"
desc = "BLAM!-brand non-foaming space cleaner!"
+/obj/item/weapon/reagent_containers/spray/cleaner/drone
+ name = "space cleaner"
+ desc = "BLAM!-brand non-foaming space cleaner!"
+ volume = 50
/obj/item/weapon/reagent_containers/spray/cleaner/New()
..()
- reagents.add_reagent("cleaner", 250)
-
+ reagents.add_reagent("cleaner", src.volume)
//pepperspray
/obj/item/weapon/reagent_containers/spray/pepper
name = "pepperspray"