diff --git a/site/static/v0.1pre4/index.html b/site/static/v0.1pre4/index.html
index 2fda0e6..6e704bd 100644
--- a/site/static/v0.1pre4/index.html
+++ b/site/static/v0.1pre4/index.html
@@ -1 +1 @@
-
MicroW8
\ No newline at end of file
+MicroW8
\ No newline at end of file
diff --git a/web/src/main.js b/web/src/main.js
index 270bc6c..d6d5d1f 100644
--- a/web/src/main.js
+++ b/web/src/main.js
@@ -24,40 +24,39 @@ let pad = 0;
let keyHandler = (e) => {
let isKeyDown = e.type == 'keydown';
let mask;
- switch(e.code) {
- case 'ArrowUp':
- mask = 1;
- break;
- case 'ArrowDown':
- mask = 2;
- break;
- case 'ArrowLeft':
- mask = 4;
- break;
- case 'ArrowRight':
- mask = 8;
- break;
- case 'KeyZ':
- mask = 16;
- break;
- case 'KeyX':
- mask = 32;
- break;
- case 'KeyA':
- mask = 64;
- break;
- case 'KeyS':
- mask = 128;
- break;
- case 'KeyR':
- if(isKeyDown)
- {
- runModule(currentData);
- }
- break;
+ switch (e.code) {
+ case 'ArrowUp':
+ mask = 1;
+ break;
+ case 'ArrowDown':
+ mask = 2;
+ break;
+ case 'ArrowLeft':
+ mask = 4;
+ break;
+ case 'ArrowRight':
+ mask = 8;
+ break;
+ case 'KeyZ':
+ mask = 16;
+ break;
+ case 'KeyX':
+ mask = 32;
+ break;
+ case 'KeyA':
+ mask = 64;
+ break;
+ case 'KeyS':
+ mask = 128;
+ break;
+ case 'KeyR':
+ if (isKeyDown) {
+ runModule(currentData);
+ }
+ break;
}
- if(isKeyDown) {
+ if (isKeyDown) {
pad |= mask;
} else {
pad &= ~mask;
@@ -66,7 +65,7 @@ let keyHandler = (e) => {
window.onkeydown = keyHandler;
window.onkeyup = keyHandler;
-async function runModule(data) {
+async function runModule(data, keepUrl) {
if (cancelFunction) {
cancelFunction();
cancelFunction = null;
@@ -82,15 +81,16 @@ async function runModule(data) {
currentData = data;
let newURL = window.location.pathname;
- if (cartridgeSize <= 1024) {
+ if (cartridgeSize <= 1024 && !keepUrl) {
let dataString = '';
for (let byte of U8(data)) {
dataString += String.fromCharCode(byte);
}
newURL += '#' + btoa(dataString);
- }
- if (newURL != window.location.pathname + window.location.hash) {
- history.pushState(null, null, newURL);
+
+ if (newURL != window.location.pathname + window.location.hash) {
+ history.pushState(null, null, newURL);
+ }
}
screen.width = screen.width;
@@ -139,7 +139,7 @@ async function runModule(data) {
let platform_instance = await loadModuleURL(platformUrl);
- for(let name in platform_instance.exports) {
+ for (let name in platform_instance.exports) {
importObject.env[name] = platform_instance.exports[name]
}
@@ -163,29 +163,29 @@ async function runModule(data) {
try {
let now = Date.now();
let restart = false;
- if(now >= nextFrame) {
+ if (now >= nextFrame) {
let gamepads = navigator.getGamepads();
let gamepad = 0;
- for(let i = 0; i < 4; ++i) {
+ for (let i = 0; i < 4; ++i) {
let pad = gamepads[i];
- if(!pad) {
+ if (!pad) {
continue;
}
- for(let j = 0; j < 8; ++j) {
- let buttonIdx = (j+12) % 16;
- if(pad.buttons.length > buttonIdx && pad.buttons[buttonIdx].pressed) {
+ for (let j = 0; j < 8; ++j) {
+ let buttonIdx = (j + 12) % 16;
+ if (pad.buttons.length > buttonIdx && pad.buttons[buttonIdx].pressed) {
gamepad |= 1 << (i * 8 + j);
}
}
- if(pad.axes.length > 1) {
- for(let j = 0; j < 4; ++j) {
- let v = pad.axes[1-(j>>1)];
- if(((j & 1) ? v : -v) > 0.5) {
+ if (pad.axes.length > 1) {
+ for (let j = 0; j < 4; ++j) {
+ let v = pad.axes[1 - (j >> 1)];
+ if (((j & 1) ? v : -v) > 0.5) {
gamepad |= 1 << (i * 8 + j);
}
}
}
- if(pad.buttons.length > 9 && pad.buttons[9].pressed) {
+ if (pad.buttons.length > 9 && pad.buttons[9].pressed) {
restart = true;
}
}
@@ -203,8 +203,8 @@ async function runModule(data) {
canvasCtx.putImageData(imageData, 0, 0);
nextFrame = Math.max(nextFrame + timePerFrame, now);
}
-
- if(restart) {
+
+ if (restart) {
runModule(currentData);
} else {
window.requestAnimationFrame(mainloop);
@@ -220,14 +220,18 @@ async function runModule(data) {
}
}
-async function runModuleFromURL(url) {
- runModule(await (await fetch(url)).arrayBuffer());
+async function runModuleFromURL(url, keepUrl) {
+ runModule(await (await fetch(url)).arrayBuffer(), keepUrl);
}
function runModuleFromHash() {
- let base64Data = window.location.hash.slice(1);
- if (base64Data.length > 0) {
- runModuleFromURL('data:;base64,' + base64Data);
+ let hash = window.location.hash.slice(1);
+ if (hash.length > 0) {
+ if (hash.startsWith("url=")) {
+ runModuleFromURL(hash.slice(4), true);
+ } else {
+ runModuleFromURL('data:;base64,' + hash);
+ }
} else {
runModule(new ArrayBuffer(0));
}