feat: player runtime for the Phone library and That New Teacher
CI / frontend (push) Failing after 17s
CI / backend (push) Failing after 34s

Named stores (PyNamespace: dotted access, functions that see their own store first, restored after a
save is loaded), real generators run step by step (next, send, yield as an expression), len/bool through
__len__/__bool__, os/calendar/itertools/pygame_sdl2 helpers, Skip and ToggleLocalVariable actions,
text tags {glitch} and {wave} and plain display of explode/gradient/ruby, SnowBlossom and anim.Blink,
RoundedCorners as a transform, transforms listed in `at`, ATL choice weights that are flags, and
renpy.image_size from the converter's picture sizes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Sonnet 5.5 committed 2026-10-26 22:39:16 +03:00
1 parent 83cc7fdd5c
commit 11f87df712
15 files changed
+457 -24

No files matched your search

+22
View File
@@ -294,3 +294,25 @@ test("a redraw keeps the playing video, and one held down button is not rebuilt
window.dispatchEvent(new window.Event("pointerup"));
await wait(30);
});
test("a redraw queued before pointerdown preserves the Return button until click", async () => {
const { manager } = setup();
const returned = [];
try {
manager.show("shop", ["skipped"], {}, { call: true, onReturn: (value) => returned.push(value) });
const button = buttons(manager.layer).find((element) => element.textContent === "Cancel");
manager.refresh(); // MIST's movie timer (or hover) queues the next frame.
window.dispatchEvent(new window.Event("pointerdown"));
await settle();
assert.equal(button.isConnected, true, "a queued redraw must also respect a held pointer");
window.dispatchEvent(new window.Event("pointerup"));
click(button);
assert.deepEqual(returned, [null]);
await settle();
assert.notEqual(buttons(manager.layer).find((element) => element.textContent === "Cancel"), button,
"the deferred redraw runs after the click");
} finally {
window.dispatchEvent(new window.Event("pointercancel"));
manager.destroy();
}
});