From c51c19aae70d8b11f688cd694ac5522f24432d9d Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Mon, 14 Jul 2025 14:17:56 +1000 Subject: [PATCH] Alters a significant chunk of the syndicate uplink's explosives, grenades and pyrotechnics options (#91793) --- code/game/objects/items/grenades/plastic.dm | 2 +- .../objects/items/implants/implant_misc.dm | 21 ++++- code/game/objects/items/storage/dufflebags.dm | 2 +- .../game/objects/items/storage/uplink_kits.dm | 10 +++ .../mob/living/basic/pets/cat/feral.dm | 5 +- code/modules/uplink/uplink_items/dangerous.dm | 7 -- code/modules/uplink/uplink_items/explosive.dm | 55 ++++++++---- code/modules/uplink/uplink_items/nukeops.dm | 81 ++++++++++++++++-- icons/hud/implants.dmi | Bin 7738 -> 8488 bytes 9 files changed, 151 insertions(+), 32 deletions(-) diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 0787f538e6b..fa94f2e4608 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -188,4 +188,4 @@ inhand_icon_state = "plasticx4" worn_icon_state = "x4" directional = TRUE - boom_sizes = list(0, 2, 5) + boom_sizes = list(0, 5, 7) diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index 819091eef6b..a99a028dd0d 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -12,7 +12,7 @@ Function: Allows operation of implant-locked weaponry, preventing equipment from falling into enemy hands." /obj/item/implant/emp - name = "emp implant" + name = "\improper EMP implant" desc = "Triggers an EMP." icon_state = "emp" uses = 3 @@ -30,6 +30,25 @@ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit special_desc = "A Syndicate implanter used for a EMP implant" // Skyrat edit +/obj/item/implant/smoke + name = "smoke implant" + desc = "Releases a plume of smoke." + icon_state = "smoke" + uses = 3 + +/obj/item/implant/smoke/activate() + . = ..() + uses-- + var/datum/effect_system/fluid_spread/smoke/bad/smoke = new + smoke.set_up(6, holder = imp_in, location = imp_in) + smoke.start() + if(!uses) + qdel(src) + +/obj/item/implanter/smoke + name = "implanter (Smoke)" + imp_type = /obj/item/implant/smoke + /obj/item/implant/radio name = "internal radio implant" var/obj/item/radio/radio diff --git a/code/game/objects/items/storage/dufflebags.dm b/code/game/objects/items/storage/dufflebags.dm index 47fb886997e..de80f3e782b 100644 --- a/code/game/objects/items/storage/dufflebags.dm +++ b/code/game/objects/items/storage/dufflebags.dm @@ -358,7 +358,7 @@ new /obj/item/grenade/c4(src) /obj/item/storage/backpack/duffelbag/syndie/x4/PopulateContents() - for(var/i in 1 to 3) + for(var/i in 1 to 10) new /obj/item/grenade/c4/x4(src) /obj/item/storage/backpack/duffelbag/syndie/firestarter diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index dde40b22393..e9a1657a016 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -459,6 +459,8 @@ /obj/item/storage/box/syndie_kit/smoke/PopulateContents() for(var/i in 1 to 5) new /obj/item/grenade/smokebomb(src) + new /obj/item/implanter/smoke(src) + new /obj/item/clothing/mask/gas(src) /obj/item/storage/box/syndie_kit/mail_counterfeit name = "mail counterfeit kit" @@ -626,6 +628,14 @@ for(var/i in 1 to 3) new /obj/item/grenade/spawnergrenade/manhacks(src) +/obj/item/storage/box/syndie_kit/feral_cat_grenades/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/grenade/spawnergrenade/cat(src) + +/obj/item/storage/box/syndie_kit/frag_grenades/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/grenade/frag(src) + /obj/item/storage/box/syndie_kit/sleepytime/PopulateContents() new /obj/item/clothing/under/syndicate/bloodred/sleepytime(src) new /obj/item/reagent_containers/cup/glass/mug/coco(src) diff --git a/code/modules/mob/living/basic/pets/cat/feral.dm b/code/modules/mob/living/basic/pets/cat/feral.dm index 1a5bf1ca9b1..40085b81c4e 100644 --- a/code/modules/mob/living/basic/pets/cat/feral.dm +++ b/code/modules/mob/living/basic/pets/cat/feral.dm @@ -3,7 +3,10 @@ desc = "Kitty!! Wait, no no DON'T BITE-" health = 30 maxHealth = 30 - melee_damage_lower = 7 + melee_damage_lower = 15 melee_damage_upper = 15 + wound_bonus = -10 + exposed_wound_bonus = 20 + obj_damage = 0 ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile faction = list(FACTION_CAT, ROLE_SYNDICATE) diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index 8cc8b8b6fca..59d5644778d 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -96,10 +96,3 @@ cost = 13 surplus = 50 purchasable_from = ~UPLINK_ALL_SYNDIE_OPS //only traitors get the original revolver - -/datum/uplink_item/dangerous/cat - name = "Feral cat grenade" - desc = "This grenade is filled with 5 feral cats in stasis. Upon activation, the feral cats are awoken and unleashed unto unlucky bystanders. WARNING: The cats are not trained to discern friend from foe!" - cost = 5 - item = /obj/item/grenade/spawnergrenade/cat - surplus = 30 diff --git a/code/modules/uplink/uplink_items/explosive.dm b/code/modules/uplink/uplink_items/explosive.dm index 714b0f2731b..16662fa8f8c 100644 --- a/code/modules/uplink/uplink_items/explosive.dm +++ b/code/modules/uplink/uplink_items/explosive.dm @@ -9,7 +9,7 @@ name = "Slipocalypse Clusterbang" desc = "A traditional clusterbang grenade with a payload consisting entirely of Syndicate soap. Useful in any scenario!" item = /obj/item/grenade/clusterbuster/soap - cost = 3 + cost = 1 /datum/uplink_item/explosives/c4 name = "Composition C-4" @@ -19,21 +19,32 @@ item = /obj/item/grenade/c4 cost = 1 +/datum/uplink_item/explosives/x4 + name = "Composition X-4" + desc = "Similar to C4, but with a stronger blast that is directional instead of circular. X-4 can be placed on a solid surface, such as a wall or window, \ + and it will blast through the wall, injuring anything on the opposite side, while being safer to the user. For when you want a controlled explosion that \ + leaves a wider, deeper, hole." + item = /obj/item/grenade/c4/x4 + cost = 2 + limited_stock = 5 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS //nukies get their own version + /datum/uplink_item/explosives/c4bag name = "Bag of C-4 explosives" desc = "Because sometimes quantity is quality. Contains 10 C-4 plastic explosives." item = /obj/item/storage/backpack/duffelbag/syndie/c4 - cost = 8 //20% discount! + cost = 5 // 50% discount! cant_discount = TRUE + limited_stock = 2 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS //nukies get their own version -/datum/uplink_item/explosives/x4bag - name = "Bag of X-4 explosives" - desc = "Contains 3 X-4 shaped plastic explosives. Similar to C4, but with a stronger blast that is directional instead of circular. \ - X-4 can be placed on a solid surface, such as a wall or window, and it will blast through the wall, injuring anything on the opposite side, while being safer to the user. \ - For when you want a controlled explosion that leaves a wider, deeper, hole." - item = /obj/item/storage/backpack/duffelbag/syndie/x4 - cost = 4 - cant_discount = TRUE +/datum/uplink_item/explosives/frag + name = "Frag Grenade" + desc = "A frag grenade. Pop the pin. Throw towards enemy. Keep clear of the shrapnel. Easy!" + item = /obj/item/storage/backpack/duffelbag/syndie/c4 + cost = 1 + limited_stock = 10 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS //nukies get a whole box of these at once at a considerable discount. /* // SKYRAT EDIT REMOVAL START /datum/uplink_item/explosives/detomatix @@ -59,7 +70,8 @@ /datum/uplink_item/explosives/smoke name = "Smoke Grenades" - desc = "A box that contains five smoke grenades. Useful for vanishing and ninja fans with katana." + desc = "A box that contains five smoke grenades a smoke implant with three uses and a gas smask. For when you want to sow discord, vanish \ + without a trace, or run with your arms awkwardly trailing behind you." item = /obj/item/storage/box/syndie_kit/smoke cost = 2 @@ -68,8 +80,10 @@ desc = "A pizza box with a bomb cunningly attached to the lid. The timer needs to be set by opening the box; afterwards, \ opening the box again will trigger the detonation after the timer has elapsed. Comes with free pizza, for you or your target!" item = /obj/item/pizzabox/bomb - cost = 6 + cost = 2 + limited_stock = 4 surplus = 8 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS /// Ops get their own version. /datum/uplink_item/explosives/syndicate_minibomb name = "Syndicate Minibomb" @@ -77,15 +91,16 @@ in addition to dealing high amounts of damage to nearby personnel." progression_minimum = 30 MINUTES item = /obj/item/grenade/syndieminibomb - cost = 6 - purchasable_from = ~UPLINK_CLOWN_OPS - + cost = 2 + limited_stock = 4 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS /// Ops get their own version. /datum/uplink_item/explosives/syndicate_bomb/emp name = "Syndicate EMP Bomb" desc = "A variation of the syndicate bomb designed to produce a large EMP effect." item = /obj/item/sbeacondrop/emp cost = 7 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS /// Ops get their own version. limited_discount_stock = 4 /datum/uplink_item/explosives/syndicate_bomb/emp/New() @@ -104,8 +119,18 @@ progression_minimum = 30 MINUTES item = /obj/item/sbeacondrop/bomb cost = 11 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS /// Ops get their own version. limited_discount_stock = 4 /datum/uplink_item/explosives/syndicate_bomb/New() . = ..() desc = replacetext(desc, "%MIN_BOMB_TIMER", SYNDIEBOMB_MIN_TIMER_SECONDS) + +/datum/uplink_item/dangerous/cat + name = "Feral Cat Grenade Box" + desc = "This box contains 5 grenades filled with 5 feral cats in stasis. Upon activation, the feral cats are awoken and unleashed unto unlucky bystanders. WARNING: The cats are not trained to discern friend from foe!" + cost = 5 + item = /obj/item/storage/box/syndie_kit/feral_cat_grenades + surplus = 30 + limited_stock = 2 + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index c0b1f10faf9..98bf130181b 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -410,18 +410,18 @@ // Explosives and Grenades // ~~ Grenades ~~ -/datum/uplink_item/explosives/grenades +/datum/uplink_item/explosives/military_grade cost = 15 surplus = 35 purchasable_from = UPLINK_ALL_SYNDIE_OPS -/datum/uplink_item/explosives/grenades/buzzkill +/datum/uplink_item/explosives/military_grade/buzzkill name = "Buzzkill Grenade Box" desc = "A box with three grenades that release a swarm of angry bees upon activation. These bees indiscriminately attack friend or foe \ with random toxins. Courtesy of the BLF and Tiger Cooperative." item = /obj/item/storage/box/syndie_kit/bee_grenades -/datum/uplink_item/explosives/grenades/virus_grenade +/datum/uplink_item/explosives/military_grade/virus_grenade name = "Fungal Tuberculosis Grenade Box" desc = "A primed bio-grenade packed into a compact box. Comes with five Bio Virus Antidote Kit (BVAK) \ autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing \ @@ -429,12 +429,44 @@ item = /obj/item/storage/box/syndie_kit/tuberculosisgrenade restricted = TRUE -/datum/uplink_item/explosives/grenades/viscerators +/datum/uplink_item/explosives/military_grade/viscerators name = "Viscerator Delivery Grenade Box" desc = "A box containing unique grenades that deploys a swarm of viscerators upon activation, which will chase down and shred \ any non-operatives in the area." item = /obj/item/storage/box/syndie_kit/manhack_grenades +/datum/uplink_item/explosives/military_grade/frag_grenade + name = "Frag Grenade Box" + desc = "A box containing 7 frag grenades. Simple. Destructive." + item = /obj/item/storage/box/syndie_kit/frag_grenades + cost = 5 + purchasable_from = UPLINK_SERIOUS_OPS + +/datum/uplink_item/explosives/military_grade/x4 + name = "Composition X-4" + desc = "Similar to C4, but with a stronger blast that is directional instead of circular. X-4 can be placed on a solid surface, such as a wall or window, \ + and it will blast through the wall, injuring anything on the opposite side, while being safer to the user. For when you want a controlled explosion that \ + leaves a wider, deeper, hole." + item = /obj/item/grenade/c4/x4 + cost = 2 + +/datum/uplink_item/explosives/military_grade/syndicate_minibomb + name = "Syndicate Minibomb" + desc = "The minibomb is a grenade with a five-second fuse. Upon detonation, it will create a small hull breach \ + in addition to dealing high amounts of damage to nearby personnel." + item = /obj/item/grenade/syndieminibomb + cost = 2 + purchasable_from = UPLINK_SERIOUS_OPS + +/datum/uplink_item/explosives/military_grade/pizza_bomb + name = "Pizza Bomb" + desc = "A pizza box with a bomb cunningly attached to the lid. The timer needs to be set by opening the box; afterwards, \ + opening the box again will trigger the detonation after the timer has elapsed. Comes with free pizza, for you or your target!\ + Cybersun Industries would like to remind you that eating pizza in the middle of a delicate infiltration operation is not recommened, \ + and that there are no guarantees that the pizza is safe from any explosive contaminants." + item = /obj/item/pizzabox/bomb + cost = 2 + // ~~ Grenadier's Belt Kit ~~ /datum/uplink_item/weapon_kits/high_cost/grenadier @@ -445,7 +477,7 @@ // ~~ Detonator: In case you lose the old one ~~ -/datum/uplink_item/explosives/syndicate_detonator +/datum/uplink_item/explosives/military_grade/syndicate_detonator name = "Syndicate Detonator" desc = "The Syndicate detonator is a companion device to the Syndicate bomb. Simply press the included button \ and an encrypted radio frequency will instruct all live Syndicate bombs to detonate. \ @@ -453,7 +485,44 @@ the blast radius before using the detonator." item = /obj/item/syndicatedetonator cost = 1 - purchasable_from = UPLINK_ALL_SYNDIE_OPS + +/datum/uplink_item/explosives/military_grade/c4bag + name = "Bag of C-4 explosives" + desc = "Because sometimes quantity is quality. Contains 10 C-4 plastic explosives." + item = /obj/item/storage/backpack/duffelbag/syndie/c4 + cost = 5 // 50% discount! + +/datum/uplink_item/explosives/military_grade/x4bag + name = "Bag of X-4 explosives" + desc = "For when you didn't bring the bunker buster to your latest operation. Contains 10 X-4 shaped plastic explosives." + item = /obj/item/storage/backpack/duffelbag/syndie/x4 + cost = 10 // 50% discount! + +/datum/uplink_item/explosives/military_grade/emp + name = "Syndicate EMP Bomb" + desc = "A variation of the syndicate bomb designed to produce a large EMP effect." + item = /obj/item/sbeacondrop/emp + cost = 6 + +/datum/uplink_item/explosives/syndicate_bomb/emp/New() + ..() + if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) + cost *= 2 + +/datum/uplink_item/explosives/syndicate_bomb + name = "Syndicate Bomb" + desc = "The Syndicate bomb is a fearsome device capable of massive destruction. It has an adjustable timer, \ + with a minimum of %MIN_BOMB_TIMER seconds, and can be bolted to the floor with a wrench to prevent \ + movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ + transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ + be defused, and some crew may attempt to do so. \ + The bomb core can be pried out and manually detonated with other explosives." + item = /obj/item/sbeacondrop/bomb + cost = 8 + +/datum/uplink_item/explosives/syndicate_bomb/New() + . = ..() + desc = replacetext(desc, "%MIN_BOMB_TIMER", SYNDIEBOMB_MIN_TIMER_SECONDS) // Support (Borgs and Reinforcements) diff --git a/icons/hud/implants.dmi b/icons/hud/implants.dmi index f7821c401171cb84533c7ae59a964646f34d9148..b85ab4573ff2ae02a4b2b1265f03121d59433d42 100644 GIT binary patch literal 8488 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 literal 7738 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