From cc37afeb0d11f84a9d4c21307194d0faa9b68ac3 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 5 May 2023 20:51:35 +0300 Subject: [PATCH] Adds yet another funny vac feature. Adds a handheld/borgmodule device "Vac attachment" that can be used to clean up dirt, junk, and even mobs off the floors depending on the power settings. Power settings go as follow, each level adding onto the previous one. "dust and grime" - cleans only cleanable decals and floor dirt. "tiny objects" - also sucks tiny objects, such as pens and ciggy butts etc. "pests and small objects" - mice/lizards/roaches, micros, and pocket sized clutter. "medium objects" - normal sized items. "large objects" - backpack/toolbox size stuff. "large pests" - any size mobs and crew. Sucked up objects and mobs do a little twirl in line before ending up inside the user's selected vorgan. --- .../silicon/robot/robot_modules/station.dm | 1 + .../silicon/robot/robot_modules/station_vr.dm | 1 + .../living/silicon/robot/drone/drone_items.dm | 134 +++++++++++++++++- modular_chomp/icons/mob/dogborg_ch.dmi | Bin 3777 -> 4343 bytes 4 files changed, 135 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 6b6a5cb9c6..a831a2f8f9 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -593,6 +593,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/mop(src) src.modules += new /obj/item/pupscrubber(src) src.modules += new /obj/item/device/lightreplacer(src) + src.modules += new /obj/item/device/vac_attachment(src) //CHOMPAdd src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("lube", 250) src.emag.name = "Lube spray" diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 29d56e57b5..92cd840443 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -525,6 +525,7 @@ src.modules += new /obj/item/weapon/dogborg/jaws/small(src) src.modules += new /obj/item/device/dogborg/boop_module(src) src.modules += new /obj/item/pupscrubber(src) + src.modules += new /obj/item/device/vac_attachment(src) //CHOMPAdd src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce //Starts empty. Can only recharge with recycled material. diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/modular_chomp/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 54465130be..ef5f281ce8 100644 --- a/modular_chomp/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/modular_chomp/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -610,4 +610,136 @@ /obj/item/weapon/handcuffs, /obj/item/toy, /obj/item/petrifier - ) \ No newline at end of file + ) + +//Vac attachment +/obj/item/device/vac_attachment + name = "Vac attachment" + desc = "Useful for slurping mess off the floors. Even things and stuff depending on settings." + icon = 'modular_chomp/icons/mob/dogborg_ch.dmi' + icon_state = "sucker" + hitsound = 'sound/effects/attackblob.ogg' + var/vac_power = 1 + var/list/vac_settings = list( + "dust and grime" = 1, + "tiny objects" = 2, + "pests and small objects" = 3, + "medium objects" = 4, + "large objects" = 5, + "large pests" = 6 + ) + +/obj/item/device/vac_attachment/New() + ..() + flags |= NOBLUDGEON //No more attack messages + +/obj/item/device/vac_attachment/attack_self(mob/user) + var/set_input = tgui_input_list(user, "Set your vacuum attachment's power level", "Vac Settings", vac_settings) + if(set_input) + vac_power = vac_settings[set_input] + +/obj/item/device/vac_attachment/afterattack(atom/target, mob/living/user, proximity) + if(!proximity) + return + if(!user.vore_selected) + return + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(isturf(target)) + user.visible_message("[user] points their [src.name] towards \the [target.name].", "You begin vacuuming the mess off \the [target.name]...") + var/list/suckables = list() + if(vac_power >= 1) + for(var/obj/effect/decal/cleanable/C in target) + suckables |= C + if(vac_power >= 2) + for(var/obj/item/I in target) + if(I.anchored || I.w_class > 1) + continue + else + suckables |= I + if(vac_power >= 3) + for(var/obj/item/I in target) + if(I.anchored || I.w_class > 2) + continue + else + suckables |= I + for(var/mob/living/L in target) + if(L.anchored || !L.devourable || L == user) + continue + if(L.size_multiplier < 0.5) + suckables |= L + if(istype(L,/mob/living/simple_mob/animal/passive/mouse) || istype(L,/mob/living/simple_mob/animal/passive/lizard) || istype(L,/mob/living/simple_mob/animal/passive/cockroach)) + suckables |= L + if(vac_power >= 4) + for(var/obj/item/I in target) + if(I.anchored || I.w_class > 3) + continue + else + suckables |= I + if(vac_power >= 5) + for(var/obj/item/I in target) + if(I.anchored || I.w_class > 4) + continue + else + suckables |= I + if(vac_power >= 6) + for(var/mob/living/L in target) + if(L.anchored || !L.devourable || L == user) + continue + suckables |= L + if(LAZYLEN(suckables)) + playsound(src, 'sound/machines/hiss.ogg', vac_power * 10, 1, -1) + var/vac_conga = 0 + for(var/atom/movable/F in suckables) + if(is_type_in_list(F,item_vore_blacklist)) + continue + if(istype(F,/obj/effect/decal/cleanable)) + qdel(F) + continue + if(vac_conga < 100) + vac_conga += 2 + spawn(3 + vac_conga) + F.SpinAnimation(5,1) + spawn(5) + if(F.loc == target) + if(isitem(F)) + var/obj/item/I = F + if(I.drop_sound) + playsound(src, I.drop_sound, vac_power * 10, preference = /datum/client_preference/drop_sounds) + F.forceMove(user.vore_selected) + if(istype(target, /turf/simulated)) + var/turf/simulated/T = target + T.dirt = 0 + T.clean_blood() + else if(istype(target,/obj/item)) + var/obj/item/I = target + if(is_type_in_list(I,item_vore_blacklist)) + return + if(vac_power > I.w_class) + playsound(src, 'sound/machines/hiss.ogg', vac_power * 10, 1, -1) + user.visible_message("[user] vacuums up \the [target.name].", "You vacuum up \the [target.name]...") + I.SpinAnimation(5,1) + spawn(5) + if(I.drop_sound) + playsound(src, I.drop_sound, vac_power * 10, preference = /datum/client_preference/drop_sounds) + I.forceMove(user.vore_selected) + else if(istype(target,/obj/effect/decal/cleanable)) + playsound(src, 'sound/machines/hiss.ogg', vac_power * 10, 1, -1) + user.visible_message("[user] vacuums up \the [target.name].", "You vacuum up \the [target.name]...") + qdel(target) + else if(isliving(target)) + var/mob/living/L = target + var/valid_to_suck = FALSE + if(L.anchored || !L.devourable) + return + if(vac_power >= 3) + if(L.size_multiplier > 0.5 || istype(L,/mob/living/simple_mob/animal/passive/mouse) || istype(L,/mob/living/simple_mob/animal/passive/lizard)) + valid_to_suck = TRUE + if(vac_power >= 6) + valid_to_suck = TRUE + if(valid_to_suck) + playsound(src, 'sound/machines/hiss.ogg', vac_power * 10, 1, -1) + user.visible_message("[user] vacuums up \the [target.name].", "You vacuum up \the [target.name]...") + L.SpinAnimation(5,1) + spawn(5) + L.forceMove(user.vore_selected) + return diff --git a/modular_chomp/icons/mob/dogborg_ch.dmi b/modular_chomp/icons/mob/dogborg_ch.dmi index d26acf669e07b27054addf7398a9959156e24c9a..fa15a27fdf5dc46562f9d1393464fb09b0585922 100644 GIT binary patch literal 4343 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 literal 3777 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