@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.
Files changed (343) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/NOTICE.md +105 -3
  3. package/README.md +301 -15
  4. package/dist/audio-files.js +82 -0
  5. package/dist/audio.js +23 -138
  6. package/dist/block-merge.js +43 -0
  7. package/dist/color-reduce.js +44 -0
  8. package/dist/colors.js +87 -0
  9. package/dist/delta.js +75 -0
  10. package/dist/disk-diff.js +220 -0
  11. package/dist/drawing.js +83 -869
  12. package/dist/embroidery/compile.js +85 -0
  13. package/dist/embroidery/dst.js +79 -0
  14. package/dist/embroidery/exp.js +26 -0
  15. package/dist/embroidery/fill.js +49 -0
  16. package/dist/embroidery/geom.js +82 -0
  17. package/dist/embroidery/pes.js +79 -0
  18. package/dist/embroidery/satin.js +29 -0
  19. package/dist/embroidery/simulate.js +30 -0
  20. package/dist/embroidery/strokeFont.js +253 -0
  21. package/dist/embroidery/svg.js +24 -0
  22. package/dist/embroidery/types.js +13 -0
  23. package/dist/embroidery/units.js +26 -0
  24. package/dist/embroidery/validate.js +15 -0
  25. package/dist/formats/blocks.js +1 -103
  26. package/dist/formats/character.js +1 -83
  27. package/dist/formats/cmf.js +1 -37
  28. package/dist/formats/fli.js +1 -296
  29. package/dist/formats/fliLimits.js +1 -54
  30. package/dist/formats/game.js +1 -193
  31. package/dist/formats/gif.js +1 -125
  32. package/dist/formats/graphicScripts.js +1 -44
  33. package/dist/formats/map.js +1 -38
  34. package/dist/formats/monster.js +1 -69
  35. package/dist/formats/palette.js +1 -58
  36. package/dist/formats/recording.js +1 -17
  37. package/dist/formats/sound.js +1 -44
  38. package/dist/formats/voc.js +1 -303
  39. package/dist/gif-shrink.js +56 -0
  40. package/dist/image/png.js +42 -0
  41. package/dist/images.js +81 -43
  42. package/dist/kit/actors.js +19 -0
  43. package/dist/kit/align.js +204 -0
  44. package/dist/kit/blit.js +45 -0
  45. package/dist/kit/blockRoles.js +97 -0
  46. package/dist/kit/clips.js +40 -0
  47. package/dist/kit/coverPaint.js +18 -0
  48. package/dist/kit/disk.js +76 -0
  49. package/dist/kit/fadeOut.js +13 -0
  50. package/dist/kit/fliClips.js +133 -0
  51. package/dist/kit/fliShrink.js +277 -0
  52. package/dist/kit/gameSim.js +235 -0
  53. package/dist/kit/hopBot.js +142 -0
  54. package/dist/kit/levelGen.js +1423 -0
  55. package/dist/kit/levelGrid.js +33 -0
  56. package/dist/kit/levelPicture.js +27 -0
  57. package/dist/kit/menuVersion.js +19 -0
  58. package/dist/kit/microText.js +35 -0
  59. package/dist/kit/mumble.js +74 -0
  60. package/dist/kit/music.js +8 -0
  61. package/dist/kit/palRamps.js +32 -0
  62. package/dist/kit/palette.js +49 -0
  63. package/dist/kit/pcText.js +72 -0
  64. package/dist/kit/photo.js +150 -0
  65. package/dist/kit/pixels.js +79 -0
  66. package/dist/kit/png.js +40 -0
  67. package/dist/kit/quantize.js +72 -0
  68. package/dist/kit/raytrace.js +379 -0
  69. package/dist/kit/recordedDemo.js +10 -0
  70. package/dist/kit/reel.js +77 -0
  71. package/dist/kit/road3d.js +67 -0
  72. package/dist/kit/routeChecks.js +8 -0
  73. package/dist/kit/saveSlots.js +11 -0
  74. package/dist/kit/sceneInit.js +13 -0
  75. package/dist/kit/sceneSim.js +112 -0
  76. package/dist/kit/screenText.js +15 -0
  77. package/dist/kit/sdftext.js +237 -0
  78. package/dist/kit/shading.js +69 -0
  79. package/dist/kit/song.js +251 -0
  80. package/dist/kit/songFx.js +179 -0
  81. package/dist/kit/sound.js +52 -0
  82. package/dist/kit/synthParts.js +20 -0
  83. package/dist/kit/tar.js +53 -0
  84. package/dist/kit/textBounds.js +84 -0
  85. package/dist/kit/textfit.js +246 -0
  86. package/dist/kit/transforms.js +57 -0
  87. package/dist/kit/tune.js +21 -0
  88. package/dist/look-alike.js +50 -0
  89. package/dist/menu-version.js +4 -0
  90. package/dist/mesh/colorBodies.js +137 -0
  91. package/dist/mesh/decimate.js +207 -0
  92. package/dist/mesh/meshCheck.js +51 -0
  93. package/dist/mesh/overhang.js +41 -0
  94. package/dist/mesh/sampledField.js +12 -0
  95. package/dist/mesh/stl.js +36 -0
  96. package/dist/mesh/surfaceNets.js +79 -0
  97. package/dist/mesh/tetraMesh.js +62 -0
  98. package/dist/mesh/threeMf.js +58 -0
  99. package/dist/mesh/zipFile.js +52 -0
  100. package/dist/microFont.js +101 -0
  101. package/dist/music/compose.js +72 -0
  102. package/dist/pack/meshPack.js +198 -0
  103. package/dist/pack/threeMfPack.js +92 -0
  104. package/dist/palette-reserve.js +116 -0
  105. package/dist/palettes.js +138 -0
  106. package/dist/release-notes.js +40 -0
  107. package/dist/simulation.js +16 -2774
  108. package/dist/text.js +74 -0
  109. package/dist/types/audio.d.ts +4 -0
  110. package/dist/types/audioFiles.d.ts +22 -0
  111. package/dist/types/audioWav.d.ts +4 -0
  112. package/dist/types/blockMerge.d.ts +24 -0
  113. package/dist/types/colorReduce.d.ts +23 -0
  114. package/dist/types/{web/packages/tools/src/colors.d.ts → colors.d.ts} +6 -0
  115. package/dist/types/delta.d.ts +32 -0
  116. package/dist/types/diskDiff.d.ts +47 -0
  117. package/dist/types/drawing.d.ts +15 -0
  118. package/dist/types/embroidery/compile.d.ts +3 -0
  119. package/dist/types/embroidery/dst.d.ts +13 -0
  120. package/dist/types/embroidery/exp.d.ts +8 -0
  121. package/dist/types/embroidery/fill.d.ts +6 -0
  122. package/dist/types/embroidery/geom.d.ts +19 -0
  123. package/dist/types/embroidery/pes.d.ts +10 -0
  124. package/dist/types/embroidery/satin.d.ts +11 -0
  125. package/dist/types/embroidery/simulate.d.ts +19 -0
  126. package/dist/types/embroidery/strokeFont.d.ts +20 -0
  127. package/dist/types/embroidery/svg.d.ts +3 -0
  128. package/dist/types/embroidery/types.d.ts +70 -0
  129. package/dist/types/embroidery/units.d.ts +10 -0
  130. package/dist/types/embroidery/validate.d.ts +22 -0
  131. package/dist/types/formats/blocks.d.ts +1 -0
  132. package/dist/types/formats/character.d.ts +1 -0
  133. package/dist/types/formats/cmf.d.ts +1 -0
  134. package/dist/types/formats/fli.d.ts +1 -0
  135. package/dist/types/formats/fliLimits.d.ts +1 -0
  136. package/dist/types/formats/game.d.ts +1 -0
  137. package/dist/types/formats/gif.d.ts +1 -0
  138. package/dist/types/formats/graphicScripts.d.ts +1 -0
  139. package/dist/types/formats/map.d.ts +1 -0
  140. package/dist/types/formats/monster.d.ts +1 -0
  141. package/dist/types/formats/palette.d.ts +1 -0
  142. package/dist/types/formats/recording.d.ts +1 -0
  143. package/dist/types/formats/sound.d.ts +1 -0
  144. package/dist/types/formats/voc.d.ts +1 -0
  145. package/dist/types/gifShrink.d.ts +8 -0
  146. package/dist/types/image/animatedGif.d.ts +9 -0
  147. package/dist/types/image/surface.d.ts +26 -0
  148. package/dist/types/images.d.ts +13 -0
  149. package/dist/types/kit/actors.d.ts +7 -0
  150. package/dist/types/kit/align.d.ts +93 -0
  151. package/dist/types/kit/audioEvents.d.ts +26 -0
  152. package/dist/types/kit/blit.d.ts +20 -0
  153. package/dist/types/kit/blockRoles.d.ts +243 -0
  154. package/dist/types/{games/kit → kit}/clips.d.ts +1 -1
  155. package/dist/types/kit/coverPaint.d.ts +7 -0
  156. package/dist/types/kit/disk.d.ts +15 -0
  157. package/dist/types/kit/fadeOut.d.ts +12 -0
  158. package/dist/types/kit/fliClips.d.ts +32 -0
  159. package/dist/types/kit/fliShrink.d.ts +149 -0
  160. package/dist/types/{games/kit → kit}/gameSim.d.ts +9 -5
  161. package/dist/types/kit/hopBot.d.ts +72 -0
  162. package/dist/types/kit/laserClearance.d.ts +16 -0
  163. package/dist/types/kit/laserJoints.d.ts +39 -0
  164. package/dist/types/kit/laserLayout.d.ts +54 -0
  165. package/dist/types/kit/laserPixels.d.ts +52 -0
  166. package/dist/types/kit/laserPreview.d.ts +9 -0
  167. package/dist/types/kit/laserSvg.d.ts +35 -0
  168. package/dist/types/kit/levelGen/castle.d.ts +17 -0
  169. package/dist/types/kit/levelGen/dungeon.d.ts +11 -0
  170. package/dist/types/kit/levelGen/forest.d.ts +17 -0
  171. package/dist/types/kit/levelGen/furnish.d.ts +31 -0
  172. package/dist/types/kit/levelGen/grid.d.ts +46 -0
  173. package/dist/types/kit/levelGen/index.d.ts +138 -0
  174. package/dist/types/kit/levelGen/interior.d.ts +18 -0
  175. package/dist/types/kit/levelGen/jumpModel.d.ts +78 -0
  176. package/dist/types/kit/levelGen/needs.d.ts +44 -0
  177. package/dist/types/kit/levelGen/overworld.d.ts +21 -0
  178. package/dist/types/kit/levelGen/platform.d.ts +59 -0
  179. package/dist/types/kit/levelGen/platformCap.d.ts +13 -0
  180. package/dist/types/kit/levelGen/platformReach.d.ts +37 -0
  181. package/dist/types/kit/levelGen/props.d.ts +37 -0
  182. package/dist/types/kit/levelGen/town.d.ts +24 -0
  183. package/dist/types/kit/levelGrid.d.ts +16 -0
  184. package/dist/types/kit/levelPicture.d.ts +9 -0
  185. package/dist/types/kit/menuVersion.d.ts +7 -0
  186. package/dist/types/kit/microText.d.ts +18 -0
  187. package/dist/types/kit/mumble.d.ts +41 -0
  188. package/dist/types/kit/music.d.ts +1 -0
  189. package/dist/types/kit/palMerge.d.ts +10 -0
  190. package/dist/types/kit/palRamps.d.ts +28 -0
  191. package/dist/types/kit/pcText.d.ts +19 -0
  192. package/dist/types/kit/photo.d.ts +69 -0
  193. package/dist/types/kit/png.d.ts +7 -0
  194. package/dist/types/kit/quantize.d.ts +20 -0
  195. package/dist/types/kit/raytrace.d.ts +169 -0
  196. package/dist/types/kit/recordedDemo.d.ts +1 -0
  197. package/dist/types/kit/road3d.d.ts +71 -0
  198. package/dist/types/kit/routeChecks.d.ts +6 -0
  199. package/dist/types/kit/saveSlots.d.ts +17 -0
  200. package/dist/types/kit/sceneInit.d.ts +11 -0
  201. package/dist/types/{games/kit → kit}/sceneSim.d.ts +5 -5
  202. package/dist/types/kit/screenText.d.ts +3 -0
  203. package/dist/types/kit/sdftext.d.ts +34 -0
  204. package/dist/types/kit/shading.d.ts +23 -0
  205. package/dist/types/kit/shareBlocks.d.ts +20 -0
  206. package/dist/types/kit/song.d.ts +89 -0
  207. package/dist/types/kit/songFx.d.ts +99 -0
  208. package/dist/types/kit/synthParts.d.ts +7 -0
  209. package/dist/types/kit/tar.d.ts +13 -0
  210. package/dist/types/kit/textfit.d.ts +74 -0
  211. package/dist/types/kit/transforms.d.ts +8 -0
  212. package/dist/types/lookAlike.d.ts +31 -0
  213. package/dist/types/menuVersionEntry.d.ts +1 -0
  214. package/dist/types/mesh/colorBodies.d.ts +18 -0
  215. package/dist/types/mesh/decimate.d.ts +10 -0
  216. package/dist/types/mesh/fieldTrinket.d.ts +40 -0
  217. package/dist/types/mesh/figureShapes.d.ts +24 -0
  218. package/dist/types/mesh/mesh.d.ts +9 -0
  219. package/dist/types/mesh/meshCheck.d.ts +22 -0
  220. package/dist/types/mesh/overhang.d.ts +24 -0
  221. package/dist/types/mesh/pixelFigure.d.ts +41 -0
  222. package/dist/types/mesh/sampledField.d.ts +3 -0
  223. package/dist/types/mesh/sdfShapes.d.ts +20 -0
  224. package/dist/types/mesh/stl.d.ts +9 -0
  225. package/dist/types/mesh/strokeText.d.ts +8 -0
  226. package/dist/types/mesh/surfaceNets.d.ts +14 -0
  227. package/dist/types/mesh/tetraMesh.d.ts +4 -0
  228. package/dist/types/mesh/threeMf.d.ts +12 -0
  229. package/dist/types/mesh/trinketKinds.d.ts +72 -0
  230. package/dist/types/mesh/trinketTool.d.ts +26 -0
  231. package/dist/types/mesh/voxel.d.ts +10 -0
  232. package/dist/types/mesh/zipFile.d.ts +13 -0
  233. package/dist/types/microFont.d.ts +6 -0
  234. package/dist/types/pack/meshPack.d.ts +26 -0
  235. package/dist/types/pack/threeMfPack.d.ts +11 -0
  236. package/dist/types/palettePresetData.d.ts +4 -0
  237. package/dist/types/palettePresets.d.ts +12 -0
  238. package/dist/types/paletteReserve.d.ts +52 -0
  239. package/dist/types/palettes.d.ts +4 -0
  240. package/dist/types/releaseNotes.d.ts +3 -0
  241. package/dist/types/simulation.d.ts +6 -0
  242. package/dist/types/{web/packages/tools/src/text.d.ts → text.d.ts} +6 -6
  243. package/package.json +145 -15
  244. package/dist/binary-D7wuaC5g.js +0 -120
  245. package/dist/pixels-DzfIIUOl.js +0 -76
  246. package/dist/types/games/kit/blit.d.ts +0 -10
  247. package/dist/types/games/kit/music.d.ts +0 -1
  248. package/dist/types/games/kit/pcText.d.ts +0 -8
  249. package/dist/types/games/kit/shading.d.ts +0 -11
  250. package/dist/types/web/packages/tools/src/audio.d.ts +0 -3
  251. package/dist/types/web/packages/tools/src/drawing.d.ts +0 -10
  252. package/dist/types/web/packages/tools/src/images.d.ts +0 -2
  253. package/dist/types/web/packages/tools/src/microFont.d.ts +0 -1
  254. package/dist/types/web/packages/tools/src/simulation.d.ts +0 -3
  255. package/dist/types/web/scripts/cdGames.d.ts +0 -103
  256. package/dist/types/web/scripts/gameShots.d.ts +0 -12
  257. package/dist/types/web/scripts/ogImage.d.ts +0 -21
  258. package/dist/types/web/src/audio/cmfLoad.d.ts +0 -7
  259. package/dist/types/web/src/audio/cmfPlayer.d.ts +0 -69
  260. package/dist/types/web/src/audio/context.d.ts +0 -12
  261. package/dist/types/web/src/audio/engine.d.ts +0 -39
  262. package/dist/types/web/src/audio/music.worklet.d.ts +0 -14
  263. package/dist/types/web/src/audio/opl.d.ts +0 -37
  264. package/dist/types/web/src/audio/output.d.ts +0 -13
  265. package/dist/types/web/src/desk/boxes/boxFacts.d.ts +0 -85
  266. package/dist/types/web/src/dosPlayer/fileExtensions.d.ts +0 -44
  267. package/dist/types/web/src/dosPlayer/patchRules.d.ts +0 -24
  268. package/dist/types/web/src/dosPlayer/patchTable.d.ts +0 -80
  269. package/dist/types/web/src/edition.d.ts +0 -6
  270. package/dist/types/web/src/eggs/eggState.d.ts +0 -26
  271. package/dist/types/web/src/eggs/eggs.d.ts +0 -31
  272. package/dist/types/web/src/engine/character.d.ts +0 -30
  273. package/dist/types/web/src/engine/funcKeys.d.ts +0 -33
  274. package/dist/types/web/src/engine/game.d.ts +0 -52
  275. package/dist/types/web/src/engine/keys.d.ts +0 -17
  276. package/dist/types/web/src/engine/machine.d.ts +0 -99
  277. package/dist/types/web/src/engine/menus.d.ts +0 -46
  278. package/dist/types/web/src/engine/monsters.d.ts +0 -19
  279. package/dist/types/web/src/engine/playGain.d.ts +0 -11
  280. package/dist/types/web/src/engine/playerLook.d.ts +0 -26
  281. package/dist/types/web/src/engine/recorder.d.ts +0 -60
  282. package/dist/types/web/src/engine/render.d.ts +0 -8
  283. package/dist/types/web/src/engine/scene.d.ts +0 -156
  284. package/dist/types/web/src/engine/scroll.d.ts +0 -16
  285. package/dist/types/web/src/engine/showGraphic.d.ts +0 -39
  286. package/dist/types/web/src/engine/slowPc.d.ts +0 -62
  287. package/dist/types/web/src/engine/touch.d.ts +0 -33
  288. package/dist/types/web/src/engine/world.d.ts +0 -215
  289. package/dist/types/web/src/export/gameAbout.d.ts +0 -15
  290. package/dist/types/web/src/formats/binary.d.ts +0 -44
  291. package/dist/types/web/src/formats/blocks.d.ts +0 -52
  292. package/dist/types/web/src/formats/character.d.ts +0 -65
  293. package/dist/types/web/src/formats/cmf.d.ts +0 -33
  294. package/dist/types/web/src/formats/fli.d.ts +0 -45
  295. package/dist/types/web/src/formats/fliLimits.d.ts +0 -13
  296. package/dist/types/web/src/formats/game.d.ts +0 -72
  297. package/dist/types/web/src/formats/gif.d.ts +0 -15
  298. package/dist/types/web/src/formats/graphicScripts.d.ts +0 -18
  299. package/dist/types/web/src/formats/highscore.d.ts +0 -10
  300. package/dist/types/web/src/formats/map.d.ts +0 -24
  301. package/dist/types/web/src/formats/monster.d.ts +0 -48
  302. package/dist/types/web/src/formats/palette.d.ts +0 -15
  303. package/dist/types/web/src/formats/recording.d.ts +0 -7
  304. package/dist/types/web/src/formats/sound.d.ts +0 -13
  305. package/dist/types/web/src/formats/voc.d.ts +0 -13
  306. package/dist/types/web/src/gfx/cp437Glyphs.d.ts +0 -2
  307. package/dist/types/web/src/gfx/font8x8.d.ts +0 -2
  308. package/dist/types/web/src/gfx/levelPicture.d.ts +0 -81
  309. package/dist/types/web/src/gfx/screen.d.ts +0 -46
  310. package/dist/types/web/src/gfx/titlePicture.d.ts +0 -21
  311. package/dist/types/web/src/input/chords.d.ts +0 -22
  312. package/dist/types/web/src/input/deskMouse.d.ts +0 -14
  313. package/dist/types/web/src/input/keyboard.d.ts +0 -39
  314. package/dist/types/web/src/input/scancodes.d.ts +0 -3
  315. package/dist/types/web/src/manual/printables/types.d.ts +0 -277
  316. package/dist/types/web/src/project/bizarre.d.ts +0 -28
  317. package/dist/types/web/src/project/companion.d.ts +0 -35
  318. package/dist/types/web/src/project/diskFacts.d.ts +0 -30
  319. package/dist/types/web/src/project/files.d.ts +0 -124
  320. package/dist/types/web/src/project/gameFiles.d.ts +0 -49
  321. package/dist/types/web/src/project/gamePack.d.ts +0 -17
  322. package/dist/types/web/src/project/health.d.ts +0 -30
  323. package/dist/types/web/src/project/secretGames.d.ts +0 -19
  324. package/dist/types/web/src/project/storage.d.ts +0 -46
  325. package/dist/types/web/src/project/streamGame.d.ts +0 -38
  326. package/dist/types/web/src/project/zip.d.ts +0 -33
  327. package/dist/types/web/src/retro/dos/disks.d.ts +0 -33
  328. package/dist/types/web/src/retro/text/cp437.d.ts +0 -4
  329. package/dist/types/web/src/seededRandom.d.ts +0 -6
  330. package/dist/types/web/src/tinHearts/deskHearts.d.ts +0 -33
  331. package/dist/types/web/src/tinHearts/manifest.d.ts +0 -30
  332. package/dist/types/web/src/tinHearts/tinHearts.d.ts +0 -84
  333. package/dist/types/web/src/walkthrough/format.d.ts +0 -92
  334. package/dist/types/web/src/walkthrough/madeUpScores.d.ts +0 -6
  335. package/dist/types/web/src/walkthrough/runtime.d.ts +0 -134
  336. /package/dist/types/{web/src/assistant → image}/png.d.ts +0 -0
  337. /package/dist/types/{games/kit → kit}/palette.d.ts +0 -0
  338. /package/dist/types/{games/kit → kit}/pixels.d.ts +0 -0
  339. /package/dist/types/{games/kit → kit}/reel.d.ts +0 -0
  340. /package/dist/types/{games/kit → kit}/sound.d.ts +0 -0
  341. /package/dist/types/{games/kit → kit}/textBounds.d.ts +0 -0
  342. /package/dist/types/{games/kit → kit}/tune.d.ts +0 -0
  343. /package/dist/types/{web/src/audio → music}/compose.d.ts +0 -0
@@ -0,0 +1,79 @@
1
+ import { inspectMesh as B } from "./meshCheck.js";
2
+ const D = [
3
+ [0, 1],
4
+ [2, 3],
5
+ [4, 5],
6
+ [6, 7],
7
+ [0, 2],
8
+ [1, 3],
9
+ [4, 6],
10
+ [5, 7],
11
+ [0, 4],
12
+ [1, 5],
13
+ [2, 6],
14
+ [3, 7]
15
+ ];
16
+ function G(E, f, A, j = 0) {
17
+ const { cell: s } = f, c = Math.ceil((f.max[0] - f.min[0]) / s) + 6, l = Math.ceil((f.max[1] - f.min[1]) / s) + 6, u = Math.ceil((f.max[2] - f.min[2]) / s) + 6, b = f.min[0] - 3 * s + A[0] * s, g = f.min[1] - 3 * s + A[1] * s, z = f.min[2] - 3 * s + A[2] * s, d = new Float32Array(c * l * u);
18
+ for (let n = 0; n < u; n++)
19
+ for (let t = 0; t < l; t++)
20
+ for (let e = 0; e < c; e++) {
21
+ let o = E(b + e * s, g + t * s, z + n * s);
22
+ const h = (i, p) => i <= 1 || i >= p - 2;
23
+ if (o < 0 && (h(e, c) || h(t, l) || h(n, u)))
24
+ throw new Error(
25
+ `surfaceNets: the surface leaves the box at ${e},${t},${n} of ${c},${l},${u} (${b + e * s}, ${g + t * s}, ${z + n * s}) value ${o}`
26
+ );
27
+ (e === 0 || t === 0 || n === 0 || e === c - 1 || t === l - 1 || n === u - 1) && (o = Math.max(o, 1e-6)), d[e + c * (t + l * n)] = o === 0 ? 1e-9 : o;
28
+ }
29
+ const M = (n, t, e) => n + c * (t + l * e);
30
+ for (let n = 0; n < j; n++) {
31
+ const t = d.slice();
32
+ for (let e = 1; e < u - 1; e++)
33
+ for (let o = 1; o < l - 1; o++)
34
+ for (let h = 1; h < c - 1; h++) {
35
+ const i = M(h, o, e);
36
+ d[i] = t[i] * 0.4 + (t[i - 1] + t[i + 1] + t[i - c] + t[i + c] + t[i - c * l] + t[i + c * l]) * 0.1;
37
+ }
38
+ }
39
+ const a = new Int32Array((c - 1) * (l - 1) * (u - 1)).fill(-1), m = (n, t, e) => n + (c - 1) * (t + (l - 1) * e), x = [], k = new Float32Array(8);
40
+ for (let n = 0; n < u - 1; n++)
41
+ for (let t = 0; t < l - 1; t++)
42
+ for (let e = 0; e < c - 1; e++) {
43
+ let o = 0;
44
+ for (let r = 0; r < 8; r++)
45
+ k[r] = d[M(e + (r & 1), t + (r >> 1 & 1), n + (r >> 2))], k[r] < 0 && o++;
46
+ if (o === 0 || o === 8) continue;
47
+ let h = 0, i = 0, p = 0, y = 0;
48
+ for (const [r, $] of D) {
49
+ const v = k[r], w = k[$];
50
+ if (v < 0 == w < 0) continue;
51
+ const N = v / (v - w);
52
+ h += (r & 1) + N * (($ & 1) - (r & 1)), i += (r >> 1 & 1) + N * (($ >> 1 & 1) - (r >> 1 & 1)), p += (r >> 2) + N * (($ >> 2) - (r >> 2)), y++;
53
+ }
54
+ a[m(e, t, n)] = x.length / 3, x.push(b + (e + h / y) * s, g + (t + i / y) * s, z + (n + p / y) * s);
55
+ }
56
+ const F = [], I = (n, t, e, o, h) => {
57
+ const i = (v, w) => (x[v * 3] - x[w * 3]) ** 2 + (x[v * 3 + 1] - x[w * 3 + 1]) ** 2 + (x[v * 3 + 2] - x[w * 3 + 2]) ** 2, [p, y, r, $] = h ? [n, o, e, t] : [n, t, e, o];
58
+ i(p, r) <= i(y, $) ? F.push(p, y, r, p, r, $) : F.push(p, y, $, y, r, $);
59
+ };
60
+ for (let n = 1; n < u - 1; n++)
61
+ for (let t = 1; t < l - 1; t++)
62
+ for (let e = 1; e < c - 1; e++) {
63
+ const o = d[M(e, t, n)] < 0;
64
+ o !== d[M(e + 1, t, n)] < 0 && I(a[m(e, t - 1, n - 1)], a[m(e, t, n - 1)], a[m(e, t, n)], a[m(e, t - 1, n)], !o), o !== d[M(e, t + 1, n)] < 0 && I(a[m(e - 1, t, n - 1)], a[m(e - 1, t, n)], a[m(e, t, n)], a[m(e, t, n - 1)], !o), o !== d[M(e, t, n + 1)] < 0 && I(a[m(e - 1, t - 1, n)], a[m(e, t - 1, n)], a[m(e, t, n)], a[m(e - 1, t, n)], !o);
65
+ }
66
+ return { positions: Float32Array.from(x), indices: Uint32Array.from(F) };
67
+ }
68
+ function S(E, f) {
69
+ let A, j = 1 / 0;
70
+ for (let s = 0; s < (f.attempts ?? 30); s++) {
71
+ const c = s * 0.137, l = G(E, { ...f, cell: f.cell * (1 + 0.013 * s) }, [c % 1, c * 1.7 % 1, c * 2.3 % 1], s >= 22 ? 2 : s >= 10 ? 1 : 0), u = B(l), b = u.badEdges + Math.max(0, u.pieces - (f.maxPieces ?? 1 / 0));
72
+ if (b === 0) return l;
73
+ b < j && ([A, j] = [l, b]);
74
+ }
75
+ return A;
76
+ }
77
+ export {
78
+ S as surfaceNets
79
+ };
@@ -0,0 +1,62 @@
1
+ const O = [
2
+ [0, 1, 3, 7],
3
+ [0, 3, 2, 7],
4
+ [0, 2, 6, 7],
5
+ [0, 6, 4, 7],
6
+ [0, 4, 5, 7],
7
+ [0, 5, 1, 7]
8
+ ];
9
+ function U(N, x) {
10
+ const { cell: f } = x, h = Math.ceil((x.max[0] - x.min[0]) / f) + 5, m = Math.ceil((x.max[1] - x.min[1]) / f) + 5, p = Math.ceil((x.max[2] - x.min[2]) / f) + 5, A = x.min[0] - 2 * f, I = x.min[1] - 2 * f, j = x.min[2] - 2 * f, g = new Float32Array(h * m * p);
11
+ for (let t = 0; t < p; t++)
12
+ for (let n = 0; n < m; n++)
13
+ for (let o = 0; o < h; o++) {
14
+ let c = N(A + o * f, I + n * f, j + t * f);
15
+ if (c < 0 && (o <= 1 || n <= 1 || t <= 1 || o >= h - 2 || n >= m - 2 || t >= p - 2)) throw new Error("tetraMesh: the surface leaves the box");
16
+ (o === 0 || n === 0 || t === 0 || o === h - 1 || n === m - 1 || t === p - 1) && (c = Math.max(c, 1e-6)), g[o + h * (n + m * t)] = c === 0 || Math.abs(c) < 1e-9 ? c < 0 ? -1e-9 : 1e-9 : c;
17
+ }
18
+ const i = [], v = [], k = /* @__PURE__ */ new Map(), E = h * m * p, d = (t) => [A + t % h * f, I + Math.floor(t / h) % m * f, j + Math.floor(t / (h * m)) * f], M = (t, n) => {
19
+ t > n && ([t, n] = [n, t]);
20
+ let o = k.get(t * E + n);
21
+ if (o === void 0) {
22
+ const c = g[t], a = g[n], u = Math.min(0.99, Math.max(0.01, c / (c - a))), e = d(t), s = d(n);
23
+ o = i.length / 3, i.push(e[0] + (s[0] - e[0]) * u, e[1] + (s[1] - e[1]) * u, e[2] + (s[2] - e[2]) * u), k.set(t * E + n, o);
24
+ }
25
+ return o;
26
+ }, F = (t) => {
27
+ const n = [0, 0, 0];
28
+ for (const o of t) {
29
+ const c = d(o);
30
+ for (let a = 0; a < 3; a++) n[a] += c[a] / t.length;
31
+ }
32
+ return n;
33
+ }, z = (t, n, o, c, a) => {
34
+ const u = F(c), e = F(a), [s, l, r] = [i[n * 3] - i[t * 3], i[n * 3 + 1] - i[t * 3 + 1], i[n * 3 + 2] - i[t * 3 + 2]], [y, T, q] = [i[o * 3] - i[t * 3], i[o * 3 + 1] - i[t * 3 + 1], i[o * 3 + 2] - i[t * 3 + 2]];
35
+ (l * q - r * T) * (e[0] - u[0]) + (r * y - s * q) * (e[1] - u[1]) + (s * T - l * y) * (e[2] - u[2]) >= 0 ? v.push(t, n, o) : v.push(t, o, n);
36
+ }, w = new Int32Array(8);
37
+ for (let t = 0; t < p - 1; t++)
38
+ for (let n = 0; n < m - 1; n++)
39
+ for (let o = 0; o < h - 1; o++) {
40
+ const c = o + h * (n + m * t);
41
+ let a = 1 / 0, u = -1 / 0;
42
+ for (let e = 0; e < 8; e++)
43
+ w[e] = c + (e & 1) + h * ((e >> 1 & 1) + m * (e >> 2)), a = Math.min(a, g[w[e]]), u = Math.max(u, g[w[e]]);
44
+ if (!(a >= 0 || u < 0))
45
+ for (const e of O) {
46
+ const s = [], l = [];
47
+ for (const r of e) (g[w[r]] < 0 ? s : l).push(w[r]);
48
+ if (!(!s.length || !l.length))
49
+ if (s.length === 1 || l.length === 1) {
50
+ const r = s.length === 1 ? s[0] : l[0], y = s.length === 1 ? l : s;
51
+ z(M(r, y[0]), M(r, y[1]), M(r, y[2]), s, l);
52
+ } else {
53
+ const r = [M(s[0], l[0]), M(s[0], l[1]), M(s[1], l[1]), M(s[1], l[0])];
54
+ z(r[0], r[1], r[2], s, l), z(r[0], r[2], r[3], s, l);
55
+ }
56
+ }
57
+ }
58
+ return { positions: Float32Array.from(i), indices: Uint32Array.from(v) };
59
+ }
60
+ export {
61
+ U as tetraMesh
62
+ };
@@ -0,0 +1,58 @@
1
+ import { readZip as u, writeZip as g } from "./zipFile.js";
2
+ const x = (o) => `#${o.map((l) => Math.round(l).toString(16).padStart(2, "0")).join("").toUpperCase()}`, d = (o) => o.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"), p = (o) => String(+o.toFixed(3));
3
+ function b(o, l, c = {}) {
4
+ const n = [
5
+ '<?xml version="1.0" encoding="UTF-8"?>',
6
+ '<model unit="millimeter" xml:lang="en-US" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02">',
7
+ `<metadata name="Title">${d(l)}</metadata>`,
8
+ "<resources>",
9
+ '<basematerials id="1">',
10
+ ...o.map((a) => `<base name="${d(a.name)}" displaycolor="${x(a.color)}"/>`),
11
+ "</basematerials>"
12
+ ];
13
+ o.forEach((a, e) => {
14
+ n.push(`<object id="${e + 2}" type="model" name="${d(a.name)}" pid="1" pindex="${e}"><mesh><vertices>`);
15
+ const s = a.mesh.positions;
16
+ for (let t = 0; t < s.length; t += 3) n.push(`<vertex x="${p(s[t])}" y="${p(s[t + 1])}" z="${p(s[t + 2])}"/>`);
17
+ n.push("</vertices><triangles>");
18
+ const r = a.mesh.indices;
19
+ for (let t = 0; t < r.length; t += 3) n.push(`<triangle v1="${r[t]}" v2="${r[t + 1]}" v3="${r[t + 2]}"/>`);
20
+ n.push("</triangles></mesh></object>");
21
+ }), n.push("</resources><build>", ...o.map((a, e) => `<item objectid="${e + 2}"/>`), "</build></model>");
22
+ const i = new TextEncoder();
23
+ return g(
24
+ [
25
+ {
26
+ name: "[Content_Types].xml",
27
+ data: i.encode(
28
+ '<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml"/></Types>'
29
+ )
30
+ },
31
+ {
32
+ name: "_rels/.rels",
33
+ data: i.encode(
34
+ '<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"/></Relationships>'
35
+ )
36
+ },
37
+ { name: "3D/3dmodel.model", data: i.encode(n.join(`
38
+ `)) }
39
+ ],
40
+ c
41
+ );
42
+ }
43
+ function v(o, l = {}) {
44
+ const c = u(o, l).find((e) => e.name === "3D/3dmodel.model");
45
+ if (!c) throw new Error("No 3D/3dmodel.model in the file");
46
+ const n = new TextDecoder().decode(c.data), i = [...n.matchAll(/<base name="([^"]*)" displaycolor="#([0-9A-F]{6})"/g)].map(
47
+ (e) => [e[1], [0, 2, 4].map((s) => parseInt(e[2].slice(s, s + 2), 16))]
48
+ ), a = [];
49
+ for (const e of n.matchAll(/<object [^>]*pindex="(\d+)"[^>]*>([\s\S]*?)<\/object>/g)) {
50
+ const [s, r] = i[Number(e[1])], t = [...e[2].matchAll(/<vertex x="([^"]+)" y="([^"]+)" z="([^"]+)"/g)].flatMap((m) => [Number(m[1]), Number(m[2]), Number(m[3])]), h = [...e[2].matchAll(/<triangle v1="(\d+)" v2="(\d+)" v3="(\d+)"/g)].flatMap((m) => [Number(m[1]), Number(m[2]), Number(m[3])]);
51
+ a.push({ name: s, color: r, mesh: { positions: Float32Array.from(t), indices: Uint32Array.from(h) } });
52
+ }
53
+ return a;
54
+ }
55
+ export {
56
+ v as read3mf,
57
+ b as write3mf
58
+ };
@@ -0,0 +1,52 @@
1
+ const A = new Uint32Array(256).map((s, c) => {
2
+ let t = c;
3
+ for (let o = 0; o < 8; o++) t = t & 1 ? 3988292384 ^ t >>> 1 : t >>> 1;
4
+ return t >>> 0;
5
+ });
6
+ function m(s) {
7
+ let c = 4294967295;
8
+ for (const t of s) c = A[(c ^ t) & 255] ^ c >>> 8;
9
+ return (c ^ 4294967295) >>> 0;
10
+ }
11
+ function D(s, c = {}) {
12
+ const t = new TextEncoder(), o = [], U = [];
13
+ let n = 0;
14
+ for (const e of s) {
15
+ const i = t.encode(e.name), g = c.deflate?.(e.data), h = !!g && g.length < e.data.length, f = h ? g : e.data, d = m(e.data), u = new DataView(new ArrayBuffer(30));
16
+ u.setUint32(0, 67324752, !0), u.setUint16(4, 20, !0), u.setUint16(6, 2048, !0), u.setUint16(8, h ? 8 : 0, !0), u.setUint32(14, d, !0), u.setUint32(18, f.length, !0), u.setUint32(22, e.data.length, !0), u.setUint16(26, i.length, !0), o.push(new Uint8Array(u.buffer), i, f);
17
+ const r = new DataView(new ArrayBuffer(46));
18
+ r.setUint32(0, 33639248, !0), r.setUint16(4, 20, !0), r.setUint16(6, 20, !0), r.setUint16(8, 2048, !0), r.setUint16(10, h ? 8 : 0, !0), r.setUint32(16, d, !0), r.setUint32(20, f.length, !0), r.setUint32(24, e.data.length, !0), r.setUint16(28, i.length, !0), r.setUint32(42, n, !0), U.push(new Uint8Array(r.buffer), i), n += 30 + i.length + f.length;
19
+ }
20
+ const p = U.reduce((e, i) => e + i.length, 0), a = new DataView(new ArrayBuffer(22));
21
+ a.setUint32(0, 101010256, !0), a.setUint16(8, s.length, !0), a.setUint16(10, s.length, !0), a.setUint32(12, p, !0), a.setUint32(16, n, !0);
22
+ const w = [...o, ...U, new Uint8Array(a.buffer)], l = new Uint8Array(w.reduce((e, i) => e + i.length, 0));
23
+ let y = 0;
24
+ for (const e of w)
25
+ l.set(e, y), y += e.length;
26
+ return l;
27
+ }
28
+ function E(s, c = {}) {
29
+ const t = new DataView(s.buffer, s.byteOffset, s.byteLength);
30
+ let o = s.length - 22;
31
+ for (; o >= 0 && t.getUint32(o, !0) !== 101010256; ) o--;
32
+ if (o < 0) throw new Error("Not a ZIP file");
33
+ const U = t.getUint16(o + 10, !0);
34
+ let n = t.getUint32(o + 16, !0);
35
+ const p = new TextDecoder(), a = [];
36
+ for (let w = 0; w < U; w++) {
37
+ const l = t.getUint16(n + 10, !0), y = t.getUint32(n + 16, !0), e = t.getUint32(n + 20, !0), i = t.getUint16(n + 28, !0), g = t.getUint16(n + 30, !0), h = t.getUint16(n + 32, !0), f = t.getUint32(n + 42, !0), d = p.decode(s.subarray(n + 46, n + 46 + i)), u = f + 30 + t.getUint16(f + 26, !0) + t.getUint16(f + 28, !0), r = s.subarray(u, u + e);
38
+ let b = r;
39
+ if (l === 8) {
40
+ if (!c.inflate) throw new Error("A deflated entry needs an inflate function");
41
+ b = c.inflate(r);
42
+ } else if (l !== 0) throw new Error(`ZIP method ${l} is not supported`);
43
+ if (m(b) !== y) throw new Error(`ZIP entry ${d} fails its checksum`);
44
+ a.push({ name: d, data: b }), n += 46 + i + g + h;
45
+ }
46
+ return a;
47
+ }
48
+ export {
49
+ m as crc32,
50
+ E as readZip,
51
+ D as writeZip
52
+ };
@@ -0,0 +1,101 @@
1
+ const o = Object.freeze({
2
+ 0: "111101101101111",
3
+ 1: "010110010010111",
4
+ 2: "110001010100111",
5
+ 3: "110001010001110",
6
+ 4: "101101111001001",
7
+ 5: "111100110001110",
8
+ 6: "011100111101111",
9
+ 7: "111001010010010",
10
+ 8: "111101111101111",
11
+ 9: "111101111001110",
12
+ A: "010101111101101",
13
+ B: "110101110101110",
14
+ C: "011100100100011",
15
+ D: "110101101101110",
16
+ E: "111100110100111",
17
+ F: "111100110100100",
18
+ G: "011100101101011",
19
+ H: "101101111101101",
20
+ I: "111010010010111",
21
+ J: "001001001101010",
22
+ K: "101101110101101",
23
+ L: "100100100100111",
24
+ M: "101111111101101",
25
+ N: "110101101101101",
26
+ O: "010101101101010",
27
+ P: "110101110100100",
28
+ Q: "010101101110011",
29
+ R: "110101110101101",
30
+ S: "011100010001110",
31
+ T: "111010010010010",
32
+ U: "101101101101111",
33
+ V: "101101101101010",
34
+ W: "101101111111101",
35
+ X: "101101010101101",
36
+ Y: "101101010010010",
37
+ Z: "111001010100111",
38
+ $: "011110010011110",
39
+ "&": "010101010101011",
40
+ "-": "000000111000000",
41
+ "!": "010010010000010",
42
+ ".": "000000000000010",
43
+ "'": "010010000000000",
44
+ " ": "000000000000000",
45
+ ":": "000010000010000",
46
+ "/": "001001010100100",
47
+ ",": "000000000010100",
48
+ "?": "110001010000010",
49
+ "+": "000010111010000",
50
+ ">": "100010001010100",
51
+ "<": "001010100010001",
52
+ "(": "010100100100010",
53
+ ")": "010001001001010",
54
+ "#": "101111101111101",
55
+ µ: "000101101111100",
56
+ "=": "000111000111000",
57
+ _: "000000000000111",
58
+ "\\": "100100010001001",
59
+ '"': "101101000000000",
60
+ "¢": "010111100111010",
61
+ "*": "101010101000000",
62
+ "%": "101001010100101",
63
+ "@": "010101111100011",
64
+ "~": "000011110000000"
65
+ }), c = Object.freeze({
66
+ ...o,
67
+ 2: "111001111100111",
68
+ 3: "111001111001111",
69
+ 5: "111100111001111",
70
+ 6: "111100111101111",
71
+ 7: "111001001010010",
72
+ 9: "111101111001111",
73
+ C: "111100100100111",
74
+ G: "111100101101111",
75
+ J: "001001001101111",
76
+ O: "111101101101111",
77
+ P: "111101111100100",
78
+ Q: "111101101111001",
79
+ S: "111100111001111",
80
+ "?": "111001011000010",
81
+ "*": "000101010101000",
82
+ "%": "101001010100101",
83
+ "@": "010101111100011",
84
+ "~": "000011110000000"
85
+ });
86
+ function f(t, n = !1) {
87
+ const r = n ? c : o;
88
+ return Object.freeze(
89
+ Object.fromEntries(
90
+ [...t].map((e) => {
91
+ if (!(e in r)) throw new RangeError(`No micro glyph for ${e}`);
92
+ return [e, r[e]];
93
+ })
94
+ )
95
+ );
96
+ }
97
+ export {
98
+ o as MICRO_GLYPHS,
99
+ c as MICRO_SQUARE_GLYPHS,
100
+ f as microGlyphs
101
+ };
@@ -0,0 +1,72 @@
1
+ import { encodeCmf as C } from "@lewismoten/gamemaker-sandbox-engine/formats/cmf";
2
+ function c(e) {
3
+ return Uint8Array.from([
4
+ e.modChar,
5
+ e.carChar,
6
+ e.modLevel,
7
+ e.carLevel,
8
+ e.modAD,
9
+ e.carAD,
10
+ e.modSR,
11
+ e.carSR,
12
+ e.modWave ?? 0,
13
+ e.carWave ?? 0,
14
+ e.feedback,
15
+ 0,
16
+ 0,
17
+ 0,
18
+ 0,
19
+ 0
20
+ ]);
21
+ }
22
+ const S = {
23
+ piano: c({ modChar: 1, carChar: 1, modLevel: 90, carLevel: 0, modAD: 242, carAD: 243, modSR: 99, carSR: 101, feedback: 8 }),
24
+ bass: c({ modChar: 1, carChar: 1, modLevel: 26, carLevel: 0, modAD: 246, carAD: 245, modSR: 84, carSR: 69, feedback: 8 }),
25
+ strings: c({ modChar: 97, carChar: 33, modLevel: 29, carLevel: 0, modAD: 116, carAD: 99, modSR: 19, carSR: 21, feedback: 14 }),
26
+ brass: c({ modChar: 33, carChar: 33, modLevel: 26, carLevel: 0, modAD: 99, carAD: 116, modSR: 40, carSR: 23, feedback: 12 }),
27
+ lead: c({ modChar: 34, carChar: 33, modLevel: 27, carLevel: 0, modAD: 244, carAD: 244, modSR: 68, carSR: 36, modWave: 2, feedback: 12 }),
28
+ bell: c({ modChar: 7, carChar: 1, modLevel: 35, carLevel: 0, modAD: 245, carAD: 243, modSR: 34, carSR: 19, feedback: 4 }),
29
+ organ: c({ modChar: 50, carChar: 49, modLevel: 68, carLevel: 0, modAD: 240, carAD: 240, modSR: 15, carSR: 15, feedback: 1 }),
30
+ pad: c({ modChar: 161, carChar: 33, modLevel: 41, carLevel: 0, modAD: 67, carAD: 82, modSR: 5, carSR: 4, modWave: 1, feedback: 10 }),
31
+ pluck: c({ modChar: 3, carChar: 1, modLevel: 30, carLevel: 0, modAD: 248, carAD: 246, modSR: 53, carSR: 85, feedback: 12 })
32
+ }, D = { C: 0, D: 2, E: 4, F: 5, G: 7, A: 9, B: 11 }, L = { w: 4, h: 2, q: 1, e: 0.5, s: 0.25, t: 1 / 3 };
33
+ function R(e) {
34
+ if (/^r$/i.test(e)) return null;
35
+ const a = /^([A-G])([#b]?)(-?\d)$/.exec(e);
36
+ if (!a) throw new Error(`Bad note ${e}`);
37
+ return 12 * (Number(a[3]) + 1) + D[a[1]] + (a[2] === "#" ? 1 : a[2] === "b" ? -1 : 0);
38
+ }
39
+ function p(e, a) {
40
+ const n = Math.round(8760 / e), d = [], m = [], l = /* @__PURE__ */ new Map();
41
+ for (const r of a) {
42
+ d[r.channel] = r.instrument;
43
+ let t = 0;
44
+ for (const h of r.notes.split(",").map((o) => o.trim()).filter(Boolean)) {
45
+ const o = /^(.+?)\s+([whqest])(\.?)$/.exec(h);
46
+ if (!o) throw new Error(`Bad note "${h}"`);
47
+ const i = L[o[2]] * (o[3] ? 1.5 : 1) * n;
48
+ o[1].replace(/[[\]]/g, " ").trim().split(/\s+/).forEach((u, f) => {
49
+ const v = R(u);
50
+ if (v === null) return;
51
+ const s = Math.min(15, r.channel + f);
52
+ f > 0 && l.set(s, r.instrument);
53
+ const A = v + (r.transpose ?? 0);
54
+ m.push({ tick: t, data: [144 | s, A, r.velocity ?? 100] }), m.push({ tick: t + i * 0.92, data: [128 | s, A, 0] });
55
+ }), t += i;
56
+ }
57
+ }
58
+ for (const [r, t] of l) d[r] ??= t;
59
+ for (let r = 0; r < 16; r++) d[r] ??= S.piano;
60
+ return C({ instruments: d, events: m, ticksPerBeat: n });
61
+ }
62
+ function w(e = 120) {
63
+ const a = Math.round(8760 / e), n = Array.from({ length: 16 }, () => S.piano);
64
+ return C({ instruments: n, events: [{ tick: 4 * a, data: [176, 7, 100] }], ticksPerBeat: a });
65
+ }
66
+ export {
67
+ S as INSTRUMENTS,
68
+ w as blankSong,
69
+ R as midi,
70
+ c as sbi,
71
+ p as song
72
+ };
@@ -0,0 +1,198 @@
1
+ class k {
2
+ buf = new Uint8Array(65536);
3
+ length = 0;
4
+ room(t) {
5
+ if (this.length + t <= this.buf.length) return;
6
+ let s = this.buf.length * 2;
7
+ for (; s < this.length + t; ) s *= 2;
8
+ const n = new Uint8Array(s);
9
+ n.set(this.buf.subarray(0, this.length)), this.buf = n;
10
+ }
11
+ bytes(t) {
12
+ this.room(t.length), this.buf.set(t, this.length), this.length += t.length;
13
+ }
14
+ u32(t) {
15
+ this.room(4), new DataView(this.buf.buffer).setUint32(this.length, t, !0), this.length += 4;
16
+ }
17
+ varint(t) {
18
+ for (this.room(8); t >= 128; )
19
+ this.buf[this.length++] = t % 128 | 128, t = Math.floor(t / 128);
20
+ this.buf[this.length++] = t;
21
+ }
22
+ done() {
23
+ return this.buf.slice(0, this.length);
24
+ }
25
+ }
26
+ class U {
27
+ constructor(t) {
28
+ this.data = t, this.view = new DataView(t.buffer, t.byteOffset, t.byteLength);
29
+ }
30
+ data;
31
+ at = 0;
32
+ view;
33
+ bytes(t) {
34
+ if (this.at + t > this.data.length) throw new Error("Packed mesh is cut short");
35
+ const s = this.data.subarray(this.at, this.at + t);
36
+ return this.at += t, s;
37
+ }
38
+ u32() {
39
+ const t = this.view.getUint32(this.at, !0);
40
+ return this.at += 4, t;
41
+ }
42
+ varint() {
43
+ let t = 0, s = 1;
44
+ for (; ; ) {
45
+ if (this.at >= this.data.length) throw new Error("Packed mesh is cut short");
46
+ const n = this.data[this.at++];
47
+ if (t += (n & 127) * s, n < 128) return t;
48
+ s *= 128;
49
+ }
50
+ }
51
+ }
52
+ const F = (e) => e >= 0 ? e * 2 : -e * 2 - 1, L = (e) => e % 2 ? -(e + 1) / 2 : e / 2;
53
+ function m(e, t) {
54
+ const s = e.length / t, n = new Uint8Array(e.length);
55
+ for (let o = 0; o < s; o++) for (let r = 0; r < t; r++) n[r * s + o] = e[o * t + r];
56
+ return n;
57
+ }
58
+ function p(e, t) {
59
+ const s = e.length / t, n = new Uint8Array(e.length);
60
+ for (let o = 0; o < s; o++) for (let r = 0; r < t; r++) n[o * t + r] = e[r * s + o];
61
+ return n;
62
+ }
63
+ function S(e, t = /* @__PURE__ */ new Set()) {
64
+ const s = new k();
65
+ let n = 0;
66
+ for (let o = 0; o < e.length; o++) {
67
+ t.has(o) && (n = 0);
68
+ const r = e[o];
69
+ s.varint(F(n - r)), r >= n && (n = r + 1);
70
+ }
71
+ return s.done();
72
+ }
73
+ function v(e, t, s = /* @__PURE__ */ new Set()) {
74
+ const n = new Uint32Array(t);
75
+ let o = 0;
76
+ for (let r = 0; r < t; r++) {
77
+ s.has(r) && (o = 0);
78
+ const c = o - L(e.varint());
79
+ n[r] = c, c >= o && (o = c + 1);
80
+ }
81
+ return n;
82
+ }
83
+ function N(e, t, s = /* @__PURE__ */ new Set()) {
84
+ return v(new U(e), t, s);
85
+ }
86
+ const E = 827542855;
87
+ function I(e, t, s) {
88
+ const n = (h, l) => e.getFloat32(t + 12 + h * 12 + l * 4, !0), o = n(1, 0) - n(0, 0), r = n(1, 1) - n(0, 1), c = n(1, 2) - n(0, 2), w = n(2, 0) - n(0, 0), f = n(2, 1) - n(0, 1), a = n(2, 2) - n(0, 2), u = r * a - c * f, b = c * w - o * a, g = o * f - r * w, i = Math.sqrt(u * u + b * b + g * g) || 1;
89
+ s.setFloat32(0, u / i, !0), s.setFloat32(4, b / i, !0), s.setFloat32(8, g / i, !0);
90
+ }
91
+ function V(e) {
92
+ const t = new DataView(e.buffer, e.byteOffset, e.byteLength), s = e.length >= 84 ? t.getUint32(80, !0) : -1;
93
+ if (e.length !== 84 + s * 50) throw new Error("Not a binary STL: its size does not match its triangle count");
94
+ const n = /* @__PURE__ */ new Map(), o = new k(), r = new Uint32Array(s * 3), c = new Uint8Array(s * 2), w = [], f = new DataView(new ArrayBuffer(12)), a = new Uint8Array(f.buffer);
95
+ for (let i = 0; i < s; i++) {
96
+ const h = 84 + i * 50;
97
+ for (let l = 0; l < 3; l++) {
98
+ const y = h + 12 + l * 12, d = `${t.getUint32(y, !0)},${t.getUint32(y + 4, !0)},${t.getUint32(y + 8, !0)}`;
99
+ let A = n.get(d);
100
+ A === void 0 && (A = n.size, n.set(d, A), o.bytes(e.subarray(y, y + 12))), r[i * 3 + l] = A;
101
+ }
102
+ c[i * 2] = e[h + 48], c[i * 2 + 1] = e[h + 49], I(t, h, f);
103
+ for (let l = 0; l < 12; l++)
104
+ if (a[l] !== e[h + l]) {
105
+ w.push(i);
106
+ break;
107
+ }
108
+ }
109
+ const u = new k();
110
+ u.u32(E), u.u32(s), u.u32(n.size), u.bytes(e.subarray(0, 80)), u.bytes(m(o.done(), 4)), u.bytes(m(c, 2)), u.u32(w.length);
111
+ for (const i of w)
112
+ u.u32(i), u.bytes(e.subarray(84 + i * 50, 84 + i * 50 + 12));
113
+ u.bytes(S(r));
114
+ const b = u.done(), g = x(b);
115
+ if (g.length !== e.length || g.some((i, h) => i !== e[h])) throw new Error("The packed STL does not read back the same");
116
+ return b;
117
+ }
118
+ function x(e) {
119
+ const t = new U(e);
120
+ if (t.u32() !== E) throw new Error("Not a packed STL");
121
+ const s = t.u32(), n = t.u32(), o = t.bytes(80), r = p(t.bytes(n * 12), 4), c = p(t.bytes(s * 2), 2), w = /* @__PURE__ */ new Map();
122
+ for (let i = t.u32(); i > 0; i--) w.set(t.u32(), t.bytes(12));
123
+ const f = v(t, s * 3), a = new Uint8Array(84 + s * 50), u = new DataView(a.buffer);
124
+ a.set(o, 0), u.setUint32(80, s, !0);
125
+ const b = new DataView(new ArrayBuffer(12)), g = new Uint8Array(b.buffer);
126
+ for (let i = 0; i < s; i++) {
127
+ const h = 84 + i * 50;
128
+ for (let y = 0; y < 3; y++) {
129
+ const d = f[i * 3 + y];
130
+ if (d >= n) throw new Error("Packed STL names a corner it does not have");
131
+ a.set(r.subarray(d * 12, d * 12 + 12), h + 12 + y * 12);
132
+ }
133
+ a[h + 48] = c[i * 2], a[h + 49] = c[i * 2 + 1];
134
+ const l = w.get(i);
135
+ l ? a.set(l, h) : (I(u, h, b), a.set(g, h));
136
+ }
137
+ return a;
138
+ }
139
+ const T = 826690887;
140
+ function P(e) {
141
+ const t = new k(), s = new TextEncoder();
142
+ t.u32(T), t.u32(e.length);
143
+ for (const n of e) {
144
+ let o = n.data, r = 0;
145
+ if (/\.stl$/i.test(n.name))
146
+ try {
147
+ o = V(n.data), r = 1;
148
+ } catch {
149
+ }
150
+ const c = s.encode(n.name);
151
+ t.u32(c.length), t.bytes(c), t.bytes(Uint8Array.of(r)), t.u32(o.length), t.bytes(o);
152
+ }
153
+ return t.done();
154
+ }
155
+ function O(e) {
156
+ const t = new U(e);
157
+ if (t.u32() !== T) throw new Error("Not packed files");
158
+ const s = new TextDecoder();
159
+ return Array.from({ length: t.u32() }, () => {
160
+ const n = s.decode(t.bytes(t.u32())), o = t.bytes(1)[0], r = t.bytes(t.u32());
161
+ return { name: n, data: o === 1 ? x(r) : r.slice() };
162
+ });
163
+ }
164
+ const D = 826363207;
165
+ function $(e, t, s) {
166
+ const n = (e.length - t * 4) / 4;
167
+ if (!Number.isInteger(n) || n < 0) throw new Error("The file is not float32s then uint32s");
168
+ const o = new DataView(e.buffer, e.byteOffset, e.byteLength), r = new Uint32Array(n);
169
+ for (let a = 0; a < n; a++) r[a] = o.getUint32(t * 4 + a * 4, !0);
170
+ const c = new k();
171
+ c.u32(D), c.u32(t), c.u32(n), c.u32(s.length);
172
+ for (const a of s) c.u32(a);
173
+ c.bytes(m(e.subarray(0, t * 4), 4)), c.bytes(S(r, new Set(s)));
174
+ const w = c.done(), f = M(w);
175
+ if (f.length !== e.length || f.some((a, u) => a !== e[u])) throw new Error("The packed arrays do not read back the same");
176
+ return w;
177
+ }
178
+ function M(e) {
179
+ const t = new U(e);
180
+ if (t.u32() !== D) throw new Error("Not packed arrays");
181
+ const s = t.u32(), n = t.u32(), o = new Set(Array.from({ length: t.u32() }, () => t.u32())), r = new Uint8Array(s * 4 + n * 4);
182
+ r.set(p(t.bytes(s * 4), 4), 0);
183
+ const c = v(t, n, o), w = new DataView(r.buffer);
184
+ for (let f = 0; f < n; f++) w.setUint32(s * 4 + f * 4, c[f], !0);
185
+ return r;
186
+ }
187
+ export {
188
+ p as fromPlanes,
189
+ P as packFiles,
190
+ $ as packFloatsAndIndices,
191
+ S as packIndices,
192
+ V as packStl,
193
+ m as toPlanes,
194
+ O as unpackFiles,
195
+ M as unpackFloatsAndIndices,
196
+ N as unpackIndices,
197
+ x as unpackStl
198
+ };