diff --git a/data/GameManager.js b/data/GameManager.js index 67937f1..8f080a9 100644 --- a/data/GameManager.js +++ b/data/GameManager.js @@ -175,7 +175,16 @@ class EJS_GameManager { } screenshot() { this.functions.screenshot(); - return this.FS.readFile('screenshot.png'); + return new Promise(resolve => async { + while (1) { + try { + FS.stat("/screenshot.png"); + return resolve(this.FS.readFile("/screenshot.png")); + } catch(e) {} + + await new Promise(res => setTimeout(res, 50)); + } + }) } quickSave(slot) { if (!slot) slot = 1; diff --git a/data/emulator.js b/data/emulator.js index 3966e34..55b6f69 100644 --- a/data/emulator.js +++ b/data/emulator.js @@ -661,7 +661,6 @@ class EmulatorJS { }); } let legacy = (this.supportsWebgl2 ? "" : "-legacy"); - if ("n64" !== this.getCore(true)) legacy = ""; let filename = this.getCore()+(this.config.threads ? "-thread" : "")+legacy+"-wasm.data"; this.storage.core.get(filename).then((result) => { if (result && result.version === this.version && !this.debug) { @@ -1320,15 +1319,16 @@ class EmulatorJS { let screenshotUrl; const screenshot = addButton("Take Screenshot", false, () => { if (screenshotUrl) URL.revokeObjectURL(screenshotUrl); - const screenshot = this.gameManager.screenshot(); - const blob = new Blob([screenshot]); - screenshotUrl = URL.createObjectURL(blob); - const a = this.createElement("a"); - a.href = screenshotUrl; - const date = new Date(); - a.download = this.getBaseFileName()+"-"+date.getMonth()+"-"+date.getDate()+"-"+date.getFullYear()+".png"; - a.click(); - hideMenu(); + this.gameManager.screenshot().then(screenshot => { + const blob = new Blob([screenshot]); + screenshotUrl = URL.createObjectURL(blob); + const a = this.createElement("a"); + a.href = screenshotUrl; + const date = new Date(); + a.download = this.getBaseFileName()+"-"+date.getMonth()+"-"+date.getDate()+"-"+date.getFullYear()+".png"; + a.click(); + hideMenu(); + }); }); let screenMediaRecorder = null; @@ -1709,7 +1709,7 @@ class EmulatorJS { const saveState = addButton("Save State", '', async () => { const state = await this.gameManager.getState(); const called = this.callEvent("save", { - screenshot: this.gameManager.screenshot(), + screenshot: await this.gameManager.screenshot(), state: state }); if (called > 0) return;