feat: build profile for The Lewdest House; panoramas as GPU hints, live2d-only init branches, drag/at syntax
The build (fingerprint of its scripts) skips third-party code written against Ren'Py's render API (colour picker demo, Kinetic Text Tags, cps_preview) and waives its one missing test screen. Converter: xpan/ypan/matrixtransform/matrixanchor are skipped like other GPU hints, `if renpy.has_live2d()` in an init block keeps only its else branch, `crop(...)xpos` and `crop (1, 2, 3, 4)` parse, `drag` is a screen container, `at icon["at"]` becomes a dynamic entry, and the whitelist gains Matrix, Move, absolute and the no-op helpers. The game now passes the strict check and converts fully (3272 files, 288 MB). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
353cd5e49e
commit
6d78b8b847
9 files changed
+94
-10
No files matched your search
@@ -223,3 +223,15 @@ def test_translated_speaker_name_and_capitalised_parameterised_transform():
|
||||
say = data.modules["t.rpy"][0]["body"][0]
|
||||
assert say["op"] == "say" and say["what"] == "Hello there"
|
||||
assert not data.blockers
|
||||
|
||||
|
||||
def test_init_if_has_live2d_keeps_only_the_else_branch_and_crop_call_glued_to_a_property():
|
||||
data = parse('init:\n if renpy.has_live2d() and persistent.on:\n image a = "live.png"\n else:\n'
|
||||
' image b = "still.png"\nlabel start:\n show a1 as p:\n crop(1,2,3,4)xpos 5\n return\n')
|
||||
assert "b" in data.images and "a" not in data.images
|
||||
assert not any("Оператор сцены" in m for m in data.blockers)
|
||||
|
||||
|
||||
def test_static_atl_line_with_a_spaced_crop_tuple():
|
||||
data = parse('image plap:\n "base"\n crop (1697,54, 172, 94)\nimage slurp:\n "base"\n crop (1, 2, 3, 4) xanchor 0.5\n')
|
||||
assert not data.blockers
|
||||
@@ -235,3 +235,14 @@ def test_atl_pause_with_brackets():
|
||||
steps = data.atl["t"]["steps"] if "t" in data.atl else data.transforms["t"]
|
||||
assert not data.blockers
|
||||
assert [(s["op"], s["t"]) for s in steps] == [("move", 1.0), ("pause", 1.5), ("move", 1.0)]
|
||||
|
||||
|
||||
def test_dynamic_at_value_and_draggable_box():
|
||||
data = parse('transform spin:\n rotate 5\nscreen s(icon):\n imagebutton:\n idle "a" at icon["at"]\n'
|
||||
' drag:\n drag_name "box"\n draggable True\n text "x"\n'
|
||||
'label start:\n call screen s({"at": spin})\n')
|
||||
audit_ir(data)
|
||||
require_supported_scripts(data)
|
||||
body = data.screens["s"]["body"]
|
||||
assert body[0]["props"]["at"][0]["dyn"]["k"] == "sub"
|
||||
assert body[1]["w"] == "drag" and "draggable" in body[1]["props"]
|
||||
Reference in new issue
Block a user