Yule ball, odd jobs, and menus

* Converted Hermione's jobs into new system and added them into the new 'Odd jobs' favor section
* Converted Hermione's yule ball event chain into the new system
* Improved milestone unlock for Hermione tier 4
* Improved menu exit choice handling
* Moved unused labels outside the script files
* Reimplemented disabled menu option
This commit is contained in:
LoafyLemon 2023-06-28 23:02:39 +01:00
parent dd128db58c
commit c13867b7eb
9 changed files with 535 additions and 565 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -162,20 +162,27 @@ label hermione_favor_menu:
jump hermione_favor_menu jump hermione_favor_menu
"-Personal favours-" (icon="interface/icons/small/heart_red.webp"): "-Personal favours-" (icon="interface/icons/small/heart_red.webp"):
label .favors:
call tutorial("hearts") call tutorial("hearts")
$ result = show_events_menu(hermione_favors) $ result = show_events_menu(hermione_favors)
if result: if result == "disabled":
"You haven't unlocked this favor opportunity yet."
jump .favors
elif result == "exit":
jump .skip_points_check
else:
$ result.start() $ result.start()
jump hermione_favor_menu
"-Public requests-" (icon="interface/icons/small/star_yellow.webp", style="disabled") if not game.daytime: "-Public requests-" (icon="interface/icons/small/star_yellow.webp", style="disabled") if not game.daytime:
nar "Public requests are available during the day only." nar "Public requests are available during the day only."
jump .skip_points_check jump .skip_points_check
"-Public requests-" (icon="interface/icons/small/star_yellow.webp") if game.daytime: "-Public requests-" (icon="interface/icons/small/star_yellow.webp") if game.daytime:
label .requests:
if states.her.public_level >= 16 and not "public" in states.her.ev.yule_ball.variant: if states.her.public_level >= 16 and not "public" in states.her.ev.yule_ball.variant:
# Public whore ending choice # Public whore ending choice
$ renpy.choice_for_skipping() $ renpy.choice_for_skipping()
@ -192,10 +199,30 @@ label hermione_favor_menu:
$ result = show_events_menu(hermione_requests) $ result = show_events_menu(hermione_requests)
if result: if result == "disabled":
"You haven't unlocked this request opportunity yet."
jump .requests
elif result == "exit":
jump .skip_points_check
else:
$ result.start() $ result.start()
jump hermione_favor_menu "-Odd Jobs-" (icon="interface/icons/small/gold.webp"):
label .odd_jobs:
$ result = show_events_menu(hermione_jobs, report_progress=False)
if result == "disabled":
"You haven't unlocked this job opportunity yet."
jump .odd_jobs
elif result == "exit":
jump .skip_points_check
else:
$ result.start()
"-Odd Jobs-" (icon="interface/icons/small/gold.webp", style="disabled") if not game.daytime:
nar "Public requests are available during the day only."
jump .skip_points_check
"-Public Shaming-" (icon="interface/icons/small/star_pink.webp", style="disabled") if not game.daytime: "-Public Shaming-" (icon="interface/icons/small/star_pink.webp", style="disabled") if not game.daytime:
nar "Public Shaming events are available during the day only." nar "Public Shaming events are available during the day only."

View File

@ -1,60 +1,5 @@
label hermione_talk: label hermione_talk:
menu: menu:
"-Working-" (icon="interface/icons/small/gold.webp") if states.her.favors_unlocked:
label working_menu:
menu:
"-Work as a maid-" if game.daytime and her_outfit_maid.unlocked:
jump job_1
"-Work as a maid-" (style="disabled") if game.daytime and not her_outfit_maid.unlocked:
gen "(I'll need an outfit for hermione if I want her to work.)" ("base", xpos="far_left", ypos="head")
jump working_menu
"-Work as a maid-" (style="disabled") if not game.daytime:
"This job is only available during the day."
jump working_menu
#"-Work as a cheerleader for Gryffindor-" if game.daytime and (hg_cheer_g_ITEM.unlocked or hg_cheer_g_sexy_ITEM.unlocked):
#jump job_3
#"-Work as a cheerleader for Gryffindor-" if game.daytime and not (hg_cheer_g_ITEM.unlocked or hg_cheer_g_sexy_ITEM.unlocked):
#gen "(I'll need an outfit for hermione if I want her to work.)" ("base", xpos="far_left", ypos="head")
#jump working_menu
#"-Work as a cheerleader for Gryffindor-" (style="disabled") if not game.daytime:
#"This job is only available during the day."
#jump working_menu
#"-Work as a cheerleader for Slytherin-" if game.daytime and (hg_cheer_s_ITEM.unlocked or hg_cheer_s_sexy_ITEM.unlocked):
#jump job_4
#"-Work as a cheerleader for Slytherin-" if game.daytime and not (hg_cheer_s_ITEM.unlocked or hg_cheer_s_sexy_ITEM.unlocked):
#gen "(I'll need a slytherin cheerleader outfit for hermione if I want her to work.)" ("base", xpos="far_left", ypos="head")
#jump working_menu
#"-Work as a cheerleader for Slytherin-" (style="disabled") if not game.daytime:
#"This job is only available during the day."
#jump working_menu
"-Hidden-" (style="disabled") if not states.her.ev.promote_cardgame.offered or not poker_outfit_ITEM.unlocked:
"You haven't unlocked this job opportunity yet."
jump working_menu
"-Work by advertising the card game-" (style="disabled") if states.her.ev.promote_cardgame.offered and poker_outfit_ITEM.unlocked and not her_outfit_poker.unlocked:
gen "(I'll need an outfit for Hermione if I want her to work.)" ("base", xpos="far_left", ypos="head")
gen "(Maybe the twins have something fitting for her in their stock.)" ("base", xpos="far_left", ypos="head")
jump working_menu
"-Work by advertising the card game-" (style="disabled") if not game.daytime and states.her.ev.promote_cardgame.offered and her_outfit_poker.unlocked:
"This job is only available during the day."
jump working_menu
"-Work by advertising the card game-" if game.daytime and states.her.ev.promote_cardgame.offered and her_outfit_poker.unlocked:
jump job_5
"-Never mind-":
jump hermione_talk
### Astoria ### ### Astoria ###
"-Ask her to help Tonks-" (icon="interface/icons/small/tonks.webp") if states.ast.ev.intro.e1_complete and not states.ast.ev.intro.e3_complete: "-Ask her to help Tonks-" (icon="interface/icons/small/tonks.webp") if states.ast.ev.intro.e1_complete and not states.ast.ev.intro.e3_complete:
if states.ast.ev.intro.e2_ask_hermione: if states.ast.ev.intro.e2_ask_hermione:

View File

@ -1,5 +1,7 @@
### Yule Ball Ending ### ### Yule Ball Ending ###
default her_ev_yule_ball_ending_e1 = Event(id="her_ev_yule_ball_ending_e1", wait=2, label="ball_ending_E1", priority=0, req="game.daytime", repeat=False)
label ball_ending_start: label ball_ending_start:
gen "[name_hermione_genie], that ball you've mentioned..." ("base", xpos="far_left", ypos="head") gen "[name_hermione_genie], that ball you've mentioned..." ("base", xpos="far_left", ypos="head")
gen "When did you say it would start again?" ("base", xpos="far_left", ypos="head") gen "When did you say it would start again?" ("base", xpos="far_left", ypos="head")
@ -16,10 +18,10 @@ label ball_ending_start:
$ states.her.ev.yule_ball.started = True $ states.her.ev.yule_ball.started = True
$ ss_event_pause += 2 $ ss_event_pause += 2
$ her_ev_yule_ball_ending_e1.enqueue()
jump hermione_favor_menu jump hermione_favor_menu
screen genie_snape_shake_hands(shake=False): screen genie_snape_shake_hands(shake=False):
if shake: if shake:
add "characters/snape/chibis/handshake/hand_01.webp" pos (220, 205) zoom 0.5 add "characters/snape/chibis/handshake/hand_01.webp" pos (220, 205) zoom 0.5

View File

@ -1,4 +1,9 @@
default her_ev_yule_ball_e4 = Event(id="her_ev_yule_ball_e4", wait=2, label="ball_quest_E4", priority=15, req="game.daytime", repeat=False)
default her_ev_yule_ball_e3 = Event(id="her_ev_yule_ball_e3", wait=4, label="ball_quest_E3", priority=15, req="game.daytime", repeat=False, subevents=["her_ev_yule_ball_e4"])
default her_ev_yule_ball_e2 = Event(id="her_ev_yule_ball_e2", wait=1, label="ball_quest_E2", priority=15, req="game.daytime", repeat=False, subevents=["her_ev_yule_ball_e3"])
default her_ev_yule_ball_e1 = Event(id="her_ev_yule_ball_e1", label="ball_quest_E1", priority=15, req="states.her.tier >= 6 and game.daytime and not states.her.ev.yule_ball.e1_complete", autoenqueue=True, repeat=False, subevents=["her_ev_yule_ball_e2"])
#hermione asks genie about who will be in-charge of the ball #hermione asks genie about who will be in-charge of the ball
label ball_quest_E1: label ball_quest_E1:
stop music fadeout 1.0 stop music fadeout 1.0
@ -609,7 +614,7 @@ label ball_quest_E4:
gen "[name_hermione_genie]?" ("base", xpos="far_left", ypos="head") gen "[name_hermione_genie]?" ("base", xpos="far_left", ypos="head")
her "Sorry to disturb you [name_genie_hermione]..." ("open", "base", "worried", "mid", xpos="right", ypos="base") her "Sorry to disturb you [name_genie_hermione]..." ("open", "base", "worried", "mid", xpos="right", ypos="base")
her "I came to apologise for my..." ("open", "base", "worried", "R") her "I came to apologise for my..." ("open", "base", "worried", "R")
her "... My hysterical behaviour yesterday." her "... My hysterical behaviour the other day."
gen "Sure thing, don't worry about it." ("base", xpos="far_left", ypos="head") gen "Sure thing, don't worry about it." ("base", xpos="far_left", ypos="head")
her "Thank you, [name_genie_hermione]." ("open", "base", "base", "mid") her "Thank you, [name_genie_hermione]." ("open", "base", "base", "mid")
her "Still, I cannot help but feel awful for causing a scene..." ("open", "closed", "angry", "mid") her "Still, I cannot help but feel awful for causing a scene..." ("open", "closed", "angry", "mid")

View File

@ -242,22 +242,6 @@ label quests:
$ play_potion_return("astoria") $ play_potion_return("astoria")
#
# SEVERUS SNAPE - EVENTS
#
if ss_event_pause == 0:
if game.daytime:
# Ending events
if states.her.level >= 15 and states.her.ev.yule_ball.e1_complete and not states.her.ev.yule_ball.e2_complete:
# Snape complains that appointing Hermione in the Autumn Ball committee was a mistake.
jump ball_quest_E2
else:
# Ending events
if states.her.ev.yule_ball.started and not states.her.ev.yule_ball.complete:
jump ball_ending_E1
# #
# NYMPHADORA TONKS - EVENTS # NYMPHADORA TONKS - EVENTS
# #
@ -281,30 +265,8 @@ label quests:
if hg_event_pause == 0: if hg_event_pause == 0:
if game.daytime: if game.daytime:
# Ending events pass
if states.her.level >= 15 and not states.her.ev.yule_ball.e1_complete:
# Hermione wants to be in the Autumn Ball committee.
jump ball_quest_E1
if states.her.level >= 18 and states.her.ev.yule_ball.e2_complete and not states.her.ev.yule_ball.e3_complete:
# Hermione cries about having no proper dress for the Ball.
jump ball_quest_E3
if states.her.level >= 18 and states.her.ev.yule_ball.e3_complete and not states.her.ev.yule_ball.e4_complete:
# Hermione apologizes for the day (event) before.
jump ball_quest_E4
else: else:
if current_job == "maid":
jump maid_responses
elif current_job == "barmaid":
jump barmaid_responses
elif current_job == "gryffindor_cheerleader":
jump gryffindor_cheer_responses
elif current_job == "slytherin_cheerleader":
jump slytherin_cheer_responses
elif current_job == "promoter":
jump hermione_helping_selling_cards
python: python:
for i in hg_ps_list: #Call any public shaming event if it's in progress for i in hg_ps_list: #Call any public shaming event if it's in progress
if i.inProgress: if i.inProgress:

View File

@ -305,7 +305,9 @@ init -1 python:
# We need to add these after defaults are finished. # We need to add these after defaults are finished.
renpy.config.label_callbacks.append(execute_event_callbacks) renpy.config.label_callbacks.append(execute_event_callbacks)
def show_events_menu(queues, filter=False, **kwargs): def show_events_menu(queues, filter=False, report_progress=True, **kwargs):
# This function is a stop gap until we update interfaces. Because it's not tied to any internals,
# it can be easily replaced or changed in the future without breaking save compatibility.
def menu_hints(queue, filter): def menu_hints(queue, filter):
filtered_queue = queue.list_filtered() if filter is False else queue.list_filtered(filter) filtered_queue = queue.list_filtered() if filter is False else queue.list_filtered(filter)
total_applicable = len(filtered_queue) total_applicable = len(filtered_queue)
@ -313,17 +315,15 @@ init -1 python:
completed = 0 completed = 0
icons = [] icons = []
path = "interface/icons/small/"
for ev in filtered_queue: for ev in filtered_queue:
if ev.completed: if ev.completed:
icons.append("interface/icons/small/heart_red.webp") icons.append(f"interface/icons/small/heart_red.webp")
completed += 1 completed += 1
elif ev.completed_failed: elif ev.completed_failed:
icons.append("interface/icons/small/heart_black.webp") icons.append(f"interface/icons/small/heart_black.webp")
completed += 1 completed += 1
else: else:
icons.append("interface/icons/small/heart_empty.webp") icons.append(f"interface/icons/small/heart_empty.webp")
hints = f" {completed}/{total_applicable}/{total_events}" hints = f" {completed}/{total_applicable}/{total_events}"
@ -336,20 +336,30 @@ init -1 python:
queue = getattr(store, queue) queue = getattr(store, queue)
hints, icons = menu_hints(queue, filter) hints, icons = menu_hints(queue, filter)
_kwargs = {"progress": icons}
title = f"-{title}-" title = f"-{title}-"
if config.developer: if config.developer:
title += hints title += hints
if ( ev := queue.next()) and ev.requirements_met():
action = queue
else:
action = "disabled"
_kwargs = {}
if report_progress:
_kwargs = {"progress": icons}
if action == "disabled":
_kwargs["style"] = "disabled"
location = renpy.game.context().current location = renpy.game.context().current
choice = ui.ChoiceReturn(title, queue, location, kwargs=_kwargs) choice = ui.ChoiceReturn(title, action, location, kwargs=_kwargs)
l.append( (title, choice) ) l.append( (title, choice) )
l.append( ("-Never mind-", False) ) l.append( ("-Never mind-", "exit") )
return renpy.display_menu(l, **kwargs) return renpy.display_menu(l, **kwargs)
config.after_default_callbacks.append(initialize_event_callbacks) config.after_default_callbacks.append(initialize_event_callbacks)