mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-28 07:20:09 +01:00
Ports fully automatic drag-to-fire functionality from Bay. (#8917)
Watch the video until the end. The gatling gun is slow to shoot, for some reason, but the rest are all full-auto.
This commit is contained in:
@@ -49,6 +49,7 @@
|
||||
zoomdevicename = "scope"
|
||||
|
||||
var/burst = 1
|
||||
var/can_autofire = FALSE
|
||||
var/fire_delay = 6 //delay after shooting before the gun can be used again
|
||||
var/burst_delay = 1 //delay between shots, if firing in bursts
|
||||
var/move_delay = 0
|
||||
@@ -819,3 +820,18 @@
|
||||
qdel(pin)
|
||||
pin = null
|
||||
return ..()
|
||||
|
||||
//Autofire
|
||||
|
||||
/obj/item/gun/proc/can_autofire()
|
||||
return (can_autofire && world.time >= next_fire_time)
|
||||
|
||||
/client/MouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params)
|
||||
. = ..()
|
||||
if(over_object)
|
||||
var/mob/living/M = mob
|
||||
if(istype(M) && !M.incapacitated())
|
||||
var/obj/item/gun/gun = mob.get_active_hand()
|
||||
if(istype(gun) && gun.can_autofire())
|
||||
M.set_dir(get_dir(M, over_object))
|
||||
gun.Fire(get_turf(over_object), mob, params, (get_dist(over_object, mob) <= 1), FALSE)
|
||||
|
||||
@@ -17,9 +17,10 @@
|
||||
sel_mode = 1
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=null, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=null, burst_accuracy=list(1,0,0), dispersion=list(0, 10, 15)),
|
||||
list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=null, burst_accuracy=list(1,0,,-1,-1), dispersion=list(5, 10, 15, 20))
|
||||
list(mode_name="semiauto", can_autofire=0, burst=1, fire_delay=null, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", can_autofire=0, burst=3, fire_delay=null, move_delay=null, burst_accuracy=list(1,0,0), dispersion=list(0, 10, 15)),
|
||||
list(mode_name="short bursts", can_autofire=0, burst=5, fire_delay=null, move_delay=null, burst_accuracy=list(1,0,,-1,-1), dispersion=list(5, 10, 15, 20)),
|
||||
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, one_hand_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2))
|
||||
)
|
||||
|
||||
//Submachine guns and personal defence weapons, go.
|
||||
@@ -119,7 +120,8 @@
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=10, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=null, burst_accuracy=list(1,0,0), dispersion=list(0, 5, 10)),
|
||||
list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=null, burst_accuracy=list(1,0,0,-1,-1), dispersion=list(5, 5, 15))
|
||||
list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=null, burst_accuracy=list(1,0,0,-1,-1), dispersion=list(5, 5, 15)),
|
||||
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, one_hand_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2)),
|
||||
)
|
||||
|
||||
//slower to regain aim, more inaccurate if not wielding
|
||||
@@ -273,7 +275,8 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="short bursts", burst=5, move_delay=null, burst_accuracy = list(1,0,0,-1,-1), dispersion = list(3, 6, 9)),
|
||||
list(mode_name="long bursts", burst=8, move_delay=null, burst_accuracy = list(1,0,0,-1,-1,-1,-2,-2), dispersion = list(8))
|
||||
list(mode_name="long bursts", burst=8, move_delay=null, burst_accuracy = list(1,0,0,-1,-1,-1,-2,-2), dispersion = list(8)),
|
||||
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, one_hand_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2))
|
||||
)
|
||||
|
||||
var/cover_open = 0
|
||||
|
||||
@@ -127,8 +127,9 @@
|
||||
origin_tech = null
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="short bursts", burst=6, move_delay=8, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(3, 6, 9)),
|
||||
list(mode_name="long bursts", burst=12, move_delay=9, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(8))
|
||||
list(mode_name="short bursts", can_autofire=0, burst=6, move_delay=8, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(3, 6, 9)),
|
||||
list(mode_name="long bursts", can_autofire=0, burst=12, move_delay=9, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(8)),
|
||||
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, one_hand_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2))
|
||||
)
|
||||
|
||||
|
||||
@@ -162,4 +163,4 @@
|
||||
/obj/item/gun/projectile/automatic/rifle/minigun/Move()
|
||||
..()
|
||||
if(loc != source.loc)
|
||||
INVOKE_ASYNC(source, /obj/item/minigunpack/.proc/remove_gun)
|
||||
INVOKE_ASYNC(source, /obj/item/minigunpack/.proc/remove_gun)
|
||||
|
||||
Reference in New Issue
Block a user