2022-05-16 23:48:22 +00:00
|
|
|
label clothing_upgrades:
|
|
|
|
|
|
|
|
call upgrades
|
|
|
|
|
|
|
|
if _return is False:
|
|
|
|
jump tonks_talk
|
|
|
|
|
|
|
|
gen "[tonks_name]..." ("base", xpos="far_left", ypos="head")
|
|
|
|
gen "Do you think you could change this outfit?" ("base", xpos="far_left", ypos="head")
|
|
|
|
gen "You know..." ("base", xpos="far_left", ypos="head")
|
|
|
|
gen "Make it sluttier!" ("grin", xpos="far_left", ypos="head")
|
|
|
|
ton "Let me see..." ("base", "base", "base", "down")
|
|
|
|
|
|
|
|
show screen blkfade
|
|
|
|
with d3
|
|
|
|
|
|
|
|
ton "Oh I really like this one." ("open", "base", "raised", "down")
|
|
|
|
call play_sound("cloth_upgrade")
|
|
|
|
ton "I could make some adjustments here..." ("base", "base", "raised", "down")
|
|
|
|
ton "Maybe make this a bit shorter and..." ("horny", "base", "base", "down")
|
|
|
|
call play_sound("giggle")
|
|
|
|
|
|
|
|
hide screen blkfade
|
|
|
|
with d3
|
|
|
|
|
|
|
|
ton "There you go, [ton_genie_name], all done." ("base", "base", "base", "mid")
|
|
|
|
|
|
|
|
gen "Nice!" ("grin", xpos="far_left", ypos="head")
|
|
|
|
gen "Thanks a ton!" ("base", xpos="far_left", ypos="head")
|
|
|
|
ton "Don't mention it, [ton_genie_name]." ("base", "base", "base", "mid")
|
|
|
|
jump tonks_talk
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
init python:
|
|
|
|
def upgrades_sortfilter(item, sortby=False):
|
|
|
|
return item
|
|
|
|
|
|
|
|
default upgrades_show_locked = False
|
|
|
|
default upgrades_show_complete = True
|
|
|
|
default item_bought = False # TEMP var - Used as a return value out of context.
|
|
|
|
|
|
|
|
default her_upgrade_school2 = DollOutfit([her_hair_base, her_top_school2, her_bottom_school2, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
default her_upgrade_school3 = DollOutfit([her_hair_base, her_top_school3, her_bottom_school3, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
default her_upgrade_school4 = DollOutfit([her_hair_base, her_top_school4, her_bottom_school4, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
|
|
|
|
###
|
|
|
|
|
|
|
|
default her2_upgrade_school2 = DollOutfit([her_hair_base, her_top_school2, her_bottom_school2, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
default her2_upgrade_school3 = DollOutfit([her_hair_base, her_top_school3, her_bottom_school3, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
default her2_upgrade_school4 = DollOutfit([her_hair_base, her_top_school4, her_bottom_school4, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
|
|
|
|
###
|
|
|
|
|
|
|
|
default her3_upgrade_school2 = DollOutfit([her_hair_base, her_top_school2, her_bottom_school2, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
default her3_upgrade_school3 = DollOutfit([her_hair_base, her_top_school3, her_bottom_school3, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
default her3_upgrade_school4 = DollOutfit([her_hair_base, her_top_school4, her_bottom_school4, her_panties_base1, her_bra_base1, her_stockings_base1], hidden=True)
|
|
|
|
|
|
|
|
label upgrades:
|
|
|
|
python:
|
|
|
|
her_upgrade_school2.price = 50
|
|
|
|
her_upgrade_school3.price = 75
|
|
|
|
her_upgrade_school4.price = 100
|
|
|
|
#
|
|
|
|
her2_upgrade_school2.price = 15
|
|
|
|
her2_upgrade_school3.price = 30
|
|
|
|
her2_upgrade_school4.price = 45
|
|
|
|
#
|
|
|
|
her3_upgrade_school2.price = 100
|
|
|
|
her3_upgrade_school3.price = 100
|
|
|
|
her3_upgrade_school4.price = 100
|
|
|
|
|
|
|
|
$ gui.in_context("upgrades_menu")
|
|
|
|
return item_bought
|
|
|
|
|
|
|
|
label upgrades_menu(xx=150, yy=90):
|
|
|
|
|
|
|
|
$ upgrades_dict = {
|
|
|
|
"Tonks": {"ico": "tonks", "flag": tonks_unlocked, "outfits": {"school": []}},
|
|
|
|
"Hermione": {"ico": "hermione", "flag": hermione_unlocked, "outfits": {"school": [her_outfit_default, her_upgrade_school2, her_upgrade_school3, her_upgrade_school4], "other": [her_outfit_default, her2_upgrade_school2, her2_upgrade_school3, her2_upgrade_school4], "other2": [her_outfit_default, her3_upgrade_school2, her3_upgrade_school3, her3_upgrade_school4], "other3": [her_outfit_default, her_upgrade_school2, her_upgrade_school3, her_upgrade_school4]}},
|
|
|
|
"Cho": {"ico": "cho", "flag": cho_unlocked, "outfits": {"school": []}},
|
|
|
|
"Luna": {"ico": "luna", "flag": luna_unlocked, "outfits": {"school": []}},
|
|
|
|
"Astoria": {"ico": "astoria", "flag": astoria_unlocked, "outfits": {"school": []}},
|
|
|
|
"Susan": {"ico": "susan", "flag": susan_unlocked, "outfits": {"school": []}}
|
|
|
|
}
|
|
|
|
|
|
|
|
$ upgrades_categories_sorted = ["Tonks", "Hermione", "Cho", "Luna", "Astoria", "Susan"]
|
|
|
|
$ upgrades_categories_sorted_length = len(upgrades_categories_sorted)
|
|
|
|
|
|
|
|
$ current_category = last_character.capitalize() if last_character else upgrades_categories_sorted[0]
|
|
|
|
$ current_item = 0
|
|
|
|
$ current_subcategory = "overview"
|
|
|
|
$ current_sorting = upgrades_show_locked
|
|
|
|
|
|
|
|
$ category_items = []
|
|
|
|
$ menu_items = category_items
|
|
|
|
$ menu_items_length = len(menu_items)
|
|
|
|
|
|
|
|
$ item_bought = False
|
|
|
|
|
|
|
|
show screen upgrades_menu(xx, yy)
|
|
|
|
show screen upgrades_menuitem(xx, yy)
|
|
|
|
with d3
|
|
|
|
|
|
|
|
label .after_init:
|
2023-11-14 22:16:26 +00:00
|
|
|
$ renpy.dynamic(__choice = ui.interact())
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2023-11-14 22:16:26 +00:00
|
|
|
if __choice[0] == "category":
|
|
|
|
$ current_category = __choice[1]
|
2022-05-16 23:48:22 +00:00
|
|
|
$ category_items = 0
|
|
|
|
$ menu_items = upgrades_sortfilter([], current_sorting)
|
|
|
|
$ menu_items_length = len(menu_items)
|
|
|
|
$ current_item = 0
|
2023-11-14 22:16:26 +00:00
|
|
|
elif __choice[0] == "subcat":
|
|
|
|
if __choice[1] != current_subcategory:
|
|
|
|
$ current_subcategory = __choice[1]
|
|
|
|
elif __choice[0] == "buy":
|
|
|
|
if game.gold >= __choice[1] and ton_friendship >= __choice[3]*25:
|
2022-05-16 23:48:22 +00:00
|
|
|
python:
|
|
|
|
renpy.play('sounds/money.ogg')
|
|
|
|
|
2023-11-14 22:16:26 +00:00
|
|
|
game.gold -= __choice[1]
|
|
|
|
_list = __choice[2]
|
|
|
|
_iter = __choice[3]
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
item_bought = True
|
|
|
|
|
2022-09-29 21:19:55 +00:00
|
|
|
for i in range(1, min(_iter+1, len(_list))):
|
2022-05-16 23:48:22 +00:00
|
|
|
if not _list[i].unlocked:
|
|
|
|
_list[i].unlock()
|
|
|
|
ton_clothing_upgrades += 1
|
2023-11-14 22:16:26 +00:00
|
|
|
elif ton_friendship < __choice[4]:
|
2022-05-16 23:48:22 +00:00
|
|
|
$ renpy.play('sounds/fail.ogg')
|
|
|
|
"> Tonks doesn't like you enough."
|
|
|
|
else:
|
|
|
|
$ renpy.play('sounds/fail.ogg')
|
|
|
|
"> You don't have enough gold."
|
|
|
|
else:
|
|
|
|
hide screen upgrades_menu
|
|
|
|
hide screen upgrades_menuitem
|
|
|
|
return
|
|
|
|
|
|
|
|
jump .after_init
|
|
|
|
|
|
|
|
screen upgrades_menu(xx, yy):
|
|
|
|
tag upgrades_menu
|
|
|
|
zorder 30
|
|
|
|
modal True
|
|
|
|
|
|
|
|
use close_button
|
|
|
|
frame:
|
|
|
|
style "empty"
|
|
|
|
pos (xx, yy)
|
|
|
|
xsize 207
|
|
|
|
ysize 454
|
|
|
|
|
|
|
|
add gui.format("interface/achievements/{}/panel_left.webp")
|
|
|
|
|
|
|
|
vbox:
|
|
|
|
pos (6, 384)
|
|
|
|
button action NullAction() style "empty" xsize 195 ysize 32
|
|
|
|
frame:
|
|
|
|
style "empty"
|
|
|
|
textbutton "Show locked:":
|
|
|
|
style gui.theme("overlay_button")
|
|
|
|
xsize 195 ysize 32
|
|
|
|
text_align (0.4, 0.5)
|
|
|
|
text_size 12
|
|
|
|
action ToggleVariable("upgrades_show_locked", True, False)
|
|
|
|
add gui.theme("check_{}").format(str(upgrades_show_locked).lower()) xalign 0.8 ypos 4
|
|
|
|
vbox:
|
|
|
|
pos (6, 6)
|
|
|
|
for category in upgrades_categories_sorted:
|
|
|
|
if upgrades_dict[category]["flag"]:
|
|
|
|
frame:
|
|
|
|
style "empty"
|
|
|
|
xysize (195, 50)
|
|
|
|
vbox:
|
|
|
|
textbutton category:
|
|
|
|
style "empty"
|
|
|
|
xysize (195, 46)
|
|
|
|
text_align (0.6, 0.5)
|
|
|
|
text_xanchor 0.5
|
|
|
|
text_size 20
|
|
|
|
if current_category == category:
|
|
|
|
background gui.format("interface/achievements/{}/highlight_left_b.webp")
|
|
|
|
else:
|
|
|
|
hover_background gui.format("interface/achievements/{}/highlight_left_b.webp")
|
|
|
|
action Return(["category", category])
|
|
|
|
|
|
|
|
add gui.format("interface/achievements/{}/spacer_left.webp")
|
|
|
|
|
|
|
|
$ image_zoom = crop_image_zoom("interface/icons/head/"+upgrades_dict.get(category).get("ico")+".webp", 42, 42)
|
|
|
|
|
|
|
|
button:
|
|
|
|
style gui.theme("overlay_button")
|
|
|
|
background gui.format("interface/achievements/{}/iconbox.webp")
|
|
|
|
foreground "interface/achievements/glass_iconbox.webp"
|
|
|
|
xysize (48, 48)
|
|
|
|
add image_zoom align (0.5, 0.5)
|
|
|
|
|
|
|
|
screen upgrades_menuitem(xx, yy):
|
|
|
|
tag upgrades_menuitem
|
|
|
|
zorder 30
|
|
|
|
|
|
|
|
frame:
|
|
|
|
style "empty"
|
|
|
|
style_prefix gui.theme()
|
|
|
|
pos (xx+217, yy-53)
|
|
|
|
xysize (560, 507)
|
|
|
|
|
|
|
|
add gui.format("interface/achievements/{}/panel.webp")
|
|
|
|
|
|
|
|
text "Outfit Upgrades" size 22 xalign 0.5 ypos 65
|
|
|
|
|
|
|
|
hbox:
|
|
|
|
spacing 5
|
|
|
|
pos (18, 70)
|
|
|
|
add "interface/icons/small/gold.webp"
|
|
|
|
text str(game.gold) size 15 ypos 4
|
|
|
|
add "interface/icons/small/tonks.webp"
|
|
|
|
text str(ton_friendship) size 15 ypos 4
|
|
|
|
|
|
|
|
|
|
|
|
vpgrid:
|
|
|
|
cols 1
|
|
|
|
xysize (548, 400)
|
|
|
|
pos (6, 101)
|
|
|
|
draggable True
|
|
|
|
mousewheel "change"
|
|
|
|
scrollbars "vertical"
|
|
|
|
xfill True
|
|
|
|
yfill True
|
|
|
|
|
|
|
|
# TODO: Reduce the clutter and optimize the code.
|
2022-09-29 21:19:55 +00:00
|
|
|
for i in upgrades_dict[current_category]["outfits"].values():
|
2022-05-16 23:48:22 +00:00
|
|
|
$ linear_price = 0
|
|
|
|
|
|
|
|
if len(i) > 0 and (i[0].unlocked or upgrades_show_locked):
|
|
|
|
vbox:
|
|
|
|
hbox:
|
|
|
|
spacing 0
|
2022-09-29 21:19:55 +00:00
|
|
|
for x in range(len(i)):
|
2022-05-16 23:48:22 +00:00
|
|
|
if x < len(i)-1:
|
|
|
|
if not i[x+1].unlocked:
|
|
|
|
$ linear_price += i[x+1].price
|
|
|
|
$ actual_price = linear_price-i[x+1].price
|
|
|
|
$ favor_req = (x)*25
|
|
|
|
elif x == len(i)-1:
|
|
|
|
$ actual_price = linear_price
|
|
|
|
$ favor_req = 75
|
|
|
|
frame:
|
|
|
|
style "empty"
|
|
|
|
xysize (95, 130)
|
|
|
|
xpos 10
|
|
|
|
if x < len(i):
|
|
|
|
add Flatten(i[x].get_image()) align (1.0, 1.0) zoom 0.125 alpha (1.0 if ((game.gold >= actual_price and ton_friendship >= favor_req) or i[x].unlocked) else 0.5)
|
|
|
|
if i[x].unlocked:
|
|
|
|
add "interface/topbar/icon_check.webp" zoom 0.5 align (0.85, 1.0)
|
|
|
|
else:
|
|
|
|
button:
|
|
|
|
style gui.theme("overlay_button")
|
|
|
|
xysize (76, 130)
|
|
|
|
action Return(["buy", actual_price, i, x, favor_req])
|
|
|
|
if x < len(i)-1:
|
|
|
|
frame:
|
|
|
|
style "empty"
|
|
|
|
xysize (50, 50)
|
|
|
|
yalign 0.5
|
|
|
|
text ("" if (linear_price <= 0) else str(favor_req+25)+"{unicode}\u2764{/unicode}") color ("#b20000" if (ton_friendship < favor_req+25) else "#402313") size 14 align (0.5, 0.25)
|
|
|
|
text (str(linear_price)+"g" if linear_price > 0 else "Sold!") color ("#b20000" if (0 < linear_price > game.gold) else "#402313") size 14 align (0.5, 0.7)
|
|
|
|
text "{unicode}\u0362{/unicode}" size 65 align (1.0, 0.5) xoffset 5
|
|
|
|
add gui.format("interface/achievements/{}/spacer.webp") yalign 1.0 xpos 274 xanchor 0.5
|