From cc37afeb0d11f84a9d4c21307194d0faa9b68ac3 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 5 May 2023 20:51:35 +0300 Subject: [PATCH 01/10] 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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 From 106a0f76341a80116ab4cb06a275353bc7a70239 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 5 May 2023 21:52:44 +0300 Subject: [PATCH 02/10] let miner borgs succ ores and stuff --- code/modules/mob/living/silicon/robot/robot_modules/station.dm | 1 + .../modules/mob/living/silicon/robot/robot_modules/station_vr.dm | 1 + 2 files changed, 2 insertions(+) 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 a831a2f8f9..8f2f79bc48 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -767,6 +767,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) src.modules += new /obj/item/weapon/mining_scanner(src) + src.modules += new /obj/item/device/vac_attachment(src) //CHOMPAdd // New Emag gear for the minebots! src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src) 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 92cd840443..df844ca6a1 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 @@ -952,6 +952,7 @@ src.modules += new /obj/item/weapon/mining_scanner(src) src.modules += new /obj/item/weapon/dogborg/jaws/small(src) src.modules += new /obj/item/weapon/gun/energy/locked/phasegun/unlocked/mounted/cyborg(src) //Chompedit To let the borg defend themselves + src.modules += new /obj/item/device/vac_attachment(src) //CHOMPAdd // New Emag gear for the minebots! src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src) From 9369ebb4a1d38aeb16c953222f3930a097224d3f Mon Sep 17 00:00:00 2001 From: Verkister Date: Sat, 6 May 2023 10:07:17 +0300 Subject: [PATCH 03/10] missed a funny check --- .../code/modules/mob/living/silicon/robot/drone/drone_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ef5f281ce8..c2950ca3cc 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 @@ -729,7 +729,7 @@ else if(isliving(target)) var/mob/living/L = target var/valid_to_suck = FALSE - if(L.anchored || !L.devourable) + 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)) From f623e7dd9a2d6824fd0d321511703ee13fbd1099 Mon Sep 17 00:00:00 2001 From: Verkister Date: Sat, 6 May 2023 18:59:26 +0300 Subject: [PATCH 04/10] Fixes and sound tweaks and power indicator --- .../living/silicon/robot/drone/drone_items.dm | 33 ++++++++++++------ modular_chomp/icons/mob/dogborg_ch.dmi | Bin 4343 -> 5233 bytes 2 files changed, 23 insertions(+), 10 deletions(-) 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 c2950ca3cc..81808a0efb 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 @@ -617,10 +617,11 @@ 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" + icon_state = "sucker-0" hitsound = 'sound/effects/attackblob.ogg' - var/vac_power = 1 + var/vac_power = 0 var/list/vac_settings = list( + "power off" = 0, "dust and grime" = 1, "tiny objects" = 2, "pests and small objects" = 3, @@ -637,15 +638,18 @@ 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] + 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(!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]...") + 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) @@ -687,7 +691,7 @@ continue suckables |= L if(LAZYLEN(suckables)) - playsound(src, 'sound/machines/hiss.ogg', vac_power * 10, 1, -1) + 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(is_type_in_list(F,item_vore_blacklist)) @@ -696,7 +700,7 @@ qdel(F) continue if(vac_conga < 100) - vac_conga += 2 + vac_conga += 3 spawn(3 + vac_conga) F.SpinAnimation(5,1) spawn(5) @@ -704,7 +708,8 @@ 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) + playsound(src, I.drop_sound, vac_power * 5, 1, -1) + playsound(src, 'sound/rakshasa/corrosion3.ogg', vac_power * 15, 1, -1) F.forceMove(user.vore_selected) if(istype(target, /turf/simulated)) var/turf/simulated/T = target @@ -715,15 +720,16 @@ 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) + 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 * 10, preference = /datum/client_preference/drop_sounds) + playsound(src, I.drop_sound, vac_power * 5, 1, -1) + playsound(src, 'sound/rakshasa/corrosion3.ogg', vac_power * 15, 1, -1) I.forceMove(user.vore_selected) else if(istype(target,/obj/effect/decal/cleanable)) - playsound(src, 'sound/machines/hiss.ogg', vac_power * 10, 1, -1) + 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)) @@ -737,9 +743,16 @@ if(vac_power >= 6) valid_to_suck = TRUE if(valid_to_suck) - playsound(src, 'sound/machines/hiss.ogg', vac_power * 10, 1, -1) + 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(user.vore_selected) 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 fa15a27fdf5dc46562f9d1393464fb09b0585922..d227a74a584cbc896f8781f2c90f53dde100063b 100644 GIT binary patch literal 5233 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 literal 4343 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 From a5a4cd029b41233b39444a7f05ebb074b160beca Mon Sep 17 00:00:00 2001 From: Verkister Date: Sun, 7 May 2023 01:52:10 +0300 Subject: [PATCH 05/10] cancel fixy --- .../modules/mob/living/silicon/robot/drone/drone_items.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 81808a0efb..71a8f69637 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 @@ -681,7 +681,7 @@ suckables |= I if(vac_power >= 5) for(var/obj/item/I in target) - if(I.anchored || I.w_class > 4) + if(I.anchored) continue else suckables |= I @@ -694,11 +694,15 @@ 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)) 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) From 9467a240d56e6d19ce32dddce474131732821a8c Mon Sep 17 00:00:00 2001 From: Verkister Date: Sun, 7 May 2023 02:02:30 +0300 Subject: [PATCH 06/10] another cancel fixy --- .../code/modules/mob/living/silicon/robot/drone/drone_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 71a8f69637..160f310fa1 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 @@ -696,7 +696,7 @@ 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)) + if(is_type_in_list(F,item_vore_blacklist) || F.loc != target) continue if(istype(F,/obj/effect/decal/cleanable)) qdel(F) From 981908beec0796a30ba9a5a7ee66f91c28e85f2d Mon Sep 17 00:00:00 2001 From: Verkister Date: Sun, 7 May 2023 15:56:11 +0300 Subject: [PATCH 07/10] More modularity and miner borgo belly upgrade --- .../silicon/robot/dogborg/dog_sleeper_vr.dm | 53 +++++++++++- .../living/silicon/robot/drone/drone_items.dm | 82 ++++++++++++++++--- 2 files changed, 121 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 142e130493..63c117a8fa 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -43,6 +43,9 @@ var/recycles = FALSE var/medsensor = TRUE //Does belly sprite come with patient ok/dead light? var/obj/item/device/healthanalyzer/med_analyzer = null + var/ore_storage = FALSE //CHOMPAdd + var/max_ore_storage = 500 //CHOMPAdd + var/current_capacity = 0 //CHOMPAdd /obj/item/device/dogborg/sleeper/New() ..() @@ -281,6 +284,9 @@ dat += "Current load: [length(contents)] / [max_item_count] objects.
" dat += "([contents.Join(", ")])

" + if(ore_storage) //CHOMPAdd + dat += "Current ore capacity: [current_capacity] / [max_ore_storage].
" + if(delivery && length(contents)) dat += "Current load: [length(contents)] / [max_item_count] objects.
" dat += "Cargo compartment slot: Cargo 1.
" @@ -769,10 +775,53 @@ /obj/item/device/dogborg/sleeper/compactor/supply //Miner borg belly name = "Supply Satchel" - desc = "A mounted survival unit with fuel processor." + desc = "A mounted survival unit with fuel processor and ore storage." //CHOMPEdit Start icon_state = "sleeperc" injection_chems = list("glucose","inaprovaline","tricordrazine") - max_item_count = 1 + max_item_count = 20 + ore_storage = TRUE + var/list/stored_ore = list( + "sand" = 0, + "hematite" = 0, + "carbon" = 0, + "raw copper" = 0, + "raw tin" = 0, + "void opal" = 0, + "painite" = 0, + "quartz" = 0, + "raw bauxite" = 0, + "phoron" = 0, + "silver" = 0, + "gold" = 0, + "marble" = 0, + "uranium" = 0, + "diamond" = 0, + "platinum" = 0, + "lead" = 0, + "mhydrogen" = 0, + "verdantium" = 0, + "rutile" = 0) + +/obj/item/device/dogborg/sleeper/compactor/supply/Entered(atom/movable/thing, atom/OldLoc) + . = ..() + if(istype(thing, /obj/item/weapon/ore)) + var/obj/item/weapon/ore/ore = thing + stored_ore[ore.material]++ + current_capacity++ + qdel(ore) + +/obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/dogborg/sleeper/compactor/supply)) + var/obj/item/device/dogborg/sleeper/compactor/supply/S = W + for(var/ore in S.stored_ore) + if(S.stored_ore[ore] > 0) + var/ore_amount = S.stored_ore[ore] // How many ores does the satchel have? + stored_ore[ore] += ore_amount // Add the ore to the machine. + S.stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. + S.current_capacity = 0 // Set the amount of ore in the satchel to 0. + to_chat(user, "You empty the satchel into the box.") + return + ..() //CHOMPEdit End /obj/item/device/dogborg/sleeper/command //Command borg belly //CHOMP addition name = "Bluespace Filing Belly" 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 160f310fa1..037497dd0f 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 @@ -615,11 +615,11 @@ //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." + 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" - hitsound = 'sound/effects/attackblob.ogg' var/vac_power = 0 + var/output_dest = null var/list/vac_settings = list( "power off" = 0, "dust and grime" = 1, @@ -627,26 +627,81 @@ "pests and small objects" = 3, "medium objects" = 4, "large objects" = 5, - "large pests" = 6 + "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/user) - var/set_input = tgui_input_list(user, "Set your vacuum attachment's power level", "Vac Settings", vac_settings) +/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) - vac_power = vac_settings[set_input] - icon_state = "sucker-[vac_power]" + 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(!user.vore_selected) + 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]...") @@ -714,12 +769,15 @@ 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(user.vore_selected) + F.forceMove(output_dest) if(istype(target, /turf/simulated)) var/turf/simulated/T = target T.dirt = 0 T.clean_blood() - else if(istype(target,/obj/item)) + 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 @@ -731,7 +789,7 @@ 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(user.vore_selected) + 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]...") @@ -752,7 +810,7 @@ L.SpinAnimation(5,1) spawn(5) playsound(src, 'sound/rakshasa/corrosion3.ogg', vac_power * 15, 1, -1) - L.forceMove(user.vore_selected) + L.forceMove(output_dest) return /obj/item/device/vac_attachment/resolve_attackby(atom/A, mob/user, var/attack_modifier = 1, var/click_parameters) From 9dc3f22d3a0d7a1fd4365e59f433cccca2aabe54 Mon Sep 17 00:00:00 2001 From: Verkister Date: Sun, 7 May 2023 20:00:58 +0300 Subject: [PATCH 08/10] dropping a fat one Moves the code and sprites into their own files and fixes a whole bunch of stuff. Also adds worn icons with 3 options ("full vac-pack", "tube only", and "hidden") Also added the vac pack into janitor locker contents and into the janitor supply cargo pack. --- code/datums/supplypacks/supply.dm | 1 + .../crates_lockers/closets/job_closets.dm | 1 + .../living/silicon/robot/drone/drone_items.dm | 207 ------------------ modular_chomp/icons/mob/dogborg_ch.dmi | Bin 5233 -> 3777 bytes vorestation.dme | 1 + 5 files changed, 3 insertions(+), 207 deletions(-) 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 d227a74a584cbc896f8781f2c90f53dde100063b..d26acf669e07b27054addf7398a9959156e24c9a 100644 GIT binary patch literal 3777 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 literal 5233 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 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" From 86d3a44eb0d66f3726926202c4609da81fc11982 Mon Sep 17 00:00:00 2001 From: Verkister Date: Sun, 7 May 2023 20:02:13 +0300 Subject: [PATCH 09/10] forgot the files lmao --- .../game/objects/items/devices/vacpack.dm | 235 ++++++++++++++++++ modular_chomp/icons/mob/vacpack.dmi | Bin 0 -> 4519 bytes 2 files changed, 235 insertions(+) create mode 100644 modular_chomp/code/game/objects/items/devices/vacpack.dm create mode 100644 modular_chomp/icons/mob/vacpack.dmi diff --git a/modular_chomp/code/game/objects/items/devices/vacpack.dm b/modular_chomp/code/game/objects/items/devices/vacpack.dm new file mode 100644 index 0000000000..badf4e6126 --- /dev/null +++ b/modular_chomp/code/game/objects/items/devices/vacpack.dm @@ -0,0 +1,235 @@ +//Vac attachment +/obj/item/device/vac_attachment + name = "Vac-Pack 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. On-mob sprites can be toggled via verb in Objects tab." + icon = 'modular_chomp/icons/mob/vacpack.dmi' + icon_override = 'modular_chomp/icons/mob/vacpack.dmi' + icon_state = "sucker_drop" + item_state = "sucker" + 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(is_type_in_list(F,item_vore_blacklist) || F.loc != target) + continue + if(istype(F,/obj/effect/decal/cleanable)) + qdel(F) + continue + if(vac_conga < 100) + vac_conga += 3 + spawn(3 + vac_conga) + if(!F.Adjacent(user) || src.loc != user || vac_power < 2) //Cancel if moved/unpowered/dropped + break + 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 ..() + +/obj/item/device/vac_attachment/pickup(mob/user) + .=..() + icon_state = "sucker-[vac_power]" + +/obj/item/device/vac_attachment/dropped(mob/user as mob) + .=..() + icon_state = "sucker_drop" + +/obj/item/device/vac_attachment/verb/hide_pack() + set name = "Toggle Vac-Pack Sprites" + set desc = "Toggle Vac-Pack sprite visibility" + set category = "Object" + var/choice = tgui_input_list(usr, "Vac-Pack Visibility Options", "Vac-Pack Visibility Options", list("Show Pack", "Show Tube", "Hidden")) + if(choice == "Show Pack") + item_state = "sucker" + if(choice == "Show Tube") + item_state = "sucker_nobag" + if(choice == "Hidden") + item_state = null + usr.update_inv_r_hand() + usr.update_inv_l_hand() + +/obj/item/weapon/storage/Entered(atom/movable/thing, atom/OldLoc) //Holder the mob so they don't get stuck in trashbags etc. + . = ..() + if(isliving(thing)) + var/mob/living/L = thing + var/mob_holder_type = L.holder_type || /obj/item/weapon/holder + new mob_holder_type(src, L) \ No newline at end of file diff --git a/modular_chomp/icons/mob/vacpack.dmi b/modular_chomp/icons/mob/vacpack.dmi new file mode 100644 index 0000000000000000000000000000000000000000..644b09f83d20eb7b084014db4b1790799302fc4d GIT binary patch literal 4519 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 rLr+1VA6p|%_I55h^Zr*xZo`qV{xdSO(MFs Date: Mon, 8 May 2023 02:44:41 +0300 Subject: [PATCH 10/10] one last minute oversight fix no succy on buckled mobs --- modular_chomp/code/game/objects/items/devices/vacpack.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modular_chomp/code/game/objects/items/devices/vacpack.dm b/modular_chomp/code/game/objects/items/devices/vacpack.dm index badf4e6126..a1d3df449c 100644 --- a/modular_chomp/code/game/objects/items/devices/vacpack.dm +++ b/modular_chomp/code/game/objects/items/devices/vacpack.dm @@ -110,7 +110,7 @@ else suckables |= I for(var/mob/living/L in target) - if(L.anchored || !L.devourable || L == user) + if(L.anchored || !L.devourable || L == user || L.buckled) continue if(L.size_multiplier < 0.5) suckables |= L @@ -130,7 +130,7 @@ suckables |= I if(vac_power >= 6) for(var/mob/living/L in target) - if(L.anchored || !L.devourable || L == user) + if(L.anchored || !L.devourable || L == user || L.buckled) continue suckables |= L if(LAZYLEN(suckables)) @@ -183,7 +183,7 @@ else if(isliving(target)) var/mob/living/L = target var/valid_to_suck = FALSE - if(L.anchored || !L.devourable || L == user) + if(L.anchored || !L.devourable || L == user || L.buckled) 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))