WTS/game/scripts/interface/stats.rpy
Gouvernathor d48708579b Fix misuse of variable
- don't use a reserved name (starting with an underscore)
- use a file-local mangled name (starting with two underscores
- use renpy.dynamx to cleanup the variable automatically

(cherry picked from commit 3e86094b0b)
2024-03-24 16:00:53 +00:00

463 lines
25 KiB
Plaintext

init python:
def stats_sortfilter(item, sortby=False):
return item
default stats_show_locked = False
label update_stats:
### Hermione ###
# Whoring
$ her_whoring_word_list = ["Pure", "Naive", "Curious", "Naughty", "Perverse", "Immoral", "Slutty", "Shameless", "Cumslut", "Total Cumslut", "Shameless Cumslut"]
$ her_whoring_word = her_whoring_word_list[int(min(states.her.level, 24)/2.4)]
# Reputation
$ her_reputation_word_list = ["Teacher's pet", "School star", "good girl", "minx", "slutty schoolgirl", "easy lay", "whore", "slut for sex", "gryffindor whore", "school cumdump", "mudblood cumdump"]
#$ slutWords = ["Teacher's pet", "School star", "good girl", "headmaster's pet", "slutty schoolgirl", "slut", "headmaster's slut", "daddy's girl", "gryffindor slut", "Dumbledore's whore", "Dumbledore's cumdump"]
$ her_reputation_word = her_reputation_word_list[int(min(states.her.public_level, 24)/2.4)]
# Tutoring
$ her_tutoring_word_list = ["Not started", "naive", "tempted", "curious", "tainted", "eager", "sinful", "perverted", "corrupted", "depraved", "shattered"]
$ her_tutoring_word = her_tutoring_word_list[int(states.her.ev.tutoring.stage/1.5)]
# Mood
$ her_mood_word_list = ["Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry"]
$ her_mood_word = her_mood_word_list[int(min(states.her.mood, 10)/1.0)]
### Astoria ###
#call astoria_clothing_level
#$ ast_cuteness_word_list = ["Ugly Duckling", "Swot", "", "", "", "", "", "Cutypie", "", "", ""]
#$ ast_cuteness_word = ast_cuteness_word_list[int(ast_clothing_level/10)]
# Mood
$ ast_mood_word_list = ["Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry"]
$ ast_mood_word = ast_mood_word_list[int(min(states.ast.mood, 10)/1.0)]
### Cho ###
# Whoring
$ cho_whoring_word_list = ["Incorruptible", "Focused", "Resilient", "Bi-Curious", "Naughty", "Immoral", "Perverse", "Slutty", "Shameless", "Cumslut", "Shameless Cumslut"]
$ cho_whoring_word = cho_whoring_word_list[int(min(states.cho.level, 24)/2.4)]
# Reputation
$ cho_reputation_word_list = ["Tomboy", "Team Player", "Quidditch Star", "Flying Ace", "Minx", "Manipulative", "Exploiting", "Cheater", "Team's Cumdump", "Quidditch Whore", "Cheating Slut"]
$ cho_reputation_word= cho_reputation_word_list[int(min(states.cho.public_level, 24)/2.4)]
# Mood
$ cho_mood_word_list = ["Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry"]
$ cho_mood_word = cho_mood_word_list[int(min(states.cho.mood, 10)/1.0)]
### Snape ###
# # Support
# $ sna_support_word_list = ["Tight-Arse", "Miser", "Stingy", "Sparing", "Adequate", "Loose", "Easy", "Generous", "Frivolous", "Excessive", "Exorbitant"]
# $ sna_support_word = sna_support_word_list[int(min(sna_support, 15)/1.5)]
# Friendship
$ sna_friendship_word_list = ["Unknown", "Colleague", "Confidant", "Trusted", "Acquaintance", "Friend", "Good friend", "Homie", "If I had to pick a dude...", "BFF", "Bros"]
$ sna_friendship_word = sna_friendship_word_list[int(min(states.sna.level, 100)/10)]
### Tonks ###
# Reputation
$ ton_reputation_word_list = ["Teacher", "Bore", "Weirdo", "A Bit Nutty", "Easy Going", "Tart", "Naughty Teacher", "Slutty Teacher", "Slag", "Shameful", "Disgrace"]
$ ton_reputation_word = ton_reputation_word_list[int(min(states.ton.public_level, 24)/2.4)]
# Support
# $ ton_support_word_list = ["Undecided", "Modest", "Candid", "Unbiased", "Positive", "Fair", "Neutral", "Biased", "Scummy", "Cruel", "Heartless"]
# $ ton_support_word = ton_support_word_list[int(min(ton_support, 12)/1.2)]
# Friendship
$ ton_friendship_word_list = ["Unknown", "inferior", "employee", "advisor", "trusted advisor", "Acquaintance", "friend", "Girlfriend", "Partner in crime", "Bonnie & Clyde", "Master & Slave"]
$ ton_friendship_word = ton_friendship_word_list[int(min(states.ton.level, 100)/10)]
#$ ton_sluttiness_word_list = ["Masochist", "Disgrace", "Street Whore", "Harlot", "Tart", "Sexually open", "Naughty Teacher", "Easy Going", "Professor", "Bore", "Nun"]
#$ ton_sluttiness_word = ton_sluttiness_word_list[int(ton_clothing_level/10)]
return
label stats:
$ gui.in_context("stats_menu")
jump main_room_menu
label stats_menu(xx=150, yy=90):
call update_stats
# Stats dictionary
$ stats_dict = {
"Genie": {"ico": "genie", "flag": True, "name": "Genie", "sex": "Yes", "height": "6.2ft", "weight": "200lb", "job": "Headmaster", "hates": "Lamps", "likes": "Tits"},
"Snape": {"ico": "snape", "flag": states.sna.unlocked, "name": "Severus Snape", "sex": "Male", "height": "5.9ft", "weight": "155lb", "job": "Teacher", "hates": "Everyone", "likes": "Rain"},
"Tonks": {"ico": "tonks", "flag": states.ton.unlocked, "name": "Nymphadora Tonks", "sex": "Fluid", "height": "5.6ft", "weight": "130lb", "job": "Teacher", "hates": "Pineapple Pizza", "likes": "Girls"},
"Hermione": {"ico": "hermione", "flag": states.her.unlocked, "name": "Hermione Granger", "sex": "Female", "height": "5.2ft", "weight": "126lb", "job": "Student", "hates": "Slytherin", "likes": "Books"},
"Cho": {"ico": "cho", "flag": states.cho.unlocked, "name": "Cho Chang", "sex": "Female", "height": "5.1ft", "weight": "122lb", "job": "Student", "hates": "Hermione", "likes": "Winning"},
"Luna": {"ico": "luna", "flag": states.lun.unlocked, "name": "Luna Lovegood", "sex": "Female", "height": "5.2ft", "weight": "117lb", "job": "Student", "hates": "Wrackspurts", "likes": "{size=-2}Magical creatures{/size}"},
"Astoria": {"ico": "astoria", "flag": states.ast.unlocked, "name": "Astoria Greengrass", "sex": "Female", "height": "5.0ft", "weight": "102lb", "job": "Student", "hates": "Rules", "likes": "Breaking them"},
"Susan": {"ico": "susan", "flag": states.sus.unlocked, "name": "Susan Bones", "sex": "Female", "height": "5.1ft", "weight": "135lb", "job": "Student", "hates": "Chores", "likes": "You {size=-4}Secretly..{/size}"}
}
$ stats_categories_sorted = ["Genie", "Snape", "Tonks", "Hermione", "Cho", "Luna", "Astoria", "Susan"] #"Ginny", "Daphne", "Padma", "Patil", "Myrtle", "Mafkin"
$ stats_categories_sorted_length = len(stats_categories_sorted)
$ current_category = states.last_girl.capitalize() if states.last_girl else stats_categories_sorted[0]
$ current_item = stats_dict[current_category]
$ current_subcategory = "overview"
$ current_sorting = stats_show_locked
$ category_items = stats_dict[current_category]
$ menu_items = category_items
$ menu_items_length = len(menu_items)
show screen stats(xx, yy)
label .after_init:
$ renpy.dynamic(__choice = ui.interact())
if __choice[0] == "category":
$ current_category = __choice[1]
$ category_items = stats_dict[current_category]
$ menu_items = stats_sortfilter(category_items, current_sorting)
$ menu_items_length = len(menu_items)
$ current_item = stats_dict[current_category]
#$ current_subcategory = "overview"
elif __choice[0] == "subcat":
if __choice[1] != current_subcategory:
$ current_subcategory = __choice[1]
else:
hide screen stats
return
jump .after_init
screen stats(xx, yy):
tag stats
zorder 30
modal True
add "gui_fade"
if renpy.mobile:
use close_button_background
use close_button(key=["stats", "game_menu"])
fixed:
if settings.get("animations"):
at gui_animation
use stats_menu(xx, yy)
use stats_menuitem(xx, yy)
screen stats_menu(xx, yy):
tag stats_menu
zorder 30
modal True
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:
style_prefix gui.theme('achievements_filters')
pos (6, 384)
button action NullAction() style "empty" xsize 195 ysize 32
frame:
style "empty"
textbutton "Show locked:" action ToggleVariable("stats_show_locked", True, False)
add gui.theme("check_{}").format(str(stats_show_locked).lower()) xalign 0.8 ypos 4
vbox:
pos (6, 6)
for category in stats_categories_sorted:
if not stats_show_locked and not stats_dict[category]["flag"]:
pass
else:
frame:
style "empty"
xysize (195, 50)
vbox:
textbutton (category if stats_dict[category]["flag"] else "???"):
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")
if stats_dict[category]["flag"]:
$ image_zoom = crop_image_zoom("interface/icons/head/"+stats_dict.get(category).get("ico")+".webp", 42, 42)
else:
$ image_zoom = crop_image_zoom("interface/icons/head/"+stats_dict.get(category).get("ico")+"_locked.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 stats_menuitem(xx, yy):
tag stats_menuitem
zorder 30
window:
style "empty"
style_prefix gui.theme()
pos (xx+217, yy-53)
xysize (560, 507)
use invisible_button()
add gui.format("interface/achievements/{}/panel.webp")
add "interface/achievements/markup.webp"
text "Characters" size 22 xalign 0.5 ypos 65
hbox:
style_prefix gui.theme("tab")
pos (15, 52)
yanchor 0.5
textbutton "Overview":
action [Return(["subcat", "overview"]), SelectedIf(current_subcategory=="overview")]
textbutton "Details":
action [Return(["subcat", "details"]), SelectedIf(current_subcategory=="details")]
# Character sprites
frame:
style "empty"
xysize (200, 406)
align (1.0, 1.0)
offset (-10, -4)
if current_category == "Genie":
add "genie_stats" zoom 0.175 align (1.0, 1.0) xzoom -1
elif current_category == "Snape":
if current_item["flag"]:
add "characters/snape/main/snape_09.webp" zoom 0.35 align (0.9, 1.0) xzoom 1
else:
add "interface/characters/snape_locked.webp" zoom 0.35 align (0.9, 1.0) xzoom 1
elif current_category == "Tonks":
if current_item["flag"]:
add tonks.image zoom 0.41 align (0.7, 1.0) xzoom 1
else:
add "interface/characters/tonks_locked.webp" zoom 0.41 align (0.7, 1.0) xzoom 1
elif current_category == "Hermione":
if current_item["flag"]:
add hermione.image zoom 0.39 align (0.7, 1.0) xzoom 1
else:
add "interface/characters/hermione_locked.webp" zoom 0.39 align (0.65, 1.0) xzoom 1
elif current_category == "Cho":
if current_item["flag"]:
add cho.image zoom 0.42 align (0.65, 1.0) xzoom 1
else:
add "interface/characters/cho_locked.webp" zoom 0.42 align (0.65, 1.0) xzoom 1
elif current_category == "Luna":
if current_item["flag"]:
add luna.image zoom 0.39 align (0.75, 1.0) xzoom 1
else:
add "interface/characters/luna_locked.webp" zoom 0.39 align (0.75, 1.0) xzoom 1
elif current_category == "Astoria":
if current_item["flag"]:
add astoria.image zoom 0.4 align (0.7, 1.0) xzoom 1
else:
add "interface/characters/astoria_locked.webp" zoom 0.4 align (0.7, 1.0) xzoom 1
elif current_category == "Susan":
if current_item["flag"]:
add susan.image zoom 0.4 align (0.65, 1.0) xzoom 1
else:
add "interface/characters/susan_locked.webp" zoom 0.4 align (0.65, 1.0) xzoom 1
frame:
style "empty"
xysize (360, 406)
yalign 1.0 xoffset 6
if current_subcategory == "overview":
if current_item["flag"]:
text current_item["name"] size 20 xalign 0.5 xanchor 0.5 ypos 5
else:
text "???" size 20 xalign 0.5 xanchor 0.5 ypos 5
vbox:
xoffset 10
hbox:
spacing 20
pos (10, 36)
vbox:
text "Sex:" size 15
text "Height:" size 15
text "Weight:" size 15
vbox:
spacing 3
if current_item["flag"]:
text current_item["sex"] size 12
text current_item["height"] size 12
text current_item["weight"] size 12
else:
text "unknown" size 12
text "unknown" size 12
text "unknown" size 12
vbox:
text "Job:" size 15
text "Hates:" size 15
text "Likes:" size 15
vbox:
spacing 3
if current_item["flag"]:
text current_item["job"] size 12
text current_item["hates"] size 12
text current_item["likes"] size 12
else:
text "unknown" size 12
text "unknown" size 12
text "unknown" size 12
if current_item["flag"]:
vbox:
yoffset 35
xoffset 50
at transform:
zoom 0.62
if current_category == "Genie":
use stat_bar(int(100/10), "-Lust-", "", 100)
use stat_bar(int(0/10), "-Sanity-", "", 0)
#use stat_bar(int(speed_writing/0.25), "-Speed Writing-", "", speed_writing)
#text "Jerked off -"+str(states.bird_fed_times)+"- times"
elif current_category == "Snape":
use stat_bar(int(3/1.0), "-Mood-" , "Grumpy", 3)
#use stat_bar(int(sna_support/1.5), "-Support-", sna_support_word, sna_support) # sna_support between 0 and 15.
use stat_bar(int(states.sna.level/10), "-Friendship-", sna_friendship_word, states.sna.level)
elif current_category == "Tonks":
use stat_bar(int(10/1.0), "-Mood-" , "Content", 10)
use stat_bar(int(states.ton.tier/0.2), "-Favour Tier-", "", states.ton.tier) # 4 will be max.
use stat_bar(int(states.ton.public_level/2.4), "-Reputation-", ton_reputation_word, states.ton.public_level) # Current max is 9.
#use stat_bar(int(ton_support/1.2), "-Support-", ton_support_word, ton_support) # ton_support between 0 and 12.
use stat_bar(int(states.ton.level/10), "-Relationship-", ton_friendship_word, states.ton.level)
elif current_category == "Hermione":
use stat_bar(int(10-states.her.mood/1.0), "-Mood-" , her_mood_word, states.her.mood)
use stat_bar(int(states.her.tier/0.6), "-Favour Tier-", "", states.her.tier) # 6 will be max.
use stat_bar(int(states.her.level/2.4), "-Whoring-", her_whoring_word, states.her.level)
use stat_bar(int(states.her.public_level/2.4), "-Reputation-", her_reputation_word, states.her.public_level)
use stat_bar(int(states.her.ev.tutoring.stage/1.5), "-Tutoring-" , her_tutoring_word, states.her.ev.tutoring.stage)
elif current_category == "Cho":
use stat_bar(int(10-states.cho.mood/1.0), "-Mood-" , cho_mood_word, states.cho.mood)
use stat_bar(int(states.cho.tier/0.3), "-Favour Tier-", "", states.cho.tier) # 4 will be max.
use stat_bar(int(states.cho.level/0.9), "-Recklessness-", cho_whoring_word, states.cho.level)
use stat_bar(int(states.cho.public_level/0.9), "-Reputation-", cho_reputation_word, states.cho.public_level)
# TODO: Re-enable after Quidditch fixes
#use stat_bar(int((cc_ht.win_counter+cc_st.win_counter)/0.6), "{size=-10}-Quidditch Training-{/size}" , "Not started", cc_ht.win_counter+cc_st.win_counter) # TODO: Add word list # TODO: Add cc_gt.match_counter & cc_gt.win_counter
elif current_category == "Luna":
use stat_bar(int(10-states.lun.mood/1.0), "-Mood-" , "Cheerful", states.lun.mood) # TODO: Add word list
use stat_bar(int(states.lun.tier/0.4), "-Favour Tier-", "", states.lun.tier) # 4 is max.
use stat_bar(int(states.lun.level/0.9), "-Corruption-", "Naive", states.lun.level) # TODO: Add word list
use stat_bar(int(10/0.9), "-Reputation-", "Total Weirdo", 10) # Joke stat
#use stat_bar(int(0), "{size=-10}-Wrackspurts Therapy-{/size}" , "Not started", 0) # TODO: Add word list and variable
elif current_category == "Astoria":
use stat_bar(int(10-states.ast.mood/1.0), "-Mood-" , ast_mood_word, states.ast.mood)
use stat_bar(int(1/1), "-Favour Tier-", "", 1)
use stat_bar(int(states.ast.level/0.8), "-Affection-", "", states.ast.level) # TODO: Add word list
use stat_bar(int(3/0.9), "-Reputation-", "Mischievous", 4) # TODO: Add word list and variable, starts at level 4
#use stat_bar(int(ast_training_counter/0.9), "-Spell training-" , "Not started", ast_training_counter) # TODO: Add word list
elif current_category == "Susan":
use stat_bar(int(10-states.sus.mood/1.0), "-Mood-" , "Cheerful", states.sus.mood) # TODO: Add word list
use stat_bar(int(1/0.9), "-Favour Tier-", "", 1) # TODO: Add Susan tier
use stat_bar(int(states.sus.level/0.9), "-Confidence-", "Non-existent", states.sus.level) # TODO: Add word list
use stat_bar(int(0/0.9), "-Reputation-", "Invisible", 0) # TODO: Add word list and variable
use stat_bar(int(0), "{size=-10}-Assertiveness Training-{/size}" , "Not started", 0) # TODO: Add word list
else:
if current_item["flag"]:
vbox:
if current_category == "Genie":
use text_stat("Bird fed:")
use text_stat("- ", " times -", states.bird_fed_times)
use text_stat("Bird petted:")
use text_stat("- ", " times -", states.bird_petted_times)
use text_stat("You missed feeding your bird for:")
use text_stat("- ", " days...", (game.day - states.bird_fed_times) )
use text_stat("If you were a Quidditch player, you'd be a:")
use text_stat("- \"", "\" -", states.gen.stats.quidditch_position)
# elif current_category == "Snape":
# use text_stat("Hung out with Snape:")
# use text_stat("- ", " times -", ss_he_drink.counter)
# elif current_category == "Tonks":
# use text_stat("Hung out with Tonks:")
# use text_stat("- ", " times -", nt_he_drink.counter)
# elif current_category == "Hermione":
# # Tier 1
# use text_stat("You Jerked off in front of her:")
# use text_stat("- ", " times -", states.gen.stats.masturbated_to_hermione)
# use text_stat("You saw her panties:")
# use text_stat("- ", " times -", hg_pf_admire_panties.counter)
# use text_stat("You admired her tits:")
# use text_stat("- ", " times -", hg_pf_admire_breasts.counter)
# # Tier 2
# use text_stat("You groped her:")
# use text_stat("- ", " times -", hg_pf_grope.counter)
# # Tier 3
# use text_stat("Hermione has \"danced\" for you:")
# use text_stat("- ", " times -", hg_pf_strip.counter)
# # Tier 4
# use text_stat("Hermione has given you:")
# use text_stat("- ", " Handjobs -", hg_pf_handjob.counter)
# # Tier 5
# use text_stat("Hermione has given you:")
# use text_stat("- ", " Blowjobs -", hg_pf_blowjob.counter)
# use text_stat("Hermione has given you:")
# use text_stat("- ", " Tit jobs -", hg_pf_titjob.counter)
# # Tier 6
# use text_stat("You've had sex with her:")
# use text_stat("- ", " times -", hg_pf_sex.counter)
elif current_category == "Cho":
use text_stat("You Jerked off in front of her:")
use text_stat("- ", " times -", states.gen.stats.masturbated_to_cho)
elif current_category == "Luna":
pass
elif current_category == "Astoria":
pass
# elif current_category == "Susan":
# use text_stat("Cursed with Imperio:")
# use text_stat("- ", " times -", ag_se_imperio_sb.counter)
screen stat_bar(steps, top_text, bottom_text, stat_number, top_padding=20):
sensitive False
frame:
background "#0000"
ysize top_padding
text top_text xalign 0.5 size 30
frame:
background "#0000"
xalign 0.5
ysize 30
xsize 360
add Crop((0, 0, steps*36, 600), gui.format("interface/stats/{}/bar_full.webp"))
add gui.format("interface/stats/{}/bar_empty.webp")
text bottom_text+" (lvl " +str(stat_number)+ ")" xalign 0.5 size 20
screen text_stat(startText="", endText="", amount="", top_padding = 20):
sensitive False
text (startText +str(amount)+ endText) xpos 20 size 14