diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index 0fc39ba5dec..0fdb98b23a4 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -25,8 +25,9 @@ name = "jagged iron rod" result = /obj/item/ammo_casing/rebar/syndie reqs = list( - /obj/item/stack/rods = 1, + /obj/item/stack/sheet/plasteel = 1, ) + result_amount = 2 tool_behaviors = list(TOOL_WIRECUTTER) time = 0.1 SECONDS category = CAT_WEAPON_AMMO diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index d0292a81f04..ce94e36099a 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -516,13 +516,41 @@ slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE|ITEM_SLOT_NECK resistance_flags = FLAMMABLE storage_type = /datum/storage/bag/rebar_quiver + actions_types = list(/datum/action/item_action/reload_rebar) custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.5) + +/obj/item/storage/bag/rebar_quiver/Initialize(mapload) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/item/storage/bag/rebar_quiver/ui_action_click(mob/user, actiontype) + if(istype(actiontype, /datum/action/item_action/reload_rebar)) + reload_held_rebar(user) + +/obj/item/storage/bag/rebar_quiver/proc/reload_held_rebar(mob/user) + if(!contents.len) + user.balloon_alert(user, "no bolts left!") + return + var/obj/held_item = user.get_active_held_item() + if(!held_item || !istype(held_item, /obj/item/gun/ballistic/rifle/rebarxbow)) + user.balloon_alert(user, "no held crossbow!") + return + var/obj/item/gun/ballistic/rifle/rebarxbow/held_crossbow = held_item + if(held_crossbow.magazine.contents.len >= held_crossbow.magazine.max_ammo) + user.balloon_alert(user, "no more room!") + return + if(!do_after(user, held_crossbow.reload_time, user,timed_action_flags = held_crossbow.doafter_flags)) + return + + var/obj/item/ammo_casing/rebar/ammo_to_load = contents[1] + held_crossbow.item_interaction(user, ammo_to_load) + /obj/item/storage/bag/rebar_quiver/syndicate icon_state = "syndie_quiver_0" worn_icon_state = "syndie_quiver_0" inhand_icon_state = "holyquiver" - desc = "A specialized quiver meant to hold any kind of bolts intended for use with the rebar crossbow. \ + desc = "A specialized quiver meant to hold any kind of bolts intended for use with the rebar crossbow. Allows moving while reloading.\ Clearly a better design than a cut up oxygen tank..." slot_flags = ITEM_SLOT_NECK w_class = WEIGHT_CLASS_NORMAL @@ -530,10 +558,6 @@ actions_types = list(/datum/action/item_action/reload_rebar) storage_type = /datum/storage/bag/rebar_quiver/syndicate -/obj/item/storage/bag/rebar_quiver/syndicate/Initialize(mapload) - . = ..() - update_appearance(UPDATE_OVERLAYS) - /obj/item/storage/bag/rebar_quiver/syndicate/PopulateContents() for(var/to_fill in 1 to 20) new /obj/item/ammo_casing/rebar/syndie(src) @@ -550,28 +574,6 @@ if(14 to 20) icon_state = "syndie_quiver_3" -/obj/item/storage/bag/rebar_quiver/syndicate/ui_action_click(mob/user, actiontype) - if(istype(actiontype, /datum/action/item_action/reload_rebar)) - reload_held_rebar(user) - -/obj/item/storage/bag/rebar_quiver/syndicate/proc/reload_held_rebar(mob/user) - if(!contents.len) - user.balloon_alert(user, "no bolts left!") - return - var/obj/held_item = user.get_active_held_item() - if(!held_item || !istype(held_item, /obj/item/gun/ballistic/rifle/rebarxbow)) - user.balloon_alert(user, "no held crossbow!") - return - var/obj/item/gun/ballistic/rifle/rebarxbow/held_crossbow = held_item - if(held_crossbow.magazine.contents.len >= held_crossbow.magazine.max_ammo) - user.balloon_alert(user, "no more room!") - return - if(!do_after(user, 1.2 SECONDS, user)) - return - - var/obj/item/ammo_casing/rebar/ammo_to_load = contents[1] - held_crossbow.item_interaction(user, ammo_to_load) - /obj/item/storage/bag/quiver name = "quiver" desc = "Holds arrows for your bow. Good, because while pocketing arrows is possible, it surely can't be pleasant." diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 991c89e4cfa..3800660851a 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -644,6 +644,7 @@ . = ..() allowed += list( /obj/item/fireaxe/metal_h2_axe, + /obj/item/gun/ballistic/rifle/rebarxbow, ) /datum/armor/armor_elder_atmosian diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 3656cb5718f..9943d24dc3e 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -288,6 +288,7 @@ /obj/item/construction/rcd, /obj/item/fireaxe/metal_h2_axe, /obj/item/storage/bag/construction, + /obj/item/gun/ballistic/rifle/rebarxbow, ) variants = list( "engineering" = list( @@ -355,6 +356,7 @@ /obj/item/fireaxe/metal_h2_axe, /obj/item/pipe_dispenser, /obj/item/t_scanner, + /obj/item/gun/ballistic/rifle/rebarxbow, ) variants = list( "atmospheric" = list( @@ -427,6 +429,7 @@ /obj/item/pipe_dispenser, /obj/item/storage/bag/construction, /obj/item/t_scanner, + /obj/item/gun/ballistic/rifle/rebarxbow, ) variants = list( "advanced" = list( diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 3c06aa13950..6df10adf61f 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -110,6 +110,8 @@ icon_state = "rod_jagged" base_icon_state = "rod_jagged" projectile_type = /obj/projectile/bullet/rebar/syndie + custom_materials = list(/datum/material/alloy/plasteel = SHEET_MATERIAL_AMOUNT) + /obj/item/ammo_casing/rebar/zaukerite name = "zaukerite sliver" diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 2853cecc9bf..e047c8978f8 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -45,20 +45,20 @@ max_ammo = 4 /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" + name = "rebar crossbow magazine" max_ammo = 2 caliber = CALIBER_REBAR ammo_type = /obj/item/ammo_casing/rebar -/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/forced + name = "stressed rebar crossbow magazine" max_ammo = 3 caliber = CALIBER_REBAR + ammo_type = /obj/item/ammo_casing/rebar + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie + max_ammo = 2 + caliber = CALIBER_REBAR ammo_type = /obj/item/ammo_casing/rebar/syndie diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 770992e4dff..0603c00a5c1 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -195,6 +195,7 @@ name = "heated rebar crossbow" desc = "A handcrafted crossbow. \ Aside from conventional sharpened iron rods, it can also fire specialty ammo made from the atmos crystalizer - zaukerite, metallic hydrogen, and healium rods all work. \ + A makeshift Quiver can be made with an oxygen tank, wire, and a welder.\ Very slow to reload - you can craft the crossbow with a crowbar to loosen the crossbar, but risk a misfire, or worse..." icon = 'icons/obj/weapons/guns/ballistic.dmi' icon_state = "rebarxbow" @@ -218,7 +219,9 @@ can_be_sawn_off = FALSE tac_reloads = FALSE custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3.1, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.2) - var/draw_time = 3 SECONDS + var/draw_time = 1.5 SECONDS + var/reload_time = 1.5 SECONDS + var/doafter_flags = NONE SET_BASE_PIXEL(0, 0) /obj/item/gun/ballistic/rifle/rebarxbow/rack(mob/user = null) @@ -232,7 +235,7 @@ update_appearance() /obj/item/gun/ballistic/rifle/rebarxbow/drop_bolt(mob/user = null) - if(!do_after(user, draw_time, target = src)) + if(!do_after(user, draw_time, target = src,timed_action_flags = src.doafter_flags)) return playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE) balloon_alert(user, "bowstring drawn") @@ -267,23 +270,27 @@ /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 draw this crossbow a bit faster. Hopefully, it was worth it." + desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could rack and reload the crossbow 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 + draw_time = 0.5 SECONDS + reload_time = 0.5 SECONDS + doafter_flags = IGNORE_USER_LOC_CHANGE + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/forced 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. Compatible with all known crossbow ammunition." + auto reloads from backpack quiver when racking." icon_state = "rebarxbowsyndie" inhand_icon_state = "rebarxbowsyndie" worn_icon_state = "rebarxbowsyndie" w_class = WEIGHT_CLASS_NORMAL initial_caliber = CALIBER_REBAR - draw_time = 1 + draw_time = 0.5 SECONDS + reload_time = 1.2 SECONDS + doafter_flags = IGNORE_USER_LOC_CHANGE accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie /obj/item/gun/ballistic/rifle/rebarxbow/syndie/Initialize(mapload) diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 85c2ef8e2a4..8b4ca1b2103 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -66,7 +66,7 @@ /obj/projectile/bullet/rebar name = "rebar" icon_state = "rebar" - damage = 30 + damage = 40 speed = 2.5 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 @@ -92,9 +92,9 @@ /obj/projectile/bullet/rebar/syndie name = "rebar" icon_state = "rebar" - damage = 45 + damage = 50 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. + armour_penetration = 35 //A bit better versus armor. Gets past anti laser armor or a sec vest, but doesnt get past proper bulletproof armor. wound_bonus = 10 exposed_wound_bonus = 20 embed_falloff_tile = -3 @@ -109,7 +109,7 @@ pain_stam_pct = 0.4 pain_mult = 3 jostle_pain_mult = 2 - rip_time = 1.4 SECONDS + rip_time = 2 SECONDS /obj/projectile/bullet/rebar/zaukerite name = "zaukerite shard" @@ -139,11 +139,11 @@ /obj/projectile/bullet/rebar/hydrogen name = "metallic hydrogen bolt" icon_state = "rebar_hydrogen" - damage = 35 - speed = 1.6 + damage = 40 //if someone gets this they deserve to twotap with it, metal H2 is that rough to make. + speed = 3 projectile_piercing = PASSMOB|PASSVEHICLE projectile_phasing = ~(PASSMOB|PASSVEHICLE) - max_pierces = 3 + max_pierces = 10 phasing_ignore_direct_target = TRUE dismemberment = 0 //goes through clean. damage_type = BRUTE diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index 8f00aa8b285..8ba4ae0b629 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -158,7 +158,7 @@ /datum/uplink_item/role_restricted/rebarxbowsyndie name = "Syndicate Rebar Crossbow" - desc = "A much more professional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included." + desc = "A much more professional version of the engineer's bootleg rebar crossbow. 6 shot mag, quicker loading, and better ammo. Owners manual included." item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie cost = 12 restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN)