Compare commits

..

No commits in common. "8b6627f588fc4a3049c77f5bf9bb0d18f2ec9d6e" and "78230893a8de70ea443e4e6730c0516fb651d4fb" have entirely different histories.

25 changed files with 164 additions and 129 deletions

BIN
game/characters/genie/outfits/robes_beard.webp (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,3 +1,4 @@
init 5 python: init 5 python:
def her_cg_doll(st, at): def her_cg_doll(st, at):
return hermione.image, None return hermione.image, None
@ -24,21 +25,35 @@ image CG cho_doll = DynamicDisplayable(cho_cg_doll)
image CG ast_doll = DynamicDisplayable(ast_cg_doll) image CG ast_doll = DynamicDisplayable(ast_cg_doll)
image CG sus_doll = DynamicDisplayable(sus_cg_doll) image CG sus_doll = DynamicDisplayable(sus_cg_doll)
transform CG_masker(child): image CG luna = Fixed(
contains: "images/CG/common/bg.webp",
"images/CG/common/bg.webp" AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG lun_doll", zoom=1.2)), "images/CG/common/mask.webp"),
contains: )
AlphaMask(
Fixed(Transform(child, zoom=1.2, pos=(880, -180)), xfit=True, yfit=True),
"images/CG/common/mask.webp",
)
image CG luna = At("CG lun_doll", CG_masker) image CG hermione = Fixed(
image CG hermione = At("CG her_doll", CG_masker) "images/CG/common/bg.webp",
image CG tonks = At("CG ton_doll", CG_masker) AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG her_doll", zoom=1.2)), "images/CG/common/mask.webp"),
image CG cho = At("CG cho_doll", CG_masker) )
image CG astoria = At("CG ast_doll", CG_masker)
image CG susan = At("CG sus_doll", CG_masker) image CG tonks = Fixed(
"images/CG/common/bg.webp",
AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG ton_doll", zoom=1.2)), "images/CG/common/mask.webp"),
)
image CG cho = Fixed(
"images/CG/common/bg.webp",
AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG cho_doll", zoom=1.2)), "images/CG/common/mask.webp"),
)
image CG astoria = Fixed(
"images/CG/common/bg.webp",
AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG ast_doll", zoom=1.2)), "images/CG/common/mask.webp"),
)
image CG susan = Fixed(
"images/CG/common/bg.webp",
AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG sus_doll", zoom=1.2)), "images/CG/common/mask.webp"),
)
# Snape CG # Snape CG
screen snape_groping(): screen snape_groping():

View File

@ -10,9 +10,9 @@ init python:
layeredimage genie_stats: layeredimage genie_stats:
anchor (0.0, 1.0) anchor (0.0, 1.0)
always "genie_bbase" always "characters/genie/base.webp"
always "genie_outfit_robes" always "characters/genie/outfits/robes.webp"
always "genie_robes" always "characters/genie/outfits/robes_beard.webp"
# TODO: Add outfit support; Low priority # TODO: Add outfit support; Low priority
@ -20,28 +20,31 @@ layeredimage genie:
anchor (0.0, 1.0) anchor (0.0, 1.0)
group outfit: group outfit:
attribute nude attribute robes default null
attribute nude "characters/genie/hair.webp"
attribute bbase default always "characters/genie/base.webp"
group face: group face:
attribute base default null attribute base default null
attribute grin attribute grin "characters/genie/grin.webp"
attribute angry attribute angry "characters/genie/angry.webp"
attribute smile attribute smile "characters/genie/smile.webp"
attribute open attribute open "characters/genie/open.webp"
group outfit: group outfit:
attribute robes default attribute robes default "characters/genie/outfits/robes.webp"
attribute santa attribute nude null
attribute santa "characters/genie/outfits/santa.webp"
attribute goatee default if_any ("robes", "nude") group face multiple:
group _ multiple variant "santa_beard" if_any "santa": attribute robes default "characters/genie/outfits/robes_beard.webp" if_all ["robes"]
attribute base attribute nude "characters/genie/beard.webp" if_all ["nude"]
attribute grin attribute base "characters/genie/outfits/santa_beard_base.webp" if_all ["santa", "base"]
attribute angry attribute grin "characters/genie/outfits/santa_beard_grin.webp" if_all ["santa", "grin"]
attribute smile attribute angry "characters/genie/outfits/santa_beard_angry.webp" if_all ["santa", "angry"]
attribute open attribute smile "characters/genie/outfits/santa_beard_smile.webp" if_all ["santa", "smile"]
attribute open "characters/genie/outfits/santa_beard_open.webp" if_all ["santa", "open"]
at Transform(function=genie_transform) at Transform(function=genie_transform)

View File

@ -536,7 +536,6 @@ label hg_sex_1:
show her_sex_personal lean_back as cg: show her_sex_personal lean_back as cg:
transform_anchor True transform_anchor True
subpixel True
anchor (0.0, 0.0) anchor (0.0, 0.0)
offset (0, 0) offset (0, 0)
zoom 1.0 zoom 1.0
@ -820,8 +819,8 @@ label hg_sex_1:
gen "You need to be punished for being such a slut!" gen "You need to be punished for being such a slut!"
show her_sex_personal bent_over grab as cg: show her_sex_personal bent_over grab as cg:
offset (-65, -240) offset (-65, -240)
zoom 0.45 zoom 0.45
rotate -4 rotate -4
easein 1.0 offset (0, -480) rotate 0 easein 1.0 offset (0, -480) rotate 0
with vpunch with vpunch
@ -830,7 +829,7 @@ label hg_sex_1:
#Could add some sound effect here #Could add some sound effect here
show her_sex_personal mouth_open eyebrows_base eyes_wide_r cheeks_blush as cg: show her_sex_personal mouth_open eyebrows_base eyes_wide_r cheeks_blush as cg:
offset (0, -480) offset (0, -480)
rotate 0 rotate 0
ease_quad 3.0 offset (-60, -620) zoom 0.55 ease_quad 3.0 offset (-60, -620) zoom 0.55
nar "You push Hermione down onto the desk and start fucking her fiercely!" nar "You push Hermione down onto the desk and start fucking her fiercely!"
@ -1954,7 +1953,7 @@ label hg_sex_3:
rotate 1 rotate 1
xoffset -70 xoffset -70
pause 1.0 pause 1.0
offset (-60, -620) offset (-60, -620)
zoom 0.55 zoom 0.55
ease_quad 1.0 offset (-60, -635) ease_quad 1.0 offset (-60, -635)
with hpunch with hpunch

View File

@ -71,21 +71,24 @@ label luna_intro_E1:
$ luna.set_face(mouth="soft", eyes="closed", eyebrows="low", pupils="mid") $ luna.set_face(mouth="soft", eyes="closed", eyebrows="low", pupils="mid")
show CG luna as cg zorder 17: show CG luna as cg zorder 17:
xycenter (-520, -300) align (0.5, 0.5)
pos (-520, -300)
with fade with fade
gen "Who is--" gen "Who is--"
show CG luna as cg zorder 17: show CG luna as cg zorder 17:
subpixel True align (0.5, 0.5)
pos (-520, -300)
easein_quad 5.0 pos (-520, 150) easein_quad 5.0 pos (-520, 150)
gen "... A girl?" gen "... A girl?"
lun "*Mmh*" lun "*Mmh*"
show CG luna as cg zorder 17: show CG luna as cg zorder 17:
subpixel True
zoom 1.0 zoom 1.0
easein_quad 3.0 align (.0, .0) pos (0, 0) zoom 0.5 # pos (0, 0) not necessary in next renpy version align (0.5, 0.5)
pos (-520, 150)
easein_quad 3.0 align (0.0, 0.0) pos (0, 0) zoom 0.5
gen "What are you doing in my office?" gen "What are you doing in my office?"
gen "Did Snape send you here? Surely--" gen "Did Snape send you here? Surely--"

View File

@ -42,10 +42,10 @@ init python:
def use(self): def use(self):
if not self.usable: if not self.usable:
raise Exception("Item {!r} is not usable as it does not have any function or a label.".format(self.name)) raise Exception("Item '{}' is not usable as it does not have any function or a label.".format(self.name))
if self.owned == 0: if self.owned == 0:
raise Exception("Item {!r} owned count is equal to zero.".format(self.name)) raise Exception("Item '{}' owned count is equal to zero.".format(self.name))
if not self.type == "quest": if not self.type == "quest":
# Quest items require manual triggers, it's more convenient. # Quest items require manual triggers, it's more convenient.
@ -62,10 +62,10 @@ init python:
def give(self, who): def give(self, who):
if not self.givable: if not self.givable:
raise Exception("Item {!r} is not marked as givable.".format(self.name)) raise Exception("Item '{}' is not marked as givable.".format(self.name))
if self.owned == 0: if self.owned == 0:
raise Exception("Item {!r} owned count is equal to zero.".format(self.name)) raise Exception("Item '{}' owned count is equal to zero.".format(self.name))
if not self.type == "quest": if not self.type == "quest":
# Quest items require manual triggers, it's more convenient. # Quest items require manual triggers, it's more convenient.
@ -119,7 +119,7 @@ init python:
def use(self): def use(self):
if self.owned == 0: if self.owned == 0:
raise Exception("Decoration {!r} owned count is equal to zero.".format(self.name)) raise Exception("Decoration '{}' owned count is equal to zero.".format(self.name))
achievements.unlock("decorator") achievements.unlock("decorator")
@ -155,7 +155,7 @@ init python:
self.usable = bool( renpy.has_label("{}_use".format(self.label)) ) self.usable = bool( renpy.has_label("{}_use".format(self.label)) )
if self.recipe is None: if self.recipe is None:
raise Exception("Potion {!r} recipe is empty!".format(self.name)) raise Exception("Potion '{}' recipe is empty!".format(self.name))
def has_ingredients(self): def has_ingredients(self):
return all(x.owned > 0 for x in self.recipe) return all(x.owned > 0 for x in self.recipe)
@ -163,7 +163,7 @@ init python:
def set_active(self, who): def set_active(self, who):
"""Marks the event as 'in progress' and will trigger a return event in the morning/evening.""" """Marks the event as 'in progress' and will trigger a return event in the morning/evening."""
if not who in list(self.in_progress.keys()): if not who in list(self.in_progress.keys()):
raise Exception("Potion {!r} is not marked as usable on {!r}.".format(self.name, who)) raise Exception("Potion '{}' is not marked as usable on '{}'.".format(self.name, who))
self.in_progress[who] = True self.in_progress[who] = True
@ -195,13 +195,13 @@ init python:
check_label = "{}_potion_check".format(who[:3]) check_label = "{}_potion_check".format(who[:3])
if not renpy.has_label(give_label): if not renpy.has_label(give_label):
raise Exception("Potion {!r} give label doesn't exist.".format(self.name)) raise Exception("Potion '{}' give label doesn't exist.".format(self.name))
if not renpy.has_label(check_label): if not renpy.has_label(check_label):
raise Exception("Potion {!r} check label doesn't exist for {!r}.".format(self.name, who)) raise Exception("Potion '{}' check label doesn't exist for '{}'.".format(self.name, who))
if self.owned == 0: if self.owned == 0:
raise Exception("Potion {!r} owned count is equal to zero.".format(self.name)) raise Exception("Potion '{}' owned count is equal to zero.".format(self.name))
if not self.check_progression(who): if not self.check_progression(who):
self.jump(check_label) self.jump(check_label)
@ -215,10 +215,10 @@ init python:
label = "{}_use".format(self.label) label = "{}_use".format(self.label)
if not renpy.has_label(label): if not renpy.has_label(label):
raise Exception("Potion {!r} has no use label.".format(self.name)) raise Exception("Potion '{}' has no use label.".format(self.name))
if self.owned == 0: if self.owned == 0:
raise Exception("Potion {!r} owned count is equal to zero.".format(self.name)) raise Exception("Potion '{}' owned count is equal to zero.".format(self.name))
self.owned -= 1 self.owned -= 1
self.jump(label) self.jump(label)
@ -227,12 +227,12 @@ init python:
"""Play the return event for <girl>""" """Play the return event for <girl>"""
if not self.in_progress[who]: if not self.in_progress[who]:
raise Exception("Potion {!r} is not marked as in progress.".format(self.name)) raise Exception("Potion '{}' is not marked as in progress.".format(self.name))
label = "{}_{}_return".format(who[:3], self.label) label = "{}_{}_return".format(who[:3], self.label)
if not renpy.has_label(label): if not renpy.has_label(label):
raise Exception("Potion {!r} has no return label.".format(self.name)) raise Exception("Potion '{}' has no return label.".format(self.name))
self.in_progress[who] = False self.in_progress[who] = False
self.jump(label) self.jump(label)

Some files were not shown because too many files have changed in this diff Show More