-
Notifications
You must be signed in to change notification settings - Fork 864
Description
Per Discord - 2026-03-08.
Commit 0e71cc4 in 8.5.0 introduced the change below.
renpy/renpy/display/transform.py
Lines 1218 to 1220 in 8ca8dc6
| if isinstance(self, ATLTransform): | |
| assert isinstance(rv, ATLTransform) | |
| rv.block = self.block |
This doesn't seem to be safe when ATL leverages the child keyword as it gets baked into the compiled block. The result is that the correct child (result of _in_current_store) which was passed to the constructor ends up ignored in favour of the one baked into the reused block.
It's unclear if other displayables pulled in via the ATL block copy would suffer similar issues, but on the surface it seems likely. The current preference is to retain the performance gain from the linked change, but how to do so while ensuring safety in this scenario isn't entirely clear yet.
Update
The commit referenced above effectively regresses #6534 which was resolved in the 8.5.0 cycle. The testcase for that issue is nearly identical for this one, the only difference being the use of an ATL transform using the child keyword rather than a vanilla one.
Test case
image test = '[color]'
image r = Solid('f773', xysize=(320, 240))
image y = Solid('ff73', xysize=(320, 240))
transform wrap(child):
child
label start:
$ color = 'r'
scene black
show test as person
'initial red'
$ color = 'y'
with {'master': dissolve}
'dissolves to yellow'
$ color = 'r'
scene black
show layer master at wrap
show test as person
'initial red'
$ color = 'y'
with {'master': dissolve}
'instantly yellow'
return