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