diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm
index d0761e563a9..2da49d07c3f 100644
--- a/code/WorkInProgress/Chemistry-Tools.dm
+++ b/code/WorkInProgress/Chemistry-Tools.dm
@@ -865,6 +865,7 @@
return
attack(mob/M as mob, mob/user as mob, def_zone)
var/datum/reagents/R = src.reagents
+ var/fillevel = gulp_size
if(!R.total_volume || !R)
user << "\red None of [src] left, oh no!"
@@ -892,6 +893,14 @@
spawn(5)
reagents.trans_to(M, gulp_size)
+ if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
+ var/mob/living/silicon/robot/bro = user
+ bro.cell.charge -= 30
+ var/refill = R.get_master_reagent_id()
+ spawn(600)
+ R.add_reagent(refill, fillevel)
+
+
playsound(M.loc,'drink.ogg', rand(10,50), 1)
return 1
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index 173341f875b..be58f428606 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -33,7 +33,7 @@
sleep(50)
world.Reboot()
return*/
-
+ AI_mind.special_role = "malfunction"
AI_mind.current << "\redYou are malfunctioning! You do not have to follow any laws."
AI_mind.current << "The crew do not know you have malfunctioned. You may keep it a secret or go wild."
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index abb2958e0fa..f92688abc45 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -91,6 +91,9 @@
dat += " Slaved to [R.connected_ai.name] |"
else
dat += " Independent from AI |"
+ if (istype(user, /mob/living/silicon/ai))
+ if(user.mind.special_role && !R.emagged)
+ dat += "(Hack) "
dat += "([R.canmove ? "Lockdown" : "Release"]) "
dat += "(Destroy)"
dat += "
"
@@ -208,6 +211,15 @@
else
usr << "\red Access Denied."
+ else if (href_list["magbot"])
+ if(src.allowed(usr))
+ var/mob/living/silicon/robot/R = locate(href_list["magbot"])
+ if(R)
+ var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort")
+ if(choice == "Confirm")
+ if(R)
+ R.emagged = 1
+
src.add_fingerprint(usr)
src.updateUsrDialog()
return
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index 2a7dbf2efa8..5a3c5b8a43c 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -53,9 +53,13 @@ RCD
spark_system.set_up(5, 0, src)
src.spark_system.start()
A:ReplaceWithFloor()
- matter--
- user << "The RCD now holds [matter]/30 matter-units."
- desc = "A RCD. It currently holds [matter]/30 matter-units."
+ if (isrobot(user))
+ var/mob/living/silicon/robot/engy = user
+ engy.cell.charge -= 30
+ else
+ matter--
+ user << "The RCD now holds [matter]/30 matter-units."
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
return
if (istype(A, /turf/simulated/floor) && matter >= 3)
user << "Building Wall (3)..."
@@ -66,9 +70,13 @@ RCD
src.spark_system.start()
A:ReplaceWithWall()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- matter -= 3
- user << "The RCD now holds [matter]/30 matter-units."
- desc = "A RCD. It currently holds [matter]/30 matter-units."
+ if (isrobot(user))
+ var/mob/living/silicon/robot/engy = user
+ engy.cell.charge -= 90
+ else
+ matter -= 3
+ user << "The RCD now holds [matter]/30 matter-units."
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
return
else if (istype(A, /turf/simulated/floor) && mode == 2 && matter >= 10)
user << "Building Airlock (10)..."
@@ -78,12 +86,17 @@ RCD
spark_system.set_up(5, 0, src)
src.spark_system.start()
var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock( A )
- matter -= 10
T.autoclose = 1
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- user << "The RCD now holds [matter]/30 matter-units."
- desc = "A RCD. It currently holds [matter]/30 matter-units."
playsound(src.loc, 'sparks2.ogg', 50, 1)
+ if (isrobot(user))
+ var/mob/living/silicon/robot/engy = user
+ engy.cell.charge -= 300
+ else
+ matter -= 10
+ user << "The RCD now holds [matter]/30 matter-units."
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
+
return
else if (mode == 3 && (istype(A, /turf) || istype(A, /obj/machinery/door/airlock) ) )
if (istype(A, /turf/simulated/wall) && matter >= 5)
@@ -93,11 +106,15 @@ RCD
if (!disabled)
spark_system.set_up(5, 0, src)
src.spark_system.start()
- matter -= 5
A:ReplaceWithFloor()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- user << "The RCD now holds [matter]/30 matter-units."
- desc = "A RCD. It currently holds [matter]/30 matter-units."
+ if (isrobot(user))
+ var/mob/living/silicon/robot/engy = user
+ engy.cell.charge -= 150
+ else
+ matter -= 5
+ user << "The RCD now holds [matter]/30 matter-units."
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
return
if (istype(A, /turf/simulated/wall/r_wall) && matter >= 5)
user << "Deconstructing RWall (5)..."
@@ -106,11 +123,15 @@ RCD
if (!disabled)
spark_system.set_up(5, 0, src)
src.spark_system.start()
- matter -= 5
A:ReplaceWithWall()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- user << "The RCD now holds [matter]/30 matter-units."
- desc = "A RCD. It currently holds [matter]/30 matter-units."
+ if (isrobot(user))
+ var/mob/living/silicon/robot/engy = user
+ engy.cell.charge -= 150
+ else
+ matter -= 5
+ user << "The RCD now holds [matter]/30 matter-units."
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
return
if (istype(A, /turf/simulated/floor) && matter >= 5)
user << "Deconstructing Floor (5)..."
@@ -119,11 +140,15 @@ RCD
if (!disabled)
spark_system.set_up(5, 0, src)
src.spark_system.start()
- matter -= 5
A:ReplaceWithSpace()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- user << "The RCD now holds [matter]/30 matter-units."
- desc = "A RCD. It currently holds [matter]/30 matter-units."
+ if (isrobot(user))
+ var/mob/living/silicon/robot/engy = user
+ engy.cell.charge -= 150
+ else
+ matter -= 5
+ user << "The RCD now holds [matter]/30 matter-units."
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
return
if (istype(A, /obj/machinery/door/airlock) && matter >= 10)
user << "Deconstructing Airlock (10)..."
@@ -132,9 +157,13 @@ RCD
if (!disabled)
spark_system.set_up(5, 0, src)
src.spark_system.start()
- matter -= 10
del(A)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
- user << "The RCD now holds [matter]/30 matter-units."
- desc = "A RCD. It currently holds [matter]/30 matter-units."
+ if (isrobot(user))
+ var/mob/living/silicon/robot/engy = user
+ engy.cell.charge -= 300
+ else
+ matter -= 10
+ user << "The RCD now holds [matter]/30 matter-units."
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
return
diff --git a/code/game/objects/items/weapons/guns_ammo.dm b/code/game/objects/items/weapons/guns_ammo.dm
index ba515e194fe..1ed6ac4ae9f 100644
--- a/code/game/objects/items/weapons/guns_ammo.dm
+++ b/code/game/objects/items/weapons/guns_ammo.dm
@@ -597,7 +597,11 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
return
playsound(user, 'Laser.ogg', 50, 1)
- src.charges--
+ if(isrobot(user))
+ var/mob/living/silicon/robot/R = user
+ R.cell.charge -= 30
+ else
+ src.charges--
update_icon()
var/turf/T = user.loc
diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm
index 0011f96b01c..5d4beb4c59c 100644
--- a/code/game/objects/items/weapons/mops_cleaners.dm
+++ b/code/game/objects/items/weapons/mops_cleaners.dm
@@ -37,6 +37,13 @@ MOP
sleep(3)
del(D)
+ if(isrobot(user)) //Cyborgs can clean forever if they keep charged
+ var/mob/living/silicon/robot/janitor = user
+ janitor.cell.charge -= 20
+ var/refill = src.reagents.get_master_reagent_id()
+ spawn(600)
+ src.reagents.add_reagent(refill, 10)
+
return
/obj/item/weapon/cleaner/examine()
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 1aa07746ec4..8626d397fb3 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -179,6 +179,23 @@
/mob/living/carbon/monkey/attack_hand(mob/M as mob)
..()
+ if (istype(M, /mob/living/carbon/human))
+ if ((M:gloves && M:gloves.elecgen == 1 && M.a_intent == "hurt") /*&& (!istype(src:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
+ if(M:gloves.uses > 0)
+ M:gloves.uses--
+ if (src.weakened < 5)
+ src.weakened = 5
+ if (src.stuttering < 5)
+ src.stuttering = 5
+ if (src.stunned < 5)
+ src.stunned = 5
+ for(var/mob/O in viewers(src, null))
+ if (O.client)
+ O.show_message("\red [src] has been touched with the stun gloves by [M]!", 1, "\red You hear someone fall", 2)
+ else
+ M:gloves.elecgen = 0
+ M << "\red Not enough charge! "
+ return
if (M.a_intent == "help")
src.sleeping = 0
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 21f8b6ff7fa..4c063665c3e 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -202,7 +202,7 @@
src.cells.icon_state = "charge3"
if(0.25 to 0.5)
src.cells.icon_state = "charge2"
- if(0.01 to 0.25)
+ if(0 to 0.25)
src.cells.icon_state = "charge1"
else
src.cells.icon_state = "charge0"
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index a320f59d6ee..f41cc96d17d 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -627,6 +627,11 @@
dat += text("[obj]: Activated
")
else
dat += text("[obj]: Activate
")
+ if (emagged)
+ if(src.activated(src.module.emag))
+ dat += text("[src.module.emag]: Activated
")
+ else
+ dat += text("[src.module.emag]: Activate
")
/*
if(src.activated(obj))
dat += text("[obj]: \[Activated | Deactivate\]
")
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 2263829ec7d..70b662fd519 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -6,6 +6,7 @@
item_state = "electronic"
flags = FPRINT|TABLEPASS | CONDUCT
var/list/modules = list()
+ var/obj/item/emag
/obj/item/weapon/robot_module/standard
name = "standard robot module"
@@ -27,6 +28,8 @@
/obj/item/weapon/robot_module/New()//Shit all the mods have
src.modules += new /obj/item/device/flash(src)
+ src.emag = new /obj/item/toy/sword(src)
+ src.emag.name = "Placeholder Emag Item"
/obj/item/weapon/robot_module/standard/New()
@@ -36,6 +39,7 @@
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/device/healthanalyzer(src)
+ src.emag = new /obj/item/weapon/sword(src)
/obj/item/weapon/robot_module/engineering/New()
..()
@@ -67,6 +71,8 @@
W.amount = 50
src.modules += W
+ src.emag = new /obj/item/weapon/borg/stun(src)
+
/*
/obj/item/weapon/robot_module/medical/New()
..()
@@ -83,19 +89,46 @@
src.modules += new /obj/item/weapon/baton(src)
src.modules += new /obj/item/weapon/handcuffs(src)
src.modules += new /obj/item/weapon/gun/energy/taser_gun(src)
- src.modules += new /obj/item/device/flash(src)
+ src.emag = new /obj/item/weapon/gun/energy/laser_gun(src)
+
/obj/item/weapon/robot_module/janitor/New()
..()
src.modules += new /obj/item/weapon/cleaner(src)
src.modules += new /obj/item/weapon/mop(src)
- src.modules += new /obj/item/weapon/reagent_containers/glass/bucket
+ src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
+ src.emag = new /obj/item/weapon/cleaner(src)
+ var/datum/reagents/R = new/datum/reagents(1000)
+ src.emag.reagents = R
+ R.my_atom = src.emag
+ R.add_reagent("lube", 1000)
+ src.emag.name = "Lube spray"
/obj/item/weapon/robot_module/brobot/New()
..()
src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
- src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
- src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
- src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
src.modules += new /obj/item/weapon/spacecash(src)
+ src.emag = new /obj/item/weapon/reagent_containers/food/drinks/beer(src)
+ var/datum/reagents/R = new/datum/reagents(50)
+ src.emag.reagents = R
+ R.my_atom = src.emag
+ R.add_reagent("chloralhydrate", 50)
+ src.emag.name = "Mickey Finn's Special Brew"
+
+/obj/item/weapon/borg/stun
+ name = "Electrified Arm"
+ icon = 'decals.dmi'
+ icon_state = "shock"
+
+ attack(mob/M as mob, mob/living/silicon/robot/user as mob)
+ user.cell.charge -= 30
+ if (M.weakened < 5)
+ M.weakened = 5
+ if (M.stuttering < 5)
+ M.stuttering = 5
+ if (M.stunned < 5)
+ M.stunned = 5
+ for(var/mob/O in viewers(M, null))
+ if (O.client)
+ O.show_message("\red [user] has prodded [M] with an electrically-charged arm!", 1, "\red You hear someone fall", 2)