feat: player runtime for goodluke and SaintlyCorruption
CI / frontend (push) Failing after 16s
CI / backend (push) Failing after 39s

Text fields (`input`) with InputValue classes games can extend, continue/break in screen loops, Confirm,
CaptureFocus/ClearFocus/InvertSelected, generator functions and iter/next, starred tuple items,
renpy.file and json over data files loaded before the game starts, renpy.Container and
register_sl_displayable, DiamondBox layout, ConditionSwitch/DynamicImage/Animation, renpy.show(what=...),
callable transforms (`store.move_in(0.3)`), call_in_new_context as a call, im.matrix/im.Image/
MatrixColor, colorsys, fnmatch, FontGroup, persistent._clear and small renpy helpers.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Sonnet 5.5 committed 2026-10-26 17:28:14 +03:00
1 parent e66160cffa
commit e48521bdfb
12 files changed
+440 -26

No files matched your search

+6
View File
@@ -37,6 +37,12 @@ export async function launch(root: HTMLElement, versionId: number, onExit: () =>
Promise.all(game.scripts.map((s) => getJSON<ScriptModule>(blob(manifest, s)))),
loadTranslator(game, manifest, lang),
]);
// files the game reads while it starts (`renpy.file(...)`) have to be here before its first line runs
if (game.dataFiles?.length) {
const texts = await Promise.all(game.dataFiles.map((path) =>
fetch(blob(manifest, `data/${path}`), { credentials: "same-origin" }).then((r) => (r.ok ? r.text() : ""))));
game.dataText = Object.fromEntries(game.dataFiles.map((path, i) => [path.toLowerCase(), texts[i]]));
}
const cloud = await cloudActive();
if (game.runtime) {
const load = RUNTIMES[game.runtime];