Skip to content

Instantly share code, notes, and snippets.

@miahmie
Last active August 20, 2023 17:28
Show Gist options
  • Select an option

  • Save miahmie/9f27ddd848d0447ca4e024c7b40ecc8c to your computer and use it in GitHub Desktop.

Select an option

Save miahmie/9f27ddd848d0447ca4e024c7b40ecc8c to your computer and use it in GitHub Desktop.
wasm-test
<!DOCTYPE html><html><head><meta charset="utf-8">
<title>wasm test template</title>
</head><style title=root>#placement{display:flex;justify-content:center;align-items:flex-start}#box{position:relative;background-color:#000;border-radius:8px;border:8px solid #000;margin-top:50px}#screen{image-rendering:pixelated}</style><script>
//function wasm_init() {} // -> can return Promise or other value
//function wasm_custom_env(engine,env,init_result) {}
//function wasm_run(engine) { engine.run(); }
const wasm_data = {
"image":
"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",
"framework":
"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",
"config": {
"screen":"screen",
},
};
const wasm_log = {
"debug": (...a) => console.log (...a),
"error": (...a) => console.error(...a),
};
async function wasm_bootstrap(){const a=wasm_data,b=a.config,c=async a=>{const b=new Blob([new Uint8Array([...atob(a)].map(a=>a.charCodeAt(0)))]),c=new Response(b.stream().pipeThrough(new DecompressionStream("deflate")));return c.arrayBuffer()},d="function"==typeof wasm_init?wasm_init():void 0,e=[c(a.framework).then(a=>{const b=btoa([...new Uint8Array(a)].map(a=>String.fromCharCode(a)).join("")),d=document.createElement("script"),e=document.scripts[0];e.parentNode.insertBefore(d,e),d.type="importmap",d.text=`{"imports":{"framework":"data:application/javascript;base64,${b}"}}`}).then(()=>import("framework")),c(a.image)],f=d instanceof Promise;f&&e.push(d);let g=null;Promise.all(e).then(([a,c,e])=>{g=new a.Engine(b,wasm_log);const h=g.get_env();return"function"==typeof wasm_custom_env&&wasm_custom_env(g,h,f?e:d),WebAssembly.instantiate(new Uint8Array(c),{env:h})}).then(a=>{g.setup(a),"function"==typeof wasm_run?wasm_run(g):g.run()}).catch(a=>wasm_log.error(a))}
</script><body onload="wasm_bootstrap()"><div id=placement><div class=sizebox id=box><canvas class=sizebox id=screen></canvas></div></div><div id=message></div></body></html>
This file has been truncated, but you can view the full file.
<!DOCTYPE html><html><head><meta charset="utf-8">
<title>Nanikura!</title></head><style title=root>#placement{display:flex;justify-content:center;align-items:flex-start}#box{position:relative;background-color:#000;border-radius:8px;border:8px solid #000;margin-top:16px}#screen{image-rendering:pixelated}</style><script>
//function wasm_init() {} // -> can return Promise or other value
function wasm_setup(engine,init_result) {
const imports = engine.get_imports();
const console_lines = [];
const textdec = new TextDecoder();
// [XXX] dummy wasi interfaces
imports.wasi_snapshot_preview1 = {
args_get: () => engine.debug("args_get"),
args_sizes_get: () => 0, //engine.debug("args_sizes_get"),
fd_close: () => 0, //engine.error("fd_close"),
fd_fdstat_get: () => 8, //engine.error("fd_fdstat_get"),
fd_filestat_get: () => 8, //engine.error("fd_filestat_get"),
fd_seek: () => 8, //engine.error("fd_seek"),
fd_write: (fd, ptr, len, wptr) => {
// [TODO] local file access?
const vec = engine.get_memory_iovec(ptr, len);
if (vec) {
// line buffered pseudo console output
let line = console_lines[fd];
if (line === undefined) line = "";
line += textdec.decode(vec);
const idx = line.indexOf("\n");
if (idx >= 0) {
engine.debug(`${fd}:${line.substr(0,idx)}`);
line = line.substr(idx+1);
}
console_lines[fd] = line;
engine.set_memory_u32(wptr, vec.length); // written bytes
}
},
proc_exit: () => engine.error("process_exit"),
random_get: () => Math.floor(Math.random()*0x100000000),
};
}
function wasm_run(engine) {
const exports = engine.get_exports();
if (exports._start)
exports._start(); // for libc/wasi support
// engine.init_and_run();
// or
engine.init();
engine.run();
}
const wasm_log = {
"debug": (...a) => console.log (...a),
"error": (...a) => console.error(...a),
};
const wasm_data = {
"config": {
"screen": "screen", // element-id
"keyboard": {
"handler": null, // null: window, string: element-id, object: element-object
"listener": false, // true:addEventListener, false:onkey{up,down} override
"bind": {
"Escape": "0:P",
"ArrowLeft": "0:L",
"ArrowRight": "0:R",
"ArrowUp": "0:U",
"ArrowDown": "0:D",
"KeyZ": "0:a",
"KeyX": "0:b",
"KeyC": "0:c",
"KeyV": "0:d",
}
}
},
"image":
@miahmie

miahmie commented Aug 17, 2023

Copy link
Copy Markdown
Author

frameworkをcompressed-jsに分離,bootstrapをminified-jsに変更。内部仕様の変更はあれどwasm全体の動作自体は変更なし。
https://gistcdn.githack.com/miahmie/9f27ddd848d0447ca4e024c7b40ecc8c/raw/e2eb236507a4b9c96cfe90afb6a5df37d10eb5a4/index.html

@miahmie

miahmie commented Aug 19, 2023

Copy link
Copy Markdown
Author

なにクラwasm移植(未完成)

  • オリジナルは http://cclub-flying.dsl.gr.jp/products/nanikura/ の作品
  • 入力・音まわり一切無し
  • 音声がないので立ち絵デモのセリフが超高速で流れて読めない
  • データセーブが無いのでリロードするとすべて最初から(オープニングデモもインストール直後のものからになる)
  • 半透明ピクセルが正しく描画されていない(立ち絵のフチがジャギる等)

https://gistcdn.githack.com/miahmie/9f27ddd848d0447ca4e024c7b40ecc8c/raw/981ed15c6b130a8db2d89ce8b883dc36288cd120/nanikura.html

二人プレイは html をローカルにダウンロードして

				"ArrowLeft":  "0:L",
				"ArrowRight": "0:R",
				"ArrowUp":    "0:U",
				"ArrowDown":  "0:D",
				"KeyZ":       "0:a",
				"KeyX":       "0:b",
				"KeyC":       "0:c",
				"KeyV":       "0:d",

の部分をコピペして 1:{LRUDabcd} と 2:{LRUDabcd} を作れって保存してローカルで起動すれば多分行けると思います(動作未確認)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment