Compare commits

..

10 Commits

Author SHA1 Message Date
8b6627f588 Improve ATL syntax
use the dedicated xycenter property
avoid setting the previous end-interpolation values before starting the new one, to avoid a jump if the player advances too quickly (also shortens the code)
add subpixel True, even though it doesn't seem very effective
prepare improvement in next renpy version
2023-11-15 20:44:48 +01:00
40ddb29185 Simplify generic CG code 2023-11-15 20:44:46 +01:00
aa95f701dc Better animation 2023-11-15 20:44:44 +01:00
641893217e Simplify some code 2023-11-15 20:44:42 +01:00
3a429070fc Reform genie layeredimage 2023-11-15 20:44:39 +01:00
15e3e240fc Repr instead of adding quotes 2023-11-15 20:44:36 +01:00
9c274bee6f Simplify hide/show expression 2023-11-15 20:44:35 +01:00
eeb68cb6c6 Fix test call
it raised an exception in my case, and I'm fairly sure this is how it's supposed to work
also adds a complimentary hidden reset at the end
2023-11-15 20:44:33 +01:00
5460ec2572 Remove now-unused reset_variables relying on implem details
It is used in a txt draft which I didn't change, it can be done if deemed necessary
I think this function should be kept off, as it is both more dangerous and slower than the workarounds
2023-11-15 20:44:30 +01:00
2e17dd2582 Avoid using reset_variables 2023-11-15 20:43:34 +01:00
25 changed files with 129 additions and 164 deletions

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

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

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