diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm deleted file mode 100644 index fb3fa34b6d..0000000000 --- a/code/game/machinery/bots/cleanbot.dm +++ /dev/null @@ -1,367 +0,0 @@ -//Cleanbot assembly -/obj/item/weapon/bucket_sensor - desc = "It's a bucket. With a sensor attached." - name = "proxy bucket" - icon = 'icons/obj/aibots.dmi' - icon_state = "bucket_proxy" - force = 3.0 - throwforce = 10.0 - throw_speed = 2 - throw_range = 5 - w_class = 3.0 - var/created_name = "Cleanbot" - - -//Cleanbot -/obj/machinery/bot/cleanbot - name = "Cleanbot" - desc = "A little cleaning robot, he looks so excited!" - icon = 'icons/obj/aibots.dmi' - icon_state = "cleanbot0" - layer = 5.0 - density = 0 - anchored = 0 - //weight = 1.0E7 - health = 25 - maxhealth = 25 - var/cleaning = 0 - var/screwloose = 0 - var/oddbutton = 0 - var/blood = 1 - var/list/target_types = list() - var/obj/effect/decal/cleanable/target - var/obj/effect/decal/cleanable/oldtarget - var/oldloc = null - req_access = list(access_janitor) - var/path[] = new() - var/patrol_path[] = null - var/beacon_freq = 1445 // navigation beacon frequency - var/closest_dist - var/closest_loc - var/failed_steps - var/should_patrol - var/next_dest - var/next_dest_loc - -/obj/machinery/bot/cleanbot/New() - ..() - src.get_targets() - src.icon_state = "cleanbot[src.on]" - - should_patrol = 1 - - src.botcard = new /obj/item/weapon/card/id(src) - src.botcard.access = list(access_janitor, access_maint_tunnels) - - src.locked = 0 // Start unlocked so roboticist can set them to patrol. - - if(radio_controller) - radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) - -/obj/machinery/bot/cleanbot/Destroy() - if(radio_controller) - radio_controller.remove_object(src,beacon_freq) - ..() - -/obj/machinery/bot/cleanbot/turn_on() - . = ..() - src.icon_state = "cleanbot[src.on]" - src.updateUsrDialog() - -/obj/machinery/bot/cleanbot/turn_off() - ..() - if(!isnull(src.target)) - target.targeted_by = null - src.target = null - src.oldtarget = null - src.oldloc = null - src.icon_state = "cleanbot[src.on]" - src.path = new() - src.updateUsrDialog() - -/obj/machinery/bot/cleanbot/attack_hand(mob/user as mob) - . = ..() - if (.) - return - usr.set_machine(src) - interact(user) - -/obj/machinery/bot/cleanbot/interact(mob/user as mob) - var/dat - dat += text({" -Automatic Station Cleaner v1.0

-Status: []
-Behaviour controls are [src.locked ? "locked" : "unlocked"]
-Maintenance panel is [src.open ? "opened" : "closed"]"}, -text("[src.on ? "On" : "Off"]")) - if(!src.locked || issilicon(user)) - dat += text({"
Cleans Blood: []
"}, text("[src.blood ? "Yes" : "No"]")) - dat += text({"
Patrol station: []
"}, text("[src.should_patrol ? "Yes" : "No"]")) - // dat += text({"
Beacon frequency: []
"}, text("[src.beacon_freq]")) - if(src.open && !src.locked) - dat += text({" -Odd looking screw twiddled: []
-Weird button pressed: []"}, -text("[src.screwloose ? "Yes" : "No"]"), -text("[src.oddbutton ? "Yes" : "No"]")) - - user << browse("Cleaner v1.0 controls[dat]", "window=autocleaner") - onclose(user, "autocleaner") - return - -/obj/machinery/bot/cleanbot/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - src.add_fingerprint(usr) - switch(href_list["operation"]) - if("start") - if (src.on) - turn_off() - else - turn_on() - if("blood") - src.blood =!src.blood - src.get_targets() - src.updateUsrDialog() - if("patrol") - src.should_patrol =!src.should_patrol - src.patrol_path = null - src.updateUsrDialog() - if("freq") - var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10 - if (freq > 0) - src.beacon_freq = freq - src.updateUsrDialog() - if("screw") - src.screwloose = !src.screwloose - usr << "You press the weird button." - src.updateUsrDialog() - -/obj/machinery/bot/cleanbot/attackby(obj/item/weapon/W, mob/user as mob) - if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if(src.allowed(usr) && !open && !emagged) - src.locked = !src.locked - user << "You [ src.locked ? "lock" : "unlock"] the [src] behaviour controls." - else - if(emagged) - user << "ERROR" - if(open) - user << "Please close the access panel before locking it." - else - user << "This [src] doesn't seem to respect your authority." - else - return ..() - -/obj/machinery/bot/cleanbot/Emag(mob/user as mob) - ..() - if(open && !locked) - if(user) user << "The [src] buzzes and beeps." - src.oddbutton = 1 - src.screwloose = 1 - -/obj/machinery/bot/cleanbot/process() - set background = 1 - - if(!src.on) - return - if(src.cleaning) - return - - if(!src.screwloose && !src.oddbutton && prob(5)) - visible_message("[src] makes an excited beeping booping sound!") - - if(src.screwloose && prob(5)) - if(istype(loc,/turf/simulated)) - var/turf/simulated/T = src.loc - if(T.wet < 1) - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - spawn(800) - if (istype(T) && T.wet < 2) - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - if(src.oddbutton && prob(5)) - visible_message("Something flies out of [src]. He seems to be acting oddly.") - var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(src.loc) - //gib.streak(list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) - src.oldtarget = gib - if(!src.target || src.target == null) - for (var/obj/effect/decal/cleanable/D in view(7,src)) - for(var/T in src.target_types) - if(isnull(D.targeted_by) && istype(D, T) && D != src.oldtarget) // If the mess isn't targeted (D.type == T || D.parent_type == T) - src.oldtarget = D // or if it is but the bot is gone. - src.target = D // and it's stuff we clean? Clean it. - D.targeted_by = src // Claim the mess we are targeting. - return - - if(!src.target || src.target == null) - if(src.loc != src.oldloc) - src.oldtarget = null - - if (!should_patrol) - return - - if (!patrol_path || patrol_path.len < 1) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq) - - if(!frequency) return - - closest_dist = 9999 - closest_loc = null - next_dest_loc = null - - var/datum/signal/signal = new() - signal.source = src - signal.transmission_method = 1 - signal.data = list("findbeacon" = "patrol") - frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS) - spawn(5) - if (!next_dest_loc) - next_dest_loc = closest_loc - if (next_dest_loc) - src.patrol_path = AStar(src.loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=null) - else - patrol_move() - - return - - if(target && path.len == 0) - spawn(0) - if(!src || !target) return - src.path = AStar(src.loc, src.target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id=botcard) - if (!path) path = list() - if(src.path.len == 0) - src.oldtarget = src.target - target.targeted_by = null - src.target = null - return - if(src.path.len > 0 && src.target && (src.target != null)) - step_to(src, src.path[1]) - src.path -= src.path[1] - else if(src.path.len == 1) - step_to(src, target) - - if(src.target && (src.target != null)) - patrol_path = null - if(src.loc == src.target.loc) - clean(src.target) - src.path = new() - src.target = null - return - - src.oldloc = src.loc - -/obj/machinery/bot/cleanbot/proc/patrol_move() - if (src.patrol_path.len <= 0) - return - - var/next = src.patrol_path[1] - src.patrol_path -= next - if (next == src.loc) - return - - var/moved = step_towards(src, next) - if (!moved) - failed_steps++ - if (failed_steps > 4) - patrol_path = null - next_dest = null - failed_steps = 0 - else - failed_steps = 0 - -/obj/machinery/bot/cleanbot/receive_signal(datum/signal/signal) - var/recv = signal.data["beacon"] - var/valid = signal.data["patrol"] - if(!recv || !valid) - return - - var/dist = get_dist(src, signal.source.loc) - if (dist < closest_dist && signal.source.loc != src.loc) - closest_dist = dist - closest_loc = signal.source.loc - next_dest = signal.data["next_patrol"] - - if (recv == next_dest) - next_dest_loc = signal.source.loc - next_dest = signal.data["next_patrol"] - -/obj/machinery/bot/cleanbot/proc/get_targets() - src.target_types = new/list() - - target_types += /obj/effect/decal/cleanable/blood/oil - target_types += /obj/effect/decal/cleanable/vomit - target_types += /obj/effect/decal/cleanable/crayon - target_types += /obj/effect/decal/cleanable/liquid_fuel - target_types += /obj/effect/decal/cleanable/mucus - target_types += /obj/effect/decal/cleanable/dirt - - if(src.blood) - target_types += /obj/effect/decal/cleanable/blood/ - -/obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target) - anchored = 1 - icon_state = "cleanbot-c" - visible_message("\red [src] begins to clean up the [target]") - cleaning = 1 - var/cleantime = 50 - if(istype(target,/obj/effect/decal/cleanable/dirt)) // Clean Dirt much faster - cleantime = 10 - spawn(cleantime) - if(istype(loc,/turf/simulated)) - var/turf/simulated/f = loc - f.dirt = 0 - cleaning = 0 - qdel(target) - icon_state = "cleanbot[on]" - anchored = 0 - target = null - -/obj/machinery/bot/cleanbot/explode() - src.on = 0 - src.visible_message("\red [src] blows apart!", 1) - var/turf/Tsec = get_turf(src) - - new /obj/item/weapon/reagent_containers/glass/bucket(Tsec) - - new /obj/item/device/assembly/prox_sensor(Tsec) - - if (prob(50)) - new /obj/item/robot_parts/l_arm(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 - -/obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, mob/user as mob) - ..() - if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) - user.drop_item() - qdel(W) - var/turf/T = get_turf(src.loc) - var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot(T) - A.name = src.created_name - user << "You add the robot arm to the bucket and sensor assembly. Beep boop!" - user.drop_from_inventory(src) - qdel(src) - - 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) - if (!t) - return - if (!in_range(src, usr) && src.loc != usr) - return - src.created_name = t