From 72fb1458a750acbacbae0bf2cf6dec0e40b1adca Mon Sep 17 00:00:00 2001 From: Qustinnus Date: Thu, 20 Feb 2020 22:31:22 +0100 Subject: [PATCH] Adds the shower bot, makes sure you don't become too bloody (#49083) * Epicgamers * woops * Update code/modules/mob/living/simple_animal/bot/construction.dm Co-Authored-By: TheChosenEvilOne <34602646+TheChosenEvilOne@users.noreply.github.com> * slip * fix * epic * emag functionality * Update code/modules/mob/living/simple_animal/bot/hygienebot.dm * Update code/modules/mob/living/simple_animal/bot/hygienebot.dm * step 1 * woops * fixes * fixes * fixes++ * fixes a broken thing * lol ok * fixes * oopsie * oneliner * lmao webedits * small brain Co-authored-by: TheChosenEvilOne <34602646+TheChosenEvilOne@users.noreply.github.com> --- code/__DEFINES/robots.dm | 6 +- code/game/atoms.dm | 16 ++ code/game/objects/effects/decals/cleanable.dm | 3 + code/game/objects/structures/shower.dm | 94 +------ code/modules/lighting/lighting_object.dm | 3 + code/modules/mob/living/carbon/carbon.dm | 30 +++ code/modules/mob/living/carbon/human/human.dm | 18 ++ code/modules/mob/living/living.dm | 5 + .../mob/living/simple_animal/bot/bot.dm | 4 +- .../living/simple_animal/bot/construction.dm | 40 +++ .../living/simple_animal/bot/hygienebot.dm | 254 ++++++++++++++++++ icons/obj/watercloset.dmi | Bin 22807 -> 25473 bytes sound/effects/hygienebot_angry.ogg | Bin 0 -> 6205 bytes sound/effects/hygienebot_happy.ogg | Bin 0 -> 5230 bytes tgstation.dme | 1 + 15 files changed, 378 insertions(+), 96 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/bot/hygienebot.dm create mode 100644 sound/effects/hygienebot_angry.ogg create mode 100644 sound/effects/hygienebot_happy.ogg diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm index e45ba3d2bb2..8da9a806493 100644 --- a/code/__DEFINES/robots.dm +++ b/code/__DEFINES/robots.dm @@ -4,11 +4,11 @@ //Bot defines, placed here so they can be read by other things! #define BOT_STEP_DELAY 4 //Delay between movemements -#define BOT_STEP_MAX_RETRIES 5 //Maximum times a bot will retry to step from its position +#define BOT_STEP_MAX_RETRIES 5 //Maximum times a bot will retry to step from its position #define DEFAULT_SCAN_RANGE 7 //default view range for finding targets. -//Mode defines +//Mode defines. If you add a new one make sure you update mode_name in /mob/living/simple_animal/bot #define BOT_IDLE 0 // idle #define BOT_HUNT 1 // found target, hunting #define BOT_PREP_ARREST 2 // at target, preparing to arrest @@ -27,6 +27,7 @@ #define BOT_NAV 15 // computing navigation #define BOT_WAIT_FOR_NAV 16 // waiting for nav computation #define BOT_NO_ROUTE 17 // no destination beacon found (or no route) +#define BOT_SHOWERSTANCE 18 // cleaning unhygienic humans //Bot types #define SEC_BOT (1<<0) // Secutritrons (Beepsky) and ED-209s @@ -36,6 +37,7 @@ #define MED_BOT (1<<4) // Medibots #define HONK_BOT (1<<5) // Honkbots & ED-Honks #define FIRE_BOT (1<<6) // Firebots +#define HYGIENE_BOT (1<<7) // Hygienebots //AI notification defines #define NEW_BORG 1 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f5845c25252..9ea7c421fe3 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -862,6 +862,22 @@ color = C return + +///Proc for being washed by a shower +/atom/proc/washed(var/atom/washer) + . = SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + + var/datum/component/radioactive/healthy_green_glow = GetComponent(/datum/component/radioactive) + if(!healthy_green_glow || QDELETED(healthy_green_glow)) + return + var/strength = healthy_green_glow.strength + if(strength <= RAD_BACKGROUND_RADIATION) + qdel(healthy_green_glow) + return + healthy_green_glow.strength -= max(0, (healthy_green_glow.strength - (RAD_BACKGROUND_RADIATION * 2)) * 0.2) + + /** * call back when a var is edited on this atom * diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index b197c758c97..c6f8422c6cf 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -100,6 +100,9 @@ S.blood_state = blood_state update_icon() H.update_inv_shoes() +/atom/effect/decal/cleanable/washed(atom/washer) + . = ..() + qdel(src) /obj/effect/decal/cleanable/proc/can_bloodcrawl_in() if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY)) diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 67298ec9b49..20e48a7efbb 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -98,102 +98,12 @@ wash_atom(AM) /obj/machinery/shower/proc/wash_atom(atom/A) - SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) + A.washed(src) reagents.reaction(A, TOUCH, reaction_volume) - if(isobj(A)) - wash_obj(A) - else if(isturf(A)) - wash_turf(A) - else if(isliving(A)) - wash_mob(A) + if(isliving(A)) check_heat(A) - contamination_cleanse(A) - -/obj/machinery/shower/proc/wash_obj(obj/O) - . = SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) - O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - - -/obj/machinery/shower/proc/wash_turf(turf/tile) - SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) - tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - for(var/obj/effect/E in tile) - if(is_cleanable(E)) - qdel(E) - - -/obj/machinery/shower/proc/wash_mob(mob/living/L) - SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) - L.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "shower", /datum/mood_event/nice_shower) - if(iscarbon(L)) - var/mob/living/carbon/M = L - . = TRUE - - for(var/obj/item/I in M.held_items) - wash_obj(I) - - if(M.back && wash_obj(M.back)) - M.update_inv_back(0) - - var/list/obscured = M.check_obscured_slots() - - if(M.head && wash_obj(M.head)) - M.update_inv_head() - - if(M.glasses && !(ITEM_SLOT_EYES in obscured) && wash_obj(M.glasses)) - M.update_inv_glasses() - - if(M.wear_mask && !(ITEM_SLOT_MASK in obscured) && wash_obj(M.wear_mask)) - M.update_inv_wear_mask() - - if(M.ears && !(HIDEEARS in obscured) && wash_obj(M.ears)) - M.update_inv_ears() - - if(M.wear_neck && !(ITEM_SLOT_NECK in obscured) && wash_obj(M.wear_neck)) - M.update_inv_neck() - - if(M.shoes && !(HIDESHOES in obscured) && wash_obj(M.shoes)) - M.update_inv_shoes() - - var/washgloves = FALSE - if(M.gloves && !(HIDEGLOVES in obscured)) - washgloves = TRUE - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(H.wear_suit && wash_obj(H.wear_suit)) - H.update_inv_wear_suit() - else if(H.w_uniform && wash_obj(H.w_uniform)) - H.update_inv_w_uniform() - - if(washgloves) - SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - - if(!H.is_mouth_covered()) - H.lip_style = null - H.update_body() - - if(H.belt && wash_obj(H.belt)) - H.update_inv_belt() - else - SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - else - SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - -/obj/machinery/shower/proc/contamination_cleanse(atom/thing) - var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive) - if(!healthy_green_glow || QDELETED(healthy_green_glow)) - return - var/strength = healthy_green_glow.strength - if(strength <= RAD_BACKGROUND_RADIATION) - qdel(healthy_green_glow) - return - healthy_green_glow.strength -= max(0, (healthy_green_glow.strength - (RAD_BACKGROUND_RADIATION * 2)) * 0.2) - /obj/machinery/shower/process() if(on) wash_atom(loc) diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 3d84a0a81d9..e219f08e159 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -144,6 +144,9 @@ /atom/movable/lighting_object/onTransitZ() return +/atom/movable/lighting_object/washed(var/washer) + return + // Override here to prevent things accidentally moving around overlays. /atom/movable/lighting_object/forceMove(atom/destination, no_tp=FALSE, harderforce = FALSE) if(harderforce) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 9a731ef6b9b..a823dee108f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1038,3 +1038,33 @@ if(mood) if(mood.sanity < SANITY_UNSTABLE) return TRUE + +/mob/living/carbon/washed(var/atom/washer) + . = ..() + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "shower", /datum/mood_event/nice_shower) + + for(var/obj/item/I in held_items) + I.washed(washer) + + if(back) + update_inv_back(0) + + var/list/obscured = check_obscured_slots() + + if(head && head.washed(washer)) + update_inv_head() + + if(glasses && !(ITEM_SLOT_EYES in obscured) && glasses.washed(washer)) + update_inv_glasses() + + if(wear_mask && !(ITEM_SLOT_MASK in obscured && wear_mask.washed(washer))) + update_inv_wear_mask() + + if(ears && !(HIDEEARS in obscured) && ears.washed(washer)) + update_inv_ears() + + if(wear_neck && !(ITEM_SLOT_NECK in obscured) && wear_neck.washed(washer)) + update_inv_neck() + + if(shoes && !(HIDESHOES in obscured) && shoes.washed(washer)) + update_inv_shoes() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f9bbab9ad37..3924395d2e2 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1087,6 +1087,24 @@ remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING) +/mob/living/carbon/human/washed(var/atom/washer) + . = ..() + if(wear_suit) + update_inv_wear_suit() + else if(w_uniform && w_uniform.washed(washer)) + update_inv_w_uniform() + + if(!is_mouth_covered()) + lip_style = null + update_body() + if(belt && belt.washed(washer)) + update_inv_belt() + + var/list/obscured = check_obscured_slots() + + if(gloves && !(HIDEGLOVES in obscured) && gloves.washed(washer)) + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + /mob/living/carbon/human/adjust_nutrition(var/change) //Honestly FUCK the oldcoders for putting nutrition on /mob someone else can move it up because holy hell I'd have to fix SO many typechecks if(HAS_TRAIT(src, TRAIT_NOHUNGER)) return FALSE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2676de2a51d..29d38f40df8 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1113,6 +1113,11 @@ //Mobs on Fire end +//Washing +/mob/living/washed(var/atom/washer) + . = ..() + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + // used by secbot and monkeys Crossed /mob/living/proc/knockOver(var/mob/living/carbon/C) if(C.key) //save us from monkey hordes diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 89d4725e254..ada05cc9cfd 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -77,12 +77,12 @@ var/model = "" //The type of bot it is. var/bot_type = 0 //The type of bot it is, for radio control. var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC //The type of data HUD the bot uses. Diagnostic by default. - //This holds text for what the bot is mode doing, reported on the remote bot control interface. + //This holds text for what the bot is mode doing, reported on the remote bot control interface. This is in order of the defines for the mode defines in robots.dm, in order var/list/mode_name = list("In Pursuit","Preparing to Arrest", "Arresting", \ "Beginning Patrol", "Patrolling", "Summoned by PDA", \ "Cleaning", "Repairing", "Proceeding to work site", "Healing", \ "Proceeding to AI waypoint", "Navigating to Delivery Location", "Navigating to Home", \ - "Waiting for clear path", "Calculating navigation path", "Pinging beacon network", "Unable to reach destination") + "Waiting for clear path", "Calculating navigation path", "Pinging beacon network", "Unable to reach destination", "Chasing filth") var/datum/atom_hud/data/bot_path/path_hud = new /datum/atom_hud/data/bot_path() var/path_image_icon = 'icons/mob/aibots.dmi' var/path_image_icon_state = "path_indicator" diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index fe24fa7ced8..c89748d6d1f 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -450,3 +450,43 @@ F.name = created_name qdel(I) qdel(src) + +//Get cleaned +/obj/item/bot_assembly/hygienebot + name = "incomplete hygienebot assembly" + desc = "Clear out the swamp once and for all" + icon = 'icons/obj/watercloset.dmi' + icon_state = "drone" + created_name = "Hygienebot" + +/obj/item/bot_assembly/hygienebot/attackby(obj/item/I, mob/user, params) + . = ..() + switch(build_step) + if(ASSEMBLY_FIRST_STEP) + if(I.tool_behaviour == TOOL_WELDER) + if(I.use_tool(src, user, 0, volume=40)) + add_overlay("hs_hole") + to_chat(user, "You weld a water hole in [src]!") + build_step++ + + if(ASSEMBLY_SECOND_STEP) + if(!can_finish_build(I, user)) + return + if(istype(I, /obj/item/stack/ducts)) + var/obj/item/stack/ducts/D = I + if(D.get_amount() < 1) + to_chat(user, "You need one fluid duct to finish [src]") + return + to_chat(user, "You start to pipe up [src]...") + if(do_after(user, 40, target = src)) + if(D.get_amount() >= 1) + D.use(1) + to_chat(user, "You pipe up [src].") + build_step++ + else + return + var/mob/living/simple_animal/bot/hygienebot/H = new(drop_location()) + H.name = created_name + qdel(I) + qdel(src) + return TRUE diff --git a/code/modules/mob/living/simple_animal/bot/hygienebot.dm b/code/modules/mob/living/simple_animal/bot/hygienebot.dm new file mode 100644 index 00000000000..321d4828ce6 --- /dev/null +++ b/code/modules/mob/living/simple_animal/bot/hygienebot.dm @@ -0,0 +1,254 @@ +//Cleanbot +/mob/living/simple_animal/bot/hygienebot + name = "\improper Hygienebot" + desc = "A flying cleaning robot, he'll chase down people who can't shower properly!" + icon = 'icons/obj/watercloset.dmi' + icon_state = "drone" + density = FALSE + anchored = FALSE + health = 100 + maxHealth = 100 + radio_key = /obj/item/encryptionkey/headset_service + radio_channel = RADIO_CHANNEL_SERVICE //Service + bot_type = HYGIENE_BOT + model = "Cleanbot" + bot_core_type = /obj/machinery/bot_core/hygienebot + window_id = "autoclean" + window_name = "Automatic Crew Cleaner X2" + pass_flags = PASSMOB + path_image_color = "#993299" + allow_pai = FALSE + layer = ABOVE_MOB_LAYER + + var/mob/living/carbon/human/target + var/currentspeed = 5 + var/washing = FALSE + var/mad = FALSE + var/last_found + var/oldtarget_name + + var/mutable_appearance/water_overlay + var/mutable_appearance/fire_overlay + +/mob/living/simple_animal/bot/hygienebot/Initialize() + . = ..() + update_icon() + var/datum/job/janitor/J = new/datum/job/janitor + access_card.access += J.get_access() + prev_access = access_card.access + +/mob/living/simple_animal/bot/hygienebot/explode() + walk_to(src,0) + visible_message("[src] blows apart in a foamy explosion!") + do_sparks(3, TRUE, src) + on = FALSE + new /obj/effect/particle_effect/foam(loc) + + ..() + +/mob/living/simple_animal/bot/hygienebot/Cross(atom/movable/AM) + . = ..() + if(washing) + do_wash(AM) + +/mob/living/simple_animal/bot/hygienebot/Crossed(atom/movable/AM) + . = ..() + if(washing) + do_wash(AM) + +/mob/living/simple_animal/bot/hygienebot/update_icon_state() + . = ..() + if(on) + icon_state = "drone-on" + else + icon_state = "drone" + + +/mob/living/simple_animal/bot/hygienebot/update_overlays() + . = ..() + if(on) + var/mutable_appearance/fire_overlay = mutable_appearance(icon,"flame") + . +=fire_overlay + + + if(washing) + var/mutable_appearance/water_overlay = mutable_appearance(icon, emagged ? "dronefire" : "dronewater") + . += water_overlay + + +/mob/living/simple_animal/bot/hygienebot/turn_off() + ..() + mode = BOT_IDLE + +/mob/living/simple_animal/bot/hygienebot/bot_reset() + ..() + target = null + oldtarget_name = null + walk_to(src,0) + last_found = world.time + + +/mob/living/simple_animal/bot/hygienebot/Crossed(atom/movable/AM) + . = ..() + if(washing) + do_wash(AM) + +/mob/living/simple_animal/bot/hygienebot/Moved() + . = ..() + if(washing && isturf(loc) && !emagged) + var/turf/open/OT = loc + OT.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) + +/mob/living/simple_animal/bot/hygienebot/handle_automated_action() + if(!..()) + return + + if(washing) + do_wash(loc) + for(var/AM in loc) + do_wash(AM) + if(isopenturf(loc) && !emagged) + var/turf/open/tile = loc + tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) + + switch(mode) + if(BOT_IDLE) // idle + walk_to(src,0) + look_for_lowhygiene() // see if any disgusting fucks are in range + if(!mode && auto_patrol) // still idle, and set to patrol + mode = BOT_START_PATROL // switch to patrol mode + + if(BOT_HUNT) // hunting for stinkman + // if can't reach stinkman for long enough, don't give up, try harder. + if(emagged) //lol fuck em up + currentspeed = 8 + start_washing() + mad = TRUE + else + switch(frustration) + if(0 to 4) + currentspeed = 5 + stop_washing() + mad = FALSE + if(4 to INFINITY) + currentspeed = 2.5 + start_washing() + mad = TRUE + if(target) + if(target.loc == loc && isturf(target.loc)) //LADIES AND GENTLEMAN WE GOTEM PREPARE TO DUMP + start_washing() + if(mad) + speak("Well about fucking time you degenerate", "Fucking finally", "Thank god, you finally stopped") + playsound(loc, 'sound/effects/hygienebot_angry.ogg', 60, 1) + mad = FALSE + mode = BOT_SHOWERSTANCE + else + var/turf/olddist = get_dist(src, target) + walk_to(src, target,0, currentspeed) + if(mad && prob(60)) + playsound(loc, 'sound/effects/hygienebot_angry.ogg', 60, 1) + speak(pick("Get back here you foul smelling fucker.", "If you don't get back here right now I'm going to give you a fucking vasectomy.", "STOP RUNNING OR I WILL CUT YOUR ARTERIES!", "Just fucking let me clean you you arsehole!", "STOP. RUNNING.", "Either you stop running or I will fucking drag you out of an airlock.", "I just want to fucking clean you you troglodyte.", "If you don't come back here I'll put a green cloud around you cunt.")) + if((get_dist(src, target)) >= (olddist)) + frustration++ + else + frustration = 0 + else + back_to_idle() + + if(BOT_SHOWERSTANCE) + if(check_purity(target)) + speak("Enjoy your clean and tidy day!") + playsound(loc, 'sound/effects/hygienebot_happy.ogg', 60, 1) + back_to_idle() + return + if(!target) + last_found = world.time + if(target.loc != loc && !isturf(target.loc)) + back_to_hunt() + + if(BOT_START_PATROL) + look_for_lowhygiene() + start_patrol() + + if(BOT_PATROL) + look_for_lowhygiene() + bot_patrol() + +/mob/living/simple_animal/bot/hygienebot/proc/back_to_idle() + mode = BOT_IDLE + walk_to(src,0) + target = null + frustration = 0 + last_found = world.time + stop_washing() + INVOKE_ASYNC(src, .proc/handle_automated_action) + +/mob/living/simple_animal/bot/hygienebot/proc/back_to_hunt() + frustration = 0 + mode = BOT_HUNT + stop_washing() + INVOKE_ASYNC(src, .proc/handle_automated_action) + +/mob/living/simple_animal/bot/hygienebot/proc/look_for_lowhygiene() + for (var/mob/living/carbon/human/H in view(7,src)) //Find the NEET + if((H.name == oldtarget_name) && (world.time < last_found + 100)) + continue + if(!check_purity(H)) //Theyre impure + target = H + oldtarget_name = H.name + speak("Unhygienic client found. Please stand still so I can clean you.") + playsound(loc, 'sound/effects/hygienebot_happy.ogg', 60, 1) + visible_message("[src] points at [H.name]!") + mode = BOT_HUNT + INVOKE_ASYNC(src, .proc/handle_automated_action) + break + else + continue + +/mob/living/simple_animal/bot/hygienebot/proc/start_washing() + washing = TRUE + update_icon() + +/mob/living/simple_animal/bot/hygienebot/proc/stop_washing() + washing = FALSE + update_icon() + + + +/mob/living/simple_animal/bot/hygienebot/get_controls(mob/user) + var/list/dat = list() + dat += hack(user) + dat += showpai(user) + dat += {" +Hygienebot X2 controls

+Status: ["[on ? "On" : "Off"]"]
+Behaviour controls are [locked ? "locked" : "unlocked"]
+Maintenance panel is [open ? "opened" : "closed"]"} + + if(!locked || issilicon(user) || IsAdminGhost(user)) + dat += {"
Auto Patrol: ["[auto_patrol ? "On" : "Off"]"]"} + + return dat.Join("") + +/mob/living/simple_animal/bot/hygienebot/proc/check_purity(mob/living/L) + if(emagged && L.stat != DEAD) + return FALSE + + for(var/X in list(ITEM_SLOT_HEAD, ITEM_SLOT_MASK, ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING, ITEM_SLOT_FEET)) + + var/obj/item/I = L.get_item_by_slot(X) + if(I && HAS_BLOOD_DNA(I)) + return FALSE + return TRUE + +/mob/living/simple_animal/bot/hygienebot/proc/do_wash(atom/A) + if(emagged) + A.fire_act() + return //lol pranked no cleaning besides that + else + A.washed(src) + + + +/obj/machinery/bot_core/hygienebot + req_one_access = list(ACCESS_JANITOR, ACCESS_ROBOTICS) diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 38a340ec15b3689a22593b799c871f2d5c82e0b2..31e85ee7e9b8d35dd2255664e5615d8dcaa082c6 100644 GIT binary patch literal 25473 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

?|d>)8RD3e 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 E3w*m4fB*mh literal 22807 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 S9@H{!?>7YN!hWv$B>7*0`Uk}T literal 0 HcmV?d00001 diff --git a/sound/effects/hygienebot_happy.ogg b/sound/effects/hygienebot_happy.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ca3b9159c3771d0fcafde8e19b8b6aa0e709ca3e GIT binary patch literal 5230 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 literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 2febe1c07f5..037fb907b3f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2235,6 +2235,7 @@ #include "code\modules\mob\living\simple_animal\bot\firebot.dm" #include "code\modules\mob\living\simple_animal\bot\floorbot.dm" #include "code\modules\mob\living\simple_animal\bot\honkbot.dm" +#include "code\modules\mob\living\simple_animal\bot\hygienebot.dm" #include "code\modules\mob\living\simple_animal\bot\medbot.dm" #include "code\modules\mob\living\simple_animal\bot\mulebot.dm" #include "code\modules\mob\living\simple_animal\bot\secbot.dm"