diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index b7341d829e7..cb3f99fa4c3 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -77,137 +77,4 @@
New()
..()
hud = new /obj/item/clothing/glasses/hud/security(src)
- return
-
-
-
-/**********************************************************************
- Chemical things
-***********************************************************************/
-
-//Moved to modules/chemistry
-
-
-
-
-
-
-/**********************************************************************
- RCD
-***********************************************************************/
-/obj/item/borg/rcd
- name = "robotic rapid-construction-device"
- desc = "A device used to rapidly build walls/floor."
- icon = 'icons/obj/items.dmi'
- icon_state = "rcd"
- flags = FPRINT | TABLEPASS| CONDUCT
- force = 5.0
- w_class = 3.0
- // datum/effect/effect/system/spark_spread/spark_system
- var/working = 0
- var/mode = 1
- var/disabled = 0
-
-/*
- New()
- src.spark_system = new /datum/effect/effect/system/spark_spread
- spark_system.set_up(5, 0, src)
- spark_system.attach(src)
- return
-*/
-
- proc/activate()
-// spark_system.set_up(5, 0, src)
-// src.spark_system.start()
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
-
-
- attack_self(mob/user as mob)
- //Change the mode
- playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- if(mode == 1)
- mode = 2
- user << "Changed mode to 'Airlock'"
-// src.spark_system.start()
- return
- if(mode == 2)
- mode = 3
- user << "Changed mode to 'Deconstruct'"
-// src.spark_system.start()
- return
- if(mode == 3)
- mode = 1
- user << "Changed mode to 'Floor & Walls'"
-// src.spark_system.start()
- return
-
-
- afterattack(atom/A, mob/user as mob)
- if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))//No RCDs on the shuttles -Sieve
- disabled = 1
- else
- disabled = 0
- if(!isrobot(user)|| disabled == 1) return
-
- var/mob/living/silicon/robot/R = user
- var/obj/item/weapon/cell/cell = R.cell
-
- if(!cell) return
-
- if((istype(A, /turf) || istype(A, /obj/machinery/door/airlock)))
- switch(mode)
- if(1)
- if(istype(A, /turf/space))
- if(!cell.use(30)) return
- user << "Building Floor..."
- activate()
- A:ReplaceWithPlating()
- return
-
- if(istype(A, /turf/simulated/floor))
- if(!cell.use(90)) return
- user << "Building Wall ..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 20))
- activate()
- A:ReplaceWithWall()
- return
-
- if(2)
- if(istype(A, /turf/simulated/floor))
- if(!cell.use(300)) return
- user << "Building Airlock..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 50))
- activate()
- var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock( A )
- T.autoclose = 1
- return
-
- if(3)
- if(istype(A, /turf/simulated/wall))
- if(!cell.use(150)) return
- user << "Deconstructing Wall..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 40))
- activate()
- A:ReplaceWithPlating()
- return
-
- if(istype(A, /turf/simulated/floor))
- user << "Deconstructing Floor..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 50))
- activate()
- A:ReplaceWithSpace()
- return
-
- if(istype(A, /obj/machinery/door/airlock))
- user << "Deconstructing Airlock..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 50))
- activate()
- del(A)
- return
- return
-
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index 90f135d9211..c2455b7e0ab 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -24,6 +24,7 @@ RCD
var/matter = 0
var/working = 0
var/mode = 1
+ var/canRwall = 0
var/disabled = 0
@@ -35,7 +36,7 @@ RCD
return
- attackby(obj/item/weapon/W as obj, mob/user as mob)
+ attackby(obj/item/weapon/W, mob/user)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
if((matter + 10) > 30)
@@ -50,109 +51,136 @@ RCD
return
- attack_self(mob/user as mob)
+ attack_self(mob/user)
//Change the mode
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
switch(mode)
if(1)
mode = 2
user << "Changed mode to 'Airlock'"
- src.spark_system.start()
+ if(prob(20))
+ src.spark_system.start()
return
if(2)
mode = 3
user << "Changed mode to 'Deconstruct'"
- src.spark_system.start()
+ if(prob(20))
+ src.spark_system.start()
return
if(3)
mode = 1
user << "Changed mode to 'Floor & Walls'"
- src.spark_system.start()
+ if(prob(20))
+ src.spark_system.start()
return
+ proc/activate()
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- afterattack(atom/A, mob/user as mob)
- if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))//Nanotrasen Matter Jammer TM -Sieve
- disabled = 1
- else
- disabled = 0
+
+ afterattack(atom/A, mob/user)
+ if(disabled && !isrobot(user))
+ return 0
+ if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
+ return 0
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock)))
- return
+ return 0
- if(istype(A, /turf) && mode == 1)
- if(istype(A, /turf/space) && matter >= 1)
- if(!disabled && matter >= 1)
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- spark_system.set_up(5, 0, src)
- src.spark_system.start()
- A:ReplaceWithPlating()
- matter--
- desc = "A RCD. It currently holds [matter]/30 matter-units."
- return
- if(istype(A, /turf/simulated/floor) && matter >= 3)
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 20))
- if(!disabled && matter >= 3)
- spark_system.set_up(5, 0, src)
- src.spark_system.start()
- A:ReplaceWithWall()
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- matter -= 3
- 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)..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 50))
- if(!disabled && matter >= 10)
- spark_system.set_up(5, 0, src)
- src.spark_system.start()
- var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock( A )
- var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src))
- if(killthis)
- killthis.ex_act(2)//Smashin windows
- T.autoclose = 1
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- playsound(src.loc, 'sound/effects/sparks2.ogg', 50, 1)
- matter -= 10
- 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/r_wall))
- return
- if(istype(A, /turf/simulated/wall) && matter >= 4)
- user << "Deconstructing Wall (4)..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 40))
- if(!disabled && matter >= 4)
- spark_system.set_up(5, 0, src)
- src.spark_system.start()
+ switch(mode)
+ if(1)
+ if(istype(A, /turf/space))
+ if(useResource(1, user))
+ user << "Building Floor..."
+ activate()
A:ReplaceWithPlating()
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- matter -= 4
- desc = "A RCD. It currently holds [matter]/30 matter-units."
- return
- if(istype(A, /turf/simulated/floor) && matter >= 5)
- user << "Deconstructing Floor (5)..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 50))
- if(!disabled && matter >= 5)
- spark_system.set_up(5, 0, src)
- src.spark_system.start()
- A:ReplaceWithSpace()
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- matter -= 5
- desc = "A RCD. It currently holds [matter]/30 matter-units."
- return
- if(istype(A, /obj/machinery/door/airlock) && matter >= 10)
- user << "Deconstructing Airlock (10)..."
- playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
- if(do_after(user, 50))
- if(!disabled && matter >= 10)
- spark_system.set_up(5, 0, src)
- src.spark_system.start()
- del(A)
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- matter -= 10
- desc = "A RCD. It currently holds [matter]/30 matter-units."
- return
+ return 1
+ return 0
+
+ if(istype(A, /turf/simulated/floor))
+ if(checkResource(3, user))
+ user << "Building Wall ..."
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ if(do_after(user, 20))
+ if(!useResource(3, user)) return 0
+ activate()
+ A:ReplaceWithWall()
+ return 1
+ return 0
+
+ if(2)
+ if(istype(A, /turf/simulated/floor))
+ if(checkResource(10, user))
+ user << "Building Airlock..."
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ if(do_after(user, 50))
+ if(!useResource(10, user)) return 0
+ activate()
+ var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock( A )
+ T.autoclose = 1
+ return 1
+ return 0
+ return 0
+
+ if(3)
+ if(istype(A, /turf/simulated/wall))
+ if(istype(A, /turf/simulated/wall/r_wall) && !canRwall)
+ return 0
+ if(checkResource(5, user))
+ user << "Deconstructing Wall..."
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ if(do_after(user, 40))
+ if(!useResource(5, user)) return 0
+ activate()
+ A:ReplaceWithPlating()
+ return 1
+ return 0
+
+ if(istype(A, /turf/simulated/floor))
+ if(checkResource(5, user))
+ user << "Deconstructing Floor..."
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ if(do_after(user, 50))
+ if(!useResource(5, user)) return 0
+ activate()
+ A:ReplaceWithSpace()
+ return 1
+ return 0
+
+ if(istype(A, /obj/machinery/door/airlock))
+ if(checkResource(10, user))
+ user << "Deconstructing Airlock..."
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ if(do_after(user, 50))
+ if(!useResource(10, user)) return 0
+ activate()
+ del(A)
+ return 1
+ return 0
+ return 0
+ else
+ user << "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin."
+ return 0
+
+/obj/item/weapon/rcd/proc/useResource(var/amount, var/mob/user)
+ if(matter < amount)
+ return 0
+ matter -= amount
+ desc = "A RCD. It currently holds [matter]/30 matter-units."
+ return 1
+
+/obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user)
+ return matter >= amount
+/obj/item/weapon/rcd/borg/useResource(var/amount, var/mob/user)
+ if(!isrobot(user))
+ return 0
+ return user:cell:use(amount * 30)
+
+/obj/item/weapon/rcd/borg/checkResource(var/amount, var/mob/user)
+ if(!isrobot(user))
+ return 0
+ return user:cell:charge >= (amount * 30)
+
+/obj/item/weapon/rcd/borg/New()
+ ..()
+ desc = "A device used to rapidly build walls/floor."
+ canRwall = 1
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 6cf6d5d64cf..2817ab49579 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -86,7 +86,7 @@
..()
src.modules += new /obj/item/borg/sight/meson(src)
src.emag = new /obj/item/borg/stun(src)
- src.modules += new /obj/item/borg/rcd(src)
+ src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/extinguisher(src)
// src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/weapon/weldingtool/largetank(src)