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)