Adds Atmos-themed Rebar Crossbow Ammo Types (and minor balance changes) (#83310)

## About The Pull Request

So this PR comes in two basic parts: the new ammo types and the minor
balance changes. I'll go over each separately.

**--- NEW AMMO TYPES ---** 


![image](https://github.com/tgstation/tgstation/assets/69398298/c031cf87-7bde-4a67-b5fc-109bedcece88)

-- Metallic Hydrogen Ammo: Made from Metallic Hydrogen, obviously. Has
middling damage and no dismemberment chance, but pierces through armor
and enemies like they weren't even there.

-- Zaukerite Slivers: Made from a zaukerite crystal. Does high toxic
damage, and has excellent wounding and embed chances, but lacking in
armor penetration. Also gives 1 second of blurry vision if it hits you!

-- Paper balls: Crafted from a sheet of paper. Mostly just a throwing
joke item, and 99% nonlethal like donksoft. Can be fired from a
crossbow, but also could be used if you wanted to have a snowball fight
on metastation.

-- Healium Crystal Bolts! Crafted (using menu) from the healium grenade
item. Heals 30 of brute/tox/burn, but puts who is hit by it to sleep for
three seconds, limiting its use in actual combat.

-- Supermatter Bolts: Dusts whoever you shoot it at! Absurdly
overpowered! Admin only!

-- A makeshift quiver, made from cutting a o2 tank in half, to store all
the ammo in.

**MINOR BALANCE CHANGES**

-- For some reason I thought the 357, which the traitor crossbow is a
direct competitor to, did 40 damage when making the first version of the
PR, instead of the reality of it doing 60. It's been buffed to 55
damage. (The basic engi one still does 35.)

-- I've been informed that generally, the stressed rebar crossbow isn't
ever used, as the misfire chance isnt worth the extra shot. As such, I
felt it was thematic to say that the stressing procedure involves
messing with the draw system in the fluff, and the stressed one now
takes half as long to rack.

**OTHER CRAP**

-- The rods now drop themselves if you shoot them at a wall. Hopefully.
-- Fixed the the non-bare wound chance on the traitor crossbow not being
increased from the base version.
-- Has a nice electronic discharge noise on firing.

## Why It's Good For The Game

I'm very happy with the reception of the rebar crossbow, and felt that
given it was an engi weapon at heart, giving it some engi-related
ammunition would fit it very well (and also have a good reason for
making zaukerite besides selling it.) The paper balls were more just so
the crew could able to shoot their buddies with it and not maim them.

As for the balance, I feel the tot crossbow being department restricted
is already a strong factor in it being infrequently seen, and if someone
is lucky enough to roll traitor in a job slot, it's a shame if their
job's items aren't worth it. The stressed variant is a similar case, and
I hope it's enough of a buff to encourage its use.

## Changelog
🆑 WebcomicArtist
add: Added zaukerite (high damage/embed, low AP) and metallic hydrogen
(High AP and piercing, but low embed) crossbow ammo for the rebar
crossbows
add: Added healium crystal ammo for the crossbow as well, which heals
whomever you shoot it at.
add: Added admin-only supermatter crossbow bolts that dust you, because
why the hell not.
add: Added non-harmful paper balls. Can be shot from a crossbow, or
thrown at co-workers.
add: Added a quiver made from cutting an o2 tank in half, to hold it
all.
image: added sprites for all the above.
balance: Traitor Engineer Crossbow ammo now does 55 damage instead of
45, to make it compete with revolver.
balance: Stressed Rebar Crossbow now has a shorter delay required to
rack it, but can shoot you in the face on misfire.
fix: fixed rebar crossbow shots not dropping items on hitting walls
fix: fixed traitor crossbow having worse wound chance than the base one
sound: added new crossbow firing sound effect

/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
This commit is contained in:
KingkumaArt
2024-06-09 02:06:26 +00:00
committed by GitHub
co-authored by LemonInTheDark
parent 43592ce05f
commit ed4ba0d227
22 changed files with 244 additions and 38 deletions
+5
View File
@@ -180,6 +180,8 @@
/obj/item/tank/internals/plasmaman,
/obj/item/t_scanner,
/obj/item/gun/ballistic/rifle/boltaction/pipegun,
/obj/item/storage/bag/rebar_quiver,
/obj/item/gun/ballistic/rifle/rebarxbow,
)
resistance_flags = NONE
species_exception = list(/datum/species/golem)
@@ -426,6 +428,9 @@
/obj/item/tank/internals/emergency_oxygen,
/obj/item/tank/internals/plasmaman,
/obj/item/extinguisher,
/obj/item/construction/rtd,
/obj/item/gun/ballistic/rifle/rebarxbow,
/obj/item/storage/bag/rebar_quiver,
)
/datum/armor/atmos_overalls
+2 -1
View File
@@ -521,7 +521,8 @@
/obj/item/t_scanner,
/obj/item/construction/rld,
/obj/item/construction/rtd,
/obj/item/gun/ballistic/rifle/rebarxbow
/obj/item/gun/ballistic/rifle/rebarxbow,
/obj/item/storage/bag/rebar_quiver,
)
armor_type = /datum/armor/wintercoat_engineering
hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
@@ -51,13 +51,61 @@
projectile_type = /obj/projectile/bullet/shotgun_beanbag/a40mm
/obj/item/ammo_casing/rebar
name = "sharpened iron rod"
name = "Sharpened Iron Rod"
desc = "A Sharpened Iron rod. It's Pointy!"
caliber = CALIBER_REBAR
icon_state = "rod_sharp"
base_icon_state = "rod_sharp"
projectile_type = /obj/projectile/bullet/rebar
/obj/item/ammo_casing/rebar/syndie
name = "Jagged Iron Rod"
desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you."
caliber = CALIBER_REBAR
icon_state = "rod_jagged"
base_icon_state = "rod_jagged"
projectile_type = /obj/projectile/bullet/rebar/syndie
/obj/item/ammo_casing/rebar/zaukerite
name = "Zaukerite Sliver"
desc = "A sliver of a zaukerite crystal. Due to its irregular, jagged edges, removal of an embedded zaukerite sliver should only be done by trained surgeons."
caliber = CALIBER_REBAR
icon_state = "rod_zaukerite"
base_icon_state = "rod_zaukerite"
projectile_type = /obj/projectile/bullet/rebar/zaukerite
/obj/item/ammo_casing/rebar/hydrogen
name = "Metallic Hydrogen Bolt"
desc = "An ultra-sharp rod made from pure metallic hydrogen. Armor may as well not exist."
caliber = CALIBER_REBAR
icon_state = "rod_hydrogen"
base_icon_state = "rod_hydrogen"
projectile_type = /obj/projectile/bullet/rebar/hydrogen
/obj/item/ammo_casing/rebar/healium
name = "Healium Crystal Bolt"
desc = "Who needs a syringe gun, anyway?"
caliber = CALIBER_REBAR
icon_state = "rod_healium"
base_icon_state = "rod_healium"
projectile_type = /obj/projectile/bullet/rebar/healium
/obj/item/ammo_casing/rebar/supermatter
name = "Supermatter Bolt"
desc = "Wait, how is the bow capable of firing this without dusting?"
caliber = CALIBER_REBAR
icon_state = "rod_supermatter"
base_icon_state = "rod_supermatter"
projectile_type = /obj/projectile/bullet/rebar/supermatter
/obj/item/ammo_casing/rebar/paperball
name = "Paper Ball"
desc = "Doink!"
caliber = CALIBER_REBAR
icon_state = "paperball"
base_icon_state = "paperball"
projectile_type = /obj/projectile/bullet/paperball
/obj/item/ammo_casing/rebar/Initialize(mapload)
. = ..()
AddElement(/datum/element/caseless, TRUE)
@@ -66,10 +114,3 @@
. = ..()
icon_state = "[base_icon_state]"
/obj/item/ammo_casing/rebar/syndie
name = "Jagged iron rod"
desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you."
caliber = CALIBER_REBAR_SYNDIE
icon_state = "rod_jagged"
base_icon_state = "rod_jagged"
projectile_type = /obj/projectile/bullet/rebarsyndie
@@ -54,8 +54,5 @@
/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie
max_ammo = 3
caliber = CALIBER_REBAR_SYNDIE
ammo_type = /obj/item/ammo_casing/rebar/syndie
/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie/normal
caliber = CALIBER_REBAR_SYNDIE_NORMAL
ammo_type = /obj/item/ammo_casing/rebar
@@ -173,7 +173,8 @@
/obj/item/gun/ballistic/rifle/rebarxbow
name = "Heated Rebar Crossbow"
desc = "Made from an inducer, iron rods, and some wire, this crossbow fires sharpened iron rods, made from the plentiful iron rods found stationwide. \
Only holds one rod in the magazine - you can craft the crossbow with a crowbar to try and force a second rod in, but risks a misfire, or worse..."
Additionally, can fire specialty ammo made from the materials in the atmos crystalizer - zaukerite, metallic hydrogen, and healium crytals all work. \
Very slow to reload - you can craft the crossbow with a crowbar to try loosen the crossbar, but risks a misfire, or worse..."
icon = 'icons/obj/weapons/guns/ballistic.dmi'
icon_state = "rebarxbow"
inhand_icon_state = "rebarxbow"
@@ -194,7 +195,7 @@
weapon_weight = WEAPON_HEAVY
initial_caliber = CALIBER_REBAR
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal
fire_sound = 'sound/items/syringeproj.ogg'
fire_sound = 'sound/items/xbow_lock.ogg'
can_be_sawn_off = FALSE
tac_reloads = FALSE
var/draw_time = 3 SECONDS
@@ -234,24 +235,22 @@
/obj/item/gun/ballistic/rifle/rebarxbow/forced
name = "Stressed Rebar Crossbow"
desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a bit more ammo in this crossbow. Hopefully, it was worth it."
desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a draw this crossbow a bit faster. Hopefully, it was worth it."
// Feel free to add a recipe to allow you to change it back if you would like, I just wasn't sure if you could have two recipes for the same thing.
can_misfire = TRUE
draw_time = 1.5
misfire_probability = 25
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force
/obj/item/gun/ballistic/rifle/rebarxbow/syndie
name = "Syndicate Rebar Crossbow"
desc = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \
Holds three shots without a chance of exploding, and features a built in scope. Normally uses special syndicate jagged iron bars, but can be wrenched to shoot inferior normal ones."
Holds three shots without a chance of exploding, and features a built in scope. Compatable with all known crossbow ammunition."
icon_state = "rebarxbowsyndie"
inhand_icon_state = "rebarxbowsyndie"
worn_icon_state = "rebarxbowsyndie"
w_class = WEIGHT_CLASS_NORMAL
can_modify_ammo = TRUE
initial_caliber = CALIBER_REBAR_SYNDIE
alternative_caliber = CALIBER_REBAR_SYNDIE_NORMAL
alternative_ammo_misfires = FALSE
initial_caliber = CALIBER_REBAR
draw_time = 1
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie
@@ -58,20 +58,120 @@
armour_penetration = 10
wound_bonus = -20
bare_wound_bonus = 20
embedding = list(embed_chance=60, fall_chance=2, jostle_chance=2, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=10)
embedding = list("embed_chance" = 60, "fall_chance" = 2, "jostle_chance" = 2, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" = 10)
embed_falloff_tile = -5
wound_falloff_tile = -2
shrapnel_type = /obj/item/stack/rods
shrapnel_type = /obj/item/ammo_casing/rebar
/obj/projectile/bullet/rebarsyndie
/obj/projectile/bullet/rebar/proc/handle_drop(datum/source, obj/item/ammo_casing/rebar/newcasing)
/obj/projectile/bullet/rebar/syndie
name = "rebar"
icon_state = "rebar"
damage = 35
damage = 55
speed = 0.4
dismemberment = 2 //It's a budget sniper rifle.
armour_penetration = 20 //A bit better versus armor. Gets past anti laser armor or a vest, but doesnt wound proc on sec armor.
wound_bonus = 10
bare_wound_bonus = 10
embedding = list(embed_chance=80, fall_chance=1, jostle_chance=3, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=14)
bare_wound_bonus = 20
embedding = list("embed_chance" = 80, "fall_chance" = 1, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 3, "jostle_pain_mult" = 2, "rip_time" = 14)
embed_falloff_tile = -3
shrapnel_type = /obj/item/stack/rods
shrapnel_type = /obj/item/ammo_casing/rebar/syndie
/obj/projectile/bullet/rebar/zaukerite
name = "zaukerite shard"
icon_state = "rebar_zaukerite"
damage = 60
speed = 0.6
dismemberment = 10
damage_type = TOX
eyeblur = 5
armour_penetration = 20 // not nearly as good, as its not as sharp.
wound_bonus = 10
bare_wound_bonus = 40
embedding = list("embed_chance" =100, "fall_chance" = 0, "jostle_chance" = 5, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.8, "pain_mult" = 6, "jostle_pain_mult" = 2, "rip_time" = 30)
embed_falloff_tile = 0 // very spiky.
shrapnel_type = /obj/item/ammo_casing/rebar/zaukerite
/obj/projectile/bullet/rebar/hydrogen
name = "metallic hydrogen bolt"
icon_state = "rebar_hydrogen"
damage = 40
speed = 0.6
dismemberment = 0 //goes through clean.
damage_type = BRUTE
armour_penetration = 30 //very pointy.
projectile_piercing = PASSMOB //felt this might have been a nice compromise for the lower damage for the difficulty of getting it
wound_bonus = -15
bare_wound_bonus = 10
embedding = list("embed_chance" = 50, "fall_chance" = 2, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.6, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" =18)
embed_falloff_tile = -3
shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen
/obj/projectile/bullet/rebar/healium
name = "healium bolt"
icon_state = "rebar_healium"
damage = 0
speed = 0.4
dismemberment = 0
damage_type = BRUTE
armour_penetration = 100
wound_bonus = -100
bare_wound_bonus = -100
embedding = list(embed_chance = 0)
embed_falloff_tile = -3
shrapnel_type = /obj/item/ammo_casing/rebar/healium
/obj/projectile/bullet/rebar/healium/on_hit(atom/target, blocked = 0, pierce_hit)
. = ..()
if(!isliving(target))
return BULLET_ACT_HIT
var/mob/living/breather = target
breather.SetSleeping(3 SECONDS)
breather.adjustFireLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC)
breather.adjustToxLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC)
breather.adjustBruteLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC)
breather.adjustOxyLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC, required_respiration_type = ALL)
return BULLET_ACT_HIT
/obj/projectile/bullet/rebar/supermatter
name = "supermatter bolt"
icon_state = "rebar_supermatter"
damage = 0
speed = 0.4
dismemberment = 0
damage_type = TOX
armour_penetration = 100
shrapnel_type = /obj/item/ammo_casing/rebar/supermatter
/obj/projectile/bullet/rebar/supermatter/on_hit(atom/target, blocked = 0, pierce_hit)
. = ..()
if(isliving(target))
var/mob/living/victim = target
victim.investigate_log("has been dusted by [src].", INVESTIGATE_DEATHS)
dust_feedback(target)
victim.dust()
else if(!isturf(target)&& !isliving(target))
dust_feedback(target)
qdel(target)
return BULLET_ACT_HIT
/obj/projectile/bullet/rebar/supermatter/proc/dust_feedback(atom/target)
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 10, TRUE)
visible_message(span_danger("[target] is hit by [src], turning [target.p_them()] to dust in a brilliant flash of light!"))
/obj/projectile/bullet/paperball
desc = "Doink!"
damage = 1 // It's a damn toy.
range = 10
shrapnel_type = null
embedding = null
name = "paper ball"
desc = "doink!"
damage_type = BRUTE
icon_state = "paperball"
+1 -1
View File
@@ -151,7 +151,7 @@
desc = "A much more proffessional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included."
item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie
cost = 10
restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER)
restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN)
/datum/uplink_item/role_restricted/magillitis_serum
name = "Magillitis Serum Autoinjector"