This commit is contained in:
LoafyLemon 2024-11-09 12:10:08 +00:00
parent dfa36937e5
commit cd23aa6914
10 changed files with 76 additions and 24 deletions

View File

@ -4,6 +4,7 @@ define ast_requirements = {
"category piercings & tattoos": 16, "category piercings & tattoos": 16,
"touch head": 4, "touch head": 4,
"touch breasts": 12, "touch breasts": 12,
"touch ass": 12,
"touch vagina": 18, "touch vagina": 18,
"unequip panties": 15, "unequip panties": 15,
"unequip bra": 15, "unequip bra": 15,
@ -68,7 +69,7 @@ label ast_reaction_touch(what):
block: block:
ast "Gross..." ("annoyed", "narrow", "base", "mid") ast "Gross..." ("annoyed", "narrow", "base", "mid")
elif what == "vagina": 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: random:
block: block:
@ -82,6 +83,8 @@ label ast_reaction_touch(what):
block: block:
ast "Thought you could slip past my wards, did you?" ("clench", "base", "base", "mid") 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") 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 return
@ -151,6 +154,8 @@ label ast_reaction_touch_fail(what):
ast "Don't be gross, [name_genie_astoria]." ("base", "base", "base", "mid") ast "Don't be gross, [name_genie_astoria]." ("base", "base", "base", "mid")
block: block:
ast "..." ("clench", "closed", "base", "mid") ast "..." ("clench", "closed", "base", "mid")
elif what == "ass":
$ mouse_slap()
return return
label ast_reaction_equip(item): label ast_reaction_equip(item):

View File

@ -4,6 +4,7 @@ define cho_requirements = {
"category piercings & tattoos": 16, "category piercings & tattoos": 16,
"touch head": 4, "touch head": 4,
"touch breasts": 10, #Start of Gryffindor match leadup tier "touch breasts": 10, #Start of Gryffindor match leadup tier
"touch ass": 10,
"touch vagina": 15, #Highest level of Gryffindor match leadup tier "touch vagina": 15, #Highest level of Gryffindor match leadup tier
"unequip panties": 15, "unequip panties": 15,
"unequip bra": 15, "unequip bra": 15,
@ -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") cho @ cheeks blush "Glad you appreciate them as much as I do..." ("smile", "wink", "base", "mid")
elif what == "vagina": 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 if states.cho.level < 16: #Before Gryffindor match
random: 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 "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") 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 return
label cho_reaction_touch_fail(what): 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 "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 "Nice try..." ("soft", "narrow", "angry", "mid")
cho "No foul play, [name_genie_cho]..." ("angry", "narrow", "angry", "mid") cho "No foul play, [name_genie_cho]..." ("angry", "narrow", "angry", "mid")
elif what == "ass":
$ mouse_slap()
return return

View File

@ -4,6 +4,7 @@ define her_requirements = {
"category piercings & tattoos": 16, "category piercings & tattoos": 16,
"touch head": 4, "touch head": 4,
"touch breasts": 12, "touch breasts": 12,
"touch ass": 12,
"touch vagina": 18, "touch vagina": 18,
"unequip panties": 15, "unequip panties": 15,
"unequip bra": 14, "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 "I guess a small kiss is fine..." ("annoyed", "base", "base", "R")
her @ cheeks blush "That's not my cheek..." ("disgust", "narrow", "base", "mid") her @ cheeks blush "That's not my cheek..." ("disgust", "narrow", "base", "mid")
elif what == "vagina": 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"): if hermione.is_worn("bottom"):
# Bottoms only OR Bottoms AND panties # 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## ##This could play after touching her enough times this wardrobe session##
#her "*Nnngh*..." ("base", "base", "base", "mid") #her "*Nnngh*..." ("base", "base", "base", "mid")
#with kissiris #with kissiris
elif what == "ass":
$ show_kinetic_text(_("{shake}*spank*{/shake}"), sound="sounds/spank.ogg", trans=expand_text)
return return
@ -164,6 +167,8 @@ label her_reaction_touch_fail(what):
her "Unhand me..." ("mad", "wide", "angry", "mid") her "Unhand me..." ("mad", "wide", "angry", "mid")
her @ cheeks blush "Stop it please..." ("open", "happyCl", "angry", "mid") her @ cheeks blush "Stop it please..." ("open", "happyCl", "angry", "mid")
her "Hands off me." ("clench", "narrow", "angry", "mid") her "Hands off me." ("clench", "narrow", "angry", "mid")
elif what == "ass":
$ mouse_slap()
return return
label her_reaction_equip(item): label her_reaction_equip(item):

View File

@ -2,9 +2,9 @@ define lun_requirements = {
"category upper undergarment": 7, "category upper undergarment": 7,
"category lower undergarment": 7, "category lower undergarment": 7,
"category piercings & tattoos": 13, "category piercings & tattoos": 13,
# "touch head": "touch head": 0,
# "touch breasts": "touch breasts": 0,
# "touch vagina": "touch vagina": 0,
"unequip panties": 7, "unequip panties": 7,
"unequip bra": 7, "unequip bra": 7,
"unequip top": 4, "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") lun "Sorry [name_genie_luna], your beard is tickling me..." ("smile", "base", "base", "mid")
elif what == "vagina": 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: if states.lun.tier == 5:
random: random:
@ -181,6 +181,8 @@ label lun_reaction_touch(what):
block: block:
lun "{bounce}*Ooohh*...{/bounce}" ("grin", "base", "base", "up") 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") 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 return
label lun_reaction_touch_fail(what): #Not used label lun_reaction_touch_fail(what): #Not used
@ -201,6 +203,8 @@ label lun_reaction_touch_fail(what): #Not used
$ mouse_slap() $ 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." 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 return

View File

@ -4,6 +4,7 @@ define sus_requirements = {
"category piercings & tattoos": 16, "category piercings & tattoos": 16,
"touch head": 4, "touch head": 4,
"touch breasts": 12, "touch breasts": 12,
"touch ass": 12,
"touch vagina": 18, "touch vagina": 18,
"unequip panties": 6, "unequip panties": 6,
"unequip bra": 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 "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") sus @ cheeks blush "D--{w=0.2} don't... Don't look at me, sir..." ("soft", "closed", "sad", "mid")
elif what == "vagina": 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: random:
sus @ cheeks blush "M--{w=0.2} My..." ("soft", "happy", "sad", "stare") 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 "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") 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 return
@ -82,6 +85,8 @@ label sus_reaction_touch_fail(what):
gen "Do what?" ("base", xpos="far_left", ypos="head") 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") sus @ cheeks blush "N--{w=0.2} nothing [name_genie_susan], forgive me." ("angry", "wide", "sad", "stare")
gen "(...)" ("base", xpos="far_left", ypos="head") gen "(...)" ("base", xpos="far_left", ypos="head")
elif what == "ass":
$ mouse_slap()
return return

View File

@ -4,6 +4,7 @@ define ton_requirements = {
"category piercings & tattoos": 60, "category piercings & tattoos": 60,
"touch head": 50, "touch head": 50,
"touch breasts": 20, "touch breasts": 20,
"touch ass": 20,
"touch vagina": 40, "touch vagina": 40,
#"unequip panties": 6, # Tonks does not use panties unequip limits. #"unequip panties": 6, # Tonks does not use panties unequip limits.
#"unequip bra": 6, # Tonks does not use bra 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 "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") ton "But I'll look the other way for now..." ("grin", "closed", "base", "mid")
elif what == "vagina": 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: random:
ton "A gentleman usually doesn't kiss on the lips, but I'll allow it..." ("soft", "closed", "base", "mid") 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 "*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 "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") 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 return
label ton_reaction_touch_fail(what): 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 "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 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") 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 return
label ton_reaction_equip(item): label ton_reaction_equip(item):

View File

@ -209,11 +209,13 @@ init python:
try: try:
renpy.render_to_file(d, fpt_output, width=width, height=height, resize=True) 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: except Exception as e:
print(f"Warning! Failed to write to path: {fp}/{fn_input} - {e}") print(f"Warning! Failed to write to path: {fp}/{fn_input} - {e}")
renpy.notify("Export failed!")
image_payload.inject(fn_input, fn_output, str(exported))
os.remove(osfp) # Remove temp file
else: else:
set_clipboard(exported) set_clipboard(exported)
renpy.notify("Export successful!") renpy.notify("Export successful!")

View File

@ -148,7 +148,7 @@ init -1 python:
renpy.with_statement(d3) renpy.with_statement(d3)
return return
transform squeeze_hearts: transform squeeze_text:
animation animation
subpixel True subpixel True
transform_anchor True transform_anchor True
@ -157,3 +157,12 @@ transform squeeze_hearts:
easeout 0.5 xzoom 1.0 easeout 0.5 xzoom 1.0
pause 1 pause 1
repeat repeat
transform expand_text:
animation
subpixel True
transform_anchor True
xzoom 0.5
easein 0.35 xzoom 1.0
pause 1
repeat

View File

@ -333,7 +333,6 @@ init python in wardrobe:
return renpy.store.Transform(item.icon, xysize=(48, 48)) 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)) 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): def easteregg(character_name):
scope = renpy.get_screen("wardrobe").scope scope = renpy.get_screen("wardrobe").scope
character = scope["character"] character = scope["character"]
@ -346,47 +345,57 @@ init python in wardrobe:
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") 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") 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) # Positions (hardcoded)
if character_name == "tonks": if character_name == "tonks":
head_box = (763, 31, 882, 160) head_box = (763, 31, 882, 160)
breasts_box = (735, 232, 890, 310) breasts_box = (735, 232, 890, 310)
vagina_box = (765, 405, 834, 466) vagina_box = (765, 405, 834, 466)
ass_box = (865, 370, 942, 486)
elif character_name == "hermione": elif character_name == "hermione":
head_box = (760, 14, 882, 170) head_box = (760, 14, 882, 170)
breasts_box = (735, 232, 880, 320) breasts_box = (735, 232, 880, 320)
vagina_box = (770, 387, 834, 440) vagina_box = (770, 387, 834, 440)
ass_box = (856, 356, 914, 455)
elif character_name == "cho": elif character_name == "cho":
head_box = (756, 71, 863, 193) head_box = (756, 71, 863, 193)
breasts_box = (751, 247, 856, 318) breasts_box = (751, 247, 856, 318)
vagina_box = (768, 405, 826, 457) vagina_box = (768, 405, 826, 457)
ass_box = (860, 387, 914, 482)
elif character_name == "luna": elif character_name == "luna":
head_box = (763, 31, 885, 165) head_box = (763, 31, 885, 165)
breasts_box = (740, 220, 872, 310) breasts_box = (740, 220, 872, 310)
vagina_box = (771, 391, 834, 444) vagina_box = (771, 391, 834, 444)
ass_box = (852, 350, 912, 458)
elif character_name == "astoria": elif character_name == "astoria":
head_box = (757, 64, 863, 194) head_box = (757, 64, 863, 194)
breasts_box = (755, 254, 863, 318) breasts_box = (755, 254, 863, 318)
vagina_box = (775, 410, 824, 457) vagina_box = (775, 410, 824, 457)
ass_box = (853, 371, 908, 475)
else: # Susan + fallback else: # Susan + fallback
head_box = (771, 56, 871, 184) head_box = (771, 56, 871, 184)
breasts_box = (724, 230, 882, 342) breasts_box = (724, 230, 882, 342)
vagina_box = (770, 405, 850, 464) 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]) 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]) 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]) 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]) head_pos = (head_box[0], head_box[1])
breasts_pos = (breasts_box[0], breasts_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 # Buttons
head_btn = renpy.store.Button(child=renpy.store.Null(), style="wardrobe_secret", xysize=head_xysize, action=head_action) 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) 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) 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(): def import_outfits():
scope = renpy.get_screen("wardrobe").scope scope = renpy.get_screen("wardrobe").scope
@ -760,8 +769,8 @@ style wardrobe_checkbox_button_text is wardrobe_button_text:
# Debug only # Debug only
style wardrobe_secret: style wardrobe_secret:
#background "#ff000025" background "#ff000025"
background None # background None
transform wardrobe_show: transform wardrobe_show:
subpixel True subpixel True

BIN
game/sounds/spank.ogg (Stored with Git LFS) Normal file

Binary file not shown.