From 8c1005003f2b184c32cd45cf43568f42d56d214a Mon Sep 17 00:00:00 2001 From: Gouvernathor <44340603+Gouvernathor@users.noreply.github.com> Date: Sat, 18 Nov 2023 02:00:48 +0100 Subject: [PATCH] Rework the diary system using call screen and actions --- game/scripts/interface/book.rpy | 219 ++++++++++++++------------------ 1 file changed, 94 insertions(+), 125 deletions(-) diff --git a/game/scripts/interface/book.rpy b/game/scripts/interface/book.rpy index e1d204f9..d97b23be 100644 --- a/game/scripts/interface/book.rpy +++ b/game/scripts/interface/book.rpy @@ -3,7 +3,7 @@ init python: def __init__(self, title, contents=(), **kwargs): self.title = title self.page = 0 - self.overflow=None + self.overflow = None self.title = title self.contents = list(contents) # list of (title, text) pairs @@ -18,42 +18,42 @@ init python: return self.npages-1 return self.npages-2 - def open(self, page=0): - self.page = max(0, min(page, self.maxpage)) - self.refresh() - return - - def close(self): - self.page = 0 - renpy.hide_screen("book_menu") - return - - def next(self): - self.page = min(self.page+2, self.maxpage) - self.refresh() - return - - def prev(self): - self.page = max(self.page-2, 0) - self.refresh() - return - - def refresh(self): - page_title, page_text = self.contents[self.page] + def Open(self, page=None): + """ + Returns a list of actions that populate the variables of the book_menu screen. + If passed a `page`, does NOT change the page attribute of the book, + instead acts as though that page was the current one. + """ + if page is None: + page = self.page + page_title, page_text = self.contents[page] page_text = page_text[:880] - if self.npages > self.page+1: - next_page_title, next_page_text = self.contents[self.page-1] + if self.npages > page+1: + next_page_title, next_page_text = self.contents[page+1] next_page_text = next_page_text[:880] else: next_page_title, next_page_text = None, None - renpy.show_screen("book_menu", - page=self.page, npages=self.npages, title=self.title, - page_title=page_title, page_text=page_text, - next_page_title=next_page_title, next_page_text=next_page_text, - page_overflow=self.overflow, - ) - return + return [ + SetScreenVariable("page_title", page_title), + SetScreenVariable("page_text", page_text), + SetScreenVariable("next_page_title", next_page_title), + SetScreenVariable("next_page_text", next_page_text), + ] + + def Next(self): + page = min(self.page+2, self.maxpage) + return self.OpenPage(page) + + def Prev(self): + page = max(self.page-2, 0) + return self.OpenPage(page) + + def OpenPage(self, page): + return [ + SetField(self, "page", page), + self.Open(page), + ] def append(self, page_title, page_text): self.contents.append((page_title, page_text)) @@ -127,45 +127,29 @@ init python: label book_handle(book=None): - $ book.open() - play sound "sounds/bookopen.ogg" - show screen book_animator("book_page_next", 0.5) # use an ATL sort-of-Fade instead, and With - label .after_init: + call screen book_menu(book) # with BookAnimatorFade(0.5, book_wrapped("book_page_next")) + return - $ renpy.dynamic(__choice = ui.interact()) - - if __choice == "next": - $ book.next() - play sound "sounds/pageflip.ogg" - show screen book_animator("book_page_next", 0.5) - with d1 - elif __choice == "prev": - $ book.prev() - play sound "sounds/pageflip.ogg" - show screen book_animator("book_page_prev", 0.5) - with d1 - elif __choice == "back": - $ book.open() - play sound "sounds/pageflipback.ogg" - show screen book_animator("book_page_start", 0.5) - with d1 - elif __choice == "Close": - $ book.close() - play sound "sounds/bookclose.ogg" - return - jump .after_init - -screen book_menu(page, npages, title, page_title, page_text, next_page_title, next_page_text, page_overflow): - # page is 0-based - # npages is the number of pages, so max(page) is npages-1 - tag book_menu +screen book_menu(book=None): zorder 30 - button style "empty" action NullAction() + # button style "empty" action NullAction() + modal True add Color("#000", alpha=0.5) add "interface/book/book_open.webp" + default page_title = None + # on "show" action book.Open() # sets up all the screen variables we want, including page_title which serves as a trigger + timer 0.00000000001 action book.Open() # sets up all the screen variables we want, including page_title which serves as a trigger + + if page_title is not None: + + use book_content(book, page_title, page_text, next_page_title, next_page_text) + + use close_button + +screen book_content(book, page_title, page_text, next_page_title, next_page_text): frame: style "empty" pos (280, 130) @@ -173,7 +157,7 @@ screen book_menu(page, npages, title, page_title, page_text, next_page_title, ne ysize 300 text page_title ypos -20 size 16 xalign 0.5 textalign .5 text page_text size 12 ypos 40 - text str(page+1) bold True xalign 0.5 ypos 350 size 11 + text str(book.page+1) bold True xalign 0.5 ypos 350 size 11 frame: style "empty" @@ -184,89 +168,74 @@ screen book_menu(page, npages, title, page_title, page_text, next_page_title, ne text next_page_title ypos -20 size 16 xalign 0.5 textalign .5 if next_page_text is not None: text next_page_text size 12 ypos 40 - text str(page+2) bold True xalign 0.5 ypos 350 size 11 + text str(book.page+2) bold True xalign 0.5 ypos 350 size 11 - if page+2 < npages: + if book.page+2 < book.npages: # Next imagebutton: pos (721, 100) idle Transform("interface/book/hover.webp", alpha=0) hover "interface/book/hover.webp" - action Return("next") + action [book.Next(), With(BookAnimatorFade(.48, book_wrapped("book_page_next")))] - elif page > 0: + elif book.page > 0: # Fast Back to start imagebutton: pos (721, 100) idle "interface/book/back.webp" hover "interface/book/back.webp" - action Return("back") + action [book.OpenPage(0), With(BookAnimatorFade(.42, book_wrapped("book_page_start")))] # Previous imagebutton: pos (242, 100) idle Transform("interface/book/hover.webp", xzoom=-1.0, alpha=0) hover Transform("interface/book/hover.webp", xzoom=-1.0, alpha=1) - action Return("prev") + action [book.Prev(), With(BookAnimatorFade(.48, book_wrapped("book_page_prev")))] - use close_button +transform BookAnimatorFade(hold_time, widget, old_widget=None, new_widget=None): + delay hold_time + contains: + # old_widget + # new_widget with Dissolve(hold_time) + new_widget + events False + contains: + widget + time hold_time + new_widget + events True -screen book_animator(img, timer): - tag animator - zorder 31 - - add img - button style "empty" action [Hide("book_animator"), With(Dissolve(0.05))] - timer timer action [Hide("book_animator"), With(Dissolve(0.1))] +transform book_wrapped(child): + contains: + "interface/book/book_open.webp" + contains: + child image book_page_next: - contains: - "interface/book/book_open.webp" - contains: - #"interface/book_of_secrets/book_anim_01.webp" - #pause.1 - "interface/book/page_02.webp" - pause.08 - "interface/book/page_03.webp" - pause.08 - "interface/book/page_04.webp" - pause.08 - "interface/book/page_05.webp" - pause.08 - "interface/book/page_06.webp" - pause.08 - "interface/book/page_07.webp" - pause.08 - "blank" + #"interface/book_of_secrets/book_anim_01.webp" + #pause.1 + "interface/book/page_02.webp" + pause.08 + "interface/book/page_03.webp" + pause.08 + "interface/book/page_04.webp" + pause.08 + "interface/book/page_05.webp" + pause.08 + "interface/book/page_06.webp" + pause.08 + "interface/book/page_07.webp" + pause.08 image book_page_prev: - contains: - "interface/book/book_open.webp" - contains: - xoffset 40 - #"interface/book_of_secrets/book_anim_01.webp" - #pause.1 - Transform("interface/book/page_02.webp", xzoom=-1.0) - pause.08 - Transform("interface/book/page_03.webp", xzoom=-1.0) - pause.08 - Transform("interface/book/page_04.webp", xzoom=-1.0) - pause.08 - Transform("interface/book/page_05.webp", xzoom=-1.0) - pause.08 - Transform("interface/book/page_06.webp", xzoom=-1.0) - pause.08 - Transform("interface/book/page_07.webp", xzoom=-1.0) - pause.08 - "blank" + xoffset 40 + xzoom -1 + "book_page_next" image book_page_start: - contains: - "interface/book/book_open.webp" - contains: - "interface/book/reverse_01.webp" - pause.07 - "interface/book/reverse_02.webp" - pause.07 - "blank" - repeat 3 #book_page_max was too slow + "interface/book/reverse_01.webp" + pause.07 + "interface/book/reverse_02.webp" + pause.07 + repeat 3 #book_page_max was too slow