[MIRROR] Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant [MDB IGNORE] (#24860)

* Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant (#78777)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

![image](https://github.com/KingkumaArt/KingkumaTGSS13/assets/69398298/e4d921a6-9bd6-4eb3-9085-2bfa5df67826)
Engi now has access to a Half Life 2 Inspired rebar crossbow! Made of
rods, wire, and an inducer, it shoots sharpened iron rods at a high
velocity. High damage and good embed chance, but requires you to reload
every shot which requires you to stand still for three seconds to pull
the string back. You can also Use a wrench on it to force it to store
more rods (read: more than one), but risks it exploding and shooting you
instead.

The syndicate variant, avaliable to traitor engis, can fire three rounds
before needing a reload, and features a scope and better armor piercing
ammpo, but costs 10TC. I see it as a sidegrade to the revolver - quieter
and has much more widespread ammuniton, but holds less ammo and doesnt
have the same burst stopping power. And, to those concerned about the
balance of a non-traitor with this item - the AP ammo can only be made
by the traitor who bought it, and anyone else has to use normal ammo.

GUN STAT JUNK
Normal one has 60% embed chance and does 40 damage (against unarmored
targetd), but requires you to wait at least 3 seconds not moving to pull
the string back. Good alpha strike but not sustainable in a long fight.
Its akin to a pipegun.

Lacks any AP qualities besides piercing a jumpsuit, because any wound
chance it has is due to a bare skin bonus. Generally not a great weapon
to fight sec with.

Syndie version is generally the above but better. Takes less to pull the
string back, slightly higher damage, better fire rate, etc. Doesnt fare
well against any armor thats equivalent to sec gear or better due to
most having low (relatively) AP and wound chance, but good bare wound
bonus.

STATS TLDR: Its good against unarmored chumps and greyshirts but anyone
in armor that protects against bullets will kick your teeth in.

Also, Ammo is crafted from an iron rod. I wanted to have it just fire
rods as is, but theyre stacked items which you cant define projectiles
or ammo from.

## Why It's Good For The Game

I've always felt engi, for as big of a department as it is, is lacking
in the "fun weapons" area. Sci has mechs and xenobio, med has chem nades
and syringe guns, and cargo has anything the QM will buy - but other
than the flamer and shocked doors, engi doesnt have much. Thats why I
made this pr. it was originally just a traitor item, as they lacked many
traitor items in their shop, but I felt like a worse, bootleg version
would suit them.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Enginenering rebar crossbows + tot kit
add: Added a bunch of ammos and crafting junk to make the ammo exist
image: added icond for all the above
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>

* Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant

---------

Co-authored-by: KingkumaArt <69398298+KingkumaArt@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
This commit is contained in:
SkyratBot
2023-11-08 22:35:31 -05:00
committed by GitHub
co-authored by MrMelbert Jacquerel KingkumaArt
parent ad410a730e
commit 064682b5cd
19 changed files with 235 additions and 1 deletions
+8
View File
@@ -52,6 +52,14 @@
#define CALIBER_ARROW "arrow"
/// The caliber used by the harpoon gun.
#define CALIBER_HARPOON "harpoon"
/// The caliber used by the rebar crossbow.
#define CALIBER_REBAR "sharpened iron rod"
/// The caliber used by the rebar crossbow when forced to hold 2 rods.
#define CALIBER_REBAR_FORCED "sharpened iron 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"
/// The caliber used by the meat hook.
#define CALIBER_HOOK "hook"
/// The caliber used by the changeling tentacle mutation.
@@ -206,6 +206,33 @@
time = 5 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/rebarxbow
name = "Heated Rebar Crossbow"
result = /obj/item/gun/ballistic/rifle/rebarxbow
reqs = list(
/obj/item/stack/rods = 6,
/obj/item/stack/cable_coil = 12,
/obj/item/inducer = 1,
)
tool_behaviors = list(TOOL_WELDER)
time = 5 SECONDS
category = CAT_WEAPON_RANGED
/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."
result = /obj/item/gun/ballistic/rifle/rebarxbow/forced
reqs = list(
/obj/item/gun/ballistic/rifle/rebarxbow = 1,
)
blacklist = list(
/obj/item/gun/ballistic/rifle/rebarxbow/forced,
/obj/item/gun/ballistic/rifle/rebarxbow/syndie,
)
tool_behaviors = list(TOOL_CROWBAR)
time = 1 SECONDS
category = CAT_WEAPON_RANGED
/datum/crafting_recipe/pipegun_prime
name = "Regal Pipegun"
always_available = FALSE
@@ -12,6 +12,17 @@
time = 0.5 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
always_available = FALSE
category = CAT_WEAPON_AMMO
/datum/crafting_recipe/pulseslug
name = "Pulse Slug Shell"
result = /obj/item/ammo_casing/shotgun/pulseslug
@@ -0,0 +1,13 @@
/obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo
name = "SYNDICATE REBAR CROSSBOW OWNERS MANUAL"
desc = "This book will self destruct upon being read a second time."
crafting_recipe_types = list(
/datum/crafting_recipe/rebarsyndie
)
uses = 1
remarks = list(
"AIM FOR THE LEGS TO CRIPPLE YOUR FOES",
"USE A ROD AND WIRECUTTERS TO MAKE BETTER AMMO",
"BE AWARE OF THE SCOPE'S BLIND SPOTS",
"READ THIS BOOK AGAIN TO DUST IT.",
)
+1 -1
View File
@@ -12,8 +12,8 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \
new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, one_per_turf = FALSE, category = CAT_WEAPON_AMMO), \
))
/obj/item/stack/rods
name = "iron rod"
desc = "Some rods. Can be used for building or something."
@@ -340,6 +340,14 @@
icon_state = "syndiebox"
illustration = "writing_syndie"
/obj/item/storage/box/syndie_kit/rebarxbowsyndie
name = "Boxed Rebar Crossbow"
desc = "Now features instruction manual for making ammo."
/obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents()
new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src)
new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src)
/obj/item/storage/box/syndie_kit/origami_bundle
name = "origami kit"
desc = "A box full of a number of rather masterfully engineered paper planes and a manual on \"The Art of Origami\"."
@@ -49,3 +49,27 @@
name = "40mm rubber shell"
desc = "A cased rubber slug. The big brother of the beanbag slug, this thing will knock someone out in one. Doesn't do so great against anyone in armor."
projectile_type = /obj/projectile/bullet/shotgun_beanbag/a40mm
/obj/item/ammo_casing/rebar
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/Initialize(mapload)
. = ..()
AddElement(/datum/element/caseless, TRUE)
/obj/item/ammo_casing/rebar/update_icon_state()
. = ..()
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
@@ -28,3 +28,24 @@
max_ammo = 1
caliber = CALIBER_HARPOON
ammo_type = /obj/item/ammo_casing/harpoon
/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal
name = "single round magazine"
max_ammo = 1
caliber = CALIBER_REBAR
ammo_type = /obj/item/ammo_casing/rebar
/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force
name = "two round magazine"
max_ammo = 2
caliber = CALIBER_REBAR_FORCED
ammo_type = /obj/item/ammo_casing/rebar
/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
@@ -25,6 +25,7 @@
return
drop_bolt(user)
/obj/item/gun/ballistic/rifle/can_shoot()
if (bolt_locked)
return FALSE
@@ -169,6 +170,90 @@
if(.)
name = "\improper Obrez Moderna" // wear it loud and proud
/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..."
icon = 'icons/obj/weapons/guns/ballistic.dmi'
icon_state = "rebarxbow"
inhand_icon_state = "rebarxbow"
worn_icon_state = "rebarxbow"
rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
must_hold_to_load = FALSE
mag_display = FALSE
empty_indicator = TRUE
bolt_type = BOLT_TYPE_LOCKING
semi_auto = FALSE
internal_magazine = TRUE
can_modify_ammo = FALSE
slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE
bolt_wording = "bowstring"
magazine_wording = "rod"
cartridge_wording = "rod"
misfire_probability = 25
initial_caliber = CALIBER_REBAR
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal
fire_sound = 'sound/items/syringeproj.ogg'
can_be_sawn_off = FALSE
tac_reloads = FALSE
var/draw_time = 3 SECONDS
SET_BASE_PIXEL(0, 0)
/obj/item/gun/ballistic/rifle/rebarxbow/rack(mob/user = null)
if (bolt_locked)
drop_bolt(user)
return
balloon_alert(user, "bowstring loosened")
playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
handle_chamber(empty_chamber = FALSE, from_firing = FALSE, chamber_next_round = FALSE)
bolt_locked = TRUE
update_appearance()
/obj/item/gun/ballistic/rifle/rebarxbow/drop_bolt(mob/user = null)
if(!do_after(user, draw_time, target = src))
return
playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE)
balloon_alert(user, "bowstring drawn")
chamber_round()
bolt_locked = FALSE
update_appearance()
/obj/item/gun/ballistic/rifle/rebarxbow/can_shoot()
if (bolt_locked)
return FALSE
return ..()
/obj/item/gun/ballistic/rifle/rebarxbow/examine(mob/user)
. = ..()
. += "The crossbow is [bolt_locked ? "not ready" : "ready"] to fire."
/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."
// 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
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."
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
draw_time = 1
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie
/obj/item/gun/ballistic/rifle/rebarxbow/syndie/Initialize(mapload)
. = ..()
AddComponent(/datum/component/scope, range_modifier = 2) //enough range to at least be useful for stealth
/obj/item/gun/ballistic/rifle/boltaction/pipegun
name = "pipegun"
desc = "An excellent weapon for flushing out tunnel rats and enemy assistants, but its rifling leaves much to be desired."
@@ -47,3 +47,32 @@
embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10)
wound_falloff_tile = -5
shrapnel_type = /obj/item/ammo_casing/harpoon
// Rebar (Rebar Crossbow)
/obj/projectile/bullet/rebar
name = "rebar"
icon_state = "rebar"
damage = 30
speed = 0.4
dismemberment = 1 //because a 1 in 100 chance to just blow someones arm off is enough to be cool but also not enough to be reliable
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)
embed_falloff_tile = -5
wound_falloff_tile = -2
shrapnel_type = /obj/item/stack/rods
/obj/projectile/bullet/rebarsyndie
name = "rebar"
icon_state = "rebar"
damage = 35
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)
embed_falloff_tile = -3
shrapnel_type = /obj/item/stack/rods
+7
View File
@@ -146,6 +146,13 @@
cost = 11
restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER)
/datum/uplink_item/role_restricted/rebarxbowsyndie
name = "Syndicate Rebar Crossbow"
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)
/datum/uplink_item/role_restricted/magillitis_serum
name = "Magillitis Serum Autoinjector"
desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. \
Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

+1
View File
@@ -2413,6 +2413,7 @@
#include "code\game\objects\items\granters\crafting\death_sandwich.dm"
#include "code\game\objects\items\granters\crafting\desserts.dm"
#include "code\game\objects\items\granters\crafting\pipegun.dm"
#include "code\game\objects\items\granters\crafting\rebarxbowsyndie.dm"
#include "code\game\objects\items\granters\crafting\regal_condor.dm"
#include "code\game\objects\items\granters\magic\_spell_granter.dm"
#include "code\game\objects\items\granters\magic\barnyard.dm"