From 5113822f85cc6f5394b1f45bc1ffe175f06a3ca4 Mon Sep 17 00:00:00 2001 From: LynxSolstice <112824777+LynxSolstice@users.noreply.github.com> Date: Fri, 9 Aug 2024 03:42:53 -0600 Subject: [PATCH] Initial Commit, reconstructed and updated version of my original 2023 PR --- code/__DEFINES/traits.dm | 2 +- code/__HELPERS/unsorted.dm | 2 +- .../vending/vendor_types/requisitions.dm | 1 + .../vendor_types/squad_prep/squad_engineer.dm | 3 +- code/game/objects/items/explosives/mine.dm | 218 +++++++++++++++--- code/game/objects/items/stacks/sandbags.dm | 2 +- code/game/objects/items/stacks/snow.dm | 2 +- code/game/objects/items/storage/pouch.dm | 3 +- code/game/objects/items/tools/shovel_tools.dm | 1 + .../game/objects/structures/barricade/misc.dm | 2 +- .../objects/structures/barricade/sandbags.dm | 2 +- code/modules/cm_aliens/structures/tunnel.dm | 2 +- code/modules/hydroponics/hydro_tray.dm | 2 +- icons/obj/items/weapons/grenade.dmi | Bin 41297 -> 41577 bytes 14 files changed, 206 insertions(+), 36 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e6b9c4c4b9ee..8ddb91c17d98 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -258,7 +258,7 @@ #define TRAIT_TOOL_SIMPLE_BLOWTORCH "t_tool_simple_blowtorch" #define TRAIT_TOOL_PEN "t_tool_pen" - +#define TRAIT_TOOL_SHOVEL "t_tool_shovel" /// Can lockout blackmarket from ASRS console circuits. #define TRAIT_TOOL_TRADEBAND "t_tool_tradeband" diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 5a307ac02ed5..ae44885281ec 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -12,7 +12,7 @@ //Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT? #define can_puncture(W) (isitem(W) && (W.sharp || W.heat_source >= 400 || \ - HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER) || istype(W, /obj/item/tool/pen ) || istype(W, /obj/item/tool/shovel)) \ + HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER) || istype(W, /obj/item/tool/pen ) || HAS_TRAIT(W, TRAIT_TOOL_SHOVEL)) \ ) //Offuscate x for coord system diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm index a4328bad5ea4..cc092b0a5b59 100644 --- a/code/game/machinery/vending/vendor_types/requisitions.dm +++ b/code/game/machinery/vending/vendor_types/requisitions.dm @@ -46,6 +46,7 @@ list("EXPLOSIVES", -1, null, null), list("M15 Fragmentation Grenade", floor(scale * 2), /obj/item/explosive/grenade/high_explosive/m15, VENDOR_ITEM_REGULAR), list("M20 Claymore Anti-Personnel Mine", floor(scale * 4), /obj/item/explosive/mine, VENDOR_ITEM_REGULAR), + list("M19 Anti-Tank Mine", round(scale * 2), /obj/item/explosive/mine/bury/antitank, VENDOR_ITEM_REGULAR), list("M40 HEDP Grenade", floor(scale * 25), /obj/item/explosive/grenade/high_explosive, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Grenade", floor(scale * 4), /obj/item/explosive/grenade/incendiary, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Smoke Grenade", floor(scale * 4), /obj/item/explosive/grenade/phosphorus, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm index 53ce7986f195..a57587a3c043 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm @@ -34,6 +34,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR), list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR), list("M20 Mine Box (x4 mines)", 18, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR), + list("M19 Anti Tank Mine", 18, /obj/item/explosive/mine/bury/antitank, null, VENDOR_ITEM_REGULAR), list("M40 MFHS Metal Foam Grenade", 5, /obj/item/explosive/grenade/metal_foam, null, VENDOR_ITEM_REGULAR), list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR), @@ -155,7 +156,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list( list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Engineer kit Pouch", 0, /obj/item/storage/pouch/engikit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - + list("ACCESSORIES (CHOOSE 1)", 0, null, null, null), list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index 6e7aa2bdccc3..7ef2acba6814 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -8,8 +8,9 @@ icon_state = "m20" force = 5 w_class = SIZE_SMALL - //layer = MOB_LAYER - 0.1 //You can't just randomly hide claymores under boxes. Booby-trapping bodies is fine though + layer = ABOVE_LYING_MOB_LAYER - 0.1 //You can't just randomly hide claymores under boxes. Booby-trapping bodies is fine though throwforce = 5 + health = 60 throw_range = 6 throw_speed = SPEED_VERY_FAST unacidable = TRUE @@ -23,22 +24,58 @@ ) angle = 60 use_dir = TRUE + /// How much shrapnel is distributed when it explodes + var/shrapnel_count = 12 + /// How big of a boom that happens when this detonates? + var/explosive_power = 60 var/iff_signal = FACTION_MARINE var/triggered = FALSE var/hard_iff_lock = FALSE var/obj/effect/mine_tripwire/tripwire - - var/map_deployed = FALSE + /// Whether or not tripwires are enabled + var/use_tripwire = TRUE + /// If the mine needs to be buried. + var/needs_digging = FALSE + /// Is it buried? + var/buried = FALSE + /// Whether or not the mine is prespawned + var/map_prespawn = FALSE + /// After being deployed, how long does the mine take to be armed and ready? Leave false to disable. Use defines + var/arming_time = FALSE + /// If the trigger discriminates on "heavy" targets such as t3s + var/heavy_trigger = FALSE + /// How long should it take to deploy + var/deploy_time = 4 SECONDS + +/obj/item/explosive/mine/get_examine_text(mob/user) + . = ..() + if(buried) + . += "This is buried." + if(heavy_trigger) + . += "It has a heavy trigger." /obj/item/explosive/mine/Initialize() . = ..() - if(map_deployed) + if(map_prespawn) deploy_mine(null) /obj/item/explosive/mine/Destroy() QDEL_NULL(tripwire) . = ..() +// Mines are NOT bullet proof +/obj/item/explosive/mine/bullet_act(obj/projectile/bullet) + ..() + health -= bullet.damage + healthcheck() + return TRUE +/** + * Simply checks the health of the mine, if its zero or below, prime it. + */ +/obj/item/explosive/mine/proc/healthcheck() + if(health <= 0) + prime() + /obj/item/explosive/mine/ex_act() prime() //We don't care about how strong the explosion was. @@ -66,6 +103,9 @@ if(!..()) return + if(needs_digging && is_mainship_level(user.z)) + to_chat(user, SPAN_WARNING("This mine needs to be buried in suitable terrain!")) + return if(check_for_obstacles(user)) return @@ -90,9 +130,19 @@ if(check_for_obstacles(user)) return - user.visible_message(SPAN_NOTICE("[user] finishes deploying [src]."), \ + if(needs_digging) + playsound(loc, 'sound/weapons/flipblade.ogg', 25, 1) + user.visible_message(SPAN_NOTICE("[user] pulls the pin on [src]."), \ + SPAN_NOTICE("You pull the activation pin and prepare it to be buried.")) + user.drop_inv_item_on_ground(src) + anchored = TRUE + return + else + user.visible_message(SPAN_NOTICE("[user] finishes deploying [src]."), \ SPAN_NOTICE("You finish deploying [src].")) - + if(user) + user.drop_inv_item_on_ground(src) + setDir(user ? user.dir : dir) //The direction it is planted in is the direction the user faces at that time deploy_mine(user) /obj/item/explosive/mine/proc/deploy_mine(mob/user) @@ -102,15 +152,25 @@ cause_data = create_cause_data(initial(name), user) anchored = TRUE playsound(loc, 'sound/weapons/mine_armed.ogg', 25, 1) - if(user) - user.drop_inv_item_on_ground(src) - setDir(user ? user.dir : dir) //The direction it is planted in is the direction the user faces at that time activate_sensors() update_icon() -//Disarming + /obj/item/explosive/mine/attackby(obj/item/W, mob/user) + if(needs_digging && HAS_TRAIT(W, TRAIT_TOOL_SHOVEL) && !active && anchored && !buried) + user.visible_message(SPAN_NOTICE("[user] starts burying [src]."), \ + SPAN_NOTICE("You start burying [src].")) + playsound(user.loc, 'sound/effects/thud.ogg', 40, 1, 6) + if(!do_after(user, 3 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_BUILD)) + user.visible_message(SPAN_WARNING("[user] stops burying [src]."), \ + SPAN_WARNING("You stop burying [src].")) + return + user.visible_message(SPAN_NOTICE("[user] finished burying [src]."), \ + SPAN_NOTICE("You finish burying [src].")) + buried = TRUE + addtimer(CALLBACK(src, PROC_REF(deploy_mine), user), arming_time) + //Disarming if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL)) if(active) if(user.action_busy) @@ -148,6 +208,7 @@ anchored = FALSE active = FALSE triggered = FALSE + buried = FALSE update_icon() QDEL_NULL(tripwire) @@ -195,28 +256,53 @@ /obj/item/explosive/mine/Collided(atom/movable/AM) try_to_prime(AM) +/** + * Proc that notifies a heavy trigger failing to detonate + */ +/obj/item/explosive/mine/proc/heavy_trigger_notify(mob/living/unfortunate_soul) + unfortunate_soul.visible_message(SPAN_DANGER("[icon2html(src, viewers(src))] [name] clicks as [unfortunate_soul] moves on top of it."), \ + SPAN_DANGER("[icon2html(src, unfortunate_soul)] [name] clicks as you move on top of it."), \ + SPAN_DANGER("You hear a click.")) -/obj/item/explosive/mine/proc/try_to_prime(mob/living/L) +/** + * Proc that runs checks before priming occurs + */ +/obj/item/explosive/mine/proc/try_to_prime(mob/living/unfortunate_soul) if(!active || triggered || (customizable && !detonator)) return - if(!istype(L)) + if(!istype(unfortunate_soul)) return - if(L.stat == DEAD) + if(unfortunate_soul.stat == DEAD) return - if(L.get_target_lock(iff_signal)) + if(unfortunate_soul.get_target_lock(iff_signal) || issynth(unfortunate_soul)) return - if(HAS_TRAIT(L, TRAIT_ABILITY_BURROWED)) + if(HAS_TRAIT(unfortunate_soul, TRAIT_ABILITY_BURROWED)) return - L.visible_message(SPAN_DANGER("[icon2html(src, viewers(src))] The [name] clicks as [L] moves in front of it."), \ - SPAN_DANGER("[icon2html(src, L)] The [name] clicks as you move in front of it."), \ + if(heavy_trigger && buried) + playsound(loc, 'sound/weapons/flipblade.ogg', 35, 1) + if(isxeno(unfortunate_soul)) + var/mob/living/carbon/xenomorph/xeno = unfortunate_soul + if(xeno.mob_size < MOB_SIZE_BIG) + heavy_trigger_notify(unfortunate_soul) + return + if(prob(75) && ishuman(unfortunate_soul)) + var/mob/living/carbon/human/human = unfortunate_soul + if(!human.wear_suit) + heavy_trigger_notify(unfortunate_soul) + return + if(human.wear_suit.slowdown > SLOWDOWN_ARMOR_HEAVY) // "Nice hustle, 'tons-a-fun'! Next time, eat a salad!" + heavy_trigger_notify(unfortunate_soul) + return + + + unfortunate_soul.visible_message(SPAN_DANGER("[icon2html(src, viewers(src))] [name] clicks as [unfortunate_soul] moves on top of it."), \ + SPAN_DANGER("[icon2html(src, unfortunate_soul)] [name] clicks as you move on top of it."), \ SPAN_DANGER("You hear a click.")) triggered = TRUE playsound(loc, 'sound/weapons/mine_tripped.ogg', 25, 1) prime() - - //Note : May not be actual explosion depending on linked method /obj/item/explosive/mine/prime() set waitfor = 0 @@ -236,13 +322,24 @@ return XENO_NO_DELAY_ACTION if(M.a_intent == INTENT_HELP) - to_chat(M, SPAN_XENONOTICE("If you hit this hard enough, it would probably explode.")) + if(buried) + to_chat(M, SPAN_XENONOTICE("This is buried, you need to dig it out to damage it!")) + else + to_chat(M, SPAN_XENONOTICE("If you hit this hard enough, it would probably explode.")) return XENO_NO_DELAY_ACTION - - M.animation_attack_on(src) - M.visible_message(SPAN_DANGER("[M] has slashed [src]!"), \ + if(buried) + M.animation_attack_on(src) + M.visible_message(SPAN_NOTICE("[M] starts digging up [src]."), \ + SPAN_NOTICE("You start digging up [src]. This might end badly...")) + if(!do_after(M, deploy_time * 1.5, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY)) + M.visible_message(SPAN_WARNING("[M] stops disarming [src]."), \ + SPAN_WARNING("You stop disarming [src].")) + return + else + M.animation_attack_on(src) + M.visible_message(SPAN_DANGER("[M] has slashed [src]!"), \ SPAN_DANGER("You slash [src]!")) - playsound(loc, 'sound/weapons/slice.ogg', 25, 1) + playsound(loc, 'sound/weapons/slice.ogg', 25, 1) //We move the tripwire randomly in either of the four cardinal directions triggered = TRUE @@ -295,7 +392,7 @@ /obj/item/explosive/mine/active icon_state = "m20_active" base_icon_state = "m20" - map_deployed = TRUE + map_prespawn = TRUE /obj/item/explosive/mine/no_iff iff_signal = null @@ -303,6 +400,75 @@ /obj/item/explosive/mine/active/no_iff iff_signal = null +// Subtype from this to create buried mines. +/obj/item/explosive/mine/bury + use_tripwire = FALSE + needs_digging = TRUE + map_prespawn = FALSE + buried = FALSE + arming_time = 3 SECONDS + use_dir = FALSE + unacidable = TRUE + var/datum/effect_system/spark_spread/sparks = new + +/obj/item/explosive/mine/bury/examine(mob/user) + . = ..() + if(!buried) + . += "\n A small label on the bottom reads: 'To deploy: simply pull the pin to activate it and dig it in with your standard issue e-tool. This munition will automatically arm in [arming_time] seconds after being buried.' " + else + . += SPAN_DANGER("\n This unit is armed and ready") + +/obj/item/explosive/mine/bury/Destroy() + . = ..() + QDEL_NULL(sparks) + +/obj/item/explosive/mine/bury/Initialize(mapload, ...) + . = ..() + sparks.set_up(5, 0, src) + sparks.attach(src) + +/obj/item/explosive/mine/bury/disarm() + . = ..() + QDEL_NULL(sparks) + + +/obj/item/explosive/mine/bury/prime() + . = ..() + QDEL_NULL(sparks) + +/obj/item/explosive/mine/bury/antitank + name = "\improper M19 Anti-Tank Mine" + desc = "This older anti tank mine design from the 21st century was rolled back into service simply due to the currently-used M307 EMP anti tank mines being unable to trigger against the minimally armored vehicles commonly used by CLF. Featuring a 250 pound minimum detonation threshold, it can be employed against all but the lightest of vehicles. Despite being outdated, it can still pack a punch against APCs and lighter vehicles, while its plastic construction prevents detection by simple methods." + icon_state = "antitank_mine" + w_class = SIZE_LARGE + layer = ABOVE_LYING_MOB_LAYER - 0.1 //You can't just randomly hide claymores under boxes. Booby-trapping bodies is fine though + explosive_power = 150 + heavy_trigger = TRUE + +/obj/item/explosive/mine/bury/antitank/prime() + set waitfor = 0 + create_shrapnel(loc, shrapnel_count, , ,/datum/ammo/bullet/shrapnel, cause_data) + cell_explosion(loc, explosive_power, 25, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL_HALF, dir, cause_data) + for(var/mob/living/carbon/M in oview(1, src)) + M.AdjustStun(4) + M.KnockDown(4) + to_chat(M, SPAN_HIGHDANGER("Molten copper rips through your lower body!")) + M.apply_damage(50,BURN) + if(ishuman(M)) + sparks.start() + var/mob/living/carbon/human/H = M + var/obj/limb/L = H.get_limb("l_leg") + var/obj/limb/R = H.get_limb("r_leg") + R.droplimb() + L.droplimb() + playsound(M.loc, "bone_break", 45, TRUE) + playsound(M.loc, "bone_break", 45, TRUE) + for(var/mob/living/living_mob in viewers(7, src)) + if(living_mob.client) + shake_camera(living_mob, 10, 1) + qdel(src) + if(!QDELETED(src)) + disarm() /obj/item/explosive/mine/pmc name = "\improper M20P Claymore anti-personnel mine" @@ -314,7 +480,7 @@ /obj/item/explosive/mine/pmc/active icon_state = "m20p_active" base_icon_state = "m20p" - map_deployed = TRUE + map_prespawn = TRUE /obj/item/explosive/mine/custom name = "custom mine" diff --git a/code/game/objects/items/stacks/sandbags.dm b/code/game/objects/items/stacks/sandbags.dm index 84769825a472..28843b9cdff7 100644 --- a/code/game/objects/items/stacks/sandbags.dm +++ b/code/game/objects/items/stacks/sandbags.dm @@ -16,7 +16,7 @@ stack_id = "empty sandbags" /obj/item/stack/sandbags_empty/attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/tool/shovel)) + if (HAS_TRAIT(W, TRAIT_TOOL_SHOVEL)) var/obj/item/tool/shovel/ET = W if(ET.dirt_amt) ET.dirt_amt-- diff --git a/code/game/objects/items/stacks/snow.dm b/code/game/objects/items/stacks/snow.dm index ae9fd5193b7e..0707a1e42ff3 100644 --- a/code/game/objects/items/stacks/snow.dm +++ b/code/game/objects/items/stacks/snow.dm @@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(snow_recipes, list( return ..() /obj/item/stack/snow/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/tool/shovel)) + if(HAS_TRAIT(W, TRAIT_TOOL_SHOVEL)) var/obj/item/tool/shovel/ET = W if(isturf(loc)) if(ET.dirt_amt) diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 9c8c7080bdc3..5a97a4beb4f5 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -589,11 +589,12 @@ desc = "It can carry grenades, plastic explosives, mine boxes, and other explosives." icon_state = "large_explosive" storage_slots = 6 - max_w_class = SIZE_MEDIUM + max_w_class = SIZE_LARGE can_hold = list( /obj/item/explosive/plastic, /obj/item/explosive/mine, /obj/item/explosive/grenade, + /obj/item/explosive/mine/bury, ) /obj/item/storage/pouch/explosive/attackby(obj/item/W, mob/user) diff --git a/code/game/objects/items/tools/shovel_tools.dm b/code/game/objects/items/tools/shovel_tools.dm index b4aa41c5843f..58b8b7c10644 100644 --- a/code/game/objects/items/tools/shovel_tools.dm +++ b/code/game/objects/items/tools/shovel_tools.dm @@ -22,6 +22,7 @@ var/shovelspeed = 30 var/dirt_amt = 0 var/dirt_amt_per_dig = 6 + inherent_traits = list(TRAIT_TOOL_SHOVEL) /obj/item/tool/shovel/update_icon() diff --git a/code/game/objects/structures/barricade/misc.dm b/code/game/objects/structures/barricade/misc.dm index 8fcf7cec41ad..5ffbed1040e4 100644 --- a/code/game/objects/structures/barricade/misc.dm +++ b/code/game/objects/structures/barricade/misc.dm @@ -30,7 +30,7 @@ to_chat(user, "You can't get near that, it's melting!") return //Removing the barricades - if(istype(W, /obj/item/tool/shovel) && user.a_intent != INTENT_HARM) + if(HAS_TRAIT(W, TRAIT_TOOL_SHOVEL) && user.a_intent != INTENT_HARM) var/obj/item/tool/shovel/ET = W if(ET.folded) return diff --git a/code/game/objects/structures/barricade/sandbags.dm b/code/game/objects/structures/barricade/sandbags.dm index 0e2b77b4c1e5..83aa14b48be2 100644 --- a/code/game/objects/structures/barricade/sandbags.dm +++ b/code/game/objects/structures/barricade/sandbags.dm @@ -68,7 +68,7 @@ to_chat(user, "You can't get near that, it's melting!") return - if(istype(W, /obj/item/tool/shovel) && user.a_intent != INTENT_HARM) + if(HAS_TRAIT(W, TRAIT_TOOL_SHOVEL) && user.a_intent != INTENT_HARM) var/obj/item/tool/shovel/ET = W if(!ET.folded) user.visible_message(SPAN_NOTICE("[user] starts disassembling [src]."), \ diff --git a/code/modules/cm_aliens/structures/tunnel.dm b/code/modules/cm_aliens/structures/tunnel.dm index c7c25bd7ff0e..cfd90e9bf9eb 100644 --- a/code/modules/cm_aliens/structures/tunnel.dm +++ b/code/modules/cm_aliens/structures/tunnel.dm @@ -99,7 +99,7 @@ /obj/structure/tunnel/attackby(obj/item/W as obj, mob/user as mob) if(!isxeno(user)) - if(istype(W, /obj/item/tool/shovel)) + if(HAS_TRAIT(W, TRAIT_TOOL_SHOVEL)) var/obj/item/tool/shovel/destroying_shovel = W if(destroying_shovel.folded) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 98b7ff13b9a1..d1058e5a8b5e 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -723,7 +723,7 @@ draw_warnings = 0 /obj/structure/machinery/portable_atmospherics/hydroponics/soil/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/tool/shovel)) + if(HAS_TRAIT(O, TRAIT_TOOL_SHOVEL)) to_chat(user, "You clear up [src]!") qdel(src) else if(istype(O,/obj/item/tool/shovel) || istype(O,/obj/item/tank)) diff --git a/icons/obj/items/weapons/grenade.dmi b/icons/obj/items/weapons/grenade.dmi index ca8aaf9afcd6dcbeef3d5fb85fa26f1335ca7663..6ccfdee1dd9b2285265bed0b7bc369e895ed5de1 100644 GIT binary patch delta 20491 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 M-sM2~KEH&&0D`WBrvLx| delta 20185 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