diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult.dm b/code/datums/gamemode/factions/bloodcult/bloodcult.dm
index 67c307a9b3d..086f222379a 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult.dm
@@ -24,6 +24,9 @@ var/veil_thickness = CULT_PROLOGUE
for (var/obj/structure/cult/spire/S in cult_spires)
S.upgrade()
+ for (var/obj/effect/rune/R in rune_list)
+ R.update_icon()
+
/proc/spawn_bloodstones(var/turf/source = null)
//Called at the beginning of ACT III, this is basically the cult's declaration of war on the crew
//Spawns 4 structures, one in each quarters of the station
@@ -234,6 +237,9 @@ var/veil_thickness = CULT_PROLOGUE
for (var/obj/structure/cult/spire/S in cult_spires)
S.upgrade()
+ for (var/obj/effect/rune/R in rune_list)
+ R.update_icon()
+
if (istype(new_obj,/datum/objective/bloodcult_bloodbath))
var/datum/objective/bloodcult_bloodbath/O = new_obj
O.max_bloodspill = max(O.max_bloodspill,bloody_floors.len)
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
index 2638230b9ae..69a6db3d6be 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
@@ -72,16 +72,19 @@
user.whisper(text)
/datum/rune_spell/proc/pre_cast()
- var/mob/living/user = activator
+ //checking whether we're in the proper Act
+ if (Act_restriction > veil_thickness)
+ to_chat(activator, "The veil is still too thick for you to draw power from this rune.")
+ return
//checking whether we're casting from a rune or a talisman.
if (istype (spell_holder,/obj/effect/rune))
- if ((rune_flags & RUNE_STAND) && (user.loc != spell_holder.loc))
+ if ((rune_flags & RUNE_STAND) && (activator.loc != spell_holder.loc))
abort(RITUALABORT_STAND)
else
- invoke(user,invocation)
+ invoke(activator,invocation)
cast()
else if (istype (spell_holder,/obj/item/weapon/talisman))
- invoke(user,invocation,1)//talisman incantations are whispered
+ invoke(activator,invocation,1)//talisman incantations are whispered
cast_talisman()
/datum/rune_spell/proc/midcast(var/mob/add_cultist)
diff --git a/code/game/objects/items/weapons/null_rod.dm b/code/game/objects/items/weapons/null_rod.dm
index 718e08660cd..fa3493ee2dc 100644
--- a/code/game/objects/items/weapons/null_rod.dm
+++ b/code/game/objects/items/weapons/null_rod.dm
@@ -68,15 +68,31 @@
*/
..() //Whack their shit regardless. It's an obsidian rod, it breaks skulls
-/*
-/obj/item/weapon/nullrod/afterattack(atom/A, mob/user as mob, prox_flag, params)
+
+/obj/item/weapon/nullrod/afterattack(var/atom/A, var/mob/user, var/prox_flag, var/params)
if(!prox_flag)
return
- user.delayNextAttack(8)
if(istype(A, /turf/simulated/floor))
- to_chat(user, "You hit the floor with the [src].")
- call(/obj/effect/rune/proc/revealrunes)(src)
-*/
+ var/atom/movable/overlay/animation = anim(target = A, a_icon = 'icons/effects/96x96.dmi', a_icon_state = "nullcheck", lay = NARSIE_GLOW, offX = -WORLD_ICON_SIZE, offY = -WORLD_ICON_SIZE, plane = LIGHTING_PLANE)
+ animation.alpha = 0
+ animate(animation, alpha = 255, time = 2)
+ animate(alpha = 0, time = 3)
+ user.delayNextAttack(8)
+ to_chat(user, "You hit \the [A] with \the [src].")
+ var/found = 0
+ for(var/obj/effect/rune/R in range(1,A))
+ found = 1
+ R.reveal()
+ if (found)
+ to_chat(user, "Arcane markings suddenly glow from underneath a thin layer of dust!")
+ found = 0
+ for(var/obj/structure/cult/S in range(1,A))
+ found = 1
+ S.reveal()
+ if (found)
+ to_chat(user, "A structure suddenly emerges from the ground!")
+ call(/obj/effect/rune_legacy/proc/revealrunes)(src)//revealing legacy runes as well because why not
+
/obj/item/weapon/nullrod/pickup(mob/living/user as mob)
if(user.mind)
if(user.mind.assigned_role == "Chaplain")
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index b0801cb4c70..3abc57357b6 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -24,6 +24,7 @@
var/health = 50
var/tmp/busy = 0
var/list/valid_types = list(/obj/item/weapon/book, \
+ /obj/item/weapon/tome, \
/obj/item/weapon/tome_legacy, \
/obj/item/weapon/spellbook, \
/obj/item/weapon/storage/bible)
diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi
index e29bd68f61f..853cacc23ed 100644
Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ