diff --git a/game/scripts/characters/astoria/wardrobe_reactions.rpy b/game/scripts/characters/astoria/wardrobe_reactions.rpy index 6e79360a..f941b7ef 100644 --- a/game/scripts/characters/astoria/wardrobe_reactions.rpy +++ b/game/scripts/characters/astoria/wardrobe_reactions.rpy @@ -4,6 +4,7 @@ define ast_requirements = { "category piercings & tattoos": 16, "touch head": 4, "touch breasts": 12, + "touch ass": 12, "touch vagina": 18, "unequip panties": 15, "unequip bra": 15, @@ -68,7 +69,7 @@ label ast_reaction_touch(what): block: ast "Gross..." ("annoyed", "narrow", "base", "mid") elif what == "vagina": - $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_text) random: block: @@ -82,6 +83,8 @@ label ast_reaction_touch(what): block: ast "Thought you could slip past my wards, did you?" ("clench", "base", "base", "mid") ast @ cheeks blush "I'll have you know I felt none of that!" ("open", "closed", "base", "mid") + elif what == "ass": + $ show_kinetic_text(_("{shake}*spank*{/shake}"), sound="sounds/spank.ogg", trans=expand_text) return @@ -151,6 +154,8 @@ label ast_reaction_touch_fail(what): ast "Don't be gross, [name_genie_astoria]." ("base", "base", "base", "mid") block: ast "..." ("clench", "closed", "base", "mid") + elif what == "ass": + $ mouse_slap() return label ast_reaction_equip(item): diff --git a/game/scripts/characters/cho/wardrobe_reactions.rpy b/game/scripts/characters/cho/wardrobe_reactions.rpy index 2efa8e9e..550c565c 100644 --- a/game/scripts/characters/cho/wardrobe_reactions.rpy +++ b/game/scripts/characters/cho/wardrobe_reactions.rpy @@ -4,6 +4,7 @@ define cho_requirements = { "category piercings & tattoos": 16, "touch head": 4, "touch breasts": 10, #Start of Gryffindor match leadup tier + "touch ass": 10, "touch vagina": 15, #Highest level of Gryffindor match leadup tier "unequip panties": 15, "unequip bra": 15, @@ -90,7 +91,7 @@ label cho_reaction_touch(what): elif what == "breasts": $ show_kinetic_text(_("{shake}*boing*{/shake}"), sound="sounds/boing02.ogg") - + if states.cho.level < 16: # Before Gryffindor match random: cho @ cheeks blush "Kissing them for good luck are we?" ("smile", "narrow", "base", "mid") @@ -111,7 +112,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": - $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_text) if states.cho.level < 16: #Before Gryffindor match random: @@ -125,8 +126,8 @@ label cho_reaction_touch(what): cho @ cheeks blush "There's two more you know..." ("smile", "wink", "base", "mid") cho @ cheeks blush "Careful or I might lock my thighs around your neck and keep you there..." ("soft", "narrow", "base", "mid") - - + elif what == "ass": + $ show_kinetic_text(_("{shake}*spank*{/shake}"), sound="sounds/spank.ogg", trans=expand_text) return label cho_reaction_touch_fail(what): @@ -158,6 +159,8 @@ label cho_reaction_touch_fail(what): cho "You'd have to be a lot faster to get even close to getting away with that..." ("crooked_smile", "narrow", "angry", "mid") cho "Nice try..." ("soft", "narrow", "angry", "mid") cho "No foul play, [name_genie_cho]..." ("angry", "narrow", "angry", "mid") + elif what == "ass": + $ mouse_slap() return diff --git a/game/scripts/characters/hermione/wardrobe_reactions.rpy b/game/scripts/characters/hermione/wardrobe_reactions.rpy index 7ffcc109..fe5c41eb 100644 --- a/game/scripts/characters/hermione/wardrobe_reactions.rpy +++ b/game/scripts/characters/hermione/wardrobe_reactions.rpy @@ -4,6 +4,7 @@ define her_requirements = { "category piercings & tattoos": 16, "touch head": 4, "touch breasts": 12, + "touch ass": 12, "touch vagina": 18, "unequip panties": 15, "unequip bra": 14, @@ -112,7 +113,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": - $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_text) if hermione.is_worn("bottom"): # Bottoms only OR Bottoms AND panties @@ -135,6 +136,8 @@ label her_reaction_touch(what): ##This could play after touching her enough times this wardrobe session## #her "*Nnngh*..." ("base", "base", "base", "mid") #with kissiris + elif what == "ass": + $ show_kinetic_text(_("{shake}*spank*{/shake}"), sound="sounds/spank.ogg", trans=expand_text) return @@ -164,6 +167,8 @@ label her_reaction_touch_fail(what): her "Unhand me..." ("mad", "wide", "angry", "mid") her @ cheeks blush "Stop it please..." ("open", "happyCl", "angry", "mid") her "Hands off me." ("clench", "narrow", "angry", "mid") + elif what == "ass": + $ mouse_slap() return label her_reaction_equip(item): diff --git a/game/scripts/characters/luna/wardrobe_reactions.rpy b/game/scripts/characters/luna/wardrobe_reactions.rpy index db5d0904..46f71643 100644 --- a/game/scripts/characters/luna/wardrobe_reactions.rpy +++ b/game/scripts/characters/luna/wardrobe_reactions.rpy @@ -2,9 +2,9 @@ define lun_requirements = { "category upper undergarment": 7, "category lower undergarment": 7, "category piercings & tattoos": 13, - # "touch head": - # "touch breasts": - # "touch vagina": + "touch head": 0, + "touch breasts": 0, + "touch vagina": 0, "unequip panties": 7, "unequip bra": 7, "unequip top": 4, @@ -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": - $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_text) if states.lun.tier == 5: random: @@ -181,6 +181,8 @@ label lun_reaction_touch(what): block: lun "{bounce}*Ooohh*...{/bounce}" ("grin", "base", "base", "up") lun "I don't think anyone has ever kissed me there before... How strange..." ("grin", "closed", "base", "mid") + elif what == "ass": + $ show_kinetic_text(_("{shake}*spank*{/shake}"), sound="sounds/spank.ogg", trans=expand_text) return label lun_reaction_touch_fail(what): #Not used @@ -201,6 +203,8 @@ label lun_reaction_touch_fail(what): #Not used $ mouse_slap() lun "*Ah* [name_genie_luna], please don't tease me, wrackspurts have been terribly active today, and I'm barely able to withhold as it is." + elif what == "ass": + $ mouse_slap() return diff --git a/game/scripts/characters/susan/wardrobe_reactions.rpy b/game/scripts/characters/susan/wardrobe_reactions.rpy index 572b97c1..b3f6b599 100644 --- a/game/scripts/characters/susan/wardrobe_reactions.rpy +++ b/game/scripts/characters/susan/wardrobe_reactions.rpy @@ -4,6 +4,7 @@ define sus_requirements = { "category piercings & tattoos": 16, "touch head": 4, "touch breasts": 12, + "touch ass": 12, "touch vagina": 18, "unequip panties": 6, "unequip bra": 6, @@ -53,12 +54,14 @@ label sus_reaction_touch(what): 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": - $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_text) random: sus @ cheeks blush "M--{w=0.2} My..." ("soft", "happy", "sad", "stare") sus @ cheeks blush "S--{w=0.2} Sir..." ("soft", "closed", "sad", "mid") sus @ cheeks blush "P--{w=0.2} please sir, it's embarrassing..." ("base", "happy", "sad", "downR") + elif what == "ass": + $ show_kinetic_text(_("{shake}*spank*{/shake}"), sound="sounds/spank.ogg", trans=expand_text) return @@ -82,6 +85,8 @@ label sus_reaction_touch_fail(what): gen "Do what?" ("base", xpos="far_left", ypos="head") sus @ cheeks blush "N--{w=0.2} nothing [name_genie_susan], forgive me." ("angry", "wide", "sad", "stare") gen "(...)" ("base", xpos="far_left", ypos="head") + elif what == "ass": + $ mouse_slap() return diff --git a/game/scripts/characters/tonks/wardrobe_reactions.rpy b/game/scripts/characters/tonks/wardrobe_reactions.rpy index 4d7aec69..9b5537fb 100644 --- a/game/scripts/characters/tonks/wardrobe_reactions.rpy +++ b/game/scripts/characters/tonks/wardrobe_reactions.rpy @@ -4,6 +4,7 @@ define ton_requirements = { "category piercings & tattoos": 60, "touch head": 50, "touch breasts": 20, + "touch ass": 20, "touch vagina": 40, #"unequip panties": 6, # Tonks does not use panties unequip limits. #"unequip bra": 6, # Tonks does not use bra unequip limits. @@ -76,13 +77,18 @@ 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": - $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_hearts) + $ show_kinetic_text(_("*squelch*"), sound="sounds/drooling.ogg", trans=squeeze_text) random: ton "A gentleman usually doesn't kiss on the lips, but I'll allow it..." ("soft", "closed", "base", "mid") ton "*Hmm*...{w=0.3} Did I feel some tongue? Must've been my imagination..." ("horny", "narrow", "base", "down") ton "Is this one part of the extracurricular activities in my work contract?" ("grin", "narrow", "raised", "mid") ton "I didn't expect to receive a bonus today... What a nice surprise..." ("grin", "narrow", "raised", "mid") + elif what == "ass": + $ show_kinetic_text(_("*spank*"), sound="sounds/spank.ogg", trans=expand_text) + + ton "*Mmm* Spank me daddy!" ("horny", "narrow", "base", "down") + return label ton_reaction_touch_fail(what): @@ -124,7 +130,8 @@ label ton_reaction_touch_fail(what): ton "Hey, who said you had permission to approach the chamber of secrets?" ("grin", "narrow", "angry", "mid") ton "That place is reserved for good boys and girls..." ("annoyed", "narrow", "angry", "mid") ton "That forest is forbidden entry for newbies... Let's get to know each other a bit better first..." ("soft", "narrow", "base", "mid") - + elif what == "ass": + $ mouse_slap() return label ton_reaction_equip(item): diff --git a/game/scripts/doll/outfits.rpy b/game/scripts/doll/outfits.rpy index 706e5d8d..213eeacc 100644 --- a/game/scripts/doll/outfits.rpy +++ b/game/scripts/doll/outfits.rpy @@ -209,11 +209,13 @@ init python: try: renpy.render_to_file(d, fpt_output, width=width, height=height, resize=True) + + image_payload.inject(fn_input, fn_output, str(exported)) + os.remove(osfp) # Remove temp file except Exception as e: print(f"Warning! Failed to write to path: {fp}/{fn_input} - {e}") - - image_payload.inject(fn_input, fn_output, str(exported)) - os.remove(osfp) # Remove temp file + renpy.notify("Export failed!") + else: set_clipboard(exported) renpy.notify("Export successful!") diff --git a/game/scripts/wardrobe/functions.rpy b/game/scripts/wardrobe/functions.rpy index 26a1f481..ee37a878 100644 --- a/game/scripts/wardrobe/functions.rpy +++ b/game/scripts/wardrobe/functions.rpy @@ -148,7 +148,7 @@ init -1 python: renpy.with_statement(d3) return -transform squeeze_hearts: +transform squeeze_text: animation subpixel True transform_anchor True @@ -157,3 +157,12 @@ transform squeeze_hearts: easeout 0.5 xzoom 1.0 pause 1 repeat + +transform expand_text: + animation + subpixel True + transform_anchor True + xzoom 0.5 + easein 0.35 xzoom 1.0 + pause 1 + repeat diff --git a/game/scripts/wardrobe/wardrobe.rpy b/game/scripts/wardrobe/wardrobe.rpy index cf13db45..d7c9b69d 100644 --- a/game/scripts/wardrobe/wardrobe.rpy +++ b/game/scripts/wardrobe/wardrobe.rpy @@ -333,7 +333,6 @@ init python in wardrobe: return renpy.store.Transform(item.icon, xysize=(48, 48)) return renpy.store.Transform(item.icon, matrixcolor=renpy.store.SaturationMatrix(0)*renpy.store.BrightnessMatrix(-0.25)*renpy.store.OpacityMatrix(0.5)) - @functools.cache def easteregg(character_name): scope = renpy.get_screen("wardrobe").scope character = scope["character"] @@ -343,50 +342,60 @@ init python in wardrobe: flag = renpy.store.get_character_progression(character.name) return (flag >= req) - head_action = renpy.store.Function(wardrobe_react,"touch", "head") if check("head") else renpy.store.Function(wardrobe_react,"touch_fail", "head") + head_action = renpy.store.Function(wardrobe_react,"touch", "head") if check("head") else renpy.store.Function(wardrobe_react,"touch_fail", "head") breasts_action = renpy.store.Function(wardrobe_react, "touch", "breasts") if check("breasts") else renpy.store.Function(wardrobe_react,"touch_fail", "breasts") vagina_action = renpy.store.Function(wardrobe_react, "touch", "vagina") if check("vagina") else renpy.store.Function(wardrobe_react,"touch_fail", "vagina") + ass_action = renpy.store.Function(wardrobe_react, "touch", "ass") if check("ass") else renpy.store.Function(wardrobe_react,"touch_fail", "ass") # Positions (hardcoded) if character_name == "tonks": head_box = (763, 31, 882, 160) breasts_box = (735, 232, 890, 310) vagina_box = (765, 405, 834, 466) + ass_box = (865, 370, 942, 486) elif character_name == "hermione": head_box = (760, 14, 882, 170) breasts_box = (735, 232, 880, 320) vagina_box = (770, 387, 834, 440) + ass_box = (856, 356, 914, 455) elif character_name == "cho": head_box = (756, 71, 863, 193) breasts_box = (751, 247, 856, 318) vagina_box = (768, 405, 826, 457) + ass_box = (860, 387, 914, 482) elif character_name == "luna": head_box = (763, 31, 885, 165) breasts_box = (740, 220, 872, 310) vagina_box = (771, 391, 834, 444) + ass_box = (852, 350, 912, 458) elif character_name == "astoria": head_box = (757, 64, 863, 194) breasts_box = (755, 254, 863, 318) vagina_box = (775, 410, 824, 457) + ass_box = (853, 371, 908, 475) else: # Susan + fallback head_box = (771, 56, 871, 184) breasts_box = (724, 230, 882, 342) vagina_box = (770, 405, 850, 464) + ass_box = (870, 376, 933, 492) head_xysize = (head_box[2] - head_box[0], head_box[3] - head_box[1]) breasts_xysize = (breasts_box[2] - breasts_box[0], breasts_box[3] - breasts_box[1]) vagina_xysize = (vagina_box[2] - vagina_box[0], vagina_box[3] - vagina_box[1]) + ass_xysize = (ass_box[2] - ass_box[0], ass_box[3] - ass_box[1]) head_pos = (head_box[0], head_box[1]) breasts_pos = (breasts_box[0], breasts_box[1]) - vagina_pos = (vagina_box[0], vagina_box[1]) + vagina_pos = (vagina_box[0], vagina_box[1]) + ass_pos = (ass_box[0], ass_box[1]) # Buttons head_btn = renpy.store.Button(child=renpy.store.Null(), style="wardrobe_secret", xysize=head_xysize, action=head_action) breasts_btn = renpy.store.Button(child=renpy.store.Null(*breasts_xysize), style="wardrobe_secret", xysize=breasts_xysize, action=breasts_action) vagina_btn = renpy.store.Button(child=renpy.store.Null(*vagina_xysize), style="wardrobe_secret", xysize=vagina_xysize, action=vagina_action) + ass_btn = renpy.store.Button(child=renpy.store.Null(*ass_xysize), style="wardrobe_secret", xysize=ass_xysize, action=ass_action) - return [(head_btn, head_pos), (breasts_btn, breasts_pos), (vagina_btn, vagina_pos)] + return [(head_btn, head_pos), (breasts_btn, breasts_pos), (vagina_btn, vagina_pos), (ass_btn, ass_pos)] def import_outfits(): scope = renpy.get_screen("wardrobe").scope @@ -760,8 +769,8 @@ style wardrobe_checkbox_button_text is wardrobe_button_text: # Debug only style wardrobe_secret: - #background "#ff000025" - background None + background "#ff000025" + # background None transform wardrobe_show: subpixel True @@ -782,4 +791,4 @@ transform wardrobe_character_show: transform wardrobe_character_hide: xoffset 0 - easeout 0.4 xoffset 1080 \ No newline at end of file + easeout 0.4 xoffset 1080 diff --git a/game/sounds/spank.ogg b/game/sounds/spank.ogg new file mode 100644 index 00000000..331c4f31 --- /dev/null +++ b/game/sounds/spank.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b743d19d177a028674697d278d3c8d1b105481803c572d50f88c41c60e6c9407 +size 10917