diff --git a/code/game/gamemodes/cult/items/talisman.dm b/code/game/gamemodes/cult/items/talisman.dm
index e0bc85b3384..b19084233ce 100644
--- a/code/game/gamemodes/cult/items/talisman.dm
+++ b/code/game/gamemodes/cult/items/talisman.dm
@@ -1,5 +1,6 @@
/obj/item/paper/talisman
icon_state = "paper_talisman"
+ can_change_icon_state = FALSE
var/uses = 1
var/datum/rune/rune
info = "

"
@@ -33,4 +34,4 @@
/obj/item/paper/talisman/proc/use()
uses--
if(uses <= 0)
- qdel(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index c4ffd3e03bc..a8557a117e2 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -2216,11 +2216,68 @@ All custom items with worn sprites must follow the contained sprite system: http
icon_state = "mrakiizar_book"
item_state = "mrakiizar_book"
contained_sprite = TRUE
+ var/open_state = "mrakiizar_book1"
+ var/list/open_states = list("mrakiizar_book1", "mrakiizar_book2", "mrakiizar_book3", "mrakiizar_book4")
/obj/item/journal/fluff/mrakiizar_book/update_icon()
- ..()
- if(open)
- icon_state = pick("mrakiizar_book1","mrakiizar_book2","mrakiizar_book3","mrakiizar_book4")
+ if(!open)
+ icon_state = "mrakiizar_book_closed"
+ else
+ icon_state = open_state
+
+ if(closed_desc)
+ desc = open ? initial(desc) + closed_desc : initial(desc)
+
+/obj/item/journal/fluff/mrakiizar_book/attack_hand(mob/user)
+ if(open && user.a_intent == I_HURT)
+ if(!LAZYLEN(indices))
+ to_chat(user, SPAN_WARNING("There aren't any indices to rip a paper out of!"))
+ return
+
+ var/list/viable_indices = list()
+ for(var/index in indices)
+ var/obj/item/folder/embedded/E = indices[index]
+ if(!(locate(/obj/item/paper) in E))
+ continue
+ viable_indices += index
+
+ if(!length(viable_indices))
+ to_chat(user, SPAN_WARNING("None of the indices in \the [src] contain a paper!"))
+ return
+
+ var/selected_folder = input(user, "Select an index to rip a paper out of.", "Rip Index Select") as null|anything in viable_indices
+ if(isnull(selected_folder))
+ return
+
+ var/obj/item/folder/embedded/E = indices[selected_folder]
+ var/list/papers = list()
+
+ for(var/obj/item/paper/P in E)
+ papers += P
+
+ var/obj/item/paper/selected_paper = input(user, "Select a paper to rip out.", "Rip Paper Select") as null|anything in papers
+ if(isnull(selected_paper))
+ return
+
+ user.visible_message(SPAN_WARNING("[user] rips \the [selected_paper] out of \the [src]."), SPAN_NOTICE("You rip \the [selected_paper] out of \the [src]."), range = 5)
+ if(selected_paper.can_change_icon_state)
+ selected_paper.icon = icon
+ selected_paper.base_state = "torn"
+ selected_paper.update_icon()
+ user.put_in_hands(selected_paper)
+ E.handle_post_remove()
+ playsound(loc, 'sound/items/poster_ripped.ogg', 50, FALSE)
+ return
+ return ..()
+
+/obj/item/journal/fluff/mrakiizar_book/CtrlClick(mob/user)
+ if(open && Adjacent(user))
+ open_state = next_in_list(icon_state, open_states)
+ user.visible_message("[user] flips a page in \the [src].", SPAN_NOTICE("You flip a page in \the [src]."), range = 3)
+ playsound(loc, 'sound/items/pickup/paper.ogg', 50, FALSE)
+ update_icon()
+ return
+ return ..()
/obj/item/clothing/accessory/fluff/jaquelyn_necklace //Shrapnel Necklace - Jaquelyn Roberts - roostercat12
name = "shrapnel necklace"
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 7f50dff2d3b..35b432c5dbf 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -8,6 +8,7 @@
gender = NEUTER
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "paper"
+ var/base_state = "paper"
item_state = "paper"
contained_sprite = 1
throwforce = 0
@@ -42,8 +43,11 @@
drop_sound = 'sound/items/drop/paper.ogg'
pickup_sound = 'sound/items/pickup/paper.ogg'
+ var/can_change_icon_state = TRUE
+
/obj/item/paper/Initialize(mapload, text, title)
. = ..()
+ base_state = initial(icon_state)
if (text || title)
set_content(title, text ? text : info)
else
@@ -79,12 +83,12 @@
updateinfolinks()
/obj/item/paper/update_icon()
- if(icon_state == "paper_talisman")
+ if(!can_change_icon_state)
return
else if (info && length(trim(info)))
- icon_state = "[initial(icon_state)]_words"
+ icon_state = "[base_state]_words"
else
- icon_state = "[initial(icon_state)]"
+ icon_state = "[base_state]"
/obj/item/paper/proc/update_space(var/new_text)
if(new_text)
@@ -131,7 +135,7 @@
return
var/n_name = sanitizeSafe(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text, MAX_NAME_LEN)
-
+
if(use_check_and_message(usr, USE_ALLOW_NON_ADJACENT))
return
@@ -184,7 +188,7 @@
if (user.a_intent == I_HELP && old_name && (icon_state == "paper_plane" || icon_state == "paper_swan"))
user.visible_message(SPAN_NOTICE("\The [user] unfolds \the [src]."), SPAN_NOTICE("You unfold \the [src]."), "You hear paper rustling.")
playsound(src, 'sound/bureaucracy/paperfold.ogg', 50, 1)
- icon_state = initial(icon_state)
+ icon_state = base_state
throw_range = initial(throw_range)
name = old_name
old_name = null
@@ -409,7 +413,7 @@
. = replacetext(., written_lang_regex.match, "")
else
content = L.scramble(content)
-
+
if(!language_check)
// Refer to paper/proc/show_content to edit the spans here.
. = replacetext(., written_lang_regex.match, "[L.short && reader_understands ? "([L.short]) [content]" : content]")
diff --git a/icons/obj/custom_items/mrakiizar_book.dmi b/icons/obj/custom_items/mrakiizar_book.dmi
index e9af53007d3..5c589e46512 100644
Binary files a/icons/obj/custom_items/mrakiizar_book.dmi and b/icons/obj/custom_items/mrakiizar_book.dmi differ