anchor.diff:  /obj/item/clothing/suit/armor/reactive/stealth
   	name = "reactive stealth armor"
   	desc = "An experimental suit of armor that renders the wearer invisible on detection of imminent harm, and creates a decoy that runs away from the owner. You can't fight what you can't see."
  -
  -/obj/item/clothing/suit/armor/reactive/stealth/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
  -	if(!active)
  -		return FALSE
  -	if(prob(hit_reaction_chance))
  -		if(world.time < reactivearmor_cooldown)
  -			owner.visible_message("<span class='danger'>The reactive stealth system on [owner] activates, but is still recharging its holographic emitters!</span>")
  -			return
  -		var/mob/living/simple_animal/hostile/illusion/escape/E = new(owner.loc)
  -		E.Copy_Parent(owner, 50)
  -		E.GiveTarget(owner) //so it starts running right away
  -		E.Goto(owner, E.move_to_delay, E.minimum_distance)
  -		owner.alpha = 0
  -		owner.visible_message("<span class='danger'>[owner] is hit by [attack_text] in the chest!</span>") //We pretend to be hit, since blocking it would stop the message otherwise
  -		addtimer(VARSET_CALLBACK(owner, alpha, initial(owner.alpha)), 4 SECONDS)
  -		reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
  -		return TRUE
  +	cooldown_message = "<span class='danger'>The reactive stealth system activates, but is not charged enough to fully cloak!</span>"
  +	emp_message = "<span class='warning'>The reactive stealth armor's threat assessment system crashes...</span>"
  +	///when triggering while on cooldown will only flicker the alpha slightly. this is how much it removes.
  +	var/cooldown_alpha_removal = 50
  +	///cooldown alpha flicker- how long it takes to return to the original alpha
  +	var/cooldown_animation_time = 3 SECONDS
  +	///how long they will be fully stealthed
  +	var/stealth_time = 4 SECONDS
  +	///how long it will animate back the alpha to the original
  +	var/animation_time = 2 SECONDS
  +	var/in_stealth = FALSE
  +
  +/obj/item/clothing/suit/armor/reactive/stealth/cooldown_activation(mob/living/carbon/human/owner)
  +	if(in_stealth)
  +		return //we don't want the cooldown message either)
  +	owner.alpha = max(0, owner.alpha - cooldown_alpha_removal)
  +	animate(owner, alpha = initial(owner.alpha), time = cooldown_animation_time)
  +	..()
  +
  +/obj/item/clothing/suit/armor/reactive/stealth/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
  +	var/mob/living/simple_animal/hostile/illusion/escape/decoy = new(owner.loc)
  +	decoy.Copy_Parent(owner, 50)
  +	decoy.GiveTarget(owner) //so it starts running right away
  +	decoy.Goto(owner, decoy.move_to_delay, decoy.minimum_distance)
  +	owner.alpha = 0
  +	in_stealth = TRUE
  +	owner.visible_message("<span class='danger'>[owner] is hit by [attack_text] in the chest!</span>") //We pretend to be hit, since blocking it would stop the message otherwise
  +	addtimer(CALLBACK(src, .proc/end_stealth, owner), stealth_time)
  +	reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
  +	return TRUE
  +
  +/obj/item/clothing/suit/armor/reactive/stealth/proc/end_stealth(mob/living/carbon/human/owner)
  +	in_stealth = FALSE
  +	animate(owner, alpha = initial(owner.alpha), time = animation_time)
  +
  +/obj/item/clothing/suit/armor/reactive/stealth/emp_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
  +	if(!isliving(hitby))
  +		return FALSE //it just doesn't activate
  +	var/mob/living/attacker = hitby
  +	owner.visible_message("<span class='danger'>[src] activates, cloaking the wrong person!</span>")
  +	attacker.alpha = 0
  +	addtimer(VARSET_CALLBACK(attacker, alpha, initial(attacker.alpha)), 4 SECONDS)
  +	reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
  +	return FALSE
   
   //Tesla
   
  
positive.code: 	add_fingerprint(user)
  	return
  
  /obj/item/clothing/suit/armor/reactive/emp_act(severity)
  	. = ..()
  	if(. & EMP_PROTECT_SELF)
  		return
  	active = FALSE
  	icon_state = "reactiveoff"
  	inhand_icon_state = "reactiveoff"
  	reactivearmor_cooldown = world.time + 200
  
  //When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!)
  /obj/item/clothing/suit/armor/reactive/teleport
  	name = "reactive teleport armor"
  	desc = "Someone separated our Research Director from his own head!"
  	var/tele_range = 6
  	var/rad_amount= 15
  
  /obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
  	if(!active)
  		return FALSE
  	if(prob(hit_reaction_chance))
  		if(world.time < reactivearmor_cooldown)
  			owner.visible_message("<span class='danger'>The reactive teleport system is still recharging! It fails to teleport [owner]!</span>")
  			return FALSE
  		owner.visible_message("<span class='danger'>The reactive teleport system flings [owner] clear of [attack_text], shutting itself off in the process!</span>")
  		playsound(get_turf(owner),'sound/magic/blink.ogg', 100, TRUE)
  		do_teleport(owner, get_turf(owner), tele_range, no_effects = TRUE, channel = TELEPORT_CHANNEL_BLUESPACE)
  		owner.rad_act(rad_amount)
  		reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
  		return TRUE
  	return FALSE
  
  //Fire
  
  /obj/item/clothing/suit/armor/reactive/fire
  	name = "reactive incendiary armor"
  	desc = "An experimental suit of armor with a reactive sensor array rigged to a flame emitter. For the stylish pyromaniac."
  
  /obj/item/clothing/suit/armor/reactive/fire/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
  	if(!active)
  		return FALSE
  	if(prob(hit_reaction_chance))
  		if(world.time < reactivearmor_cooldown)
  			owner.visible_message("<span class='danger'>The reactive incendiary armor on [owner] activates, but fails to send out flames as it is still recharging its flame jets!</span>")
  			return FALSE
  		owner.visible_message("<span class='danger'>[src] blocks [attack_text], sending out jets of flame!</span>")
  		playsound(get_turf(owner),'sound/magic/fireball.ogg', 100, TRUE)
  		for(var/mob/living/carbon/C in range(6, owner))
  			if(C != owner)
  				C.adjust_fire_stacks(8)
  				C.IgniteMob()
  		owner.set_fire_stacks(-20)
  		reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
  		return TRUE
  	return FALSE
  
  //Stealth
  
negative.code: 	name = "reactive tesla armor"
  	desc = "An experimental suit of armor with sensitive detectors hooked up to a huge capacitor grid, with emitters strutting out of it. Zap."
  	siemens_coefficient = -1
  	cooldown_message = "<span class='danger'>The tesla capacitors on the reactive tesla armor are still recharging! The armor merely emits some sparks.</span>"
  	cooldown_message = "<span class='warning'>The tesla capacitors beep ominously for a moment.</span>"
  	var/zap_power = 25000
  	var/zap_range = 20
  	var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE
  