-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathbuilder.js
54 lines (42 loc) · 2.67 KB
/
builder.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { GameMap } from "./arrows.js";
const top = new GameMap("AAACAAAAAAAGCRMAARAAIAAwAEAAAQICAgMCBAIFBAYEBwMIAQkBCgELAQwBDQEOAQ8BDAFBATICEwBCAQEAMwMQAEMBDgE0AUQEChUlAkUCJgJGAicCRwIoAkgCKQJJAioCSgIrAksCLAJMAi0CTQIuAk4CLwJPAgEAAAABCQoAAQEBAgEDAQQBBQEGARYAJgA2AEYACgkgAkACIQJBAiICQgIjAkMCJAJEAg==");
const bottom = new GameMap("AAAEAAAAAQABCggAAwIDEwAEAwYDCAMKAwwDDgMYCCMAMwBDACQDNANEAyUDNQNFAwAAAAAOCRsBABEAIQAxAEEAUQBhAXEBgQGRAaEAsQDBANEA4QDiAOQE5QTmBOcE6ATpBOoE6wTsBO0E7gTvBA4GAwbGA1cEyAPKA8wDzgMKFhMAUwRjAcMA8wAkAAUDFQZlASYDRgCmA2cBaAKIArgDWQNaAboDWwOsA74DXwMLCTMAFAElAQYHZgF2AocAeAFJA2kBDAtzAJMA0wAEAFQClAGWBZgFmgWcBZ4FfwEDBYMAZAK0AHUBqAJcAhIBowBEAgE5swA0AqQAVQGFATYBVgKGAbYABwMXAScAdwMIAxgBKAM4AQkDGQApAzkBiQEKBhoBKgM6AUoDigELAxsBKwM7AEsDiwEMAxwCLAI8AkwDjAENAx0ALQA9AU0AjQEOAh4BLgM+AE4DjgEPAx8CLwE/Ak8DjwENAnQGWAFdBxMIxAC1BjcCtwZIArkGuwa9Br8GBwE1AkUCEAyVBMUDRwGXBMcHmQTJB5sEywedBM0HnwTPBwUFpQSnBKkEqwStBK8EBAp6AaoCawF7AGwBfAO8AG0BfQNuAq4CBgB+AQEAAAALASYAAxABMANAAIABAQMRADEBQQOBAQICEgEiAzIBQgNyA4IBAwMTASMDMwJDA1MBYwCDAQQDFAEkAzQARABUAGQDBQMVAiUCNQJFAlUCZQMLAyABIQOEAfUCEAZQA3AAkQTBB2IAkwTDBwwDYAGQBVIHkgUKBqADsgN0A5UCtQLVAnYDBAGwAKICDgLAA8IDtAcJFOAE4QTiBOMA5ADmAAcAFwAnADcARwBXAGcAdwCHAJcApwC3AMcA1wDnABMEUQNhAXEDsQazBgUBoQSjBAgAlAENAKQHAQABAAAKAgADAgMEAw==");
const line = new GameMap("AAACAAAAAAAGCQEAABAAEwACAQYAEgAQAAMBDAATAAcABAEKCxQDFQIWAhcCGAIZAhoCGwIcAh0CHgIfAgEAAAABCgQQAhECEgITAhQCCQEGABYA");
export function buildDisk(bytes) {
const gameMap = new GameMap();
let byteCount = bytes.length;
if (byteCount < 8)
bytes.push(...Array(8 - byteCount).fill(0));
else if (byteCount % 4 != 0)
bytes.push(...Array(4 - (byteCount % 4)).fill(0));
byteCount = bytes.length;
gameMap.paste(top, 1, 0);
for (let row = 0; row < byteCount / 4; ++row) {
let bytes_row = bytes.splice(0, 4);
let y = row * 2 + 3;
if (row > 0)
gameMap.paste(line, 1, y);
for (let i = 0; i < 4; ++i) {
let byte = bytes_row.at(i);
let x = i * 4 + 6;
for (let j = 0; j < 4; ++j) {
switch (byte & 0b11) {
case 0:
gameMap.setArrow(x + j, y, 1, 1);
break;
case 1:
gameMap.setArrow(x + j, y, 7, 1);
break;
case 2:
gameMap.setArrow(x + j, y, 7, 1, true);
break;
default:
gameMap.setArrow(x + j, y, 8, 1);
}
byte >>= 2;
}
}
}
gameMap.paste(bottom, 0, byteCount / 2 + 2);
return gameMap.save();
}