-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathbuilder.js
54 lines (42 loc) · 2.66 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("AAAEAAAAAQABCggAAwIDEwAEAwYDCAMKAwwDDgMYCCMAMwBDACQDNANEAyUDNQNFAwAAAAAOCRsBABEAIQAxAEEAUQBhAXEBgQGRAaEAsQDBANEA4QDiAOQE5QTmBOcE6ATpBOoE6wTsBO0E7gTvBA4GAwbGA1cEyAPKA8wDzgMKFRMAUwRjAcMA8wAkAAUDFQZlASYDRgCmA2cBaAK4A1kDWgG6A1sDrAO+A18DCwkzABQBJQEGB2YBdgKHAHgBSQNpAQwLcwCTANMABABUApQBlgWYBZoFnAWeBX8BAwWDAGQCtAB1AYgCXAISAaMARAIBObMANAKkAFUBhQE2AVYChgG2AAcDFwEnAHcDCAMYASgDOAEJAxkAKQM5AYkBCgYaASoDOgFKA4oBCwMbASsDOwBLA4sBDAMcAiwCPAJMA4wBDQMdAC0APQFNAI0BDgIeAS4DPgBOA44BDwMfAi8BPwJPA48BDQJ0BlgBXQcTCMQAtQY3ArcGSAK5BrsGvQa/BgcBNQJFAhAMlQTFA0cBlwTHB5kEyQebBMsHnQTNB58EzwcFBaUEpwSpBKsErQSvBAQKegGqAmsBewBsAXwDvABtAX0DbgKuAgYAfgEBAAAACwEmAAMQATADQACAAQEDEQAxAUEDgQECAhIBIgMyAUIDcgOCAQMDEwEjAzMCQwNTAWMAgwEEAxQBJAM0AEQAVABkAwUDFQIlAjUCRQJVAmUDCwMgASEDhAH1AhAGUANwAJEEwQdiAJMEwwcMA2ABkAVSB5IFCgagA7IDdAOVArUC1QJ2AwQBsACiAg4CwAPCA7QHCRTgBOEE4gTjAOQA5gAHABcAJwA3AEcAVwBnAHcAhwCXAKcAtwDHANcA5wATBFEDYQFxA7EGswYFAaEEowQIAJQBDQCkBwEAAQAACgIAAwIDBAM=");
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();
}