From a38069642112df050b6e53eb7e8244f1597b3685 Mon Sep 17 00:00:00 2001 From: LoafyLemon Date: Sun, 2 Jul 2023 19:14:48 +0100 Subject: [PATCH] Cho's Personal Favours and bug fixes * Converted Cho's personal favours into the new system, and cleaned up relevant code. * Fixed floating dust effect restarting on every interaction * Refactoring --- game/scripts/cg/cho.rpy | 4 +- .../events/favors/inspect_her_body_tier2.rpy | 55 ++++++++---- .../events/favors/inspect_her_body_tier3.rpy | 17 +++- .../characters/cho/events/favors/suck_it.rpy | 22 +++-- .../cho/events/favors/talk_to_me.rpy | 72 +++++++++++---- .../events/quidditch/hufflepuff_practice.rpy | 2 +- .../events/quidditch/slytherin_practice.rpy | 2 +- .../cho/events/quidditch/training.rpy | 34 ++++--- game/scripts/characters/cho/favors.rpy | 76 ++++++---------- game/scripts/characters/cho/summon.rpy | 89 +++++-------------- game/scripts/characters/cho/vars.rpy | 7 ++ .../characters/tonks/events/clothing.rpy | 2 +- 12 files changed, 206 insertions(+), 176 deletions(-) diff --git a/game/scripts/cg/cho.rpy b/game/scripts/cg/cho.rpy index 0ec7962d..ddd9f3e3 100644 --- a/game/scripts/cg/cho.rpy +++ b/game/scripts/cg/cho.rpy @@ -323,6 +323,8 @@ image cho_under_desk_blowjob_fast = Xray("cho_bj_desk_bj", "cho_bj_desk_bj_overl image cho_under_desk_idle_snape_no_spit = Xray("cho_bj_desk_idle_snape_no_spit", "cho_bj_desk_bj_overlay", "cho_bj_desk_bj_mask") transform softblink: + animation + choice: linear 1.0 alpha 0.0 linear 1.0 alpha 1.0 @@ -1829,7 +1831,6 @@ layeredimage cho_strip_personal_t3_e3_lying: fit_first True always "cho_strip_personal_t3_e3_background" - always "dustfloating" attribute tonks_body default group tonks_blush auto prefix "tonks_blush": @@ -1906,7 +1907,6 @@ layeredimage cho_strip_personal_t3_e3_on_knees: attribute cho_armfix_grab_spread default if_any ["cho_body_grab", "cho_body_grab_spread"] attribute cho_armfix_idle default if_all ["cho_body_idle"] - always "dustfloating" always "cho_strip_personal_t3_e3_foreground" group desk_cum prefix "desk_cum": diff --git a/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy b/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy index 6f820964..aa0b5ab1 100644 --- a/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy +++ b/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy @@ -1,30 +1,40 @@ -default cc_pf_strip_T2_E3_failed = False ### Cho Strip ### label cc_pf_strip: - # Start Event - $ cc_pf_strip.start() + if not _events_completed_any: + gen "{size=-4}(Should I ask her to let me inspect her?){/size}" ("base", xpos="far_left", ypos="head") + + menu: + "\"(Yes, let's do it!)\"": + pass + + "\"(Not right now.)\"": + $ _event.cancel() + jump cho_favor_menu + + return # End Event Jump - label end_cho_strip_event: +label end_cho_strip_event: - if states.cho.tier == 2 and states.cho.level < 9: # Points til 9 - $ states.cho.level += 1 + if states.cho.tier == 2 and states.cho.level < 9: # Points til 9 + $ states.cho.level += 1 - if states.cho.tier == 3 and states.cho.level < 15: # Points til 15 - $ states.cho.level += 1 + if states.cho.tier == 3 and states.cho.level < 15: # Points til 15 + $ states.cho.level += 1 $ cho.wear("all") # Reset clothes jump end_cho_event -# TODO: Add Fail events as Tier 1, currently named Tier 1 events become Tier 2. - ### Tier 2 (pre Slytherin) ### label cc_pf_strip_T2_intro_E1: + + call cc_pf_strip + gen "It's time for your next favour, [name_cho_genie]." ("base", xpos="far_left", ypos="head") cho "Of course, [name_genie_cho]." ("base", "base", "base", "mid") cho "What would you like me to do?" ("soft", "base", "base", "mid") @@ -345,6 +355,9 @@ label cc_pf_strip_T2_intro_E1: label cc_pf_strip_T2_intro_E2: + + call cc_pf_strip + cho "" ("upset", "base", "base", "R") gen "[name_cho_genie], to continue your training where we left off..." ("base", xpos="far_left", ypos="head") gen "I'd like you to, once again, undress!" ("grin", xpos="far_left", ypos="head") @@ -748,6 +761,9 @@ label cc_pf_strip_T2_intro_E2: jump end_cho_strip_event label cc_pf_strip_T2_intro_E3: + + call cc_pf_strip + gen "[name_cho_genie], how would you like to do another striptease for me?" ("grin", xpos="far_left", ypos="head") cho "(...)" ("annoyed", "narrow", "angry", "mid") gen "You did such a phenomenal job last time!" ("grin", xpos="far_left", ypos="head") @@ -820,13 +836,17 @@ label cc_pf_strip_T2_intro_E3: # Check if Hermione has already stripped for you. if not states.her.status.stripping: # Triggers in hg_pf_strip_T3_intro_E2. This check needs to always be no earlier here to make sure Luna is also unlocked. - if cc_pf_strip_T2_E3_failed: + if states.cho.ev.inspect_her_body.T2_E3_failed: + $ _event.cancel() jump cc_pf_strip_T2_E3_fail_repeat else: + $ _event.cancel() jump cc_pf_strip_T2_E3_fail # After you got Hermione to strip. + $ states.cho.ev.inspect_her_body.T2_E3_complete = True + gen "She does indeed." ("base", xpos="far_left", ypos="head") cho "Really?!{w} You got that cow to take off her clothes?" ("soft", "wide", "base", "mid") cho "Did you get any proof?" ("soft", "base", "worried", "mid") @@ -986,6 +1006,9 @@ label cc_pf_strip_T2_intro_E3: jump end_cho_strip_event label cc_pf_strip_T2_E3_repeat: + + call cc_pf_strip + gen "[name_cho_genie], why don't you come a bit closer?" ("base", xpos="far_left", ypos="head") cho "Of course, [name_genie_cho]..." ("base", "narrow", "base", "mid") @@ -1119,7 +1142,7 @@ label cc_pf_strip_T2_E3_fail: # Cho demands that you get Hermione to strip, so Cho has something to blackmail her should anything happen. # Cho gets dressed again and storms off. - $ cc_pf_strip_T2_E3_failed = True + $ states.cho.ev.inspect_her_body.T2_E3_failed = True gen "Actually, she doesn't..." ("base", xpos="far_left", ypos="head") cho "What? But I thought she'd--" ("soft", "wide", "base", "mid") @@ -1157,8 +1180,6 @@ label cc_pf_strip_T2_E3_fail: # Cho leaves. call cho_walk(action="leave") - # Event resets. (No progress) - $ _event.cancel() jump end_cho_event label cc_pf_strip_T2_E3_fail_repeat: @@ -1207,13 +1228,15 @@ label cc_pf_strip_T2_E3_fail_repeat: cho "" ("annoyed", "narrow", "angry", "mid") pause .8 + $ renpy.choice_for_skipping() + cho "I don't want Granger to report me to the stupid ministry, so unless you get her to take her clothes off--" ("soft", "narrow", "angry", "R") cho "I won't be \"poppin\" any titties." ("open", "narrow", "angry", "mid") + gen "(Maybe if I get Hermione to {b}strip for me{/b}, she won't have the leverage over Cho... )" ("base", xpos="far_left", ypos="head") + # Cho leaves. call cho_walk(action="leave") - # Event resets. (No progress) - $ _event.cancel() jump end_cho_event diff --git a/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy b/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy index 09c956b6..0b378d87 100644 --- a/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy +++ b/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy @@ -7,6 +7,9 @@ # Notes: Cho could be naked at this point so some sounds/effects like cloth pile has been moved. label cc_pf_strip_T3_intro_E1: + + call cc_pf_strip + gen "Come closer, [name_cho_genie]." ("base", xpos="far_left", ypos="head") cho "Yes, [name_genie_cho]..." ("base", "narrow", "base", "mid") @@ -224,7 +227,7 @@ label cc_pf_strip_T3_intro_E1: cho "I'm not giving him the satisfaction." ("annoyed", "narrow", "angry", "R") gen "Very well, forget about Snape." ("base", xpos="far_left", ypos="head") gen "But what about..." ("base", xpos="far_left", ypos="head") - jump cc_pf_strip_T3_intro_E1.choice + jump .choice cho "Professor Tonks?" ("quiver", "base", "base", "mid") @@ -288,6 +291,9 @@ label cc_pf_strip_T3_intro_E1: # Tonks enters and is immediately enticed by cho, she flirts with her a bit before cho starts asking questions. label cc_pf_strip_T3_intro_E2: + + call cc_pf_strip + gen "Alright, let's do this again." ("base", xpos="far_left", ypos="head") gen "We're gonna get your teacher up here -- and you'll strip for us, understood?" ("base", xpos="far_left", ypos="head") cho "Yes, [name_genie_cho]." ("smile", "base", "base", "mid") @@ -786,7 +792,6 @@ label cc_pf_strip_T3_intro_E2: cho @ cheeks blush "..." ("angry", "narrow", "angry", "L") #Blush #closed eyes #embarrassed #gen "How did you--" ("base", xpos="far_left", ypos="head") ton "What do you want, Snape?" ("upset", "narrow", "annoyed", "L") - pass "\"Severus! Please, stay and watch.\"": if cc_strip_no_snape: # Cho clearly told you she won't strip for Snape. @@ -803,7 +808,6 @@ label cc_pf_strip_T3_intro_E2: sna "Well, I can read the room..." ("snape_09") ton "Clearly..." ("upset", "narrow", "raised", "L") sna "As it happens, I can't stay for too much longer anyway." ("snape_03") - pass else: $ states.cho.mood += 12 @@ -816,7 +820,6 @@ label cc_pf_strip_T3_intro_E2: sna "..." ("snape_09") gen "You more than happily strip for all your other teachers... so why not Snape?" ("base", xpos="far_left", ypos="head") cho "All my other teachers? It was only you and Tonks that I agreed to do this for!" ("clench", "wide", "raised", "mid") - pass sna "As much as I'd like to watch you make a fool of yourself for us, Miss Chang, I have more important things to do." ("snape_13") gen "(More important than this?...)" ("base", xpos="far_left", ypos="head") @@ -1582,6 +1585,7 @@ label cc_pf_strip_T3_intro_E3: #Cho and Tonks on Desk CG + show dustfloating as cg_effects zorder 18 show cho_strip_personal_t3_e3_on_knees tonks_eyes_open_look_at_cho as cg zorder 17 with fade @@ -2775,6 +2779,7 @@ label cc_pf_strip_T3_intro_E3: show screen blkfade with d5 hide cg + hide cg_effects cho @ cheeks blush "" ("soft", "narrow", "base", "downR") ton @ cheeks blush "" ("grin", "base", "base", "L") @@ -3043,11 +3048,15 @@ label cc_pf_strip_T3_intro_E3: $ states.ton.busy = True $ states.cho.status.dick_seen = True + $ states.cho.ev.inspect_her_body.T3_E3_complete = True # End event. jump end_cho_strip_event label cc_pf_strip_T3_repeat: + + call cc_pf_strip + gen "I'm in the mood for another strip-show, [name_cho_genie]." ("base", xpos="far_left", ypos="head") cho "Of course you are, [name_genie_cho]." ("base", "narrow", "raised", "mid") cho "Who's going to watch me this time?" ("soft", "narrow", "base", "mid") diff --git a/game/scripts/characters/cho/events/favors/suck_it.rpy b/game/scripts/characters/cho/events/favors/suck_it.rpy index 15e4e894..045c62f5 100644 --- a/game/scripts/characters/cho/events/favors/suck_it.rpy +++ b/game/scripts/characters/cho/events/favors/suck_it.rpy @@ -4,25 +4,23 @@ label cc_pf_blowjob: - if cc_pf_blowjob.counter == 0: + if not _events_completed_any: gen "{size=-4}(Should I ask her for a blowjob?){/size}" ("base", xpos="far_left", ypos="head") - else: - gen "{size=-4}(I should ask her for another blowjob.){/size}" ("base", xpos="far_left", ypos="head") - if cc_pf_blowjob.counter < 1: menu: "\"(Yes, let's do it!)\"": pass + "\"(Not right now.)\"": + $ _event.cancel() jump cho_favor_menu.personal # Setup $ warned_her = False - $ cc_pf_blowjob.start() + return - # End Event Jump - label end_cc_pf_blowjob: +label end_cc_pf_blowjob: $ states.cho.status.blowjob = True $ cho.set_cum(None) @@ -35,6 +33,8 @@ label cc_pf_blowjob: label cc_pf_blowjob_T3_intro_E1: + call cc_pf_blowjob + if states.cho.ev.suck_it.variant == None: gen "[name_cho_genie], ready to reward your coach for a job well done?" ("base", xpos="far_left", ypos="head") cho "Of course... A deal's a deal." ("open", "narrow", "base", "mid") @@ -678,6 +678,9 @@ label cc_pf_blowjob_1: jump end_cc_pf_blowjob label cc_pf_blowjob_T3_E2: + + call cc_pf_blowjob + gen "Ready for an oral exam [name_cho_genie]?" ("base", xpos="far_left", ypos="head") cho "A what?" ("open", "base", "raised", "mid") gen "Time to put that mouth to good use..." ("base", xpos="far_left", ypos="head") @@ -1407,6 +1410,11 @@ label cc_pf_blowjob_T3_E2: jump end_cc_pf_blowjob label cc_pf_blowjob_T3_E3: + + call cc_pf_blowjob + + $ states.cho.ev.suck_it.T3_E3_complete = True + gen "Let's see what that mouth can do." ("base", xpos="far_left", ypos="head") cho @ cheeks blush "You want to...{w=0.4} use my mouth again [name_genie_cho]?" ("soft", "narrow", "base", "downR") cho @ cheeks blush "I suppose I could..." ("open", "narrow", "base", "down") #Blush #Horny diff --git a/game/scripts/characters/cho/events/favors/talk_to_me.rpy b/game/scripts/characters/cho/events/favors/talk_to_me.rpy index 9a0251fe..dcc5a1d9 100644 --- a/game/scripts/characters/cho/events/favors/talk_to_me.rpy +++ b/game/scripts/characters/cho/events/favors/talk_to_me.rpy @@ -4,42 +4,47 @@ label cc_pf_talk: - gen "{size=-4}(All I'll do is have an innocent conversation with her...){/size}" ("base", xpos="far_left", ypos="head") + if not _events_completed_any: + gen "{size=-4}(All I'll do is have an innocent conversation with her...){/size}" ("base", xpos="far_left", ypos="head") - if cc_pf_talk.counter < 1: menu: "\"(Yes, let's do it!)\"": pass + "\"(Not right now.)\"": - jump cho_favor_menu.personal + $ _event.cancel() + jump cho_favor_menu # Start Event - $ cc_pf_talk.start() + return # End Event Jump - label end_cho_talk_event: +label end_cho_talk_event: - if states.cho.tier == 1: - if states.cho.level < 3: # Points til 3 - $ states.cho.level += 1 + if states.cho.tier == 1: + if states.cho.level < 3: # Points til 3 + $ states.cho.level += 1 - elif states.cho.tier == 2: - if states.cho.level < 9: # Points til 9 - $ states.cho.level += 1 + elif states.cho.tier == 2: + if states.cho.level < 9: # Points til 9 + $ states.cho.level += 1 - elif states.cho.tier == 2: - if states.cho.level < 9: # Points til 9 - $ states.cho.level += 1 + elif states.cho.tier == 2: + if states.cho.level < 9: # Points til 9 + $ states.cho.level += 1 - elif states.cho.tier == 3: # Points til 15 - if states.cho.level < 15: - $ states.cho.level += 1 + elif states.cho.tier == 3: # Points til 15 + if states.cho.level < 15: + $ states.cho.level += 1 jump end_cho_event ### Tier 1 (pre Hufflepuff) ### label cc_pf_talk_T1_intro_E1: + + call cc_pf_talk + gen "Let's have a little chat shall we." ("base", xpos="far_left", ypos="head") cho "A chat, [name_genie_cho]?" ("open", "base", "raised", "mid") gen "Just to get to know each other a little bit better." ("grin", xpos="far_left", ypos="head") @@ -272,6 +277,9 @@ label cc_pf_talk_T1_intro_E1: jump end_cho_talk_event label cc_pf_talk_T1_intro_E2: + + call cc_pf_talk + gen "Get closer, [name_cho_genie]..." ("grin", xpos="far_left", ypos="head") cho "..." ("annoyed", "base", "base", "down") @@ -460,6 +468,11 @@ label cc_pf_talk_T1_intro_E2: jump end_cho_talk_event label cc_pf_talk_T1_E3: + + $ states.cho.ev.talk_to_me.t1_e3_complete = True + + call cc_pf_talk + gen "Care to tell me more about Quidditch?" ("base", xpos="far_left", ypos="head") cho "Of course, [name_genie_cho]." ("smile", "base", "base", "R") cho "I always love talking about Quidditch!" ("base", "base", "base", "mid") @@ -497,10 +510,12 @@ label cc_pf_talk_T1_E3: cho "(...)" ("annoyed", "narrow", "base", "R") gen "Yes? Go on..." ("base", xpos="far_left", ypos="head") cho "I believe he had a bit of an obsession with my panties, Sir." ("soft", "narrow", "base", "mid") + if not states.cho.ev.quidditch.hufflepuff_prepared: gen "A panties obsession? So so..." ("base", xpos="far_left", ypos="head") else: gen "*Ha!* Called it!" ("grin", xpos="far_left", ypos="head") + cho "It was a little bit creepy how often he tried to look up my skirt..." ("angry", "wide", "base", "mid") cho "I mean, who would do such a thing?" ("soft", "base", "base", "mid") gen "Yes, yes... how terrible of him..." ("base", xpos="far_left", ypos="head") @@ -522,6 +537,7 @@ label cc_pf_talk_T1_E3: "-Participate in the conversation-": $ states.gen.masturbating = False + gen "(No, I need to focus!)" ("base", xpos="far_left", ypos="head") gen "(This might be useful information in our game against him...)" ("base", xpos="far_left", ypos="head") gen "Please, carry on..." ("base", xpos="far_left", ypos="head") @@ -590,8 +606,8 @@ label cc_pf_talk_T1_E3: # Cho leaves. call cho_walk(action="leave") - call bld + if not states.cho.ev.quidditch.hufflepuff_prepared: gen "(I bet she enjoyed every second of it, or she'd most definitely have called him out...)" ("base", xpos="far_left", ypos="head") gen "(...)" ("base", xpos="far_left", ypos="head") @@ -667,6 +683,9 @@ label cc_pf_talk_T1_E3: ### Tier 2 (pre Slytherin) ### label cc_pf_talk_T2_intro_E1: + + call cc_pf_talk + gen "Miss Chang, it's time we have another chat." ("base", xpos="far_left", ypos="head") gen "Please come a bit closer..." ("base", xpos="far_left", ypos="head") cho "Yes, Sir." ("base", "base", "base", "mid") @@ -823,6 +842,9 @@ label cc_pf_talk_T2_intro_E1: jump end_cho_talk_event label cc_pf_talk_T2_intro_E2: + + call cc_pf_talk + gen "Would you mind if we had another chat?" ("base", xpos="far_left", ypos="head") cho "Of course not, [name_genie_cho]!" ("smile", "base", "base", "mid") gen "Come closer then..." ("base", xpos="far_left", ypos="head") @@ -1048,6 +1070,10 @@ label cc_pf_talk_T2_intro_E2: label cc_pf_talk_T2_E3: + $ states.cho.ev.talk_to_me.t2_e3_complete = True + + call cc_pf_talk + play music "music/fuzzball-parade-by-kevin-macleod.ogg" fadein 1 if_changed cho "" ("soft", "base", "base", "mid", xpos="mid", ypos="base", trans=fade) pause .5 @@ -1280,6 +1306,8 @@ label cc_pf_talk_T2_E3: label cc_pf_talk_T3_intro_E1: + call cc_pf_talk + # Talk about Harry, Mentions Ron gen "[name_cho_genie].{w=1.0} Are you in the mood for a little chat?" ("base", xpos="far_left", ypos="head") @@ -1474,6 +1502,9 @@ label cc_pf_talk_T3_intro_E1: jump end_cho_talk_event label cc_pf_talk_T3_intro_E2: + + call cc_pf_talk + #Mentions the twins and the girls gen "Let's have another chat, [name_cho_genie]." ("base", xpos="far_left", ypos="head") cho "About Quidditch?" ("smile", "base", "base", "mid") @@ -1585,6 +1616,11 @@ label cc_pf_talk_T3_intro_E2: jump end_cho_talk_event label cc_pf_talk_T3_E3: + + $ states.cho.ev.talk_to_me.t3_e3_complete = True + + call cc_pf_talk + # Talk more about each player. (Detailed descriptions.) gen "Let's discuss those girls again..." ("base", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy b/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy index 66bf04c5..128ef34c 100644 --- a/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy +++ b/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy @@ -153,7 +153,7 @@ label cc_ht_talk: cho "" ("base", "base", "base", "mid", xpos="base", ypos="base", trans=fade) jump cho_requests - elif not cc_pf_talk.is_tier_complete(): # Has NOT completed "Talk to me" favour yet. + elif not states.cho.ev.talk_to_me.t1_e3_complete: # Has NOT completed "Talk to me" favour yet. gen "Have any ideas on how to beat those {i}huffers{/i}?" ("base", xpos="far_left", ypos="head") cho "Isn't that your job?" ("soft", "base", "raised", "mid") gen "Oh, yeah..." ("base", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/cho/events/quidditch/slytherin_practice.rpy b/game/scripts/characters/cho/events/quidditch/slytherin_practice.rpy index 012f35d0..7200aaf0 100644 --- a/game/scripts/characters/cho/events/quidditch/slytherin_practice.rpy +++ b/game/scripts/characters/cho/events/quidditch/slytherin_practice.rpy @@ -266,7 +266,7 @@ label cc_st_talk: cho "I'm still a bit worried about those brutes..." ("annoyed", "base", "raised", "down") cho "You better find a foolproof way of dealing with them." ("soft", "base", "angry", "mid") gen "(Perhaps I should {b}talk to her{/b} more, the problem might solve itself.)" ("base", xpos="far_left", ypos="head") - elif cc_pf_talk.is_tier_complete() and not states.cho.ev.quidditch.lock_tactic: + elif states.cho.ev.talk_to_me.t3_e3_complete and not states.cho.ev.quidditch.lock_tactic: cho @ cheeks blush "You really believe that showing off my ass is the best tactic against Slytherin?" ("soft", "base", "base", "R") gen "I'm certain of it..." ("base", xpos="far_left", ypos="head") cho @ cheeks blush "..." ("annoyed", "base", "worried", "R") #Worried diff --git a/game/scripts/characters/cho/events/quidditch/training.rpy b/game/scripts/characters/cho/events/quidditch/training.rpy index 707c74cb..64c7e412 100644 --- a/game/scripts/characters/cho/events/quidditch/training.rpy +++ b/game/scripts/characters/cho/events/quidditch/training.rpy @@ -53,9 +53,15 @@ label cho_training: jump cho_training.choices - "-Discuss Tactics-" if cc_pf_talk.is_tier_complete() and not states.cho.ev.quidditch.lock_tactic: + "-Discuss Tactics-" if not states.cho.ev.quidditch.lock_tactic: if states.cho.tier == 1: + if not states.cho.ev.talk_to_me.t1_e3_complete: + gen "(I don't know enough about the enemy team.)" ("base", xpos="far_left", ypos="head") + gen "(I should {b}talk to her{/b} more before proceeding.)" ("base", xpos="far_left", ypos="head") + + jump .choices + # Hufflepuff # Clothes: Skirt, Robes if not states.cho.ev.quidditch.hufflepuff_stage == "intro_done": @@ -150,6 +156,12 @@ label cho_training: jump end_cho_event elif states.cho.tier == 2: + if not states.cho.ev.talk_to_me.t2_e3_complete: + gen "(I don't know enough about the enemy team.)" ("base", xpos="far_left", ypos="head") + gen "(I should {b}talk to her{/b} more before proceeding.)" ("base", xpos="far_left", ypos="head") + + jump .choices + # Slytherin # Clothes: Trousers, Pullover if not states.cho.ev.quidditch.slytherin_stage == "intro_done": @@ -178,7 +190,7 @@ label cho_training: jump cho_training.choices - if states.cho.level >= 9 and cc_pf_strip.is_event_complete(2, 3): + if states.cho.level >= 9 and states.cho.ev.inspect_her_body.T2_E3_complete: $ states.cho.ev.quidditch.lock_practice = False cho "..." ("soft", "base", "raised", "mid") @@ -242,6 +254,12 @@ label cho_training: jump end_cho_event elif states.cho.tier == 3: + if not states.cho.ev.talk_to_me.t3_e3_complete: + gen "(I don't know enough about the enemy team.)" ("base", xpos="far_left", ypos="head") + gen "(I should {b}talk to her{/b} more before proceeding.)" ("base", xpos="far_left", ypos="head") + + jump .choices + # Gryffindor: # Clothes: No clothes decided on yet if not states.cho.ev.quidditch.gryffindor_stage == "intro_done": @@ -257,7 +275,7 @@ label cho_training: # Repeated intro gen "So about our tactics..." ("base", xpos="far_left", ypos="head") - if not cc_pf_strip.is_event_complete(3,3) or not cc_pf_blowjob.is_event_complete(3,3): + if not states.cho.ev.inspect_her_body.T3_E3_complete or not states.cho.ev.suck_it.T3_E3_complete: # Fail cho "Got a better plan that doesn't involve me getting groped?" ("annoyed", "base", "base", "mid") gen "..." ("base", xpos="far_left", ypos="head") @@ -267,7 +285,7 @@ label cho_training: jump cho_training.choices - if cc_pf_strip.is_event_complete(3,3) and cc_pf_blowjob.is_event_complete(3,3): + if states.cho.ev.inspect_her_body.T3_E3_complete and states.cho.ev.suck_it.T3_E3_complete: $ states.cho.ev.quidditch.lock_practice = False cho @ cheeks blush "What is this plan of yours based on?" ("soft", "narrow", "base", "down") @@ -341,12 +359,8 @@ label cho_training: jump end_cho_event - "-Discuss tactics-" (style="disabled") if not cc_pf_talk.is_tier_complete() or states.cho.ev.quidditch.lock_tactic: - if states.cho.ev.quidditch.lock_tactic: - gen "(We've already established a tactic for the next match)" ("base", xpos="far_left", ypos="head") - else: - gen "(I don't know enough about the enemy team.)" ("base", xpos="far_left", ypos="head") - gen "(Cho and I should have a talk first.)" ("base", xpos="far_left", ypos="head") + "-Discuss tactics-" (style="disabled") if states.cho.ev.quidditch.lock_tactic: + gen "(We've already established a tactic for the next match)" ("base", xpos="far_left", ypos="head") jump cho_training.choices diff --git a/game/scripts/characters/cho/favors.rpy b/game/scripts/characters/cho/favors.rpy index 55f42c6a..619280f1 100644 --- a/game/scripts/characters/cho/favors.rpy +++ b/game/scripts/characters/cho/favors.rpy @@ -1,51 +1,29 @@ -# Cho Favors -# cc_pf = Cho Chang Personal Favor -default cc_pf_talk = event_class(title = "Talk to me!", start_label = "cc_pf_talk", start_tier = 1, - events = [ - [ - ["cc_pf_talk_T1_intro_E1"], - ["cc_pf_talk_T1_intro_E2"], - ["cc_pf_talk_T1_E3"] - ], - [ - ["cc_pf_talk_T2_intro_E1"], - ["cc_pf_talk_T2_intro_E2"], - ["cc_pf_talk_T2_E3"] - ], - [ - ["cc_pf_talk_T3_intro_E1"], - ["cc_pf_talk_T3_intro_E2"], - ["cc_pf_talk_T3_E3"] - ] - ], - iconset = [["heart_empty", "heart_red"], ["heart_empty", "heart_red"], ["heart_empty", "heart_red"]] -) -#cc_pf_strip_T3_intro_E3 -default cc_pf_strip = event_class(title = "Inspect her body!", start_label = "cc_pf_strip", start_tier = 2, - events = [ - [ - ["cc_pf_strip_T2_intro_E1"], - ["cc_pf_strip_T2_intro_E2"], - ["cc_pf_strip_T2_intro_E3"], ["cc_pf_strip_T2_E3_repeat"] - ], - [ - ["cc_pf_strip_T3_intro_E1"], - ["cc_pf_strip_T3_intro_E2"], - ["cc_pf_strip_T3_intro_E3"], ["cc_pf_strip_T3_repeat"] - ] - ], - iconset = [["heart_empty", "heart_red"], ["heart_empty", "heart_red"]] -) -default cc_pf_blowjob = event_class(title = "Suck it!", start_label = "cc_pf_blowjob", start_tier = 3, - events = [ - [ - ["cc_pf_blowjob_T3_intro_E1"], - ["cc_pf_blowjob_T3_E2"], - ["cc_pf_blowjob_T3_E3"], - ] - ], - iconset = [["heart_empty", "heart_red"]] -) +default cho_ev_talk_to_me_t1_e1 = Event(id="cho_ev_talk_to_me_t1_e1", label="cc_pf_talk_T1_intro_E1", req="states.cho.tier == 1", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_talk_to_me_t1_e2 = Event(id="cho_ev_talk_to_me_t1_e2", label="cc_pf_talk_T1_intro_E2", req="states.cho.tier == 1", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_talk_to_me_t1_e3 = Event(id="cho_ev_talk_to_me_t1_e3", label="cc_pf_talk_T1_E3", req="states.cho.tier == 1", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) +default cho_ev_talk_to_me_t2_e1 = Event(id="cho_ev_talk_to_me_t2_e1", label="cc_pf_talk_T2_intro_E1", req="states.cho.tier == 2", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_talk_to_me_t2_e2 = Event(id="cho_ev_talk_to_me_t2_e2", label="cc_pf_talk_T2_intro_E2", req="states.cho.tier == 2", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_talk_to_me_t2_e3 = Event(id="cho_ev_talk_to_me_t2_e3", label="cc_pf_talk_T2_E3", req="states.cho.tier == 2", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) +default cho_ev_talk_to_me_t3_e1 = Event(id="cho_ev_talk_to_me_t3_e1", label="cc_pf_talk_T3_intro_E1", req="states.cho.tier >= 3", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_talk_to_me_t3_e2 = Event(id="cho_ev_talk_to_me_t3_e2", label="cc_pf_talk_T3_intro_E2", req="states.cho.tier >= 3", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_talk_to_me_t3_e3 = Event(id="cho_ev_talk_to_me_t3_e3", label="cc_pf_talk_T3_E3", req="states.cho.tier >= 3", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) -default cc_favor_list = [cc_pf_talk, cc_pf_strip, cc_pf_blowjob] +default cho_ev_inspect_her_body_t2_e1 = Event(id="cho_ev_inspect_her_body_t2_e1", label="cc_pf_strip_T2_intro_E1", req="states.cho.tier == 2", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_inspect_her_body_t2_e2 = Event(id="cho_ev_inspect_her_body_t2_e2", label="cc_pf_strip_T2_intro_E2", req="states.cho.tier == 2", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_inspect_her_body_t2_e3 = Event(id="cho_ev_inspect_her_body_t2_e3", label="cc_pf_strip_T2_intro_E3", req="states.cho.tier == 2", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["cc_pf_strip_T2_E3_fail_repeat", "cc_pf_strip_T2_E3_fail"]) +default cho_ev_inspect_her_body_t2_e4 = Event(id="cho_ev_inspect_her_body_t2_e4", label="cc_pf_strip_T2_E3_repeat", req="states.cho.tier == 2", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False) +default cho_ev_inspect_her_body_t3_e1 = Event(id="cho_ev_inspect_her_body_t3_e1", label="cc_pf_strip_T3_intro_E1", req="states.cho.tier >= 3", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_inspect_her_body_t3_e2 = Event(id="cho_ev_inspect_her_body_t3_e2", label="cc_pf_strip_T3_intro_E2", req="states.cho.tier >= 3", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_inspect_her_body_t3_e3 = Event(id="cho_ev_inspect_her_body_t3_e3", label="cc_pf_strip_T3_intro_E3", req="states.cho.tier >= 3", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) +default cho_ev_inspect_her_body_t3_e4 = Event(id="cho_ev_inspect_her_body_t3_e4", label="cc_pf_strip_T3_repeat", req="states.cho.tier >= 3", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False) + +default cho_ev_suck_it_t3_e1 = Event(id="cho_ev_suck_it_t3_e1", label="cc_pf_blowjob_T3_intro_E1", req="states.cho.tier >= 3", queue="cho_eventqueue_suck_it", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["cc_pf_blowjob_1"]) +default cho_ev_suck_it_t3_e2 = Event(id="cho_ev_suck_it_t3_e2", label="cc_pf_blowjob_T3_E2", req="states.cho.tier >= 3", queue="cho_eventqueue_suck_it", autoenqueue=True, autodequeue=False) +default cho_ev_suck_it_t3_e3 = Event(id="cho_ev_suck_it_t3_e3", label="cc_pf_blowjob_T3_E3", req="states.cho.tier >= 3", queue="cho_eventqueue_suck_it", autoenqueue=True, autodequeue=False) + +define cho_favors = [ + ("cho_eventqueue_talk_to_me", "Talk to me!"), + ("cho_eventqueue_inspect_her_body", "Let me inspect you!"), + ("cho_eventqueue_suck_it", "Suck it!"), +] diff --git a/game/scripts/characters/cho/summon.rpy b/game/scripts/characters/cho/summon.rpy index bfb16233..f54d1d44 100644 --- a/game/scripts/characters/cho/summon.rpy +++ b/game/scripts/characters/cho/summon.rpy @@ -151,34 +151,21 @@ label summon_cho: # Cho Favor Menu label cho_favor_menu: - call update_cho_favors - menu: "-Personal Favours-" (icon="interface/icons/small/heart_red.webp"): - label .personal: - python: - menu_choices = [] - for i in cc_favor_list: - if i in []: # Not in the game yet. - menu_choices.append(gui.menu_item("-Not available-", "na", style="disabled")) - elif i.start_tier > states.cho.tier: - menu_choices.append(gui.menu_item("-Not ready-", "vague", style="disabled")) - else: - menu_choices.append(i.get_menu_item()) + label .favors: - menu_choices.append(("-Never mind-", "nvm")) - result = renpy.display_menu(menu_choices) + call tutorial("hearts") - if result == "nvm": + $ result = show_events_menu(cho_favors) + + if result in ("disabled", "noncompliant"): + "You haven't unlocked this favor opportunity yet." + jump .favors + elif result == "exit": jump cho_favor_menu - elif result == "vague": - call favor_not_ready - jump .personal - elif result == "na": - call not_available - jump .personal else: - $ renpy.jump(result) + $ result.start() "-Public Requests-" (icon="interface/icons/small/star_yellow.webp", style="disabled") if not game.daytime or not states.cho.requests_unlocked: if not states.cho.requests_unlocked: @@ -188,55 +175,23 @@ label cho_favor_menu: jump cho_favor_menu "-Public Requests-" (icon="interface/icons/small/star_yellow.webp") if game.daytime and states.cho.requests_unlocked: - jump cho_requests_menu + label .requests: + + # call tutorial("hearts") + + # $ result = show_events_menu(cho_requests) + + # if result in ("disabled", "noncompliant"): + # "You haven't unlocked this favor opportunity yet." + # jump .favors + # elif result == "exit": + # jump cho_favor_menu + # else: + # $ result.start() "-Never mind-": jump cho_requests -label update_cho_favors: - python: - for i in cc_favor_list: - i.tier = states.cho.tier - return - -# Cho Requests Menu -label cho_requests_menu: - call update_cho_requests - python: - menu_choices = [] - for i in cc_requests_list: - if i in []: # Not in the game yet. - menu_choices.append(gui.menu_item("-Not available-", "na", style="disabled")) - menu_choices.append(gui.menu_item()) - elif i.start_tier > states.cho.tier: - menu_choices.append(gui.menu_item("-Not ready-", "vague", style="disabled")) - else: - menu_choices.append(i.get_menu_item()) - menu_choices.append(("-Never mind-", "nvm")) - result = renpy.display_menu(menu_choices) - - if result == "nvm": - jump cho_favor_menu - elif result == "vague": - call favor_not_ready - jump cho_requests - elif result == "na": - call not_available - jump cho_requests - else: - $ renpy.jump(result) - -label update_cho_requests: - # Set event tier to current Cho tier if they are different - python: - for i in cc_requests_list: - i.tier = states.cho.tier - return - -label favor_not_ready: - nar "You can't do this favour just yet." - return - label not_available: $ TBA_message("This feature is currently not available as of version %s." % config.version) return diff --git a/game/scripts/characters/cho/vars.rpy b/game/scripts/characters/cho/vars.rpy index f8e225a9..61543777 100644 --- a/game/scripts/characters/cho/vars.rpy +++ b/game/scripts/characters/cho/vars.rpy @@ -84,6 +84,13 @@ default states.cho.ev.quiz.checkpoint = False default states.cho.ev.quiz.lost = False default states.cho.ev.quiz.complete = False default states.cho.ev.quiz.hint = "" # Set after reading Quidditch Book +default states.cho.ev.talk_to_me.t1_e3_complete = False +default states.cho.ev.talk_to_me.t2_e3_complete = False +default states.cho.ev.talk_to_me.t3_e3_complete = False +default states.cho.ev.inspect_her_body.T2_E3_failed = False +default states.cho.ev.inspect_her_body.T2_E3_complete = False +default states.cho.ev.inspect_her_body.T3_E3_complete = False +default states.cho.ev.suck_it.T3_E3_complete = False # Names diff --git a/game/scripts/characters/tonks/events/clothing.rpy b/game/scripts/characters/tonks/events/clothing.rpy index fe4a31e5..82fde1c8 100644 --- a/game/scripts/characters/tonks/events/clothing.rpy +++ b/game/scripts/characters/tonks/events/clothing.rpy @@ -5,7 +5,7 @@ label tonks_summon_setup: $ tonks.set_cum(None) $ tonks.animation = None - if not states.ton.ev.random_strip.complete and cc_pf_strip.is_event_complete(3, 3) and states.ton.level >= 20 and tonks.is_any_worn("top", "bottom", "bra", "panties"): + if not states.ton.ev.random_strip.complete and states.cho.ev.inspect_her_body.T3_E3_complete and states.ton.level >= 20 and tonks.is_any_worn("top", "bottom", "bra", "panties"): $ states.ton.ev.random_strip.complete = True #TODO use to make event not repeat $ tonks.strip("clothes")