Autofire now continues firing when you hold down on one tile. (#13403)

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2022-04-04 04:35:37 +02:00
committed by GitHub
parent 551737282e
commit 6038bfcdba
9 changed files with 87 additions and 21 deletions

View File

@@ -26,6 +26,7 @@
var/adminobs = null
var/area = null
var/time_died_as_rat = 0
var/list/autofire_aiming_at[2]
var/adminhelped = NOT_ADMINHELPED

View File

@@ -771,6 +771,9 @@ var/list/localhost_addresses = list(
. = ..()
if(over_object)
if(autofire_aiming_at[1])
autofire_aiming_at[1] = over_object
autofire_aiming_at[2] = params
var/mob/living/M = mob
if(istype(get_turf(over_object), /atom))
var/atom/A = get_turf(over_object)
@@ -780,15 +783,35 @@ var/list/localhost_addresses = list(
if(istype(M) && !M.incapacitated())
var/obj/item/I = M.get_active_hand()
if(istype(I, /obj/item/gun))
var/obj/item/gun/gun = I
if(gun.can_autofire())
M.set_dir(get_dir(M, over_object))
gun.Fire(get_turf(over_object), M, params, (get_dist(over_object, M) <= 1), FALSE)
if(istype(I, /obj/item/rfd/mining) && isturf(over_object))
var/proximity = M.Adjacent(over_object)
var/obj/item/rfd/mining/RFDM = I
RFDM.afterattack(over_object, M, proximity, params, FALSE)
CHECK_TICK
/client/MouseDown(object, location, control, params)
var/obj/item/I = mob.get_active_hand()
var/obj/O = object
if(istype(I, /obj/item/gun))
var/obj/item/gun/G = I
if(G.can_autofire(object, location, params) && O.is_auto_clickable())
autofire_aiming_at[1] = object
autofire_aiming_at[2] = params
while(autofire_aiming_at[1])
G.Fire(autofire_aiming_at[1], mob, autofire_aiming_at[2], (get_dist(mob, location) <= 1), FALSE)
mob.set_dir(get_dir(mob, autofire_aiming_at[1]))
sleep(G.fire_delay)
CHECK_TICK
/client/MouseUp(object, location, control, params)
autofire_aiming_at[1] = null
/atom/proc/is_auto_clickable()
return TRUE
/obj/screen/is_auto_clickable()
return FALSE
/obj/screen/click_catcher/is_auto_clickable()
return TRUE

View File

@@ -945,7 +945,7 @@
return 0
//Autofire
/obj/item/gun/proc/can_autofire()
/obj/item/gun/proc/can_autofire(object, location, params)
return (can_autofire && world.time >= next_fire_time)
/obj/item/gun/proc/update_maptext()

View File

@@ -413,10 +413,10 @@
is_wieldable = TRUE
firemodes = list(
list(mode_name="2 second burst", burst=10, burst_delay = 1, fire_delay = 20),
list(mode_name="4 second burst", burst=20, burst_delay = 1, fire_delay = 40),
list(mode_name="6 second burst", burst=30, burst_delay = 1, fire_delay = 60),
list(mode_name="point-burst auto", can_autofire = TRUE, burst = 1, fire_delay = 1, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2))
list(mode_name="2 second burst", burst=10, burst_delay = 1, fire_delay = 20, fire_delay_wielded = 20),
list(mode_name="4 second burst", burst=20, burst_delay = 1, fire_delay = 40, fire_delay_wielded = 40),
list(mode_name="6 second burst", burst=30, burst_delay = 1, fire_delay = 60, fire_delay_wielded = 60),
list(mode_name="point-burst auto", can_autofire = TRUE, burst = 1, fire_delay = 1, fire_delay_wielded = 1, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2))
)
needspin = FALSE

View File

@@ -20,7 +20,7 @@
list(mode_name="semiauto", can_autofire=0, burst=1),
list(mode_name="3-round bursts", can_autofire=0, burst=3, burst_accuracy=list(1,0,0), dispersion=list(0, 10, 15)),
list(mode_name="short bursts", can_autofire=0, burst=5, 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_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25))
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, fire_delay_wielded=1, one_hand_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25))
)
//Submachine guns and personal defence weapons, go.
@@ -121,7 +121,7 @@
list(mode_name="semiauto", burst=1, fire_delay=10),
list(mode_name="3-round bursts", burst=3, burst_accuracy=list(1,0,0), dispersion=list(0, 5, 10)),
list(mode_name="short bursts", burst=5, 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_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25)),
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, fire_delay_wielded=1, one_hand_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25)),
)
//slower to regain aim, more inaccurate if not wielding
@@ -166,7 +166,7 @@
knife_y_offset = 13
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=8),
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, one_hand_fa_penalty=22, burst_accuracy = list(0,-1,-1,-1,-2,-2,-2,-3), dispersion = list(5, 5, 10, 15, 20)),
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, fire_delay_wielded=1, one_hand_fa_penalty=22, burst_accuracy = list(0,-1,-1,-1,-2,-2,-2,-3), dispersion = list(5, 5, 10, 15, 20)),
)
fire_delay = 8
@@ -194,7 +194,7 @@
knife_x_offset = 23
knife_y_offset = 13
firemodes = list(mode_name="semiauto", burst=1, fire_delay=12)
firemodes = list(mode_name="semiauto", burst=1, fire_delay=12, fire_delay_wielded=12)
/obj/item/gun/projectile/automatic/rifle/carbine/update_icon()
..()
@@ -315,7 +315,7 @@
firemodes = list(
list(mode_name="short bursts", burst=5, burst_accuracy = list(1,0,0,-1,-1), dispersion = list(3, 6, 9)),
list(mode_name="long bursts", burst=8, 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_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25))
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, fire_delay_wielded=1, one_hand_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25))
)
var/cover_open = 0
@@ -510,7 +510,7 @@
accuracy_wielded = 0
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay= 10),
list(mode_name="semiauto", burst=1, fire_delay= 10, fire_delay_wielded=10),
list(mode_name="3-round bursts", burst=3, burst_accuracy=list(0,-1,-1), dispersion=list(0, 10, 15))
)

View File

@@ -127,9 +127,9 @@
origin_tech = null
firemodes = list(
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="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_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25))
list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, fire_delay_wielded=1, one_hand_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25))
)

View File

@@ -180,7 +180,7 @@
sel_mode = 1
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
list(mode_name="semiauto", burst=1, fire_delay=0, fire_delay_wielded=0),
list(mode_name="3-round bursts", burst=3, burst_accuracy=list(1,0,0), dispersion=list(0, 10))
)

View File

@@ -253,7 +253,7 @@
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
list(mode_name="semiauto", burst=1, fire_delay=0, fire_delay_wielded=0),
list(mode_name="2-round bursts", burst=2, burst_accuracy=list(0,-1,-1), dispersion=list(0, 8))
)