feat(sasch40): v4.0 full-screen mobile conversion, Hinter den Bergen room with Liars Dice, beat-only concert audio, and updated art

This commit is contained in:
Moritz Graf
2026-09-24 21:11:12 +02:00
parent 8a0b65c3fa
commit fbc4158016
17 changed files with 1272 additions and 629 deletions
@@ -308,6 +308,92 @@ async function runPlaytest() {
await new Promise(r => setTimeout(r, 400));
}
// Test Münchanien Signpost Hint Dialog
console.log('🪧 Testing Münchanien Signpost Hint...');
const signBtn = await page.$('.hotspot-sign-munchanien');
if (signBtn) {
await signBtn.click();
await new Promise(r => setTimeout(r, 700));
console.log('📸 11b: Capturing Münchanien Signpost Hint Modal...');
await page.screenshot({ path: path.join(SCREENSHOTS_DIR, '11b_tavern_munchanien_hint.png') });
const hintCloseBtn = await page.$('.intro-modal-box .action-btn');
if (hintCloseBtn) await hintCloseBtn.click();
await new Promise(r => setTimeout(r, 400));
}
// Test Hinter den Bergen (Taiwan Valley & Papa Markus)
console.log('🏮 Navigating to Hinter den Bergen...');
const hdbDoor = await page.$('.hotspot-door-hinter-den-bergen');
if (hdbDoor) {
await hdbDoor.click();
} else {
const hdbTab = await page.$('.room-tab:nth-child(5)');
if (hdbTab) await hdbTab.click();
}
await new Promise(r => setTimeout(r, 1000));
console.log('📸 11c: Capturing Hinter den Bergen Scene (Taiwan Alpine Skyline & Papa Markus)...');
await page.screenshot({ path: path.join(SCREENSHOTS_DIR, '11c_tavern_hinter_den_bergen.png') });
// Click Markus for Liar's Dice
const markusBtn = await page.$('.hotspot-markus');
if (markusBtn) {
await markusBtn.click();
await new Promise(r => setTimeout(r, 700));
console.log('📸 11d: Capturing Papa Markus Dialog...');
await page.screenshot({ path: path.join(SCREENSHOTS_DIR, '11d_tavern_markus_dialog.png') });
// Click "🎲 Auf geht's Papa, Liar's Dice spielen!" -> opens intro modal
const startDiceIntroBtn = await page.$('.dialog-actions .action-btn');
if (startDiceIntroBtn) {
await startDiceIntroBtn.click();
await new Promise(r => setTimeout(r, 800));
console.log('📸 11e: Capturing Liar\'s Dice INTRO Modal...');
await page.screenshot({ path: path.join(SCREENSHOTS_DIR, '11e_tavern_liars_dice_intro.png') });
// Start Liar's Dice Match
const startMatchBtn = await page.$('.start-duel-action-btn');
if (startMatchBtn) {
await startMatchBtn.click();
await new Promise(r => setTimeout(r, 1200));
console.log('📸 11f: Capturing Liar\'s Dice Initial Round View...');
await page.screenshot({ path: path.join(SCREENSHOTS_DIR, '11f_tavern_liars_dice_gameplay.png') });
// Submit player bid
const bidBtn = await page.$('.bid-action-btn');
if (bidBtn) {
await bidBtn.click();
await new Promise(r => setTimeout(r, 1500)); // wait for Markus response
console.log('📸 11g: Capturing Liar\'s Dice Markus Counter-Bid...');
await page.screenshot({ path: path.join(SCREENSHOTS_DIR, '11g_tavern_liars_dice_markus_turn.png') });
}
// Call bluff
const bluffBtn = await page.$('.call-bluff-btn');
if (bluffBtn) {
await bluffBtn.click();
await new Promise(r => setTimeout(r, 1200)); // wait for shot animation
console.log('📸 11h: Capturing Liar\'s Dice Bluff Resolution & Gaoliang Shot...');
await page.screenshot({ path: path.join(SCREENSHOTS_DIR, '11h_tavern_liars_dice_bluff_call.png') });
}
// Close modal
const closeDiceBtn = await page.$('.liars-dice-box .duel-close-btn');
if (closeDiceBtn) {
await closeDiceBtn.click();
await new Promise(r => setTimeout(r, 400));
}
}
}
}
// Return to Hinterland
const backToHinterland = await page.$('.hotspot-door-back-hinterland');
if (backToHinterland) {
await backToHinterland.click();
await new Promise(r => setTimeout(r, 600));
}
// Test Gstanzl Duel Intro & Gameplay
console.log('⚔️ Testing Gstanzl-Fechten Intro & Minigame...');
const duelBtn = await page.$('.duel-trigger');