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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