diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 4715c3bed3..c9d471e82a 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -492,13 +492,13 @@
return TRUE
//TODO: Better floating
-/atom/movable/proc/float(on)
+/atom/movable/proc/float(on, float_height)
if(throwing)
return
if(on && (!(movement_type & FLOATING) || floating_need_update))
- animate(src, pixel_y = pixel_y + 2, time = 10, loop = -1)
+ animate(src, pixel_y = pixel_y + 2 + float_height, time = 10, loop = -1)
sleep(10)
- animate(src, pixel_y = pixel_y - 2, time = 10, loop = -1)
+ animate(src, pixel_y = pixel_y - 2 - float_height, time = 10, loop = -1)
if(!(movement_type & FLOATING))
setMovetype(movement_type | FLOATING)
else if (!on && movement_type & FLOATING)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 1c75f1e533..dc84006c2d 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -11,7 +11,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
name = "item"
icon = 'icons/obj/items_and_weapons.dmi'
blocks_emissive = EMISSIVE_BLOCK_GENERIC
-
+
attack_hand_speed = 0
attack_hand_is_action = FALSE
attack_hand_unwieldlyness = 0
@@ -467,6 +467,21 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
melee_attack_chain(usr, over)
usr.FlushCurrentAction()
return TRUE //returning TRUE as a "is this overridden?" flag
+ if(isrevenant(usr))
+ var/mob/living/simple_animal/revenant/spooker = usr
+ if(!anchored && !spooker.telekinesis_cooldown)
+ spooker.change_essence_amount(-5, FALSE, "telekinesis")
+ spooker.stun(10)
+ spooker.reveal(20)
+ spooker.telekinesis_cooldown = TRUE
+ float(TRUE, 2)
+ sleep(10)
+ throw_at(src_location)
+ new /obj/effect/temp_visual/telekinesis(get_turf(src))
+ addtimer(CALLBACK(src, /atom/movable.proc/float, FALSE), 2)
+ addtimer(CALLBACK(spooker, /mob/living/simple_animal/revenant.proc/telekinesis_cooldown_end), 30)
+ return
+
if(!Adjacent(usr) || !over.Adjacent(usr))
return // should stop you from dragging through windows
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index f5ebcffe35..1a45663ff7 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -72,6 +72,7 @@
var/list/drained_mobs = list() //Cannot harvest the same mob twice
var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. //TODO, add objective for getting a perfect soul(s?)
var/generated_objectives_and_spells = FALSE
+ var/telekinesis_cooldown
/mob/living/simple_animal/revenant/Initialize(mapload)
. = ..()
@@ -93,13 +94,16 @@
/mob/living/simple_animal/revenant/Login()
..()
- to_chat(src, "You are a revenant.")
- to_chat(src, "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.")
- to_chat(src, "You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds.")
- to_chat(src, "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable.")
- to_chat(src, "To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities.")
- to_chat(src, "You do not remember anything of your past lives, nor will you remember anything about this one after your death.")
- to_chat(src, "Be sure to read the wiki page to learn more.")
+ var/revenant_greet
+ revenant_greet += "You are a revenant."
+ revenant_greet += "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant."
+ revenant_greet += "You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds."
+ revenant_greet += "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable."
+ revenant_greet += "To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities."
+ revenant_greet += "You do not remember anything of your past lives, nor will you remember anything about this one after your death."
+ revenant_greet += "Be sure to read the wiki page to learn more."
+ revenant_greet += "You are also able to telekinetically throw objects by clickdragging them."
+ to_chat(src, revenant_greet)
if(!generated_objectives_and_spells)
generated_objectives_and_spells = TRUE
mind.assigned_role = ROLE_REVENANT
@@ -317,6 +321,12 @@
to_chat(src, "Lost [essence_amt]E[source ? " from [source]":""].")
return 1
+/mob/living/simple_animal/revenant/proc/telekinesis_cooldown_end()
+ if(!telekinesis_cooldown)
+ CRASH("telekinesis_cooldown_end ran when telekinesis_cooldown on [src] was false")
+ else
+ telekinesis_cooldown = FALSE
+
/mob/living/simple_animal/revenant/proc/death_reset()
revealed = FALSE
unreveal_time = 0