329 lines
15 KiB
Plaintext
329 lines
15 KiB
Plaintext
# init python:
|
|
# def inventory_sortfilter(item, sortby="A-z", filtering=None):
|
|
# if filtering == "Owned":
|
|
# item = (x for x in item if x.owned > 0)
|
|
|
|
# # Always sort alphabetically first.
|
|
# item = sorted(item, key=lambda x: natsort_key(x.name))
|
|
|
|
# if sortby == "z-A":
|
|
# item.sort(key=lambda x: natsort_key(x.name), reverse=True)
|
|
# elif current_sorting == "Available":
|
|
# item.sort(key=lambda x: x.owned is True, reverse=True)
|
|
# elif current_sorting == "Unavailable":
|
|
# item.sort(key=lambda x: x.owned is False)
|
|
|
|
# return item
|
|
|
|
default inventory_mode = 0 # 0 - Inventory, 1 - gifts
|
|
|
|
####################################
|
|
############# Menu #################
|
|
####################################
|
|
|
|
label inventory:
|
|
call screen inventory
|
|
# $ enable_game_menu()
|
|
jump main_room_menu
|
|
|
|
# label inventory_menu:
|
|
# call screen inventory
|
|
# return
|
|
|
|
screen inventory():
|
|
modal True
|
|
layer "interface"
|
|
zorder 0
|
|
style_prefix "frame"
|
|
|
|
default navigation_atl = navigation_show
|
|
default last_frame = (screenshot.capture() or screenshot.image)
|
|
default navigation_last_frame_atl = navigation_last_frame_show
|
|
default navigation_exit = False
|
|
|
|
default category = "gift"
|
|
# default subcategory = None
|
|
default menu_items = inventory.get_instances_of_type(category)
|
|
default selected_item = None
|
|
|
|
add last_frame at navigation_last_frame_atl
|
|
|
|
if navigation_exit:
|
|
timer 0.4 action Return("close")
|
|
|
|
frame:
|
|
style "empty"
|
|
align (0.5, 0.5)
|
|
at navigation_atl
|
|
|
|
vbox:
|
|
style_prefix "navigation_subtabs"
|
|
pos (286, 170)
|
|
|
|
at navigation_subtabs_show
|
|
|
|
textbutton _("Gifts") action [SetScreenVariable("category", "gift"), SetScreenVariable("menu_items", inventory.get_instances_of_type("gift")), SetScreenVariable("selected_item", None)] selected (category=="gift") at navigation_tabs
|
|
textbutton _("Books") action [SetScreenVariable("category", "book"), SetScreenVariable("menu_items", inventory.get_instances_of_type("book")), SetScreenVariable("selected_item", None)] selected (category=="book") at navigation_tabs
|
|
textbutton _("Scrolls") action [SetScreenVariable("category", "scroll"), SetScreenVariable("menu_items", inventory.get_instances_of_type("scroll")), SetScreenVariable("selected_item", None)] selected (category=="scroll") at navigation_tabs
|
|
textbutton _("Ingredients") action [SetScreenVariable("category", "ingredient"), SetScreenVariable("menu_items", inventory.get_instances_of_type("ingredient")), SetScreenVariable("selected_item", None)] selected (category=="ingredient") at navigation_tabs
|
|
textbutton _("Potions") action [SetScreenVariable("category", "potion"), SetScreenVariable("menu_items", inventory.get_instances_of_type("potion")), SetScreenVariable("selected_item", None)] selected (category=="potion") at navigation_tabs
|
|
textbutton _("Decorations") action [SetScreenVariable("category", "decoration"), SetScreenVariable("menu_items", inventory.get_instances_of_type("decoration")), SetScreenVariable("selected_item", None)] selected (category=="decoration") at navigation_tabs
|
|
textbutton _("Consumables") action [SetScreenVariable("category", "quest"), SetScreenVariable("menu_items", inventory.get_instances_of_type("quest")), SetScreenVariable("selected_item", None)] selected (category=="quest") at navigation_tabs
|
|
null height 35
|
|
textbutton _("Return") action [SetScreenVariable("navigation_last_frame_atl", navigation_last_frame_hide), SetScreenVariable("navigation_atl", navigation_hide), SetScreenVariable("navigation_exit", True)] keysym ["inventory", "game_menu"] at navigation_tabs
|
|
|
|
if selected_item and ((inventory_mode==0 and selected_item.usable) or inventory_mode==1 and selected_item.givable):
|
|
vbox:
|
|
style_prefix "navigation_tabs"
|
|
pos (798, 170)
|
|
|
|
at navigation_tabs_show
|
|
|
|
textbutton selected_item.caption:
|
|
if inventory_mode==0:
|
|
action [selected_item.use, renpy.restart_interaction]
|
|
elif inventory_mode==1:
|
|
action Return(selected_item)
|
|
style "navigation_tabs_button_special"
|
|
at navigation_tabs
|
|
|
|
frame:
|
|
# maximum (None, 450)
|
|
|
|
label _("Inventory")
|
|
|
|
# Add items
|
|
grid 10 8:
|
|
ypos 32
|
|
xalign 0.5
|
|
for item in menu_items:
|
|
button:
|
|
xysize (48, 48)
|
|
if selected_item == item:
|
|
add "interface/achievements/glow.webp" align (0.5, 0.5) xysize (48, 48) alpha 0.7 at rotate_circular
|
|
add crop_image_zoom(item.get_image(), 48, 48, (item.owned <= 0 or (inventory_mode==1 and (not item.givable or not states.active_girl in item.usable_on)))) align (0.5, 0.5)
|
|
|
|
if item.used or (item.type=="decoration" and item.in_use):
|
|
add "interface/topbar/icon_check.webp" xysize (16, 16) offset (8, -8)
|
|
if item.owned > 1:
|
|
text "x[item.owned]" offset (-8, 34) size 12
|
|
|
|
if (inventory_mode==0 or (inventory_mode==1 and (item.givable and states.active_girl in item.usable_on))):
|
|
action [SetScreenVariable("selected_item", item)]
|
|
|
|
if selected_item:
|
|
vbox:
|
|
align (0.0, 1.0)
|
|
|
|
hbox:
|
|
spacing 5
|
|
|
|
add selected_item.get_image() xysize(96, 96) align (0.05, 0.95)
|
|
vbox:
|
|
yalign 1.0
|
|
xsize 400
|
|
|
|
hbox:
|
|
label selected_item.name
|
|
if selected_item.used or (selected_item.type=="decoration" and selected_item.in_use):
|
|
add "interface/topbar/icon_check.webp" xysize (24, 24) yoffset -12
|
|
text selected_item.desc xalign 0
|
|
if selected_item.givable:
|
|
text _("Usable on: [item.usable_on]") xalign 0
|
|
|
|
if selected_item.owned > 1:
|
|
text "x[selected_item.owned]" align (0.0, 1.0)
|
|
|
|
|
|
# screen inventory_menu(xx, yy):
|
|
# style_prefix "frame"
|
|
|
|
# window:
|
|
# style "empty"
|
|
# style_prefix gui.theme('achievements')
|
|
# pos (xx, yy)
|
|
# xysize (207, 454)
|
|
|
|
# use invisible_button()
|
|
|
|
# add gui.format("interface/achievements/{}/panel_left.webp")
|
|
|
|
# vbox:
|
|
# pos (6, 41)
|
|
# for category in iter(inventory_dict.keys()):
|
|
# vbox:
|
|
# textbutton category:
|
|
# style "empty"
|
|
# xsize 195 ysize 16
|
|
# text_xalign 0.5
|
|
# if current_category == category:
|
|
# background gui.format("interface/achievements/{}/highlight_left.webp")
|
|
# else:
|
|
# hover_background gui.format("interface/achievements/{}/highlight_left.webp")
|
|
# action Return(["category", category])
|
|
# add gui.format("interface/achievements/{}/spacer_left.webp")
|
|
|
|
# # Gold & Tokens
|
|
# null height 16
|
|
# text "{color=#daa520}Gold{/color} {outlinecolor=#ffffff00}[states.env.gold]{/outlinecolor}" size 12 outlines [ (2, "#000", 0, 0) ] xpos 0.1 xanchor 0
|
|
# add gui.format("interface/achievements/{}/spacer_left.webp")
|
|
# text "{color=#2055da}Tokens{/color} {outlinecolor=#ffffff00}[states.env.tokens]{/outlinecolor}" size 12 outlines [ (2, "#000", 0, 0) ] xpos 0.1 xanchor 0
|
|
# add gui.format("interface/achievements/{}/spacer_left.webp")
|
|
|
|
# vbox:
|
|
# style_prefix gui.theme('achievements_filters')
|
|
# pos (6, 384)
|
|
# if current_filter is None:
|
|
# textbutton "Show: All" action Return("filter")
|
|
# else:
|
|
# textbutton "Show: [current_filter]" action Return("filter")
|
|
# textbutton "Sort by: [current_sorting]" action Return("sort")
|
|
|
|
# screen inventory_menuitem(xx, yy):
|
|
# window:
|
|
# style "empty"
|
|
# style_prefix gui.theme()
|
|
# pos (xx+217, yy-53)
|
|
# xysize (560, 507)
|
|
|
|
# use invisible_button()
|
|
|
|
# add "interface/achievements/inventory.webp"
|
|
# add gui.format("interface/achievements/{}/panel.webp")
|
|
|
|
# #Western Egg
|
|
# button xsize 90 ysize 60 action Play("sound", "sounds/plushie.ogg") xalign 0.5 style "empty"
|
|
|
|
# text "Inventory" size 22 xalign 0.5 ypos 65
|
|
|
|
# #text "Unlocked: "+str(len([x for x in menu_items if x[1][3] is True]))+"/[menu_items_length]" size 12 pos (24, 70)
|
|
|
|
# # Page counter
|
|
# if menu_items_length > items_shown:
|
|
# hbox:
|
|
# xanchor 1.0
|
|
# pos (540, 24)
|
|
# spacing 5
|
|
# add "interface/page.webp" yanchor 0.5 ypos 53
|
|
# text str(current_page+1)+"/"+str(int(math.ceil(menu_items_length/items_shown))) ypos 44 size 16
|
|
# vbox:
|
|
# pos (570, 186)
|
|
# spacing 10
|
|
|
|
# imagebutton:
|
|
# idle gui.format("interface/frames/{}/arrow_up.webp")
|
|
# if not current_page <= 0:
|
|
# hover image_hover(gui.format("interface/frames/{}/arrow_up.webp"))
|
|
# action Return("dec")
|
|
|
|
# imagebutton:
|
|
# idle Transform(gui.format("interface/frames/{}/arrow_up.webp"), yzoom=-1)
|
|
# if current_page < math.ceil((menu_items_length-1)/items_shown)-1:
|
|
# hover Transform(image_hover(gui.format("interface/frames/{}/arrow_up.webp")), yzoom=-1)
|
|
# action Return("inc")
|
|
|
|
# # Add items
|
|
# grid 9 4:
|
|
# style "empty"
|
|
# pos (24, 113)
|
|
# spacing 10
|
|
|
|
# for it_item in menu_items[current_page*items_shown:(current_page+1)*items_shown]:
|
|
# frame:
|
|
# style "empty"
|
|
# xsize 48
|
|
# ysize 48
|
|
# add gui.format("interface/achievements/{}/iconbox.webp")
|
|
|
|
# if current_item is not None and current_item.id == it_item.id:
|
|
# add "interface/achievements/glow.webp" align (0.5, 0.5) zoom 0.105 alpha 0.7 at rotate_circular
|
|
|
|
# add crop_image_zoom(it_item.get_image(), 42, 42, it_item.owned <= 0) align (0.5, 0.5)
|
|
|
|
# button:
|
|
# style gui.theme("overlay_button")
|
|
# background "interface/achievements/glass_iconbox.webp"
|
|
# xsize 46 ysize 46
|
|
# action Return(["select", it_item])
|
|
# tooltip it_item.name
|
|
|
|
# if it_item.limit > 1 and it_item.owned > 0:
|
|
# if it_item.infinite:
|
|
# text "{unicode}∞{/unicode}" size 20 align (0.1, 0.1) offset(-1, -9) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ]
|
|
# else:
|
|
# text str(it_item.owned) size 10 align (0.1, 0.1) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ]
|
|
# elif current_category == "Decorations":
|
|
# if it_item.in_use:
|
|
# add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-3, -3) zoom 0.5
|
|
# elif current_category in ("Books", "Quest Items"):
|
|
# if it_item.used:
|
|
# add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-3, -3) zoom 0.5
|
|
|
|
# if inventory_mode == 1 and (not it_item.givable or not states.active_girl in it_item.usable_on):
|
|
# add "#b2000040"
|
|
|
|
# if menu_items_length <= 0:
|
|
# text "Nothing here yet" align (0.5, 0.5) size 24
|
|
|
|
# if current_item:
|
|
# frame:
|
|
# style "empty"
|
|
# xsize 96
|
|
# ysize 96
|
|
# pos (24, 375)
|
|
# add gui.format("interface/achievements/{}/icon_selected.webp")
|
|
# add crop_image_zoom(current_item.get_image(), 84, 84, current_item.owned <= 0) align (0.5, 0.5)
|
|
# add "interface/achievements/glass_selected.webp" pos (6, 6)
|
|
|
|
# if current_category in {"Gifts", "Ingredients", "Potions"}:
|
|
# if current_item.owned > 0:
|
|
# if current_item.infinite:
|
|
# text "{unicode}∞{/unicode}" size 30 align (0.1, 0.1) offset(-2, -10) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ]
|
|
# else:
|
|
# text "[current_item.owned]" size 14 align (0.1, 0.1) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ]
|
|
# elif current_category == "Decorations":
|
|
# if current_item.in_use:
|
|
# add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-6, -6)
|
|
# elif current_category in ("Books", "Quest Items"):
|
|
# if current_item.used:
|
|
# add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-6, -6)
|
|
|
|
# if inventory_mode == 1 and (not current_item.givable or not states.active_girl in current_item.usable_on):
|
|
# add "#b2000040"
|
|
|
|
# add gui.format("interface/achievements/{}/highlight.webp") pos (112, 375)
|
|
# add gui.format("interface/achievements/{}/spacer.webp") pos (120, 398)
|
|
# hbox:
|
|
# spacing 5
|
|
# xalign 0.5
|
|
# text current_item.name ypos 380 size 16 xoffset 45
|
|
|
|
# $ frame = Frame(gui.format("interface/frames/{}/iconframe.webp"), 6, 6)
|
|
|
|
# if (inventory_mode == 0 and current_item.usable) or (inventory_mode == 1 and current_item.givable):
|
|
# textbutton "[current_item.caption]":
|
|
# style "inventory_button"
|
|
# background frame
|
|
# xalign 0.89
|
|
# xoffset 45
|
|
# ypos 374
|
|
# sensitive (current_item.owned > 0)
|
|
# if inventory_mode == 0:
|
|
# action Return("use")
|
|
# elif inventory_mode == 1:
|
|
# action Return("give")
|
|
|
|
# hbox:
|
|
# pos (132, 407)
|
|
# xsize 410
|
|
# text current_item.desc size 12
|
|
|
|
# style inventory_button:
|
|
# xysize (90, 26)
|
|
# hover_foreground "#ffffff1F"
|
|
|
|
# style inventory_button_text:
|
|
# outlines []
|
|
# align (0.5, 0.5)
|
|
# size 16
|