Skip to content

Commit

Permalink
[MIRROR] Adds Atmos-themed Rebar Crossbow Ammo Types (and minor balan…
Browse files Browse the repository at this point in the history
…ce changes) [MDB IGNORE] (#2943)

* 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
:cl: 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

/:cl:

---------

Co-authored-by: LemonInTheDark <[email protected]>

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

---------

Co-authored-by: KingkumaArt <[email protected]>
Co-authored-by: LemonInTheDark <[email protected]>
Co-authored-by: NovaBot13 <[email protected]>
  • Loading branch information
4 people authored and StealsThePRs committed Jun 9, 2024
1 parent 8bc49f4 commit e88b3bf
Show file tree
Hide file tree
Showing 22 changed files with 243 additions and 37 deletions.
8 changes: 3 additions & 5 deletions code/__DEFINES/projectiles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,11 @@
/// The caliber used by the harpoon gun.
#define CALIBER_HARPOON "harpoon"
/// The caliber used by the rebar crossbow.
#define CALIBER_REBAR "sharpened iron rod"
#define CALIBER_REBAR "sharpened rod"
/// The caliber used by the rebar crossbow when forced to hold 2 rods.
#define CALIBER_REBAR_FORCED "sharpened iron rod"
#define CALIBER_REBAR_FORCED "sharpened rod"
/// The caliber used by the syndicate rebar crossbow.
#define CALIBER_REBAR_SYNDIE "jagged iron rod"
/// The caliber used by the syndicate rebar crossbow.
#define CALIBER_REBAR_SYNDIE_NORMAL "sharpened iron rod"
#define CALIBER_REBAR_SYNDIE "sharpened rod"
/// The caliber used by the meat hook.
#define CALIBER_HOOK "hook"
/// The caliber used by the changeling tentacle mutation.
Expand Down
11 changes: 11 additions & 0 deletions code/datums/components/crafting/equipment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -249,3 +249,14 @@
tool_paths = list(/obj/item/bikehorn)
time = 40 SECONDS
category = CAT_EQUIPMENT

/datum/crafting_recipe/rebar_quiver
name = "Rebar Storage Quiver"
result = /obj/item/storage/bag/rebar_quiver
time = 10
reqs = list(
/obj/item/tank/internals/oxygen = 1,
/obj/item/stack/cable_coil = 15,
)
category = CAT_EQUIPMENT
tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER)
2 changes: 1 addition & 1 deletion code/datums/components/crafting/ranged_weapon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@

/datum/crafting_recipe/rebarxbowforced
name = "Forced Rebar Crossbow"
desc = "Get an extra shot in your crossbow... for a chance of shooting yourself when you fire it."
desc = "A much quicker reload... for a chance of shooting yourself when you fire it."
result = /obj/item/gun/ballistic/rifle/rebarxbow/forced
reqs = list(
/obj/item/gun/ballistic/rifle/rebarxbow = 1,
Expand Down
21 changes: 20 additions & 1 deletion code/datums/components/crafting/weapon_ammo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,36 @@
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO

/datum/crafting_recipe/paperball
name = "Paper Ball"
result = /obj/item/ammo_casing/rebar/paperball
reqs = list(
/obj/item/paper = 1,
)
time = 0.1 SECONDS
category = CAT_WEAPON_AMMO

/datum/crafting_recipe/rebarsyndie
name = "jagged iron rod"
result = /obj/item/ammo_casing/rebar/syndie
reqs = list(
/obj/item/stack/rods = 1,
)
tool_behaviors = list(TOOL_WIRECUTTER)
time = 0.5 SECONDS
time = 0.1 SECONDS
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED

/datum/crafting_recipe/healium_bolt
name = "healium crystal crossbow bolt"
result = /obj/item/ammo_casing/rebar/healium
reqs = list(
/obj/item/grenade/gas_crystal/healium_crystal = 1
)
time = 0.1 SECONDS
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY

/datum/crafting_recipe/pulseslug
name = "Pulse Slug Shell"
result = /obj/item/ammo_casing/shotgun/pulseslug
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo
name = "SYNDICATE REBAR CROSSBOW OWNERS MANUAL"
name = "SYNDICATE REBAR CROSSBOW AMMO CRAFTING MANUAL"
desc = "This book will self destruct upon being read a second time."
crafting_recipe_types = list(
/datum/crafting_recipe/rebarsyndie
Expand Down
11 changes: 11 additions & 0 deletions code/game/objects/items/stacks/sheets/mineral.dm
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, crafting_flags = NONE, category = CAT_CLOTHING),
new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, crafting_flags = NONE, category = CAT_CLOTHING),
new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, crafting_flags = NONE, category = CAT_WEAPON_MELEE),
new /datum/stack_recipe("metallic hydrogen bolts", /obj/item/ammo_casing/rebar/hydrogen, req_amount = 1, res_amount = 1, crafting_flags = NONE, category = CAT_WEAPON_AMMO),
))

/obj/item/stack/sheet/mineral/metal_hydrogen
Expand All @@ -491,6 +492,12 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
. = ..()
. += GLOB.metalhydrogen_recipes



GLOBAL_LIST_INIT(zaukerite_recipes, list(
new /datum/stack_recipe("zaukerite shard", /obj/item/ammo_casing/rebar/zaukerite, req_amount=1, res_amount=1, category = CAT_WEAPON_AMMO),
))

/obj/item/stack/sheet/mineral/zaukerite
name = "zaukerite"
icon_state = "zaukerite"
Expand All @@ -501,3 +508,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
mats_per_unit = list(/datum/material/zaukerite = SHEET_MATERIAL_AMOUNT)
merge_type = /obj/item/stack/sheet/mineral/zaukerite
material_type = /datum/material/zaukerite

/obj/item/stack/sheet/mineral/zaukerite/get_main_recipes()
. = ..()
. += GLOB.zaukerite_recipes
24 changes: 24 additions & 0 deletions code/game/objects/items/storage/bags.dm
Original file line number Diff line number Diff line change
Expand Up @@ -573,4 +573,28 @@
for(var/i in 1 to 40)
new /obj/item/ammo_casing/harpoon(src)

/obj/item/storage/bag/rebar_quiver
name = "Rebar Storage Quiver"
icon = 'icons/obj/weapons/bows/quivers.dmi'
icon_state = "rebar_quiver"
worn_icon_state = "rebar_quiver"
inhand_icon_state = "rebar_quiver"
desc = "A oxygen tank cut in half, used for holding sharpened rods for the rebar crossbow."
slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE
resistance_flags = FLAMMABLE

/obj/item/storage/bag/rebar_quiver/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
atom_storage.max_slots = 10
atom_storage.max_total_storage = 15
atom_storage.set_holdable(list(
/obj/item/ammo_casing/rebar,
/obj/item/ammo_casing/rebar/syndie,
/obj/item/ammo_casing/rebar/healium,
/obj/item/ammo_casing/rebar/hydrogen,
/obj/item/ammo_casing/rebar/zaukerite,
/obj/item/ammo_casing/rebar/paperball,
))

#undef ORE_BAG_BALOON_COOLDOWN
2 changes: 1 addition & 1 deletion code/game/objects/items/storage/uplink_kits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@

/obj/item/storage/box/syndie_kit/rebarxbowsyndie
name = "Boxed Rebar Crossbow"
desc = "Now features instruction manual for making ammo."
desc = "A scoped weapon with low armor penetration, but devestating against flesh. Features instruction manual for making specialty ammo."

/obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents()
new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src)
Expand Down
5 changes: 5 additions & 0 deletions code/modules/clothing/suits/jobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion code/modules/clothing/suits/wintercoats.dm
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,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
Expand Down
57 changes: 49 additions & 8 deletions code/modules/projectiles/ammunition/ballistic/rifle.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
5 changes: 1 addition & 4 deletions code/modules/projectiles/boxes_magazines/internal/rifle.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

15 changes: 7 additions & 8 deletions code/modules/projectiles/guns/ballistic/rifle.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -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

Expand Down
Loading

0 comments on commit e88b3bf

Please sign in to comment.