feat: report ATL problems only for used transforms; animate moving images
CI / frontend (push) Successful in 23s
CI / backend (push) Successful in 1m55s

- Unsupported ATL constructs in a transform now block the import only when the
  transform is used (at clause, another transform, even before its definition).
  Stock screens.rpy transforms for unused screens no longer fail games
- image blocks with one picture plus linear/ease/parallel/repeat keep their
  animation (image-level ATL); the renderer also starts it
- Python: skip @gui.variant/@renpy.variant functions (inactive variants), treat
  @renpy.pure as transparent, read renpy.store.x as x
- Accept renpy.transition, end_replay, block_rollback and music set_pause/set_pan
  as presentation-only no-ops, and implement them in the player (set_pause and
  set_pan were allowed by the converter but missing at runtime)
- Skip the 0x52-URM add-on directory (in-game console / save editor) when
  parsing scripts and media
- Tests for lazy ATL warnings, moving images and variants

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Sonnet 5.5 committed 2026-10-25 12:20:39 +03:00
1 parent ff82d882c0
commit 4418da47eb
9 files changed
+133 -12

No files matched your search

+6
View File
@@ -269,6 +269,8 @@ export class Engine {
},
stop: (...a: any[]) => this.audio.stop(kwOf(a).channel ?? ch, kwOf(a).fadeout ?? 0),
set_volume: () => {},
set_pause: () => {},
set_pan: () => {},
get_playing: () => this.audio.current(ch)?.file ?? null,
is_playing: () => this.audio.current(ch) !== null,
});
@@ -301,6 +303,10 @@ export class Engine {
throw new JumpSignal("jump", "__quit__");
},
version: () => "pgvn",
// presentation-only: nothing to roll back or replay, and the next transition is chosen by `with`
end_replay: () => null,
block_rollback: () => null,
transition: () => null,
};
const renpy = new Proxy(renpyImpl, {
get: (t, k: string) => {