WTS/game/scripts/interface/inventory.rpy

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