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 d26acf669e..fa15a27fdf 100644 Binary files a/modular_chomp/icons/mob/dogborg_ch.dmi and b/modular_chomp/icons/mob/dogborg_ch.dmi differ