From 8ae7db622ba4e7453ae45483381cbb61bad0392e Mon Sep 17 00:00:00 2001 From: Johnny28 Date: Wed, 15 Jan 2025 17:15:50 +0100 Subject: [PATCH] Jerk-off writing and Hermione cat outfit unlock * PT.1 implementation of "Use Hermione's, Cho's or Luna's panties when jerking off". * Removed "Locked" jerk-off menu option when you don't have any of the girls' panties, replaced it with a check inside the main option. * Added Hermione's cat outfits as an incremental wardrobe unlock when progressing through potion event. * Added more randomised Jerk-off writing. --- .../hermione/events/potions/polyjuice_cat.rpy | 11 + .../rooms/main_room/objects/jerk_off.rpy | 613 +++++++++++++++++- game/sounds/sniffing_frantic.ogg | 3 + 3 files changed, 606 insertions(+), 21 deletions(-) create mode 100644 game/sounds/sniffing_frantic.ogg diff --git a/game/scripts/characters/hermione/events/potions/polyjuice_cat.rpy b/game/scripts/characters/hermione/events/potions/polyjuice_cat.rpy index f280d3dd..47fb743b 100644 --- a/game/scripts/characters/hermione/events/potions/polyjuice_cat.rpy +++ b/game/scripts/characters/hermione/events/potions/polyjuice_cat.rpy @@ -230,6 +230,9 @@ label her_potion_cat_return: call her_walk(action="leave") $ hermione.equip(her_outfit_last) + + if not her_outfit_cat1.unlocked: + call unlock_clothing(text=_("New clothing items for Hermione have been unlocked!"), item=her_outfit_cat1) jump end_hermione_event "-Have her drink another one-" if cat_potion_ITEM.owned < 1: @@ -323,6 +326,11 @@ label her_potion_cat_return: gen "Even if she stays mad forever, it was worth it." ("grin", xpos="far_left", ypos="head") + if not her_outfit_cat1.unlocked: + call unlock_clothing(text=_("New clothing items for Hermione have been unlocked!"), item=her_outfit_cat1) + if not her_outfit_cat2.unlocked: + call unlock_clothing(text=_("New clothing items for Hermione have been unlocked!"), item=her_outfit_cat2) + jump end_hermione_event else: her "Are you serious? You know what happened last time!" ("clench", "base", "base", "mid") @@ -417,6 +425,9 @@ label her_potion_cat_return: gen "Tail..." ("base", xpos="far_left", ypos="head") $ states.her.mood += 15 $ hermione.equip(her_outfit_last) + + if not her_outfit_cat3.unlocked: + call unlock_clothing(text=_("New clothing items for Hermione have been unlocked!"), item=her_outfit_cat3) jump end_hermione_event "-Ask her for a blowjob-": diff --git a/game/scripts/rooms/main_room/objects/jerk_off.rpy b/game/scripts/rooms/main_room/objects/jerk_off.rpy index d1ab0d2d..7d17b04f 100644 --- a/game/scripts/rooms/main_room/objects/jerk_off.rpy +++ b/game/scripts/rooms/main_room/objects/jerk_off.rpy @@ -33,18 +33,25 @@ label jerk_off: pause 1 nar "You cum on the floor..." - "-Use Hermione's panties!-" if states.her.ev.panty_thief.acquired: - nar "You wrap Hermione's panties around your cock and begin stroking..." - gen "That's it..." - gen "Suck my almighty cock, you little whore!!!" ("angry", xpos="far_left", ypos="head") + "-Use Hermione's panties!-" if states.her.unlocked: + if states.her.ev.panty_thief.acquired: + $ her_outfit_last.save() + $ hermione.equip(her_outfit_default) + $ hermione.strip("panties") + nar "You begin jerking off onto Hermione's panties." + gen "(*Hmm*... I wonder what Hermione would think if she saw me doing this to her panties...)" ("base", xpos="far_left", ypos="head") - call gen_chibi("cum_behind_desk") - with hpunch - pause 1 + menu: + "-She'd love it!-": + gen "(*Mmm*... That's right... I'm sure that little know-it-all would love it...)" ("base", xpos="far_left", ypos="head") + jump panty_jerk_hg_love - "-LOCKED-" (style="disabled") if not states.her.ev.panty_thief.acquired: - nar "You lack the item required for this option." - jump .choice + "-She'd hate it!-": + gen "(*Mmm*... Yes... I'm sure she'd hate it if she knew what was happening to her favourite underwear...)" ("base", xpos="far_left", ypos="head") + jump panty_jerk_hg_hate + else: + nar "You lack the item required for this option." + jump .choice "-Think about Cho!-" if not states.cho.ev.panty_thief.acquired and states.cho.unlocked: nar "You fantasise about Cho." @@ -61,19 +68,28 @@ label jerk_off: pause 1 nar "You cum on the floor..." - "-Use Cho's panties!-" if states.cho.ev.panty_thief.acquired: - nar "You wrap Cho's panties around your cock and begin stroking..." - gen "That's it..." - gen "Suck my almighty cock, you hot-headed slut!!!" ("angry", xpos="far_left", ypos="head") + "-Use Cho's panties!-" if states.cho.unlocked: + if states.cho.ev.panty_thief.acquired: + #TODO Girl doll could perhaps be slightly transparent + $ cho_outfit_last.save() + $ cho.equip(cho_outfit_default) + $ cho.strip("panties") - call gen_chibi("cum_behind_desk") - with hpunch - pause 1 - "-LOCKED-" (style="disabled") if not states.cho.ev.panty_thief.acquired: - nar "You lack the item required for this option." - jump .choice + nar "You begin jerking off onto Cho's panties." + gen "(*Hmm*... I wonder what Cho would think if she saw me doing this to her panties...)" ("base", xpos="far_left", ypos="head") - "-Think about Luna!-" if states.lun.unlocked: + menu: + "-She'd love it!-": + gen "(*Mmm*... That's right... I'm sure that little broomstick riding witch would love it...)" ("base", xpos="far_left", ypos="head") + jump panty_jerk_cc_love + "-She'd hate it!-": + gen "(*Mmm*... Yes... I'm sure she'd hate it if she knew what was happening to her favourite underwear...)" ("base", xpos="far_left", ypos="head") + jump panty_jerk_cc_hate + else: + nar "You lack the item required for this option." + jump .choice + + "-Think about Luna!-" if not states.lun.ev.panty_thief.acquired and states.lun.unlocked: nar "You fantasise about Luna." random: gen "(Yes... Bounce on my cock, you hot crazy bitch!)" ("angry", xpos="far_left", ypos="head") @@ -88,6 +104,27 @@ label jerk_off: pause 1 nar "You cum on the floor..." + "-Use Luna's panties!-" if states.lun.unlocked: + if states.lun.ev.panty_thief.acquired: + #TODO Girl doll could perhaps be slightly transparent + $ lun_outfit_last.save() + $ luna.equip(lun_outfit_default) + $ luna.strip("panties") + + nar "You begin jerking off onto Luna's panties." + gen "(*Hmm*... I wonder what Luna would think if she saw me doing this to her panties...)" ("base", xpos="far_left", ypos="head") + + menu: + "-She'd love it!-": + gen "(*Mmm*... That's right... I'm sure that horny little witch would love it...)" ("base", xpos="far_left", ypos="head") + jump panty_jerk_ll_love + "-She'd hate it!-": + gen "(*Mmm*... Yes... I'm sure she'd hate it if she knew what was happening to her favourite underwear...)" ("base", xpos="far_left", ypos="head") + jump panty_jerk_ll_hate + + else: + nar "You lack the item required for this option." + jump .choice "-Think about Tonks!-" if states.ton.unlocked: nar "You fantasise about Tonks." random: @@ -184,6 +221,15 @@ label jerk_off: block: nar "You fantasise about one of the witches of sin." gen "(Once I'm done with you, all other witches will envy you instead.)" ("grin", xpos="far_left", ypos="head") + block: + nar "You fantasise about a red-haired trainer." + gen "(Now take my monster balls.)" ("grin", xpos="far_left", ypos="head") + block: + nar "You fantasise about a reporter in a yellow jumpsuit." + gen "(News just in, reporter drowns in cum.)" ("grin", xpos="far_left", ypos="head") + block: + nar "You fantasise about a crazy clown." + gen "(Time to apply your face paint!)" ("grin", xpos="far_left", ypos="head") call gen_chibi("cum_behind_desk") with hpunch @@ -216,3 +262,528 @@ label jerk_off: jump night_start else: jump day_start + + +### Hermione's Panties ### + +label panty_jerk_hg_love: + + #Hermione doll appears with base clothing but without her panties + her "(...)" ("base", "base", "base", "mid") + her "(Oh my... So, you did plan to use my panties to jerk yourself off...)" ("base", "base", "base", "mid") + her "(Aren't I a lucky girl...)" ("base", "base", "base", "mid") + gen "(That's right... And once I'm finished with them, you can count yourself even luckier...)" ("base", xpos="far_left", ypos="head") + her "(*Giggles*)" ("base", "base", "base", "mid") + gen "(*Mmm*... Yes... Watch me, [name_hermione_genie]... Watch as I jerk off with your panties...)" ("base", xpos="far_left", ypos="head") + her "(It'll be my pleasure, [name_genie_hermione]...)" ("base", "base", "base", "mid") + gen "(Now why don't you be a good girl, and...)" ("base", xpos="far_left", ypos="head") + menu: + "\"Keep standing there, looking pretty!\"": + her "(Of course, [name_genie_hermione]... Anything for you...)" ("base", "base", "base", "mid") + her "(...)" ("base", "base", "base", "mid") #smiling + gen "(Yes... That's it...)" ("base", xpos="far_left", ypos="head") + gen "(*Mmm*... Good girl...)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + gen "(Keep watching me, as I jerk off with your panties...)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + gen "(Yes...)" ("base", xpos="far_left", ypos="head") + gen "(Now, talk dirty to me...)" ("base", xpos="far_left", ypos="head") + "\"Take off your top!\"" if states.her.status.show_tits or states.her.status.stripping: + her "(Of course, [name_genie_hermione]... Anything for you...)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("top") + gen "(Very good... Now your bra...)" ("base", xpos="far_left", ypos="head") + her "(Certainly...)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("bra") + gen "(Yes... Good girl...)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + gen "(Now, talk dirty to me...)" ("base", xpos="far_left", ypos="head") + "\"Take off your bottoms!\"" if states.her.status.show_pussy or states.her.status.stripping: + her "(Of course, [name_genie_hermione]... Anything for you...)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("bottom") + gen "(Yes... Show me that cute pussy...)" ("base", xpos="far_left", ypos="head") + her "(I'm glad you like it, [name_genie_hermione]...)" ("base", "base", "base", "mid") + gen "(Now, talk dirty to me...)" ("base", xpos="far_left", ypos="head") + "\"Take off your clothes!\"" if states.her.status.stripping: + her "(Of course, [name_genie_hermione]... Anything for you...)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("clothes") + her "(There you are, [name_genie_hermione]...)" ("base", "base", "base", "mid") + her "(Anything else I can do for you?)" ("base", "base", "base", "mid") + gen "(Yes... Talk dirty to me...)" ("base", xpos="far_left", ypos="head") + + her "(*Giggles*... Certainly, [name_genie_hermione]...)" ("base", "base", "base", "mid") + her "(Please, keep rubbing that fat, juicy cock, [name_genie_hermione]...)" ("base", "base", "base", "mid") + her "(Release your delicious cum all over my panties...)" ("base", "base", "base", "mid") + her "(I... I beg of you...)" ("base", "base", "base", "mid") + gen "(Yes... That's it, slut...)" ("base", xpos="far_left", ypos="head") + gen "(Beg for it!)" ("base", xpos="far_left", ypos="head") + her "(Please, give it to me, [name_genie_hermione]!)" ("base", "base", "base", "mid") + her "(Please, give me your delicious cum!)" ("base", "base", "base", "mid") + gen "(Ngh--)" ("base", xpos="far_left", ypos="head") + her "(Yes! Faster, [name_genie_hermione! Faster!)" ("base", "base", "base", "mid") + her "(Coat my panties in your delicious cum!)" ("base", "base", "base", "mid") + + jump hg_panties_jerk_off_end + + +label panty_jerk_hg_hate: + #Hermione doll appears with base clothing but without her panties + her "(What the--{w=0.2} What the hell are you doing with my panties!)" ("base", "base", "base", "mid") + gen "(*Mmm*... What does it look like I'm doing with them, girl?)" ("base", xpos="far_left", ypos="head") + her "(You--{w=0.2} You're jerking yourself off with them!)" ("base", "base", "base", "mid") + her "(How could you do this to me!)" ("base", "base", "base", "mid") + gen "(*Mmm*... Don't pretend like you didn't know this was coming...)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + gen "(You knew exactly what I was going to do the moment you handed them over to me... You little slut!)" ("base", xpos="far_left", ypos="head") + her "([name_genie_hermione]!)" ("base", "base", "base", "mid") + gen "(Quiet, slut!)" ("base", xpos="far_left", ypos="head") + gen "(Now serve your purpose, and...)" ("base", xpos="far_left", ypos="head") + menu: + "\"Be quiet!\"": + her "(What do you--)" ("base", "base", "base", "mid") + gen "(Quiet, slut!)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + gen "(Good...{w=0.4} Now just stand there looking pretty, so I may coat your panties in peace...)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + gen "(Yes... This is so much better than when you're actually here...)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + gen "(Although... A picture would probably serve the same purpose...)" ("base", xpos="far_left", ypos="head") + nar "You keep imagining the girl, watching you jerking off with her underwear..." + nar "An expression of anger and disdain paints her face, as if she were itching to give you a piece of her mind..." + gen "(Alright, you may speak...)" ("base", xpos="far_left", ypos="head") + her "(You--)" ("base", "base", "base", "mid") + gen "(If you talk dirty to me...)" ("base", xpos="far_left", ypos="head") + "\"Take off your top!\"" if states.her.status.show_tits or states.her.status.stripping: + her "*(Hmph*... Jerk.)" ("base", "base", "base", "mid") + gen "(Indeed I am...)" ("base", xpos="far_left", ypos="head") + her "(...)"("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("top") + gen "(Don't forget your--)" ("base", xpos="far_left", ypos="head") + her "(Shut up!)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("bra") + gen "(That's a good slut...)" ("base", xpos="far_left", ypos="head") + her "(*Grr*...)" ("base", "base", "base", "mid") + nar "You begin jerking your cock even faster, as you stare intently at Hermione's tits..." + gen "(Now, talk dirty to me...)" ("base", xpos="far_left", ypos="head") + "\"Take off your bottoms!\"" if states.her.status.show_pussy or states.her.status.stripping: + her "(W-What, are you out of your mind? I'm not--)" ("base", "base", "base", "mid") + gen "(Do it now!)" ("base", xpos="far_left", ypos="head") + her "(I am not going to give you even more to look at!)" ("base", "base", "base", "mid") + gen "(Suit yourself... The longer it takes, the messier the outcome...)" ("base", xpos="far_left", ypos="head") + her "(I hate you...)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("bottom") + gen "(Now, talk dirty to me...)" ("base", xpos="far_left", ypos="head") + "\"Take off your clothes!\"" if states.her.status.stripping: + her "(You want me to--)" ("base", "base", "base", "mid") + gen "(The longer you draw this out, the more sweat will get on your panties...)" ("base", xpos="far_left", ypos="head") + her "(...)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("clothes") + gen "(Impressive...{w=0.4} Now, If only you could take your clothes off that quickly in real life...)" ("base", xpos="far_left", ypos="head") + her "(*Hmph*...)" ("base", "base", "base", "mid") + nar "You begin jerking your cock even faster, as you stare intently at Hermione's naked body..." + gen "(Now, talk dirty to me...)" ("base", xpos="far_left", ypos="head") + + her "(I will not! You disgusting pig!)" ("base", "base", "base", "mid") + gen "(Yes...{w=0.4} That's right...)" ("base", xpos="far_left", ypos="head") + her "(I can't believe you're doing this... Taking my panties is one thing, but jerking off with them!)" ("base", "base", "base", "mid") + her "(You've ruined me! Before you started buying favours from me, I could never have imagined someone jerking off using a girl's panties!)" ("base", "base", "base", "mid") + her "(Even if I had... I would never, ever have imagined the headmaster--)" ("base", "base", "base", "mid") + + jump hg_panties_jerk_off_end + + +label hg_panties_jerk_off_end: + + gen "That's it!"("angry", xpos="far_left", ypos="head") + gen "Suck my almighty cock, you little whore!!!" ("angry", xpos="far_left", ypos="head") + gen "Ngh--{w=0.4} Aaaargh!!!" ("angry", xpos="far_left", ypos="head") + + call gen_chibi("cum_behind_desk") + with hpunch + pause 1 + + her "([name_genie_hermione]!)" ("base", "base", "base", "mid") + + #Slow fade of Hermione doll + hide hermione_main + with d8 + + #Finished cumming + call gen_chibi("cum_behind_desk_done") + with d3 + pause.2 + + gen "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("base", xpos="far_left", ypos="head") + gen "..." ("base", xpos="far_left", ypos="head") + random: + gen "(Well then...{w=0.4} Another pair of underwear ruined...)" ("base", xpos="far_left", ypos="head") + gen "(Genie one...{w=0.4} Panties, zero...)" ("base", xpos="far_left", ypos="head") + gen "(Looks like I ruined another pair of panties... Oh, well...)" ("base", xpos="far_left", ypos="head") + gen "(I suppose I better return these to Miss Granger...)" ("base", xpos="far_left", ypos="head") + + # Reset Hermione clothing. + $ hermione.equip(her_outfit_last) + + if states.jerked_off_times >= 10: + $ achievements.unlock("jerkoff") + + if states.env.daytime: + jump night_start + else: + jump day_start + +### Cho's Panties ### + +label panty_jerk_cc_love: + + #Cho doll appears with base clothing but without her panties + cho "(...)" ("base", "base", "base", "mid") + cho "(I see... I suppose I should've realised my panties would end up around your cock...)" ("base", "base", "base", "mid") + gen "(That's right... And when I'm done with them, you'll be wearing them every time you get on that broomstick of yours...)" ("base", xpos="far_left", ypos="head") + cho "(*Mmm*... Is that right...)" ("base", "base", "base", "mid") + gen "(Now then...)" ("base", xpos="far_left", ypos="head") + + menu: + "\"Better not let you wait any longer...\"": + nar "You begin jerkin even faster, imagining the girl's reaction..." + cho "(Oh my... Look at you go...)" ("base", "base", "base", "mid") + gen "(*Ah*... Yes... Look at me... Watch, as your coach jerks off in front of you...)" ("base", xpos="far_left", ypos="head") + cho "(*Mmm*... Very impressive...)" ("base", "base", "base", "mid") + cho "(Why, my grip-strength could never compare to this...)" ("base", "base", "base", "mid") + cho "(Well, the grip of my hand at least...)" ("base", "base", "base", "mid") + gen "(Yes... That's it... Talk dirty to me...)" ("base", xpos="far_left", ypos="head") + cho "(Hurry, coach... Give me that hot, sticky load... Cover my panties...)" ("base", "base", "base", "mid") + "\"Show me those marvellous bludgers...\"": #Tell her to show her tits, she strips fully + cho "(Finally! An excuse to take off my clothes!)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ cho.strip("clothes") + cho "(There you go, coach!)" ("base", "base", "base", "mid") + gen "(I only told you to show off your tits though.)" ("base", xpos="far_left", ypos="head") + cho "(*Pfft*... Where's the fun in that?)" ("base", "base", "base", "mid") + cho "(This way you'll achieve your goal much more quickly...)" ("base", "base", "base", "mid") + gen "(If only every girl wanted their partner to finish quickly...)" ("base", xpos="far_left", ypos="head") + cho "(The faster you finish, the sooner I'll get my cum covered panties returned to me...)" ("base", "base", "base", "mid") + gen "(She certainly is perfect...)" ("base", xpos="far_left", ypos="head") + cho "(Why are you talking about me in third person? I'm right here!)" ("base", "base", "base", "mid") + gen "(Oh... Yes, you certainly are...)" ("base", xpos="far_left", ypos="head") + cho "(Now, give me your cum already!)" ("base", "base", "base", "mid") + "\"Show me that slippery snitch...\"": #Tell her to show her pussy, she strips fully + cho "(Right away, coach!)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ cho.strip("clothes") + cho "(There you are... One slippery snitch!)" ("base", "base", "base", "mid") + gen "(And a pair of bludgers, as well!)" ("base", xpos="far_left", ypos="head") + cho "(Of course! What's the point in stripping if I can't strip fully?" ("base", "base", "base", "mid") + gen "(You little show off!)" ("base", xpos="far_left", ypos="head") + cho "(Now, are you going to reward my panties with your hot load, or what?)" ("base", "base", "base", "mid") + gen "(*Mmm*... Yes, I'm getting there...)" ("base", xpos="far_left", ypos="head") + "\"Show me that athletic body...\"": #strip + cho "(Of course! I'll take any chance I can get to show off my body!)" ("base", "base", "base", "mid") + gen "(Oh yes, you certainly do...)" ("base", xpos="far_left", ypos="head") + play sound "sounds/cloth_sound3.ogg" + $ cho.strip("clothes") + cho "(There you go, coach...)" ("base", "base", "base", "mid") + cho "(Anything else I can do for you?)" ("base", "base", "base", "mid") + cho "(I'll do anything... Anything you want...)" ("base", "base", "base", "mid") + cho "(As long as you reward my panties with your sticky, hot... load...)" ("base", "base", "base", "mid") + gen "(*Ah*... Yes... Talk dirty to me...)" ("base", xpos="far_left", ypos="head") + + cho "(Keep rubbing that hard, magnificent wood for me...)" ("base", "base", "base", "mid") + cho "(Give me your delicious cum...)" ("base", "base", "base", "mid") + cho "(I want to feel it on my pussy as I rub against my broomstick...)" ("base", "base", "base", "mid") + gen "(You dirty little whore... When I'm finished, you won't be able to win a single game without my cum between your legs...)" ("base", xpos="far_left", ypos="head") + cho "(Yes, coach! I need your cum!)" ("base", "base", "base", "mid") + cho "(I need to smell it before the game! To feel it against my skin!)" ("base", "base", "base", "mid") + cho "(I need to rub it on my pussy!)" ("base", "base", "base", "mid") + cho "(I need it...)" ("base", "base", "base", "mid") + cho "(To win!!)" ("base", "base", "base", "mid") + + jump cc_panties_jerk_off_end + +label panty_jerk_cc_hate: + + #Cho doll appears with base clothing but without her panties + cho "(What the--{w=0.2} What the hell are you doing with my panties!)" ("base", "base", "base", "mid") + gen "(I'm giving my favourite quidditch player what she asked for...)" ("base", xpos="far_left", ypos="head") + cho "(What I asked--{w=0.2} I never asked you to jerk off using my favourite underwear!)" ("base", "base", "base", "mid") + gen "(*Hmm*... Yes, they certainly must be your favourite seeing how wet they were already...)" ("base", xpos="far_left", ypos="head") + cho "(I hate you...)" ("base", "base", "base", "mid") + gen "(Last time I checked, people generally refrain from handing their panties to someone they hate...)" ("base", xpos="far_left", ypos="head") + cho "(That's--)" ("base", "base", "base", "mid") + + menu: + "\"Now, shut up so I can finish this!\"": + nar "You begin jerking your cock even faster, imagining Cho's reaction watching her favourite panties being covered in your impending load." + cho "(You're seriously expecting me to just stand here, watching you defile my panties?)" ("base", "base", "base", "mid") + gen "(Of course not... If I had expected that, I would've invited the real one.)" ("base", xpos="far_left", ypos="head") + gen "(Wait a minute... The real one handed me their panties...)" ("base", xpos="far_left", ypos="head") + gen "(Maybe she would've loved this after all!)" ("base", xpos="far_left", ypos="head") + cho "(Of course not...)" ("base", "base", "base", "mid") + gen "(So, you're saying that the real you isn't smart enough to realise what I was going to do to her panties?)" ("base", xpos="far_left", ypos="head") + cho "(...)" ("base", "base", "base", "mid") + gen "(Is she that stupid?)" ("base", xpos="far_left", ypos="head") + cho "(Of course I knew!)" ("base", "base", "base", "mid") + gen "(I knew it... You're all the same... You're all just cum-hungry sluts.)" ("base", xpos="far_left", ypos="head") + "\"Now, show me your tits!\"": + cho "(You want me to strip?!?)" ("base", "base", "base", "mid") + gen "(It'd certainly allow me to achieve my goal quicker...)" ("base", xpos="far_left", ypos="head") + cho "(...)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ cho.strip("clothes") + cho "(There... Is this what you wanted?)" ("base", "base", "base", "mid") + gen "(Your tits would've been enough, but if you can't stop yourself from showing off your body, I suppose it will do...)" ("base", xpos="far_left", ypos="head") + cho "(That's not--)" ("base", "base", "base", "mid") + gen "(Or perhaps you're just eager to receive my cum?!)" ("base", xpos="far_left", ypos="head") + cho "(I...)" ("base", "base", "base", "mid") + gen "(I knew it... You're all the same... You're all just cum-hungry sluts.)" ("base", xpos="far_left", ypos="head") + "\"Now, show me your pussy!\"": + cho "(My pussy?!)" ("base", "base", "base", "mid") + gen "(Oh, right... I should've said \"snitch\", shouldn't I?)" ("base", xpos="far_left", ypos="head") + cho "(I will not--)" ("base", "base", "base", "mid") + gen "(Fine... If you'd rather watch me jerk off all day...)" ("base", xpos="far_left", ypos="head") + play sound "sounds/cloth_sound3.ogg" + $ cho.strip("clothes") + gen "There you are... Now we're both getting what we wanted...)" ("base", xpos="far_left", ypos="head") + cho "*Pfft*... I have no idea what you're talking about...)" ("base", "base", "base", "mid") + gen "(I only told you to show your pussy, but you immediately stripped down completely.)" ("base", xpos="far_left", ypos="head") + cho "(You're despicable...)" ("base", "base", "base", "mid") + gen "(You're naked.)" ("base", xpos="far_left", ypos="head") + cho "(...{w} Why do I put up with you.)" ("base", "base", "base", "mid") + gen "(I tolerate and encourage your exhibitionistic tendencies.)" ("base", xpos="far_left", ypos="head") + cho "(I don't have exhibitionistic--)" ("base", "base", "base", "mid") + gen "(Well, I'd say there are only two probable possibilities why you'd strip down so eagerly...)" ("base", xpos="far_left", ypos="head") + cho "(Oh, yeah?)" ("base", "base", "base", "mid") + gen "(You either can't help but show off your body at any opportunity...)" ("base", xpos="far_left", ypos="head") + gen "(Or, you're just another cum-hungry whore!)" ("base", xpos="far_left", ypos="head") + cho "(I...)" ("base", "base", "base", "mid") + gen "(I knew it... You're all the same... You're all just cum-hungry whore.)" ("base", xpos="far_left", ypos="head") + "\"Now, strip!\"": + cho "(*Ugh*...{w=0.4} Fine!)" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ cho.strip("clothes") + gen "(...)" ("base", xpos="far_left", ypos="head") + cho "(What?)" ("base", "base", "base", "mid") + gen "(Well, I suppose even if you were hating this, there's no way you'd resist an opportunity to show off your body...)" ("base", xpos="far_left", ypos="head") + cho "(Fuck you...)" ("base", "base", "base", "mid") + gen "(Giving in to your urges is nothing to be ashamed of...)" ("base", xpos="far_left", ypos="head") + cho "(...)" ("base", "base", "base", "mid") + gen "(Who am I kidding... You already know this...)" ("base", xpos="far_left", ypos="head") + gen "(Stripping down one day, guzzling cum the next, it's the circle of life...)" ("base", xpos="far_left", ypos="head") + cho "(That's not--)" ("base", "base", "base", "mid") + gen "(Don't correct me inside my own fantasy...)" ("base", xpos="far_left", ypos="head") + cho "(...)" ("base", "base", "base", "mid") + gen "(Yep... You're all just birds of a feather... Cum-hungry sluts.)" ("base", xpos="far_left", ypos="head") + + gen "(I bet you can't wait to put your cum-soiled panties back on.)" ("base", xpos="far_left", ypos="head") + gen "(Imagine it...)" ("base", xpos="far_left", ypos="head") + gen "(The sensation of your broom pressing against your panties, which once used to signify your love for the game... Now only filling you with the insatiable desire to feel my cock deep inside you...)" ("base", xpos="far_left", ypos="head") + gen "(The fresh air, replaced by my intoxicating aroma...)" ("base", xpos="far_left", ypos="head") + gen "(Your head spinning, as you lose all focus on the game... As goal after goal is being scored by the opposing team...)" ("base", xpos="far_left", ypos="head") + cho "(No, that will never happen...)" ("base", "base", "base", "mid") + gen "(You'll never care about Quidditch ever again... The only thing you'll ever want is my cum!)" ("base", xpos="far_left", ypos="head") + cho "(No! I don't--{w=0.2} My panties!)" ("base", "base", "base", "mid") + + jump cc_panties_jerk_off_end + + +label cc_panties_jerk_off_end: + + gen "That's it!" + gen "Suck my almighty cock, you hot-headed slut!!!" ("angry", xpos="far_left", ypos="head") + gen "Ngh--{w=0.4} Aaaargh!!!" ("base", xpos="far_left", ypos="head") + + call gen_chibi("cum_behind_desk") + with hpunch + pause 1 + + gen "*Ah*... There you go... Your prize..." ("base", xpos="far_left", ypos="head") + cho "(My... prize...)" ("base", "base", "base", "mid") + + #Slow fade of Cho doll + hide cho_main + with d8 + + #Finished cumming + call gen_chibi("cum_behind_desk_done") + with d3 + pause.2 + + random: + gen "(Well then...{w=0.4} Another pair of underwear ruined...)" ("base", xpos="far_left", ypos="head") + gen "(Genie one...{w=0.4} Panties, zero...)" ("base", xpos="far_left", ypos="head") + gen "(Looks like I ruined another pair of panties... Oh, well...)" ("base", xpos="far_left", ypos="head") + gen "(I suppose I better return these to Miss Chang...)" ("base", xpos="far_left", ypos="head") + + # Reset Cho clothing. + $ cho.equip(cho_outfit_last) + + if states.jerked_off_times >= 10: + $ achievements.unlock("jerkoff") + + if states.env.daytime: + jump night_start + else: + jump day_start + +### Luna's Panties ### + +label panty_jerk_ll_love: + #Luna doll appears with base clothing but without her panties + lun "(...)" ("base", "base", "base", "mid") + lun "({wave}Oooooh...{/wave} So this is the research that you're doing.)" ("base", "base", "base", "mid") + lun "(How curious...)" ("base", "base", "base", "mid") + lun "(But why would you need my panties for this, I wonder...)" ("base", "base", "base", "mid") + lun "(Do they feel nice, wrapped around your wand?)" ("base", "base", "base", "mid") + gen "(*Mmm*... That's right...)" ("base", xpos="far_left", ypos="head") + menu: + "\"Talk dirty to me...\"": + lun "(When you touch me, my body gets increasingly sweaty...)" ("base", "base", "base", "mid") + lun "(Even more sweaty than when I have to go up the stairs to the astronomy tower on a warm day.)" ("base", "base", "base", "mid") + lun "(More than that time I had a heavy fever... You know the one...)" ("base", "base", "base", "mid") + lun "(I feel so dirty when you touch me... But in a good way...)" ("base", "base", "base", "mid") + gen "(Yes! That's exactly what she would say!)" ("base", xpos="far_left", ypos="head") + "\"Compliment my penis...\"": + random: + lun "(Your penis... Is very impressive when erect.)" ("base", "base", "base", "mid") + lun "(Your penis is magnificent, its length, its girth, its... rigidness.)" ("base", "base", "base", "mid") + lun "(I love your penis... Its rhythmical pulsing is like the beat of a magical drum.)" ("base", "base", "base", "mid") + lun "(Your penis is so big, it could reach the stars!)" ("base", "base", "base", "mid") + lun "(The veins running down your penis are like the intricate carvings on a wand, each one containing immense power.)" ("base", "base", "base", "mid") + gen "(Yes! That's exactly what she would say!)" ("base", xpos="far_left", ypos="head") + "\"Sing me a song...\"": + gen "(Wait, why would I imagine this...)" ("base", xpos="far_left", ypos="head") + lun "(Okay!)" ("base", "base", "base", "mid") + gen "(...)" ("base", xpos="far_left", ypos="head") + lun "(Stroke it up, stroke it down, this is no time, to frown!)" ("base", "base", "base", "mid") + lun "(Stroke it fast, or take it slow, do it well, and it will grow!)" ("base", "base", "base", "mid") + lun "(Rub it stiff, and make it twitch, while you're staring, at this witch!)" ("base", "base", "base", "mid") + lun "(Stroke it hard, like you don't care, until you spurt, everywhere!)" ("base", "base", "base", "mid") + gen "(*Ah*... That's it! My lyrical genius is making me rock solid!)" ("base", xpos="far_left", ypos="head") + "\"Cheer me on!\"": + lun "(You can do it, [name_genie_luna]!)" ("base", "base", "base", "mid") + lun "(Stroke it harder! Rub it faster!)" ("base", "base", "base", "mid") + lun "(Faster! Faster!)" ("base", "base", "base", "mid") + gen "{shake}*Nnnn-gh*!{/shake}" ("base", xpos="far_left", ypos="head") + + lun "(*Mmm*... Look at you go!)" ("base", "base", "base", "mid") + lun "(I hope you don't mind if my panties are a little bit wet.)" ("base", "base", "base", "mid") + lun "(I've been fantasising about our research, and... Well...)" ("base", "base", "base", "mid") + gen "({bounce}*Ah*...{/bounce} Yes...)" ("base", xpos="far_left", ypos="head") + lun "(I'm glad my body can be of use to you...)" ("base", "base", "base", "mid") + lun "(I really can't thank you enough for what you've done for me...)" ("base", "base", "base", "mid") + lun "(We've spent so much time together, doing research...)" ("base", "base", "base", "mid") + lun "(You're the best headmaster a girl could ask for!)" ("base", "base", "base", "mid") + gen "(That's right... Show me more of that unfiltered sincerity...)" ("base", xpos="far_left", ypos="head") + lun "(I love it when you touch me between my legs!)" ("base", "base", "base", "mid") + if states.lun.status.gokkun: + lun "(The sensation of wrackspurts, pushing against the insides of my throat as you release them into my belly!)" ("base", "base", "base", "mid") + lun "(I just...{w=0.5} can't...{w=0.5} get enough of you!!!)" ("base", "base", "base", "mid") + else: + lun "(It's all I ever think about!)" ("base", "base", "base", "mid") + gen "({bounce}*Ah*...{/bounce} That's it!)" ("base", xpos="far_left", ypos="head") + play sound "sounds/cloth_sound3.ogg" + $ luna.strip("clothes") + lun "(Please! Look at me as you release them!)" ("base", "base", "base", "mid") + lun "(I want you to stare at my naked body!)" ("base", "base", "base", "mid") + lun "(Please! Use me to satiate your needs!)" ("base", "base", "base", "mid") + lun "(Use me, [name_genie_luna]! Use me!)" ("base", "base", "base", "mid") + lun "({shake}Please!{/shake})" ("base", "base", "base", "mid") + + jump ll_panties_jerk_off_end + +label panty_jerk_ll_hate: + #Luna doll appears with base clothing but without her panties + lun "(...)" ("base", "base", "base", "mid") + lun "(Whoa! What kind of research is this?!)" ("base", "base", "base", "mid") + gen "(The practical kind!)" ("base", xpos="far_left", ypos="head") + lun "(But... Those are my favourite panties...)" ("base", "base", "base", "mid") + lun "(They'll... You'll ruin them if you--)" ("base", "base", "base", "mid") + gen "(That's the plan.)" ("base", xpos="far_left", ypos="head") + lun "(I... No! Give them back to me!)" ("base", "base", "base", "mid") + gen "(Impossible... You're a figment of my imagination.)" ("base", xpos="far_left", ypos="head") + lun "(Fuck you! I hate you!)" ("base", "base", "base", "mid") + gen "(... No way she'd ever say that.)" ("base", xpos="far_left", ypos="head") + menu: + "\"Keep insulting me like that!\"": + lun "(I never would've let you borrow my panties, had I known you'd use them to jerk off!)" ("base", "base", "base", "mid") + lun "(You always stare at my body whenever you stroke yourself--)" ("base", "base", "base", "mid") + lun "(But here you are, not putting any thought into how I'd feel about you being more interested in my clothes than me!)" ("base", "base", "base", "mid") + gen "(*Ah*....{w=0.4} That's--{w=0.2} Wait, hold on...)" ("base", xpos="far_left", ypos="head") + "\"Stay in character!\"": + lun "(...)" ("base", "base", "base", "mid") #annoyed + lun "(If you release the spurts on my panties, it could attract a Machana!)" ("base", "base", "base", "mid") # A Machana is an obscure Aladdin TV series character. + gen "(*Ngh*! Now that's more like it!)" ("base", xpos="far_left", ypos="head") + lun "([name_genie_luna]! Stop!)" ("base", "base", "base", "mid") + gen "(Not a chance!)" ("base", xpos="far_left", ypos="head") + "\"Tell me how this makes you feel!\"": + lun "(I feel... I feel...)" ("base", "base", "base", "mid") + lun "(I feel jealous!)" ("base", "base", "base", "mid") + lun "(I thought I could be useful to you...)" ("base", "base", "base", "mid") + lun "(But if my panties are enough to achieve the same result...)" ("base", "base", "base", "mid") + lun "(Then what am I good for?)" ("base", "base", "base", "mid") + lun "(Why, [name_genie_luna]?)" ("base", "base", "base", "mid") + lun "(Why would you use my panties for this?)" ("base", "base", "base", "mid") + lun "(Is my body not enough?)" ("base", "base", "base", "mid") + gen "(*Mmm*...)" ("base", xpos="far_left", ypos="head") + lun "(Please, [name_genie_luna]!)" ("base", "base", "base", "mid") + "\"I bet you wish you were these panties!\"": + lun "(I do!)" ("base", "base", "base", "mid") + lun "(I want to watch, as you stroke magnificent staff!)" ("base", "base", "base", "mid") + lun "(To hear the sounds of your soft groans.)" ("base", "base", "base", "mid") + lun "(To savour the expression of pure bliss as you get closer and closer to erupting!)" ("base", "base", "base", "mid") + lun "(I want you to cover me in wrackspurts!)" ("base", "base", "base", "mid") + lun "(Please, [name_genie_luna]!)" ("base", "base", "base", "mid") + + lun "(At least imagine my naked body when you're doing it!)" ("base", "base", "base", "mid") + + play sound "sounds/cloth_sound3.ogg" + $ luna.strip("clothes") + + lun "(Look at me! Me, [name_genie_luna]!)" ("base", "base", "base", "mid") + gen "(Damn it all!)" ("base", xpos="far_left", ypos="head") + + jump ll_panties_jerk_off_end + +label ll_panties_jerk_off_end: + + gen "Ngh--{w=0.4} Aaaargh!!!" ("base", xpos="far_left", ypos="head") + + call gen_chibi("cum_behind_desk") + with hpunch + pause 1 + + gen "*Ah*... That was..." ("base", xpos="far_left", ypos="head") + lun "(You did it...)" ("base", "base", "base", "mid") #smile + + #Slow fade of Luna doll + hide luna_main + with d8 + + #Finished cumming + call gen_chibi("cum_behind_desk_done") + with d3 + pause.2 + + random: + gen "(It's a shame, really. These were such nice panties.)" ("base", xpos="far_left", ypos="head") + gen "(Genie one...{w=0.4} Panties, zero...)" ("base", xpos="far_left", ypos="head") + gen "(Looks like I ruined another pair of panties... Oh, well...)" ("base", xpos="far_left", ypos="head") + gen "(I suppose I better return these to Miss Lovegood...)" ("base", xpos="far_left", ypos="head") + + # Reset Luna clothing. + $ luna.equip(lun_outfit_last) + + if states.jerked_off_times >= 10: + $ achievements.unlock("jerkoff") + + if states.env.daytime: + jump night_start + else: + jump day_start diff --git a/game/sounds/sniffing_frantic.ogg b/game/sounds/sniffing_frantic.ogg new file mode 100644 index 00000000..9f2ef24a --- /dev/null +++ b/game/sounds/sniffing_frantic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:926560d81bf796776756902fd53690dfe478dd41b0236ef777df8042cb64cfdd +size 18383