Skip to content

Commit

Permalink
Add read/write support through LocalStorage API
Browse files Browse the repository at this point in the history
  • Loading branch information
speps committed Dec 3, 2020
1 parent 4c84efc commit f37b0c1
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 20 deletions.
23 changes: 5 additions & 18 deletions README.md
@@ -1,23 +1,10 @@
# Torus Trooper (Reboot)

This is a reboot/recompile of the original Torus Trooper by Kenta Cho.
This is a reboot/recompile of the original Torus Trooper by Kenta Cho (circa 2004).

## TODO

Replace with equivalents

_aaApply
_aaGetY
_aaInX
_d_arrayappendcTX
_d_arraycatnTX
_d_arraycatT
_d_dynamic_cast
_d_interface_cast
_d_newarrayU
abort
extern_cos
extern_sin
extern_sqrt
fmodf
memorySize
- alignment of ship shots during replay
- investigate time added broken
- add repo link
- add copyright text
10 changes: 9 additions & 1 deletion runtime/std/file.d
@@ -1,5 +1,7 @@
module std.file;

import wasm;

ubyte[] read(string path) {
if (path == "sounds/chunks/boss_dest.wav") return cast(ubyte[]) import("sounds/chunks/boss_dest.wav");
if (path == "sounds/chunks/charge.wav") return cast(ubyte[]) import("sounds/chunks/charge.wav");
Expand All @@ -15,6 +17,12 @@ ubyte[] read(string path) {
if (path == "sounds/musics/tt2.ogg") return cast(ubyte[]) import("sounds/musics/tt2.ogg");
if (path == "sounds/musics/tt3.ogg") return cast(ubyte[]) import("sounds/musics/tt3.ogg");
if (path == "sounds/musics/tt4.ogg") return cast(ubyte[]) import("sounds/musics/tt4.ogg");
size_t size = 0;
if (wasm.readFileSize(path, &size)) {
ubyte[] buffer = new ubyte[size];
wasm.readFile(path, buffer);
return buffer;
}
return null;
}

Expand Down Expand Up @@ -51,5 +59,5 @@ string readText(string path) {
}

void write(string path, const(ubyte[]) data) {

wasm.writeFile(path, data);
}
11 changes: 11 additions & 0 deletions runtime/wasm.d
Expand Up @@ -6,6 +6,9 @@ extern (C) size_t wasm_memorySize();
extern (C) size_t wasm_growMemory(size_t by);
extern (C) void wasm_writeString(cstr_t msgptr, size_t msglen);
extern (C) void wasm_writeInt(int n);
extern (C) bool wasm_readFileSize(cstr_t nameptr, size_t namelen, size_t* size);
extern (C) void wasm_readFile(cstr_t nameptr, size_t namelen, ubyte* dataptr, size_t datalen);
extern (C) void wasm_writeFile(cstr_t nameptr, size_t namelen, const(ubyte*) dataptr, size_t datalen);
extern (C) void wasm_assert(cstr_t msgptr, size_t msglen, cstr_t fileptr, size_t filelen, size_t line);
extern (C) void wasm_abort();
extern (C) uint wasm_inputState();
Expand Down Expand Up @@ -54,6 +57,11 @@ version(X86) {
stdOut(newline.ptr, newline.length);
}
}
extern (C) bool wasm_readFileSize(cstr_t nameptr, size_t namelen, size_t* size) {
return false;
}
extern (C) void wasm_readFile(cstr_t nameptr, size_t namelen, ubyte* dataptr, size_t datalen) {}
extern (C) void wasm_writeFile(cstr_t nameptr, size_t namelen, const(ubyte*) dataptr, size_t datalen) {}
extern (C) void wasm_assert(cstr_t msgptr, size_t msglen, cstr_t fileptr, size_t filelen, size_t line) {
wasm_writeString(msgptr, msglen);
wasm_writeString(fileptr, filelen);
Expand All @@ -73,6 +81,9 @@ size_t memorySize() { return wasm_memorySize(); }
size_t growMemory(size_t by) { return wasm_growMemory(by); }
void write(string s) { return wasm_writeString(s.ptr, s.length); }
void write(int n) { return wasm_writeInt(n); }
bool readFileSize(string name, size_t* size) { return wasm_readFileSize(name.ptr, name.length, size); }
void readFile(string name, ubyte[] data) { wasm_readFile(name.ptr, name.length, data.ptr, data.length); }
void writeFile(string name, const(ubyte[]) data) { wasm_writeFile(name.ptr, name.length, data.ptr, data.length); }
void assertMessage(string msg, string file, int line) { return wasm_assert(msg.ptr, msg.length, file.ptr, file.length, line); }
void abort() { wasm_abort(); }
uint inputState() { return wasm_inputState(); }
2 changes: 2 additions & 0 deletions src/abagames/tt/title.d
Expand Up @@ -44,6 +44,8 @@ public class TitleManager {
}

public void start() {
// save on start so it saves when we go back to the menu
prefManager.save();
cnt = 0;
grade = prefManager.prefData.selectedGrade;
level = prefManager.prefData.selectedLevel;
Expand Down
50 changes: 49 additions & 1 deletion web/tt.js
@@ -1,5 +1,18 @@
var decoder = new TextDecoder();
var encoder = new TextEncoder();

function bin2hex(buf) {
return buf.reduce(function(hexstr, byte) {
return hexstr + ('0' + (byte & 0xFF).toString(16)).slice(-2);
}, "");
}
function hex2bin(hexstr) {
return Uint8Array.from(hexstr.match(/../g).reduce(function(bytes, hex) {
bytes.push(parseInt(hex, 16));
return bytes;
}, []));
}

var memory = null;

var loading = document.getElementById("loading");
Expand Down Expand Up @@ -48,6 +61,41 @@ var importObject = {
wasm_writeInt: function(n) {
console.log(n);
},
wasm_readFileSize: function(nameptr, namelen, sizeptr) {
const name = decoder.decode(new Uint8Array(memory.buffer, nameptr, namelen));
const size = new Uint32Array(memory.buffer, sizeptr, 4);
const str = localStorage.getItem(name);
if (str) {
const data = hex2bin(str);
size.set([data.length]);
return true;
}
return false;
},
wasm_readFile: function(nameptr, namelen, dataptr, datalen) {
const name = decoder.decode(new Uint8Array(memory.buffer, nameptr, namelen));
const output = new Uint8Array(memory.buffer, dataptr, datalen);
const str = localStorage.getItem(name);
if (str) {
const data = hex2bin(str);
if (data.length == output.length) {
console.log("read " + name + " with " + data.length + " bytes");
output.set(data);
return true;
} else {
console.error("data read was " + data.length + " while expected was " + output.length);
}
} else {
console.error("calling readFile without checking return value of readFileSize");
}
},
wasm_writeFile: function(nameptr, namelen, dataptr, datalen) {
const name = decoder.decode(new Uint8Array(memory.buffer, nameptr, namelen));
const data = new Uint8Array(memory.buffer, dataptr, datalen);
const str = bin2hex(data);
localStorage.setItem(name, str);
console.log("saved " + name + " with " + data.length + " bytes");
},
wasm_assert: function(msgptr, msglen, fileptr, filelen, line) {
var msg = decoder.decode(new Uint8Array(memory.buffer, msgptr, msglen));
var file = decoder.decode(new Uint8Array(memory.buffer, fileptr, filelen));
Expand Down Expand Up @@ -286,7 +334,7 @@ window.addEventListener("keyup", function(event) {

window.addEventListener("resize", onResize, true);

const expectedBufferLength = 8032124;
const expectedBufferLength = 8032937;
fetch('./tt.wasm').then(function(response) {
const reader = response.body.getReader();
var chunks = [];
Expand Down
Binary file modified web/tt.wasm
Binary file not shown.

0 comments on commit f37b0c1

Please sign in to comment.