@lewismoten/gamemaker-sandbox-tools 0.0.0-stage → 3.1.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 (127) hide show
  1. package/LICENSE +24 -0
  2. package/NOTICE.md +19 -0
  3. package/README.md +76 -2
  4. package/dist/audio.js +140 -0
  5. package/dist/binary-D7wuaC5g.js +120 -0
  6. package/dist/drawing.js +871 -0
  7. package/dist/formats/blocks.js +103 -0
  8. package/dist/formats/character.js +83 -0
  9. package/dist/formats/cmf.js +37 -0
  10. package/dist/formats/fli.js +296 -0
  11. package/dist/formats/fliLimits.js +54 -0
  12. package/dist/formats/game.js +193 -0
  13. package/dist/formats/gif.js +125 -0
  14. package/dist/formats/graphicScripts.js +44 -0
  15. package/dist/formats/map.js +38 -0
  16. package/dist/formats/monster.js +69 -0
  17. package/dist/formats/palette.js +58 -0
  18. package/dist/formats/recording.js +17 -0
  19. package/dist/formats/sound.js +44 -0
  20. package/dist/formats/voc.js +303 -0
  21. package/dist/images.js +50 -0
  22. package/dist/pixels-DzfIIUOl.js +76 -0
  23. package/dist/simulation.js +2776 -0
  24. package/dist/types/games/kit/blit.d.ts +10 -0
  25. package/dist/types/games/kit/clips.d.ts +36 -0
  26. package/dist/types/games/kit/gameSim.d.ts +108 -0
  27. package/dist/types/games/kit/music.d.ts +1 -0
  28. package/dist/types/games/kit/palette.d.ts +16 -0
  29. package/dist/types/games/kit/pcText.d.ts +8 -0
  30. package/dist/types/games/kit/pixels.d.ts +26 -0
  31. package/dist/types/games/kit/reel.d.ts +34 -0
  32. package/dist/types/games/kit/sceneSim.d.ts +84 -0
  33. package/dist/types/games/kit/shading.d.ts +11 -0
  34. package/dist/types/games/kit/sound.d.ts +29 -0
  35. package/dist/types/games/kit/textBounds.d.ts +51 -0
  36. package/dist/types/games/kit/tune.d.ts +6 -0
  37. package/dist/types/web/packages/tools/src/audio.d.ts +3 -0
  38. package/dist/types/web/packages/tools/src/colors.d.ts +20 -0
  39. package/dist/types/web/packages/tools/src/drawing.d.ts +10 -0
  40. package/dist/types/web/packages/tools/src/images.d.ts +2 -0
  41. package/dist/types/web/packages/tools/src/microFont.d.ts +1 -0
  42. package/dist/types/web/packages/tools/src/simulation.d.ts +3 -0
  43. package/dist/types/web/packages/tools/src/text.d.ts +41 -0
  44. package/dist/types/web/scripts/cdGames.d.ts +103 -0
  45. package/dist/types/web/scripts/gameShots.d.ts +12 -0
  46. package/dist/types/web/scripts/ogImage.d.ts +21 -0
  47. package/dist/types/web/src/assistant/png.d.ts +10 -0
  48. package/dist/types/web/src/audio/cmfLoad.d.ts +7 -0
  49. package/dist/types/web/src/audio/cmfPlayer.d.ts +69 -0
  50. package/dist/types/web/src/audio/compose.d.ts +51 -0
  51. package/dist/types/web/src/audio/context.d.ts +12 -0
  52. package/dist/types/web/src/audio/engine.d.ts +39 -0
  53. package/dist/types/web/src/audio/music.worklet.d.ts +14 -0
  54. package/dist/types/web/src/audio/opl.d.ts +37 -0
  55. package/dist/types/web/src/audio/output.d.ts +13 -0
  56. package/dist/types/web/src/desk/boxes/boxFacts.d.ts +85 -0
  57. package/dist/types/web/src/dosPlayer/fileExtensions.d.ts +44 -0
  58. package/dist/types/web/src/dosPlayer/patchRules.d.ts +24 -0
  59. package/dist/types/web/src/dosPlayer/patchTable.d.ts +80 -0
  60. package/dist/types/web/src/edition.d.ts +6 -0
  61. package/dist/types/web/src/eggs/eggState.d.ts +26 -0
  62. package/dist/types/web/src/eggs/eggs.d.ts +31 -0
  63. package/dist/types/web/src/engine/character.d.ts +30 -0
  64. package/dist/types/web/src/engine/funcKeys.d.ts +33 -0
  65. package/dist/types/web/src/engine/game.d.ts +52 -0
  66. package/dist/types/web/src/engine/keys.d.ts +17 -0
  67. package/dist/types/web/src/engine/machine.d.ts +99 -0
  68. package/dist/types/web/src/engine/menus.d.ts +46 -0
  69. package/dist/types/web/src/engine/monsters.d.ts +19 -0
  70. package/dist/types/web/src/engine/playGain.d.ts +11 -0
  71. package/dist/types/web/src/engine/playerLook.d.ts +26 -0
  72. package/dist/types/web/src/engine/recorder.d.ts +60 -0
  73. package/dist/types/web/src/engine/render.d.ts +8 -0
  74. package/dist/types/web/src/engine/scene.d.ts +156 -0
  75. package/dist/types/web/src/engine/scroll.d.ts +16 -0
  76. package/dist/types/web/src/engine/showGraphic.d.ts +39 -0
  77. package/dist/types/web/src/engine/slowPc.d.ts +62 -0
  78. package/dist/types/web/src/engine/touch.d.ts +33 -0
  79. package/dist/types/web/src/engine/world.d.ts +215 -0
  80. package/dist/types/web/src/export/gameAbout.d.ts +15 -0
  81. package/dist/types/web/src/formats/binary.d.ts +44 -0
  82. package/dist/types/web/src/formats/blocks.d.ts +52 -0
  83. package/dist/types/web/src/formats/character.d.ts +65 -0
  84. package/dist/types/web/src/formats/cmf.d.ts +33 -0
  85. package/dist/types/web/src/formats/fli.d.ts +45 -0
  86. package/dist/types/web/src/formats/fliLimits.d.ts +13 -0
  87. package/dist/types/web/src/formats/game.d.ts +72 -0
  88. package/dist/types/web/src/formats/gif.d.ts +15 -0
  89. package/dist/types/web/src/formats/graphicScripts.d.ts +18 -0
  90. package/dist/types/web/src/formats/highscore.d.ts +10 -0
  91. package/dist/types/web/src/formats/map.d.ts +24 -0
  92. package/dist/types/web/src/formats/monster.d.ts +48 -0
  93. package/dist/types/web/src/formats/palette.d.ts +15 -0
  94. package/dist/types/web/src/formats/recording.d.ts +7 -0
  95. package/dist/types/web/src/formats/sound.d.ts +13 -0
  96. package/dist/types/web/src/formats/voc.d.ts +13 -0
  97. package/dist/types/web/src/gfx/cp437Glyphs.d.ts +2 -0
  98. package/dist/types/web/src/gfx/font8x8.d.ts +2 -0
  99. package/dist/types/web/src/gfx/levelPicture.d.ts +81 -0
  100. package/dist/types/web/src/gfx/screen.d.ts +46 -0
  101. package/dist/types/web/src/gfx/titlePicture.d.ts +21 -0
  102. package/dist/types/web/src/input/chords.d.ts +22 -0
  103. package/dist/types/web/src/input/deskMouse.d.ts +14 -0
  104. package/dist/types/web/src/input/keyboard.d.ts +39 -0
  105. package/dist/types/web/src/input/scancodes.d.ts +3 -0
  106. package/dist/types/web/src/manual/printables/types.d.ts +277 -0
  107. package/dist/types/web/src/project/bizarre.d.ts +28 -0
  108. package/dist/types/web/src/project/companion.d.ts +35 -0
  109. package/dist/types/web/src/project/diskFacts.d.ts +30 -0
  110. package/dist/types/web/src/project/files.d.ts +124 -0
  111. package/dist/types/web/src/project/gameFiles.d.ts +49 -0
  112. package/dist/types/web/src/project/gamePack.d.ts +17 -0
  113. package/dist/types/web/src/project/health.d.ts +30 -0
  114. package/dist/types/web/src/project/secretGames.d.ts +19 -0
  115. package/dist/types/web/src/project/storage.d.ts +46 -0
  116. package/dist/types/web/src/project/streamGame.d.ts +38 -0
  117. package/dist/types/web/src/project/zip.d.ts +33 -0
  118. package/dist/types/web/src/retro/dos/disks.d.ts +33 -0
  119. package/dist/types/web/src/retro/text/cp437.d.ts +4 -0
  120. package/dist/types/web/src/seededRandom.d.ts +6 -0
  121. package/dist/types/web/src/tinHearts/deskHearts.d.ts +33 -0
  122. package/dist/types/web/src/tinHearts/manifest.d.ts +30 -0
  123. package/dist/types/web/src/tinHearts/tinHearts.d.ts +84 -0
  124. package/dist/types/web/src/walkthrough/format.d.ts +92 -0
  125. package/dist/types/web/src/walkthrough/madeUpScores.d.ts +6 -0
  126. package/dist/types/web/src/walkthrough/runtime.d.ts +134 -0
  127. package/package.json +60 -4
@@ -0,0 +1,303 @@
1
+ const A = "Creative Voice File";
2
+ function C(e) {
3
+ for (let t = 0; t < A.length; t++) if (e[t] !== A.charCodeAt(t)) return !1;
4
+ return !0;
5
+ }
6
+ function j(e) {
7
+ if (!C(e)) throw new Error("Not a VOC file");
8
+ let t = e[20] | e[21] << 8, n = 0;
9
+ const s = [];
10
+ let f = -1, h = 0, l = 0, u = 0, i;
11
+ const p = (a) => {
12
+ if (u === 0) return k(a);
13
+ const c = x[u];
14
+ return c ? (i || (i = { reference: a[0] ?? 128, scale: 0 }, a = a.subarray(1)), F(a, c, i)) : new Float32Array(0);
15
+ };
16
+ for (; t < e.length && l++ < 1e4; ) {
17
+ const a = e[t];
18
+ if (a === 0) break;
19
+ const c = e[t + 1] | e[t + 2] << 8 | e[t + 3] << 16, r = t + 4, M = Math.min(e.length, r + c);
20
+ switch (a) {
21
+ case 1: {
22
+ const m = Math.round(1e6 / (256 - e[r]));
23
+ n ||= m, u = e[r + 1], i = void 0, s.push(p(e.subarray(r + 2, M)));
24
+ break;
25
+ }
26
+ case 2:
27
+ s.push(p(e.subarray(r, M)));
28
+ break;
29
+ case 3: {
30
+ const m = (e[r] | e[r + 1] << 8) + 1;
31
+ n ||= Math.round(1e6 / (256 - e[r + 2])), s.push(new Float32Array(m));
32
+ break;
33
+ }
34
+ case 6:
35
+ f = t + 4 + c, h = e[r] | e[r + 1] << 8;
36
+ break;
37
+ case 7:
38
+ if (f >= 0 && h > 0 && h < 65535) {
39
+ h--, t = f;
40
+ continue;
41
+ }
42
+ break;
43
+ case 8: {
44
+ const m = e[r] | e[r + 1] << 8, w = e[r + 3] === 1;
45
+ n = Math.round(256e6 / ((w ? 2 : 1) * (65536 - m)));
46
+ break;
47
+ }
48
+ case 9: {
49
+ n = e[r] | e[r + 1] << 8 | e[r + 2] << 16 | e[r + 3] << 24;
50
+ const m = e[r + 4], w = e.subarray(r + 12, M);
51
+ s.push(m === 16 ? V(w) : k(w));
52
+ break;
53
+ }
54
+ }
55
+ t = r + c;
56
+ }
57
+ const g = s.reduce((a, c) => a + c.length, 0), o = new Float32Array(g);
58
+ let d = 0;
59
+ for (const a of s)
60
+ o.set(a, d), d += a.length;
61
+ return { sampleRate: n || 8e3, samples: o };
62
+ }
63
+ function k(e) {
64
+ const t = new Float32Array(e.length);
65
+ for (let n = 0; n < e.length; n++) t[n] = (e[n] - 128) / 128;
66
+ return t;
67
+ }
68
+ const x = {
69
+ 1: {
70
+ bits: [4, 4],
71
+ scaleMap: [
72
+ 0,
73
+ 1,
74
+ 2,
75
+ 3,
76
+ 4,
77
+ 5,
78
+ 6,
79
+ 7,
80
+ 0,
81
+ -1,
82
+ -2,
83
+ -3,
84
+ -4,
85
+ -5,
86
+ -6,
87
+ -7,
88
+ 1,
89
+ 3,
90
+ 5,
91
+ 7,
92
+ 9,
93
+ 11,
94
+ 13,
95
+ 15,
96
+ -1,
97
+ -3,
98
+ -5,
99
+ -7,
100
+ -9,
101
+ -11,
102
+ -13,
103
+ -15,
104
+ 2,
105
+ 6,
106
+ 10,
107
+ 14,
108
+ 18,
109
+ 22,
110
+ 26,
111
+ 30,
112
+ -2,
113
+ -6,
114
+ -10,
115
+ -14,
116
+ -18,
117
+ -22,
118
+ -26,
119
+ -30,
120
+ 4,
121
+ 12,
122
+ 20,
123
+ 28,
124
+ 36,
125
+ 44,
126
+ 52,
127
+ 60,
128
+ -4,
129
+ -12,
130
+ -20,
131
+ -28,
132
+ -36,
133
+ -44,
134
+ -52,
135
+ -60
136
+ ],
137
+ adjustMap: [
138
+ 0,
139
+ 0,
140
+ 0,
141
+ 0,
142
+ 0,
143
+ 16,
144
+ 16,
145
+ 16,
146
+ 0,
147
+ 0,
148
+ 0,
149
+ 0,
150
+ 0,
151
+ 16,
152
+ 16,
153
+ 16,
154
+ 240,
155
+ 0,
156
+ 0,
157
+ 0,
158
+ 0,
159
+ 16,
160
+ 16,
161
+ 16,
162
+ 240,
163
+ 0,
164
+ 0,
165
+ 0,
166
+ 0,
167
+ 16,
168
+ 16,
169
+ 16,
170
+ 240,
171
+ 0,
172
+ 0,
173
+ 0,
174
+ 0,
175
+ 16,
176
+ 16,
177
+ 16,
178
+ 240,
179
+ 0,
180
+ 0,
181
+ 0,
182
+ 0,
183
+ 16,
184
+ 16,
185
+ 16,
186
+ 240,
187
+ 0,
188
+ 0,
189
+ 0,
190
+ 0,
191
+ 0,
192
+ 0,
193
+ 0,
194
+ 240,
195
+ 0,
196
+ 0,
197
+ 0,
198
+ 0,
199
+ 0,
200
+ 0,
201
+ 0
202
+ ]
203
+ },
204
+ 2: {
205
+ bits: [3, 3, 2],
206
+ scaleMap: [
207
+ 0,
208
+ 1,
209
+ 2,
210
+ 3,
211
+ 0,
212
+ -1,
213
+ -2,
214
+ -3,
215
+ 1,
216
+ 3,
217
+ 5,
218
+ 7,
219
+ -1,
220
+ -3,
221
+ -5,
222
+ -7,
223
+ 2,
224
+ 6,
225
+ 10,
226
+ 14,
227
+ -2,
228
+ -6,
229
+ -10,
230
+ -14,
231
+ 4,
232
+ 12,
233
+ 20,
234
+ 28,
235
+ -4,
236
+ -12,
237
+ -20,
238
+ -28,
239
+ 5,
240
+ 15,
241
+ 25,
242
+ 35,
243
+ -5,
244
+ -15,
245
+ -25,
246
+ -35
247
+ ],
248
+ adjustMap: [0, 0, 0, 8, 0, 0, 0, 8, 248, 0, 0, 8, 248, 0, 0, 8, 248, 0, 0, 8, 248, 0, 0, 8, 248, 0, 0, 8, 248, 0, 0, 8, 248, 0, 0, 0, 248, 0, 0, 0]
249
+ },
250
+ 3: {
251
+ bits: [2, 2, 2, 2],
252
+ scaleMap: [0, 1, 0, -1, 1, 3, -1, -3, 2, 6, -2, -6, 4, 12, -4, -12, 8, 24, -8, -24, 6, 48, -16, -48],
253
+ adjustMap: [0, 4, 0, 4, 252, 4, 252, 4, 252, 4, 252, 4, 252, 4, 252, 4, 252, 4, 252, 4, 252, 0, 252, 0]
254
+ }
255
+ };
256
+ function F(e, t, n) {
257
+ const s = new Float32Array(e.length * t.bits.length), f = t.scaleMap.length - 1;
258
+ let h = 0;
259
+ for (const l of e) {
260
+ let u = 8;
261
+ for (const i of t.bits) {
262
+ u -= i;
263
+ let p = l >> u & (1 << i) - 1;
264
+ t.bits.length === 3 && i === 2 && (p <<= 1);
265
+ const g = Math.max(0, Math.min(f, p + n.scale));
266
+ n.reference = Math.max(0, Math.min(255, n.reference + t.scaleMap[g])), n.scale = n.scale + t.adjustMap[g] & 255, s[h++] = (n.reference - 128) / 128;
267
+ }
268
+ }
269
+ return s;
270
+ }
271
+ function V(e) {
272
+ const t = new Float32Array(e.length >> 1);
273
+ for (let n = 0; n < t.length; n++) t[n] = ((e[n * 2] | e[n * 2 + 1] << 8) << 16 >> 16) / 32768;
274
+ return t;
275
+ }
276
+ function U(e, t = 11025) {
277
+ const n = Math.max(0, Math.min(255, Math.round(256 - 1e6 / t))), s = 16777200, f = [];
278
+ let h = 0;
279
+ do {
280
+ const o = e.subarray(h, Math.min(e.length, h + s)), d = h === 0, a = d ? 6 : 4, c = new Uint8Array(a + o.length), r = o.length + (d ? 2 : 0);
281
+ c[0] = d ? 1 : 2, c[1] = r & 255, c[2] = r >> 8 & 255, c[3] = r >> 16 & 255, d && (c[4] = n, c[5] = 0);
282
+ for (let M = 0; M < o.length; M++) c[a + M] = Math.max(0, Math.min(255, Math.round(o[M] * 127 + 128)));
283
+ f.push(c), h += s;
284
+ } while (h < e.length);
285
+ const l = new Uint8Array(26);
286
+ for (let o = 0; o < A.length; o++) l[o] = A.charCodeAt(o);
287
+ l[20] = 26;
288
+ const u = 266;
289
+ l[22] = u & 255, l[23] = u >> 8;
290
+ const i = ~u + 4660 & 65535;
291
+ l[24] = i & 255, l[25] = i >> 8;
292
+ const p = new Uint8Array(l.length + f.reduce((o, d) => o + d.length, 0) + 1);
293
+ p.set(l);
294
+ let g = l.length;
295
+ for (const o of f)
296
+ p.set(o, g), g += o.length;
297
+ return p;
298
+ }
299
+ export {
300
+ j as decodeVoc,
301
+ U as encodeVoc,
302
+ C as isVoc
303
+ };
package/dist/images.js ADDED
@@ -0,0 +1,50 @@
1
+ import { vga8 as g } from "./formats/palette.js";
2
+ const m = (() => {
3
+ const e = new Uint32Array(256);
4
+ for (let n = 0; n < 256; n++) {
5
+ let t = n;
6
+ for (let o = 0; o < 8; o++) t = t & 1 ? 3988292384 ^ t >>> 1 : t >>> 1;
7
+ e[n] = t >>> 0;
8
+ }
9
+ return e;
10
+ })();
11
+ function p(e) {
12
+ let n = 4294967295;
13
+ for (let t = 0; t < e.length; t++) n = m[(n ^ e[t]) & 255] ^ n >>> 8;
14
+ return (n ^ 4294967295) >>> 0;
15
+ }
16
+ async function D(e) {
17
+ const n = new Blob([e]).stream().pipeThrough(new CompressionStream("deflate"));
18
+ return new Uint8Array(await new Response(n).arrayBuffer());
19
+ }
20
+ function i(e, n) {
21
+ const t = new Uint8Array(12 + n.length), o = new DataView(t.buffer);
22
+ o.setUint32(0, n.length);
23
+ for (let s = 0; s < 4; s++) t[4 + s] = e.charCodeAt(s);
24
+ return t.set(n, 8), o.setUint32(8 + n.length, p(t.subarray(4, 8 + n.length)) >>> 0), t;
25
+ }
26
+ async function x(e, n = 1) {
27
+ const t = Math.max(1, Math.floor(n)), o = e.width * t, s = e.height * t, f = new Uint8Array((o + 1) * s);
28
+ for (let r = 0; r < s; r++) {
29
+ const l = r * (o + 1) | 0, A = Math.floor(r / t) * e.width;
30
+ for (let a = 0; a < o; a++) f[l + 1 + a] = e.pixels[A + Math.floor(a / t)];
31
+ }
32
+ const c = new Uint8Array(13), w = new DataView(c.buffer);
33
+ w.setUint32(0, o), w.setUint32(4, s), c.set([8, 3, 0, 0, 0], 8);
34
+ const h = new Uint8Array(768);
35
+ for (let r = 0; r < 768; r++) h[r] = g(e.palette[r] ?? 0);
36
+ const u = [
37
+ new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]),
38
+ i("IHDR", c),
39
+ i("PLTE", h),
40
+ i("IDAT", await D(f)),
41
+ i("IEND", new Uint8Array(0))
42
+ ], y = new Uint8Array(u.reduce((r, l) => r + l.length, 0));
43
+ let U = 0;
44
+ for (const r of u) y.set(r, U), U += r.length;
45
+ return y;
46
+ }
47
+ export {
48
+ p as crc32,
49
+ x as encodePng
50
+ };
@@ -0,0 +1,76 @@
1
+ class a {
2
+ constructor(s, t, h = 0) {
3
+ this.w = s, this.h = t, this.px = new Uint8Array(s * t).fill(h);
4
+ }
5
+ get(s, t) {
6
+ return s < 0 || t < 0 || s >= this.w || t >= this.h ? -1 : this.px[t * this.w + s];
7
+ }
8
+ set(s, t, h) {
9
+ return s = Math.round(s), t = Math.round(t), s >= 0 && t >= 0 && s < this.w && t < this.h && (this.px[t * this.w + s] = h), this;
10
+ }
11
+ rect(s, t, h, e, i) {
12
+ for (let r = t; r < t + e; r++) for (let n = s; n < s + h; n++) this.set(n, r, i);
13
+ return this;
14
+ }
15
+ frame(s, t, h, e, i) {
16
+ return this.rect(s, t, h, 1, i).rect(s, t + e - 1, h, 1, i), this.rect(s, t, 1, e, i).rect(s + h - 1, t, 1, e, i);
17
+ }
18
+ line(s, t, h, e, i) {
19
+ const r = Math.max(Math.abs(h - s), Math.abs(e - t), 1);
20
+ for (let n = 0; n <= r; n++) this.set(s + (h - s) * n / r, t + (e - t) * n / r, i);
21
+ return this;
22
+ }
23
+ disc(s, t, h, e) {
24
+ for (let i = Math.floor(t - h); i <= t + h; i++)
25
+ for (let r = Math.floor(s - h); r <= s + h; r++) (r - s) ** 2 + (i - t) ** 2 <= h * h && this.set(r, i, e);
26
+ return this;
27
+ }
28
+ ring(s, t, h, e) {
29
+ for (let i = 0; i < Math.PI * 2; i += 0.5 / Math.max(1, h)) this.set(s + Math.cos(i) * h, t + Math.sin(i) * h, e);
30
+ return this;
31
+ }
32
+ /** Every pixel through fn(x, y, current) → new color (or the same). */
33
+ map(s) {
34
+ for (let t = 0; t < this.h; t++) for (let h = 0; h < this.w; h++) this.px[t * this.w + h] = s(h, t, this.px[t * this.w + h]);
35
+ return this;
36
+ }
37
+ /** Copies another picture in, skipping `transparent` pixels. */
38
+ blit(s, t, h, e = -1) {
39
+ for (let i = 0; i < s.h; i++)
40
+ for (let r = 0; r < s.w; r++) {
41
+ const n = s.px[i * s.w + r];
42
+ n !== e && this.set(t + r, h + i, n);
43
+ }
44
+ return this;
45
+ }
46
+ /** A sub-rectangle as a new picture (cutting a 20x20 block out of a big drawing). */
47
+ crop(s, t, h, e) {
48
+ const i = new a(h, e);
49
+ for (let r = 0; r < e; r++) for (let n = 0; n < h; n++) i.px[r * h + n] = this.get(s + n, t + r) & 255;
50
+ return i;
51
+ }
52
+ flipX() {
53
+ return new a(this.w, this.h).map((t, h) => this.get(this.w - 1 - t, h));
54
+ }
55
+ /** ASCII art: each character maps to a color through `key`; others are skipped. */
56
+ draw(s, t, h, e) {
57
+ return h.forEach((i, r) => [...i].forEach((n, f) => n in e && this.set(s + f, t + r, e[n]))), this;
58
+ }
59
+ }
60
+ function l(o) {
61
+ let s = o >>> 0;
62
+ return () => {
63
+ s = s + 1831565813 >>> 0;
64
+ let t = s;
65
+ return t = Math.imul(t ^ t >>> 15, t | 1), t ^= t + Math.imul(t ^ t >>> 7, t | 61), ((t ^ t >>> 14) >>> 0) / 4294967296;
66
+ };
67
+ }
68
+ function u(o, s, t) {
69
+ const h = [0, 8, 2, 10, 12, 4, 14, 6, 3, 11, 1, 9, 15, 7, 13, 5];
70
+ return t * 16 > h[(s & 3) * 4 + (o & 3)];
71
+ }
72
+ export {
73
+ a as P,
74
+ u as d,
75
+ l as r
76
+ };