Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Brings automatic weaponry to the marine and surv arsenal #4003

Merged
merged 37 commits into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4db773c
automatic guns real????
johndoe2013 Jul 26, 2023
7ec7eb7
bugfix
johndoe2013 Jul 26, 2023
9e9fc38
nsg is apparently not FA
johndoe2013 Jul 26, 2023
d4a5545
runtime fix
johndoe2013 Jul 26, 2023
9e241b9
de-shittifies the sniper and dualtube
johndoe2013 Jul 26, 2023
083e854
runtime removal
johndoe2013 Jul 26, 2023
d338bf7
firemode fix
johndoe2013 Jul 26, 2023
c208faf
fix another long-standing bug
johndoe2013 Jul 26, 2023
35be4c3
nsg is apparently FA
johndoe2013 Jul 26, 2023
e11e2a7
burst fix
johndoe2013 Jul 27, 2023
ccc6fff
ammo economy rework
johndoe2013 Jul 30, 2023
6edc71f
enables HPR ammo restocking
johndoe2013 Aug 1, 2023
0c5e40e
forgot a change
johndoe2013 Aug 1, 2023
acc9ccc
mar50
johndoe2013 Aug 1, 2023
c30502a
Revert "ammo economy rework"
Zonespace27 Aug 5, 2023
350704e
only SMGs have autofire for now, fire rate increased to 100% of burst
Zonespace27 Aug 5, 2023
df8597a
m41a extendo back
Zonespace27 Aug 5, 2023
af9529a
Merge branch 'master' into cm-autoguns-2023
Zonespace27 Aug 5, 2023
9ddf74d
kiling m39 extended
Zonespace27 Aug 5, 2023
09f6335
Merge branch 'cm-autoguns-2023' of https://github.com/Zonespace27/cms…
Zonespace27 Aug 5, 2023
b127bb0
shh
Zonespace27 Aug 5, 2023
88acf0f
SMGs have improved FA spread
Zonespace27 Aug 9, 2023
1fd1eaf
HPR now auto
Zonespace27 Aug 11, 2023
1260df2
Souto Slinger Supremo Full Auto
Ben10083 Aug 13, 2023
d68422c
Souta Changes
Ben10083 Aug 13, 2023
3ae1aa2
Revert "kiling m39 extended"
Zonespace27 Aug 13, 2023
ff42c4f
automatic returns, no 20% fire reduction, tightening of spread by 2.5…
Zonespace27 Aug 13, 2023
c9b53ae
6 -> 6.5
Zonespace27 Aug 13, 2023
14a5dc0
Merge pull request #1 from Ben10083/cm-autoguns-2023
Zonespace27 Aug 13, 2023
7e674dd
tiny fixes
Zonespace27 Aug 13, 2023
d1f80d1
Merge branch 'cm-autoguns-2023' of https://github.com/Zonespace27/cms…
Zonespace27 Aug 13, 2023
9d9f7a3
UNDO LATER - DEBUG
Zonespace27 Aug 13, 2023
0c2ad13
aw goddamn it
Zonespace27 Aug 13, 2023
054ef53
dumbness fix
Zonespace27 Aug 13, 2023
1f52d4b
buffs the autoflamer
Zonespace27 Aug 16, 2023
db622ab
fixes dumb shitcode bug
Zonespace27 Aug 17, 2023
0db4e71
zonennote
Zonespace27 Aug 23, 2023
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/__DEFINES/conflict.dm
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
#define GUN_ANTIQUE (1<<13)
/// Whether the gun has been fired by its current user (reset upon `dropped()`)
#define GUN_RECOIL_BUILDUP (1<<14)
/// support weapon, bipod will grant IFF
/// support weapon, bipod will grant autofire
#define GUN_SUPPORT_PLATFORM (1<<15)
/// No gun description, only base desc
#define GUN_NO_DESCRIPTION (1<<16)
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/dcs/signals/atom/signals_item.dm
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,6 @@
#define COMSIG_GUN_AUTOFIREDELAY_MODIFIED "gun_autofiredelay_modified"
#define COMSIG_GUN_BURST_SHOTS_TO_FIRE_MODIFIED "gun_burst_shots_to_fire_modified"
#define COMSIG_GUN_BURST_SHOT_DELAY_MODIFIED "gun_burst_shot_delay_modified"

/// from /obj/item/weapon/gun/proc/recalculate_attachment_bonuses() : ()
#define COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES "gun_recalculate_attachment_bonuses"
7 changes: 5 additions & 2 deletions code/datums/components/autofire/autofire.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
var/have_to_reset_at_burst_end = FALSE
///If we are in a burst
var/bursting = FALSE
/// The multiplier for how much slower the parent should fire in automatic mode. 1 is normal, 1.2 is 20% slower, 2 is 100% slower, etc.
var/automatic_delay_mult = 1
///Callback to set bursting mode on the parent
var/datum/callback/callback_bursting
///Callback to ask the parent to reset its firing vars
Expand All @@ -26,7 +28,7 @@
///Callback to set parent's fa_firing
var/datum/callback/callback_set_firing

/datum/component/automatedfire/autofire/Initialize(auto_fire_shot_delay = 0.3 SECONDS, burstfire_shot_delay, burst_shots_to_fire = 3, fire_mode = GUN_FIREMODE_SEMIAUTO, datum/callback/callback_bursting, datum/callback/callback_reset_fire, datum/callback/callback_fire, datum/callback/callback_display_ammo, datum/callback/callback_set_firing)
/datum/component/automatedfire/autofire/Initialize(auto_fire_shot_delay = 0.3 SECONDS, burstfire_shot_delay, burst_shots_to_fire = 3, fire_mode = GUN_FIREMODE_SEMIAUTO, automatic_delay_mult = 1, datum/callback/callback_bursting, datum/callback/callback_reset_fire, datum/callback/callback_fire, datum/callback/callback_display_ammo, datum/callback/callback_set_firing)
. = ..()

RegisterSignal(parent, COMSIG_GUN_FIRE_MODE_TOGGLE, PROC_REF(modify_fire_mode))
Expand All @@ -40,6 +42,7 @@
src.burstfire_shot_delay = burstfire_shot_delay
src.burst_shots_to_fire = burst_shots_to_fire
src.fire_mode = fire_mode
src.automatic_delay_mult = automatic_delay_mult
src.callback_bursting = callback_bursting
src.callback_reset_fire = callback_reset_fire
src.callback_fire = callback_fire
Expand Down Expand Up @@ -131,7 +134,7 @@
next_fire = world.time + burstfire_shot_delay
if(GUN_FIREMODE_AUTOMATIC)
callback_set_firing.Invoke(TRUE)
next_fire = world.time + auto_fire_shot_delay
next_fire = world.time + (auto_fire_shot_delay * automatic_delay_mult)
if(GUN_FIREMODE_SEMIAUTO)
return
schedule_shot()
15 changes: 9 additions & 6 deletions code/modules/projectiles/gun.dm
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,8 @@
VAR_PROTECTED/start_semiauto = TRUE
/// If this gun should spawn with automatic fire. Protected due to it never needing to be edited.
VAR_PROTECTED/start_automatic = FALSE
/// The multiplier for how much slower this should fire in automatic mode. 1 is normal, 1.2 is 20% slower, 2 is 100% slower, etc. Protected due to it never needing to be edited.
VAR_PROTECTED/autofire_slow_mult = 1.2


/**
Expand Down Expand Up @@ -274,7 +276,7 @@
AddElement(/datum/element/drop_retrieval/gun, auto_retrieval_slot)
update_icon() //for things like magazine overlays
gun_firemode = gun_firemode_list[1] || GUN_FIREMODE_SEMIAUTO
AddComponent(/datum/component/automatedfire/autofire, fire_delay, burst_delay, burst_amount, gun_firemode, CALLBACK(src, PROC_REF(set_bursting)), CALLBACK(src, PROC_REF(reset_fire)), CALLBACK(src, PROC_REF(fire_wrapper)), CALLBACK(src, PROC_REF(display_ammo)), CALLBACK(src, PROC_REF(set_auto_firing))) //This should go after handle_starting_attachment() and setup_firemodes() to get the proper values set.
AddComponent(/datum/component/automatedfire/autofire, fire_delay, burst_delay, burst_amount, gun_firemode, autofire_slow_mult, CALLBACK(src, PROC_REF(set_bursting)), CALLBACK(src, PROC_REF(reset_fire)), CALLBACK(src, PROC_REF(fire_wrapper)), CALLBACK(src, PROC_REF(display_ammo)), CALLBACK(src, PROC_REF(set_auto_firing))) //This should go after handle_starting_attachment() and setup_firemodes() to get the proper values set.

/obj/item/weapon/gun/proc/set_gun_attachment_offsets()
attachable_offset = null
Expand Down Expand Up @@ -314,7 +316,7 @@
accuracy_mult_unwielded = BASE_ACCURACY_MULT
scatter = SCATTER_AMOUNT_TIER_6
burst_scatter_mult = SCATTER_AMOUNT_TIER_7
set_burst_amount(BURST_AMOUNT_TIER_5)
set_burst_amount(BURST_AMOUNT_TIER_1)
scatter_unwielded = SCATTER_AMOUNT_TIER_6
damage_mult = BASE_BULLET_DAMAGE_MULT
damage_falloff_mult = DAMAGE_FALLOFF_TIER_10
Expand Down Expand Up @@ -425,6 +427,10 @@
else if(M.r_hand == src)
M.update_inv_r_hand()

setup_firemodes()

SEND_SIGNAL(src, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES)

/obj/item/weapon/gun/proc/handle_random_attachments()
var/attachmentchoice

Expand Down Expand Up @@ -1202,8 +1208,7 @@ and you're good to go.

shots_fired++

else // This happens in very rare circumstances when you're moving a lot while burst firing, so I'm going to toss it up to guns jamming.
clear_jam(projectile_to_fire,user)
else
return TRUE

//>>POST PROCESSING AND CLEANUP BEGIN HERE.<<
Expand Down Expand Up @@ -1765,13 +1770,11 @@ not all weapons use normal magazines etc. load_into_chamber() itself is designed
/obj/item/weapon/gun/proc/set_burst_amount(value, mob/user)
burst_amount = value
SEND_SIGNAL(src, COMSIG_GUN_BURST_SHOTS_TO_FIRE_MODIFIED, burst_amount)
setup_firemodes()

/// adder for burst_amount
/obj/item/weapon/gun/proc/modify_burst_amount(value, mob/user)
burst_amount += value
SEND_SIGNAL(src, COMSIG_GUN_BURST_SHOTS_TO_FIRE_MODIFIED, burst_amount)
setup_firemodes()

/// Adder for burst_delay
/obj/item/weapon/gun/proc/modify_burst_delay(value, mob/user)
Expand Down
28 changes: 26 additions & 2 deletions code/modules/projectiles/gun_attachables.dm
Original file line number Diff line number Diff line change
Expand Up @@ -851,6 +851,28 @@ Defined in conflicts.dm of the #defines folder.
delay_scoped_nerf = FIRE_DELAY_TIER_9 //to compensate initial debuff. We want "high_fire_delay"
damage_falloff_scoped_buff = -0.4 //has to be negative

/obj/item/attachable/scope/Attach(obj/item/weapon/gun/gun)
. = ..()
RegisterSignal(gun, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES, PROC_REF(handle_attachment_recalc))

/obj/item/attachable/scope/Detach(mob/user, obj/item/weapon/gun/detaching_gub)
. = ..()
UnregisterSignal(detaching_gub, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES)


/// Due to the bipod's interesting way of handling stat modifications, this is necessary to prevent exploits.
/obj/item/attachable/scope/proc/handle_attachment_recalc(obj/item/weapon/gun/source)
SIGNAL_HANDLER

if(!source.zoom)
return

if(using_scope)
source.accuracy_mult += accuracy_scoped_buff
source.modify_fire_delay(delay_scoped_nerf)
source.damage_falloff_mult += damage_falloff_scoped_buff


/obj/item/attachable/scope/proc/apply_scoped_buff(obj/item/weapon/gun/G, mob/living/carbon/user)
if(G.zoom)
G.accuracy_mult += accuracy_scoped_buff
Expand Down Expand Up @@ -2651,13 +2673,14 @@ Defined in conflicts.dm of the #defines folder.
burst_scatter_mod = 0
delay_mod = FIRE_DELAY_TIER_10
G.recalculate_attachment_bonuses()
G.stop_fire()
var/mob/living/user
if(isliving(G.loc))
user = G.loc
UnregisterSignal(user, COMSIG_MOB_MOVE_OR_LOOK)

if(G.flags_gun_features & GUN_SUPPORT_PLATFORM)
G.remove_bullet_trait("iff")
G.remove_firemode(GUN_FIREMODE_AUTOMATIC)

if(!QDELETED(G))
playsound(user,'sound/items/m56dauto_rotate.ogg', 55, 1)
Expand Down Expand Up @@ -2688,12 +2711,13 @@ Defined in conflicts.dm of the #defines folder.
else
delay_mod = -FIRE_DELAY_TIER_10
G.recalculate_attachment_bonuses()
G.stop_fire()

initial_mob_dir = user.dir
RegisterSignal(user, COMSIG_MOB_MOVE_OR_LOOK, PROC_REF(handle_mob_move_or_look))

if(G.flags_gun_features & GUN_SUPPORT_PLATFORM)
G.add_bullet_trait(BULLET_TRAIT_ENTRY_ID("iff", /datum/element/bullet_trait_iff))
G.add_firemode(GUN_FIREMODE_AUTOMATIC)

else
to_chat(user, SPAN_NOTICE("You retract [src]."))
Expand Down
9 changes: 9 additions & 0 deletions code/modules/projectiles/gun_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -700,6 +700,9 @@ DEFINES in setup.dm, referenced here.
CRASH("add_firemode called with a resulting gun_firemode_list length of [length(gun_firemode_list)].")

/obj/item/weapon/gun/proc/remove_firemode(removed_firemode, mob/user)
if(!(removed_firemode in gun_firemode_list))
return

if(!length(gun_firemode_list) || (length(gun_firemode_list) == 1))
CRASH("remove_firemode called with gun_firemode_list length [length(gun_firemode_list)].")

Expand All @@ -710,7 +713,9 @@ DEFINES in setup.dm, referenced here.
do_toggle_firemode(user, gun_firemode)

/obj/item/weapon/gun/proc/setup_firemodes()
var/old_firemode = gun_firemode
gun_firemode_list.len = 0

if(start_semiauto)
gun_firemode_list |= GUN_FIREMODE_SEMIAUTO

Expand All @@ -722,6 +727,10 @@ DEFINES in setup.dm, referenced here.

if(!length(gun_firemode_list))
CRASH("[src] called setup_firemodes() with an empty gun_firemode_list")

else if(old_firemode in gun_firemode_list)
gun_firemode = old_firemode

else
gun_firemode = gun_firemode_list[1]

Expand Down
2 changes: 2 additions & 0 deletions code/modules/projectiles/guns/energy.dm
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@
fire_sound = 'sound/weapons/Laser4.ogg'
has_charge_meter = FALSE
charge_icon = "+laz_uzi_empty"
start_automatic = TRUE

/obj/item/weapon/gun/energy/laz_uzi/set_gun_config_values()
..()
Expand All @@ -194,6 +195,7 @@
scatter_unwielded = SCATTER_AMOUNT_TIER_6
damage_mult = BASE_BULLET_DAMAGE_MULT
recoil_unwielded = RECOIL_AMOUNT_TIER_5
fa_scatter_peak = SCATTER_AMOUNT_TIER_8

//############################ Taser ##################
// Lots of bits for it so splitting off an area
Expand Down
1 change: 1 addition & 0 deletions code/modules/projectiles/guns/flamer/flamer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@
desc = "A prototyped model of the M240-T incinerator unit, it was discontinued after its automatic mode was deemed too expensive to deploy in the field."
start_semiauto = FALSE
start_automatic = TRUE
autofire_slow_mult = 1

/obj/item/weapon/gun/flamer/M240T/auto/set_gun_config_values()
. = ..()
Expand Down
2 changes: 2 additions & 0 deletions code/modules/projectiles/guns/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
gun_category = GUN_CATEGORY_HEAVY
start_semiauto = FALSE
start_automatic = TRUE
autofire_slow_mult = 1

/obj/item/weapon/gun/minigun/Initialize(mapload, spawn_empty)
. = ..()
Expand Down Expand Up @@ -86,6 +87,7 @@
)
start_semiauto = FALSE
start_automatic = TRUE
autofire_slow_mult = 1
var/cover_open = FALSE //if the gun's feed-cover is open or not.


Expand Down
1 change: 1 addition & 0 deletions code/modules/projectiles/guns/pistols.dm
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,7 @@ It is a modified Beretta 93R, and can fire three-round burst or single fire. Whe
)
start_semiauto = FALSE
start_automatic = TRUE
autofire_slow_mult = 1

/obj/item/weapon/gun/pistol/skorpion/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 18,"rail_x" = 16, "rail_y" = 21, "under_x" = 23, "under_y" = 15, "stock_x" = 23, "stock_y" = 15)
Expand Down
14 changes: 12 additions & 2 deletions code/modules/projectiles/guns/rifles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER
starting_attachment_types = list(/obj/item/attachable/attached_gun/grenade, /obj/item/attachable/stock/rifle/collapsible)
map_specific_decoration = TRUE
start_automatic = TRUE

/obj/item/weapon/gun/rifle/m41a/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 23, "under_x" = 24, "under_y" = 13, "stock_x" = 24, "stock_y" = 13)
Expand All @@ -88,7 +89,6 @@
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4 + 2*HIT_ACCURACY_MULT_TIER_1
accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_7
scatter = SCATTER_AMOUNT_TIER_8
//fa_scatter_peak = FULL_AUTO_SCATTER_PEAK_TIER_8 //Zonenote
burst_scatter_mult = SCATTER_AMOUNT_TIER_10
scatter_unwielded = SCATTER_AMOUNT_TIER_2
damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_2
Expand Down Expand Up @@ -150,6 +150,8 @@
/obj/item/attachable/attached_gun/flamer/advanced,
)
start_semiauto = FALSE
start_automatic = TRUE
autofire_slow_mult = 1.1

/obj/item/weapon/gun/rifle/nsg23/Initialize(mapload, spawn_empty)
. = ..()
Expand All @@ -171,6 +173,7 @@
damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_8
recoil_unwielded = RECOIL_AMOUNT_TIER_2
damage_falloff_mult = 0
fa_max_scatter = SCATTER_AMOUNT_TIER_5

/obj/item/weapon/gun/rifle/nsg23/handle_starting_attachment()
..()
Expand Down Expand Up @@ -383,6 +386,7 @@

flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER
starting_attachment_types = list(/obj/item/attachable/attached_gun/grenade/mk1, /obj/item/attachable/stock/rifle/collapsible)
start_automatic = TRUE

/obj/item/weapon/gun/rifle/m41aMK1/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 23, "under_x" = 23, "under_y" = 13, "stock_x" = 24, "stock_y" = 14)
Expand Down Expand Up @@ -485,6 +489,7 @@
indestructible = TRUE
auto_retrieval_slot = WEAR_J_STORE
map_specific_decoration = TRUE
autofire_slow_mult = 1

var/mob/living/carbon/human/linked_human
var/is_locked = TRUE
Expand Down Expand Up @@ -528,6 +533,7 @@
scatter_unwielded = SCATTER_AMOUNT_TIER_2
damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_3
recoil_unwielded = RECOIL_AMOUNT_TIER_2
fa_max_scatter = SCATTER_AMOUNT_TIER_7

/obj/item/weapon/gun/rifle/m46c/able_to_fire(mob/user)
. = ..()
Expand Down Expand Up @@ -633,9 +639,11 @@
if(iff_enabled)
modify_fire_delay(FIRE_DELAY_TIER_10)
remove_firemode(GUN_FIREMODE_BURSTFIRE)
remove_firemode(GUN_FIREMODE_AUTOMATIC)

else
add_firemode(GUN_FIREMODE_BURSTFIRE)
add_firemode(GUN_FIREMODE_AUTOMATIC)


/obj/item/weapon/gun/rifle/m46c/proc/name_after_co(mob/living/carbon/human/H)
Expand Down Expand Up @@ -719,6 +727,7 @@
)

flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK
start_automatic = TRUE



Expand Down Expand Up @@ -1232,7 +1241,7 @@
/obj/item/attachable/magnetic_harness,
)

flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY
flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SUPPORT_PLATFORM
gun_category = GUN_CATEGORY_HEAVY

/obj/item/weapon/gun/rifle/lmg/set_gun_attachment_offsets()
Expand Down Expand Up @@ -1297,6 +1306,7 @@

flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER
flags_equip_slot = SLOT_BACK
start_automatic = TRUE

/obj/item/weapon/gun/rifle/type71/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 18, "rail_y" = 23, "under_x" = 20, "under_y" = 13, "stock_x" = 24, "stock_y" = 13)
Expand Down
8 changes: 7 additions & 1 deletion code/modules/projectiles/guns/shotguns.dm
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ can cause issues with ammo types getting mixed up during the burst.
flags_gun_features = GUN_CAN_POINTBLANK|GUN_INTERNAL_MAG
auto_retrieval_slot = WEAR_J_STORE
start_automatic = TRUE
autofire_slow_mult = 1

/obj/item/weapon/gun/shotgun/combat/marsoc/Initialize(mapload, spawn_empty)
. = ..()
Expand Down Expand Up @@ -1220,7 +1221,12 @@ can cause issues with ammo types getting mixed up during the burst.
playsound(src, 'sound/machines/switch.ogg', 15, TRUE)
return TRUE

/obj/item/weapon/gun/shotgun/pump/dual_tube/set_bursting()
/obj/item/weapon/gun/shotgun/pump/dual_tube/verb/toggle_tube()
set category = "Weapons"
set name = "Toggle Shotgun Tube"
set desc = "Toggles which shotgun tube your gun loads from."
set src = usr.contents

var/obj/item/weapon/gun/shotgun/pump/dual_tube/shotgun = get_active_firearm(usr)
if(shotgun == src)
swap_tube(usr)
Expand Down
1 change: 1 addition & 0 deletions code/modules/projectiles/guns/smartgun.dm
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
auto_retrieval_slot = WEAR_J_STORE
start_semiauto = FALSE
start_automatic = TRUE
autofire_slow_mult = 1


/obj/item/weapon/gun/smartgun/Initialize(mapload, ...)
Expand Down
Loading