Files
infrapuzzle/projects/sasch40/frontend/scripts/capture_sisters.mjs
T
Moritz Graf 07fef4547c feat(sasch40): overhaul Act III tavern schankraum and canonical papa markus scene
- Generate and integrate authentic 16-bit LucasArts taproom scene with Theke, brass taps, bartender, drinking patrons, and bunker trapdoor
- Realign Schankraum hotspots for Verena, Lutz in hot tub, Armend at forge, room transitions, and centered bunker trapdoor
- Update Papa Markus canonical portrait and Taiwan street dining scene to be bald and clean-shaven with glasses and modern attire
- Enforce hotspot zero-occlusion rules for signposts, characters, and mobile room navigation bars
- Document Papa Markus specifications, tavern invariants, and layout guidelines in AGENTS.md
- Add automated sister capture and playthrough recording scripts
2026-09-25 08:36:39 +02:00

83 lines
2.9 KiB
JavaScript

import puppeteer from 'puppeteer-core';
import path from 'path';
const ARTIFACTS_DIR = '/Users/moritz/.gemini/antigravity/brain/4c86ae52-822a-485e-bcc7-fed5de9e5a4b/playtest_screenshots';
async function sleep(ms) {
return new Promise(r => setTimeout(r, ms));
}
async function run() {
const browser = await puppeteer.launch({
executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
headless: 'new',
args: ['--no-sandbox', '--window-size=412,869']
});
const page = await browser.newPage();
await page.setViewport({ width: 412, height: 869, deviceScaleFactor: 2, isMobile: true, hasTouch: true });
await page.goto('http://localhost:4173', { waitUntil: 'networkidle0' });
// Advance to platformer
await page.evaluate(() => {
const store = document.querySelector('#app').__vue_app__.config.globalProperties.$pinia._s.get('game');
store.setAct('platformer');
});
await sleep(800);
// Close intro modal
const startBtn = await page.$('.start-act-btn');
if (startBtn) await startBtn.click();
await sleep(1000);
// Gameplay Level 1 with fixed sky background
await page.screenshot({ path: path.join(ARTIFACTS_DIR, '10_act2_02_doodle_jump_level1.png') });
console.log('📸 Updated 10_act2_02_doodle_jump_level1.png');
// Trigger Saskia Rescue
await page.evaluate(() => {
if (window.__platformer) window.__platformer.setRescuedSister('saskia');
});
await sleep(600);
await page.screenshot({ path: path.join(ARTIFACTS_DIR, '11_act2_03_rescue_saskia.png') });
console.log('📸 Captured 11_act2_03_rescue_saskia.png');
// Click proceed button
const proceedBtn1 = await page.$('.proceed-btn');
if (proceedBtn1) await proceedBtn1.click();
await sleep(1000);
// Level 2 Gameplay
await page.screenshot({ path: path.join(ARTIFACTS_DIR, '12_act2_04_doodle_jump_level2.png') });
console.log('📸 Updated 12_act2_04_doodle_jump_level2.png');
// Trigger Maja Rescue
await page.evaluate(() => {
if (window.__platformer) window.__platformer.setRescuedSister('maja');
});
await sleep(600);
await page.screenshot({ path: path.join(ARTIFACTS_DIR, '13_act2_05_rescue_maja.png') });
console.log('📸 Captured 13_act2_05_rescue_maja.png');
// Click proceed button
const proceedBtn2 = await page.$('.proceed-btn');
if (proceedBtn2) await proceedBtn2.click();
await sleep(1000);
// Level 3 Gameplay
await page.screenshot({ path: path.join(ARTIFACTS_DIR, '14_act2_06_doodle_jump_level3.png') });
console.log('📸 Updated 14_act2_06_doodle_jump_level3.png');
// Trigger Miriam Rescue
await page.evaluate(() => {
if (window.__platformer) window.__platformer.setRescuedSister('miriam');
});
await sleep(600);
await page.screenshot({ path: path.join(ARTIFACTS_DIR, '15_act2_07_rescue_miriam.png') });
console.log('📸 Captured 15_act2_07_rescue_miriam.png');
await browser.close();
}
run();