mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-10 00:27:04 +01:00
a39b5d352f
Continues fixing the tide of broken shit with my awful PR. This time around: Corrects a control message for the l6 saw on examine Reworks the way that open bolt guns work so that they actually work the way open bolt guns are supposed to. Loud bolt drop when you try to fire an empty magazine included. Fixes bulldog magazine overlays. Fixes an issue with tacloads not updating the removed magazine's icon state correctly. Fixes locking bolt not locking back on the last bullet fired but instead on the
348 lines
10 KiB
Plaintext
348 lines
10 KiB
Plaintext
/obj/item/gun/ballistic/automatic
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
var/select = 1
|
|
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/smgshot.ogg"
|
|
fire_sound_volume = 80
|
|
vary_fire_sound = FALSE
|
|
rack_sound = "sound/weapons/smgrack.ogg"
|
|
|
|
/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"
|
|
mag_type = /obj/item/ammo_box/magazine/smgm9mm
|
|
pin = null
|
|
bolt_type = BOLT_TYPE_LOCKING
|
|
mag_display = TRUE
|
|
tac_reloads = TRUE
|
|
|
|
/obj/item/gun/ballistic/automatic/proto/unrestricted
|
|
pin = /obj/item/firing_pin
|
|
|
|
/obj/item/gun/ballistic/automatic/update_icon()
|
|
..()
|
|
if(!select)
|
|
add_overlay("[initial(icon_state)]_semi")
|
|
if(select == 1)
|
|
add_overlay("[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]-rnd burst.</span>")
|
|
|
|
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
|
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 two-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
|
|
icon_state = "c20r"
|
|
item_state = "c20r"
|
|
mag_type = /obj/item/ammo_box/magazine/smgm45
|
|
fire_delay = 2
|
|
burst_size = 2
|
|
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
|
|
tac_reloads = TRUE
|
|
|
|
/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"
|
|
item_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/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
|
|
mag_display = TRUE
|
|
rack_sound = "sound/weapons/pistollock.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"
|
|
item_state = "m90"
|
|
mag_type = /obj/item/ammo_box/magazine/m556
|
|
fire_sound = 'sound/weapons/gunshot_smg.ogg'
|
|
can_suppress = FALSE
|
|
var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
|
|
burst_size = 3
|
|
fire_delay = 2
|
|
pin = /obj/item/firing_pin/implant/pindicate
|
|
mag_display = TRUE
|
|
empty_indicator = TRUE
|
|
|
|
/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()
|
|
underbarrel.attackby(A, user, params)
|
|
else
|
|
..()
|
|
|
|
/obj/item/gun/ballistic/automatic/m90/update_icon()
|
|
..()
|
|
switch(select)
|
|
if(0)
|
|
add_overlay("[initial(icon_state)]_semi")
|
|
if(1)
|
|
add_overlay("[initial(icon_state)]_burst")
|
|
if(2)
|
|
add_overlay("[initial(icon_state)]_gren")
|
|
return
|
|
|
|
/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, 1)
|
|
update_icon()
|
|
return
|
|
|
|
/obj/item/gun/ballistic/automatic/tommygun
|
|
name = "\improper Thompson SMG"
|
|
desc = "Based on the classic 'Chicago Typewriter'."
|
|
icon_state = "tommygun"
|
|
item_state = "shotgun"
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
slot_flags = 0
|
|
mag_type = /obj/item/ammo_box/magazine/tommygunm45
|
|
fire_sound = 'sound/weapons/gunshot_smg.ogg'
|
|
can_suppress = FALSE
|
|
burst_size = 4
|
|
fire_delay = 1
|
|
bolt_type = BOLT_TYPE_OPEN
|
|
|
|
/obj/item/gun/ballistic/automatic/ar
|
|
name = "\improper NT-ARG 'Boarder'"
|
|
desc = "A robust assault rifle used by Nanotrasen fighting forces."
|
|
icon_state = "arg"
|
|
item_state = "arg"
|
|
slot_flags = 0
|
|
mag_type = /obj/item/ammo_box/magazine/m556
|
|
fire_sound = 'sound/weapons/gunshot_smg.ogg'
|
|
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"
|
|
item_state = "l6closedmag"
|
|
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
|
|
mag_display = TRUE
|
|
mag_display_ammo = TRUE
|
|
fire_sound = 'sound/weapons/rifleshot.ogg'
|
|
rack_sound = 'sound/weapons/chunkyrack.ogg'
|
|
|
|
/obj/item/gun/ballistic/automatic/l6_saw/unrestricted
|
|
pin = /obj/item/firing_pin
|
|
|
|
|
|
/obj/item/gun/ballistic/automatic/l6_saw/examine(mob/user)
|
|
..()
|
|
to_chat(user, "<b>alt + click</b> to [cover_open ? "close" : "open"] the dust cover.")
|
|
if(cover_open && magazine)
|
|
to_chat(user, "<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)
|
|
cover_open = !cover_open
|
|
to_chat(user, "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>")
|
|
if(cover_open)
|
|
playsound(user, 'sound/weapons/sawopen.ogg', 60, 1)
|
|
else
|
|
playsound(user, 'sound/weapons/sawopen.ogg', 60, 1)
|
|
update_icon()
|
|
|
|
|
|
/obj/item/gun/ballistic/automatic/l6_saw/update_icon()
|
|
. = ..()
|
|
add_overlay("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"
|
|
item_state = "sniper"
|
|
fire_sound = "sound/weapons/sniper_shot.ogg"
|
|
fire_sound_volume = 90
|
|
vary_fire_sound = FALSE
|
|
load_sound = "sound/weapons/sniper_mag_insert.ogg"
|
|
rack_sound = "sound/weapons/sniper_rack.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 = 13
|
|
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"
|
|
item_state = "moistnugget"
|
|
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"
|
|
item_state = "arg"
|
|
mag_type = /obj/item/ammo_box/magazine/recharge
|
|
fire_delay = 2
|
|
can_suppress = FALSE
|
|
burst_size = 0
|
|
actions_types = list()
|
|
fire_sound = 'sound/weapons/laser.ogg'
|
|
casing_ejector = FALSE
|