class StoryScene extends Phaser.Scene { constructor() { super({ key: 'StoryScene' }); } create() { const width = this.cameras.main.width; const height = this.cameras.main.height; // Warm background (Stardew Valley style) const bg = this.add.rectangle(0, 0, width, height, 0x2d1b00); bg.setOrigin(0); // Add subtle texture overlay const overlay = this.add.rectangle(0, 0, width, height, 0x000000, 0.3); overlay.setOrigin(0); // MAIN TITLE (horizontal, top center) const titleBg = this.add.rectangle(width / 2, 80, 480, 70, 0x4a3520, 0.9); titleBg.setStrokeStyle(3, 0xd4a574); const title = this.add.text(width / 2, 80, 'MRTVA DOLINA', { fontSize: '42px', fontFamily: 'Georgia, serif', color: '#f4e4c1', fontStyle: 'bold', stroke: '#2d1b00', strokeThickness: 4 }); title.setOrigin(0.5); // Subtle glow this.tweens.add({ targets: title, alpha: 0.9, yoyo: true, repeat: -1, duration: 2000, ease: 'Sine.easeInOut' }); // Subtitle const subtitle = this.add.text(width / 2, 120, '~ 2084 - Survival Farm ~', { fontSize: '14px', fontFamily: 'Georgia, serif', color: '#d4a574', fontStyle: 'italic' }); subtitle.setOrigin(0.5); // Main Menu Buttons (center) this.createMainMenu(width, height); // Accessibility icon (top-right) this.createAccessibilityIcon(width, height); // Language selector with rotating globe (bottom-right) this.createLanguageSelector(width, height); // Version info const version = this.add.text(10, height - 30, 'v0.9.0 ALPHA', { fontSize: '14px', color: '#6b4423', fontFamily: 'Georgia, serif' }); } createMainMenu(width, height) { const buttons = [ { label: 'โ–ถ NEW GAME', color: '#8fbc8f', action: () => this.startNewGame() }, { label: '๐Ÿ“ LOAD GAME', color: '#87ceeb', action: () => this.loadGame() }, { label: 'โš™๏ธ SETTINGS', color: '#daa520', action: () => this.showSettings() }, { label: 'โŒ EXIT', color: '#cd5c5c', action: () => this.exitGame() } ]; const startY = 170; const spacing = 58; buttons.forEach((btn, index) => { const y = startY + (index * spacing); // Wooden button background (Stardew style) const bg = this.add.rectangle(width / 2, y, 280, 48, 0x6b4423, 1); bg.setStrokeStyle(2, 0xd4a574); // Inner shadow effect const innerShadow = this.add.rectangle(width / 2, y + 2, 270, 38, 0x4a3520, 0.5); // Button text const text = this.add.text(width / 2, y, btn.label, { fontSize: '20px', fontFamily: 'Georgia, serif', color: btn.color, fontStyle: 'bold', stroke: '#2d1b00', strokeThickness: 3 }); text.setOrigin(0.5); // Make interactive bg.setInteractive({ useHandCursor: true }); bg.on('pointerover', () => { bg.setFillStyle(0x8b5a3c); text.setScale(1.05); bg.setStrokeStyle(4, 0xf4e4c1); }); bg.on('pointerout', () => { bg.setFillStyle(0x6b4423); text.setScale(1.0); bg.setStrokeStyle(3, 0xd4a574); }); bg.on('pointerdown', () => { // Press effect this.tweens.add({ targets: [bg, text, innerShadow], y: y + 3, duration: 100, yoyo: true, onComplete: btn.action }); }); }); } createAccessibilityIcon(width, height) { // Accessibility icon (top-right) - Stardew style const iconBg = this.add.circle(width - 50, 40, 26, 0x6b4423); iconBg.setStrokeStyle(2, 0xd4a574); const icon = this.add.text(width - 50, 40, 'โ™ฟ', { fontSize: '32px', color: '#8fbc8f' }); icon.setOrigin(0.5); icon.setInteractive({ useHandCursor: true }); // Gentle pulse animation this.tweens.add({ targets: [icon, iconBg], scale: 1.08, duration: 1500, yoyo: true, repeat: -1, ease: 'Sine.easeInOut' }); icon.on('pointerover', () => { icon.setScale(1.2); iconBg.setScale(1.2); iconBg.setFillStyle(0x8b5a3c); }); icon.on('pointerout', () => { icon.setScale(1.0); iconBg.setScale(1.0); iconBg.setFillStyle(0x6b4423); }); icon.on('pointerdown', () => { this.showAccessibility(); }); } createLanguageSelector(width, height) { // Initialize localization if (!window.i18n) { window.i18n = new LocalizationSystem(); } // Wooden circle background for globe (Stardew style) const globeBg = this.add.circle(width - 60, height - 60, 30, 0x6b4423); globeBg.setStrokeStyle(2, 0xd4a574); // Rotating globe button const globeBtn = this.add.text(width - 60, height - 60, '๐ŸŒ', { fontSize: '42px' }); globeBtn.setOrigin(0.5); globeBtn.setInteractive({ useHandCursor: true }); // Continuous rotation animation this.tweens.add({ targets: globeBtn, angle: 360, duration: 8000, repeat: -1, ease: 'Linear' }); let langMenuOpen = false; let langMenu = null; globeBtn.on('pointerover', () => { globeBtn.setScale(1.15); globeBg.setScale(1.15); globeBg.setFillStyle(0x8b5a3c); }); globeBtn.on('pointerout', () => { if (!langMenuOpen) { globeBtn.setScale(1.0); globeBg.setScale(1.0); globeBg.setFillStyle(0x6b4423); } }); globeBtn.on('pointerdown', () => { if (langMenuOpen) { // Close menu if (langMenu) langMenu.destroy(); langMenu = null; langMenuOpen = false; globeBtn.setScale(1.0); } else { // Open menu langMenuOpen = true; langMenu = this.createLanguageMenu(width, height, () => { langMenuOpen = false; globeBtn.setScale(1.0); if (langMenu) langMenu.destroy(); langMenu = null; }); } }); } createLanguageMenu(width, height, onClose) { const container = this.add.container(0, 0); const languages = [ { code: 'slo', flag: '๐Ÿ‡ธ๐Ÿ‡ฎ', name: 'Slovenลกฤina' }, { code: 'en', flag: '๐Ÿ‡ฌ๐Ÿ‡ง', name: 'English' }, { code: 'de', flag: '๐Ÿ‡ฉ๐Ÿ‡ช', name: 'Deutsch' }, { code: 'it', flag: '๐Ÿ‡ฎ๐Ÿ‡น', name: 'Italiano' }, { code: 'cn', flag: '๐Ÿ‡จ๐Ÿ‡ณ', name: 'ไธญๆ–‡' } ]; const menuX = width - 200; const menuY = height - 350; const menuW = 180; const menuH = 290; // Wooden panel background (Stardew style) const panel = this.add.rectangle(menuX, menuY, menuW, menuH, 0x6b4423, 0.98); panel.setStrokeStyle(4, 0xd4a574); container.add(panel); // Title const title = this.add.text(menuX, menuY - 120, 'LANGUAGE', { fontSize: '18px', fontFamily: 'Georgia, serif', color: '#f4e4c1', fontStyle: 'bold' }); title.setOrigin(0.5); container.add(title); // Language buttons languages.forEach((lang, index) => { const btnY = menuY - 90 + (index * 56); const isActive = window.i18n.getCurrentLanguage() === lang.code; const btn = this.add.text(menuX, btnY, `${lang.flag} ${lang.name}`, { fontSize: '16px', fontFamily: 'Georgia, serif', color: isActive ? '#8fbc8f' : '#f4e4c1', backgroundColor: isActive ? '#4a3520' : '#6b4423', padding: { x: 12, y: 6 } }); btn.setOrigin(0.5); btn.setInteractive({ useHandCursor: true }); btn.on('pointerover', () => { btn.setScale(1.05); if (!isActive) btn.setBackgroundColor('#8b5a3c'); }); btn.on('pointerout', () => { btn.setScale(1.0); if (!isActive) btn.setBackgroundColor('#6b4423'); }); btn.on('pointerdown', () => { window.i18n.setLanguage(lang.code); onClose(); }); container.add(btn); }); return container; } startNewGame() { console.log('๐ŸŽฎ Starting New Game...'); console.log('๐ŸŽฌ Launching Prologue...'); this.scene.start('PrologueScene'); // Start with story! } loadGame() { console.log('๐Ÿ“ Loading Game...'); // TODO: Implement save/load system alert('Load Game - Coming Soon!'); } showSettings() { console.log('โš™๏ธ Opening Settings...'); // TODO: Settings menu alert('Settings - Use โš™๏ธ button in-game!'); } showAccessibility() { console.log('โ™ฟ Opening Accessibility Menu...'); // Create accessibility quick menu const options = [ 'โ™ฟ ACCESSIBILITY OPTIONS', '', '1. High Contrast Mode', '2. Large Text Mode', '3. Color Blind Mode', '4. Screen Reader Support', '5. Reduce Flashing (Epilepsy)', '6. One-Handed Controls', '7. Audio Cues', '', 'Full accessibility settings available in-game (ESC โ†’ Settings)', '', 'Tip: Press 1-7 to toggle these features' ]; alert(options.join('\n')); // TODO: Implement full accessibility menu // For now, just show information } exitGame() { console.log('โŒ Exiting...'); if (window.close) { window.close(); } else { alert('Close the window to exit.'); } } }