diff --git a/code/modules/mob/living/silicon/ai/ai_programs.dm b/code/modules/mob/living/silicon/ai/ai_programs.dm
index 827e8714089..704dfd71eb9 100644
--- a/code/modules/mob/living/silicon/ai/ai_programs.dm
+++ b/code/modules/mob/living/silicon/ai/ai_programs.dm
@@ -318,7 +318,9 @@
camera_beam(target, "rped_upgrade", 'icons/effects/effects.dmi', 5)
/datum/spell/ai_spell/ranged/rgb_lighting/on_purchase_upgrade()
- cooldown_handler.recharge_duration = base_cooldown - (spell_level * 5)
+ cooldown_handler.recharge_duration = max(base_cooldown - (spell_level * 5 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
/// Power Shunt - Recharges things from your SMES
/datum/ai_program/power_shunt
@@ -391,7 +393,9 @@
/datum/spell/ai_spell/ranged/power_shunt/on_purchase_upgrade()
power_sent = min(10000, 2500 + (spell_level * 2500))
- cooldown_handler.recharge_duration = max(min(base_cooldown, base_cooldown - (max(spell_level - 3, 0) * 30)), cooldown_min)
+ cooldown_handler.recharge_duration = max(base_cooldown - (max(spell_level - 3, 0) * 30 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
/// Repair Nanites - Uses large numbers of nanites to repair things
/datum/ai_program/repair_nanites
@@ -450,7 +454,9 @@
camera_beam(target, "medbeam", 'icons/effects/beam.dmi', 10)
/datum/spell/ai_spell/ranged/repair_nanites/on_purchase_upgrade()
- cooldown_handler.recharge_duration = max(min(base_cooldown, base_cooldown - (max(spell_level - 3, 0) * 30)), cooldown_min)
+ cooldown_handler.recharge_duration = max(base_cooldown - (max(spell_level - 3, 0) * 30 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
/// Universal Adapter - Unlocks usage of repair nanites and power shunt for IPCs
/datum/ai_program/universal_adapter
@@ -590,7 +596,9 @@
addtimer(CALLBACK(nanofrost, TYPE_PROC_REF(/obj/effect/nanofrost_container, Smoke)), 5 SECONDS)
/datum/spell/ai_spell/ranged/extinguishing_system/on_purchase_upgrade()
- cooldown_handler.recharge_duration = max(min(base_cooldown, base_cooldown - (spell_level * 15)), 30 SECONDS)
+ cooldown_handler.recharge_duration = max(base_cooldown - (spell_level * 15 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
/// Bluespace Miner Subsystem - Makes money for science, at the cost of extra power drain
/datum/ai_program/bluespace_miner
@@ -699,7 +707,9 @@
camera_beam(target, "rped_upgrade", 'icons/effects/effects.dmi', 5)
/datum/spell/ai_spell/ranged/light_repair/on_purchase_upgrade()
- cooldown_handler.recharge_duration = base_cooldown - (spell_level * 5)
+ cooldown_handler.recharge_duration = max(base_cooldown - (spell_level * 5 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
/// Nanosurgeon Deployment - Uses large numbers of nanites to heal things
/datum/ai_program/nanosurgeon_deployment
@@ -754,7 +764,9 @@
revert_cast()
/datum/spell/ai_spell/ranged/nanosurgeon_deployment/on_purchase_upgrade()
- cooldown_handler.recharge_duration = max(min(base_cooldown, base_cooldown - (max(spell_level - 3, 0) * 30)), cooldown_min)
+ cooldown_handler.recharge_duration = max(base_cooldown - (max(spell_level - 3, 0) * 30 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
/// Enhanced Door Controls - Reduces delay in bolting and shocking doors
/datum/ai_program/enhanced_doors
@@ -854,7 +866,9 @@
upgraded = TRUE
/datum/spell/ai_spell/research_subsystem/on_purchase_upgrade()
- cooldown_handler.recharge_duration = max(min(base_cooldown, base_cooldown - (spell_level * 30)), cooldown_min)
+ cooldown_handler.recharge_duration = max(base_cooldown - (max(spell_level - 3, 0) * 30 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
// Emergency Sealant - Patches holes with metal foam
/datum/ai_program/emergency_sealant
@@ -901,6 +915,9 @@
/datum/spell/ai_spell/ranged/emergency_sealant/on_purchase_upgrade()
cooldown_handler.recharge_duration = max(min(base_cooldown, base_cooldown - (spell_level * 30)), 30 SECONDS)
+ cooldown_handler.recharge_duration = max(base_cooldown - (spell_level * 30 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
// Holosign Deployment - Deploys a holosign on the selected turf
/datum/ai_program/holosign_displayer
@@ -984,7 +1001,7 @@
ranged_mousepointer = 'icons/mecha/mecha_mouse.dmi'
auto_use_uses = FALSE
base_cooldown = 30 SECONDS
- cooldown_min = 5 SECONDS
+ cooldown_min = 15 SECONDS
level_max = 10
selection_activated_message = "You prepare to honk..."
selection_deactivated_message = "You reduce the amount of humor in your subsystems."
@@ -1008,7 +1025,9 @@
AI.play_sound_remote(target, 'sound/items/bikehorn.ogg', 50)
/datum/spell/ai_spell/ranged/honk_subsystem/on_purchase_upgrade()
- cooldown_handler.recharge_duration = max(base_cooldown - (spell_level * 15) SECONDS, 15 SECONDS)
+ cooldown_handler.recharge_duration = max(base_cooldown - (spell_level * 15 SECONDS), cooldown_min)
+ if(cooldown_handler.is_on_cooldown())
+ cooldown_handler.start_recharge()
// Enhanced Tracking System - Select a target. Get alerted after a delay whenever that target enters camera sight
/datum/ai_program/enhanced_tracker