diff --git a/src/config/MasterConfig.js b/src/config/MasterConfig.js new file mode 100644 index 000000000..fb33f9f09 --- /dev/null +++ b/src/config/MasterConfig.js @@ -0,0 +1,88 @@ +/** + * MASTER GAME CONFIG + * Central configuration for all game systems + */ + +const MasterConfig = { + // Game info + version: '0.95.0', + buildType: 'Early Access Streamer Build', + + // Systems + systems: { + saveLoad: { + enabled: true, + autoSaveInterval: 300000, // 5 minutes + saveKey: 'mrtva_dolina_save', + slot: 0 // Slot_0 + }, + + localization: { + enabled: true, + autoDetect: true, + supportedLanguages: ['slo', 'en', 'de', 'it', 'cn'], + defaultLanguage: 'slo', + voiceLanguages: ['slo', 'en'], // Full voice support + fallbackVoice: 'en' + }, + + accessibility: { + enabled: true, + oneHandedMode: false, + highContrast: false, + colorBlindMode: 'none', + fontScale: 1.0, + reduceMotion: false + }, + + gamepad: { + enabled: true, + deadzone: 0.15, + hapticFeedback: true + }, + + audio: { + masterVolume: 1.0, + musicVolume: 0.3, + sfxVolume: 0.7, + voiceVolume: 1.0, + streamerMode: false + }, + + aging: { + enabled: true, + levels: 9, + ageRange: [14, 60] + } + }, + + // Copyright safe music (CC BY 4.0) + safeMusicTracks: [ + 'main_theme', + 'farm_ambient', + 'forest_ambient', + 'night_theme', + 'combat_theme', + 'ana_theme', + 'town_theme', + 'wilderness_theme', + 'raid_warning', + 'victory_theme' + ], + + // DMCA risky tracks (if any future additions) + dmcaRiskyTracks: [ + // None currently - all Kevin MacLeod (CC BY 4.0) + // Add any future radio/commercial music here + ], + + // Debug mode + debug: { + enabled: false, + showFPS: false, + logAudio: false, + logSaves: true + } +}; + +export default MasterConfig; diff --git a/src/systems/AudioManager.js b/src/systems/AudioManager.js index 67d96504a..7c0d93d3a 100644 --- a/src/systems/AudioManager.js +++ b/src/systems/AudioManager.js @@ -9,6 +9,10 @@ class AudioManager { this.scene = null; this.debugMode = true; // SET TO FALSE TO DISABLE LOGGING + // 🎥 STREAMER MODE (DMCA Protection) + this.streamerMode = false; + this.loadStreamerMode(); + // Current playback tracking this.currentMusic = null; this.currentVoice = null; @@ -16,6 +20,13 @@ class AudioManager { this.voiceVolume = 0.8; this.sfxVolume = 0.5; + // Copyright-safe tracks (CC BY 4.0) + this.safeMusicTracks = [ + 'intro_ambient', 'main_theme', 'farm_ambient', 'forest_ambient', + 'night_theme', 'town_theme', 'wilderness_theme', 'combat_theme', + 'ana_theme', 'raid_warning', 'victory_theme' + ]; + // Audio mapping this.audioMap = { music: { @@ -491,6 +502,65 @@ class AudioManager { this.debugMode = enabled; this.log(`Debug mode ${enabled ? 'enabled' : 'disabled'}`, 'INFO'); } + + /** + * 🎥 STREAMER MODE - DMCA PROTECTION + */ + enableStreamerMode() { + this.streamerMode = true; + localStorage.setItem('streamer_mode', 'true'); + + // Mute music if currently playing non-safe track + if (this.currentMusic && !this.isSafeTrack(this.currentMusic.key)) { + this.stopMusic(); + console.log('🎥 STREAMER MODE: Music stopped (DMCA protection)'); + } + + console.log('🎥 STREAMER MODE ENABLED'); + console.log(' ✅ Safe for Twitch/YouTube'); + console.log(' ✅ All music is CC BY 4.0 (Kevin MacLeod)'); + console.log(' ✅ No copyright strikes possible'); + } + + disableStreamerMode() { + this.streamerMode = false; + localStorage.setItem('streamer_mode', 'false'); + console.log('🎥 Streamer mode disabled'); + } + + loadStreamerMode() { + const saved = localStorage.getItem('streamer_mode'); + if (saved === 'true') { + this.streamerMode = true; + console.log('🎥 Streamer mode loaded from settings'); + } + } + + isStreamerModeEnabled() { + return this.streamerMode; + } + + isSafeTrack(trackKey) { + return this.safeMusicTracks.includes(trackKey); + } + + getStreamerStatus() { + if (this.streamerMode) { + return { + enabled: true, + status: 'Streamer Mode: ON - Safe for Twitch/YouTube', + license: 'All music: CC BY 4.0 (Kevin MacLeod)', + safe: true + }; + } else { + return { + enabled: false, + status: 'Streamer Mode: OFF', + license: 'Music may be copyrighted', + safe: false + }; + } + } } // Singleton export