Files
Bubberstation/code/modules/projectiles/guns/ballistic/automatic.dm
Cartographer-D 4a7120e320 Makes the rest of large guns bulky (sans traitor objectives and a few others) (#56132)
## About The Pull Request

What it says on the tin.
Practically everything but pistols, SMGs, and traitor weapons can no longer be stashed into bags.

I had considered making some large guns that traitors can order (like the blast cannon) also bulky, but concealment is important for some of those things.
However, the bulldog shotgun and sniper rifle have been made bulky, because they're shotguns and sniper rifles!

Traitor objectives are still normal size and can fit in backpacks.

## Why It's Good For The Game

Makes previous changes to weapons and thus balance consistent across our full list of guns. Players can clearly understand what can fit in the bag based on the size of the weapon.
2021-01-15 21:40:39 -05:00

392 lines
12 KiB
Plaintext

/obj/item/gun/ballistic/automatic
w_class = WEIGHT_CLASS_NORMAL
can_suppress = TRUE
burst_size = 3
fire_delay = 2
actions_types = list(/datum/action/item_action/toggle_firemode)
semi_auto = TRUE
fire_sound = 'sound/weapons/gun/smg/shot.ogg'
fire_sound_volume = 90
vary_fire_sound = FALSE
rack_sound = 'sound/weapons/gun/smg/smgrack.ogg'
suppressed_sound = 'sound/weapons/gun/smg/shot_suppressed.ogg'
var/select = 1 ///fire selector position. 1 = semi, 2 = burst. anything past that can vary between guns.
var/selector_switch_icon = FALSE ///if it has an icon for a selector switch indicating current firemode.
/obj/item/gun/ballistic/automatic/proto
name = "\improper Nanotrasen Saber SMG"
desc = "A prototype three-round burst 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors."
icon_state = "saber"
selector_switch_icon = TRUE
mag_display = TRUE
empty_indicator = TRUE
mag_type = /obj/item/ammo_box/magazine/smgm9mm
pin = null
bolt_type = BOLT_TYPE_LOCKING
show_bolt_icon = FALSE
/obj/item/gun/ballistic/automatic/proto/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/automatic/update_overlays()
. = ..()
if(!selector_switch_icon)
return
if(!select)
. += "[initial(icon_state)]_semi"
if(select == 1)
. += "[initial(icon_state)]_burst"
/obj/item/gun/ballistic/automatic/ui_action_click(mob/user, actiontype)
if(istype(actiontype, /datum/action/item_action/toggle_firemode))
burst_select()
else
..()
/obj/item/gun/ballistic/automatic/proc/burst_select()
var/mob/living/carbon/human/user = usr
select = !select
if(!select)
burst_size = 1
fire_delay = 0
to_chat(user, "<span class='notice'>You switch to semi-automatic.</span>")
else
burst_size = initial(burst_size)
fire_delay = initial(fire_delay)
to_chat(user, "<span class='notice'>You switch to [burst_size]-round burst.</span>")
playsound(user, 'sound/weapons/empty.ogg', 100, TRUE)
update_icon()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/gun/ballistic/automatic/c20r
name = "\improper C-20r SMG"
desc = "A bullpup three-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
icon_state = "c20r"
inhand_icon_state = "c20r"
selector_switch_icon = TRUE
mag_type = /obj/item/ammo_box/magazine/smgm45
fire_delay = 2
burst_size = 3
pin = /obj/item/firing_pin/implant/pindicate
can_bayonet = TRUE
knife_x_offset = 26
knife_y_offset = 12
mag_display = TRUE
mag_display_ammo = TRUE
empty_indicator = TRUE
/obj/item/gun/ballistic/automatic/c20r/update_overlays()
. = ..()
if(!chambered && empty_indicator) //this is duplicated due to a layering issue with the select fire icon.
. += "[icon_state]_empty"
/obj/item/gun/ballistic/automatic/c20r/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/automatic/c20r/Initialize()
. = ..()
update_icon()
/obj/item/gun/ballistic/automatic/wt550
name = "security auto rifle"
desc = "An outdated personal defence weapon. Uses 4.6x30mm rounds and is designated the WT-550 Automatic Rifle."
icon_state = "wt550"
w_class = WEIGHT_CLASS_BULKY
inhand_icon_state = "arg"
mag_type = /obj/item/ammo_box/magazine/wt550m9
fire_delay = 2
can_suppress = FALSE
burst_size = 0
actions_types = list()
can_bayonet = TRUE
knife_x_offset = 25
knife_y_offset = 12
mag_display = TRUE
mag_display_ammo = TRUE
empty_indicator = TRUE
/obj/item/gun/ballistic/automatic/plastikov
name = "\improper PP-95 SMG"
desc = "An ancient 9x19mm submachine gun pattern updated and simplified to lower costs, though perhaps simplified too much."
icon_state = "plastikov"
inhand_icon_state = "plastikov"
mag_type = /obj/item/ammo_box/magazine/plastikov9mm
burst_size = 5
spread = 25
can_suppress = FALSE
actions_types = list()
mag_display = TRUE
empty_indicator = TRUE
fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg'
/obj/item/gun/ballistic/automatic/mini_uzi
name = "\improper Type U3 Uzi"
desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds."
icon_state = "miniuzi"
mag_type = /obj/item/ammo_box/magazine/uzim9mm
burst_size = 2
bolt_type = BOLT_TYPE_OPEN
show_bolt_icon = FALSE
mag_display = TRUE
rack_sound = 'sound/weapons/gun/pistol/slide_lock.ogg'
/obj/item/gun/ballistic/automatic/m90
name = "\improper M-90gl Carbine"
desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off."
icon_state = "m90"
w_class = WEIGHT_CLASS_BULKY
inhand_icon_state = "m90"
selector_switch_icon = TRUE
mag_type = /obj/item/ammo_box/magazine/m556
can_suppress = FALSE
var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
burst_size = 3
fire_delay = 2
spread = 5
pin = /obj/item/firing_pin/implant/pindicate
mag_display = TRUE
empty_indicator = TRUE
fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg'
/obj/item/gun/ballistic/automatic/m90/Initialize()
. = ..()
underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src)
update_icon()
/obj/item/gun/ballistic/automatic/m90/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/automatic/m90/unrestricted/Initialize()
. = ..()
underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src)
update_icon()
/obj/item/gun/ballistic/automatic/m90/afterattack(atom/target, mob/living/user, flag, params)
if(select == 2)
underbarrel.afterattack(target, user, flag, params)
else
return ..()
/obj/item/gun/ballistic/automatic/m90/attackby(obj/item/A, mob/user, params)
if(istype(A, /obj/item/ammo_casing))
if(istype(A, underbarrel.magazine.ammo_type))
underbarrel.attack_self(user)
underbarrel.attackby(A, user, params)
else
..()
/obj/item/gun/ballistic/automatic/m90/update_overlays()
. = ..()
switch(select)
if(0)
. += "[initial(icon_state)]_semi"
if(1)
. += "[initial(icon_state)]_burst"
if(2)
. += "[initial(icon_state)]_gren"
/obj/item/gun/ballistic/automatic/m90/burst_select()
var/mob/living/carbon/human/user = usr
switch(select)
if(0)
select = 1
burst_size = initial(burst_size)
fire_delay = initial(fire_delay)
to_chat(user, "<span class='notice'>You switch to [burst_size]-rnd burst.</span>")
if(1)
select = 2
to_chat(user, "<span class='notice'>You switch to grenades.</span>")
if(2)
select = 0
burst_size = 1
fire_delay = 0
to_chat(user, "<span class='notice'>You switch to semi-auto.</span>")
playsound(user, 'sound/weapons/empty.ogg', 100, TRUE)
update_icon()
return
/obj/item/gun/ballistic/automatic/tommygun
name = "\improper Thompson SMG"
desc = "Based on the classic 'Chicago Typewriter'."
icon_state = "tommygun"
inhand_icon_state = "shotgun"
selector_switch_icon = TRUE
w_class = WEIGHT_CLASS_BULKY
slot_flags = 0
mag_type = /obj/item/ammo_box/magazine/tommygunm45
can_suppress = FALSE
burst_size = 4
fire_delay = 1
bolt_type = BOLT_TYPE_OPEN
empty_indicator = TRUE
show_bolt_icon = FALSE
/obj/item/gun/ballistic/automatic/ar
name = "\improper NT-ARG 'Boarder'"
desc = "A robust assault rifle used by Nanotrasen fighting forces."
icon_state = "arg"
inhand_icon_state = "arg"
slot_flags = 0
mag_type = /obj/item/ammo_box/magazine/m556
can_suppress = FALSE
burst_size = 3
fire_delay = 1
// L6 SAW //
/obj/item/gun/ballistic/automatic/l6_saw
name = "\improper L6 SAW"
desc = "A heavily modified 7.12x82mm light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation."
icon_state = "l6"
inhand_icon_state = "l6"
w_class = WEIGHT_CLASS_HUGE
slot_flags = 0
mag_type = /obj/item/ammo_box/magazine/mm712x82
weapon_weight = WEAPON_HEAVY
var/cover_open = FALSE
can_suppress = FALSE
burst_size = 3
fire_delay = 1
spread = 7
pin = /obj/item/firing_pin/implant/pindicate
bolt_type = BOLT_TYPE_OPEN
show_bolt_icon = FALSE
mag_display = TRUE
mag_display_ammo = TRUE
tac_reloads = FALSE
fire_sound = 'sound/weapons/gun/l6/shot.ogg'
rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg'
suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
/obj/item/gun/ballistic/automatic/l6_saw/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/automatic/l6_saw/ComponentInitialize()
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
/obj/item/gun/ballistic/automatic/l6_saw/examine(mob/user)
. = ..()
. += "<b>alt + click</b> to [cover_open ? "close" : "open"] the dust cover."
if(cover_open && magazine)
. += "<span class='notice'>It seems like you could use an <b>empty hand</b> to remove the magazine.</span>"
/obj/item/gun/ballistic/automatic/l6_saw/AltClick(mob/user)
if(!user.canUseTopic(src))
return
cover_open = !cover_open
to_chat(user, "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>")
playsound(src, 'sound/weapons/gun/l6/l6_door.ogg', 60, TRUE)
update_icon()
/obj/item/gun/ballistic/automatic/l6_saw/update_icon_state()
inhand_icon_state = "[initial(icon_state)][cover_open ? "open" : "closed"][magazine ? "mag":"nomag"]"
/obj/item/gun/ballistic/automatic/l6_saw/update_overlays()
. = ..()
. += "l6_door_[cover_open ? "open" : "closed"]"
/obj/item/gun/ballistic/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)
if(cover_open)
to_chat(user, "<span class='warning'>[src]'s cover is open! Close it before firing!</span>")
return
else
. = ..()
update_icon()
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user)
if (loc != user)
..()
return
if (!cover_open)
to_chat(user, "<span class='warning'>[src]'s cover is closed! Open it before trying to remove the magazine!</span>")
return
..()
/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params)
if(!cover_open && istype(A, mag_type))
to_chat(user, "<span class='warning'>[src]'s dust cover prevents a magazine from being fit.</span>")
return
..()
// SNIPER //
/obj/item/gun/ballistic/automatic/sniper_rifle
name = "sniper rifle"
desc = "A long ranged weapon that does significant damage. No, you can't quickscope."
icon_state = "sniper"
w_class = WEIGHT_CLASS_BULKY
inhand_icon_state = "sniper"
worn_icon_state = null
fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
fire_sound_volume = 90
vary_fire_sound = FALSE
load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg'
rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
recoil = 2
weapon_weight = WEAPON_HEAVY
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
fire_delay = 40
burst_size = 1
w_class = WEIGHT_CLASS_NORMAL
zoomable = TRUE
zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you.
zoom_out_amt = 5
slot_flags = ITEM_SLOT_BACK
actions_types = list()
mag_display = TRUE
/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate
name = "syndicate sniper rifle"
desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work."
can_suppress = TRUE
can_unsuppress = TRUE
pin = /obj/item/firing_pin/implant/pindicate
// Old Semi-Auto Rifle //
/obj/item/gun/ballistic/automatic/surplus
name = "Surplus Rifle"
desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing."
icon_state = "surplus"
inhand_icon_state = "moistnugget"
worn_icon_state = null
weapon_weight = WEAPON_HEAVY
mag_type = /obj/item/ammo_box/magazine/m10mm/rifle
fire_delay = 30
burst_size = 1
can_unsuppress = TRUE
can_suppress = TRUE
w_class = WEIGHT_CLASS_HUGE
slot_flags = ITEM_SLOT_BACK
actions_types = list()
mag_display = TRUE
// Laser rifle (rechargeable magazine) //
/obj/item/gun/ballistic/automatic/laser
name = "laser rifle"
desc = "Though sometimes mocked for the relatively weak firepower of their energy weapons, the logistic miracle of rechargeable ammunition has given Nanotrasen a decisive edge over many a foe."
icon_state = "oldrifle"
w_class = WEIGHT_CLASS_BULKY
inhand_icon_state = "arg"
mag_type = /obj/item/ammo_box/magazine/recharge
mag_display_ammo = TRUE
fire_delay = 2
can_suppress = FALSE
burst_size = 0
actions_types = list()
fire_sound = 'sound/weapons/laser.ogg'
casing_ejector = FALSE