From e8252548501d6794f0d1825f468a69c131d77c62 Mon Sep 17 00:00:00 2001 From: sganggs Date: Tue, 13 Oct 2026 03:30:48 +0800 Subject: [PATCH] =?UTF-8?q?0.2.6-dev:=20the=20render=20demo's=20stress=20s?= =?UTF-8?q?cene=20takes=20&ops=3D,=E2=80=A6=20=E2=80=94=20up=20to?= =?UTF-8?q?=206=20given=20chess=20in=20the=20crowd's=20front=20row=20(ids?= =?UTF-8?q?=206,=208,=2010,=20=E2=80=A6),=20a=20given=20model=20inside=20a?= =?UTF-8?q?n=20impostor-rendered=20crowd=20(#542);=20golden:=20unchanged?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/dev/render-demo.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/public/dev/render-demo.js b/public/dev/render-demo.js index 693d950a..4e625df8 100644 --- a/public/dev/render-demo.js +++ b/public/dev/render-demo.js @@ -9,6 +9,7 @@ // 'lock' it plays 蕾缪安's S3 as the sim does (a lock every 0.5 s, then one shell every 0.3 s with its bombard) // Query: ?scene=prep||stress|numbers &stage= &t= &speed= &paused=1 &panel=0 &quality=high|medium|low // &pen= (prep: that recording's round preview — m.private.nextEnemies — in the enemy preview pen) +// &ops=,… (stress: up to 6 given chess in the crowd's front row, ids 6, 8, 10, …) // &fa=L|R (prep on that half of the Final Assault boss field, view.setCamera('bossPrep', { side })) // &board=2d|3d (the official 3D board scene, DESIGN §15; default 3D when the local art + WebGL2 are available) // &cam=prep|normal|unite|boss|pen|bossPrep [&side=L|R &half=1 &shop=0] (official configBlackBoard framings) @@ -366,12 +367,16 @@ function stressScene(view, stageId) { const rect = { r0: 9, r1: 12, c0: 0, c1: 20 }; const chess = data.list('chess').filter((c) => c.visible && !c.isGolden); const enemies = data.list('enemies').filter((e) => assets.spineEntry(e.key) && e.rank !== 'BOSS'); + // &ops=,… : these chess take every other place of the front row from col 7 (ids 6, 8, 10, …) — given models + // inside a crowded, impostor-rendered field, clear of the screen edge (GitHub #542: impostor-bounds.browser.test.js) + const ops = (q.get('ops') || '').split(',').map((s) => data.lookup('chess', s.trim())).filter(Boolean); + const opAt = (i) => (i >= 5 && i % 2 === 1 && i < 17 ? ops[(i - 5) / 2] : null); let seed = 7; const rnd = () => ((seed = (seed * 1103515245 + 12345) & 0x7fffffff) / 0x7fffffff); const units = []; let id = 1; for (let i = 0; i < 40; i++) { - const c = chess[(i * 7) % chess.length]; + const c = opAt(i) || chess[(i * 7) % chess.length]; units.push({ id: id++, kind: 'op', side: 'ally', defId: c.chessId, name: c.name, tier: c.tier, golden: i % 6 === 0, spine: c.assets?.spine, avatar: c.assets?.avatar, x: 2 + (i % 17), y: 9 + ((i / 17) | 0) % 4, facing: 1, maxHp: 3000 }); } for (let i = 0; i < 80; i++) {