diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm index d80f7d1bc4..a6825b32ef 100644 --- a/code/datums/supplypacks/supply.dm +++ b/code/datums/supplypacks/supply.dm @@ -57,6 +57,7 @@ /obj/item/weapon/reagent_containers/spray/cleaner, /obj/item/weapon/reagent_containers/glass/rag, /obj/item/weapon/grenade/chem_grenade/cleaner = 3, + /obj/item/device/vac_attachment, //CHOMPAdd /obj/structure/mopbucket ) cost = 10 diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 86cb04e20d..0492608962 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -80,6 +80,7 @@ /obj/item/device/lightreplacer, /obj/item/weapon/storage/bag/trash, /obj/item/weapon/storage/belt/janitor, + /obj/item/device/vac_attachment, //CHOMPAdd /obj/item/clothing/shoes/galoshes ) 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 037497dd0f..d9ad755156 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 @@ -611,210 +611,3 @@ /obj/item/toy, /obj/item/petrifier ) - -//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. Can be connected to a trash bag or vore belly." - icon = 'modular_chomp/icons/mob/dogborg_ch.dmi' - icon_state = "sucker-0" - var/vac_power = 0 - var/output_dest = null - var/list/vac_settings = list( - "power off" = 0, - "dust and grime" = 1, - "tiny objects" = 2, - "pests and small objects" = 3, - "medium objects" = 4, - "large objects" = 5, - "large pests" = 6, - "output destination" = 7, - ) - -/obj/item/device/vac_attachment/New() - ..() - flags |= NOBLUDGEON //No more attack messages - -/obj/item/device/vac_attachment/attack_self(mob/living/user) - var/set_input = null - if(!output_dest) - set_input = "output destination" - if(!set_input) - set_input = tgui_input_list(user, "Set your vacuum attachment's power level or output mode.", "Vac Settings", vac_settings) - if(set_input) - if(set_input == "output destination") - var/set_output = tgui_input_list(user, "Set your vacuum attachment's connection port", "Vac Settings", list("Vore Belly", "Borg Belly", "Trash Bag")) - if(set_output) - if(set_output == "Borg Belly") - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - var/obj/item/weapon/robot_module/M = R.module - for(var/obj/item/device/dogborg/sleeper/S in M.modules) - if(istype(S)) - output_dest = S - return - to_chat(user, "Borg belly not found.") - if(set_output == "Trash Bag") - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - var/obj/item/weapon/robot_module/M = R.module - for(var/obj/item/weapon/storage/bag/trash/T in M.modules) - if(istype(T)) - output_dest = T - return - for(var/obj/item/weapon/storage/bag/trash/T in user.contents) - if(istype(T)) - output_dest = T - return - to_chat(user, "Trash bag not found.") - if(set_output == "Vore Belly") - if(user.vore_selected) - output_dest = user.vore_selected - return - else - vac_power = vac_settings[set_input] - icon_state = "sucker-[vac_power]" - -/obj/item/device/vac_attachment/afterattack(atom/target, mob/living/user, proximity) - if(vac_power < 1) - return - if(!proximity) - return - if(!output_dest) - return - if(istype(output_dest,/obj/item/weapon/storage/bag/trash)) - if(get_turf(output_dest) != get_turf(user)) - vac_power = 0 - icon_state = "sucker-0" - output_dest = null - to_chat(user, "Trash bag not found. Shutting down.") - return - var/obj/item/weapon/storage/bag/trash/B = output_dest - if(LAZYLEN(B.contents) >= B.max_storage_space) //A bit more lenient than the w_class system to avoid complicated spaghetti. - to_chat(user, "Trash bag full. Empty trash bag contents to continue.") - return - if(istype(output_dest,/obj/item/device/dogborg/sleeper)) - var/obj/item/device/dogborg/sleeper/B = output_dest - if(LAZYLEN(B.contents) >= B.max_item_count) - to_chat(user, "[B.name] full. Empty or process contents to continue.") - return - if(B.ore_storage) - if(B.current_capacity >= B.max_ore_storage) - to_chat(user, "Ore storage full. Deposit ore contents to a box continue.") - return - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(isturf(target)) - user.visible_message("[user] begins vacuuming the mess off \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) - 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/kitchen/candymaker/candymaker-mid1.ogg', vac_power * 20, 1, -1) - var/vac_conga = 0 - for(var/atom/movable/F in suckables) - if(!F.Adjacent(user) || vac_power < 1 || src.loc != user) //Cancel if moved/unpowered/dropped - break - if(is_type_in_list(F,item_vore_blacklist) || F.loc != target) - continue - if(istype(F,/obj/effect/decal/cleanable)) - qdel(F) - continue - if(vac_power < 2) - break - if(vac_conga < 100) - vac_conga += 3 - 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 * 5, 1, -1) - playsound(src, 'sound/rakshasa/corrosion3.ogg', vac_power * 15, 1, -1) - F.forceMove(output_dest) - if(istype(target, /turf/simulated)) - var/turf/simulated/T = target - T.dirt = 0 - T.clean_blood() - return - if(!isturf(target.loc)) - return - 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/kitchen/candymaker/candymaker-mid1.ogg', vac_power * 20, 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 * 5, 1, -1) - playsound(src, 'sound/rakshasa/corrosion3.ogg', vac_power * 15, 1, -1) - I.forceMove(output_dest) - else if(istype(target,/obj/effect/decal/cleanable)) - playsound(src, 'sound/machines/kitchen/candymaker/candymaker-mid1.ogg', vac_power * 20, 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 || L == user) - 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/kitchen/candymaker/candymaker-mid1.ogg', vac_power * 20, 1, -1) - user.visible_message("[user] vacuums up \the [target.name].", "You vacuum up \the [target.name]...") - L.SpinAnimation(5,1) - spawn(5) - playsound(src, 'sound/rakshasa/corrosion3.ogg', vac_power * 15, 1, -1) - L.forceMove(output_dest) - return - -/obj/item/device/vac_attachment/resolve_attackby(atom/A, mob/user, var/attack_modifier = 1, var/click_parameters) - if(istype(A,/obj/structure) && vac_power > 0) - afterattack(A.loc, user, click_parameters) - return TRUE - return ..() diff --git a/modular_chomp/icons/mob/dogborg_ch.dmi b/modular_chomp/icons/mob/dogborg_ch.dmi index d227a74a58..d26acf669e 100644 Binary files a/modular_chomp/icons/mob/dogborg_ch.dmi and b/modular_chomp/icons/mob/dogborg_ch.dmi differ diff --git a/vorestation.dme b/vorestation.dme index 5969c732e0..c7654a94c8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4552,6 +4552,7 @@ #include "modular_chomp\code\game\objects\items\petrifier.dm" #include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm" #include "modular_chomp\code\game\objects\items\devices\flipper.dm" +#include "modular_chomp\code\game\objects\items\devices\vacpack.dm" #include "modular_chomp\code\game\objects\items\weapons\capture_crystal.dm" #include "modular_chomp\code\game\objects\random\mapping.dm" #include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm"