diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index b5d19fa4f8d1..67a04457ff4b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -52,7 +52,7 @@ apply_damage(P.damage, P.damage_type, def_zone, armor, wound_bonus = P.wound_bonus, bare_wound_bonus = P.bare_wound_bonus, sharpness = P.get_sharpness()) if(P.dismemberment) check_projectile_dismemberment(P, def_zone) - if(istype(P, /obj/item/projectile/bullet/shotgun_uraniumslug)) + if(istype(P, /obj/item/projectile/bullet/shotgun_uraniumslug) || istype(P, /obj/item/projectile/bullet/a357/heartpiercer)) //snowflake code return P.on_hit(src, armor) return P.on_hit(src, armor)? BULLET_ACT_HIT : BULLET_ACT_BLOCK diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index 2e1b33c43950..4c0c209433f6 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -6,6 +6,38 @@ caliber = "357" projectile_type = /obj/item/projectile/bullet/a357 +/obj/item/ammo_casing/a357/ironfeather + name = ".357 Ironfeather shell" + desc = "A .357 Ironfeather shell that contains six pellets." + caliber = "357" + projectile_type = /obj/item/projectile/bullet/pellet/a357_ironfeather + pellets = 6 + variance = 25 //Same spread and pellets as buckshot + +/obj/item/ammo_casing/a357/nutcracker + name = ".357 Nutcracker bullet casing" + desc = "A .357 Nutcracker bullet casing." + caliber = "357" + projectile_type = /obj/item/projectile/bullet/a357/nutcracker + +/obj/item/ammo_casing/a357/metalshock + name = ".357 Metalshock bullet casing" + desc = "A .357 Metalshock bullet casing." + caliber = "357" + projectile_type = /obj/item/projectile/bullet/a357/metalshock + +/obj/item/ammo_casing/a357/heartpiercer + name = ".357 Heartpiercer bullet casing" + desc = "A .357 Heartpiercer bullet casing." + caliber = "357" + projectile_type = /obj/item/projectile/bullet/a357/heartpiercer + +/obj/item/ammo_casing/a357/wallstake + name = ".357 Wallstake bullet casing" + desc = "A .357 Wallstake bullet casing." + caliber = "357" + projectile_type = /obj/item/projectile/bullet/a357/wallstake + // 7.62x38mmR (Nagant Revolver) /obj/item/ammo_casing/n762 diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index f90e12baa0d4..fc1f0d246569 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -6,6 +6,41 @@ max_ammo = 7 multiple_sprites = AMMO_BOX_PER_BULLET +/obj/item/ammo_box/a357/ironfeather + name = "speed loader (.357 Ironfeather)" + desc = "A seven-shot speed loader designed for .357 revolvers. \ + These shells fire six pellets which are less damaging than buckshot but slightly better over range." + icon_state = "357feather" + ammo_type = /obj/item/ammo_casing/a357/ironfeather + +/obj/item/ammo_box/a357/nutcracker + name = "speed loader (.357 Nutcracker)" + desc = "A seven-shot speed loader designed for .357 revolver. \ + These rounds lose moderate stopping power but are capable of destroying doors and windows quickly." + icon_state = "357cracker" + ammo_type = /obj/item/ammo_casing/a357/nutcracker + +/obj/item/ammo_box/a357/metalshock + name = "speed loader (.357 Metalshock)" + desc = "A seven-shot speed loader designed for .357 revolvers. \ + These rounds convert some lethality into an electric charge which burns and confuses targets." + icon_state = "357shock" + ammo_type = /obj/item/ammo_casing/a357/metalshock + +/obj/item/ammo_box/a357/heartpiercer + name = "speed loader (.357 Heartpiercer)" + desc = "A seven-shot speed loader designed for .357 revolvers. \ + These rounds trade lethality for the ability to penetrate through armor and hit two bodies with one shot." + icon_state = "357piercer" + ammo_type = /obj/item/ammo_casing/a357/heartpiercer + +/obj/item/ammo_box/a357/wallstake + name = "speed loader (.357 Wallstake)" + desc = "A seven-shot speed loader designed for .357 revolvers. \ + These blunt rounds trade lethality for the ability to knock people against walls, stunning them momentarily." + icon_state = "357stake" + ammo_type = /obj/item/ammo_casing/a357/wallstake + /obj/item/ammo_box/c38 name = "speed loader (.38)" desc = "A six-shot speed loader designed for .38 revolvers." diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index 3fe9eb84f35f..c40c08937d34 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -78,3 +78,61 @@ name = ".357 bullet" damage = 40 wound_bonus = -70 + +/obj/item/projectile/bullet/pellet/a357_ironfeather + name = ".357 Ironfeather pellet" + damage = 8.5 //Total of 51 damage assuming PBS + wound_bonus = 7 //So it might be able to actually wound things + bare_wound_bonus = 7 + tile_dropoff = 0.4 //Loses 0.05 damage less per tile than standard damaging pellets + wound_falloff_tile = -1.5 //Still probably won't cause wounds at range + +/obj/item/projectile/bullet/a357/nutcracker + name = ".357 Nutcracker bullet" + damage = 20 //Twice the damage of a breaching slug + wound_bonus = -60 + +/obj/item/projectile/bullet/a357/nutcracker/on_hit(atom/target) //Basically breaching slug with 1.5x damage + if(istype(target, /obj/structure/window) || istype(target, /obj/machinery/door) || istype(target, /obj/structure/door_assembly)) + damage = 750 //One shot to break a window, two shots for a door, three if reinforced + ..() + +/obj/item/projectile/bullet/a357/metalshock + name = ".357 Metalshock bullet" + damage = 30 + +/obj/item/projectile/bullet/a357/metalshock/on_hit(atom/target, blocked = FALSE) + if(iscarbon(target)) + var/mob/living/carbon/C = target + if(C.electrocute_act(10, src, 1, FALSE, FALSE, FALSE, FALSE, FALSE)) //10 extra burn damage, should NOT stun + C.confused += 5 //15% chance for minor, 5% for major randomness per movement + return ..() + if(isliving(target)) //So that it works on simple mobs, too + var/mob/living/L = target + L.electrocute_act(10, src, 1, FALSE, FALSE, FALSE, FALSE) + . = ..() + +/obj/item/projectile/bullet/a357/heartpiercer + name = ".357 Heartpiercer bullet" + damage = 35 + armour_penetration = 35 + var/penetrations = 2 //Number of mobs the bullet can hit + +/obj/item/projectile/bullet/a357/heartpiercer/on_hit(atom/target) + . = ..() + penetrations -= 1 + if(ismob(target) && penetrations > 0) + return BULLET_ACT_FORCE_PIERCE + +/obj/item/projectile/bullet/a357/wallstake + name = ".357 Wallstake bullet" + damage = 25 //Consider that they're also being thrown into the wall + wound_bonus = -50 //Minor chance of dislocation from the bullet itself + sharpness = SHARP_NONE //Blunt + +/obj/item/projectile/bullet/a357/wallstake/on_hit(atom/target, blocked = FALSE) + . = ..() + if(isliving(target)) //Unlike meteorslugs, these are smaller and meant to knock bodies around, not ANYTHING + 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, 2, 2) //Extra ten damage if they hit a wall, resolves against melee armor diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 9836f7c5d42e..7e8efb9d8a75 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -778,13 +778,57 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/ammo/revolver name = ".357 Speed Loader" - desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ - For when you really need a lot of things dead." + desc = "A speed loader that contains seven additional .357 rounds; usable with the Syndicate revolver." item = /obj/item/ammo_box/a357 + cost = 1 + exclude_modes = list(/datum/game_mode/nuclear/clown_ops) + illegal_tech = FALSE + +/datum/uplink_item/ammo/revolver/ironfeather + name = ".357 Ironfeather Speed Loader" + desc = "A speed loader that contains seven .357 Ironfeather rounds; usable with the Syndicate revolver. \ + These shells contain six pellets which are less damaging than buckshot but mildly better over range." + item = /obj/item/ammo_box/a357/ironfeather + cost = 1 + exclude_modes = list(/datum/game_mode/nuclear/clown_ops) + illegal_tech = FALSE + +/datum/uplink_item/ammo/revolver/nutcracker + name = ".357 Nutcracker Speed Loader" + desc = "A speed loader that contains seven .357 Nutcracker rounds; usable with the Syndicate revolver. \ + These rounds lose moderate stopping power in exchange for being able to rapidly destroy doors and windows." + item = /obj/item/ammo_box/a357/nutcracker + cost = 2 + exclude_modes = list(/datum/game_mode/nuclear/clown_ops) + illegal_tech = FALSE + +/datum/uplink_item/ammo/revolver/metalshock + name = ".357 Metalshock Speed Loader" + desc = "A speed loader that contains seven .357 Metalshock rounds; usable with the Syndicate revolver. \ + These rounds convert some lethality into an electric payload, which can burn and confuse targets." + item = /obj/item/ammo_box/a357/metalshock cost = 2 exclude_modes = list(/datum/game_mode/nuclear/clown_ops) illegal_tech = FALSE +/datum/uplink_item/ammo/revolver/heartpiercer + name = ".357 Heartpiercer Speed Loader" + desc = "A speed loader that contains seven .357 Heartpiercer rounds; usable with the Syndicate revolver. \ + These rounds are less damaging, but penetrate through armor and up to two bodies at once." + item = /obj/item/ammo_box/a357/heartpiercer + cost = 3 + exclude_modes = list(/datum/game_mode/nuclear/clown_ops) + illegal_tech = FALSE + +/datum/uplink_item/ammo/revolver/wallstake + name = ".357 Wallstake Speed Loader" + desc = "A speed loader that contains seven .357 Wallstake rounds; usable with the Syndicate revolver. \ + These blunt rounds are less damaging but can knock people against walls." + item = /obj/item/ammo_box/a357/wallstake + cost = 4 + exclude_modes = list(/datum/game_mode/nuclear/clown_ops) + illegal_tech = FALSE + /datum/uplink_item/ammo/a40mm name = "40mm Grenade" desc = "A 40mm HE grenade for use with the M-90gl's under-barrel grenade launcher. \ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index b7e4f5b8f671..664187b68b49 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ