|
1 | 1 | (async function () { |
| 2 | + console.log("[Loader] ========================================"); |
| 3 | + console.log("[Loader] loader.js executing - START"); |
| 4 | + console.log("[Loader] ========================================"); |
2 | 5 | const scripts = [ |
| 6 | + // Netplay modules first (in dependency order) |
| 7 | + "netplay/core/input/frameworks/SimpleController.js", |
| 8 | + "netplay/core/input/frameworks/ComplexController.js", |
| 9 | + "netplay/core/input/InputQueue.js", |
| 10 | + "netplay/core/input/SlotManager.js", |
| 11 | + "netplay/core/input/InputSync.js", |
| 12 | + "netplay/core/session/FrameCounter.js", |
| 13 | + "netplay/core/session/SessionState.js", |
| 14 | + "netplay/core/config/ConfigManager.js", |
| 15 | + "netplay/core/room/GameModeManager.js", |
| 16 | + "netplay/core/room/UsernameManager.js", |
| 17 | + "netplay/core/room/MetadataValidator.js", |
| 18 | + "netplay/core/room/SpectatorManager.js", |
| 19 | + "netplay/core/room/PlayerManager.js", |
| 20 | + "netplay/core/room/RoomManager.js", |
| 21 | + "netplay/core/transport/SocketTransport.js", |
| 22 | + "netplay/core/transport/DataChannelManager.js", |
| 23 | + "netplay/core/transport/SFUTransport.js", |
| 24 | + "netplay/core/NetplayEngine.js", |
| 25 | + "netplay/adapters/emulatorjs/interface.js", |
| 26 | + "netplay/adapters/emulatorjs/EmulatorJSAdapter.js", |
| 27 | + // Top-level files (existing structure) |
3 | 28 | "emulator.js", |
4 | 29 | "nipplejs.js", |
5 | 30 | "shaders.js", |
|
33 | 58 | return scriptPath + "src/" + file; |
34 | 59 | } |
35 | 60 | })(); |
36 | | - script.onload = resolve; |
37 | | - script.onerror = () => { |
| 61 | + // Debug logging for netplay modules |
| 62 | + if (file.includes("netplay")) { |
| 63 | + console.log("[Loader] 📦 About to load netplay script:", file); |
| 64 | + console.log("[Loader] 📦 Full URL will be:", script.src); |
| 65 | + } |
| 66 | + script.onload = () => { |
| 67 | + if (file.includes("netplay")) { |
| 68 | + console.log("[Loader] ✅ Netplay script loaded successfully:", file); |
| 69 | + // Verify critical globals after loading key files |
| 70 | + if (file === "netplay/core/NetplayEngine.js") { |
| 71 | + const exists = typeof window.NetplayEngine !== "undefined"; |
| 72 | + console.log( |
| 73 | + "[Loader] 🔍 NetplayEngine global check:", |
| 74 | + exists ? "✅ EXISTS" : "❌ MISSING" |
| 75 | + ); |
| 76 | + if (!exists) { |
| 77 | + console.error( |
| 78 | + "[Loader] ⚠️ WARNING: NetplayEngine.js loaded but window.NetplayEngine is undefined!" |
| 79 | + ); |
| 80 | + } |
| 81 | + } |
| 82 | + if (file === "netplay/adapters/emulatorjs/EmulatorJSAdapter.js") { |
| 83 | + const exists = typeof window.EmulatorJSAdapter !== "undefined"; |
| 84 | + console.log( |
| 85 | + "[Loader] 🔍 EmulatorJSAdapter global check:", |
| 86 | + exists ? "✅ EXISTS" : "❌ MISSING" |
| 87 | + ); |
| 88 | + if (!exists) { |
| 89 | + console.error( |
| 90 | + "[Loader] ⚠️ WARNING: EmulatorJSAdapter.js loaded but window.EmulatorJSAdapter is undefined!" |
| 91 | + ); |
| 92 | + } |
| 93 | + } |
| 94 | + } |
| 95 | + resolve(); |
| 96 | + }; |
| 97 | + script.onerror = (error) => { |
| 98 | + console.error( |
| 99 | + "[Loader] ❌ Failed to load script:", |
| 100 | + file, |
| 101 | + "from:", |
| 102 | + script.src |
| 103 | + ); |
| 104 | + console.error("[Loader] Error details:", error); |
| 105 | + console.error("[Loader] Script element:", script); |
| 106 | + if (file.includes("netplay")) { |
| 107 | + console.error( |
| 108 | + "[Loader] ⚠️ CRITICAL: Netplay module failed to load! Check Network tab for 404 errors." |
| 109 | + ); |
| 110 | + console.error("[Loader] Expected path:", script.src); |
| 111 | + } |
38 | 112 | filesmissing(file).then((e) => resolve()); |
39 | 113 | }; |
40 | 114 | document.head.appendChild(script); |
|
83 | 157 | } |
84 | 158 | } |
85 | 159 |
|
| 160 | + console.log("[Loader] About to start loading", scripts.length, "scripts"); |
86 | 161 | if ("undefined" != typeof EJS_DEBUG_XX && true === EJS_DEBUG_XX) { |
| 162 | + console.log("[Loader] Using DEBUG mode"); |
87 | 163 | for (let i = 0; i < scripts.length; i++) { |
| 164 | + console.log( |
| 165 | + "[Loader] Loading script", |
| 166 | + i + 1, |
| 167 | + "of", |
| 168 | + scripts.length, |
| 169 | + ":", |
| 170 | + scripts[i] |
| 171 | + ); |
88 | 172 | await loadScript(scripts[i]); |
89 | 173 | } |
90 | 174 | await loadStyle("emulator.css"); |
91 | 175 | } else { |
92 | 176 | // RomM uses the SFU fork primarily for netplay; it does not bundle cores. |
93 | 177 | // Always load the non-minified runtime so core CDN fallbacks can be patched |
94 | 178 | // without touching huge single-line minified bundles. |
| 179 | + console.log("[Loader] Using non-minified mode (RomM default)"); |
95 | 180 | for (let i = 0; i < scripts.length; i++) { |
| 181 | + console.log( |
| 182 | + "[Loader] Loading script", |
| 183 | + i + 1, |
| 184 | + "of", |
| 185 | + scripts.length, |
| 186 | + ":", |
| 187 | + scripts[i] |
| 188 | + ); |
96 | 189 | await loadScript(scripts[i]); |
97 | 190 | } |
98 | 191 | await loadStyle("emulator.css"); |
99 | 192 | } |
| 193 | + console.log("[Loader] ========================================"); |
| 194 | + console.log("[Loader] All scripts loaded, initializing EmulatorJS"); |
| 195 | + console.log( |
| 196 | + "[Loader] Checking for NetplayEngine:", |
| 197 | + typeof window.NetplayEngine |
| 198 | + ); |
| 199 | + console.log( |
| 200 | + "[Loader] Checking for EmulatorJSAdapter:", |
| 201 | + typeof window.EmulatorJSAdapter |
| 202 | + ); |
| 203 | + console.log("[Loader] ========================================"); |
100 | 204 | const config = {}; |
101 | 205 | config.gameUrl = window.EJS_gameUrl; |
102 | 206 | config.dataPath = scriptPath; |
|
0 commit comments