From 87f5f2ecfac3a10c2a6b11d5d439e23aae100125 Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Tue, 22 Nov 2022 16:03:26 +1100 Subject: [PATCH] What if meteorslugs were mini cannonballs (#71137) ## About The Pull Request Meteorslug shells fire effectively mini cannonballs. They're not as strong, but they tear through everything they shoot, including walls and airlocks. They're not as lethal as the real deal or go nearly as far (range of 7, not even a screens length), but they are still pretty destructive. They don't fling people, but they could potentially barrel over several people, which I think is a good trade-off. Meteorslugs need gunpowder (for a bigger shot) and rum (yarr) to construct. ## Why It's Good For The Game Only through sleep deprivation do I get such diabolical ideas. Also, the original functionality wasn't very interesting except for like, maybe a few niche silly things, but the real value was using them to get into places. This version still definitely does that. But it's _cooler_. (The object displacement was pretty jank and I think this accomplishes a very similar effect without actively harming why people would look to use meteorslugs) ## Changelog :cl: balance: Meteorslugs are now miniature cannonballs. They also need more gunpowder and rum to be constructed. /:cl: --- code/datums/components/crafting/recipes.dm | 2 ++ .../ammunition/ballistic/shotgun.dm | 2 +- .../projectile/bullets/cannonball.dm | 31 +++++++++++++++++-- .../projectiles/projectile/bullets/shotgun.dm | 20 ------------ code/modules/uplink/uplink_items/nukeops.dm | 2 +- 5 files changed, 32 insertions(+), 25 deletions(-) diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 97bc4245835..fbadcb05317 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -483,6 +483,8 @@ result = /obj/item/ammo_casing/shotgun/meteorslug reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /obj/item/rcd_ammo = 1, + /datum/reagent/gunpowder = 10, + /datum/reagent/consumable/ethanol/rum = 10, /obj/item/stock_parts/manipulator = 2) tool_behaviors = list(TOOL_SCREWDRIVER) time = 0.5 SECONDS diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index b048c8cd2ec..c29d27cecad 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -58,7 +58,7 @@ name = "meteorslug shell" desc = "A shotgun shell rigged with CMC technology, which launches a massive slug when fired." icon_state = "mshell" - projectile_type = /obj/projectile/bullet/shotgun_meteorslug + projectile_type = /obj/projectile/bullet/cannonball/meteorslug /obj/item/ammo_casing/shotgun/pulseslug name = "pulse slug" diff --git a/code/modules/projectiles/projectile/bullets/cannonball.dm b/code/modules/projectiles/projectile/bullets/cannonball.dm index 587e1a2e99d..11ffa603cbf 100644 --- a/code/modules/projectiles/projectile/bullets/cannonball.dm +++ b/code/modules/projectiles/projectile/bullets/cannonball.dm @@ -11,16 +11,28 @@ embedding = null hitsound = 'sound/effects/meteorimpact.ogg' hitsound_wall = 'sound/weapons/sonic_jackhammer.ogg' + /// If our cannonball hits something, it reduces the damage by this value. + var/damage_decrease_on_hit = 10 + /// This is the cutoff point of our cannonball, so that it stops piercing past this value. + var/stop_piercing_threshold = 40 + /// This is the damage value we do to objects on hit. Usually, more than the actual projectile damage + var/object_damage = 80 + /// Whether or not our cannonball loses object damage upon hitting an object. + var/object_damage_decreases = FALSE + /// How much our object damage decreases on hit, similar to normal damage. + var/object_damage_decrease_on_hit = 0 /obj/projectile/bullet/cannonball/on_hit(atom/target, blocked = FALSE) - damage -= 10 - if(damage < 40) + damage -= damage_decrease_on_hit + if(object_damage_decreases) + object_damage -= min(damage, object_damage_decrease_on_hit) + if(damage < stop_piercing_threshold) projectile_piercing = NONE //so it finishes its rampage if(blocked == 100) return ..() if(isobj(target)) var/obj/hit_object = target - hit_object.take_damage(80, BRUTE, BULLET, FALSE) + hit_object.take_damage(object_damage, BRUTE, BULLET, FALSE) else if(isclosedturf(target)) damage -= max(damage - 30, 10) //lose extra momentum from busting through a wall if(!isindestructiblewall(target)) @@ -62,3 +74,16 @@ name = "trashball" icon_state = "trashball" damage = 90 //better than the biggest one but no explosion, so kinda just a worse normal cannonball + +/obj/projectile/bullet/cannonball/meteorslug + name = "meteorslug" + icon = 'icons/obj/meteor.dmi' + icon_state = "small" + damage = 40 //REALLY not as bad as a real cannonball but they'll fucking hurt + paralyze = 1 SECONDS //The original stunned, okay? + knockdown = 8 SECONDS + stutter = null + stop_piercing_threshold = 10 + object_damage_decreases = TRUE + object_damage_decrease_on_hit = 40 + range = 7 //let's keep it a bit sane, okay? diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index eefc2f798f4..90be59c421a 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -49,26 +49,6 @@ color = "#FFFF00" embedding = null -/obj/projectile/bullet/shotgun_meteorslug - name = "meteorslug" - icon = 'icons/obj/meteor.dmi' - icon_state = "dust" - damage = 30 - paralyze = 15 - knockdown = 80 - hitsound = 'sound/effects/meteorimpact.ogg' - -/obj/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE) - . = ..() - if(ismovable(target)) - var/atom/movable/M = target - var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) - M.safe_throw_at(throw_target, 3, 2, force = MOVE_FORCE_EXTREMELY_STRONG) - -/obj/projectile/bullet/shotgun_meteorslug/Initialize(mapload) - . = ..() - SpinAnimation() - /obj/projectile/bullet/shotgun_frag12 name ="frag12 slug" icon_state = "pellet" diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 125f966d10c..85f937d64a5 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -254,7 +254,7 @@ /datum/uplink_item/ammo/shotgun/meteor name = "12g Meteorslug Shells" desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \ - Great for blasting airlocks off their frames and knocking down enemies." + Great for blasting holes into the hull and knocking down enemies." item = /obj/item/ammo_box/magazine/m12g/meteor purchasable_from = UPLINK_NUKE_OPS