diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 88fb1afd538..4ff40a9f6cc 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -884,3 +884,11 @@ var/list/uplink_items = list()
cost = 14
discounted_cost = 10
jobs_with_discount = list("Chaplain")
+
+/datum/uplink_item/jobspecific/occultbook
+ name = "Occult Book"
+ desc = "A reproduction of a forbidden and occult book. Causes brain damage, eye damage and hallucinations to anyone unfortunate enough to attempt to read it. Use a pen to change its title."
+ item = /obj/item/weapon/book/occult
+ cost = 4
+ discounted_cost = 2
+ jobs_with_discount = list("Librarian", "Chaplain")
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 3abc57357b6..b77a2d0901c 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -204,6 +204,7 @@
var/forbidden = 0 // Prevent ordering of this book. (0=no, 1=yes, 2=emag only)
var/obj/item/store // What's in the book?
var/runestun = 0 //Does it have a stun talisman in it?
+ var/occult = 0 //Does this book contain forbidden and occult writings?
/obj/item/weapon/book/New()
..()
@@ -229,6 +230,8 @@
if(!isobserver(user))
user.visible_message("[user] opens a book titled \"[src.title]\" and begins reading intently.")
onclose(user, "book")
+ if(occult)
+ to_chat(user, "As you read the book, your mind is assaulted by foul, arcane energies!")
else
to_chat(user, "This book is completely blank!")
@@ -246,10 +249,19 @@
M.Knockdown(25)
M.Stun(25)
runestun = 0
+ if(occult)
+ var/mob/living/carbon/human/M = user
+ M.flash_eyes(visual = 1)
+ M.Knockdown(15)
+ M.Stun(15)
+ var/datum/organ/internal/eyes/eyes = M.internal_organs_by_name["eyes"]
+ eyes.damage += rand(30,60)
+ M.adjustBrainLoss(rand(50,100))
+ M.hallucination = max(0, M.hallucination + rand(60,90))
read_a_motherfucking_book(user)
/obj/item/weapon/book/examine(mob/user)
- if(isobserver(user) && in_range(src,user))
+ if(isobserver(user) && in_range(src,user) && occult == 0)
read_a_motherfucking_book(user)
else
..()
@@ -260,6 +272,7 @@
if(do_after(user, src, 30 / W.sharpness))
to_chat(user, "You carve out the pages from [title]! You didn't want to read it anyway.")
carved = 1
+ occult = 0 //A book cannot be an occult book if it has no pages
return
if(carved)
if(!store)
@@ -338,7 +351,10 @@
var/obj/item/weapon/paper/talisman/talisman = W
if(runestun)
to_chat(user, "There is already a talisman between the pages.")
- return()
+ return
+ if(occult)
+ to_chat(user, "You feel as if it would be a bad idea to add a talisman to this particular book.")
+ return
if(talisman.imbue == "runestun")
to_chat(user, "You slide the talisman between the pages.")
qdel(talisman)
@@ -349,6 +365,25 @@
else
..()
+/*
+ * Traitor Ooccult Books
+ */
+
+
+/obj/item/weapon/book/occult
+ name = "The King in Yellow"
+ title = "The King in Yellow"
+ occult = 1
+ var/possible_names = list("The King in Yellow", "The Locksmith's Dream", "The Tantra of Worms", "Infinite Jest", "The Legacy of Totalitarianism in a Tundra", "The Rose of Hypatia",
+ "Gravity's Rainbow", "Aristotle's Poetics", "The Geminiad", "My Diary", "The War of the Roads", "The Courier's Tragedy", "The Burning of the Unburnt God", "Love's Labour's Won",
+ "The Necronomicon", "The Funniest Joke in the World", "Woody Got Wood", "Peggy's Revenge", "House of Leaves", "A True and Accurate History of the Shadowless Kings", "The Book of Nod",
+ "Atlas Shrugged", "The Serenity of the Black Wood", "The World Does Not Weep")
+
+/obj/item/weapon/book/occult/New()
+ ..()
+ name = pick(possible_names)
+ title = name
+ icon_state = "book[rand(1, 9)]"
/*
* Barcode Scanner