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
This commit is contained in:
LoafyLemon 2023-07-02 19:14:48 +01:00
parent b08e0d0071
commit a380696421
12 changed files with 206 additions and 176 deletions

View File

@ -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":

View File

@ -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")

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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!"),
]

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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")