@lewismoten/gamemaker-sandbox-engine 0.0.0-stage → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +24 -0
  3. package/NOTICE.md +58 -0
  4. package/README.md +149 -2
  5. package/dist/assets/music.worklet-aD2x7RRM.js +466 -0
  6. package/dist/audio/cmfLoad.js +10 -0
  7. package/dist/audio/cmfPlayer.js +201 -0
  8. package/dist/audio/context.js +75 -0
  9. package/dist/audio/engine.js +173 -0
  10. package/dist/audio/mix.js +40 -0
  11. package/dist/audio/opl.js +245 -0
  12. package/dist/audio/output.js +40 -0
  13. package/dist/core/gameFiles.js +89 -0
  14. package/dist/engine/character.js +187 -0
  15. package/dist/engine/funcKeys.js +164 -0
  16. package/dist/engine/game.js +133 -0
  17. package/dist/engine/keys.js +68 -0
  18. package/dist/engine/machine.js +192 -0
  19. package/dist/engine/menus.js +135 -0
  20. package/dist/engine/monsters.js +259 -0
  21. package/dist/engine/playGain.js +10 -0
  22. package/dist/engine/playerLook.js +48 -0
  23. package/dist/engine/recorder.js +127 -0
  24. package/dist/engine/render.js +45 -0
  25. package/dist/engine/scene.js +324 -0
  26. package/dist/engine/scroll.js +79 -0
  27. package/dist/engine/showGraphic.js +107 -0
  28. package/dist/engine/slowPc.js +98 -0
  29. package/dist/engine/slowPcMusic.js +46 -0
  30. package/dist/engine/touch.js +61 -0
  31. package/dist/engine/world.js +205 -0
  32. package/dist/formats/binary.js +120 -0
  33. package/dist/formats/blocks.js +103 -0
  34. package/dist/formats/character.js +83 -0
  35. package/dist/formats/cmf.js +37 -0
  36. package/dist/formats/cmfEdit.js +154 -0
  37. package/dist/formats/cmfPreview.js +89 -0
  38. package/dist/formats/cmfSong.js +190 -0
  39. package/dist/formats/fli.js +340 -0
  40. package/dist/formats/fliFrames.js +34 -0
  41. package/dist/formats/fliLimits.js +54 -0
  42. package/dist/formats/game.js +198 -0
  43. package/dist/formats/gif.js +125 -0
  44. package/dist/formats/gifProgressive.js +99 -0
  45. package/dist/formats/graphicScripts.js +44 -0
  46. package/dist/formats/highscore.js +30 -0
  47. package/dist/formats/jpeg.js +359 -0
  48. package/dist/formats/map.js +38 -0
  49. package/dist/formats/monster.js +69 -0
  50. package/dist/formats/palette.js +58 -0
  51. package/dist/formats/recording.js +17 -0
  52. package/dist/formats/sound.js +44 -0
  53. package/dist/formats/voc.js +303 -0
  54. package/dist/gfx/colorVision.js +45 -0
  55. package/dist/gfx/cp437Glyphs.js +337 -0
  56. package/dist/gfx/font8x8.js +10 -0
  57. package/dist/gfx/screen.js +151 -0
  58. package/dist/index.js +15 -0
  59. package/dist/input/chords.js +46 -0
  60. package/dist/input/deskMouse.js +24 -0
  61. package/dist/input/keyboard.js +82 -0
  62. package/dist/input/scancodes.js +143 -0
  63. package/dist/player/fileExtensions.js +118 -0
  64. package/dist/player/patchRules.js +129 -0
  65. package/dist/player/patchTable.js +1753 -0
  66. package/dist/text/cp437.js +44 -0
  67. package/dist/types/audio/cmfLoad.d.ts +7 -0
  68. package/dist/types/audio/cmfPlayer.d.ts +69 -0
  69. package/dist/types/audio/context.d.ts +12 -0
  70. package/dist/types/audio/engine.d.ts +60 -0
  71. package/dist/types/audio/mix.d.ts +14 -0
  72. package/dist/types/audio/music.worklet.d.ts +22 -0
  73. package/dist/types/audio/opl.d.ts +37 -0
  74. package/dist/types/audio/output.d.ts +13 -0
  75. package/dist/types/core/gameFiles.d.ts +49 -0
  76. package/dist/types/engine/character.d.ts +30 -0
  77. package/dist/types/engine/funcKeys.d.ts +35 -0
  78. package/dist/types/engine/game.d.ts +57 -0
  79. package/dist/types/engine/keys.d.ts +17 -0
  80. package/dist/types/engine/machine.d.ts +103 -0
  81. package/dist/types/engine/menus.d.ts +46 -0
  82. package/dist/types/engine/monsters.d.ts +19 -0
  83. package/dist/types/engine/playGain.d.ts +11 -0
  84. package/dist/types/engine/playerLook.d.ts +44 -0
  85. package/dist/types/engine/recorder.d.ts +67 -0
  86. package/dist/types/engine/render.d.ts +8 -0
  87. package/dist/types/engine/scene.d.ts +188 -0
  88. package/dist/types/engine/scroll.d.ts +24 -0
  89. package/dist/types/engine/showGraphic.d.ts +39 -0
  90. package/dist/types/engine/slowPc.d.ts +124 -0
  91. package/dist/types/engine/slowPcMusic.d.ts +18 -0
  92. package/dist/types/engine/touch.d.ts +33 -0
  93. package/dist/types/engine/world.d.ts +237 -0
  94. package/dist/types/formats/binary.d.ts +44 -0
  95. package/dist/types/formats/blocks.d.ts +52 -0
  96. package/dist/types/formats/character.d.ts +65 -0
  97. package/dist/types/formats/cmf.d.ts +33 -0
  98. package/dist/types/formats/cmfEdit.d.ts +53 -0
  99. package/dist/types/formats/cmfPreview.d.ts +19 -0
  100. package/dist/types/formats/cmfSong.d.ts +74 -0
  101. package/dist/types/formats/fli.d.ts +56 -0
  102. package/dist/types/formats/fliFrames.d.ts +18 -0
  103. package/dist/types/formats/fliLimits.d.ts +13 -0
  104. package/dist/types/formats/game.d.ts +79 -0
  105. package/dist/types/formats/gif.d.ts +15 -0
  106. package/dist/types/formats/gifProgressive.d.ts +46 -0
  107. package/dist/types/formats/graphicScripts.d.ts +18 -0
  108. package/dist/types/formats/highscore.d.ts +10 -0
  109. package/dist/types/formats/jpeg.d.ts +20 -0
  110. package/dist/types/formats/map.d.ts +24 -0
  111. package/dist/types/formats/monster.d.ts +48 -0
  112. package/dist/types/formats/palette.d.ts +15 -0
  113. package/dist/types/formats/recording.d.ts +7 -0
  114. package/dist/types/formats/sound.d.ts +13 -0
  115. package/dist/types/formats/voc.d.ts +13 -0
  116. package/dist/types/gfx/colorVision.d.ts +26 -0
  117. package/dist/types/gfx/cp437Glyphs.d.ts +2 -0
  118. package/dist/types/gfx/font8x8.d.ts +2 -0
  119. package/dist/types/gfx/screen.d.ts +50 -0
  120. package/dist/types/index.d.ts +4 -0
  121. package/dist/types/input/chords.d.ts +22 -0
  122. package/dist/types/input/deskMouse.d.ts +14 -0
  123. package/dist/types/input/keyboard.d.ts +39 -0
  124. package/dist/types/input/scancodes.d.ts +3 -0
  125. package/dist/types/player/fileExtensions.d.ts +44 -0
  126. package/dist/types/player/patchRules.d.ts +24 -0
  127. package/dist/types/player/patchTable.d.ts +83 -0
  128. package/dist/types/text/cp437.d.ts +6 -0
  129. package/package.json +339 -4
@@ -0,0 +1,125 @@
1
+ import { PALETTE_SIZE as G, vga8 as v } from "./palette.js";
2
+ function M(n) {
3
+ return n[0] === 71 && n[1] === 73 && n[2] === 70;
4
+ }
5
+ function B(n) {
6
+ if (!M(n)) throw new Error("Not a GIF file");
7
+ let t = 6;
8
+ const o = () => {
9
+ const r = n[t] | n[t + 1] << 8;
10
+ return t += 2, r;
11
+ };
12
+ o(), o();
13
+ let i = n[t++];
14
+ t += 2;
15
+ const c = new Uint8Array(G), e = (r) => {
16
+ c.fill(0);
17
+ for (let h = 0; h < r; h++)
18
+ c[h * 3] = (n[t++] ?? 0) >> 2, c[h * 3 + 1] = (n[t++] ?? 0) >> 2, c[h * 3 + 2] = (n[t++] ?? 0) >> 2;
19
+ };
20
+ for (i & 128 && e(2 << (i & 7)); ; ) {
21
+ const r = n[t++];
22
+ if (r === 33) {
23
+ for (t++; t < n.length && n[t] !== 0; ) t += n[t] + 1;
24
+ t++;
25
+ } else {
26
+ if (r === 44) break;
27
+ throw new Error("GIF has no image");
28
+ }
29
+ }
30
+ t += 4;
31
+ const u = o(), l = o();
32
+ i = n[t++];
33
+ const p = (i & 64) !== 0;
34
+ i & 128 && e(2 << (i & 7));
35
+ const w = n[t++], d = [];
36
+ for (; t < n.length; ) {
37
+ const r = n[t++];
38
+ if (!r) break;
39
+ for (let h = 0; h < r && t < n.length; h++) d.push(n[t++]);
40
+ }
41
+ const s = m(Uint8Array.from(d), w, u * l), f = new Uint8Array(u * l);
42
+ if (!p) f.set(s.subarray(0, f.length));
43
+ else {
44
+ let r = 0;
45
+ for (const [h, A] of [
46
+ [0, 8],
47
+ [4, 8],
48
+ [2, 4],
49
+ [1, 2]
50
+ ])
51
+ for (let U = h; U < l; U += A)
52
+ f.set(s.subarray(r, r + u), U * u), r += u;
53
+ }
54
+ return { width: u, height: l, pixels: f, palette: c };
55
+ }
56
+ function m(n, t, o, i) {
57
+ const c = new Uint8Array(o), e = 1 << t, u = e + 1, l = new Int16Array(4096), p = new Uint8Array(4096), w = new Uint8Array(4096), d = new Uint8Array(4097);
58
+ let s = t + 1, f = e + 2, r = -1, h = 0, A = 0, U = 0, E = 0;
59
+ for (let a = 0; a < e; a++)
60
+ l[a] = -1, p[a] = a, w[a] = a;
61
+ for (; E < o; ) {
62
+ for (; A < s; ) {
63
+ if (U >= n.length)
64
+ return i && (i.count = E), c;
65
+ h |= n[U++] << A, A += 8;
66
+ }
67
+ const a = h & (1 << s) - 1;
68
+ if (h >>>= s, A -= s, a === e) {
69
+ s = t + 1, f = e + 2, r = -1;
70
+ continue;
71
+ }
72
+ if (a === u) break;
73
+ let g = a, k = 0;
74
+ for (r >= 0 && a >= f && (d[k++] = w[r], g = r); g >= e && k < 4096; )
75
+ d[k++] = p[g], g = l[g];
76
+ d[k++] = g;
77
+ const I = g;
78
+ for (; k > 0 && E < o; ) c[E++] = d[--k];
79
+ r >= 0 && f < 4096 && (l[f] = r, p[f] = I, w[f] = w[r], f++, f === 1 << s && s < 12 && s++), r < 0 && (w[a] = a), r = a;
80
+ }
81
+ return i && (i.count = E), c;
82
+ }
83
+ function F(n) {
84
+ const t = [], o = (e) => t.push(e & 255, e >> 8 & 255);
85
+ t.push(71, 73, 70, 56, 55, 97), o(n.width), o(n.height), t.push(247, 0, 0);
86
+ for (let e = 0; e < G; e++) t.push(v(n.palette[e]));
87
+ t.push(44), o(0), o(0), o(n.width), o(n.height), t.push(0);
88
+ const i = 8;
89
+ t.push(i);
90
+ const c = x(n.pixels, i);
91
+ for (let e = 0; e < c.length; e += 255) {
92
+ const u = Math.min(255, c.length - e);
93
+ t.push(u);
94
+ for (let l = 0; l < u; l++) t.push(c[e + l]);
95
+ }
96
+ return t.push(0, 59), Uint8Array.from(t);
97
+ }
98
+ function x(n, t) {
99
+ const o = 1 << t, i = o + 1, c = [];
100
+ let e = t + 1, u = i + 1, l = 0, p = 0;
101
+ const w = (f) => {
102
+ for (l |= f << p, p += e; p >= 8; )
103
+ c.push(l & 255), l >>>= 8, p -= 8;
104
+ };
105
+ let d = /* @__PURE__ */ new Map();
106
+ if (w(o), n.length === 0)
107
+ return w(i), p && c.push(l & 255), Uint8Array.from(c);
108
+ let s = n[0];
109
+ for (let f = 1; f < n.length; f++) {
110
+ const r = n[f], h = s << 8 | r, A = d.get(h);
111
+ if (A !== void 0) {
112
+ s = A;
113
+ continue;
114
+ }
115
+ w(s), u < 4096 ? (d.set(h, u++), u > 1 << e && e < 12 && e++) : (w(o), d = /* @__PURE__ */ new Map(), e = t + 1, u = i + 1), s = r;
116
+ }
117
+ return w(s), w(i), p && c.push(l & 255), Uint8Array.from(c);
118
+ }
119
+ export {
120
+ B as decodeGif,
121
+ F as encodeGif,
122
+ M as isGif,
123
+ m as lzwDecode,
124
+ x as lzwEncode
125
+ };
@@ -0,0 +1,99 @@
1
+ import { lzwDecode as A, lzwEncode as E } from "./gif.js";
2
+ import { vga8 as M, PALETTE_SIZE as S } from "./palette.js";
3
+ const g = [
4
+ // [first row, step, rows it stands in for]
5
+ [0, 8, 8],
6
+ [4, 8, 4],
7
+ [2, 4, 2],
8
+ [1, 2, 1]
9
+ ];
10
+ function v(t, e) {
11
+ if (!e) return Array.from({ length: t }, (o, i) => ({ y: i, span: 1 }));
12
+ const r = [];
13
+ for (const [o, i, l] of g) for (let a = o; a < t; a += i) r.push({ y: a, span: l });
14
+ return r;
15
+ }
16
+ function k(t) {
17
+ if (t.length < 13 || t[0] !== 71 || t[1] !== 73 || t[2] !== 70) return;
18
+ let e = 10, r = t[e++];
19
+ e++;
20
+ const o = t[e++], i = new Uint8Array(S);
21
+ let l = 0;
22
+ const a = (u) => {
23
+ if (l = 2 << (u & 7), e + l * 3 > t.length) return !1;
24
+ i.fill(0);
25
+ for (let f = 0; f < l * 3; f++) i[f] = t[e++] >> 2;
26
+ return !0;
27
+ };
28
+ if (r & 128 && !a(r)) return;
29
+ for (; ; ) {
30
+ if (e >= t.length) return;
31
+ const u = t[e++];
32
+ if (u === 44) break;
33
+ if (u !== 33) return;
34
+ for (e++; e < t.length && t[e] !== 0; ) e += t[e] + 1;
35
+ e++;
36
+ }
37
+ if (e + 10 > t.length) return;
38
+ e += 4;
39
+ const c = t[e] | t[e + 1] << 8, n = t[e + 2] | t[e + 3] << 8;
40
+ if (e += 4, r = t[e++], r & 128 && !a(r)) return;
41
+ const s = t[e++], h = new Uint8Array(Math.max(0, t.length - e));
42
+ let p = 0, d = !1;
43
+ for (; e < t.length; ) {
44
+ const u = t[e++];
45
+ if (!u) {
46
+ d = !0;
47
+ break;
48
+ }
49
+ const f = Math.min(u, t.length - e);
50
+ h.set(t.subarray(e, e + f), p), p += f, e += f;
51
+ }
52
+ const w = { count: 0 }, x = A(h.subarray(0, p), s, c * n, w);
53
+ return {
54
+ width: c,
55
+ height: n,
56
+ palette: i,
57
+ colors: l,
58
+ interlaced: (r & 64) !== 0,
59
+ stored: x,
60
+ received: w.count,
61
+ complete: d || w.count >= c * n,
62
+ aspect: o ? (o + 15) / 64 : 1
63
+ };
64
+ }
65
+ function z(t, e = 0) {
66
+ const { width: r, height: o, stored: i } = t, l = new Uint8Array(r * o).fill(e), a = v(o, t.interlaced);
67
+ for (let c = 0; c < a.length; c++) {
68
+ const n = c * r;
69
+ if (n >= t.received) break;
70
+ const s = Math.min(r, t.received - n), { y: h, span: p } = a[c];
71
+ for (let d = h; d < Math.min(o, h + p); d++) l.set(i.subarray(n, n + s), d * r);
72
+ }
73
+ return l;
74
+ }
75
+ function P(t, e = {}) {
76
+ let r = 1;
77
+ for (; 1 << r < (e.colors ?? 256); ) r++;
78
+ const o = [], i = (n) => o.push(n & 255, n >> 8 & 255);
79
+ o.push(71, 73, 70, 56, 57, 97), i(t.width), i(t.height), o.push(128 | r - 1 << 4 | r - 1, 0, e.aspect ?? 0);
80
+ for (let n = 0; n < 3 << r; n++) o.push(M(t.palette[n] ?? 0));
81
+ o.push(44), i(0), i(0), i(t.width), i(t.height), o.push(e.interlaced ? 64 : 0);
82
+ let l = t.pixels;
83
+ e.interlaced && (l = new Uint8Array(t.pixels.length), v(t.height, !0).forEach(({ y: n }, s) => l.set(t.pixels.subarray(n * t.width, (n + 1) * t.width), s * t.width)));
84
+ const a = Math.max(2, r);
85
+ o.push(a);
86
+ const c = E(l, a);
87
+ for (let n = 0; n < c.length; n += 255) {
88
+ const s = Math.min(255, c.length - n);
89
+ o.push(s);
90
+ for (let h = 0; h < s; h++) o.push(c[n + h]);
91
+ }
92
+ return o.push(0, 59), Uint8Array.from(o);
93
+ }
94
+ export {
95
+ k as decodePartialGif,
96
+ P as encodeGif89,
97
+ z as partialPixels,
98
+ v as storedRows
99
+ };
@@ -0,0 +1,44 @@
1
+ import { Reader as c, latin1Text as o, textBytes as a } from "./binary.js";
2
+ function p(n) {
3
+ const e = new c(n), t = e.i16(), s = e.i16(), i = o(n.subarray(4, 43)).split(/[\r\n\0]/)[0].trim();
4
+ return { x: t, y: s, gif: i };
5
+ }
6
+ function u(n) {
7
+ const e = a(n.gif), t = new Uint8Array(4 + e.length);
8
+ return t[0] = n.x & 255, t[1] = n.x >> 8 & 255, t[2] = n.y & 255, t[3] = n.y >> 8 & 255, t.set(e, 4), t;
9
+ }
10
+ function f(n) {
11
+ const e = [];
12
+ for (const t of o(n).split(`
13
+ `)) {
14
+ const s = t.replace(/[\r\x1a]/g, ""), r = /^([^ ]{0,15})[^ ]* *(.*)$/.exec(s);
15
+ if (!r || !r[1]) continue;
16
+ const i = r[2].trim();
17
+ e.push({ name: r[1].toLowerCase(), pause: i ? parseInt(i, 10) || 0 : void 0 });
18
+ }
19
+ return e;
20
+ }
21
+ function x(n) {
22
+ return a(n.map((e) => e.pause === void 0 ? e.name : `${e.name} ${e.pause}`).join(`\r
23
+ `) + `\r
24
+ `);
25
+ }
26
+ function m(n) {
27
+ const e = o(n).replace(/\x1a.*$/s, "").replace(/\r\n/g, `
28
+ `), t = [];
29
+ for (let s = 0; s < e.length; ) {
30
+ let r = s;
31
+ for (; r < e.length && r - s < 31 && e[r++] !== `
32
+ `; )
33
+ ;
34
+ t.push(e.slice(s, r).replace(/\n$/, "")), s = r;
35
+ }
36
+ return t;
37
+ }
38
+ export {
39
+ p as parseBackdrop,
40
+ f as parseSlideList,
41
+ u as serializeBackdrop,
42
+ x as serializeSlideList,
43
+ m as textLines
44
+ };
@@ -0,0 +1,30 @@
1
+ import { Reader as c, Writer as s } from "./binary.js";
2
+ const o = 10;
3
+ function l(n) {
4
+ const r = new c(n);
5
+ return Array.from({ length: o }, () => ({ score: r.i32(), name: r.cstr(30) }));
6
+ }
7
+ function u(n) {
8
+ const r = new s(o * 34);
9
+ for (let e = 0; e < o; e++) {
10
+ const t = n[e] ?? { score: 0, name: "" };
11
+ r.i32(t.score).cstr(t.name, 30);
12
+ }
13
+ return r.toBytes();
14
+ }
15
+ function a(n, r) {
16
+ for (let e = 0; e < o; e++) if (r > (n[e]?.score ?? 0)) return e;
17
+ return -1;
18
+ }
19
+ function f(n, r, e) {
20
+ const t = n.slice(0, o);
21
+ for (; t.length < o; ) t.push({ score: 0, name: "" });
22
+ return t.splice(r, 0, e), t.slice(0, o);
23
+ }
24
+ export {
25
+ o as HIGH_SCORES,
26
+ f as insertHighScore,
27
+ l as parseHighScores,
28
+ a as placeFor,
29
+ u as serializeHighScores
30
+ };
@@ -0,0 +1,359 @@
1
+ const S = Int32Array.from([
2
+ 0,
3
+ 1,
4
+ 8,
5
+ 16,
6
+ 9,
7
+ 2,
8
+ 3,
9
+ 10,
10
+ 17,
11
+ 24,
12
+ 32,
13
+ 25,
14
+ 18,
15
+ 11,
16
+ 4,
17
+ 5,
18
+ 12,
19
+ 19,
20
+ 26,
21
+ 33,
22
+ 40,
23
+ 48,
24
+ 41,
25
+ 34,
26
+ 27,
27
+ 20,
28
+ 13,
29
+ 6,
30
+ 7,
31
+ 14,
32
+ 21,
33
+ 28,
34
+ 35,
35
+ 42,
36
+ 49,
37
+ 56,
38
+ 57,
39
+ 50,
40
+ 43,
41
+ 36,
42
+ 29,
43
+ 22,
44
+ 15,
45
+ 23,
46
+ 30,
47
+ 37,
48
+ 44,
49
+ 51,
50
+ 58,
51
+ 59,
52
+ 52,
53
+ 45,
54
+ 38,
55
+ 31,
56
+ 39,
57
+ 46,
58
+ 53,
59
+ 60,
60
+ 61,
61
+ 54,
62
+ 47,
63
+ 55,
64
+ 62,
65
+ 63
66
+ ]);
67
+ class R extends Error {
68
+ }
69
+ function O(n, I) {
70
+ const k = new Int32Array(18).fill(-1), r = new Int32Array(17), o = new Int32Array(17);
71
+ let g = 0, p = 0;
72
+ for (let h = 1; h <= 16; h++)
73
+ r[h] = p, o[h] = g, g += n[h - 1], p += n[h - 1], k[h] = n[h - 1] ? g - 1 : -1, g <<= 1;
74
+ return k[17] = 2147483647, { maxcode: k, valptr: r, mincode: o, vals: I };
75
+ }
76
+ function Z(n) {
77
+ return n[0] === 255 && n[1] === 216;
78
+ }
79
+ function Q(n) {
80
+ if (!Z(n)) return;
81
+ const I = [], k = [], r = [];
82
+ let o = [], g = 0, p = 0, h = !1, q = 0, l = 1, y = 1, v = 0, M = 0, F = 1, U = 0, C = !1, x = 2;
83
+ const L = (f) => n[f] << 8 | n[f + 1];
84
+ e: for (; x + 1 < n.length; ) {
85
+ if (n[x] !== 255) {
86
+ x++;
87
+ continue;
88
+ }
89
+ const f = n[x + 1];
90
+ if (f === 255) {
91
+ x++;
92
+ continue;
93
+ }
94
+ if (f === 217) {
95
+ C = !0;
96
+ break;
97
+ }
98
+ if (f >= 208 && f <= 215) {
99
+ x += 2;
100
+ continue;
101
+ }
102
+ if (x + 4 > n.length) break;
103
+ const w = L(x + 2), c = x + 4, A = x + 2 + w;
104
+ if (f !== 218 && A > n.length) break;
105
+ switch (f) {
106
+ case 224:
107
+ if (n[c] === 74 && n[c + 1] === 70 && n[c + 7] === 0) {
108
+ const a = L(c + 8), e = L(c + 10);
109
+ a && e && (F = a / e);
110
+ }
111
+ break;
112
+ case 219:
113
+ for (let a = c; a < A; ) {
114
+ const e = n[a] >> 4, t = n[a] & 15;
115
+ a++;
116
+ const s = new Int32Array(64);
117
+ for (let i = 0; i < 64; i++)
118
+ s[S[i]] = e ? L(a) : n[a], a += e ? 2 : 1;
119
+ I[t] = s;
120
+ }
121
+ break;
122
+ case 192:
123
+ case 193:
124
+ case 194: {
125
+ h = f === 194, p = L(c + 1), g = L(c + 3);
126
+ const a = n[c + 5];
127
+ o = [];
128
+ for (let e = 0; e < a; e++) {
129
+ const t = c + 6 + e * 3;
130
+ o.push({
131
+ id: n[t],
132
+ h: n[t + 1] >> 4,
133
+ v: n[t + 1] & 15,
134
+ tq: n[t + 2],
135
+ blocksPerLine: 0,
136
+ blocksPerColumn: 0,
137
+ stride: 0,
138
+ coeffs: new Int16Array(0),
139
+ ready: new Uint8Array(0),
140
+ pred: 0
141
+ });
142
+ }
143
+ l = Math.max(...o.map((e) => e.h)), y = Math.max(...o.map((e) => e.v)), v = Math.ceil(g / (8 * l)), M = Math.ceil(p / (8 * y));
144
+ for (const e of o)
145
+ e.blocksPerLine = Math.ceil(Math.ceil(g * e.h / l) / 8), e.blocksPerColumn = Math.ceil(Math.ceil(p * e.v / y) / 8), e.stride = v * e.h, e.coeffs = new Int16Array(M * e.v * e.stride * 64), e.ready = new Uint8Array(e.coeffs.length / 64);
146
+ break;
147
+ }
148
+ case 196:
149
+ for (let a = c; a < A; ) {
150
+ const e = n[a] >> 4, t = n[a] & 15, s = n.subarray(a + 1, a + 17), i = s.reduce((P, m) => P + m, 0), b = O(s, n.slice(a + 17, a + 17 + i));
151
+ (e ? r : k)[t] = b, a += 17 + i;
152
+ }
153
+ break;
154
+ case 221:
155
+ q = L(c);
156
+ break;
157
+ case 218: {
158
+ if (A > n.length || !o.length) break e;
159
+ const a = n[c], e = [];
160
+ for (let d = 0; d < a; d++) {
161
+ const z = o.find((T) => T.id === n[c + 1 + d * 2]);
162
+ z.dc = k[n[c + 2 + d * 2] >> 4], z.ac = r[n[c + 2 + d * 2] & 15], e.push(z);
163
+ }
164
+ const t = c + 1 + a * 2, s = n[t], i = n[t + 1], b = n[t + 2] >> 4, P = n[t + 2] & 15, m = B(n, A, e, { progressive: h, ss: s, se: i, ah: b, al: P, restart: q, mcusPerLine: v, mcusPerColumn: M });
165
+ if (!m.done) break e;
166
+ U++, x = m.pos;
167
+ continue;
168
+ }
169
+ }
170
+ x = A;
171
+ }
172
+ if (!o.length || !g || !p) return;
173
+ const E = new Uint8Array(g * p), u = o[0];
174
+ for (let f = 0; f < p; f++)
175
+ for (let w = 0; w < g; w++) {
176
+ const c = Math.floor(w * u.h / l / 8), A = Math.floor(f * u.v / y / 8);
177
+ E[f * g + w] = u.ready[A * u.stride + c];
178
+ }
179
+ return {
180
+ width: g,
181
+ height: p,
182
+ channels: o.length === 1 ? 1 : 3,
183
+ pixels: D(o, I, g, p, l, y),
184
+ shown: E,
185
+ progressive: h,
186
+ scans: U,
187
+ complete: C,
188
+ aspect: F
189
+ };
190
+ }
191
+ function B(n, I, k, r) {
192
+ let o = I, g = 0, p = 0, h = 0;
193
+ const q = () => {
194
+ if (!p) {
195
+ if (o >= n.length) throw new R();
196
+ const e = n[o];
197
+ if (e === 255) {
198
+ if (o + 1 >= n.length) throw new R();
199
+ if (n[o + 1] !== 0) throw new R();
200
+ o += 2;
201
+ } else o++;
202
+ g = e, p = 8;
203
+ }
204
+ return p--, g >> p & 1;
205
+ }, l = (e) => {
206
+ let t = 0;
207
+ for (; e--; ) t = t << 1 | q();
208
+ return t;
209
+ }, y = (e) => {
210
+ if (!e) return 0;
211
+ const t = l(e);
212
+ return t < 1 << e - 1 ? t - (1 << e) + 1 : t;
213
+ }, v = (e) => {
214
+ let t = 0;
215
+ for (let s = 1; s <= 16; s++)
216
+ if (t = t << 1 | q(), t <= e.maxcode[s]) return e.vals[e.valptr[s] + t - e.mincode[s]];
217
+ throw new R();
218
+ }, M = (e, t) => {
219
+ const s = v(e.dc);
220
+ e.pred += y(s), e.coeffs[t] = e.pred;
221
+ for (let i = 1; i < 64; ) {
222
+ const b = v(e.ac), P = b >> 4, m = b & 15;
223
+ if (!m) {
224
+ if (P < 15) break;
225
+ i += 16;
226
+ continue;
227
+ }
228
+ if (i += P, i > 63) break;
229
+ e.coeffs[t + S[i]] = y(m), i++;
230
+ }
231
+ }, F = (e, t) => {
232
+ const s = v(e.dc);
233
+ e.pred += y(s) * (1 << r.al), e.coeffs[t] = e.pred;
234
+ }, U = (e, t) => {
235
+ q() && (e.coeffs[t] |= 1 << r.al);
236
+ }, C = (e, t) => {
237
+ if (h > 0) {
238
+ h--;
239
+ return;
240
+ }
241
+ for (let s = r.ss; s <= r.se; ) {
242
+ const i = v(e.ac), b = i >> 4, P = i & 15;
243
+ if (!P) {
244
+ if (b < 15) {
245
+ h = (1 << b) - 1 + l(b);
246
+ break;
247
+ }
248
+ s += 16;
249
+ continue;
250
+ }
251
+ if (s += b, s > 63) break;
252
+ e.coeffs[t + S[s]] = y(P) * (1 << r.al), s++;
253
+ }
254
+ }, x = (e, t) => {
255
+ const s = 1 << r.al, i = -1 << r.al, b = e.coeffs, P = (d) => {
256
+ q() && (b[d] & s) === 0 && (b[d] += b[d] >= 0 ? s : i);
257
+ };
258
+ let m = r.ss;
259
+ if (h === 0)
260
+ for (; m <= r.se; m++) {
261
+ const d = v(e.ac);
262
+ let z = d >> 4;
263
+ const T = d & 15;
264
+ let G = 0;
265
+ if (T) G = q() ? s : i;
266
+ else if (z !== 15) {
267
+ h = 1 << z, z && (h += l(z));
268
+ break;
269
+ }
270
+ for (; m <= r.se; m++) {
271
+ const J = t + S[m];
272
+ if (b[J] !== 0) P(J);
273
+ else if (--z < 0) break;
274
+ }
275
+ G && m <= r.se && (b[t + S[m]] = G);
276
+ }
277
+ if (h > 0) {
278
+ for (; m <= r.se; m++) {
279
+ const d = t + S[m];
280
+ b[d] !== 0 && P(d);
281
+ }
282
+ h--;
283
+ }
284
+ }, L = r.progressive ? r.ss === 0 ? r.ah ? U : F : r.ah ? x : C : M;
285
+ for (const e of k) e.pred = 0;
286
+ const E = k.length === 1, u = k[0], f = E ? u.blocksPerLine * u.blocksPerColumn : r.mcusPerLine * r.mcusPerColumn;
287
+ let w = 0;
288
+ const c = [], A = new Int16Array(64 * (E ? 1 : k.reduce((e, t) => e + t.h * t.v, 0))), a = (e, t) => {
289
+ A.set(e.coeffs.subarray(t, t + 64), c.length * 64), c.push({ c: e, o: t }), L(e, t);
290
+ };
291
+ try {
292
+ for (; w < f; ) {
293
+ const e = r.restart ? Math.min(r.restart, f - w) : f - w;
294
+ for (let t = 0; t < e; t++, w++) {
295
+ if (E) {
296
+ const s = Math.floor(w / u.blocksPerLine), i = w % u.blocksPerLine;
297
+ a(u, (s * u.stride + i) * 64);
298
+ } else {
299
+ const s = Math.floor(w / r.mcusPerLine), i = w % r.mcusPerLine;
300
+ for (const b of k) for (let P = 0; P < b.v; P++) for (let m = 0; m < b.h; m++) a(b, ((s * b.v + P) * b.stride + i * b.h + m) * 64);
301
+ }
302
+ if (!r.progressive || r.ss === 0 && r.ah === 0) for (const { c: s, o: i } of c) s.ready[i / 64] = 1;
303
+ c.length = 0;
304
+ }
305
+ if (w >= f) break;
306
+ p = 0, h = 0;
307
+ for (const t of k) t.pred = 0;
308
+ if (o + 1 >= n.length) throw new R();
309
+ n[o] === 255 && n[o + 1] >= 208 && n[o + 1] <= 215 && (o += 2);
310
+ }
311
+ } catch (e) {
312
+ if (!(e instanceof R)) throw e;
313
+ return c.forEach(({ c: t, o: s }, i) => t.coeffs.set(A.subarray(i * 64, (i + 1) * 64), s)), { done: !1, pos: o };
314
+ }
315
+ for (; o + 1 < n.length && !(n[o] === 255 && n[o + 1] !== 0 && (n[o + 1] < 208 || n[o + 1] > 215)); ) o++;
316
+ return { done: o + 1 < n.length, pos: o };
317
+ }
318
+ const H = new Float32Array(64);
319
+ for (let n = 0; n < 8; n++) for (let I = 0; I < 8; I++) H[n * 8 + I] = (I ? 1 : Math.SQRT1_2) * 0.5 * Math.cos((2 * n + 1) * I * Math.PI / 16);
320
+ function D(n, I, k, r, o, g) {
321
+ const p = n.map((l) => {
322
+ const y = l.stride * 8, v = l.coeffs.length / 64 / l.stride, M = new Uint8Array(y * v * 8), F = I[l.tq] ?? new Int32Array(64).fill(1), U = new Float32Array(64), C = new Float32Array(64);
323
+ for (let x = 0; x < v; x++)
324
+ for (let L = 0; L < l.stride; L++) {
325
+ const E = (x * l.stride + L) * 64;
326
+ for (let u = 0; u < 64; u++) U[u] = l.coeffs[E + u] * F[u];
327
+ for (let u = 0; u < 8; u++)
328
+ for (let f = 0; f < 8; f++) {
329
+ let w = 0;
330
+ for (let c = 0; c < 8; c++) w += H[f * 8 + c] * U[u * 8 + c];
331
+ C[u * 8 + f] = w;
332
+ }
333
+ for (let u = 0; u < 8; u++)
334
+ for (let f = 0; f < 8; f++) {
335
+ let w = 0;
336
+ for (let A = 0; A < 8; A++) w += H[f * 8 + A] * C[A * 8 + u];
337
+ const c = Math.round(w + 128);
338
+ M[(x * 8 + f) * y + L * 8 + u] = c < 0 ? 0 : c > 255 ? 255 : c;
339
+ }
340
+ }
341
+ return { plane: M, w: y, sx: l.h / o, sy: l.v / g };
342
+ });
343
+ if (n.length === 1) {
344
+ const { plane: l, w: y } = p[0], v = new Uint8Array(k * r);
345
+ for (let M = 0; M < r; M++) v.set(l.subarray(M * y, M * y + k), M * k);
346
+ return v;
347
+ }
348
+ const h = new Uint8Array(k * r * 3), q = (l) => l < 0 ? 0 : l > 255 ? 255 : Math.round(l);
349
+ for (let l = 0; l < r; l++)
350
+ for (let y = 0; y < k; y++) {
351
+ const [v, M, F] = p.map((C) => C.plane[Math.floor(l * C.sy) * C.w + Math.floor(y * C.sx)] ?? 128), U = (l * k + y) * 3;
352
+ h[U] = q(v + 1.402 * (F - 128)), h[U + 1] = q(v - 0.344136 * (M - 128) - 0.714136 * (F - 128)), h[U + 2] = q(v + 1.772 * (M - 128));
353
+ }
354
+ return h;
355
+ }
356
+ export {
357
+ Q as decodePartialJpeg,
358
+ Z as isJpeg
359
+ };
@@ -0,0 +1,38 @@
1
+ import { Reader as m, Writer as f } from "./binary.js";
2
+ const e = 100, a = 100, u = 200, s = e * a;
3
+ function l(t) {
4
+ const r = new m(t), n = new Uint8Array(s), c = new Uint8Array(s);
5
+ for (let o = 0; o < s; o++)
6
+ n[o] = r.u8(), c[o] = r.u8();
7
+ const i = [];
8
+ for (let o = 0; o < u; o++)
9
+ i.push({ monnum: r.u8(), status: r.i16(), xtra: r.u8(), curx: r.i16(), cury: r.i16(), extra: r.i16() });
10
+ return { blocks: n, mons: c, monsters: i };
11
+ }
12
+ function y(t) {
13
+ const r = new f(s * 2 + u * 10);
14
+ for (let n = 0; n < s; n++) r.u8(t.blocks[n]).u8(t.mons[n]);
15
+ for (const n of t.monsters) r.u8(n.monnum).i16(n.status).u8(n.xtra).i16(n.curx).i16(n.cury).i16(n.extra);
16
+ return r.toBytes();
17
+ }
18
+ function M() {
19
+ return {
20
+ blocks: new Uint8Array(s),
21
+ mons: new Uint8Array(s).fill(u),
22
+ monsters: Array.from({ length: u }, () => ({ monnum: 64, status: 0, xtra: 0, curx: 0, cury: 0, extra: 0 }))
23
+ };
24
+ }
25
+ function w(t) {
26
+ t.mons.fill(u), t.monsters.forEach((r, n) => {
27
+ r.monnum < 64 && r.curx >= 0 && r.curx < e && r.cury >= 0 && r.cury < a && (t.mons[r.cury * e + r.curx] = n);
28
+ });
29
+ }
30
+ export {
31
+ u as LASTMM,
32
+ e as MLEN,
33
+ a as MWID,
34
+ M as newMap,
35
+ l as parseMap,
36
+ w as reindexMonsters,
37
+ y as serializeMap
38
+ };