From a9d2018549a55221d5a411adf8a40a8ff26a67a4 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 23 Nov 2022 00:03:01 +0100 Subject: [PATCH] [MIRROR] What if meteorslugs were mini cannonballs [MDB IGNORE] (#17655) * 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: * What if meteorslugs were mini cannonballs Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> --- 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 45ccf5dc82e..46baa2279ef 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -474,6 +474,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 = 5 diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 33f519ae827..92856dc41fb 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -59,7 +59,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 71282ea633e..99318c4e5cc 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