Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion code/modules/mob/living/living_defense.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
32 changes: 32 additions & 0 deletions code/modules/projectiles/ammunition/ballistic/revolver.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
35 changes: 35 additions & 0 deletions code/modules/projectiles/boxes_magazines/ammo_boxes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down
58 changes: 58 additions & 0 deletions code/modules/projectiles/projectile/bullets/revolver.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
48 changes: 46 additions & 2 deletions code/modules/uplink/uplink_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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. \
Expand Down
Binary file modified icons/obj/ammo.dmi
Binary file not shown.