mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Adds Variable Click Delay
Now certain weapons can strike faster or slower than usual. No weapons currently do this as this PR just lays the groundwork for that. The click delay can also be modified with traits. The slime agility modifier makes attacks happen 25% sooner. Adds debug test verb to display a weapon's DPS. It's really basic but should be sufficient for future force adjustments I might do in the future.
This commit is contained in:
@@ -108,7 +108,7 @@
|
||||
W.afterattack(A, src, 1, params) // 1 indicates adjacency
|
||||
else
|
||||
if(ismob(A)) // No instant mob attacking
|
||||
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
setClickCooldown(get_attack_speed())
|
||||
UnarmedAttack(A, 1)
|
||||
|
||||
trigger_aiming(TARGET_CAN_CLICK)
|
||||
@@ -129,7 +129,7 @@
|
||||
W.afterattack(A, src, 1, params) // 1: clicking something Adjacent
|
||||
else
|
||||
if(ismob(A)) // No instant mob attacking
|
||||
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
setClickCooldown(get_attack_speed())
|
||||
UnarmedAttack(A, 1)
|
||||
trigger_aiming(TARGET_CAN_CLICK)
|
||||
return
|
||||
|
||||
@@ -46,6 +46,22 @@ avoid code duplication. This includes items that may sometimes act as a standard
|
||||
return 0
|
||||
return I.attack(src, user, user.zone_sel.selecting)
|
||||
|
||||
// Used to get how fast a mob should attack, and influences click delay.
|
||||
// This is just for inheritence.
|
||||
/mob/proc/get_attack_speed()
|
||||
return DEFAULT_ATTACK_COOLDOWN
|
||||
|
||||
// Same as above but actually does useful things.
|
||||
// W is the item being used in the attack, if any. modifier is if the attack should be longer or shorter than usual, for whatever reason.
|
||||
/mob/living/get_attack_speed(var/obj/item/W)
|
||||
var/speed = DEFAULT_ATTACK_COOLDOWN
|
||||
if(W && istype(W))
|
||||
speed = W.attackspeed
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
if(!isnull(M.attack_speed_percent))
|
||||
speed *= M.attack_speed_percent
|
||||
return speed
|
||||
|
||||
// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person.
|
||||
// Click parameters is the params string from byond Click() code, see that documentation.
|
||||
/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
@@ -68,7 +84,7 @@ avoid code duplication. This includes items that may sometimes act as a standard
|
||||
msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" )
|
||||
/////////////////////////
|
||||
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(src))
|
||||
user.do_attack_animation(M)
|
||||
|
||||
var/hit_zone = M.resolve_item_attack(src, user, target_zone)
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
setClickCooldown(get_attack_speed())
|
||||
A.attack_generic(src,rand(5,6),"bitten")
|
||||
|
||||
/*
|
||||
@@ -87,7 +87,7 @@
|
||||
custom_emote(1,"[friendly] [A]!")
|
||||
return
|
||||
|
||||
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
setClickCooldown(get_attack_speed())
|
||||
if(isliving(A))
|
||||
target_mob = A
|
||||
PunchTarget()
|
||||
@@ -96,7 +96,7 @@
|
||||
A.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext)
|
||||
|
||||
/mob/living/simple_animal/RangedAttack(var/atom/A)
|
||||
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
setClickCooldown(get_attack_speed())
|
||||
var/distance = get_dist(src, A)
|
||||
|
||||
if(prob(spattack_prob) && (distance >= spattack_min_range) && (distance <= spattack_max_range))
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
return 0
|
||||
rig.selected_module.engage(A, alert_ai)
|
||||
if(ismob(A)) // No instant mob attacking - though modules have their own cooldowns
|
||||
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
setClickCooldown(get_attack_speed())
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user