Files
Bubberstation/code/modules/projectiles/projectile/bullets/cannonball.dm
SkyratBot a9d2018549 [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
🆑
balance: Meteorslugs are now miniature cannonballs. They also need more
gunpowder and rum to be constructed.
/🆑

* What if meteorslugs were mini cannonballs

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2022-11-22 15:03:01 -08:00

90 lines
3.3 KiB
Plaintext

/obj/projectile/bullet/cannonball
name = "cannonball"
icon_state = "cannonball"
damage = 110 //gets set to 100 before first mob impact.
sharpness = NONE
wound_bonus = 0
projectile_piercing = ALL
dismemberment = 0
paralyze = 5 SECONDS
stutter = 20 SECONDS
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 -= 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(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))
var/turf/closed/hit_turf = target
hit_turf.ScrapeAway()
return ..()
/obj/projectile/bullet/cannonball/explosive
name = "explosive shell"
color = "#FF0000"
projectile_piercing = NONE
damage = 40 //set to 30 before first mob impact, but they're gonna be gibbed by the explosion
/obj/projectile/bullet/cannonball/explosive/on_hit(atom/target, blocked = FALSE)
explosion(target, devastation_range = 2, heavy_impact_range = 3, light_impact_range = 4, explosion_cause = src)
. = ..()
/obj/projectile/bullet/cannonball/emp
name = "malfunction shot"
icon_state = "emp_cannonball"
projectile_piercing = NONE
damage = 15 //very low
/obj/projectile/bullet/cannonball/emp/on_hit(atom/target, blocked = FALSE)
empulse(src, 4, 10)
. = ..()
/obj/projectile/bullet/cannonball/biggest_one
name = "\"The Biggest One\""
icon_state = "biggest_one"
damage = 70 //low pierce
/obj/projectile/bullet/cannonball/biggest_one/on_hit(atom/target, blocked = FALSE)
if(projectile_piercing == NONE)
explosion(target, devastation_range = GLOB.MAX_EX_DEVESTATION_RANGE, heavy_impact_range = GLOB.MAX_EX_HEAVY_RANGE, light_impact_range = GLOB.MAX_EX_LIGHT_RANGE, flash_range = GLOB.MAX_EX_FLASH_RANGE, explosion_cause = src)
. = ..()
/obj/projectile/bullet/cannonball/trashball
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?