diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 5e65bc57536..e7721b4a4a6 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -15,7 +15,6 @@
return
if(control_disabled || stat) return
- next_move = world.time + 9
if(ismob(A))
ai_actual_track(A)
@@ -60,7 +59,6 @@
if(world.time <= next_move)
return
- next_move = world.time + 9
if(aiCamera.in_camera_mode)
aiCamera.camera_mode_off()
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index fb2f17d46a9..1e14f780704 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -77,6 +77,7 @@
return M.click_action(A,src)
if(restrained())
+ changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow
RestrainedClickOn(A)
return
@@ -87,37 +88,26 @@
var/obj/item/W = get_active_hand()
if(W == A)
- next_move = world.time + 6
- if(W.flags&USEDELAY)
- next_move += 5
W.attack_self(src)
if(hand)
update_inv_l_hand(0)
else
update_inv_r_hand(0)
-
return
// operate two STORAGE levels deep here (item in backpack in src; NOT item in box in backpack in src)
var/sdepth = A.storage_depth(src)
if(A == loc || (A in loc) || (sdepth != -1 && sdepth <= 1))
-
- // faster access to objects already on you
- if(A in contents)
- next_move = world.time + 6 // on your person
- else
- next_move = world.time + 8 // in a box/bag or in your square
-
// No adjacency needed
if(W)
- if(W.flags&USEDELAY)
- next_move += 5
-
var/resolved = A.attackby(W,src)
if(!resolved && A && W)
W.afterattack(A,src,1,params) // 1 indicates adjacency
else
+ if(ismob(A))
+ changeNext_move(CLICK_CD_MELEE)
UnarmedAttack(A, 1)
+
return
if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that
@@ -126,19 +116,17 @@
// Allows you to click on a box's contents, if that box is on the ground, but no deeper than that
sdepth = A.storage_depth_turf()
if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1))
- next_move = world.time + 10
-
if(A.Adjacent(src)) // see adjacent.dm
if(W)
- if(W.flags&USEDELAY)
- next_move += 5
-
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
var/resolved = A.attackby(W,src)
if(!resolved && A && W)
W.afterattack(A,src,1,params) // 1: clicking something Adjacent
else
+ if(ismob(A))
+ changeNext_move(CLICK_CD_MELEE)
UnarmedAttack(A, 1)
+
return
else // non-adjacent click
if(W)
@@ -148,10 +136,12 @@
return
+/mob/proc/changeNext_move(num)
+ next_move = world.time + num
+
// Default behavior: ignore double clicks, consider them normal clicks instead
/mob/proc/DblClickOn(var/atom/A, var/params)
- ClickOn(A,params)
-
+ return
/*
Translates into attack_hand, etc.
@@ -164,6 +154,8 @@
in human click code to allow glove touches only at melee range.
*/
/mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag)
+ if(ismob(A))
+ changeNext_move(CLICK_CD_MELEE)
return
/*
@@ -181,19 +173,9 @@
if((M_LASER in mutations) && a_intent == "harm")
LaserEyes(A) // moved into a proc below
return
- else if(M_TK in mutations)
- switch(get_dist(src,A))
- if(0)
- ;
- if(1 to 5) // not adjacent may mean blocked by window
- next_move += 2
- if(5 to 7)
- next_move += 5
- if(8 to tk_maxrange)
- next_move += 10
- else
- return
- A.attack_tk(src)
+ else
+ if(M_TK in mutations)
+ A.attack_tk(src)
/*
Restrained ClickOn
@@ -309,7 +291,7 @@
return
/mob/living/LaserEyes(atom/A)
- next_move = world.time + 6
+ changeNext_move(CLICK_CD_RANGE)
var/turf/T = get_turf(src)
var/turf/U = get_turf(A)
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 4e20ef9ec32..846fe9c741e 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -72,20 +72,12 @@
return
if(W == A)
- next_move = world.time + 8
- if(W.flags&USEDELAY)
- next_move += 5
-
W.attack_self(src)
return
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents)
if(A == loc || (A in loc) || (A in contents))
// No adjacency checks
- next_move = world.time + 8
- if(W.flags&USEDELAY)
- next_move += 5
-
var/resolved = A.attackby(W,src)
if(!resolved && A && W)
W.afterattack(A,src,1,params)
@@ -97,16 +89,11 @@
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc))
if(isturf(A) || isturf(A.loc))
if(A.Adjacent(src)) // see adjacent.dm
- next_move = world.time + 10
- if(W.flags&USEDELAY)
- next_move += 5
-
var/resolved = A.attackby(W, src)
if(!resolved && A && W)
W.afterattack(A, src, 1, params)
return
else
- next_move = world.time + 10
W.afterattack(A, src, 0, params)
return
return
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 1e07b13142a..073fe9733ec 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -52,7 +52,6 @@
return 1
if(usr.next_move >= world.time)
return
- usr.next_move = world.time + 6
if(usr.stat || usr.restrained() || usr.stunned || usr.lying)
return 1
@@ -98,7 +97,6 @@
var/obj/item/I = usr.get_active_hand()
if(I)
master.attackby(I, usr)
- usr.next_move = world.time+2
return 1
/obj/screen/gun
@@ -583,12 +581,10 @@
if(iscarbon(usr))
var/mob/living/carbon/C = usr
C.activate_hand("r")
- usr.next_move = world.time+2
if("l_hand")
if(iscarbon(usr))
var/mob/living/carbon/C = usr
C.activate_hand("l")
- usr.next_move = world.time+2
if("swap")
usr:swap_hand()
if("hand")
@@ -597,5 +593,4 @@
if(usr.attack_ui(slot_id))
usr.update_inv_l_hand(0)
usr.update_inv_r_hand(0)
- usr.next_move = world.time+6
return 1
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 07fb74b8359..84351db1821 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -12,6 +12,7 @@
/mob/living/attackby(obj/item/I, mob/user)
if(istype(I) && ismob(user))
+ user.changeNext_move(CLICK_CD_MELEE)
I.attack(src, user)
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index 210140bdf9f..79e080e74bd 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -19,8 +19,8 @@
if(client.buildmode)
build_click(src, client.buildmode, params, A)
return
- if(world.time <= next_move) return
- next_move = world.time + 8
+ if(world.time <= next_move)
+ return
var/list/modifiers = params2list(params)
if(modifiers["shift"])
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index c6527855100..48db14eff84 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -37,15 +37,6 @@
return
else if(M_TK in mutations)
- switch(get_dist(src,A))
- if(1 to 5) // not adjacent may mean blocked by window
- next_move += 2
- if(5 to 7)
- next_move += 5
- if(8 to 15)
- next_move += 10
- if(16 to 128)
- return
A.attack_tk(src)
*/
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index c06485ee0ec..f4785d6d381 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -108,20 +108,11 @@ var/const/tk_maxrange = 15
return
var/d = get_dist(user, target)
- if(focus) d = max(d,get_dist(user,focus)) // whichever is further
- switch(d)
- if(0)
- ;
- if(1 to 5) // not adjacent may mean blocked by window
- if(!proximity)
- user.next_move += 2
- if(5 to 7)
- user.next_move += 5
- if(8 to tk_maxrange)
- user.next_move += 10
- else
- user << "\blue Your mind won't reach that far."
- return
+ if(focus)
+ d = max(d,get_dist(user,focus)) // whichever is further
+ if(d > tk_maxrange)
+ user << "Your mind won't reach that far."
+ return
if(!focus)
focus_object(target, user)
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index ccfda6b21c3..a95fe3a4ac2 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -830,7 +830,6 @@
icon = 'icons/obj/lightning.dmi'
icon_state = "lightning"
desc = "test lightning"
- flags = USEDELAY
New()
icon = midicon
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 9fdcc7ce7ba..9bcdefdd0b8 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -130,6 +130,7 @@
attackby(var/obj/item/weapon/W, var/mob/user)
+ user.changeNext_move(CLICK_CD_MELEE)
playsound(get_turf(src), 'sound/effects/attackblob.ogg', 50, 1)
src.visible_message("\red The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]")
var/damage = 0
diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm
index 91289631400..96aacffa9b4 100644
--- a/code/game/gamemodes/heist/heist.dm
+++ b/code/game/gamemodes/heist/heist.dm
@@ -15,7 +15,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
required_players = 15
required_players_secret = 25
required_enemies = 4
- recommended_enemies = 6
+ recommended_enemies = 5
votable = 0
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 429bc886068..2dafc4b32cd 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -195,6 +195,7 @@
/obj/machinery/door/window/proc/attack_generic(mob/user as mob, damage = 0)
if(src.operating)
return
+ user.changeNext_move(CLICK_CD_MELEE)
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
user.visible_message("[user] smashes against the [src.name].", \
"[user] smashes against the [src.name].")
@@ -330,6 +331,7 @@
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) )
+ user.changeNext_move(CLICK_CD_MELEE)
if( (I.flags&NOBLUDGEON) || !I.force )
return
var/aforce = I.force
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 24af225a8ab..9f3f7548d5a 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -155,7 +155,6 @@
else
if(isliving(loc))
return 0
- user.next_move = max(user.next_move+2,world.time + 2)
pickup(user)
add_fingerprint(user)
@@ -187,7 +186,6 @@
if(istype(src.loc, /mob/living))
return
src.pickup(user)
- user.next_move = max(user.next_move+2,world.time + 2)
user.put_in_active_hand(src)
return
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index d3ba41ca58c..b4400ec0a7f 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -5,7 +5,7 @@
icon_state = "pointer"
item_state = "pen"
var/pointer_icon_state
- flags = CONDUCT | USEDELAY
+ flags = CONDUCT
slot_flags = SLOT_BELT
m_amt = 500
g_amt = 500
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 2475ee9eeed..11d68d9e6f9 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -59,6 +59,7 @@
attack_hand(user)
/obj/structure/grille/attack_hand(mob/user as mob)
+ user.changeNext_move(CLICK_CD_MELEE)
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
user.visible_message("[user] kicks [src].", \
"You kick [src].", \
@@ -74,7 +75,7 @@
/obj/structure/grille/attack_alien(mob/user as mob)
if(istype(user, /mob/living/carbon/alien/larva)) return
-
+ user.changeNext_move(CLICK_CD_MELEE)
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
user.visible_message("[user] mangles [src].", \
"You mangle [src].", \
@@ -86,6 +87,7 @@
return
/obj/structure/grille/attack_slime(mob/user as mob)
+ user.changeNext_move(CLICK_CD_MELEE)
var/mob/living/carbon/slime/S = user
if (!S.is_adult)
return
@@ -101,6 +103,7 @@
/obj/structure/grille/attack_animal(var/mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0) return
+ M.changeNext_move(CLICK_CD_MELEE)
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
M.visible_message("[M] smashes against [src].", \
@@ -137,6 +140,7 @@
return
/obj/structure/grille/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ user.changeNext_move(CLICK_CD_MELEE)
if(iswirecutter(W))
if(!shock(user, 100))
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 8cdc2666bc2..be28a7be0f8 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -162,11 +162,13 @@ var/global/wcColored
log_admin("Window destroyed by hulk [user.real_name] ([user.ckey]) with pdiff [pdiff] at [loc]!")
destroy()
else if (usr.a_intent == "harm")
+ user.changeNext_move(CLICK_CD_MELEE)
playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1)
usr.visible_message("\red [usr.name] bangs against the [src.name]!", \
"\red You bang against the [src.name]!", \
"You hear a banging sound.")
else
+ user.changeNext_move(CLICK_CD_MELEE)
playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1)
usr.visible_message("[usr.name] knocks on the [src.name].", \
"You knock on the [src.name].", \
@@ -178,6 +180,7 @@ var/global/wcColored
return attack_hand(user)
/obj/structure/window/proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime
+ user.changeNext_move(CLICK_CD_MELEE)
health -= damage
if(health <= 0)
user.visible_message("[user] smashes through [src]!")
@@ -298,6 +301,7 @@ var/global/wcColored
del(src)
else
if(W.damtype == BRUTE || W.damtype == BURN)
+ user.changeNext_move(CLICK_CD_MELEE)
hit(W.force)
if(health <= 7)
anchored = 0
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 4fbe7180941..ee840bcbe5d 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -241,6 +241,7 @@
//Interactions
/turf/simulated/wall/attack_paw(mob/user as mob)
+ user.changeNext_move(CLICK_CD_MELEE)
if ((M_HULK in user.mutations))
if (prob(40))
usr << text("\blue You smash through the wall.")
@@ -255,6 +256,7 @@
return src.attack_hand(user)
/turf/simulated/wall/attack_animal(var/mob/living/simple_animal/M)
+ M.changeNext_move(CLICK_CD_MELEE)
if(M.environment_smash >= 2)
if(istype(src, /turf/simulated/wall/r_wall))
if(M.environment_smash == 3)
@@ -269,6 +271,7 @@
return
/turf/simulated/wall/attack_hand(mob/user as mob)
+ user.changeNext_move(CLICK_CD_MELEE)
if (M_HULK in user.mutations)
if (prob(40) || rotting)
user << text("\blue You smash through the wall.")
@@ -291,7 +294,7 @@
return
/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob)
-
+ user.changeNext_move(CLICK_CD_MELEE)
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
user << "You don't have the dexterity to do this!"
return
diff --git a/code/game/verbs/atom_verbs.dm b/code/game/verbs/atom_verbs.dm
index 34b6e2cad71..aa55f33da0a 100644
--- a/code/game/verbs/atom_verbs.dm
+++ b/code/game/verbs/atom_verbs.dm
@@ -29,7 +29,7 @@
return
var/P = new /obj/effect/decal/point(tile)
- usr.next_move = world.time + 10
+ usr.changeNext_move(CLICK_CD_POINT)
spawn (20)
if(P) del(P)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 246f6a1ba01..367281f49db 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -456,7 +456,7 @@
if(!isliving(usr) || usr.next_move > world.time)
return
- usr.next_move = world.time + 20
+ usr.changeNext_move(CLICK_CD_RESIST)
var/mob/living/L = usr
@@ -539,8 +539,8 @@
if(iscarbon(L))
var/mob/living/carbon/C = L
if( C.handcuffed )
- C.next_move = world.time + 100
- C.last_special = world.time + 100
+ C.changeNext_move(CLICK_CD_BREAKOUT)
+ C.last_special = world.time + CLICK_CD_BREAKOUT
C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)"
for(var/mob/O in viewers(L))
O.show_message("\red [usr] attempts to unbuckle themself!", 1)
@@ -573,8 +573,8 @@
// breakout_time++ //Harder to get out of welded lockers than locked lockers
//okay, so the closet is either welded or locked... resist!!!
- usr.next_move = world.time + 100
- L.last_special = world.time + 100
+ L.changeNext_move(CLICK_CD_BREAKOUT)
+ L.last_special = world.time + CLICK_CD_BREAKOUT
L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)"
for(var/mob/O in viewers(usr.loc))
O.show_message("\red The [L.loc] begins to shake violently!", 1)
@@ -640,8 +640,8 @@
ExtinguishMob()
return
if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))
- CM.next_move = world.time + 100
- CM.last_special = world.time + 100
+ CM.changeNext_move(CLICK_CD_BREAKOUT)
+ CM.last_special = world.time + CLICK_CD_BREAKOUT
if(isalienadult(CM) || (M_HULK in usr.mutations))//Don't want to do a lot of logic gating here.
usr << "\red You attempt to break your handcuffs. (This will take around 5 seconds and you need to stand still)"
for(var/mob/O in viewers(CM))
@@ -677,8 +677,8 @@
CM.unEquip(CM.handcuffed)
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time))
- CM.next_move = world.time + 100
- CM.last_special = world.time + 100
+ CM.changeNext_move(CLICK_CD_BREAKOUT)
+ CM.last_special = world.time + CLICK_CD_BREAKOUT
if(isalienadult(CM) || (M_HULK in usr.mutations))//Don't want to do a lot of logic gating here.
usr << "\red You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)"
for(var/mob/O in viewers(CM))
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 6d0694c3073..80290e7c514 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -402,6 +402,7 @@
if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch))
harvest()
else
+ user.changeNext_move(CLICK_CD_MELEE)
var/damage = 0
if(O.force)
if(O.force >= force_threshold)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 5f0f4e1768f..81b4877f09d 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -503,8 +503,6 @@ var/list/slot_equipment_priority = list( \
if (W)
W.attack_self(src)
update_inv_r_hand()
- if(next_move < world.time)
- next_move = world.time + 2
return
/*
@@ -1151,7 +1149,7 @@ mob/proc/yank_out_object()
if(!isliving(usr) || usr.next_move > world.time)
return
- usr.next_move = world.time + 20
+ usr.changeNext_move(CLICK_CD_RESIST)
if(usr.stat == 1)
usr << "You are unconcious and cannot do that!"
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index cdda2f6d268..dcb5f31ff0f 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -160,7 +160,7 @@
affecting.LAssailant = null
else
affecting.LAssailant = assailant
- assailant.next_move = world.time + 10
+ assailant.changeNext_move(CLICK_CD_TKSTRANGLE)
affecting.losebreath += 1
else
assailant.visible_message("[assailant] was unable to tighten \his grip on [affecting]'s neck!")
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 35fbeb2de35..566cc667745 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -153,7 +153,7 @@
in_chamber.loc = get_turf(user)
in_chamber.starting = get_turf(user)
in_chamber.shot_from = src
- user.next_move = world.time + 4
+ user.changeNext_move(CLICK_CD_RANGE)
in_chamber.silenced = silenced
in_chamber.current = curloc
in_chamber.yo = targloc.y - curloc.y
diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm
index d21987e4a1c..8829993c0ae 100644
--- a/code/modules/projectiles/guns/projectile/rocket.dm
+++ b/code/modules/projectiles/guns/projectile/rocket.dm
@@ -8,7 +8,7 @@
throw_speed = 2
throw_range = 10
force = 5.0
- flags = CONDUCT | USEDELAY
+ flags = CONDUCT
origin_tech = "combat=8;materials=5"
projectile = /obj/item/missile
var/missile_speed = 2
diff --git a/code/setup.dm b/code/setup.dm
index 2d05f300323..a262ad31c0f 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -198,7 +198,7 @@ var/MAX_EX_FLASH_RANGE = 14
#define NODROP 2 // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted.
#define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message with the default handler
#define MASKINTERNALS 8 // mask allows internals
-#define USEDELAY 16 // 1 second extra delay on use (Can be used once every 2s)
+//#define USEDELAY 16 // 1 second extra delay on use (Can be used once every 2s)
#define NOSHIELD 32 // weapon not affected by shield
#define CONDUCT 64 // conducts electricity (metal etc.)
#define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way
@@ -964,3 +964,12 @@ var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")
#define STATUS_UPDATE 1 // ORANGE Visability
#define STATUS_DISABLED 0 // RED Visability
#define STATUS_CLOSE -1 // Close the interface
+
+//Click cooldowns, in tenths of a second
+#define CLICK_CD_MELEE 8
+#define CLICK_CD_RANGE 4
+#define CLICK_CD_BREAKOUT 100
+#define CLICK_CD_HANDCUFFED 10
+#define CLICK_CD_TKSTRANGLE 10
+#define CLICK_CD_POINT 10
+#define CLICK_CD_RESIST 20