diff --git a/game/scripts/characters/astoria/wardrobe_reactions.rpy b/game/scripts/characters/astoria/wardrobe_reactions.rpy index f29451e4..6e79360a 100644 --- a/game/scripts/characters/astoria/wardrobe_reactions.rpy +++ b/game/scripts/characters/astoria/wardrobe_reactions.rpy @@ -42,7 +42,7 @@ label ast_reaction_category_fail(category): label ast_reaction_touch(what): if what == "head": - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") random: block: @@ -55,7 +55,7 @@ label ast_reaction_touch(what): gen "*Err*..." ("base", xpos="far_left", ypos="head") ast "When people called you eccentric I didn't think they meant bonkers mad..." ("clench", "closed", "base", "down") elif what == "breasts": - $ mouse_boing() + $ show_kinetic_text(_("{shake}*boing*{/shake}"), sound="sounds/boing02.ogg") random: block: @@ -68,7 +68,7 @@ label ast_reaction_touch(what): block: ast "Gross..." ("annoyed", "narrow", "base", "mid") elif what == "vagina": - $ mouse_heart() + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) random: block: diff --git a/game/scripts/characters/cho/wardrobe_reactions.rpy b/game/scripts/characters/cho/wardrobe_reactions.rpy index 3ab2b4a0..2efa8e9e 100644 --- a/game/scripts/characters/cho/wardrobe_reactions.rpy +++ b/game/scripts/characters/cho/wardrobe_reactions.rpy @@ -57,7 +57,7 @@ label cho_reaction_category_fail(category): label cho_reaction_touch(what): if what == "head": - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") if states.cho.level < 10: #Pre Slytherin match (after hufflepuff match) random: @@ -89,7 +89,7 @@ label cho_reaction_touch(what): elif what == "breasts": - $ mouse_boing() + $ show_kinetic_text(_("{shake}*boing*{/shake}"), sound="sounds/boing02.ogg") if states.cho.level < 16: # Before Gryffindor match random: @@ -111,7 +111,7 @@ label cho_reaction_touch(what): cho @ cheeks blush "Glad you appreciate them as much as I do..." ("smile", "wink", "base", "mid") elif what == "vagina": - $ mouse_heart() + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) if states.cho.level < 16: #Before Gryffindor match random: diff --git a/game/scripts/characters/hermione/wardrobe_reactions.rpy b/game/scripts/characters/hermione/wardrobe_reactions.rpy index eb70213c..7ffcc109 100644 --- a/game/scripts/characters/hermione/wardrobe_reactions.rpy +++ b/game/scripts/characters/hermione/wardrobe_reactions.rpy @@ -56,7 +56,7 @@ label her_reaction_category_fail(category): label her_reaction_touch(what): if what == "head": - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") if states.her.level >= 20: #craving it @@ -90,7 +90,7 @@ label her_reaction_touch(what): her "Why are you doing that?" ("clench", "base", "base", "R") elif what == "breasts": - $ mouse_boing() + $ show_kinetic_text(_("{shake}*boing*{/shake}"), sound="sounds/boing02.ogg") if states.her.level >= 20: random: @@ -112,7 +112,7 @@ label her_reaction_touch(what): her @ cheeks blush "I guess a small kiss is fine..." ("annoyed", "base", "base", "R") her @ cheeks blush "That's not my cheek..." ("disgust", "narrow", "base", "mid") elif what == "vagina": - $ mouse_heart() + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) if hermione.is_worn("bottom"): # Bottoms only OR Bottoms AND panties diff --git a/game/scripts/characters/luna/wardrobe_reactions.rpy b/game/scripts/characters/luna/wardrobe_reactions.rpy index 71cdd171..db5d0904 100644 --- a/game/scripts/characters/luna/wardrobe_reactions.rpy +++ b/game/scripts/characters/luna/wardrobe_reactions.rpy @@ -51,7 +51,7 @@ label lun_reaction_category_fail(category): label lun_reaction_touch(what): if what == "head": - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") if states.lun.tier == 5: random: @@ -102,7 +102,7 @@ label lun_reaction_touch(what): elif what == "breasts": - $ mouse_boing() + $ show_kinetic_text(_("{shake}*boing*{/shake}"), sound="sounds/boing02.ogg") if states.lun.tier == 5: random: @@ -149,7 +149,7 @@ label lun_reaction_touch(what): lun "Sorry [name_genie_luna], your beard is tickling me..." ("smile", "base", "base", "mid") elif what == "vagina": - $ mouse_heart() + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) if states.lun.tier == 5: random: diff --git a/game/scripts/characters/susan/wardrobe_reactions.rpy b/game/scripts/characters/susan/wardrobe_reactions.rpy index 01e8ba18..572b97c1 100644 --- a/game/scripts/characters/susan/wardrobe_reactions.rpy +++ b/game/scripts/characters/susan/wardrobe_reactions.rpy @@ -38,7 +38,7 @@ label sus_reaction_category_fail(category): label sus_reaction_touch(what): if what == "head": - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") random: sus "S--{w=0.2} Sir..." ("soft", "base", "base", "mid") @@ -46,14 +46,14 @@ label sus_reaction_touch(what): sus @ cheeks blush "Professor, p--{w=0.2} please..." ("base", "base", "sad", "downR") elif what == "breasts": - $ mouse_boing() + $ show_kinetic_text(_("{shake}*boing*{/shake}"), sound="sounds/boing02.ogg") random: sus @ cheeks blush "W--{w=0.2} Why are you..." ("soft", "happy", "sad", "stare") sus @ cheeks blush "P--{w=0.2} please, it's embarrassing..." ("angry", "happy", "sad", "downR") sus @ cheeks blush "D--{w=0.2} don't... Don't look at me, sir..." ("soft", "closed", "sad", "mid") elif what == "vagina": - $ mouse_heart() + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) random: sus @ cheeks blush "M--{w=0.2} My..." ("soft", "happy", "sad", "stare") diff --git a/game/scripts/characters/tonks/wardrobe_reactions.rpy b/game/scripts/characters/tonks/wardrobe_reactions.rpy index c96872c8..4d7aec69 100644 --- a/game/scripts/characters/tonks/wardrobe_reactions.rpy +++ b/game/scripts/characters/tonks/wardrobe_reactions.rpy @@ -52,7 +52,7 @@ label ton_reaction_category_fail(category): label ton_reaction_touch(what): if what == "head": - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") random: ton "Is this what you do to our students? A bit tame, don't you think?" ("soft", "narrow", "base", "mid") @@ -66,7 +66,7 @@ label ton_reaction_touch(what): ton "Don't you dare touch my elbows next..." ("soft", "narrow", "base", "mid") elif what == "breasts": - $ mouse_boing() + $ show_kinetic_text(_("{shake}*boing*{/shake}"), sound="sounds/boing02.ogg") random: ton "*Mmm*..." ("base", "narrow", "base", "up") @@ -76,7 +76,7 @@ label ton_reaction_touch(what): ton "I don't remember this being part of the job description..." ("horny", "narrow", "shocked", "down") ton "But I'll look the other way for now..." ("grin", "closed", "base", "mid") elif what == "vagina": - $ mouse_heart() + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) random: ton "A gentleman usually doesn't kiss on the lips, but I'll allow it..." ("soft", "closed", "base", "mid") @@ -97,11 +97,11 @@ label ton_reaction_touch_fail(what): block: ton "Hey, don't do that!" ("open", "narrow", "base", "mid") ton "Let me pet you instead." ("base", "narrow", "angry", "mid") - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") pause 0.35 - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") pause 0.35 - $ mouse_headpat() + $ show_kinetic_text(_("{shudder}*pat*{/shudder}"), sound="sounds/slap_03.ogg") ton "Good boy!" ("horny", "narrow", "base", "mid") elif what == "breasts": diff --git a/game/scripts/wardrobe/functions.rpy b/game/scripts/wardrobe/functions.rpy index 99b7f92f..26a1f481 100644 --- a/game/scripts/wardrobe/functions.rpy +++ b/game/scripts/wardrobe/functions.rpy @@ -106,6 +106,25 @@ init -1 python: return score + def show_kinetic_text(text, style="what_centered_small", pos=None, anchor=(0.5, 0.6), zoom=1.0, sound=None, trans=None, timer=1): + if pos is None: + start_x, start_y = renpy.get_mouse_pos() + else: + start_x, start_y = pos + + target_x, target_y = start_x, start_y-15 + xanchor, yanchor = anchor + + if sound: + renpy.play(sound) + + if trans: + d = At(At(Text(text, style=style), trans), random_rotation) # We need to do this in two steps because of the rotation + else: + d = At(Text(text, style=style), random_rotation) + + renpy.show_screen("gfx_effect", start_x=start_x, start_y=start_y, target_x=target_x, target_y=target_y, img=d, xanchor=xanchor, yanchor=yanchor, zoom=zoom, timer=timer) + def mouse_slap(): """Causes the mouse to be moved away from current position and displays a smoke effect""" renpy.play('sounds/slap.ogg') @@ -116,36 +135,6 @@ init -1 python: renpy.show_screen("gfx_effect", start_x=x, start_y=y, target_x=xx, target_y=yy, img="smoke", xanchor=0.1, yanchor=0.7, zoom=0.2, duration=0.15) renpy.set_mouse_pos(xx, yy, duration=0.1) - def mouse_headpat(): - """Causes the mouse to be moved away from current position and displays a heart effect""" - renpy.play("sounds/slap_03.ogg") - renpy.stop_predict_screen("gfx_effect") - x, y = renpy.get_mouse_pos() - xx, yy = x, y-15 - img = At(Text(_("{shudder}*pat*{/shudder}")), random_rotation) - renpy.hide_screen("gfx_effect") - renpy.show_screen("gfx_effect", start_x=x, start_y=y, target_x=xx, target_y=yy, img=img, xanchor=0.5, yanchor=0.65, zoom=1.0, timer=1) - - def mouse_boing(): - """Causes the mouse to be moved away from current position and displays a heart effect""" - renpy.play('sounds/boing02.ogg') - renpy.stop_predict_screen("gfx_effect") - x, y = renpy.get_mouse_pos() - xx, yy = x, y-15 - img = At(Text(_("{shake}*boing*{/shake}")), random_rotation) - renpy.hide_screen("gfx_effect") - renpy.show_screen("gfx_effect", start_x=x, start_y=y, target_x=xx, target_y=yy, img=img, xanchor=0.5, yanchor=0.65, zoom=1.0, timer=1) - - def mouse_heart(): - """Causes the mouse to be moved away from current position and displays a heart effect""" - renpy.play('sounds/drooling.ogg') - renpy.stop_predict_screen("gfx_effect") - x, y = renpy.get_mouse_pos() - xx, yy = x, y-15 - img = At(At(Text(_("*squelch*"), style="what_centered_small"), squeeze_hearts), random_rotation) - renpy.hide_screen("gfx_effect") - renpy.show_screen("gfx_effect", start_x=x, start_y=y, target_x=xx, target_y=yy, img=img, xanchor=0.5, yanchor=0.65, zoom=1.0, timer=1) - def wardrobe_fail_hint(value): """Displays required whoring/friendship/affection level.""" word_list = {"tonks": "friendship", "astoria": "affection", "susan": "confidence", "luna": "corruption", "cho": "recklessness", "hermione": "whoring"} @@ -159,32 +148,6 @@ init -1 python: renpy.with_statement(d3) return - def list_outfit_files(): - - @functools.cache - def build_button(rp): - style = "wardrobe_button" - child = Fixed(Transform(rp, xsize=96, fit="contain", yalign=1.0, yoffset=-6), Frame(gui.format("interface/frames/{}/iconframe.webp"), 6, 6), xysize=(96, 168)) - action = Return(["import", rp]) - hover_foreground = "#ffffff80" - - return Button(child=child, action=action, hover_foreground=hover_foreground, style=style) - - path = f"{config.gamedir}/outfits/" - - if not os.path.exists(path): - os.makedirs(path) - - files = [] - for f in os.listdir(path): - fp = os.path.join(path, f) - rp = os.path.relpath(fp, config.gamedir).replace("\\", "/") - - if os.path.isfile(os.path.join(path, f)) and f.endswith(".png"): - files.append(build_button(rp)) - - return files - transform squeeze_hearts: animation subpixel True diff --git a/game/scripts/wardrobe/wardrobe.rpy b/game/scripts/wardrobe/wardrobe.rpy index 93c1c45a..3e28b038 100644 --- a/game/scripts/wardrobe/wardrobe.rpy +++ b/game/scripts/wardrobe/wardrobe.rpy @@ -309,8 +309,8 @@ init python in wardrobe: delete_action = renpy.store.Function(renpy.store.colorpicker.cp.remove_favorite, i) if col else renpy.store.NullAction() save_action = renpy.store.Function(renpy.store.colorpicker.cp.add_favorite, i, renpy.store.colorpicker.cp.live_color) d = { - _("Select"): (renpy.store.Text("✅", align=(0.5, 0.5)), [exit_action, select_action]), _("Delete"): (renpy.store.Text("❌", align=(0.5, 0.5)), [exit_action, delete_action]), + _("Select"): (renpy.store.Text("✅", align=(0.5, 0.5)), [exit_action, select_action]), } if col: