diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 9a56cf94a7..2fa9ea63c7 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -106,13 +106,13 @@ if (M.use(1)) var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly B.loc = get_turf(src) - user << "You armed the robot frame." + to_chat(user, "You armed the robot frame.") if (user.get_inactive_hand()==src) user.remove_from_mob(src) user.put_in_inactive_hand(B) qdel(src) else - user << "You need one sheet of metal to arm the robot frame." + to_chat(user, "You need one sheet of metal to arm the robot frame.") if(istype(W, /obj/item/robot_parts/l_leg)) if(src.l_leg) return user.drop_item() @@ -149,9 +149,9 @@ src.chest = W src.updateicon() else if(!W:wires) - user << "You need to attach wires to it first!" + to_chat(user, "You need to attach wires to it first!") else - user << "You need to attach a cell to it first!" + to_chat(user, "You need to attach a cell to it first!") if(istype(W, /obj/item/robot_parts/head)) if(src.head) return @@ -161,16 +161,16 @@ src.head = W src.updateicon() else - user << "You need to attach a flash to it first!" + to_chat(user, "You need to attach a flash to it first!") if(istype(W, /obj/item/device/mmi)) var/obj/item/device/mmi/M = W if(check_completion()) if(!istype(loc,/turf)) - user << "You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise." + to_chat(user, "You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.") return if(!M.brainmob) - user << "Sticking an empty [W] into the frame would sort of defeat the purpose." + to_chat(user, "Sticking an empty [W] into the frame would sort of defeat the purpose.") return if(!M.brainmob.key) var/ghost_can_reenter = 0 @@ -181,15 +181,15 @@ to_chat(user, "\The [W] is completely unresponsive; though it may be able to auto-resuscitate.") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems. return if(!ghost_can_reenter) - user << "\The [W] is completely unresponsive; there's no point." + to_chat(user, "\The [W] is completely unresponsive; there's no point.") return if(M.brainmob.stat == DEAD) - user << "Sticking a dead [W] into the frame would sort of defeat the purpose." + to_chat(user, "Sticking a dead [W] into the frame would sort of defeat the purpose.") return if(jobban_isbanned(M.brainmob, "Cyborg")) - user << "This [W] does not seem to fit." + to_chat(user, "This [W] does not seem to fit.") return var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1) @@ -228,7 +228,7 @@ qdel(src) else - user << "The MMI must go in after everything else!" + to_chat(user, "The MMI must go in after everything else!") if (istype(W, /obj/item/weapon/pen)) var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN) @@ -245,22 +245,22 @@ ..() if(istype(W, /obj/item/weapon/cell)) if(src.cell) - user << "You have already inserted a cell!" + to_chat(user, "You have already inserted a cell!") return else user.drop_item() W.loc = src src.cell = W - user << "You insert the cell!" + to_chat(user, "You insert the cell!") if(istype(W, /obj/item/stack/cable_coil)) if(src.wires) - user << "You have already inserted wire!" + to_chat(user, "You have already inserted wire!") return else var/obj/item/stack/cable_coil/coil = W coil.use(1) src.wires = 1.0 - user << "You insert the wire!" + to_chat(user, "You insert the wire!") return /obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob) @@ -269,14 +269,14 @@ if(istype(user,/mob/living/silicon/robot)) var/current_module = user.get_active_hand() if(current_module == W) - user << "How do you propose to do that?" + to_chat(user, "How do you propose to do that?") return else add_flashes(W,user) else add_flashes(W,user) else if(istype(W, /obj/item/weapon/stock_parts/manipulator)) - user << "You install some manipulators and modify the head, creating a functional spider-bot!" + to_chat(user, "You install some manipulators and modify the head, creating a functional spider-bot!") new /mob/living/simple_animal/spiderbot(get_turf(loc)) user.drop_item() qdel(W) @@ -286,24 +286,24 @@ /obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta if(src.flash1 && src.flash2) - user << "You have already inserted the eyes!" + to_chat(user, "You have already inserted the eyes!") return else if(src.flash1) user.drop_item() W.loc = src src.flash2 = W - user << "You insert the flash into the eye socket!" + to_chat(user, "You insert the flash into the eye socket!") else user.drop_item() W.loc = src src.flash1 = W - user << "You insert the flash into the eye socket!" + to_chat(user, "You insert the flash into the eye socket!") /obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user) if(sabotaged) - user << "[src] is already sabotaged!" + to_chat(user, "[src] is already sabotaged!") else - user << "You short out the safeties." + to_chat(user, "You short out the safeties.") sabotaged = 1 return 1 diff --git a/code/modules/mob/living/bot/edCLNbot.dm b/code/modules/mob/living/bot/edCLNbot.dm new file mode 100644 index 0000000000..159b3e3594 --- /dev/null +++ b/code/modules/mob/living/bot/edCLNbot.dm @@ -0,0 +1,235 @@ +/mob/living/bot/cleanbot/edCLN + name = "ED-CLN Cleaning Robot" + desc = "A large cleaning robot. It looks rather efficient." + icon_state = "edCLN0" + req_one_access = list(access_robotics, access_janitor) + botcard_access = list(access_janitor, access_maint_tunnels) + + locked = 0 // Start unlocked so roboticist can set them to patrol. + wait_if_pulled = 0 // One big boi. + min_target_dist = 0 + + patrol_speed = 3 + target_speed = 6 + + cleaning = 0 + blood = 0 + var/red_switch = 0 + var/blue_switch = 0 + var/green_switch = 0 + +/mob/living/bot/cleanbot/edCLN/update_icons() + if(on && busy) + icon_state = "edCLN" + else + icon_state = "edCLN[on]" + +/mob/living/bot/cleanbot/edCLN/handleIdle() + if(prob(10)) + custom_emote(2, "makes a less than thrilled beeping sound.") + playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0) + + if(red_switch && !blue_switch && !green_switch && prob(10) || src.emagged) + if(istype(loc, /turf/simulated)) + var/turf/simulated/T = loc + T.add_blood() + + if(!red_switch && blue_switch && !green_switch && prob(50) || src.emagged) + if(istype(loc, /turf/simulated)) + var/turf/simulated/T = loc + visible_message("\The [src] squirts a puddle of water on the floor!") + T.wet_floor() + + if(!red_switch && !blue_switch && green_switch && prob(10) || src.emagged) + if(istype(loc, /turf/simulated)) + var/turf/simulated/T = loc + visible_message("\The [src] stomps on \the [T], breaking it!") + qdel(T) + + if(red_switch && blue_switch && green_switch && prob(1)) + src.explode() + +/mob/living/bot/cleanbot/edCLN/explode() + on = 0 + visible_message("[src] blows apart!") + var/turf/Tsec = get_turf(src) + + new /obj/item/weapon/secbot_assembly/ed209_assembly(Tsec) + if(prob(50)) + new /obj/item/robot_parts/l_leg(Tsec) + if(prob(50)) + new /obj/item/robot_parts/r_leg(Tsec) + if(prob(50)) + if(prob(50)) + new /obj/item/weapon/reagent_containers/glass/bucket(Tsec) + else + new /obj/item/device/assembly/prox_sensor(Tsec) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + qdel(src) + return + +/mob/living/bot/cleanbot/edCLN/attack_hand(var/mob/user) + var/dat + usr.set_machine(src) + add_fingerprint(usr) + + dat += "Automatic Station Cleaner v2.0

" + dat += "Status: [on ? "On" : "Off"]
" + dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" + dat += "Maintenance panel is [open ? "opened" : "closed"]" + if(!locked || issilicon(user)) + dat += "
Cleans Blood: [blood ? "Yes" : "No"]
" + dat += "
Patrol station: [will_patrol ? "Yes" : "No"]
" + if(open && !locked) + dat += "
Red Switch: [red_switch ? "On" : "Off"]
" + dat += "
Green Switch: [green_switch ? "On" : "Off"]
" + dat += "
Blue Switch: [blue_switch ? "On" : "Off"]" + + user << browse("Cleaner v2.0 controls[dat]", "window=autocleaner") + onclose(user, "autocleaner") + return + +/mob/living/bot/cleanbot/edCLN/Topic(href, href_list) + usr.set_machine(src) + add_fingerprint(usr) + switch(href_list["operation"]) + if("start") + if(on) + turn_off() + else + turn_on() + if("blood") + blood = !blood + get_targets() + if("patrol") + will_patrol = !will_patrol + patrol_path = null + if("red_switch") + red_switch = !red_switch + to_chat(usr, "You flip the red switch [red_switch ? "on" : "off"].") + if("green_switch") + green_switch = !blue_switch + to_chat(usr, "You flip the green switch [green_switch ? "on" : "off"].") + if("blue_switch") + blue_switch = !blue_switch + to_chat(usr, "You flip the blue switch [blue_switch ? "on" : "off"].") + attack_hand(usr) + +/mob/living/bot/cleanbot/edCLN/emag_act(var/remaining_uses, var/mob/user) + . = ..() + if(!emagged) + if(user) + to_chat(user, "The [src] buzzes and beeps.") + playsound(src.loc, 'sound/machines/buzzbeep.ogg', 50, 0) + emagged = 1 + return 1 + +// Assembly + +/obj/item/weapon/secbot_assembly/edCLN_assembly + name = "ED-CLN assembly" + desc = "Some sort of bizarre assembly." + icon = 'icons/obj/aibots.dmi' + icon_state = "ed209_frame" + item_state = "buildpipe" + created_name = "ED-CLN Security Robot" + +/obj/item/weapon/secbot_assembly/edCLN_assembly/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + ..() + + if(istype(W, /obj/item/weapon/pen)) + var/t = sanitizeSafe(input(user, "Enter new robot name", name, created_name), MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && src.loc != usr) + return + created_name = t + return + + switch(build_step) + if(0, 1) + if(istype(W, /obj/item/robot_parts/l_leg) || istype(W, /obj/item/robot_parts/r_leg) || (istype(W, /obj/item/organ/external/leg) && ((W.name == "robotic right leg") || (W.name == "robotic left leg")))) + user.drop_item() + qdel(W) + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + name = "legs/frame assembly" + if(build_step == 1) + icon_state = "ed209_leg" + else + icon_state = "ed209_legs" + + if(2) + if(istype(W, /obj/item/weapon/reagent_containers/glass/bucket)) + user.drop_item() + qdel(W) + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + name = "bucket/legs/frame assembly" + item_state = "edCLN_bucket" + icon_state = "edCLN_bucket" + + if(3) + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0, user)) + build_step++ + name = "bucketed frame assembly" + to_chat(user, "You welded the bucket to \the [src].") + if(4) + if(isprox(W)) + user.drop_item() + qdel(W) + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + name = "proximity bucket ED assembly" + item_state = "edCLN_prox" + icon_state = "edCLN_prox" + + if(5) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.get_amount() < 1) + to_chat(user, "You need one coil of wire to wire \the [src].") + return + to_chat(user, "You start to wire \the [src].") + if(do_after(user, 40)) + if(C.use(1)) + build_step++ + to_chat(user, "You wire the ED-CLN assembly.") + name = "wired ED-CLN assembly" + return + + if(6) + if(istype(W, /obj/item/weapon/mop)) + name = "mop ED-CLN assembly" + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + item_state = "edCLN_mop" + icon_state = "edCLN_mop" + user.drop_item() + qdel(W) + + if(7) + if(istype(W, /obj/item/weapon/screwdriver)) + playsound(src, W.usesound, 100, 1) + var/turf/T = get_turf(user) + to_chat(user, "Attatching the mop to the frame...") + if(do_after(user, 40) && get_turf(user) == T) + build_step++ + name = "mopped ED-CLN assembly" + to_chat(user, "Mop attached.") + + if(8) + if(istype(W, /obj/item/weapon/cell)) + build_step++ + to_chat(user, "You complete the ED-CLN.") + var/turf/T = get_turf(src) + new /mob/living/bot/cleanbot/edCLN(T,created_name) + user.drop_item() + qdel(W) + user.drop_from_inventory(src) + qdel(src) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index a05a2fc112..316311c794 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -266,6 +266,18 @@ user.drop_from_inventory(src) qdel(src) return + else if(istype(D, /obj/item/stack/material) && D.get_material_name() == DEFAULT_WALL_MATERIAL) + var/obj/item/stack/material/M = D + if (M.use(1)) + var/obj/item/weapon/secbot_assembly/edCLN_assembly/B = new /obj/item/weapon/secbot_assembly/edCLN_assembly + B.loc = get_turf(src) + to_chat(user, "You armed the robot frame.") + if (user.get_inactive_hand()==src) + user.remove_from_mob(src) + user.put_in_inactive_hand(B) + qdel(src) + else + to_chat(user, "You need one sheet of metal to arm the robot frame.") else if(istype(D, /obj/item/weapon/mop)) if(reagents.total_volume < 1) to_chat(user, "\The [src] is empty!") @@ -273,7 +285,6 @@ reagents.trans_to_obj(D, 5) to_chat(user, "You wet \the [D] in \the [src].") playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return else return ..() diff --git a/html/changelogs/MisterLayne - ED-CLN.yml b/html/changelogs/MisterLayne - ED-CLN.yml new file mode 100644 index 0000000000..0aba34a616 --- /dev/null +++ b/html/changelogs/MisterLayne - ED-CLN.yml @@ -0,0 +1,6 @@ +author: MisterLayne + +delete-after: True + +changes: + - rscadd "Added a version of the ED-209 called the ED-CLN. It is a more efficient Cleanbot." \ No newline at end of file diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi index 9627b2bb6a..d6332e0d29 100644 Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ diff --git a/polaris.dme b/polaris.dme index 2c3ea5bca6..5ce7946136 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1714,6 +1714,7 @@ #include "code\modules\mob\living\bot\bot.dm" #include "code\modules\mob\living\bot\cleanbot.dm" #include "code\modules\mob\living\bot\ed209bot.dm" +#include "code\modules\mob\living\bot\edCLNbot.dm" #include "code\modules\mob\living\bot\farmbot.dm" #include "code\modules\mob\living\bot\floorbot.dm" #include "code\modules\mob\living\bot\medbot.dm"