diff --git a/code/datums/mutations/webbing.dm b/code/datums/mutations/webbing.dm
index 4fce0e29da0..0fda118d0ed 100644
--- a/code/datums/mutations/webbing.dm
+++ b/code/datums/mutations/webbing.dm
@@ -5,12 +5,12 @@
quality = POSITIVE
text_gain_indication = "Your skin feels webby."
instability = 15
- power_path = /datum/action/cooldown/lay_web/genetic
+ power_path = /datum/action/cooldown/mob_cooldown/lay_web/genetic
energy_coeff = 1
/datum/mutation/human/webbing/modify()
. = ..()
- var/datum/action/cooldown/lay_web/genetic/to_modify = .
+ var/datum/action/cooldown/mob_cooldown/lay_web/genetic/to_modify = .
if(!istype(to_modify)) // null or invalid
return
diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
index 016fc3a5a87..ffe8d9e4655 100644
--- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
+++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
@@ -43,7 +43,7 @@
/// Slight cooldown to prevent double-dipping if we use both abilities at once
COOLDOWN_DECLARE(ability_animation_cooldown)
/// Our base tentacles ability
- var/datum/action/cooldown/goliath_tentacles/tentacles
+ var/datum/action/cooldown/mob_cooldown/goliath_tentacles/tentacles
/// Things we want to eat off the floor (or a plate, we're not picky)
var/static/list/goliath_foods = list(/obj/item/food/grown/ash_flora, /obj/item/food/bait/worm)
@@ -66,10 +66,10 @@
tentacles = new (src)
tentacles.Grant(src)
- var/datum/action/cooldown/tentacle_burst/melee_tentacles = new (src)
+ var/datum/action/cooldown/mob_cooldown/tentacle_burst/melee_tentacles = new (src)
melee_tentacles.Grant(src)
AddComponent(/datum/component/revenge_ability, melee_tentacles, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM], max_range = 1, target_self = TRUE)
- var/datum/action/cooldown/tentacle_grasp/ranged_tentacles = new (src)
+ var/datum/action/cooldown/mob_cooldown/tentacle_grasp/ranged_tentacles = new (src)
ranged_tentacles.Grant(src)
AddComponent(/datum/component/revenge_ability, ranged_tentacles, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM], min_range = 2, max_range = 9)
@@ -139,7 +139,7 @@
SIGNAL_HANDLER
if (stat == DEAD || ability.IsAvailable())
return // We died or the action failed for some reason like being out of range
- if (istype(ability, /datum/action/cooldown/goliath_tentacles))
+ if (istype(ability, /datum/action/cooldown/mob_cooldown/goliath_tentacles))
if (ability.cooldown_time <= 2 SECONDS)
return
icon_state = icon_living
diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm
index f98d1630650..bb8adaf61c3 100644
--- a/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm
+++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm
@@ -1,5 +1,5 @@
/// Place some grappling tentacles underfoot
-/datum/action/cooldown/goliath_tentacles
+/datum/action/cooldown/mob_cooldown/goliath_tentacles
name = "Unleash Tentacles"
desc = "Unleash burrowed tentacles at a targetted location, grappling targets after a delay."
button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi'
@@ -10,17 +10,17 @@
cooldown_time = 12 SECONDS
melee_cooldown_time = 0
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
+ shared_cooldown = NONE
/// Furthest range we can activate ability at
var/max_range = 7
-/datum/action/cooldown/goliath_tentacles/PreActivate(atom/target)
+/datum/action/cooldown/mob_cooldown/goliath_tentacles/PreActivate(atom/target)
target = get_turf(target)
if (get_dist(owner, target) > max_range)
return FALSE
return ..()
-/datum/action/cooldown/goliath_tentacles/Activate(atom/target)
- . = ..()
+/datum/action/cooldown/mob_cooldown/goliath_tentacles/Activate(atom/target)
new /obj/effect/goliath_tentacle(target)
var/list/directions = GLOB.cardinals.Copy()
for(var/i in 1 to 3)
@@ -31,10 +31,11 @@
if (isliving(target))
owner.visible_message(span_warning("[owner] digs its tentacles under [target]!"))
+ StartCooldown()
return TRUE
/// Place grappling tentacles around you to grab attackers
-/datum/action/cooldown/tentacle_burst
+/datum/action/cooldown/mob_cooldown/tentacle_burst
name = "Tentacle Burst"
desc = "Unleash burrowed tentacles in an area around you, grappling targets after a delay."
button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi'
@@ -44,19 +45,21 @@
cooldown_time = 24 SECONDS
melee_cooldown_time = 0
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
+ shared_cooldown = NONE
+ click_to_activate = FALSE
-/datum/action/cooldown/tentacle_burst/Activate(atom/target)
- . = ..()
+/datum/action/cooldown/mob_cooldown/tentacle_burst/Activate(atom/target)
var/list/directions = GLOB.alldirs.Copy()
for (var/dir in directions)
var/turf/adjacent_target = get_step(target, dir)
if(adjacent_target)
new /obj/effect/goliath_tentacle(adjacent_target)
owner.visible_message(span_warning("[owner] unleashes tentacles from the ground around it!"))
+ StartCooldown()
return TRUE
/// Summon a line of tentacles towards the target
-/datum/action/cooldown/tentacle_grasp
+/datum/action/cooldown/mob_cooldown/tentacle_grasp
name = "Tentacle Grasp"
desc = "Unleash burrowed tentacles in a line towards a targetted location, grappling targets after a delay."
button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi'
@@ -67,12 +70,13 @@
cooldown_time = 12 SECONDS
melee_cooldown_time = 0
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
+ shared_cooldown = NONE
-/datum/action/cooldown/tentacle_grasp/Activate(atom/target)
- . = ..()
+/datum/action/cooldown/mob_cooldown/tentacle_grasp/Activate(atom/target)
new /obj/effect/temp_visual/effect_trail/burrowed_tentacle(owner.loc, target)
if (isliving(target))
owner.visible_message(span_warning("[owner] reaches for [target] with its tentacles!"))
+ StartCooldown()
return TRUE
/// An invisible effect which chases a target, spawning tentacles every so often.
diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm
index 85d2e384ae3..b90d5928b20 100644
--- a/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm
+++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm
@@ -11,7 +11,7 @@
cooldown_time = 30 SECONDS
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
click_to_activate = FALSE
- shared_cooldown = null
+ shared_cooldown = NONE
/// At what range do we check for vision?
var/effect_radius = 7
/// How long does it take to play our various animation stages
diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm
index 59fe0e0903b..ca882da3f2c 100644
--- a/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm
+++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm
@@ -11,7 +11,7 @@
cooldown_time = 20 SECONDS
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
click_to_activate = TRUE
- shared_cooldown = null
+ shared_cooldown = NONE
/// Furthest range we can activate ability at
var/max_range = 7
/// Type of projectile to fire
diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm
index 729352543ba..a0f9d2fb51b 100644
--- a/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm
+++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm
@@ -1,15 +1,16 @@
/// An ability which makes spikes come out of the ground towards your target
-/datum/action/cooldown/chasing_spikes
+/datum/action/cooldown/mob_cooldown/chasing_spikes
name = "impaling tendril"
desc = "Send a spiked subterranean tendril chasing after your target."
button_icon = 'icons/mob/simple/meteor_heart.dmi'
button_icon_state = "spike"
cooldown_time = 10 SECONDS
click_to_activate = TRUE
+ shared_cooldown = NONE
/// Lazy list of references to spike trails
var/list/active_chasers
-/datum/action/cooldown/chasing_spikes/Activate(atom/target)
+/datum/action/cooldown/mob_cooldown/chasing_spikes/Activate(atom/target)
. = ..()
playsound(owner, 'sound/magic/demon_attack1.ogg', vol = 100, vary = TRUE, pressure_affected = FALSE)
var/obj/effect/temp_visual/effect_trail/spike_chaser/chaser = new(get_turf(owner), target)
@@ -17,12 +18,12 @@
RegisterSignal(chaser, COMSIG_QDELETING, PROC_REF(on_chaser_destroyed))
/// Remove a spike trail from our list of active trails
-/datum/action/cooldown/chasing_spikes/proc/on_chaser_destroyed(atom/chaser)
+/datum/action/cooldown/mob_cooldown/chasing_spikes/proc/on_chaser_destroyed(atom/chaser)
SIGNAL_HANDLER
LAZYREMOVE(active_chasers, WEAKREF(chaser))
// Clean up after ourselves
-/datum/action/cooldown/chasing_spikes/Remove(mob/removed_from)
+/datum/action/cooldown/mob_cooldown/chasing_spikes/Remove(mob/removed_from)
QDEL_LIST(active_chasers)
return ..()
diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm
index d2c295c8036..5829b52e437 100644
--- a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm
+++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm
@@ -26,9 +26,9 @@
combat_mode = TRUE
move_resist = INFINITY // This mob IS the floor
/// Action which sends a line of spikes chasing a player
- var/datum/action/cooldown/chasing_spikes/spikes
+ var/datum/action/cooldown/mob_cooldown/chasing_spikes/spikes
/// Action which summons areas the player can't stand in
- var/datum/action/cooldown/spine_traps/traps
+ var/datum/action/cooldown/mob_cooldown/spine_traps/traps
/// Looping heartbeat sound
var/datum/looping_sound/heartbeat/soundloop
@@ -77,7 +77,7 @@
soundloop.set_mid_length(HEARTBEAT_NORMAL)
/// Animate when using certain abilities
-/mob/living/basic/meteor_heart/proc/used_ability(mob/living/owner, datum/action/cooldown/ability)
+/mob/living/basic/meteor_heart/proc/used_ability(mob/living/owner, datum/action/cooldown/mob_cooldown/ability)
SIGNAL_HANDLER
if (ability != spikes)
return
diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm
index a2a3b52b835..4f7135b1deb 100644
--- a/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm
+++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/spine_traps.dm
@@ -1,10 +1,12 @@
/// Marks several areas with thrusting spines which damage and slow people
-/datum/action/cooldown/spine_traps
+/datum/action/cooldown/mob_cooldown/spine_traps
name = "thrusting spines"
desc = "Mark several nearby areas with thrusting spines, which will spring up when disturbed."
button_icon = 'icons/mob/simple/meteor_heart.dmi'
button_icon_state = "spikes_stabbing"
cooldown_time = 15 SECONDS
+ shared_cooldown = NONE
+ click_to_activate = FALSE
/// Create zones at most this far away
var/range = 3
/// Don't create zones within this radius
@@ -12,7 +14,7 @@
/// Number of zones to place
var/zones_to_create = 3
-/datum/action/cooldown/spine_traps/Activate(atom/target)
+/datum/action/cooldown/mob_cooldown/spine_traps/Activate(atom/target)
. = ..()
playsound(owner, 'sound/magic/demon_consume.ogg', vol = 100, falloff_exponent = 2, vary = TRUE, pressure_affected = FALSE)
@@ -31,11 +33,11 @@
created++
/// Returns true if we can place a trap at the specified location
-/datum/action/cooldown/spine_traps/proc/is_valid_turf(turf/target_turf)
+/datum/action/cooldown/mob_cooldown/spine_traps/proc/is_valid_turf(turf/target_turf)
return !target_turf.is_blocked_turf(exclude_mobs = TRUE) && !isspaceturf(target_turf) && !isopenspaceturf(target_turf)
/// Places a 3x3 area of spike traps around a central provided point, returns the list of now occupied turfs
-/datum/action/cooldown/spine_traps/proc/place_zone(turf/target_turf)
+/datum/action/cooldown/mob_cooldown/spine_traps/proc/place_zone(turf/target_turf)
var/list/used_turfs = list()
for (var/turf/zone_turf in range(1, target_turf))
if (!is_valid_turf(zone_turf))
diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
index ec0499e13d0..38294dcf277 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
@@ -78,7 +78,7 @@
. = ..()
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
- var/datum/action/cooldown/web_effigy/shed = new(src)
+ var/datum/action/cooldown/mob_cooldown/web_effigy/shed = new(src)
shed.Grant(src)
/**
@@ -135,7 +135,7 @@
. = ..()
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
- var/datum/action/command_spiders/communication_spiders/spiders_communication = new(src)
+ var/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders/spiders_communication = new(src)
spiders_communication.Grant(src)
/**
@@ -161,7 +161,7 @@
speed = 4
player_speed_modifier = -3.1
web_speed = 0.25
- web_type = /datum/action/cooldown/lay_web/sealer
+ web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
menu_description = "Support spider variant specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage."
///The health HUD applied to the mob.
var/health_hud = DATA_HUD_MEDICAL_ADVANCED
@@ -208,21 +208,21 @@
web_speed = 0.25
speed = 4
player_speed_modifier = -3.1
- web_type = /datum/action/cooldown/lay_web/sealer
+ web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
menu_description = "Support spider variant specializing in contruction to protect their brethren, but has very low amount of health and deals low damage."
/mob/living/basic/spider/giant/tangle/Initialize(mapload)
. = ..()
- var/datum/action/cooldown/lay_web/solid_web/web_solid = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src)
web_solid.Grant(src)
- var/datum/action/cooldown/lay_web/web_passage/passage_web = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src)
passage_web.Grant(src)
- var/datum/action/cooldown/lay_web/web_spikes/spikes_web = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src)
spikes_web.Grant(src)
- var/datum/action/cooldown/lay_web/sticky_web/web_sticky = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src)
web_sticky.Grant(src)
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
@@ -270,17 +270,17 @@
mob_size = MOB_SIZE_LARGE
gold_core_spawnable = NO_SPAWN
web_speed = 0.7
- web_type = /datum/action/cooldown/lay_web/sealer
+ web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
menu_description = "Tank spider variant with an enormous amount of health and damage, but is very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup."
/// Charging ability
var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge
/mob/living/basic/spider/giant/tarantula/Initialize(mapload)
. = ..()
- var/datum/action/cooldown/lay_web/solid_web/web_solid = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src)
web_solid.Grant(src)
- var/datum/action/cooldown/lay_web/web_passage/passage_web = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src)
passage_web.Grant(src)
charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge()
@@ -353,36 +353,36 @@
player_speed_modifier = -3.1
gold_core_spawnable = NO_SPAWN
web_speed = 0.5
- web_type = /datum/action/cooldown/lay_web/sealer
+ web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
menu_description = "Royal spider variant specializing in reproduction and leadership, deals low damage."
/mob/living/basic/spider/giant/midwife/Initialize(mapload)
. = ..()
- var/datum/action/cooldown/lay_web/solid_web/web_solid = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src)
web_solid.Grant(src)
- var/datum/action/cooldown/lay_web/web_passage/passage_web = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src)
passage_web.Grant(src)
- var/datum/action/cooldown/lay_web/web_spikes/spikes_web = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src)
spikes_web.Grant(src)
- var/datum/action/cooldown/lay_web/sticky_web/web_sticky = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src)
web_sticky.Grant(src)
- var/datum/action/cooldown/wrap/wrapping = new(src)
+ var/datum/action/cooldown/mob_cooldown/wrap/wrapping = new(src)
wrapping.Grant(src)
- var/datum/action/lay_eggs/make_eggs = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_eggs/make_eggs = new(src)
make_eggs.Grant(src)
- var/datum/action/lay_eggs/enriched/make_better_eggs = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/make_better_eggs = new(src)
make_better_eggs.Grant(src)
- var/datum/action/set_spider_directive/give_orders = new(src)
+ var/datum/action/cooldown/mob_cooldown/set_spider_directive/give_orders = new(src)
give_orders.Grant(src)
- var/datum/action/command_spiders/not_hivemind_talk = new(src)
+ var/datum/action/cooldown/mob_cooldown/command_spiders/not_hivemind_talk = new(src)
not_hivemind_talk.Grant(src)
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
@@ -514,10 +514,10 @@
complete_text = "%SOURCE%'s wounds mend together.",\
)
- var/datum/action/cooldown/lay_web/web_spikes/spikes_web = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src)
spikes_web.Grant(src)
- var/datum/action/cooldown/lay_web/sticky_web/web_sticky = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src)
web_sticky.Grant(src)
/// Prevent you from healing other flesh spiders, or healing when on fire
@@ -552,10 +552,10 @@
. = ..()
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
- var/datum/action/cooldown/lay_web/web_spikes/spikes_web = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src)
spikes_web.Grant(src)
- var/datum/action/cooldown/lay_web/sticky_web/web_sticky = new(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src)
web_sticky.Grant(src)
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider.dm b/code/modules/mob/living/basic/space_fauna/spider/spider.dm
index c1d11d2cb10..e96482439f9 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider.dm
@@ -38,7 +38,7 @@
/// Multiplier to apply to web laying speed. Fractional numbers make it faster, because it's a multiplier.
var/web_speed = 1
/// Type of webbing ability to learn.
- var/web_type = /datum/action/cooldown/lay_web
+ var/web_type = /datum/action/cooldown/mob_cooldown/lay_web
/// The message that the mother spider left for this spider when the egg was layed.
var/directive = ""
/// Short description of what this mob is capable of, for radial menu uses
@@ -57,7 +57,7 @@
if(poison_per_bite)
AddElement(/datum/element/venomous, poison_type, poison_per_bite)
- var/datum/action/cooldown/lay_web/webbing = new web_type(src)
+ var/datum/action/cooldown/mob_cooldown/lay_web/webbing = new web_type(src)
webbing.webbing_time *= web_speed
webbing.Grant(src)
ai_controller?.set_blackboard_key(BB_SPIDER_WEB_ACTION, webbing)
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm
index 77ee38ed7c3..bbeb2b28bb5 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm
@@ -2,7 +2,7 @@
* Sets a directive to be given to all future spiders created by the user.
* This will be overwritten if used again.
*/
-/datum/action/set_spider_directive
+/datum/action/cooldown/mob_cooldown/set_spider_directive
name = "Set Directive"
desc = "Set a directive for your future children to follow."
button_icon = 'icons/mob/actions/actions_animal.dmi'
@@ -10,26 +10,27 @@
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"
check_flags = AB_CHECK_CONSCIOUS
+ cooldown_time = 0
+ melee_cooldown_time = 0
+ shared_cooldown = NONE
+ click_to_activate = FALSE
/// Current directive to apply
var/current_directive = ""
-/datum/action/set_spider_directive/Trigger(trigger_flags)
- . = ..()
- if(!.)
- return
+/datum/action/cooldown/mob_cooldown/set_spider_directive/Activate(atom/target)
var/new_directive = tgui_input_text(owner, "Enter the new directive", "Create directive", "[current_directive]")
if(isnull(new_directive) || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE))
- return FALSE
+ return
current_directive = new_directive
message_admins("[ADMIN_LOOKUPFLW(owner)] set its directive to: '[current_directive]'.")
owner.log_message("set its directive to: '[current_directive]'.", LOG_GAME)
- return TRUE
+ StartCooldown()
/**
* Sends a message to all currently living spiders.
*/
-/datum/action/command_spiders
+/datum/action/cooldown/mob_cooldown/command_spiders
name = "Command"
desc = "Send a command to all living spiders."
button_icon = 'icons/mob/actions/actions_animal.dmi'
@@ -37,18 +38,17 @@
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"
check_flags = AB_CHECK_CONSCIOUS
+ cooldown_time = 0
+ melee_cooldown_time = 0
+ shared_cooldown = NONE
+ click_to_activate = FALSE
-/datum/action/command_spiders/Trigger(trigger_flags)
- . = ..()
- if(!.)
- return
-
+/datum/action/cooldown/mob_cooldown/command_spiders/Activate(trigger_flags)
var/input = tgui_input_text(owner, "Input a command for your legions to follow.", "Command")
if(!input || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE))
- return FALSE
-
+ return
spider_command(owner, input)
- return TRUE
+ StartCooldown()
/**
* Sends a big message to all spiders from the target.
@@ -58,9 +58,7 @@
* * user - The spider sending the message
* * message - The message to be sent
*/
-/datum/action/command_spiders/proc/spider_command(mob/living/user, message)
- if(!message)
- return
+/datum/action/cooldown/mob_cooldown/command_spiders/proc/spider_command(mob/living/user, message)
var/my_message = format_message(user,message)
for(var/mob/living/basic/spider as anything in GLOB.spidermobs)
to_chat(spider, my_message)
@@ -72,17 +70,17 @@
/**
* Formats the string to have an appropiate size and text color
*/
-/datum/action/command_spiders/proc/format_message(mob/living/user, message)
+/datum/action/cooldown/mob_cooldown/command_spiders/proc/format_message(mob/living/user, message)
return span_spiderbroodmother("Command from [user]: [message]")
/**
* Sends a small message to all currently living spiders.
*/
-/datum/action/command_spiders/communication_spiders
+/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders
name = "Communication"
desc = "Send a report to all living spiders."
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "message"
-/datum/action/command_spiders/communication_spiders/format_message(mob/living/user, message)
+/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders/format_message(mob/living/user, message)
return span_spiderscout("Report from [user]: [message]")
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm
index cd86a93f75d..28a543be3ac 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm
@@ -1,4 +1,4 @@
-/datum/action/lay_eggs
+/datum/action/cooldown/mob_cooldown/lay_eggs
name = "Lay Eggs"
desc = "Lay a cluster of eggs, which will soon grow into a normal spider."
button_icon = 'icons/mob/actions/actions_animal.dmi'
@@ -6,22 +6,26 @@
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
+ cooldown_time = 0
+ melee_cooldown_time = 0
+ shared_cooldown = NONE
+ click_to_activate = FALSE
///How long it takes for a broodmother to lay eggs.
var/egg_lay_time = 4 SECONDS
///The type of egg we create
var/egg_type = /obj/effect/mob_spawn/ghost_role/spider
-/datum/action/lay_eggs/Grant(mob/grant_to)
+/datum/action/cooldown/mob_cooldown/lay_eggs/Grant(mob/grant_to)
. = ..()
if (!owner)
return
RegisterSignals(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_status_on_signal))
-/datum/action/lay_eggs/Remove(mob/removed_from)
+/datum/action/cooldown/mob_cooldown/lay_eggs/Remove(mob/removed_from)
. = ..()
UnregisterSignal(removed_from, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED))
-/datum/action/lay_eggs/IsAvailable(feedback = FALSE)
+/datum/action/cooldown/mob_cooldown/lay_eggs/IsAvailable(feedback = FALSE)
. = ..()
if(!.)
return FALSE
@@ -36,30 +40,28 @@
return FALSE
return TRUE
-/datum/action/lay_eggs/Trigger(trigger_flags)
- . = ..()
- if (!.)
- return
-
+/datum/action/cooldown/mob_cooldown/lay_eggs/Activate(atom/target)
owner.balloon_alert_to_viewers("laying eggs...")
- if(do_after(owner, egg_lay_time, target = get_turf(owner), interaction_key = DOAFTER_SOURCE_SPIDER))
- var/obj/structure/spider/eggcluster/eggs = locate() in get_turf(owner)
- if(eggs)
- owner.balloon_alert(owner, "already eggs here!")
- else
- lay_egg()
- else
+ StartCooldown(360 SECONDS, 360 SECONDS)
+ if(!do_after(owner, egg_lay_time, target = get_turf(owner), interaction_key = DOAFTER_SOURCE_SPIDER))
owner.balloon_alert(owner, "interrupted!")
- build_all_button_icons(UPDATE_BUTTON_STATUS)
+ StartCooldown(0 SECONDS)
+ return
+ var/obj/structure/spider/eggcluster/eggs = locate() in get_turf(owner)
+ if(eggs)
+ owner.balloon_alert(owner, "already eggs here!")
+ else
+ lay_egg()
+ StartCooldown()
-/datum/action/lay_eggs/proc/lay_egg()
+/datum/action/cooldown/mob_cooldown/lay_eggs/proc/lay_egg()
var/obj/effect/mob_spawn/ghost_role/spider/new_eggs = new egg_type(get_turf(owner))
new_eggs.faction = owner.faction
- var/datum/action/set_spider_directive/spider_directive = locate() in owner.actions
+ var/datum/action/cooldown/mob_cooldown/set_spider_directive/spider_directive = locate() in owner.actions
if (spider_directive)
new_eggs.directive = spider_directive.current_directive
-/datum/action/lay_eggs/enriched
+/datum/action/cooldown/mob_cooldown/lay_eggs/enriched
name = "Lay Enriched Eggs"
desc = "Lay a cluster of eggs, which will soon grow into a greater spider. Requires you drain a human per cluster of these eggs."
button_icon_state = "lay_enriched_eggs"
@@ -67,7 +69,7 @@
/// How many charges we have to make eggs
var/charges = 0
-/datum/action/lay_eggs/enriched/IsAvailable(feedback = FALSE)
+/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/IsAvailable(feedback = FALSE)
. = ..()
if (!.)
return FALSE
@@ -77,6 +79,6 @@
return FALSE
return TRUE
-/datum/action/lay_eggs/enriched/lay_egg()
+/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/lay_egg()
charges--
return ..()
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm
index 8c061f02907..b7062a2dc17 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm
@@ -1,5 +1,5 @@
/// Make a sticky web under yourself for area fortification
-/datum/action/cooldown/lay_web
+/datum/action/cooldown/mob_cooldown/lay_web
name = "Spin Web"
desc = "Spin a web to slow down potential prey."
button_icon = 'icons/mob/actions/actions_animal.dmi'
@@ -9,20 +9,22 @@
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
cooldown_time = 0 SECONDS
melee_cooldown_time = 0
+ shared_cooldown = NONE
+ click_to_activate = FALSE
/// How long it takes to lay a web
var/webbing_time = 4 SECONDS
-/datum/action/cooldown/lay_web/Grant(mob/grant_to)
+/datum/action/cooldown/mob_cooldown/lay_web/Grant(mob/grant_to)
. = ..()
if (!owner)
return
RegisterSignals(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_status_on_signal))
-/datum/action/cooldown/lay_web/Remove(mob/removed_from)
+/datum/action/cooldown/mob_cooldown/lay_web/Remove(mob/removed_from)
. = ..()
UnregisterSignal(removed_from, list(COMSIG_MOVABLE_MOVED, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED))
-/datum/action/cooldown/lay_web/IsAvailable(feedback = FALSE)
+/datum/action/cooldown/mob_cooldown/lay_web/IsAvailable(feedback = FALSE)
. = ..()
if(!.)
return FALSE
@@ -45,10 +47,10 @@
return TRUE
/// Returns true if there's a web we can't put stuff on in our turf
-/datum/action/cooldown/lay_web/proc/obstructed_by_other_web()
+/datum/action/cooldown/mob_cooldown/lay_web/proc/obstructed_by_other_web()
return !!(locate(/obj/structure/spider/stickyweb) in get_turf(owner))
-/datum/action/cooldown/lay_web/Activate()
+/datum/action/cooldown/mob_cooldown/lay_web/Activate()
. = ..()
var/turf/spider_turf = get_turf(owner)
var/obj/structure/spider/stickyweb/web = locate() in spider_turf
@@ -65,86 +67,86 @@
build_all_button_icons()
/// Creates a web in the current turf
-/datum/action/cooldown/lay_web/proc/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+/datum/action/cooldown/mob_cooldown/lay_web/proc/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/stickyweb(target_turf)
/// Variant for genetics, created webs only allow the creator passage
-/datum/action/cooldown/lay_web/genetic
+/datum/action/cooldown/mob_cooldown/lay_web/genetic
desc = "Spin a web. Only you will be able to traverse your web easily."
cooldown_time = 4 SECONDS //the same time to lay a web
-/datum/action/cooldown/lay_web/genetic/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+/datum/action/cooldown/mob_cooldown/lay_web/genetic/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/stickyweb/genetic(target_turf, owner)
/// Variant which allows webs to be stacked into walls
-/datum/action/cooldown/lay_web/sealer
+/datum/action/cooldown/mob_cooldown/lay_web/sealer
desc = "Spin a web to slow down potential prey. Webs can be stacked to make solid structures."
-/datum/action/cooldown/lay_web/sealer/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+/datum/action/cooldown/mob_cooldown/lay_web/sealer/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
if (existing_web)
qdel(existing_web)
new /obj/structure/spider/stickyweb/sealed(target_turf)
return
new /obj/structure/spider/stickyweb(target_turf)
-/datum/action/cooldown/lay_web/sealer/obstructed_by_other_web()
+/datum/action/cooldown/mob_cooldown/lay_web/sealer/obstructed_by_other_web()
return !!(locate(/obj/structure/spider/stickyweb/sealed) in get_turf(owner))
-/datum/action/cooldown/lay_web/solid_web
+/datum/action/cooldown/mob_cooldown/lay_web/solid_web
name = "Spin Solid Web"
desc = "Spin a web to obstruct potential prey."
button_icon_state = "lay_solid_web"
cooldown_time = 0 SECONDS
webbing_time = 5 SECONDS
-/datum/action/cooldown/lay_web/solid_web/obstructed_by_other_web()
+/datum/action/cooldown/mob_cooldown/lay_web/solid_web/obstructed_by_other_web()
return !!(locate(/obj/structure/spider/solid) in get_turf(owner))
-/datum/action/cooldown/lay_web/solid_web/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+/datum/action/cooldown/mob_cooldown/lay_web/solid_web/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/solid(target_turf)
-/datum/action/cooldown/lay_web/web_passage
+/datum/action/cooldown/mob_cooldown/lay_web/web_passage
name = "Spin Web Passage"
desc = "Spin a web passage to hide the nest from prey view."
button_icon_state = "lay_web_passage"
cooldown_time = 0 SECONDS
webbing_time = 4 SECONDS
-/datum/action/cooldown/lay_web/web_passage/obstructed_by_other_web()
+/datum/action/cooldown/mob_cooldown/lay_web/web_passage/obstructed_by_other_web()
return !!(locate(/obj/structure/spider/passage) in get_turf(owner))
-/datum/action/cooldown/lay_web/web_passage/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+/datum/action/cooldown/mob_cooldown/lay_web/web_passage/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/passage(target_turf)
-/datum/action/cooldown/lay_web/sticky_web
+/datum/action/cooldown/mob_cooldown/lay_web/sticky_web
name = "Spin Sticky Web"
desc = "Spin a sticky web to trap intruders."
button_icon_state = "lay_sticky_web"
cooldown_time = 20 SECONDS
webbing_time = 3 SECONDS
-/datum/action/cooldown/lay_web/sticky_web/obstructed_by_other_web()
+/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/obstructed_by_other_web()
return !!(locate(/obj/structure/spider/sticky) in get_turf(owner))
-/datum/action/cooldown/lay_web/sticky_web/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/sticky(target_turf)
-/datum/action/cooldown/lay_web/web_spikes
+/datum/action/cooldown/mob_cooldown/lay_web/web_spikes
name = "Spin Web Spikes"
desc = "Extrude silk spikes to dissuade invaders."
button_icon_state = "lay_web_spikes"
cooldown_time = 40 SECONDS
webbing_time = 3 SECONDS
-/datum/action/cooldown/lay_web/web_spikes/obstructed_by_other_web()
+/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/obstructed_by_other_web()
return !!(locate(/obj/structure/spider/spikes) in get_turf(owner))
-/datum/action/cooldown/lay_web/web_spikes/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/spikes(target_turf)
/// Makes a solid statue which you can use as cover
-/datum/action/cooldown/web_effigy
+/datum/action/cooldown/mob_cooldown/web_effigy
name = "Web Effigy"
desc = "Shed durable webbing in the shape of your body. It is intimidating and can obstruct attackers. \
It will decay after some time."
@@ -154,8 +156,10 @@
overlay_icon_state = "bg_alien_border"
cooldown_time = 60 SECONDS
melee_cooldown_time = 0
+ shared_cooldown = NONE
+ click_to_activate = FALSE
-/datum/action/cooldown/web_effigy/IsAvailable(feedback = FALSE)
+/datum/action/cooldown/mob_cooldown/web_effigy/IsAvailable(feedback = FALSE)
. = ..()
if(!.)
return FALSE
@@ -165,6 +169,6 @@
return FALSE
return TRUE
-/datum/action/cooldown/web_effigy/Activate()
+/datum/action/cooldown/mob_cooldown/web_effigy/Activate()
new /obj/structure/spider/effigy(get_turf(owner))
return ..()
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm
index 2c49f5747c7..536f09cef8d 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm
@@ -1,4 +1,4 @@
-/datum/action/cooldown/wrap
+/datum/action/cooldown/mob_cooldown/wrap
name = "Wrap"
desc = "Wrap something or someone in a cocoon. \
If it's a human or similar species, you'll also consume them. \
@@ -11,20 +11,21 @@
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
click_to_activate = TRUE
ranged_mousepointer = 'icons/effects/mouse_pointers/wrap_target.dmi'
+ shared_cooldown = NONE
/// The time it takes to wrap something.
var/wrap_time = 5 SECONDS
-/datum/action/cooldown/wrap/Grant(mob/grant_to)
+/datum/action/cooldown/mob_cooldown/wrap/Grant(mob/grant_to)
. = ..()
if (!owner)
return
RegisterSignals(owner, list(COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_status_on_signal))
-/datum/action/cooldown/wrap/Remove(mob/removed_from)
+/datum/action/cooldown/mob_cooldown/wrap/Remove(mob/removed_from)
. = ..()
UnregisterSignal(removed_from, list(COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED))
-/datum/action/cooldown/wrap/IsAvailable(feedback = FALSE)
+/datum/action/cooldown/mob_cooldown/wrap/IsAvailable(feedback = FALSE)
. = ..()
if(!. || owner.incapacitated())
return FALSE
@@ -34,7 +35,7 @@
return FALSE
return TRUE
-/datum/action/cooldown/wrap/set_click_ability(mob/on_who)
+/datum/action/cooldown/mob_cooldown/wrap/set_click_ability(mob/on_who)
. = ..()
if(!.)
return
@@ -43,7 +44,7 @@
button_icon_state = "wrap_1"
build_all_button_icons()
-/datum/action/cooldown/wrap/unset_click_ability(mob/on_who, refund_cooldown = TRUE)
+/datum/action/cooldown/mob_cooldown/wrap/unset_click_ability(mob/on_who, refund_cooldown = TRUE)
. = ..()
if(!.)
return
@@ -53,7 +54,7 @@
button_icon_state = "wrap_0"
build_all_button_icons()
-/datum/action/cooldown/wrap/Activate(atom/to_wrap)
+/datum/action/cooldown/mob_cooldown/wrap/Activate(atom/to_wrap)
if(!owner.Adjacent(to_wrap))
owner.balloon_alert(owner, "must be closer!")
return FALSE
@@ -73,7 +74,7 @@
INVOKE_ASYNC(src, PROC_REF(cocoon), to_wrap)
return TRUE
-/datum/action/cooldown/wrap/proc/cocoon(atom/movable/to_wrap)
+/datum/action/cooldown/mob_cooldown/wrap/proc/cocoon(atom/movable/to_wrap)
owner.visible_message(
span_notice("[owner] begins to secrete a sticky substance around [to_wrap]."),
span_notice("You begin wrapping [to_wrap] into a cocoon."),
@@ -83,14 +84,14 @@
else
owner.balloon_alert(owner, "interrupted!")
-/datum/action/cooldown/wrap/proc/wrap_target(atom/movable/to_wrap)
+/datum/action/cooldown/mob_cooldown/wrap/proc/wrap_target(atom/movable/to_wrap)
var/obj/structure/spider/cocoon/casing = new(to_wrap.loc)
if(isliving(to_wrap))
var/mob/living/living_wrapped = to_wrap
// You get a point every time you consume a living player, even if they've been consumed before.
// You only get a point for any individual corpse once, so you can't keep breaking it out and eating it again.
if(ishuman(living_wrapped) && (living_wrapped.stat != DEAD || !HAS_TRAIT(living_wrapped, TRAIT_SPIDER_CONSUMED)))
- var/datum/action/lay_eggs/enriched/egg_power = locate() in owner.actions
+ var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/egg_power = locate() in owner.actions
if(egg_power)
egg_power.charges++
egg_power.build_all_button_icons()
diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm
index 4027575ac01..4e100fc0af4 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm
@@ -80,7 +80,7 @@
melee_damage_upper = 4
speed = 0.7
web_speed = 0.5
- web_type = /datum/action/cooldown/lay_web/sealer
+ web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
///The health HUD applied to the mob.
var/health_hud = DATA_HUD_MEDICAL_ADVANCED
@@ -112,7 +112,7 @@
melee_damage_upper = 1
speed = 0.7
web_speed = 0.25
- web_type = /datum/action/cooldown/lay_web/sealer
+ web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
poison_per_bite = 2
poison_type = /datum/reagent/toxin/acid
@@ -151,7 +151,7 @@
melee_damage_upper = 10
speed = 0.7
web_speed = 0.5
- web_type = /datum/action/cooldown/lay_web/sealer
+ web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
/// Will differentiate into the "viper" giant spider.
/mob/living/basic/spider/growing/young/viper