@lewismoten/gamemaker-sandbox-tools 3.1.0 → 3.4.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.
- package/CHANGELOG.md +44 -0
- package/NOTICE.md +105 -3
- package/README.md +301 -15
- package/dist/audio-files.js +82 -0
- package/dist/audio.js +23 -138
- package/dist/block-merge.js +43 -0
- package/dist/color-reduce.js +44 -0
- package/dist/colors.js +87 -0
- package/dist/delta.js +75 -0
- package/dist/disk-diff.js +220 -0
- package/dist/drawing.js +83 -869
- package/dist/embroidery/compile.js +85 -0
- package/dist/embroidery/dst.js +79 -0
- package/dist/embroidery/exp.js +26 -0
- package/dist/embroidery/fill.js +49 -0
- package/dist/embroidery/geom.js +82 -0
- package/dist/embroidery/pes.js +79 -0
- package/dist/embroidery/satin.js +29 -0
- package/dist/embroidery/simulate.js +30 -0
- package/dist/embroidery/strokeFont.js +253 -0
- package/dist/embroidery/svg.js +24 -0
- package/dist/embroidery/types.js +13 -0
- package/dist/embroidery/units.js +26 -0
- package/dist/embroidery/validate.js +15 -0
- package/dist/formats/blocks.js +1 -103
- package/dist/formats/character.js +1 -83
- package/dist/formats/cmf.js +1 -37
- package/dist/formats/fli.js +1 -296
- package/dist/formats/fliLimits.js +1 -54
- package/dist/formats/game.js +1 -193
- package/dist/formats/gif.js +1 -125
- package/dist/formats/graphicScripts.js +1 -44
- package/dist/formats/map.js +1 -38
- package/dist/formats/monster.js +1 -69
- package/dist/formats/palette.js +1 -58
- package/dist/formats/recording.js +1 -17
- package/dist/formats/sound.js +1 -44
- package/dist/formats/voc.js +1 -303
- package/dist/gif-shrink.js +56 -0
- package/dist/image/png.js +42 -0
- package/dist/images.js +81 -43
- package/dist/kit/actors.js +19 -0
- package/dist/kit/align.js +204 -0
- package/dist/kit/blit.js +45 -0
- package/dist/kit/blockRoles.js +97 -0
- package/dist/kit/clips.js +40 -0
- package/dist/kit/coverPaint.js +18 -0
- package/dist/kit/disk.js +76 -0
- package/dist/kit/fadeOut.js +13 -0
- package/dist/kit/fliClips.js +133 -0
- package/dist/kit/fliShrink.js +277 -0
- package/dist/kit/gameSim.js +235 -0
- package/dist/kit/hopBot.js +142 -0
- package/dist/kit/levelGen.js +1423 -0
- package/dist/kit/levelGrid.js +33 -0
- package/dist/kit/levelPicture.js +27 -0
- package/dist/kit/menuVersion.js +19 -0
- package/dist/kit/microText.js +35 -0
- package/dist/kit/mumble.js +74 -0
- package/dist/kit/music.js +8 -0
- package/dist/kit/palRamps.js +32 -0
- package/dist/kit/palette.js +49 -0
- package/dist/kit/pcText.js +72 -0
- package/dist/kit/photo.js +150 -0
- package/dist/kit/pixels.js +79 -0
- package/dist/kit/png.js +40 -0
- package/dist/kit/quantize.js +72 -0
- package/dist/kit/raytrace.js +379 -0
- package/dist/kit/recordedDemo.js +10 -0
- package/dist/kit/reel.js +77 -0
- package/dist/kit/road3d.js +67 -0
- package/dist/kit/routeChecks.js +8 -0
- package/dist/kit/saveSlots.js +11 -0
- package/dist/kit/sceneInit.js +13 -0
- package/dist/kit/sceneSim.js +112 -0
- package/dist/kit/screenText.js +15 -0
- package/dist/kit/sdftext.js +237 -0
- package/dist/kit/shading.js +69 -0
- package/dist/kit/song.js +251 -0
- package/dist/kit/songFx.js +179 -0
- package/dist/kit/sound.js +52 -0
- package/dist/kit/synthParts.js +20 -0
- package/dist/kit/tar.js +53 -0
- package/dist/kit/textBounds.js +84 -0
- package/dist/kit/textfit.js +246 -0
- package/dist/kit/transforms.js +57 -0
- package/dist/kit/tune.js +21 -0
- package/dist/look-alike.js +50 -0
- package/dist/menu-version.js +4 -0
- package/dist/mesh/colorBodies.js +137 -0
- package/dist/mesh/decimate.js +207 -0
- package/dist/mesh/meshCheck.js +51 -0
- package/dist/mesh/overhang.js +41 -0
- package/dist/mesh/sampledField.js +12 -0
- package/dist/mesh/stl.js +36 -0
- package/dist/mesh/surfaceNets.js +79 -0
- package/dist/mesh/tetraMesh.js +62 -0
- package/dist/mesh/threeMf.js +58 -0
- package/dist/mesh/zipFile.js +52 -0
- package/dist/microFont.js +101 -0
- package/dist/music/compose.js +72 -0
- package/dist/pack/meshPack.js +198 -0
- package/dist/pack/threeMfPack.js +92 -0
- package/dist/palette-reserve.js +116 -0
- package/dist/palettes.js +138 -0
- package/dist/release-notes.js +40 -0
- package/dist/simulation.js +16 -2774
- package/dist/text.js +74 -0
- package/dist/types/audio.d.ts +4 -0
- package/dist/types/audioFiles.d.ts +22 -0
- package/dist/types/audioWav.d.ts +4 -0
- package/dist/types/blockMerge.d.ts +24 -0
- package/dist/types/colorReduce.d.ts +23 -0
- package/dist/types/{web/packages/tools/src/colors.d.ts → colors.d.ts} +6 -0
- package/dist/types/delta.d.ts +32 -0
- package/dist/types/diskDiff.d.ts +47 -0
- package/dist/types/drawing.d.ts +15 -0
- package/dist/types/embroidery/compile.d.ts +3 -0
- package/dist/types/embroidery/dst.d.ts +13 -0
- package/dist/types/embroidery/exp.d.ts +8 -0
- package/dist/types/embroidery/fill.d.ts +6 -0
- package/dist/types/embroidery/geom.d.ts +19 -0
- package/dist/types/embroidery/pes.d.ts +10 -0
- package/dist/types/embroidery/satin.d.ts +11 -0
- package/dist/types/embroidery/simulate.d.ts +19 -0
- package/dist/types/embroidery/strokeFont.d.ts +20 -0
- package/dist/types/embroidery/svg.d.ts +3 -0
- package/dist/types/embroidery/types.d.ts +70 -0
- package/dist/types/embroidery/units.d.ts +10 -0
- package/dist/types/embroidery/validate.d.ts +22 -0
- package/dist/types/formats/blocks.d.ts +1 -0
- package/dist/types/formats/character.d.ts +1 -0
- package/dist/types/formats/cmf.d.ts +1 -0
- package/dist/types/formats/fli.d.ts +1 -0
- package/dist/types/formats/fliLimits.d.ts +1 -0
- package/dist/types/formats/game.d.ts +1 -0
- package/dist/types/formats/gif.d.ts +1 -0
- package/dist/types/formats/graphicScripts.d.ts +1 -0
- package/dist/types/formats/map.d.ts +1 -0
- package/dist/types/formats/monster.d.ts +1 -0
- package/dist/types/formats/palette.d.ts +1 -0
- package/dist/types/formats/recording.d.ts +1 -0
- package/dist/types/formats/sound.d.ts +1 -0
- package/dist/types/formats/voc.d.ts +1 -0
- package/dist/types/gifShrink.d.ts +8 -0
- package/dist/types/image/animatedGif.d.ts +9 -0
- package/dist/types/image/surface.d.ts +26 -0
- package/dist/types/images.d.ts +13 -0
- package/dist/types/kit/actors.d.ts +7 -0
- package/dist/types/kit/align.d.ts +93 -0
- package/dist/types/kit/audioEvents.d.ts +26 -0
- package/dist/types/kit/blit.d.ts +20 -0
- package/dist/types/kit/blockRoles.d.ts +243 -0
- package/dist/types/{games/kit → kit}/clips.d.ts +1 -1
- package/dist/types/kit/coverPaint.d.ts +7 -0
- package/dist/types/kit/disk.d.ts +15 -0
- package/dist/types/kit/fadeOut.d.ts +12 -0
- package/dist/types/kit/fliClips.d.ts +32 -0
- package/dist/types/kit/fliShrink.d.ts +149 -0
- package/dist/types/{games/kit → kit}/gameSim.d.ts +9 -5
- package/dist/types/kit/hopBot.d.ts +72 -0
- package/dist/types/kit/laserClearance.d.ts +16 -0
- package/dist/types/kit/laserJoints.d.ts +39 -0
- package/dist/types/kit/laserLayout.d.ts +54 -0
- package/dist/types/kit/laserPixels.d.ts +52 -0
- package/dist/types/kit/laserPreview.d.ts +9 -0
- package/dist/types/kit/laserSvg.d.ts +35 -0
- package/dist/types/kit/levelGen/castle.d.ts +17 -0
- package/dist/types/kit/levelGen/dungeon.d.ts +11 -0
- package/dist/types/kit/levelGen/forest.d.ts +17 -0
- package/dist/types/kit/levelGen/furnish.d.ts +31 -0
- package/dist/types/kit/levelGen/grid.d.ts +46 -0
- package/dist/types/kit/levelGen/index.d.ts +138 -0
- package/dist/types/kit/levelGen/interior.d.ts +18 -0
- package/dist/types/kit/levelGen/jumpModel.d.ts +78 -0
- package/dist/types/kit/levelGen/needs.d.ts +44 -0
- package/dist/types/kit/levelGen/overworld.d.ts +21 -0
- package/dist/types/kit/levelGen/platform.d.ts +59 -0
- package/dist/types/kit/levelGen/platformCap.d.ts +13 -0
- package/dist/types/kit/levelGen/platformReach.d.ts +37 -0
- package/dist/types/kit/levelGen/props.d.ts +37 -0
- package/dist/types/kit/levelGen/town.d.ts +24 -0
- package/dist/types/kit/levelGrid.d.ts +16 -0
- package/dist/types/kit/levelPicture.d.ts +9 -0
- package/dist/types/kit/menuVersion.d.ts +7 -0
- package/dist/types/kit/microText.d.ts +18 -0
- package/dist/types/kit/mumble.d.ts +41 -0
- package/dist/types/kit/music.d.ts +1 -0
- package/dist/types/kit/palMerge.d.ts +10 -0
- package/dist/types/kit/palRamps.d.ts +28 -0
- package/dist/types/kit/pcText.d.ts +19 -0
- package/dist/types/kit/photo.d.ts +69 -0
- package/dist/types/kit/png.d.ts +7 -0
- package/dist/types/kit/quantize.d.ts +20 -0
- package/dist/types/kit/raytrace.d.ts +169 -0
- package/dist/types/kit/recordedDemo.d.ts +1 -0
- package/dist/types/kit/road3d.d.ts +71 -0
- package/dist/types/kit/routeChecks.d.ts +6 -0
- package/dist/types/kit/saveSlots.d.ts +17 -0
- package/dist/types/kit/sceneInit.d.ts +11 -0
- package/dist/types/{games/kit → kit}/sceneSim.d.ts +5 -5
- package/dist/types/kit/screenText.d.ts +3 -0
- package/dist/types/kit/sdftext.d.ts +34 -0
- package/dist/types/kit/shading.d.ts +23 -0
- package/dist/types/kit/shareBlocks.d.ts +20 -0
- package/dist/types/kit/song.d.ts +89 -0
- package/dist/types/kit/songFx.d.ts +99 -0
- package/dist/types/kit/synthParts.d.ts +7 -0
- package/dist/types/kit/tar.d.ts +13 -0
- package/dist/types/kit/textfit.d.ts +74 -0
- package/dist/types/kit/transforms.d.ts +8 -0
- package/dist/types/lookAlike.d.ts +31 -0
- package/dist/types/menuVersionEntry.d.ts +1 -0
- package/dist/types/mesh/colorBodies.d.ts +18 -0
- package/dist/types/mesh/decimate.d.ts +10 -0
- package/dist/types/mesh/fieldTrinket.d.ts +40 -0
- package/dist/types/mesh/figureShapes.d.ts +24 -0
- package/dist/types/mesh/mesh.d.ts +9 -0
- package/dist/types/mesh/meshCheck.d.ts +22 -0
- package/dist/types/mesh/overhang.d.ts +24 -0
- package/dist/types/mesh/pixelFigure.d.ts +41 -0
- package/dist/types/mesh/sampledField.d.ts +3 -0
- package/dist/types/mesh/sdfShapes.d.ts +20 -0
- package/dist/types/mesh/stl.d.ts +9 -0
- package/dist/types/mesh/strokeText.d.ts +8 -0
- package/dist/types/mesh/surfaceNets.d.ts +14 -0
- package/dist/types/mesh/tetraMesh.d.ts +4 -0
- package/dist/types/mesh/threeMf.d.ts +12 -0
- package/dist/types/mesh/trinketKinds.d.ts +72 -0
- package/dist/types/mesh/trinketTool.d.ts +26 -0
- package/dist/types/mesh/voxel.d.ts +10 -0
- package/dist/types/mesh/zipFile.d.ts +13 -0
- package/dist/types/microFont.d.ts +6 -0
- package/dist/types/pack/meshPack.d.ts +26 -0
- package/dist/types/pack/threeMfPack.d.ts +11 -0
- package/dist/types/palettePresetData.d.ts +4 -0
- package/dist/types/palettePresets.d.ts +12 -0
- package/dist/types/paletteReserve.d.ts +52 -0
- package/dist/types/palettes.d.ts +4 -0
- package/dist/types/releaseNotes.d.ts +3 -0
- package/dist/types/simulation.d.ts +6 -0
- package/dist/types/{web/packages/tools/src/text.d.ts → text.d.ts} +6 -6
- package/package.json +145 -15
- package/dist/binary-D7wuaC5g.js +0 -120
- package/dist/pixels-DzfIIUOl.js +0 -76
- package/dist/types/games/kit/blit.d.ts +0 -10
- package/dist/types/games/kit/music.d.ts +0 -1
- package/dist/types/games/kit/pcText.d.ts +0 -8
- package/dist/types/games/kit/shading.d.ts +0 -11
- package/dist/types/web/packages/tools/src/audio.d.ts +0 -3
- package/dist/types/web/packages/tools/src/drawing.d.ts +0 -10
- package/dist/types/web/packages/tools/src/images.d.ts +0 -2
- package/dist/types/web/packages/tools/src/microFont.d.ts +0 -1
- package/dist/types/web/packages/tools/src/simulation.d.ts +0 -3
- package/dist/types/web/scripts/cdGames.d.ts +0 -103
- package/dist/types/web/scripts/gameShots.d.ts +0 -12
- package/dist/types/web/scripts/ogImage.d.ts +0 -21
- package/dist/types/web/src/audio/cmfLoad.d.ts +0 -7
- package/dist/types/web/src/audio/cmfPlayer.d.ts +0 -69
- package/dist/types/web/src/audio/context.d.ts +0 -12
- package/dist/types/web/src/audio/engine.d.ts +0 -39
- package/dist/types/web/src/audio/music.worklet.d.ts +0 -14
- package/dist/types/web/src/audio/opl.d.ts +0 -37
- package/dist/types/web/src/audio/output.d.ts +0 -13
- package/dist/types/web/src/desk/boxes/boxFacts.d.ts +0 -85
- package/dist/types/web/src/dosPlayer/fileExtensions.d.ts +0 -44
- package/dist/types/web/src/dosPlayer/patchRules.d.ts +0 -24
- package/dist/types/web/src/dosPlayer/patchTable.d.ts +0 -80
- package/dist/types/web/src/edition.d.ts +0 -6
- package/dist/types/web/src/eggs/eggState.d.ts +0 -26
- package/dist/types/web/src/eggs/eggs.d.ts +0 -31
- package/dist/types/web/src/engine/character.d.ts +0 -30
- package/dist/types/web/src/engine/funcKeys.d.ts +0 -33
- package/dist/types/web/src/engine/game.d.ts +0 -52
- package/dist/types/web/src/engine/keys.d.ts +0 -17
- package/dist/types/web/src/engine/machine.d.ts +0 -99
- package/dist/types/web/src/engine/menus.d.ts +0 -46
- package/dist/types/web/src/engine/monsters.d.ts +0 -19
- package/dist/types/web/src/engine/playGain.d.ts +0 -11
- package/dist/types/web/src/engine/playerLook.d.ts +0 -26
- package/dist/types/web/src/engine/recorder.d.ts +0 -60
- package/dist/types/web/src/engine/render.d.ts +0 -8
- package/dist/types/web/src/engine/scene.d.ts +0 -156
- package/dist/types/web/src/engine/scroll.d.ts +0 -16
- package/dist/types/web/src/engine/showGraphic.d.ts +0 -39
- package/dist/types/web/src/engine/slowPc.d.ts +0 -62
- package/dist/types/web/src/engine/touch.d.ts +0 -33
- package/dist/types/web/src/engine/world.d.ts +0 -215
- package/dist/types/web/src/export/gameAbout.d.ts +0 -15
- package/dist/types/web/src/formats/binary.d.ts +0 -44
- package/dist/types/web/src/formats/blocks.d.ts +0 -52
- package/dist/types/web/src/formats/character.d.ts +0 -65
- package/dist/types/web/src/formats/cmf.d.ts +0 -33
- package/dist/types/web/src/formats/fli.d.ts +0 -45
- package/dist/types/web/src/formats/fliLimits.d.ts +0 -13
- package/dist/types/web/src/formats/game.d.ts +0 -72
- package/dist/types/web/src/formats/gif.d.ts +0 -15
- package/dist/types/web/src/formats/graphicScripts.d.ts +0 -18
- package/dist/types/web/src/formats/highscore.d.ts +0 -10
- package/dist/types/web/src/formats/map.d.ts +0 -24
- package/dist/types/web/src/formats/monster.d.ts +0 -48
- package/dist/types/web/src/formats/palette.d.ts +0 -15
- package/dist/types/web/src/formats/recording.d.ts +0 -7
- package/dist/types/web/src/formats/sound.d.ts +0 -13
- package/dist/types/web/src/formats/voc.d.ts +0 -13
- package/dist/types/web/src/gfx/cp437Glyphs.d.ts +0 -2
- package/dist/types/web/src/gfx/font8x8.d.ts +0 -2
- package/dist/types/web/src/gfx/levelPicture.d.ts +0 -81
- package/dist/types/web/src/gfx/screen.d.ts +0 -46
- package/dist/types/web/src/gfx/titlePicture.d.ts +0 -21
- package/dist/types/web/src/input/chords.d.ts +0 -22
- package/dist/types/web/src/input/deskMouse.d.ts +0 -14
- package/dist/types/web/src/input/keyboard.d.ts +0 -39
- package/dist/types/web/src/input/scancodes.d.ts +0 -3
- package/dist/types/web/src/manual/printables/types.d.ts +0 -277
- package/dist/types/web/src/project/bizarre.d.ts +0 -28
- package/dist/types/web/src/project/companion.d.ts +0 -35
- package/dist/types/web/src/project/diskFacts.d.ts +0 -30
- package/dist/types/web/src/project/files.d.ts +0 -124
- package/dist/types/web/src/project/gameFiles.d.ts +0 -49
- package/dist/types/web/src/project/gamePack.d.ts +0 -17
- package/dist/types/web/src/project/health.d.ts +0 -30
- package/dist/types/web/src/project/secretGames.d.ts +0 -19
- package/dist/types/web/src/project/storage.d.ts +0 -46
- package/dist/types/web/src/project/streamGame.d.ts +0 -38
- package/dist/types/web/src/project/zip.d.ts +0 -33
- package/dist/types/web/src/retro/dos/disks.d.ts +0 -33
- package/dist/types/web/src/retro/text/cp437.d.ts +0 -4
- package/dist/types/web/src/seededRandom.d.ts +0 -6
- package/dist/types/web/src/tinHearts/deskHearts.d.ts +0 -33
- package/dist/types/web/src/tinHearts/manifest.d.ts +0 -30
- package/dist/types/web/src/tinHearts/tinHearts.d.ts +0 -84
- package/dist/types/web/src/walkthrough/format.d.ts +0 -92
- package/dist/types/web/src/walkthrough/madeUpScores.d.ts +0 -6
- package/dist/types/web/src/walkthrough/runtime.d.ts +0 -134
- /package/dist/types/{web/src/assistant → image}/png.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/palette.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/pixels.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/reel.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/sound.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/textBounds.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/tune.d.ts +0 -0
- /package/dist/types/{web/src/audio → music}/compose.d.ts +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { packIndices as A, unpackIndices as x } from "./meshPack.js";
|
|
2
|
+
import { write3mf as M } from "../mesh/threeMf.js";
|
|
3
|
+
import { readZip as b } from "../mesh/zipFile.js";
|
|
4
|
+
function D(t, r) {
|
|
5
|
+
return b(M(t, r));
|
|
6
|
+
}
|
|
7
|
+
const y = 1295207751, w = (t) => t.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"').replace(/&/g, "&"), E = (t) => t >= 0 ? t * 2 : -t * 2 - 1, N = (t) => t % 2 ? -(t + 1) / 2 : t / 2;
|
|
8
|
+
function p(t, r) {
|
|
9
|
+
for (let e = 0; e < t.length; e++) {
|
|
10
|
+
let o = t[e];
|
|
11
|
+
for (; o >= 128; )
|
|
12
|
+
r.push(o % 128 | 128), o = Math.floor(o / 128);
|
|
13
|
+
r.push(o);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function F(t) {
|
|
17
|
+
const r = w(/<metadata name="Title">([^<]*)<\/metadata>/.exec(t)?.[1] ?? ""), e = [...t.matchAll(/<base name="[^"]*" displaycolor="#([0-9A-F]{6})"\/>/g)].map(
|
|
18
|
+
(a) => [0, 2, 4].map((l) => parseInt(a[1].slice(l, l + 2), 16))
|
|
19
|
+
), o = [];
|
|
20
|
+
for (const a of t.matchAll(/<object id="\d+" type="model" name="([^"]*)" pid="1" pindex="(\d+)">([\s\S]*?)<\/object>/g)) {
|
|
21
|
+
const l = e[Number(a[2])];
|
|
22
|
+
if (!l) throw new Error("A 3MF part names a color it does not have");
|
|
23
|
+
const i = [];
|
|
24
|
+
for (const c of a[3].matchAll(/<vertex x="([^"]+)" y="([^"]+)" z="([^"]+)"\/>/g)) i.push(...[c[1], c[2], c[3]].map((s) => Math.round(Number(s) * 1e3)));
|
|
25
|
+
const h = [];
|
|
26
|
+
for (const c of a[3].matchAll(/<triangle v1="(\d+)" v2="(\d+)" v3="(\d+)"\/>/g)) h.push(Number(c[1]), Number(c[2]), Number(c[3]));
|
|
27
|
+
o.push({ name: w(a[1]), color: l, ints: Int32Array.from(i), indices: Uint32Array.from(h) });
|
|
28
|
+
}
|
|
29
|
+
return { title: r, parts: o };
|
|
30
|
+
}
|
|
31
|
+
const v = (t) => t.parts.map((r) => ({ name: r.name, color: r.color, mesh: { positions: Float32Array.from(r.ints, (e) => e / 1e3), indices: r.indices } })), I = (t, r) => t.length === r.length && t.every((e, o) => e.name === r[o].name && e.data.length === r[o].data.length && e.data.every((a, l) => a === r[o].data[l]));
|
|
32
|
+
function j(t, r) {
|
|
33
|
+
const e = b(t, r), o = e.find((n) => n.name === "3D/3dmodel.model");
|
|
34
|
+
if (!o) throw new Error("No 3D/3dmodel.model in the file");
|
|
35
|
+
const a = F(new TextDecoder().decode(o.data));
|
|
36
|
+
if (!I(D(v(a), a.title), e)) throw new Error("This 3MF would not be made again the same: not one write3mf wrote");
|
|
37
|
+
const l = new TextEncoder(), i = [], h = (n) => {
|
|
38
|
+
const m = l.encode(n);
|
|
39
|
+
p([m.length], i), i.push(...m);
|
|
40
|
+
};
|
|
41
|
+
h(a.title), p([a.parts.length], i);
|
|
42
|
+
const c = [];
|
|
43
|
+
for (const n of a.parts) {
|
|
44
|
+
h(n.name), i.push(...n.color), p([n.ints.length / 3, n.indices.length / 3], i);
|
|
45
|
+
for (let f = 0; f < 3; f++) {
|
|
46
|
+
const u = [];
|
|
47
|
+
let g = 0;
|
|
48
|
+
for (let d = f; d < n.ints.length; d += 3)
|
|
49
|
+
u.push(E(n.ints[d] - g)), g = n.ints[d];
|
|
50
|
+
p(u, c);
|
|
51
|
+
}
|
|
52
|
+
const m = A(n.indices);
|
|
53
|
+
p([m.length], c);
|
|
54
|
+
for (const f of m) c.push(f);
|
|
55
|
+
}
|
|
56
|
+
const s = new Uint8Array(8 + i.length + c.length);
|
|
57
|
+
return new DataView(s.buffer).setUint32(0, y, !0), new DataView(s.buffer).setUint32(4, i.length, !0), s.set(i, 8), s.set(c, 8 + i.length), s;
|
|
58
|
+
}
|
|
59
|
+
function P(t) {
|
|
60
|
+
const r = new DataView(t.buffer, t.byteOffset, t.byteLength);
|
|
61
|
+
if (t.length < 8 || r.getUint32(0, !0) !== y) throw new Error("Not a packed 3MF");
|
|
62
|
+
let e = 8;
|
|
63
|
+
const o = () => {
|
|
64
|
+
let s = 0, n = 1;
|
|
65
|
+
for (; ; ) {
|
|
66
|
+
if (e >= t.length) throw new Error("Packed 3MF is cut short");
|
|
67
|
+
const m = t[e++];
|
|
68
|
+
if (s += (m & 127) * n, m < 128) return s;
|
|
69
|
+
n *= 128;
|
|
70
|
+
}
|
|
71
|
+
}, a = new TextDecoder(), l = () => {
|
|
72
|
+
const s = o(), n = a.decode(t.subarray(e, e + s));
|
|
73
|
+
return e += s, n;
|
|
74
|
+
}, i = l(), c = Array.from({ length: o() }, () => {
|
|
75
|
+
const s = l(), n = [t[e], t[e + 1], t[e + 2]];
|
|
76
|
+
return e += 3, { name: s, color: n, verts: o(), tris: o() };
|
|
77
|
+
}).map((s) => {
|
|
78
|
+
const n = new Int32Array(s.verts * 3);
|
|
79
|
+
for (let u = 0; u < 3; u++) {
|
|
80
|
+
let g = 0;
|
|
81
|
+
for (let d = u; d < n.length; d += 3) n[d] = g += N(o());
|
|
82
|
+
}
|
|
83
|
+
const m = o(), f = x(t.subarray(e, e + m), s.tris * 3);
|
|
84
|
+
return e += m, { name: s.name, color: s.color, ints: n, indices: f };
|
|
85
|
+
});
|
|
86
|
+
return { title: i, parts: v({ parts: c }) };
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
j as pack3mf,
|
|
90
|
+
D as threeMfEntries,
|
|
91
|
+
P as unpack3mf
|
|
92
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { labOf as C, FLAG_MEAN as V, FLAG_WORST as X } from "./color-reduce.js";
|
|
2
|
+
const Y = 16, Z = 254, tt = 48;
|
|
3
|
+
function ot(p, r) {
|
|
4
|
+
const u = [], w = /* @__PURE__ */ new Set(), A = p.filter((s) => s.distinct > 0).sort((s, g) => g.distinct - s.distinct);
|
|
5
|
+
for (const s of A) {
|
|
6
|
+
const g = Math.min(s.distinct, tt);
|
|
7
|
+
let l;
|
|
8
|
+
for (let n = Y; n + g - 1 <= Z; n++) {
|
|
9
|
+
let d = 0, h = !1;
|
|
10
|
+
for (let i = n; i < n + g; i++) {
|
|
11
|
+
if (w.has(i)) {
|
|
12
|
+
h = !0;
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
d += (r[i] ?? 0) + A.reduce((k, M) => M === s ? k : k + (M.usage[i] ?? 0), 0) - (s.usage[i] ?? 0) * 0.5;
|
|
16
|
+
}
|
|
17
|
+
!h && (!l || d < l.cost) && (l = { start: n, cost: d });
|
|
18
|
+
}
|
|
19
|
+
if (!l) continue;
|
|
20
|
+
let m = 0;
|
|
21
|
+
for (let n = l.start; n < l.start + g; n++)
|
|
22
|
+
w.add(n), m += (r[n] ?? 0) + A.reduce((d, h) => h === s ? d : d + (h.usage[n] ?? 0), 0);
|
|
23
|
+
u.push({ first: l.start, last: l.start + g - 1, role: s.role, conflicts: m });
|
|
24
|
+
}
|
|
25
|
+
return u.sort((s, g) => s.first - g.first);
|
|
26
|
+
}
|
|
27
|
+
const J = (p, r) => p[r * 3] << 12 | p[r * 3 + 1] << 6 | p[r * 3 + 2];
|
|
28
|
+
function st(p, r, u, w, A) {
|
|
29
|
+
const s = w - u + 1, g = new Set(p.flatMap((t) => t.palettes));
|
|
30
|
+
for (const t of g) {
|
|
31
|
+
if (!r.has(t)) return { ok: !1, why: `palette ${t} is missing` };
|
|
32
|
+
const e = A.get(t);
|
|
33
|
+
if (e) {
|
|
34
|
+
for (let a = u; a <= w; a++) if (e.has(a)) return { ok: !1, why: `${t} has other blocks drawing with color ${a}; reduce those colors first` };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const l = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
|
|
38
|
+
p.forEach((t) => {
|
|
39
|
+
const e = r.get(t.palettes[0]);
|
|
40
|
+
for (const a of t.shown)
|
|
41
|
+
for (const c of t.blocks[a]?.pixels ?? []) {
|
|
42
|
+
if (c === 0 || c === 255) continue;
|
|
43
|
+
const f = J(e, c);
|
|
44
|
+
l.set(f, (l.get(f) ?? 0) + 1), m.has(f) || m.set(f, { pal: e, index: c }), c >= u && c <= w && !n.has(f) && n.set(f, c);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
const d = [...l.entries()].sort((t, e) => e[1] - t[1] || t[0] - e[0]), h = d.slice(0, s).map(([t]) => t), i = /* @__PURE__ */ new Map(), k = /* @__PURE__ */ new Set();
|
|
48
|
+
for (const t of h) {
|
|
49
|
+
const e = n.get(t);
|
|
50
|
+
e !== void 0 && !k.has(e) && (i.set(t, e), k.add(e));
|
|
51
|
+
}
|
|
52
|
+
let M = u;
|
|
53
|
+
for (const t of h)
|
|
54
|
+
if (!i.has(t)) {
|
|
55
|
+
for (; k.has(M); ) M++;
|
|
56
|
+
i.set(t, M), k.add(M);
|
|
57
|
+
}
|
|
58
|
+
const K = (t) => C(m.get(t).pal, m.get(t).index), U = new Map(i);
|
|
59
|
+
for (const [t] of d.slice(s)) {
|
|
60
|
+
const e = K(t);
|
|
61
|
+
let a = h[0], c = 1 / 0;
|
|
62
|
+
for (const f of h) {
|
|
63
|
+
const o = K(f), b = Math.hypot(e[0] - o[0], e[1] - o[1], e[2] - o[2]);
|
|
64
|
+
b < c && (c = b, a = f);
|
|
65
|
+
}
|
|
66
|
+
U.set(t, i.get(a));
|
|
67
|
+
}
|
|
68
|
+
const Q = r.get(p[0].palettes[0]), R = new Uint8Array(s * 3);
|
|
69
|
+
R.set(Q.subarray(u * 3, (w + 1) * 3));
|
|
70
|
+
for (const t of h) R.set([t >> 12 & 63, t >> 6 & 63, t & 63], (i.get(t) - u) * 3);
|
|
71
|
+
const $ = /* @__PURE__ */ new Map();
|
|
72
|
+
for (const t of g) {
|
|
73
|
+
const e = r.get(t);
|
|
74
|
+
if (e.subarray(u * 3, (w + 1) * 3).every((c, f) => c === R[f])) continue;
|
|
75
|
+
const a = e.slice();
|
|
76
|
+
a.set(R, u * 3), $.set(t, a);
|
|
77
|
+
}
|
|
78
|
+
const W = /* @__PURE__ */ new Map(), I = [], j = [];
|
|
79
|
+
let z = 0, N = 0, O = 0;
|
|
80
|
+
return p.forEach((t, e) => {
|
|
81
|
+
const a = r.get(t.palettes[0]), c = /* @__PURE__ */ new Map(), f = (o) => o === 0 || o === 255 ? o : U.get(J(a, o)) ?? o;
|
|
82
|
+
for (let o = 0; o < t.blocks.length; o++) {
|
|
83
|
+
const b = t.blocks[o].pixels, B = t.shown.has(o), P = B ? b.map(f) : b;
|
|
84
|
+
if (!B) continue;
|
|
85
|
+
const D = P.some((_, x) => _ !== b[x]);
|
|
86
|
+
D && c.set(o, P);
|
|
87
|
+
let S = 0, y = 0, F = 0;
|
|
88
|
+
for (const _ of t.palettes) {
|
|
89
|
+
const x = r.get(_), G = $.get(_) ?? x;
|
|
90
|
+
for (let L = 0; L < b.length; L++) {
|
|
91
|
+
const [E, T] = [b[L], P[L]];
|
|
92
|
+
if (E === 255 || E === 0 || x[E * 3] === G[T * 3] && x[E * 3 + 1] === G[T * 3 + 1] && x[E * 3 + 2] === G[T * 3 + 2]) continue;
|
|
93
|
+
const [q, v] = [C(x, E), C(G, T)], H = Math.hypot(q[0] - v[0], q[1] - v[1], q[2] - v[2]);
|
|
94
|
+
S += H, y++, F = Math.max(F, H);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
!D && !y || (I.push({ file: e, n: o, mean: y ? S / y : 0 }), y && (S / y > V || F > X) && j.push(o), z += S, N += y, O = Math.max(O, F));
|
|
98
|
+
}
|
|
99
|
+
W.set(e, c);
|
|
100
|
+
}), I.sort((t, e) => e.mean - t.mean), {
|
|
101
|
+
ok: !0,
|
|
102
|
+
pixels: W,
|
|
103
|
+
palettes: $,
|
|
104
|
+
score: { mean: N ? z / N : 0, worst: O, flagged: j },
|
|
105
|
+
changed: I,
|
|
106
|
+
used: h.length,
|
|
107
|
+
reduced: Math.max(0, d.length - s)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export {
|
|
111
|
+
Y as FIRST_FREE,
|
|
112
|
+
Z as LAST_FREE,
|
|
113
|
+
tt as RANGE_CAP,
|
|
114
|
+
ot as planRanges,
|
|
115
|
+
st as syncRange
|
|
116
|
+
};
|
package/dist/palettes.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { colorRamp as s } from "./colors.js";
|
|
2
|
+
const l = `
|
|
3
|
+
000000 404040 6c6c6c 909090 b0b0b0 c8c8c8 dcdcdc ececec
|
|
4
|
+
444400 646410 848424 a0a034 b8b840 d0d050 e8e85c fcfc68
|
|
5
|
+
702800 844414 985c28 ac783c bc8c4c cca05c dcb468 e8cc7c
|
|
6
|
+
841800 983418 ac5030 c06848 d0805c e09470 eca880 fcbc94
|
|
7
|
+
880000 9c2020 b03c3c c05858 d07070 e08888 eca0a0 fcb4b4
|
|
8
|
+
78005c 8c2074 a03c88 b0589c c070b0 d084c0 dc9cd0 ecb0e0
|
|
9
|
+
480078 602090 783ca4 8c58b8 a070cc b484dc c49cec d4b0fc
|
|
10
|
+
140084 302098 4c3cac 6858c0 7c70d0 9488e0 a8a0ec bcb4fc
|
|
11
|
+
000088 1c209c 3840b0 505cc0 6874d0 7c8ce0 90a4ec a4b8fc
|
|
12
|
+
00187c 1c3890 3854a8 5070bc 6888cc 7c9cdc 90b4ec a4c8fc
|
|
13
|
+
002c5c 1c4c78 386890 5084ac 689cc0 7cb4d4 90cce8 a4e0fc
|
|
14
|
+
00402c 1c5c48 387c64 509c80 68b494 7cd0ac 90e4c0 a4fcd4
|
|
15
|
+
003c00 205c20 407c40 5c9c5c 74b474 8cd08c a4e4a4 b8fcb8
|
|
16
|
+
143800 345c1c 507c38 6c9850 84b468 9ccc7c b4e490 c8fca4
|
|
17
|
+
2c3000 4c501c 687034 848c4c 9ca864 b4c078 ccd488 e0ec9c
|
|
18
|
+
442800 644818 846830 a08444 b89c58 d0b46c e8cc7c fce08c
|
|
19
|
+
`, w = `
|
|
20
|
+
000000 404040 6c6c6c 909090 b0b0b0 c8c8c8 dcdcdc ececec
|
|
21
|
+
805800 947020 a8843c bc9c58 ccac70 dcc084 ecd09c fce0b0
|
|
22
|
+
445c00 5c7820 74903c 8cac58 a0c070 b0d484 c0e89c d4fcb0
|
|
23
|
+
703400 885020 a0683c b48458 c89870 dcac84 ecc09c fcd4b0
|
|
24
|
+
006414 208034 3c9850 58b06c 70c484 84d89c 9ce8b4 b0fcc8
|
|
25
|
+
700014 882034 a03c50 b4586c c87084 dc849c ec9cb4 fcb0c8
|
|
26
|
+
005c5c 207474 3c8c8c 58a4a4 70b8b8 84c8c8 9cdcdc b0ecec
|
|
27
|
+
70005c 842074 943c88 a8589c b470b0 c484c0 d09cd0 e0b0e0
|
|
28
|
+
003c70 1c5888 3874a0 508cb4 68a4c8 7cb8dc 90ccec a4e0fc
|
|
29
|
+
580070 6c2088 803ca0 9458b4 a470c8 b484dc c49cec d4b0fc
|
|
30
|
+
002070 1c3c88 3858a0 5074b4 6888c8 7ca0dc 90b4ec a4c8fc
|
|
31
|
+
3c0080 542094 6c3ca8 8058bc 9470cc a884dc b89cec c8b0fc
|
|
32
|
+
000088 20209c 3c3cb0 5858c0 7070d0 8484e0 9c9cec b0b0fc
|
|
33
|
+
`, m = `
|
|
34
|
+
575757 000c8e 0800a6 340096 550061 630015 5a0000 3c0e00
|
|
35
|
+
112800 003b00 004200 003a05 002652 000000 a5a5a5 0041d9
|
|
36
|
+
2f1eff 6704f2 9400b4 aa0057 a31800 803900 4b5b00 137600
|
|
37
|
+
008100 007923 006288 ffffff 4a9fff 797eff af63ff dd55ff
|
|
38
|
+
f757c2 f76a63 dc8810 aea900 78c400 4ad211 2fcf64 2fbdc4
|
|
39
|
+
414141 b9ddff cad1ff dec6ff f0c0ff fcc0ee fdc6ca f5d0aa
|
|
40
|
+
e4dd95 d0e892 bdeea2 b2eec0 b0e8e3 b3b3b3
|
|
41
|
+
`, i = `
|
|
42
|
+
000000 ffffff fa3200 1de0ff a84bcc 68ba51 004ad0 ffe94d
|
|
43
|
+
ff5b00 c13e00 ff723e 605e62 8c937f b2ff90 458aff c3b8d7
|
|
44
|
+
`, t = (c) => c.trim().split(/\s+/).map((A) => [0, 2, 4].map((a) => parseInt(A.slice(a, a + 2), 16))), d = (c) => s(c, [0, 0, 0], [255, 255, 255]), r = () => Array.from({ length: 16 }, (c, A) => A === 6 ? [170, 85, 0] : [4, 2, 1].map((a) => (A & a ? 170 : 0) + (A & 8 ? 85 : 0))), e = (c, A, a, b, f, o) => ({
|
|
45
|
+
id: c,
|
|
46
|
+
name: A,
|
|
47
|
+
stem: a,
|
|
48
|
+
entries: b,
|
|
49
|
+
description: f,
|
|
50
|
+
colors: o
|
|
51
|
+
}), B = () => [
|
|
52
|
+
e("amber", "Monochrome amber", "monoamb", 32, "32 shades from black to warm amber.", () => s(32, [0, 0, 0], [255, 184, 48])),
|
|
53
|
+
e("green", "Monochrome green", "monogrn", 32, "32 shades from black to phosphor green.", () => s(32, [0, 0, 0], [64, 255, 96])),
|
|
54
|
+
e("white", "Monochrome white", "monowht", 32, "32 shades from black to white.", () => d(32)),
|
|
55
|
+
e(
|
|
56
|
+
"atari-ntsc",
|
|
57
|
+
"Atari 2600 NTSC",
|
|
58
|
+
"atntsc",
|
|
59
|
+
128,
|
|
60
|
+
"128 TIA color slots, using Ricardo Cancho Niemietz’s RGB reference approximation.",
|
|
61
|
+
() => t(l)
|
|
62
|
+
),
|
|
63
|
+
e("atari-pal", "Atari 2600 PAL", "atpal", 104, "104 colors after removing repeated gray columns from the PAL reference.", () => t(w)),
|
|
64
|
+
e("nes", "NES · 54 colors", "nes54", 54, "Persune’s unemphasized 2C02G US reference, adapted to VGA.", () => t(m)),
|
|
65
|
+
e("cga-cyan", "CGA cyan / magenta", "cga0", 4, "Black, bright cyan, bright magenta and white.", () => [r()[0], r()[11], r()[13], r()[15]]),
|
|
66
|
+
e("cga-green", "CGA green / red / brown", "cga1", 4, "Black, green, red and orange-brown, with the RGBI brown correction.", () => [
|
|
67
|
+
r()[0],
|
|
68
|
+
r()[2],
|
|
69
|
+
r()[4],
|
|
70
|
+
r()[6]
|
|
71
|
+
]),
|
|
72
|
+
e("ega", "EGA · 16 colors", "ega16", 16, "The standard 16 RGBI colors, with brown corrected.", r),
|
|
73
|
+
e("ega-skin", "EGA + skin tones & hair", "egaskin", 28, "The 16 EGA colors plus three project-designed four-color skin and hair ramps.", () => [
|
|
74
|
+
...r(),
|
|
75
|
+
...s(4, [92, 48, 28], [255, 226, 194]),
|
|
76
|
+
...s(4, [46, 26, 22], [163, 107, 74]),
|
|
77
|
+
...s(4, [20, 15, 15], [158, 123, 60])
|
|
78
|
+
]),
|
|
79
|
+
e(
|
|
80
|
+
"gameboy",
|
|
81
|
+
"Game Boy greens",
|
|
82
|
+
"gbgreen",
|
|
83
|
+
5,
|
|
84
|
+
"Four project-designed LCD greens, plus black at index 0 for menus.",
|
|
85
|
+
() => s(4, [20, 52, 20], [188, 212, 96])
|
|
86
|
+
),
|
|
87
|
+
e(
|
|
88
|
+
"sega",
|
|
89
|
+
"Sega Master System · 64 colors",
|
|
90
|
+
"sms64",
|
|
91
|
+
64,
|
|
92
|
+
"SMS2 RGB colors: two bits per channel.",
|
|
93
|
+
() => Array.from({ length: 64 }, (c, A) => [(A & 3) * 85, (A >> 2 & 3) * 85, (A >> 4 & 3) * 85])
|
|
94
|
+
),
|
|
95
|
+
e("c64", "Commodore 64 · 16 colors", "c64ntsc", 16, "Groepaz’s NTSC CXA2025 reference, with menu black normalized.", () => t(i)),
|
|
96
|
+
e(
|
|
97
|
+
"websafe",
|
|
98
|
+
"Web-safe · 216 colors",
|
|
99
|
+
"websafe",
|
|
100
|
+
216,
|
|
101
|
+
"The six-level RGB cube, rounded to VGA’s channel levels.",
|
|
102
|
+
() => Array.from({ length: 216 }, (c, A) => [Math.floor(A / 36) * 51, Math.floor(A / 6) % 6 * 51, A % 6 * 51])
|
|
103
|
+
),
|
|
104
|
+
...[4, 8, 16, 32, 64, 128].map(
|
|
105
|
+
(c) => e(
|
|
106
|
+
`gray-${c}`,
|
|
107
|
+
`Grayscale · ${c} steps`,
|
|
108
|
+
`gray${c}`,
|
|
109
|
+
c,
|
|
110
|
+
c === 128 ? "128 steps; VGA can represent 64 distinct gray shades, so adjacent steps repeat." : `${c} evenly spaced gray shades.`,
|
|
111
|
+
() => d(c)
|
|
112
|
+
)
|
|
113
|
+
)
|
|
114
|
+
];
|
|
115
|
+
let p;
|
|
116
|
+
const g = () => p ??= B(), P = () => Object.freeze(g().map(({ colors: c, ...A }) => Object.freeze(A))), C = /* @__PURE__ */ P();
|
|
117
|
+
function G(c) {
|
|
118
|
+
const A = g().find((o) => o.id === c);
|
|
119
|
+
if (!A) throw new RangeError(`Unknown palette preset: ${c}`);
|
|
120
|
+
const a = [...A.colors()], b = a.findIndex((o) => o.every((n) => n === 0));
|
|
121
|
+
b >= 0 && a.splice(b, 1), a.unshift([0, 0, 0]);
|
|
122
|
+
const f = new Uint8Array(768);
|
|
123
|
+
return a.slice(0, 255).forEach(
|
|
124
|
+
(o, n) => f.set(
|
|
125
|
+
o.map((h) => Math.round(h * 63 / 255)),
|
|
126
|
+
n * 3
|
|
127
|
+
)
|
|
128
|
+
), f;
|
|
129
|
+
}
|
|
130
|
+
const D = "AAAAAAAHAAAKAAANAAASAAAXAAAcAAAhAAAmAAArAAAwAAA1AAA5AAA8AAA/Pz8hAAgAAA0AABIAABcAABwAACEAACYAACsAADAAADUAADoAAD8AAAkFAAwGABAIABgMACAQACgUADAYADgcAD8gGT8hID8mKz8rMD8wMj8yDBAAEBYAFBsAGCAAHCQAICkAJDAACBIABRMGAAwJABIOABgSAB4XACQbACofADEoADgqAD8wAAgIAAwMABISABcXABwcACEhACYmACsrADAwADU1ADo6AD8/GT8/Iz8/LT8/CAoQDhEcDhUcDhgcDhwcAAgLAAwQABEWABUcABskCAAADQAAEgAAFwAAHAAAIQAAJgAAKwAAMAAANQAAOgAAPwAADAMAEAUAGAgAIAkAKAsAMAwANw4APxAAFAADHAAGKgQJOQsPPA4SPxEVEAgAFgsAGg0AIBAAJBIALBYAMhkAOBwAPyAAPy0EDgcEEgkFFgsGGg0HHg8IIhEJJhMKKhULLhcMMhkNNhsOOSERPCUXPyobPy4jCAgADQ0AEhIAFxcAHBwBISEAJiYAKysAMDAANTUAOjoAPz8APz8QPz8YPz8gPz8oPz8wDg4IFhYMHBwOIiIRLCwWNjYbCQEADAMAEAQAFAUAGAYACgcEEAwIFBAMGBQQHBgUEAAQGAAYIQAhJgAmKwArMAAwNQA1OgA6PwA/DQAREQAVFQAcGgAhHwAmJAAsJwAyKgA4Lgg/LBUmDw8WFhYeGxsmICAsIyMxJiY1KSk4LCw8MDA/NTU/CAgIDQ0NEhISFxcXHBwcISEhJiYmKysrMDAwNTU1Ojo6Pz8/MhgbOBwgPyEhPyYmPysrPzIyEAAIGQANIQATKAAWLgAZNAAcOgAfPwAhPwokPxQnPxgsPxwwPx81PyY7Pyw/LT82Nj8qMDA/Mz8TPzotLTY/LT8/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/BgsX";
|
|
131
|
+
function I() {
|
|
132
|
+
return Uint8Array.from(atob(D), (c) => c.charCodeAt(0));
|
|
133
|
+
}
|
|
134
|
+
export {
|
|
135
|
+
C as PALETTE_PRESETS,
|
|
136
|
+
G as createPalettePreset,
|
|
137
|
+
I as libraryDefaultPalette
|
|
138
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const s = [
|
|
2
|
+
["gam", "game file", "game files"],
|
|
3
|
+
["map", "map", "maps"],
|
|
4
|
+
["bbl", "background block set", "background block sets"],
|
|
5
|
+
["mbl", "monster block set", "monster block sets"],
|
|
6
|
+
["cbl", "character block set", "character block sets"],
|
|
7
|
+
["chr", "character", "characters"],
|
|
8
|
+
["mon", "monster set", "monster sets"],
|
|
9
|
+
["pal", "palette", "palettes"],
|
|
10
|
+
["gif", "picture", "pictures"],
|
|
11
|
+
["fli", "animation", "animations"],
|
|
12
|
+
["voc", "sound", "sounds"],
|
|
13
|
+
["text", "text file", "text files"]
|
|
14
|
+
], h = ["other file", "other files"];
|
|
15
|
+
const d = (e) => e.toUpperCase(), a = (e) => {
|
|
16
|
+
const t = s.findIndex(([n]) => n === e);
|
|
17
|
+
return t < 0 ? s.length : t;
|
|
18
|
+
};
|
|
19
|
+
function m(e) {
|
|
20
|
+
const t = e.slice(0, 4).map(d).join(", ");
|
|
21
|
+
return e.length > 4 ? `${t} and ${e.length - 4} more` : t;
|
|
22
|
+
}
|
|
23
|
+
function c(e) {
|
|
24
|
+
const t = /* @__PURE__ */ new Map();
|
|
25
|
+
for (const n of e) {
|
|
26
|
+
const o = s.some(([r]) => r === n.kind) ? n.kind : "other";
|
|
27
|
+
t.set(o, [...t.get(o) ?? [], n.name]);
|
|
28
|
+
}
|
|
29
|
+
return [...t.entries()].sort((n, o) => a(n[0]) - a(o[0])).map(([n, o]) => {
|
|
30
|
+
const [r, i] = s.find(([l]) => l === n)?.slice(1) ?? h;
|
|
31
|
+
return `${o.length} ${o.length === 1 ? r : i} (${m(o)})`;
|
|
32
|
+
}).join(", ");
|
|
33
|
+
}
|
|
34
|
+
function p(e) {
|
|
35
|
+
const t = [];
|
|
36
|
+
return e.changed.length && t.push(`Changed ${c(e.changed)}.`), e.added.length && t.push(`Added ${c(e.added)}.`), e.removed.length && t.push(`Removed ${c(e.removed)}.`), t.join(" ");
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
p as releaseNotes
|
|
40
|
+
};
|