@wildshard/shard-format 0.0.0 → 0.4.5

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 (746) hide show
  1. package/corpus/brasscap-mesa/blobs/bin/02da0052111419cdff3a29f1c6d0ff0d223e0b53a956c16c65ed63d87928b3b9.bin +0 -0
  2. package/corpus/brasscap-mesa/blobs/bin/068a121cd780a2a9164416f6e4fde44834f2d2f3a5ed65c174e480b7a2d3f627.bin +0 -0
  3. package/corpus/brasscap-mesa/blobs/bin/07d5a061cd338618e528747d61eb2b17709510550ef0ba40a58b67761b200f3f.bin +0 -0
  4. package/corpus/brasscap-mesa/blobs/bin/086e3706070555baca863f6ecf9dbca09c084afa501d92d4246d896b09546f36.bin +0 -0
  5. package/corpus/brasscap-mesa/blobs/bin/08b1b9ab7c732d7dbe8f961f1fc40e84042d1fe42544f55c9ee89f04dffe3d5e.bin +0 -0
  6. package/corpus/brasscap-mesa/blobs/bin/18bdbdc704cb8aac93435d208dfe0e9a44374efb73afa3bc58c631650e0a2995.bin +0 -0
  7. package/corpus/brasscap-mesa/blobs/bin/1a210fcddcb9749ecb1c244837e8e37ea69b038faae191dee6bbbde228d31a18.bin +0 -0
  8. package/corpus/brasscap-mesa/blobs/bin/264ab9ede386504a5ff9814b0a620b879cb29f3f45a80bcfc0c80b8ee236e364.bin +0 -0
  9. package/corpus/brasscap-mesa/blobs/bin/2b6fbea4c846a23cf4802ebdb1804e128896c8dd87e5d23509db6729e5b1be4e.bin +0 -0
  10. package/corpus/brasscap-mesa/blobs/bin/2d755cc635dee90b0f3958272855a821e2dd605a189a5ffcd480a325155fe84f.bin +0 -0
  11. package/corpus/brasscap-mesa/blobs/bin/2d76c6829fe77fb55cc2541e4aca5ce5d18b68508dcdf3fa957fe4a83b9c887a.bin +0 -0
  12. package/corpus/brasscap-mesa/blobs/bin/32c15d55a4548501740593807c5007217c72dbc10a21f4613ef5e0cee0b90d1d.bin +0 -0
  13. package/corpus/brasscap-mesa/blobs/bin/3539b362cf3a61a79e92e113ebf8f255d0b25ec2d2edd816498879de831fa912.bin +0 -0
  14. package/corpus/brasscap-mesa/blobs/bin/3af38a2377bc89f6c6c82ee1e83df674efa2793db932b50a23bbce7ec9cd7941.bin +0 -0
  15. package/corpus/brasscap-mesa/blobs/bin/3c176a7a0d0850fdcee790ed2641216fc3d1cba025928de3d7784262bb9b6f4a.bin +0 -0
  16. package/corpus/brasscap-mesa/blobs/bin/3fb37e488aa81a64c997b3dd09794e988994c6ee3476c6d653ced1670888dd8e.bin +0 -0
  17. package/corpus/brasscap-mesa/blobs/bin/424dcc7b320317bf3f2c62c8f19bc80564035127eb38ab811e460934d57ea38c.bin +0 -0
  18. package/corpus/brasscap-mesa/blobs/bin/45cea35fab6bb06051a3286fca2307944850c7f9ed7aa89b7c24fafef28efda6.bin +0 -0
  19. package/corpus/brasscap-mesa/blobs/bin/499cc7863851f97d79dbfc64e76f9e6978894199184a0d80ebdca13066a8fa78.bin +0 -0
  20. package/corpus/brasscap-mesa/blobs/bin/4b7217644763b00c6ee6ae3f176c726914966fb791654a385c0638bb998b6dd2.bin +0 -0
  21. package/corpus/brasscap-mesa/blobs/bin/4cf11c7177bb082f335e5bc7a037ef00d09355c5ad8263e284a96a92630ff9ae.bin +0 -0
  22. package/corpus/brasscap-mesa/blobs/bin/536b37cab5a1edd6a68a71d122aab6898e44c68a5470a4ca8a9a72c57c02e034.bin +0 -0
  23. package/corpus/brasscap-mesa/blobs/bin/55d3628b27e0fcea383df86c434a69761439f51a013359f0829675b07ee2b616.bin +0 -0
  24. package/corpus/brasscap-mesa/blobs/bin/5652ba90fbd8146edaf42660329cc81798752f2f60b8d03956714460d5ba75ef.bin +0 -0
  25. package/corpus/brasscap-mesa/blobs/bin/57459ab5e2ac6cec65ef5e59789dd82b9666d8573df41c4a398df603f1fa456f.bin +0 -0
  26. package/corpus/brasscap-mesa/blobs/bin/5915b6aed21bba49b841b45574f44f60d26b44810bd68ac70b22f3f3b0dab072.bin +0 -0
  27. package/corpus/brasscap-mesa/blobs/bin/5c4a5c7a8e99253561105c5fa3faf14326cf0c23adc32bfe7f8aea4dbf4b05f9.bin +0 -0
  28. package/corpus/brasscap-mesa/blobs/bin/61822a412cfd461f4f7ae50bc13f242a0fca6c5c58fca72247b596ab037a1c85.bin +0 -0
  29. package/corpus/brasscap-mesa/blobs/bin/673b7712908966718341508469b39cd49e6461f690ca3c23d4621ea7eba0cc30.bin +0 -0
  30. package/corpus/brasscap-mesa/blobs/bin/69394a49520f84f6dccc1655f1c89eedc913ac53a7e48ac5dc1bff4141639bb4.bin +0 -0
  31. package/corpus/brasscap-mesa/blobs/bin/6e58a53a6c2acd50f9f80fd270ca034c54421df8a587e181101b4b75b952ac5d.bin +0 -0
  32. package/corpus/brasscap-mesa/blobs/bin/75dc9f23ee71e11a3a0c67eb77275d741a281c3398808fb42efd52b9973d5d04.bin +0 -0
  33. package/corpus/brasscap-mesa/blobs/bin/76c6a403293a68ed3d6ad14e9dd27b555c3a1ef4a3cae12a2bd2ab3e67c5ad02.bin +0 -0
  34. package/corpus/brasscap-mesa/blobs/bin/82b73ce3a18e47092840fc029177861887aa2867b007248ac79ffa20895a4491.bin +0 -0
  35. package/corpus/brasscap-mesa/blobs/bin/8430d9bbfb4e2b678c54595ad95555c3c73d0e1b144a4d6e29664ccb4371baf0.bin +0 -0
  36. package/corpus/brasscap-mesa/blobs/bin/848d4492508689f5c4a224079dca8809e872e33b8f2635c9f16da5dc21beed16.bin +0 -0
  37. package/corpus/brasscap-mesa/blobs/bin/84941ac387a0d245ea20bd663ff4ee78c5315bedfa058ada0961765aff61acaf.bin +0 -0
  38. package/corpus/brasscap-mesa/blobs/bin/859b7bbcf048a4525db0548b8f5afef83bfc4870914767153f44c05e83436ec5.bin +0 -0
  39. package/corpus/brasscap-mesa/blobs/bin/87b68b45680a57c796eed9183211b03335a6ad6737372b3ef476c2cf42efa631.bin +0 -0
  40. package/corpus/brasscap-mesa/blobs/bin/8cef94308af8d09670e4c99a3b6c3d9280b7a27d386653a3bd7d482b2cdf2b65.bin +0 -0
  41. package/corpus/brasscap-mesa/blobs/bin/8e564bce3f352c2186ae09ed7fbca9739c10abc46fd5f6893c68cb47178bd2b4.bin +0 -0
  42. package/corpus/brasscap-mesa/blobs/bin/8f89e79d0fb9b04d48c7b5719e1d024161c6a2119835b18dcb193ff51123a9be.bin +0 -0
  43. package/corpus/brasscap-mesa/blobs/bin/8fe511ad48656a0b10801100b9100edab1be605a8a182dc5c834d298bf0d9166.bin +0 -0
  44. package/corpus/brasscap-mesa/blobs/bin/900bda6562d06fafda54c495e325d57dbb7931813178ee207449c5519d89d537.bin +0 -0
  45. package/corpus/brasscap-mesa/blobs/bin/997b1b7d9210bfa77dc71f16a57c6bd66bc7c648686dc2a2666044c95042978a.bin +0 -0
  46. package/corpus/brasscap-mesa/blobs/bin/a111bb4c6cec536bcf57dddc744b871ac9f3d094ce459c16243adca19020db77.bin +0 -0
  47. package/corpus/brasscap-mesa/blobs/bin/a2208bf899e6c84942eef9fbab569d597f574551afae5864f1953c6a517af068.bin +0 -0
  48. package/corpus/brasscap-mesa/blobs/bin/a302ddb2598a72ece53780094b64ad861dc68e6913d8a1ea08f5d141736e2986.bin +0 -0
  49. package/corpus/brasscap-mesa/blobs/bin/afcbc671326d0dac14e460662c1f793335877ba53cc965f67c0306833b087e7c.bin +0 -0
  50. package/corpus/brasscap-mesa/blobs/bin/b657159e6a28c801a211024f96a7ef60e388ce928a7b41ae3d7555a6f8fd2e3e.bin +0 -0
  51. package/corpus/brasscap-mesa/blobs/bin/be6bbc6cd15ba525790075252ba0ed0b28dae5cfbfa118c00dfb9ea1ab95e668.bin +0 -0
  52. package/corpus/brasscap-mesa/blobs/bin/c1360e3cbe6b3dc8894bc66c359853854c2e5adeac9c7cd5ba63f5db448be601.bin +0 -0
  53. package/corpus/brasscap-mesa/blobs/bin/c7983018dbf8e384ddf73191f526075bd0b29907061ab17642ecdc18ea7b9897.bin +0 -0
  54. package/corpus/brasscap-mesa/blobs/bin/cea66f27ca60ea173ee0a2bcd91964dc2638eb5657250fe3aa5bd3e41faf8730.bin +0 -0
  55. package/corpus/brasscap-mesa/blobs/bin/d052be571a0f3ab69926951f3a4c9d63f05da2ca6d91e5963dd63e04ecb515de.bin +0 -0
  56. package/corpus/brasscap-mesa/blobs/bin/d162a993a60dd682c8c21dd111429d84d8d30413a000cf481cf98d06ca83e706.bin +0 -0
  57. package/corpus/brasscap-mesa/blobs/bin/d238c3d3d054911714ebe30dafc99e6ad13925b7a600ba9f8d532d0f515f3f5a.bin +0 -0
  58. package/corpus/brasscap-mesa/blobs/bin/d9a98cfe2865a9bb0e94f35c735a570b0625b58f890a6b1f6e14fab2401f0af2.bin +0 -0
  59. package/corpus/brasscap-mesa/blobs/bin/dc27ae954b7b8a13a9459d6ca6ef2997f662715ff5f5453ea0da169f141748b8.bin +0 -0
  60. package/corpus/brasscap-mesa/blobs/bin/e3ff1fd41cf76668b8e1927c0c2e4056b63a293ebbd300a8f1b1d27d87786271.bin +0 -0
  61. package/corpus/brasscap-mesa/blobs/bin/e45b7344d373b3ef4a94f560cf4e17b1eb3b8cd89d1e552fc9be11d6b7b546f0.bin +0 -0
  62. package/corpus/brasscap-mesa/blobs/bin/eb14eb898224d5d81d1012bec54f2b79f9377dc60fa1d01e49b4c3e148292d77.bin +0 -0
  63. package/corpus/brasscap-mesa/blobs/bin/ed0e0101a3d91a3a615f9e78ef36f7deb8bb0eab0f133241d621925d0b596599.bin +0 -0
  64. package/corpus/brasscap-mesa/blobs/bin/f722e3a3b1f0a3d7b9f7d7c66c46d8c87245de5f8eece055daf95c7086f8c267.bin +0 -0
  65. package/corpus/brasscap-mesa/blobs/bin/f76013aedfd810f136fa689a151024bcb942687ef42ae7edf1fd3513ac4e22c7.bin +0 -0
  66. package/corpus/brasscap-mesa/blobs/glb/0547e63693282614673b13bade4c08eb772020757b131b7c80f2077873aab70e.glb +0 -0
  67. package/corpus/brasscap-mesa/blobs/glb/0cf89e9b1824440d213c8e9e33fb357734b7241b4c7eedaba3df7f8306e05425.glb +0 -0
  68. package/corpus/brasscap-mesa/blobs/glb/0e01060e3a507ffff6461c50b5c565c71380a6a67d9760cdd7a09afd3e30b584.glb +0 -0
  69. package/corpus/brasscap-mesa/blobs/glb/0ef326c5cf5292cd15b48b851460ee8156f51e0a5b62457c8f1f3c53c41665a3.glb +0 -0
  70. package/corpus/brasscap-mesa/blobs/glb/1112ff4a3f69db3b62c6d2d6ae021e7c43ce0ca1feb1d3130376881decb3c6b0.glb +0 -0
  71. package/corpus/brasscap-mesa/blobs/glb/11357cb8a0670fdc9a03780dd79a31e0aa7a0537786cbf66491bae1722d6feb3.glb +0 -0
  72. package/corpus/brasscap-mesa/blobs/glb/11dbecc73bd343c375bd4b79db8dbda2272e76a6b8426ac29e90f2b1272ccfc2.glb +0 -0
  73. package/corpus/brasscap-mesa/blobs/glb/133f639cfa837bc5da7915121c71fd32281660c2aaa0248bd59bde47e7faf8bc.glb +0 -0
  74. package/corpus/brasscap-mesa/blobs/glb/16812a090136b6678633aa4db03e4187920ae0aca776ad6da373c600cd341972.glb +0 -0
  75. package/corpus/brasscap-mesa/blobs/glb/17e63980d7934cfe1d2823d78652af338fe9f0c2170106cd4506a2c4e7f4716f.glb +0 -0
  76. package/corpus/brasscap-mesa/blobs/glb/199224cafc86904bdefec8f01d131d7ca3e076a22b689bfc6a26dd20373cf286.glb +0 -0
  77. package/corpus/brasscap-mesa/blobs/glb/1a5c8cf223a2f64715ea5eaf14d97a0131f9ebdef4388dc4823dcfa57817724c.glb +0 -0
  78. package/corpus/brasscap-mesa/blobs/glb/1b0ec09ad6718149d7ca514136cee09b04c96425f03af0559fd097112aa0daa5.glb +0 -0
  79. package/corpus/brasscap-mesa/blobs/glb/1e5024bbb1284b2ed39bbca2d0ade3acb5be2a2c6ba643291f269b76098c7f79.glb +0 -0
  80. package/corpus/brasscap-mesa/blobs/glb/1e7635972e13468ffcbb1608f1d12559b066b4533912be2c35e3db07fd4a679d.glb +0 -0
  81. package/corpus/brasscap-mesa/blobs/glb/1f03db3a38a21b8d4d02f8ede30e1303cd8d4c426815326a88f45a268b17a492.glb +0 -0
  82. package/corpus/brasscap-mesa/blobs/glb/2624abb7bf45618be40f8c3221445179fca44f7321baff415fdf7ddd5e0afc6f.glb +0 -0
  83. package/corpus/brasscap-mesa/blobs/glb/27fc3bad6db6e2b5ade5d242867d882362482ddf19c647edef821afc27d52dc2.glb +0 -0
  84. package/corpus/brasscap-mesa/blobs/glb/29959bdb5b04a9180e88ec1ed976bae55424d3dc50985f13c0f85bae11ae79ee.glb +0 -0
  85. package/corpus/brasscap-mesa/blobs/glb/308cbce2b1b6360f9a2dc275d0bc28be1966fc3ff5e0a58844405ba867f3f668.glb +0 -0
  86. package/corpus/brasscap-mesa/blobs/glb/3674d7be969755aaffa368e57b8d1bb743bc98e766a57948859d54fdc7d2c066.glb +0 -0
  87. package/corpus/brasscap-mesa/blobs/glb/3736ca95c9c40b30e21302ae6c89148d8ac09264dfbb7e5764b08c265a73ba3c.glb +0 -0
  88. package/corpus/brasscap-mesa/blobs/glb/3bc90e1dc9411d249697e4ec352baa4886f91cacfe4940ac43aed879f60966c9.glb +0 -0
  89. package/corpus/brasscap-mesa/blobs/glb/3f519c7c7482307cae908b27602dcb7716e2da4b651eff39c4c37103998d18fa.glb +0 -0
  90. package/corpus/brasscap-mesa/blobs/glb/4767636d5554b60c94b447b87b77fc1456a2b9af42bfe08585389d27f306dd5e.glb +0 -0
  91. package/corpus/brasscap-mesa/blobs/glb/4a3242773b3a73a73ee746a0cdf30c8d6d904bb4406dfdf9822dcd535d6ae308.glb +0 -0
  92. package/corpus/brasscap-mesa/blobs/glb/4c7bf3788cba151442d85c3f76553c2e356edf8566ae8243d0a535c9bcde51d0.glb +0 -0
  93. package/corpus/brasscap-mesa/blobs/glb/4f3b9f4c818ed6d375947e9603dd058c539e14ff05aa193fb5054d899dbb82a2.glb +0 -0
  94. package/corpus/brasscap-mesa/blobs/glb/4fdf7ee67d12de1cd30c3c2bbd9409032dcab5feb3a7d3977b92c50b1d161afe.glb +0 -0
  95. package/corpus/brasscap-mesa/blobs/glb/5821f33aa00e9acd2f4c0a29129978ee7006a879d163ce1463ae476031bfabcf.glb +0 -0
  96. package/corpus/brasscap-mesa/blobs/glb/5a986c3e44fc686a2efe7648c3945bb7b51cf303918381383f21f898dd312cad.glb +0 -0
  97. package/corpus/brasscap-mesa/blobs/glb/5c32fc1de6d198ed606d3e8c3264319acdd950dab18e8b723fc6332bf2f56aea.glb +0 -0
  98. package/corpus/brasscap-mesa/blobs/glb/602ce4e8b00a0afbc1a894b65641e48d362ec834a559b9d97a4801473bb01da7.glb +0 -0
  99. package/corpus/brasscap-mesa/blobs/glb/6180f9f96167522d8cab4de1d52598cecee8d7ee042f48e41669c98cf61c19c3.glb +0 -0
  100. package/corpus/brasscap-mesa/blobs/glb/6205973ba63f7a554662ba05010d25131bed2d9656de422e2067ca54709d5b3c.glb +0 -0
  101. package/corpus/brasscap-mesa/blobs/glb/693e556f2165232e8a38b1b2d68676f235ece5705c564992cfa7731426f4d376.glb +0 -0
  102. package/corpus/brasscap-mesa/blobs/glb/6a46175438bec5527c281b577bd220b6badedf3c74266b997d39e596f83b8853.glb +0 -0
  103. package/corpus/brasscap-mesa/blobs/glb/6ca1bcad7ea053a259b7f9fc5a7ec388a4cd29d44391d93386ea8b1143d94c21.glb +0 -0
  104. package/corpus/brasscap-mesa/blobs/glb/6f9bc99656b611890d6acc76ee416f6222ca2d5f62167840b4216a21e020a4c8.glb +0 -0
  105. package/corpus/brasscap-mesa/blobs/glb/6fb1e7857996662233ab5314fc13f8aa30703f91c04542e352ec17f9dc4fc054.glb +0 -0
  106. package/corpus/brasscap-mesa/blobs/glb/7028ec39712143a7e9d09d2e1477282b654d0470102ca9d272ac82b23604cb21.glb +0 -0
  107. package/corpus/brasscap-mesa/blobs/glb/73af65ac86efa61099178f3e7075dcd26d389ee9b9aa3546c18dede10c3dfda1.glb +0 -0
  108. package/corpus/brasscap-mesa/blobs/glb/73b992b71bd3165ff7701ab1430c075cb5ba9b74e6363d24640377b1011ddc93.glb +0 -0
  109. package/corpus/brasscap-mesa/blobs/glb/7471261d4df59979ba41a622d93779b66ebecd50353ad433862e603ee65f8748.glb +0 -0
  110. package/corpus/brasscap-mesa/blobs/glb/76e9a3fcca962c2f900cf79dc1a0851840bd405dc11231f629f784adbcb69d23.glb +0 -0
  111. package/corpus/brasscap-mesa/blobs/glb/79d2d29e8cd8b642386b5f31429b39bc4d6f13e53107dda00ebc463abf80c79d.glb +0 -0
  112. package/corpus/brasscap-mesa/blobs/glb/7de66fcfffe4ff108510cbe6bebec44e28ab4b78e98e9c1a38466db5b81881f7.glb +0 -0
  113. package/corpus/brasscap-mesa/blobs/glb/811fa798cb81ea99488db98e3d3ddea815aac8f6e7493ad04d0176f603978678.glb +0 -0
  114. package/corpus/brasscap-mesa/blobs/glb/89b277f1636be220ff5658ff1f1c62efe14079d6e1f42efb373fbf0246801533.glb +0 -0
  115. package/corpus/brasscap-mesa/blobs/glb/905c5fe666d9f6174e987382e47d3f325c5696cf8792d7a4a1dd120a438b8270.glb +0 -0
  116. package/corpus/brasscap-mesa/blobs/glb/90efe3e05370ee853c0130b98ee82f00b86f7c7104e96b094715187fa49ac16f.glb +0 -0
  117. package/corpus/brasscap-mesa/blobs/glb/968a7c5cb13014bce00a29d43b344bd6943ff00ae2908abbc6b40a994f1172a1.glb +0 -0
  118. package/corpus/brasscap-mesa/blobs/glb/9a955b4e69dfa5b38f071099053c1a3684cf85ec2d346420de2853c61768f8cc.glb +0 -0
  119. package/corpus/brasscap-mesa/blobs/glb/9da2781216a2e482dd8a6ada5ebb43bcf48e0169430e787ac277559cb2ade19a.glb +0 -0
  120. package/corpus/brasscap-mesa/blobs/glb/9db02aab14a3b52463deadefbf4ba771809941e7fcb137c905955bdc80ec23bd.glb +0 -0
  121. package/corpus/brasscap-mesa/blobs/glb/a3fe1788cf5d7f260249c722f0e0695a4d55744d1b14be44122377147a296256.glb +0 -0
  122. package/corpus/brasscap-mesa/blobs/glb/a5c75af8f090d3c95fa46d2be49be5031138d7cd1bae234ae028edf717bf299e.glb +0 -0
  123. package/corpus/brasscap-mesa/blobs/glb/a771abd40bd337a464c1bd19f841b62e290124faa89b19ec50e85ab36bc740a5.glb +0 -0
  124. package/corpus/brasscap-mesa/blobs/glb/a94a2ad2ed463a47cdda117df25b06b3cf6be37ddac08594bc5f5d76c7237730.glb +0 -0
  125. package/corpus/brasscap-mesa/blobs/glb/ad434e4a6490e495994b25f7574a5847a9f7d9c2ca5a2b229a9dfdd2e5e2bb72.glb +0 -0
  126. package/corpus/brasscap-mesa/blobs/glb/aeae7b05404b852008a7897689e58aacef44a2c3bc0e87d2519ecdb4cb1e3ff5.glb +0 -0
  127. package/corpus/brasscap-mesa/blobs/glb/b0c0c8a4985f92be3b358a8e703c67957427501882aeee05b4ccd3c7880930d4.glb +0 -0
  128. package/corpus/brasscap-mesa/blobs/glb/b25174c3cd13eea6e1d9c3104ee5197dc6330129b2f0f7676e8a429900999d9b.glb +0 -0
  129. package/corpus/brasscap-mesa/blobs/glb/b3eecdec571df96338edf690443394ff859383b4c94f4cf33d42c240006f8543.glb +0 -0
  130. package/corpus/brasscap-mesa/blobs/glb/b7aa0c61ff9e7411535c7b7b8e587849a92bad00d431171ab16ad47d55db0a53.glb +0 -0
  131. package/corpus/brasscap-mesa/blobs/glb/b9deef944c22331bc05220d1d6e46412e3cb1246ef041a4405d0cbbd90c2d624.glb +0 -0
  132. package/corpus/brasscap-mesa/blobs/glb/ba9376e4ac39b809133ab717edb4c88b5219118766db492d7c97534ce119c2ec.glb +0 -0
  133. package/corpus/brasscap-mesa/blobs/glb/baf338e9c272158b905fb58a712e29410c657a45be2764f1c6c43ca87fd1db48.glb +0 -0
  134. package/corpus/brasscap-mesa/blobs/glb/bd442ac9fbe52b9f2e4ba586670017c3f2d9fedf1cbdec77ef24e9f8b3a183c8.glb +0 -0
  135. package/corpus/brasscap-mesa/blobs/glb/c142adcf253be43b66f23ede8cea1e8fcfa256ebf53054a1068ace04745718a6.glb +0 -0
  136. package/corpus/brasscap-mesa/blobs/glb/c6d7cbdc4b2ee9d416edf4d736a4f374f08aea98ca395ad371a50a1853744cfc.glb +0 -0
  137. package/corpus/brasscap-mesa/blobs/glb/cfb165a7675d15cee2c490b31095a58f73bace50ccc1e0fdf2c8dc4400f1df27.glb +0 -0
  138. package/corpus/brasscap-mesa/blobs/glb/d40f2ee59612473e9f687f17a0e203fdb4ba54c7185b05a8d81a433b04f24134.glb +0 -0
  139. package/corpus/brasscap-mesa/blobs/glb/d50ce95411156a6b6cf386aefa5ee58db659811813f74be74f323e7c5795056f.glb +0 -0
  140. package/corpus/brasscap-mesa/blobs/glb/d6af418bbde39b4fc7d22a61401d416be7a3fc1214ea2d3f42b4549c392d22ca.glb +0 -0
  141. package/corpus/brasscap-mesa/blobs/glb/de7222ceeb1f72693dfb7fd1f343798659e03772d77f2b498fd8ebece2d5550a.glb +0 -0
  142. package/corpus/brasscap-mesa/blobs/glb/e26975b198127ac3b6b4f5c4bc08ad47d6691398feee777743285391cd36d502.glb +0 -0
  143. package/corpus/brasscap-mesa/blobs/glb/ea428490cd5f2672676a2776a598b819b08246871e76de94b7196f9643144986.glb +0 -0
  144. package/corpus/brasscap-mesa/blobs/glb/eb96567a266d24be188cb5b08021112f2fad311cbead939d53c5565da11f6265.glb +0 -0
  145. package/corpus/brasscap-mesa/blobs/glb/ecf66230bf7b68050c0827c2e4caf3de90e46859d291b794faa0dd3816d9dac6.glb +0 -0
  146. package/corpus/brasscap-mesa/blobs/glb/ed8f067763a4a8adb83d80c8324b2a9668f1061f5f5352f21295e6cc5132386f.glb +0 -0
  147. package/corpus/brasscap-mesa/blobs/glb/ee507a38772865467736d370791fe73c6aa4d83fe3e7ff4baa156b9cb2894c1c.glb +0 -0
  148. package/corpus/brasscap-mesa/blobs/glb/eedc5b62dc6f27d4a089e9f5b282f626129236d3f1689b001e04f8748bf8859c.glb +0 -0
  149. package/corpus/brasscap-mesa/blobs/glb/f4119b9c6c23435619682b5d247743459e76584b9b0d6c5cb689d8e156906695.glb +0 -0
  150. package/corpus/brasscap-mesa/blobs/glb/f576047267a0bf9bd4bfc47072ea3d11066345b839953546292da678d1cb4722.glb +0 -0
  151. package/corpus/brasscap-mesa/blobs/glb/f8cdfb11997d4ccabea88bcdd3924cc8b621b33618b18fe5fbfd286edfc1d87e.glb +0 -0
  152. package/corpus/brasscap-mesa/blobs/glb/fce95ecc5db24c903bd46f338e366e2715411465a5efac180e2f0f46397e59de.glb +0 -0
  153. package/corpus/brasscap-mesa/blobs/image/0579557f9344df6f2c4b1225e6252e53ab86d417a4c9b504b5c714a08a388e47.jpg +0 -0
  154. package/corpus/brasscap-mesa/blobs/image/9e18816a2ec16fbbb1f00f4a39c73ac2cbf6a8cdc17b4c96b1eba4cc9a754dc7.jpg +0 -0
  155. package/corpus/brasscap-mesa/blobs/image/eb453c71cfb1f9441eb00b32281f98e226e49d9dcf75c231455575fcdc652222.jpg +0 -0
  156. package/corpus/brasscap-mesa/blobs/json/e0072ed82115c519b891f53a194ea3b28fff7d3826d8ddf23460d6f21b7728d9.json +1 -0
  157. package/corpus/brasscap-mesa/blobs/json/ffb0e08eaaa7188db1f55931c9b6330937316091cc7463ed2eff6767bbfa33de.json +1 -0
  158. package/corpus/brasscap-mesa/blobs/wasm/1d6ace79610c4d510b60ad0c52915e42b57797d91f1ef292f60d8a3daec03dd6.wasm +0 -0
  159. package/corpus/brasscap-mesa/blobs/wasm/24a4d4c1292677b1c984b5c0d3497ae2929528bf511df475f80cc20945bb08ec.wasm +0 -0
  160. package/corpus/brasscap-mesa/blobs/wasm/b86d8afcc269fb063ebf64768fc3787635b65a7409a571115b07be2e4da39733.wasm +0 -0
  161. package/corpus/brasscap-mesa/cook.json +1 -0
  162. package/corpus/brasscap-mesa/mounts/shardfiles/brasscap-mesa/discovery.json +1 -0
  163. package/corpus/brasscap-mesa/sections/actors/creatures.json +1 -0
  164. package/corpus/brasscap-mesa/sections/actors/crowds.json +1 -0
  165. package/corpus/brasscap-mesa/sections/actors/species.json +1 -0
  166. package/corpus/brasscap-mesa/sections/audio/audio.json +1 -0
  167. package/corpus/brasscap-mesa/sections/combat/encounters.json +1 -0
  168. package/corpus/brasscap-mesa/sections/combat/items.json +1 -0
  169. package/corpus/brasscap-mesa/sections/combat/strikes.json +1 -0
  170. package/corpus/brasscap-mesa/sections/economy/ledger.json +1 -0
  171. package/corpus/brasscap-mesa/sections/economy/loot.json +1 -0
  172. package/corpus/brasscap-mesa/sections/look/look.json +1 -0
  173. package/corpus/brasscap-mesa/sections/look/materials.json +1 -0
  174. package/corpus/brasscap-mesa/sections/quests/quests.json +1 -0
  175. package/corpus/brasscap-mesa/sections/sim/client-scripts.json +1 -0
  176. package/corpus/brasscap-mesa/sections/sim/hooks.json +1 -0
  177. package/corpus/brasscap-mesa/sections/sim/plumbing.json +1 -0
  178. package/corpus/brasscap-mesa/sections/sim/scripts.json +1 -0
  179. package/corpus/brasscap-mesa/sections/sim/sim.json +1 -0
  180. package/corpus/brasscap-mesa/sections/state/migrations.json +1 -0
  181. package/corpus/brasscap-mesa/sections/state/state.json +1 -0
  182. package/corpus/brasscap-mesa/sections/ui/card.json +1 -0
  183. package/corpus/brasscap-mesa/sections/ui/compendium.json +1 -0
  184. package/corpus/brasscap-mesa/sections/ui/level.json +1 -0
  185. package/corpus/brasscap-mesa/sections/ui/ui.json +1 -0
  186. package/corpus/brasscap-mesa/sections/world/collision.json +1 -0
  187. package/corpus/brasscap-mesa/sections/world/days.json +1 -0
  188. package/corpus/brasscap-mesa/sections/world/edge.json +1 -0
  189. package/corpus/brasscap-mesa/sections/world/movers.json +1 -0
  190. package/corpus/brasscap-mesa/sections/world/navigation.json +1 -0
  191. package/corpus/brasscap-mesa/sections/world/props.json +1 -0
  192. package/corpus/brasscap-mesa/sections/world/spawn.json +1 -0
  193. package/corpus/brasscap-mesa/sections/world/terrain.json +1 -0
  194. package/corpus/brasscap-mesa/sections/world/tiles.json +1 -0
  195. package/corpus/brasscap-mesa/sections/world/traversal.json +1 -0
  196. package/corpus/brasscap-mesa/sections/world/water.json +1 -0
  197. package/corpus/brasscap-mesa/sections/world/weather.json +1 -0
  198. package/corpus/brasscap-mesa/shard.json +1 -0
  199. package/corpus/brasscap-mesa/validation.json +1 -0
  200. package/corpus/handwritten/blobs/bin/027822f6ae9c374ce1ced851f2227cb9acb03077e5cc6b7fecb245c31f021abd.bin +0 -0
  201. package/corpus/handwritten/blobs/bin/0377ce182bd604bcf4d501f14bf954c434ea64ad856ad9d71c502d1045612703.bin +0 -0
  202. package/corpus/handwritten/blobs/bin/05ad93d239eeeb5d9afa09b00d90c56098d88e8850e5b5e691fcaa7520dec3cd.bin +0 -0
  203. package/corpus/handwritten/blobs/bin/0c8980141e6e394ea473df1eb11c347ba617a1a9a4b39b3fa1871b5d15b97d87.bin +0 -0
  204. package/corpus/handwritten/blobs/bin/14eb11f8d809320e0a68b1edea7837d7a5b4a3da71f1ce4f54068e0afe0b039b.bin +0 -0
  205. package/corpus/handwritten/blobs/bin/16590066c039ac71e5038a9866a53ccb95e21af13db29cb655b379c4fcfef7bb.bin +0 -0
  206. package/corpus/handwritten/blobs/bin/1795b5147ad52482445d2414ee22823b947c43a917b6e96fd9ec017f17000912.bin +0 -0
  207. package/corpus/handwritten/blobs/bin/18f2e24ecc1ed1b1d12ae1c89732a5a1a618ab6e973d4ff0332cf9ecc4e4f4a6.bin +0 -0
  208. package/corpus/handwritten/blobs/bin/1a18ade01095f1a9ebe75650127861ef27dda0bb17c2b91bde057ec88ef2e98a.bin +0 -0
  209. package/corpus/handwritten/blobs/bin/1dba017cddb874bc147efb00c55418846ffa344a696f4df702bbabeea55034d0.bin +0 -0
  210. package/corpus/handwritten/blobs/bin/248c703537e4687ddd2b69a40d1ef3936da718626289d6867ce0a6866f562ba4.bin +0 -0
  211. package/corpus/handwritten/blobs/bin/2612d9fd4727f8c349f2dbfb7b1650bb7a752d0798a4966ac22cf2b6cdd9fcef.bin +0 -0
  212. package/corpus/handwritten/blobs/bin/28c54c766e90e3b046a2377b9fa015b0ce45cf3da4420f2b10553251f86c06aa.bin +0 -0
  213. package/corpus/handwritten/blobs/bin/30866b4807b12579f50218f6525c3db00919fbd43c97921daf47b3244b25dca6.bin +0 -0
  214. package/corpus/handwritten/blobs/bin/3d14fae85d77406a9b8c59f2e973cdae9587d49108ea92fb460679ca860196b8.bin +0 -0
  215. package/corpus/handwritten/blobs/bin/3f2201a53c441abcfb52089fe9bbb01f26fac8744099d3fb6668452885c2fa11.bin +0 -0
  216. package/corpus/handwritten/blobs/bin/42f270a99367fc4cc901518ccaa344ab595e265f113be944510da745c11f69d1.bin +0 -0
  217. package/corpus/handwritten/blobs/bin/43fd4327fedd51a586684ac611bcad4a8b9d62e51e03967de71fb42c9bf0f6e1.bin +0 -0
  218. package/corpus/handwritten/blobs/bin/484adda0898a881b6f095dad447f6a619bf0933f65efe940b72f1ab7f3630c22.bin +0 -0
  219. package/corpus/handwritten/blobs/bin/4a38cd49e8797429ce76265c3d8972195d5b0a02a35fc05fc513eab11240f415.bin +0 -0
  220. package/corpus/handwritten/blobs/bin/4fe636237bbbd4f836b0816bc61702f4c224d4cb91fbd94f244c731e24a1b945.bin +0 -0
  221. package/corpus/handwritten/blobs/bin/51b1cff782dc7ebb382bc429ee965023d4cdb52c7b3e37d6ffff5ef55c1c2813.bin +0 -0
  222. package/corpus/handwritten/blobs/bin/52561f02071ecaa98432fab5e8ece407a8e8f733a01f8eb7c543d1efe02614da.bin +0 -0
  223. package/corpus/handwritten/blobs/bin/556d6333923afea9641c4738741a41d6a46ae28a508288b9a49a749a344c1398.bin +0 -0
  224. package/corpus/handwritten/blobs/bin/5caeb97f32c7f31e1029eebdf31131f879f781bb5e3a225206a646710d83fd75.bin +0 -0
  225. package/corpus/handwritten/blobs/bin/5d1131e42a045083225105b640ff72e02c7f353ee6285545ac264d01bea26b1b.bin +0 -0
  226. package/corpus/handwritten/blobs/bin/5d80b30eee9f8342a92f6756fd0d84fb9d2d2ce994d222627641e584ad45d2a8.bin +0 -0
  227. package/corpus/handwritten/blobs/bin/5e0f9f7f2a85abe11a0a61ede853c9b9942b4494c3eb9943785cf6ae221e40e3.bin +0 -0
  228. package/corpus/handwritten/blobs/bin/5fdc5485343bba8201185c9bae862ad8618498ab5ce63b53514e4e0226fa7bdb.bin +0 -0
  229. package/corpus/handwritten/blobs/bin/6623dcb0b31c9ca0be342f6dca6b9e607ec3c12ff82068fa6030c142c2df77f7.bin +0 -0
  230. package/corpus/handwritten/blobs/bin/6887131a04175edbd1989aa95e8749d1703e7f2d0b8464e85f6bad28d6964125.bin +0 -0
  231. package/corpus/handwritten/blobs/bin/6cf89771d998486cad9049e6f4fc177d742a18ad79fafa4596814ff9d3cf1952.bin +0 -0
  232. package/corpus/handwritten/blobs/bin/74bbb0fc219e8476cd5550014a357ee18abc981ff3fe787ae3e60d4593705ec5.bin +0 -0
  233. package/corpus/handwritten/blobs/bin/76784a7f519ac43ce113a0c9365881839b75f66f96aa009fe8d3c8ab539ef283.bin +0 -0
  234. package/corpus/handwritten/blobs/bin/79a2f693ee2da546bb551f8b641b9c3affd2b8bfb5632ed7f417daba9d900af9.bin +0 -0
  235. package/corpus/handwritten/blobs/bin/7b593b0f9eefb957fb9d58b316d9836971203038d7c8127284bba44ccb3090bb.bin +0 -0
  236. package/corpus/handwritten/blobs/bin/7bb8e518ca5606de78972a6c648b57623f8bc12d7e06b4bbf43c60ac419a9bbd.bin +0 -0
  237. package/corpus/handwritten/blobs/bin/7c6133f3350147257fa501f41269cb77cb11d8ed96d351e873333b079cee524a.bin +0 -0
  238. package/corpus/handwritten/blobs/bin/7f5acf1893828995256f5b2c54948f80ba21e53de72db26ea72ce2479f5b0682.bin +0 -0
  239. package/corpus/handwritten/blobs/bin/836516253cf0f3e6e79537609fdbe6331c8c5c974f9ec4d3fbe4a7db48cf123d.bin +0 -0
  240. package/corpus/handwritten/blobs/bin/89900344f82d5c1474d2a163f8d29903447bac64e9c9775123ef499be70c2380.bin +0 -0
  241. package/corpus/handwritten/blobs/bin/95d76a9273c3edd98b3643c54e2e7989800bdcaf6f815230ef09f601e760330f.bin +0 -0
  242. package/corpus/handwritten/blobs/bin/a7b5a5fe053a38c93eed899bde5051cddd80e0a3f3c82b6fd814869097f0944b.bin +0 -0
  243. package/corpus/handwritten/blobs/bin/b29be84df0bfd1bc97a1464fd5ea068130947bfed3328e167640c81326eb45d7.bin +0 -0
  244. package/corpus/handwritten/blobs/bin/b6518dc352be03332a256f1cd9d1149da262fe6829e87ba43364f19c687ca7c9.bin +0 -0
  245. package/corpus/handwritten/blobs/bin/b7edb8095beeb158adb61ae3caa1653773757afbcd8fb2764c94b975a43fe9e2.bin +0 -0
  246. package/corpus/handwritten/blobs/bin/b86d617ae7fa397df51ff7af87cd89fa113ac19abd3840ea8f3a086d6c82905c.bin +0 -0
  247. package/corpus/handwritten/blobs/bin/bb860b5c67ee7f2fafd67588822152228d6f6c9de1231123eeafa4844732b18b.bin +0 -0
  248. package/corpus/handwritten/blobs/bin/bf8c3971bbb224075d488ffa9cfc20e322c61f9ca0c59c356838415f6778014b.bin +0 -0
  249. package/corpus/handwritten/blobs/bin/c2edd52ee14ebdc9fcc01d38c15d6ab3379df7a20098c260c546551898959cd1.bin +0 -0
  250. package/corpus/handwritten/blobs/bin/c3de13c551c5b45270143dcbb9fc9a31651f6012355823c0709c2fe6cafda940.bin +0 -0
  251. package/corpus/handwritten/blobs/bin/c57a8d9da18b1289afd16de00dd1ec75027048b8dcf7dd218da36bc3276ff035.bin +0 -0
  252. package/corpus/handwritten/blobs/bin/cc2975c9dea4c31b1bf380623a8f44059423004653f9cae4f603d374174323b7.bin +0 -0
  253. package/corpus/handwritten/blobs/bin/d476abba2e1c63ad3c7527617559173484ee837a5be2744d968466d5527c286b.bin +0 -0
  254. package/corpus/handwritten/blobs/bin/db242f89115c878cf0c3b976a1647e9cdeb6a1a51813b1dacaf1188715603294.bin +0 -0
  255. package/corpus/handwritten/blobs/bin/dcc4b9b3bc4ca777d11c494ae5478f17ad7cf2efa18dcba30def872d55355bc3.bin +0 -0
  256. package/corpus/handwritten/blobs/bin/dd99da483f385327d6b8319d6e2e9000b580280069353718aa0fda2230707e8b.bin +0 -0
  257. package/corpus/handwritten/blobs/bin/dfc139dba26f1789e16f72602e654636f2d99bcd41e3f10454da74b3a6a64dda.bin +0 -0
  258. package/corpus/handwritten/blobs/bin/e15ab3cc9f60657321cfe8d9751e086f025734f4e7068271e0baf6066a686f18.bin +0 -0
  259. package/corpus/handwritten/blobs/bin/e16a83a71213db6f804ce1d53981a2308062752c85c440022d9eeb7605fd37c8.bin +0 -0
  260. package/corpus/handwritten/blobs/bin/e7355876487f660ac9f25c9d9dfcd66eaf432e1e1669eb89d12ce8267a8d3e86.bin +0 -0
  261. package/corpus/handwritten/blobs/bin/e81a632e2da0f6a4d801f18aadfe2c6e640401cc1178935a9099ebb8e3af6cc1.bin +0 -0
  262. package/corpus/handwritten/blobs/bin/f0721c60d0b1046579d8c587fac8482a70822f0b39a85f9acc0cfc31f82b7dd2.bin +0 -0
  263. package/corpus/handwritten/blobs/bin/f301cf574de6d84030f839098ca44705dca115f9d3e4ee848e0b35fff3deaf77.bin +0 -0
  264. package/corpus/handwritten/blobs/bin/f7797f295a7570c437bf7020a1ddf208fea2a7aab595333320a6396c1608d360.bin +0 -0
  265. package/corpus/handwritten/blobs/glb/08de0bb2439ac812adef528b4b073bdb954bbeada972a2f3afb1757bd0540396.glb +0 -0
  266. package/corpus/handwritten/blobs/glb/153681171c35d2898569324e21ebe734b8418d4122833618a1e64ea326be1e5e.glb +0 -0
  267. package/corpus/handwritten/blobs/glb/1df5ce0b6cae72ec4cf3c41510681ba70ebb474f9745d536ebd4f03e8fc82de9.glb +0 -0
  268. package/corpus/handwritten/blobs/glb/262031e2fa710bd8d586eafce1019ca1434a2170e407567741aac1d99fc9c5ab.glb +0 -0
  269. package/corpus/handwritten/blobs/glb/27466efb180fb5b5074b40e424bd0b8d78f7ff0f5f3663748e014daeeeb5bedd.glb +0 -0
  270. package/corpus/handwritten/blobs/glb/2d2f6d00a14c89a4efb7f679b371118f564f258797ed8b8b42baf4ae60902ea6.glb +0 -0
  271. package/corpus/handwritten/blobs/glb/31f327d215ed7ef422e2169172f3869769e9816c9da979616844081e74f2eb09.glb +0 -0
  272. package/corpus/handwritten/blobs/glb/3bfe0e9ca18077ffee9c284ef40fed9f2fc354f7495612c785a6f980b5966559.glb +0 -0
  273. package/corpus/handwritten/blobs/glb/3db43042b3eeb1dee7ce9de1cc00322cefc348aa18c37d168b0858e6af6ca7a4.glb +0 -0
  274. package/corpus/handwritten/blobs/glb/46460a50da44fb8e792b48a646ec9ce025bb309d315dbcf67d2e9598591750de.glb +0 -0
  275. package/corpus/handwritten/blobs/glb/4902213556fedaf269fba6f0f195e424b2e49973ab45dcb8b69e34d253d9d8ff.glb +0 -0
  276. package/corpus/handwritten/blobs/glb/4dda463c9cd4bf339e5611871d4ba2fe16fe1487389a88b2888e96bc55e45d93.glb +0 -0
  277. package/corpus/handwritten/blobs/glb/4ed23469bd2b6b73183564cfc80a1ebcd0ffe2666a90a556752af0ca147fd2f7.glb +0 -0
  278. package/corpus/handwritten/blobs/glb/4fe74a1bed6b67129885b90cfcae01b5ca82e23e6d40507e280f02fca7fda54f.glb +0 -0
  279. package/corpus/handwritten/blobs/glb/50521bb3a50cc7199d324a0b25bc167c2e9d69770cb500490428efefc81ce3ea.glb +0 -0
  280. package/corpus/handwritten/blobs/glb/5ecca36d1e503edc092af0ef42f139cdcad99b8c2008318eb6ad337023d57296.glb +0 -0
  281. package/corpus/handwritten/blobs/glb/60fc036925852568cdb1b9fb85218dc43a8bf2ed86d3971a221ad942ece203a7.glb +0 -0
  282. package/corpus/handwritten/blobs/glb/611633cee0e5822b744486e6dff5414ad5b159eaabffe1c0ba0bb68be794bfa1.glb +0 -0
  283. package/corpus/handwritten/blobs/glb/67c7f983a0bcb9f84425378acac121a53f30795dce3181643bc1b763d0ae80b5.glb +0 -0
  284. package/corpus/handwritten/blobs/glb/6ecc0d307030943727484b49b1872643479c55ccc92252fca06e9e3cbe98fa90.glb +0 -0
  285. package/corpus/handwritten/blobs/glb/774b366df4de56cb6f9e3c904f02ec98016ac2ec489dc9e214b09220fca2f8e5.glb +0 -0
  286. package/corpus/handwritten/blobs/glb/785bae514ffc029e611d602259db7d37cbef589409a0814b9d37175d8b6c0a45.glb +0 -0
  287. package/corpus/handwritten/blobs/glb/79e79524efb2830e90af3c945c5b36ef07c1a38f2da2958112203a99eac52a16.glb +0 -0
  288. package/corpus/handwritten/blobs/glb/7bebdcdaf0be30d9f8d21bde72af68c32d825d12dc668f48109223ed7ff71c9f.glb +0 -0
  289. package/corpus/handwritten/blobs/glb/7d8b5ec9326a11362b3f9fa3409cb59d11b99f549cc304319c63c1ec55cbf5ab.glb +0 -0
  290. package/corpus/handwritten/blobs/glb/82e886f826315e4bf962363165fadadd3d93f85132c1909095045e0a7ccc0b34.glb +0 -0
  291. package/corpus/handwritten/blobs/glb/84b4ef190c3994ae7ca1b1f7a936526d1d20ad7deac13f949e3fe6bb7ba139ed.glb +0 -0
  292. package/corpus/handwritten/blobs/glb/85b7153e943fbe8c659bd6e4b323511dc6f6e2c7a3a1185e7a9a29ea6ddfdfa6.glb +0 -0
  293. package/corpus/handwritten/blobs/glb/85cf2d2be91cedbaf454ca42ad53c0c17b311088528d274695dbcea490d6c684.glb +0 -0
  294. package/corpus/handwritten/blobs/glb/8662b4cdc626c61a45e63f71dc866746c083cd0d4644b817a373105f936a7047.glb +0 -0
  295. package/corpus/handwritten/blobs/glb/8a4d33bfbb17d865e5deb0a0bdf3de67fc2312950a7568ed2635c22fbe4b1ecf.glb +0 -0
  296. package/corpus/handwritten/blobs/glb/8b11171d41c9027411ca8b87797d9ec70355471bdd3a247c114c49b8b781bbd9.glb +0 -0
  297. package/corpus/handwritten/blobs/glb/9026e1c4f0250832b69a989e69fe3071e5cad72adfe9c22ce11c409b18bb3357.glb +0 -0
  298. package/corpus/handwritten/blobs/glb/945b946f17b6393ea040230641c3083678bb6ab42e1d7239aeb9c950d0e7d5bb.glb +0 -0
  299. package/corpus/handwritten/blobs/glb/9afab455d603f1f8a38074c5a6cbed26d7d7f2cfd8a531820bd165d4b37399ee.glb +0 -0
  300. package/corpus/handwritten/blobs/glb/a6d702fb1be1095517625bfb2a2383f5f9638775059fd7e0d093d2044651b848.glb +0 -0
  301. package/corpus/handwritten/blobs/glb/aae479c2f99848998a1b499bbcad815d971349c2442bc363786aef63baad4337.glb +0 -0
  302. package/corpus/handwritten/blobs/glb/b155bd41f260d5303e293d691b657e0fb9b9c8b2f8aa589a0187061baa033eb7.glb +0 -0
  303. package/corpus/handwritten/blobs/glb/b1e8b770d99e8ca4396f21fd512f632c587149fc13db69deba388f702a46982f.glb +0 -0
  304. package/corpus/handwritten/blobs/glb/b382c318a5baac35da59a7b99ebaad6992e30c4bac327e85851ce0b2f89aa58b.glb +0 -0
  305. package/corpus/handwritten/blobs/glb/ba4478198696802808262af9bbfc224fe37e24e3f8c13de91debc87d3e1a9d41.glb +0 -0
  306. package/corpus/handwritten/blobs/glb/baf02cd967d1bf3c6a2ae878f4ca4ed34d0c39302ca2b8b6e3560a4e87b5c16f.glb +0 -0
  307. package/corpus/handwritten/blobs/glb/bc14dd152815ea6ed39458dcf89f2d69173d61d6e2b57be99d31ce2da64ccf67.glb +0 -0
  308. package/corpus/handwritten/blobs/glb/bc4e4d3bcf7ace855183efec0fbf242d444a32714d8b2fd8a45fa7b539ef2c73.glb +0 -0
  309. package/corpus/handwritten/blobs/glb/bc53475e2aa2fc9c2c0574b36a449fd57259c462d771e2b360def5c338d37c26.glb +0 -0
  310. package/corpus/handwritten/blobs/glb/c35d9e50f392c29f2587e3a6eb4f21143ba08e48d76a53b9de62d3b5be46c1a5.glb +0 -0
  311. package/corpus/handwritten/blobs/glb/c6911e059d3ac6aea75bc0ad3dd8b220704bfbba8ba98b57705e7aa3ecbe0050.glb +0 -0
  312. package/corpus/handwritten/blobs/glb/c84d88b6ed878490bcf9fa985b5e6a7a683de8ee7808ee4151a3b6a898fbe4f2.glb +0 -0
  313. package/corpus/handwritten/blobs/glb/c9d5d02ef0e38ac2898d3e6ecbc2ea0a6d2bd04531118550ab54b5e83293d7ec.glb +0 -0
  314. package/corpus/handwritten/blobs/glb/cd9d04e361e4c3d0aeb82f8682d71114ff8318b8fc4980bccee3c5e5c16afc27.glb +0 -0
  315. package/corpus/handwritten/blobs/glb/d32499928422a0cd1a32b1afaeacc31d2d84d74876f6805b36218dc04402a921.glb +0 -0
  316. package/corpus/handwritten/blobs/glb/dc7ea629fcddeba445599d73a5d721f4d5004e056c3c140baa3e6817393c6462.glb +0 -0
  317. package/corpus/handwritten/blobs/glb/dce79b59c85ca5a7f9fc25e585d253b15558f8f5d8497a76923c9071601de8b1.glb +0 -0
  318. package/corpus/handwritten/blobs/glb/e7fa1b02bae6c8d19ace0e8db44810beab9a1be9f8172d5816324760267d6d11.glb +0 -0
  319. package/corpus/handwritten/blobs/glb/eb664feed0fdcc3ac73cecbe737109994fe5dfad8a33997de88598965fa936ba.glb +0 -0
  320. package/corpus/handwritten/blobs/glb/ec6a771ca852b0b69e55a12df9d347384d01e611c8c6151ea771910f1601605d.glb +0 -0
  321. package/corpus/handwritten/blobs/glb/ede05013f575b4216d2b4b3f8a14d611ef28756f952f702bb169529c8ab02eff.glb +0 -0
  322. package/corpus/handwritten/blobs/glb/fec21fa96950340a1a031b31b37407468361ab0a7645c683e0d7773c18591a26.glb +0 -0
  323. package/corpus/handwritten/blobs/glb/ff21ea082bb00b01006900e7dbbb85220f31f45c144405c840a70872f9e09cb9.glb +0 -0
  324. package/corpus/handwritten/blobs/image/248fe9601e921305ffb35421414bc5f03e9f1b3dba15bf9b5c3387d8f255da17.png +0 -0
  325. package/corpus/handwritten/blobs/image/4b47420aff1ded28c9c6cf1eb92d6e2d7b01d057f2654654405445ff8d562e55.webp +0 -0
  326. package/corpus/handwritten/blobs/image/5dbc818ed0be692e6ba3df87898fd623280a2686eed5a538333e1325764b238d.png +0 -0
  327. package/corpus/handwritten/blobs/image/d5ae692911bbc2b60b5fdde239b70aad4ce9be0d7665c4a91b438de6077e21e3.jpg +0 -0
  328. package/corpus/handwritten/blobs/ktx2/df0dd2e8adc1d9479148bb198cb750471df454680cf0c9ffd6dc85d6262ed676.ktx2 +0 -0
  329. package/corpus/handwritten/blobs/wasm/ecc886d8bbebcf190298ff9162b6bb364f2125606f5bdc8cc220ea28044f96ea.wasm +0 -0
  330. package/corpus/handwritten/cook.json +1 -0
  331. package/corpus/handwritten/mounts/shardfiles/blender-template/discovery.json +1 -0
  332. package/corpus/handwritten/sections/actors/creatures.json +1 -0
  333. package/corpus/handwritten/sections/actors/crowds.json +1 -0
  334. package/corpus/handwritten/sections/actors/species.json +1 -0
  335. package/corpus/handwritten/sections/audio/audio.json +1 -0
  336. package/corpus/handwritten/sections/client/plan.json +1 -0
  337. package/corpus/handwritten/sections/combat/encounters.json +1 -0
  338. package/corpus/handwritten/sections/combat/items.json +1 -0
  339. package/corpus/handwritten/sections/combat/strikes.json +1 -0
  340. package/corpus/handwritten/sections/economy/ledger.json +1 -0
  341. package/corpus/handwritten/sections/economy/loot.json +1 -0
  342. package/corpus/handwritten/sections/look/look.json +1 -0
  343. package/corpus/handwritten/sections/look/map.json +1 -0
  344. package/corpus/handwritten/sections/look/materials.json +1 -0
  345. package/corpus/handwritten/sections/quests/quests.json +1 -0
  346. package/corpus/handwritten/sections/sim/client-scripts.json +1 -0
  347. package/corpus/handwritten/sections/sim/hooks.json +1 -0
  348. package/corpus/handwritten/sections/sim/plumbing.json +1 -0
  349. package/corpus/handwritten/sections/sim/sim.json +1 -0
  350. package/corpus/handwritten/sections/state/migrations.json +1 -0
  351. package/corpus/handwritten/sections/state/state.json +1 -0
  352. package/corpus/handwritten/sections/ui/card.json +1 -0
  353. package/corpus/handwritten/sections/ui/compendium.json +1 -0
  354. package/corpus/handwritten/sections/ui/level.json +1 -0
  355. package/corpus/handwritten/sections/ui/ui.json +1 -0
  356. package/corpus/handwritten/sections/world/collision.json +1 -0
  357. package/corpus/handwritten/sections/world/days.json +1 -0
  358. package/corpus/handwritten/sections/world/edge.json +1 -0
  359. package/corpus/handwritten/sections/world/movers.json +1 -0
  360. package/corpus/handwritten/sections/world/navigation.json +1 -0
  361. package/corpus/handwritten/sections/world/props.json +1 -0
  362. package/corpus/handwritten/sections/world/spawn.json +1 -0
  363. package/corpus/handwritten/sections/world/terrain.json +1 -0
  364. package/corpus/handwritten/sections/world/tiles.json +1 -0
  365. package/corpus/handwritten/sections/world/traversal.json +1 -0
  366. package/corpus/handwritten/sections/world/water.json +1 -0
  367. package/corpus/handwritten/sections/world/weather.json +1 -0
  368. package/corpus/handwritten/shard.json +1 -0
  369. package/corpus/handwritten/validation.json +1 -0
  370. package/package.json +511 -4
  371. package/packages/wire/src/net-command.ts +150 -0
  372. package/src/cli/bin.mjs +9 -0
  373. package/src/cli/main.ts +148 -0
  374. package/src/cli/pack.ts +262 -0
  375. package/src/cli/validate.ts +210 -0
  376. package/src/cli/version.ts +13 -0
  377. package/src/format/aacIndex.ts +160 -0
  378. package/src/format/accent.ts +35 -0
  379. package/src/format/achievementCounters.ts +22 -0
  380. package/src/format/actorMoves.ts +615 -0
  381. package/src/format/actorProjectionV2.ts +93 -0
  382. package/src/format/admissionControl.ts +66 -0
  383. package/src/format/admissionLate.ts +22 -0
  384. package/src/format/admissionLimits.ts +11 -0
  385. package/src/format/admissionServer.ts +30 -0
  386. package/src/format/ambientLife.ts +123 -0
  387. package/src/format/arenaRoomDocument.ts +114 -0
  388. package/src/format/arenaScriptRows.ts +107 -0
  389. package/src/format/arenaView.ts +30 -0
  390. package/src/format/assetAdmission.ts +279 -0
  391. package/src/format/audio-measure.ts +184 -0
  392. package/src/format/audio-mp4.ts +234 -0
  393. package/src/format/audio-rules.ts +271 -0
  394. package/src/format/audio-waiver.ts +55 -0
  395. package/src/format/audio.ts +463 -0
  396. package/src/format/audioBank.ts +37 -0
  397. package/src/format/audioProfiles.ts +501 -0
  398. package/src/format/audioRouting.ts +67 -0
  399. package/src/format/audioScene.ts +342 -0
  400. package/src/format/bakedTerrainBytes.ts +35 -0
  401. package/src/format/bakedTerrainSampling.ts +66 -0
  402. package/src/format/bakedTiles.ts +407 -0
  403. package/src/format/binarySource.ts +32 -0
  404. package/src/format/bodySlots.ts +90 -0
  405. package/src/format/bossEncounter.ts +354 -0
  406. package/src/format/bossProfiles.ts +709 -0
  407. package/src/format/bossSocketRig.ts +92 -0
  408. package/src/format/bowVariantRows.ts +68 -0
  409. package/src/format/brains.ts +252 -0
  410. package/src/format/budget.ts +214 -0
  411. package/src/format/buildings.ts +496 -0
  412. package/src/format/builtIndexes.ts +26 -0
  413. package/src/format/catalogueEconomy.ts +65 -0
  414. package/src/format/caveInterior.ts +225 -0
  415. package/src/format/cellBounds.ts +47 -0
  416. package/src/format/cellField.ts +98 -0
  417. package/src/format/chapterDirector.ts +193 -0
  418. package/src/format/clientChannels.ts +450 -0
  419. package/src/format/clientCues.ts +34 -0
  420. package/src/format/clientNative.ts +358 -0
  421. package/src/format/clientOwnership.ts +43 -0
  422. package/src/format/clientPlan.ts +306 -0
  423. package/src/format/clientScripts.ts +116 -0
  424. package/src/format/clientState.ts +273 -0
  425. package/src/format/clientTrails.ts +56 -0
  426. package/src/format/collectionDisplay.ts +232 -0
  427. package/src/format/colourFunction.ts +44 -0
  428. package/src/format/colourLut.ts +4 -0
  429. package/src/format/commonsCosts.ts +28 -0
  430. package/src/format/compendiumRows.ts +151 -0
  431. package/src/format/compendiumSketches.ts +23 -0
  432. package/src/format/completion.ts +83 -0
  433. package/src/format/contentBounds.ts +76 -0
  434. package/src/format/contentCost.ts +50 -0
  435. package/src/format/contracts.ts +305 -0
  436. package/src/format/cook-data.ts +148 -0
  437. package/src/format/cook-preparation.ts +241 -0
  438. package/src/format/coverAppearance.ts +53 -0
  439. package/src/format/creatures.ts +175 -0
  440. package/src/format/crowdPresentation.ts +87 -0
  441. package/src/format/crowds.ts +46 -0
  442. package/src/format/cueDirector.ts +134 -0
  443. package/src/format/dayCycle.ts +28 -0
  444. package/src/format/dayLook.ts +44 -0
  445. package/src/format/decisionBindings.ts +80 -0
  446. package/src/format/decisionPublication.ts +35 -0
  447. package/src/format/decisionScripts.ts +327 -0
  448. package/src/format/declaredQuestPage.ts +101 -0
  449. package/src/format/deviceMemoryCost.ts +50 -0
  450. package/src/format/director.ts +52 -0
  451. package/src/format/directorProduct.ts +27 -0
  452. package/src/format/directorStages.ts +165 -0
  453. package/src/format/directorWhen.ts +78 -0
  454. package/src/format/discoveryValues.ts +416 -0
  455. package/src/format/easedFields.ts +48 -0
  456. package/src/format/edgeProfiles.ts +40 -0
  457. package/src/format/eliteContinuation.ts +110 -0
  458. package/src/format/eliteEntryRows.ts +351 -0
  459. package/src/format/eliteFeature.ts +605 -0
  460. package/src/format/eliteScripts.ts +60 -0
  461. package/src/format/encounterRows.ts +1030 -0
  462. package/src/format/encounters.ts +65 -0
  463. package/src/format/engine-music.ts +42 -0
  464. package/src/format/entryClearance.ts +86 -0
  465. package/src/format/entryCoverage.ts +61 -0
  466. package/src/format/entryGeometry.ts +56 -0
  467. package/src/format/entryLanding.ts +83 -0
  468. package/src/format/entryReads.ts +45 -0
  469. package/src/format/entrywayAssets.ts +33 -0
  470. package/src/format/entryways.ts +58 -0
  471. package/src/format/exchange.ts +25 -0
  472. package/src/format/explorerCatalogue.ts +312 -0
  473. package/src/format/feature-sides.ts +233 -0
  474. package/src/format/fieldPresentation.ts +62 -0
  475. package/src/format/figures.ts +437 -0
  476. package/src/format/findsCatalogue.ts +67 -0
  477. package/src/format/fixedDraws.ts +24 -0
  478. package/src/format/flyers.ts +226 -0
  479. package/src/format/forestNativeInputs.ts +37 -0
  480. package/src/format/forestPage.ts +285 -0
  481. package/src/format/forestWeather.ts +333 -0
  482. package/src/format/geometryPack.ts +136 -0
  483. package/src/format/glbBuffers.ts +77 -0
  484. package/src/format/glbCost.ts +212 -0
  485. package/src/format/glbImages.ts +95 -0
  486. package/src/format/glbTriangles.ts +95 -0
  487. package/src/format/graphArmsRows.ts +200 -0
  488. package/src/format/grapple.ts +123 -0
  489. package/src/format/grazers.ts +164 -0
  490. package/src/format/grid-catalogue.ts +247 -0
  491. package/src/format/gridReadiness.ts +49 -0
  492. package/src/format/groupBrains.ts +249 -0
  493. package/src/format/heldArms.ts +576 -0
  494. package/src/format/heldEquipment.ts +78 -0
  495. package/src/format/heldFinishes.ts +415 -0
  496. package/src/format/heldGear.ts +68 -0
  497. package/src/format/heldJianDocument.ts +75 -0
  498. package/src/format/heldMelee.ts +866 -0
  499. package/src/format/heldView.ts +26 -0
  500. package/src/format/heldWeaponDocuments.ts +36 -0
  501. package/src/format/herdShelter.ts +58 -0
  502. package/src/format/hooks.ts +45 -0
  503. package/src/format/immutable.ts +59 -0
  504. package/src/format/inputDeclarations.ts +157 -0
  505. package/src/format/islandLibrary.ts +51 -0
  506. package/src/format/items.ts +229 -0
  507. package/src/format/json.ts +143 -0
  508. package/src/format/keyedSky.ts +314 -0
  509. package/src/format/kitFigure.ts +68 -0
  510. package/src/format/ktx2Cost.ts +47 -0
  511. package/src/format/ledger.ts +56 -0
  512. package/src/format/liftApproach.ts +75 -0
  513. package/src/format/liftRider.ts +10 -0
  514. package/src/format/lightEmitters.ts +105 -0
  515. package/src/format/lights.ts +135 -0
  516. package/src/format/limbCollision.ts +136 -0
  517. package/src/format/limbPopulation.ts +33 -0
  518. package/src/format/limbRig.ts +202 -0
  519. package/src/format/loadout.ts +156 -0
  520. package/src/format/look-light.ts +153 -0
  521. package/src/format/lootBag.ts +145 -0
  522. package/src/format/lootEconomy.ts +235 -0
  523. package/src/format/materialFamilies.ts +565 -0
  524. package/src/format/materialGraph.ts +1220 -0
  525. package/src/format/materials.ts +449 -0
  526. package/src/format/memoryAdmission.ts +84 -0
  527. package/src/format/memoryGates.json +7 -0
  528. package/src/format/meshCollision.ts +56 -0
  529. package/src/format/meshCollisionAssets.ts +19 -0
  530. package/src/format/meshCollisionBytes.ts +102 -0
  531. package/src/format/meshEntryways.ts +54 -0
  532. package/src/format/meshopt-decoder.wasm +0 -0
  533. package/src/format/meshopt-module.ts +177 -0
  534. package/src/format/meshopt-static.mjs +11 -0
  535. package/src/format/meshopt-wasm.ts +61 -0
  536. package/src/format/migrations.ts +209 -0
  537. package/src/format/minimap.ts +1052 -0
  538. package/src/format/mixedPopulation.ts +222 -0
  539. package/src/format/modes.ts +304 -0
  540. package/src/format/mountedSpecimenRows.ts +64 -0
  541. package/src/format/moverLifecycle.ts +34 -0
  542. package/src/format/moverMotion.ts +271 -0
  543. package/src/format/movers.ts +224 -0
  544. package/src/format/namedJsonContracts.ts +423 -0
  545. package/src/format/nativeActors.ts +45 -0
  546. package/src/format/nativeAssembly.ts +141 -0
  547. package/src/format/nativeGround.ts +37 -0
  548. package/src/format/nativeGroundAssets.ts +35 -0
  549. package/src/format/nativeItems.ts +184 -0
  550. package/src/format/nativePhysics.ts +140 -0
  551. package/src/format/nativeQuestComposition.ts +398 -0
  552. package/src/format/nativeRiding.ts +103 -0
  553. package/src/format/nativeRuntimePlan.ts +89 -0
  554. package/src/format/navigation.ts +99 -0
  555. package/src/format/navigationBytes.ts +111 -0
  556. package/src/format/nearPlaceholder.ts +111 -0
  557. package/src/format/nearPlaceholderAssets.ts +23 -0
  558. package/src/format/netCommand.ts +11 -0
  559. package/src/format/npcs.ts +546 -0
  560. package/src/format/outputAddress.ts +11 -0
  561. package/src/format/outputDownload.ts +34 -0
  562. package/src/format/outputFields.ts +123 -0
  563. package/src/format/outputIndex.ts +352 -0
  564. package/src/format/overdraw.ts +41 -0
  565. package/src/format/pageLife.ts +303 -0
  566. package/src/format/pagePreparation.ts +60 -0
  567. package/src/format/paintedLook.ts +55 -0
  568. package/src/format/paintedResources.ts +158 -0
  569. package/src/format/panelTemplate.ts +139 -0
  570. package/src/format/placeholderSource.ts +209 -0
  571. package/src/format/platformDataSections.ts +146 -0
  572. package/src/format/platformFileFamilies.ts +299 -0
  573. package/src/format/plumbing.ts +165 -0
  574. package/src/format/populationEnvironment.ts +210 -0
  575. package/src/format/populationKeeper.ts +163 -0
  576. package/src/format/populationProjection.ts +496 -0
  577. package/src/format/populationRespawn.ts +48 -0
  578. package/src/format/populationRoster.ts +158 -0
  579. package/src/format/portalFloor.ts +56 -0
  580. package/src/format/portalLink.ts +112 -0
  581. package/src/format/portalLinkAssets.ts +42 -0
  582. package/src/format/portalRide.ts +22 -0
  583. package/src/format/postGraphDocument.ts +36 -0
  584. package/src/format/postGraphLook.ts +477 -0
  585. package/src/format/postStack.ts +114 -0
  586. package/src/format/practiceCourseRows.ts +466 -0
  587. package/src/format/preflight.ts +155 -0
  588. package/src/format/presentation.ts +33 -0
  589. package/src/format/product-audio.ts +76 -0
  590. package/src/format/product-reads.ts +178 -0
  591. package/src/format/product-stream-admit.ts +100 -0
  592. package/src/format/product-stream-assets.ts +493 -0
  593. package/src/format/product-stream-facts.ts +208 -0
  594. package/src/format/product-stream-miss.ts +12 -0
  595. package/src/format/product-stream-node.ts +47 -0
  596. package/src/format/product-stream-packs.ts +242 -0
  597. package/src/format/product-stream-rows.ts +202 -0
  598. package/src/format/product-stream-tar.ts +192 -0
  599. package/src/format/product-stream.ts +284 -0
  600. package/src/format/product.ts +358 -0
  601. package/src/format/productValidation.ts +205 -0
  602. package/src/format/propMaterials.ts +254 -0
  603. package/src/format/props.ts +137 -0
  604. package/src/format/questContinuation.ts +42 -0
  605. package/src/format/questFigures.ts +227 -0
  606. package/src/format/questGraph.ts +30 -0
  607. package/src/format/questHost.ts +314 -0
  608. package/src/format/questInteractionSource.ts +57 -0
  609. package/src/format/questInteractions.ts +642 -0
  610. package/src/format/questPageComposition.ts +92 -0
  611. package/src/format/questPageFacets.ts +121 -0
  612. package/src/format/questRuntime.ts +118 -0
  613. package/src/format/questSteps.ts +182 -0
  614. package/src/format/questStory.ts +512 -0
  615. package/src/format/questStoryBindings.ts +43 -0
  616. package/src/format/questWorld.ts +36 -0
  617. package/src/format/quests.ts +333 -0
  618. package/src/format/rainPresentation.ts +131 -0
  619. package/src/format/rangedPage.ts +117 -0
  620. package/src/format/receipt-cost.ts +71 -0
  621. package/src/format/registeredJson.ts +530 -0
  622. package/src/format/returnProgramDocument.ts +40 -0
  623. package/src/format/returnProjectionV2.ts +84 -0
  624. package/src/format/riding.ts +377 -0
  625. package/src/format/riggedHulls.ts +160 -0
  626. package/src/format/roamingBossProjection.ts +178 -0
  627. package/src/format/roamingCombat.ts +22 -0
  628. package/src/format/ropeDeckSite.ts +148 -0
  629. package/src/format/rows.ts +86 -0
  630. package/src/format/runtime.ts +38 -0
  631. package/src/format/runtimeBinds.ts +49 -0
  632. package/src/format/runtimeCost.ts +80 -0
  633. package/src/format/runtimeSpawns.ts +73 -0
  634. package/src/format/scalarChannel.ts +38 -0
  635. package/src/format/scaledPost.ts +27 -0
  636. package/src/format/scaledPostContract.ts +51 -0
  637. package/src/format/sceneBuffers.ts +122 -0
  638. package/src/format/sceneDraws.ts +89 -0
  639. package/src/format/sceneDressing.ts +247 -0
  640. package/src/format/sceneInstances.ts +192 -0
  641. package/src/format/sceneMotion.ts +122 -0
  642. package/src/format/sceneRefs.ts +71 -0
  643. package/src/format/sceneSources.ts +730 -0
  644. package/src/format/script-side-grandfather.ts +62 -0
  645. package/src/format/script-sides.ts +289 -0
  646. package/src/format/scriptAbi.ts +14 -0
  647. package/src/format/scriptAbiV1.ts +56 -0
  648. package/src/format/scriptActionsV2.ts +101 -0
  649. package/src/format/scriptAdmission.ts +165 -0
  650. package/src/format/scriptAdmissionV2.ts +126 -0
  651. package/src/format/scriptContract.ts +170 -0
  652. package/src/format/scriptFuelV2.ts +124 -0
  653. package/src/format/scriptGroupBankV2.ts +54 -0
  654. package/src/format/scriptGroupStepV2.ts +165 -0
  655. package/src/format/scriptInputStateV2.ts +52 -0
  656. package/src/format/scriptLimits.ts +5 -0
  657. package/src/format/scriptMemoryV2.ts +17 -0
  658. package/src/format/scriptModuleV2.ts +116 -0
  659. package/src/format/scriptObservationColumnsV2.ts +226 -0
  660. package/src/format/scriptQueriesV2.ts +164 -0
  661. package/src/format/scriptQueryStateV2.ts +40 -0
  662. package/src/format/scriptRngV2.ts +52 -0
  663. package/src/format/scriptWireV2.ts +106 -0
  664. package/src/format/scripts.ts +31 -0
  665. package/src/format/sections.ts +140 -0
  666. package/src/format/shardSchema.ts +632 -0
  667. package/src/format/shardSections.ts +383 -0
  668. package/src/format/sketch.ts +79 -0
  669. package/src/format/skin-materials.ts +172 -0
  670. package/src/format/skinAssets.ts +107 -0
  671. package/src/format/skinData.ts +110 -0
  672. package/src/format/skinLayers.ts +90 -0
  673. package/src/format/skins.ts +37 -0
  674. package/src/format/socketLift.ts +58 -0
  675. package/src/format/socketLiftAssets.ts +81 -0
  676. package/src/format/socketRigCreature.ts +66 -0
  677. package/src/format/sourceResidency.ts +16 -0
  678. package/src/format/spawnCombat.ts +26 -0
  679. package/src/format/spawnScriptV2.ts +145 -0
  680. package/src/format/spawnScripts.ts +229 -0
  681. package/src/format/spawnTables.ts +46 -0
  682. package/src/format/spawnView.ts +26 -0
  683. package/src/format/speciesActorsFile.ts +86 -0
  684. package/src/format/speciesBookRows.ts +84 -0
  685. package/src/format/speciesBrain.ts +96 -0
  686. package/src/format/speciesLooks.ts +1021 -0
  687. package/src/format/speciesPrograms.ts +97 -0
  688. package/src/format/speciesScripts.ts +45 -0
  689. package/src/format/specimenCatalogue.ts +94 -0
  690. package/src/format/splatTerrain.ts +192 -0
  691. package/src/format/standalone-catalogue.ts +144 -0
  692. package/src/format/standaloneControl.ts +44 -0
  693. package/src/format/state.ts +61 -0
  694. package/src/format/stateLineage.ts +71 -0
  695. package/src/format/stealth.ts +106 -0
  696. package/src/format/stillImage.ts +135 -0
  697. package/src/format/streamedCover.ts +105 -0
  698. package/src/format/surfaceLooks.ts +50 -0
  699. package/src/format/tar-fields.ts +54 -0
  700. package/src/format/tar-paths.ts +103 -0
  701. package/src/format/tar-source.ts +13 -0
  702. package/src/format/tar-write.ts +152 -0
  703. package/src/format/tar.ts +203 -0
  704. package/src/format/targets.ts +217 -0
  705. package/src/format/terrain.ts +241 -0
  706. package/src/format/terrainTileBytes.ts +104 -0
  707. package/src/format/tierSelection.ts +195 -0
  708. package/src/format/toonLighting.ts +32 -0
  709. package/src/format/toonLook.ts +332 -0
  710. package/src/format/trail.ts +17 -0
  711. package/src/format/traversal.ts +13 -0
  712. package/src/format/treeSetRows.ts +93 -0
  713. package/src/format/ui.ts +90 -0
  714. package/src/format/uiStrings.ts +17 -0
  715. package/src/format/uniformRows.ts +31 -0
  716. package/src/format/upload-wire.ts +184 -0
  717. package/src/format/validationReceipt.ts +142 -0
  718. package/src/format/version.ts +9 -0
  719. package/src/format/vertexWear.ts +45 -0
  720. package/src/format/viewProgram.ts +329 -0
  721. package/src/format/voicePatches.ts +47 -0
  722. package/src/format/water.ts +247 -0
  723. package/src/format/waterWaves.ts +7 -0
  724. package/src/format/waterWorld.ts +34 -0
  725. package/src/format/weaponProfiles.ts +1315 -0
  726. package/src/format/weatherBundle.ts +36 -0
  727. package/src/format/weatherEffects.ts +78 -0
  728. package/src/format/weatherProgram.ts +422 -0
  729. package/src/format/wildlifePopulation.ts +210 -0
  730. package/src/format/wireLimits.ts +9 -0
  731. package/src/format/worldAssembly.ts +104 -0
  732. package/src/format/worldEntry.ts +151 -0
  733. package/src/format/worldPhysics.ts +292 -0
  734. package/src/format/worldSceneBatch.ts +106 -0
  735. package/src/format/worldSceneModels.ts +79 -0
  736. package/src/format/worldScenePages.ts +89 -0
  737. package/src/format/worldScenePlacement.ts +191 -0
  738. package/src/format/worldSceneSlabs.ts +43 -0
  739. package/src/format/worldSceneSurface.ts +113 -0
  740. package/src/format/worldSceneWeld.ts +702 -0
  741. package/src/format/worldScenes.ts +184 -0
  742. package/src/format/worldTargets.ts +111 -0
  743. package/src/format/worldUpdates.ts +229 -0
  744. package/src/hook/format-hook.d.mts +2 -0
  745. package/src/hook/format-hook.mjs +47 -0
  746. package/README.md +0 -6
@@ -0,0 +1,501 @@
1
+ import * as v from 'valibot';
2
+ import { ENGINE_SLOTS_MESSAGE, engineSlotsKnown } from './engine-music.ts';
3
+
4
+ const id = v.pipe(v.string(), v.minLength(1), v.maxLength(128));
5
+ const finite = v.pipe(v.number(), v.finite());
6
+ const gain = v.pipe(finite, v.minValue(0), v.maxValue(8));
7
+ const list = v.pipe(v.array(id), v.minLength(1), v.maxLength(32));
8
+ /** Boot inventory/overlay policy; playback and decoders retain the original recordings. */
9
+ const catalogue = v.strictObject({ ownMusic: v.boolean(), priorityOwn: v.boolean(), overlaySamples: v.boolean(),
10
+ inventoryOmitSlots: v.pipe(v.array(id), v.maxLength(32)), loopOrder: v.pipe(v.array(id), v.maxLength(32)) });
11
+ const optionalIds = v.optional(v.pipe(v.array(id), v.maxLength(128), v.check((ids) => new Set(ids).size === ids.length, 'unique sample ids')));
12
+ const scalar = v.union([finite, v.boolean(), id, v.null()]);
13
+ const conditions = v.pipe(v.array(v.strictObject({ field: id, op: v.picklist(['equals', 'not-equals', 'greater']), value: scalar })), v.maxLength(16));
14
+ /** Bounded numerical mix expressions over supplied listener/clock/geometry values. */
15
+ export type AudioMixOp = '+' | '-' | '*' | '/' | 'min' | 'max' | '%' | 'pow' | 'cos' | 'exp' | 'tanh' | 'lerp' |
16
+ 'round' | 'floor' | 'abs' | 'sin' | 'hypot' | 'ss' | 'in' | 'lt' | 'gt' | 'if' | 'and' | 'or' | 'not' |
17
+ 'clamp' | 'zone' | 'dist';
18
+ /** Recursive bounded scalar expression; schema metadata keeps its lazy factory opaque. */
19
+ export type AudioMixExpr = number | string | readonly [AudioMixOp, ...AudioMixExpr[]];
20
+ function boundedMix(expr:AudioMixExpr):boolean {
21
+ const pending:{value:AudioMixExpr;depth:number}[]=[{value:expr,depth:0}];
22
+ for(let count=0;count<256;count++){
23
+ const current=pending.pop();if(current===undefined)return true;if(current.depth>16)return false;
24
+ if(typeof current.value!=='number'&&typeof current.value!=='string') {
25
+ const arity=current.value.length-1,op=current.value[0];
26
+ const wanted=op==='ss'||op==='in'||op==='if'||op==='clamp'||op==='lerp'?3:op==='-'||op==='/'||op==='min'||op==='max'||op==='hypot'||op==='lt'||op==='gt'||op==='%'||op==='pow'?2:op==='round'||op==='floor'||op==='abs'||op==='sin'||op==='not'||op==='zone'||op==='dist'||op==='cos'||op==='exp'||op==='tanh'?1:null;
27
+ if(arity<1||arity>8||(wanted!==null&&arity!==wanted)||((op==='dist'||op==='zone')&&typeof current.value[1]!=='string'))return false;
28
+ for(const value of current.value.slice(1))pending.push({value,depth:current.depth+1});
29
+ }
30
+ }
31
+ return pending.length===0;
32
+ }
33
+ const mixExpr:v.GenericSchema<AudioMixExpr> = v.pipe(v.lazy(()=>v.union([finite,id,v.tupleWithRest([v.picklist(['+','-','*','/','min','max','%','pow','cos','exp','tanh','lerp','round','floor','abs','sin','hypot','ss','in','lt','gt','if','and','or','not','clamp','zone','dist'])],mixExpr)])),v.check(value=>boundedMix(value),'bounded mix expression'));
34
+ /** Shared bounded numeric algebra for non-audio scalar programs too. */
35
+ export const AudioMixExpressionSchema: v.GenericSchema<AudioMixExpr> = mixExpr;
36
+ const mixValues=(max:number)=>v.pipe(v.array(v.tuple([id,mixExpr])),v.maxLength(max));
37
+ /** An ordered mix assignment; expressions are evaluated by the native owner. */
38
+ export type AudioMixValues = [string, AudioMixExpr][];
39
+ /** Validated mixer data, independent of the validator's implementation type. */
40
+ export interface AudioMixRecipe {
41
+ values: AudioMixValues;
42
+ levels: AudioMixValues;
43
+ cutoffs: AudioMixValues;
44
+ rooms: { id: string; weight: AudioMixExpr; level: AudioMixExpr }[];
45
+ diag: AudioMixValues;
46
+ zones: AudioMixValues;
47
+ zoneMode: 'first' | 'max';
48
+ zoneFloor: number;
49
+ defaultZone: string;
50
+ shade?: [AudioMixExpr, AudioMixExpr];
51
+ }
52
+ /** Ordered weights, levels, filters, sends and diagnostics. All graph/geometry ports remain native. */
53
+ export const AudioMixSchema: v.GenericSchema<AudioMixRecipe> = v.strictObject({values:mixValues(256),levels:mixValues(64),cutoffs:mixValues(16),
54
+ rooms:v.pipe(v.array(v.strictObject({id,weight:mixExpr,level:mixExpr})),v.maxLength(16)),diag:mixValues(64),zones:mixValues(32),
55
+ zoneMode:v.picklist(['first','max']),zoneFloor:v.pipe(finite,v.minValue(0),v.maxValue(1)),defaultZone:id,
56
+ shade:v.exactOptional(v.tuple([mixExpr,mixExpr]))});
57
+
58
+ /** Bounded music catalogue selection; the engine keeps today's bar-grid calm/tension/boss stem decoding. */
59
+ export const AudioMusicSchema: v.GenericSchema<AudioMusic> = v.pipe(v.strictObject({ id, base: id, slots: list, bootSlots: list,
60
+ controlTension:v.exactOptional(v.literal('late')),
61
+ setPlayback:v.exactOptional(v.strictObject({scene:v.pipe(v.record(id,scalar),v.check(rows=>Object.keys(rows).length<=16)),stateMode:v.boolean(),waitForBank:v.boolean()})),
62
+ setCatalogue:v.exactOptional(v.strictObject({inventory:v.picklist(['base','title']),priority:v.boolean(),bootSynth:v.boolean(),titleStings:v.boolean(),baseSamples:v.boolean(),cueOverlay:v.boolean()})),
63
+ lifecycle:v.exactOptional(v.strictObject({persistent:v.boolean(),dispose:v.boolean(),logChanges:v.boolean(),bossScene:v.exactOptional(id)})),
64
+ synthLead: v.picklist(['pluck', 'marimba']), minFade: v.pipe(finite, v.minValue(0), v.maxValue(60)),
65
+ source: v.nullable(v.strictObject({ dir: v.pipe(v.string(), v.regex(/^\/assets\/music\/[a-z0-9_-]+\/$/u)), manifestKey: id })),
66
+ sets: v.record(id, id), selection: v.pipe(v.array(v.strictObject({ slots: list, when: conditions })), v.minLength(1), v.maxLength(64)),
67
+ selectMode: v.picklist(['first', 'all']),
68
+ catalogue: v.exactOptional(v.strictObject({ mode: v.picklist(['slots','bank']), extraStings: v.pipe(v.array(v.picklist(['pickup','death','chunk','dawn'])),v.maxLength(4)), stingSets: v.strictObject({ pickup:v.exactOptional(id),death:v.exactOptional(id),chunk:v.exactOptional(id),dawn:v.exactOptional(id) }) })),
69
+ }), v.check((music) => new Set(music.slots).size === music.slots.length && music.slots.includes(music.base)
70
+ && music.bootSlots.every((slot) => slot === 'title' || music.slots.includes(slot))
71
+ && music.selection.every((row) => row.slots.every((slot) => music.slots.includes(slot)))
72
+ && Object.keys(music.sets).every((slot) => music.slots.includes(slot)), 'every selected, base and boot slot belongs to the score (the platform title is allowed)'),
73
+ v.check<AudioMusic, string>(engineSlotsKnown, ENGINE_SLOTS_MESSAGE));
74
+ /** Same-byte sample catalogue and loop gain selection, without author decoder callbacks. */
75
+ export const AudioSamplesSchema: v.GenericSchema<AudioSamples> = v.strictObject({ catalogue: v.exactOptional(catalogue), set: id, bed: id, loopGains: v.pipe(v.record(id, gain), v.check((gains) => Object.keys(gains).length <= 32, 'bounded loop gains')), omitLoops: optionalIds, omitShots: optionalIds, omitSlots: optionalIds });
76
+ /** Supported native biquad types. */
77
+ export type AudioFilterKind = 'lowpass' | 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' |
78
+ 'notch' | 'allpass';
79
+ /** A biquad: its type, frequency (Hz) and Q (default 0.7). */
80
+ export type SynthFilterRow = readonly [AudioFilterKind, number, number?];
81
+
82
+ /** An LFO summed onto a parameter: rate (Hz), depth (the parameter's units) and waveform (default sine). */
83
+ export interface SynthLfoRow {
84
+ readonly rate: number;
85
+ readonly depth: number;
86
+ readonly type?: 'sine' | 'square' | 'sawtooth' | 'triangle';
87
+ }
88
+
89
+ /** A gain stage after the filters: its level, LFOs on that level and a flutter (a noise through filters, × depth, onto it). */
90
+ export interface SynthStageRow {
91
+ readonly gain: number;
92
+ readonly lfos?: readonly SynthLfoRow[];
93
+ readonly flutter?: { readonly noise: SynthNoise; readonly filters: readonly SynthFilterRow[]; readonly depth: number };
94
+ }
95
+
96
+ /** A pooled looping noise. */
97
+ export type SynthNoise = 'noise-white' | 'noise-pink' | 'native-white';
98
+
99
+ /** One chain into a bed: exactly one of noise / osc (Hz) / sample, then filters, stages and an optional named panner. */
100
+ export interface SynthChainRow {
101
+ readonly noise?: SynthNoise;
102
+ readonly osc?: number;
103
+ readonly sample?: string;
104
+ readonly filters?: readonly SynthFilterRow[];
105
+ /** LFOs on a filter's frequency: its index in `filters`, then the LFO */
106
+ readonly sweeps?: readonly (readonly [number, SynthLfoRow])[];
107
+ readonly stages?: readonly SynthStageRow[];
108
+ /** a stereo panner after the stages, returned under this name for the caller to steer */
109
+ readonly pan?: string;
110
+ /** the bed it feeds */
111
+ readonly to: string;
112
+ }
113
+
114
+ /** A bed: its id in the zones, where it goes (another bed's id or a caller-named node) and its starting level (default 0). */
115
+ export interface SynthBedRow {
116
+ readonly id: string;
117
+ readonly out: string;
118
+ readonly gain?: number;
119
+ readonly pan?: number;
120
+ readonly lfos?: readonly SynthLfoRow[];
121
+ }
122
+
123
+ /** A mark among the chains: the caller's `marks[mark]` runs at that point of the build (a scheduler whose first draw from
124
+ * the shared random stream must stay in its place). */
125
+ export interface SynthMarkRow {
126
+ readonly mark: string;
127
+ }
128
+
129
+ /** A synth bed graph: its beds (in order: a bed's `out` bed comes first), its chains (and marks) and the tap's id prefix. */
130
+ export interface SynthBedGraph {
131
+ readonly tap?: string;
132
+ readonly beds: readonly SynthBedRow[];
133
+ readonly chains: readonly (SynthChainRow | SynthMarkRow)[];
134
+ }
135
+
136
+
137
+ /** A validated native bus, filter or positional emitter. */
138
+ export interface AudioNodeRow {
139
+ id: string;
140
+ out?: string;
141
+ input?: string;
142
+ gain?: AudioMixExpr;
143
+ filter?: [AudioFilterKind, number] | [AudioFilterKind, number, number];
144
+ panner?: [number, number, number];
145
+ at?: string;
146
+ follow?: { zone: string; rays: number; step: number; refine: number; diag: string };
147
+ }
148
+ /** Named buses, filters and positional emitters; output and point ids are native graph loans. */
149
+ export const AudioNodeSchema: v.GenericSchema<AudioNodeRow> = v.pipe(v.strictObject({id,out:v.exactOptional(id),input:v.exactOptional(id),gain:v.exactOptional(mixExpr),
150
+ filter:v.exactOptional(v.union([v.tuple([v.picklist(['lowpass','highpass','bandpass','lowshelf','highshelf','peaking','notch','allpass']),finite]),v.tuple([v.picklist(['lowpass','highpass','bandpass','lowshelf','highshelf','peaking','notch','allpass']),finite,finite])])),
151
+ panner:v.exactOptional(v.tuple([finite,finite,finite])),at:v.exactOptional(id),
152
+ follow:v.exactOptional(v.strictObject({zone:id,rays:v.pipe(finite,v.safeInteger(),v.minValue(1),v.maxValue(8192)),step:v.pipe(finite,v.minValue(0.001)),refine:v.pipe(finite,v.safeInteger(),v.minValue(0),v.maxValue(64)),diag:id}))}),
153
+ v.check(row=>Number(row.gain!==undefined)+Number(row.filter!==undefined)+Number(row.panner!==undefined)===1,'one audio node kind'),
154
+ v.check(row=>(row.at===undefined&&row.follow===undefined)||row.panner!==undefined,'positional emitter fields require a panner'));
155
+ /** Ordered bounded WebAudio graphs; output ids and scheduler marks are supplied by the native host. */
156
+ const synthFrequency = v.pipe(finite,v.minValue(0),v.maxValue(96000));
157
+ const synthWave = v.picklist(['sine','square','sawtooth','triangle']);
158
+ const synthNoise = v.picklist(['noise-white','noise-pink','native-white']);
159
+ const synthLfo = v.strictObject({rate:synthFrequency,depth:finite,type:v.exactOptional(synthWave)});
160
+ const synthFilter = v.union([
161
+ v.tuple([v.picklist(['lowpass','highpass','bandpass','lowshelf','highshelf','peaking','notch','allpass']),synthFrequency]),
162
+ v.tuple([v.picklist(['lowpass','highpass','bandpass','lowshelf','highshelf','peaking','notch','allpass']),synthFrequency,finite])]);
163
+ const synthFilters = v.pipe(v.array(synthFilter),v.maxLength(16));
164
+ const synthStage = v.strictObject({gain,lfos:v.exactOptional(v.pipe(v.array(synthLfo),v.maxLength(8))),
165
+ flutter:v.exactOptional(v.strictObject({noise:synthNoise,filters:synthFilters,depth:finite}))});
166
+ const synthChain = v.pipe(v.strictObject({noise:v.exactOptional(synthNoise),osc:v.exactOptional(synthFrequency),sample:v.exactOptional(id),
167
+ filters:v.exactOptional(synthFilters),sweeps:v.exactOptional(v.pipe(v.array(v.tuple([v.pipe(finite,v.safeInteger(),v.minValue(0),v.maxValue(15)),synthLfo])),v.maxLength(16))),
168
+ stages:v.exactOptional(v.pipe(v.array(synthStage),v.maxLength(16))),pan:v.exactOptional(id),to:id}),
169
+ v.check(row=>Number(row.noise!==undefined)+Number(row.osc!==undefined)+Number(row.sample!==undefined)===1,'one synth source'),
170
+ v.check(row=>(row.sweeps??[]).every(([index])=>index<(row.filters?.length??0)),'declared sweep filter'));
171
+ export const SynthBedGraphSchema: v.GenericSchema<SynthBedGraphData> = v.pipe(v.strictObject({tap:v.exactOptional(id),
172
+ beds:v.pipe(v.array(v.strictObject({id,out:id,gain:v.exactOptional(gain),pan:v.exactOptional(v.pipe(finite,v.minValue(-1),v.maxValue(1))),
173
+ lfos:v.exactOptional(v.pipe(v.array(synthLfo),v.maxLength(8)))})),v.minLength(1),v.maxLength(64)),
174
+ chains:v.pipe(v.array(v.union([synthChain,v.strictObject({mark:id})])),v.maxLength(256))}),
175
+ v.check(graph=>new Set(graph.beds.map(row=>row.id)).size===graph.beds.length,'unique synth bed ids'),
176
+ v.check(graph=>graph.chains.every(row=>'mark' in row||graph.beds.some(bed=>bed.id===row.to)),'declared synth bed target'));
177
+ /** Bounded ordered mixer primitives. Randomness is an explicit numeric input named `random`. */
178
+ const phraseTone = v.strictObject({kind:v.literal('tone'),when:v.exactOptional(mixExpr),out:id,type:v.exactOptional(synthWave),
179
+ f0:mixExpr,gain:mixExpr,decay:mixExpr,t:v.exactOptional(mixExpr),f1:v.exactOptional(mixExpr),glide:v.exactOptional(mixExpr),
180
+ attack:v.exactOptional(mixExpr),hold:v.exactOptional(mixExpr),pan:v.exactOptional(mixExpr),lowpass:v.exactOptional(mixExpr),
181
+ vibrato:v.exactOptional(v.strictObject({rate:mixExpr,depth:mixExpr})),envelope:v.exactOptional(v.strictObject({end:mixExpr,stop:v.pipe(v.array(mixExpr),v.maxLength(16))}))});
182
+ const phraseBurst = v.strictObject({kind:v.literal('burst'),when:v.exactOptional(mixExpr),out:id,type:v.exactOptional(v.picklist(['lowpass','highpass','bandpass','lowshelf','highshelf','peaking','notch','allpass'])),
183
+ freq:mixExpr,gain:mixExpr,decay:mixExpr,t:v.exactOptional(mixExpr),freqEnd:v.exactOptional(mixExpr),q:v.exactOptional(mixExpr),
184
+ attack:v.exactOptional(mixExpr),hold:v.exactOptional(mixExpr),pan:v.exactOptional(mixExpr),rate:v.exactOptional(mixExpr)});
185
+ const phraseValue = v.strictObject({kind:v.literal('value'),when:v.exactOptional(mixExpr),id,value:mixExpr});
186
+ const phraseEnvelope = v.strictObject({kind:v.literal('envelope'),out:id,t:mixExpr,ramps:v.pipe(v.array(v.variant('kind',[v.strictObject({kind:v.literal('linear'),value:mixExpr,t:mixExpr}),v.strictObject({kind:v.literal('target'),value:mixExpr,t:mixExpr,tau:mixExpr})])),v.maxLength(16))});
187
+ const phraseBody = v.variant('kind',[phraseValue,phraseTone,phraseBurst]);
188
+ export const AudioPhraseProgramSchema: v.GenericSchema<AudioPhraseProgram> = v.pipe(v.strictObject({tap:v.exactOptional(id),steps:v.pipe(v.array(v.variant('kind',[phraseValue,phraseTone,phraseBurst,phraseEnvelope,
189
+ v.strictObject({kind:v.literal('gainLfo'),out:id,t:mixExpr,duration:mixExpr,rate:mixExpr,depth:mixExpr}),
190
+ v.strictObject({kind:v.literal('bus'),id,out:id,gain:mixExpr,pan:mixExpr,alwaysPan:v.exactOptional(v.boolean()),filter:v.exactOptional(v.strictObject({type:v.picklist(['lowpass','highpass','bandpass']),frequency:mixExpr,q:v.exactOptional(mixExpr)}))}),
191
+ v.strictObject({kind:v.literal('repeat'),eachTest:v.exactOptional(v.boolean()),index:v.exactOptional(id),count:mixExpr,max:v.pipe(finite,v.safeInteger(),v.minValue(1),v.maxValue(32)),body:v.pipe(v.array(phraseBody),v.maxLength(64))})])),v.maxLength(64))}),
192
+ v.check(program=>program.steps.reduce((sum,step)=>sum+(step.kind==='repeat'?step.max*step.body.length:1),0)<=1024,'bounded phrase work'));
193
+ /** Validated tone/noise envelopes and owned filtered buses; no executable author callbacks. */
194
+ export interface AudioPhraseProgram { tap?: string; steps: ({ kind: 'value'; when?: AudioMixExpr; id: string;
195
+ value: AudioMixExpr; } | { kind: 'tone'; when?: AudioMixExpr; out: string; type?: 'sine' | 'square' |
196
+ 'sawtooth' | 'triangle'; f0: AudioMixExpr; gain: AudioMixExpr; decay: AudioMixExpr; t?: AudioMixExpr; f1?:
197
+ AudioMixExpr; glide?: AudioMixExpr; attack?: AudioMixExpr; hold?: AudioMixExpr; pan?: AudioMixExpr; lowpass?:
198
+ AudioMixExpr; vibrato?: { rate: AudioMixExpr; depth: AudioMixExpr; }; envelope?: { end: AudioMixExpr; stop:
199
+ AudioMixExpr[]; }; } | { kind: 'burst'; when?: AudioMixExpr; out: string; type?: 'lowpass' | 'highpass' |
200
+ 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass'; freq: AudioMixExpr; gain:
201
+ AudioMixExpr; decay: AudioMixExpr; t?: AudioMixExpr; freqEnd?: AudioMixExpr; q?: AudioMixExpr; attack?:
202
+ AudioMixExpr; hold?: AudioMixExpr; pan?: AudioMixExpr; rate?: AudioMixExpr; } | { kind: 'envelope'; out:
203
+ string; t: AudioMixExpr; ramps: ({ kind: 'linear'; value: AudioMixExpr; t: AudioMixExpr; } | { kind: 'target';
204
+ value: AudioMixExpr; t: AudioMixExpr; tau: AudioMixExpr; })[]; } | { kind: 'gainLfo'; out: string; t:
205
+ AudioMixExpr; duration: AudioMixExpr; rate: AudioMixExpr; depth: AudioMixExpr; } | { kind: 'bus'; id: string;
206
+ out: string; gain: AudioMixExpr; pan: AudioMixExpr; alwaysPan?: boolean; filter?: { type: 'lowpass' |
207
+ 'highpass' | 'bandpass'; frequency: AudioMixExpr; q?: AudioMixExpr; }; } | { kind: 'repeat'; eachTest?:
208
+ boolean; index?: string; count: AudioMixExpr; max: number; body: ({ kind: 'value'; when?: AudioMixExpr; id:
209
+ string; value: AudioMixExpr; } | { kind: 'tone'; when?: AudioMixExpr; out: string; type?: 'sine' | 'square' |
210
+ 'sawtooth' | 'triangle'; f0: AudioMixExpr; gain: AudioMixExpr; decay: AudioMixExpr; t?: AudioMixExpr; f1?:
211
+ AudioMixExpr; glide?: AudioMixExpr; attack?: AudioMixExpr; hold?: AudioMixExpr; pan?: AudioMixExpr; lowpass?:
212
+ AudioMixExpr; vibrato?: { rate: AudioMixExpr; depth: AudioMixExpr; }; envelope?: { end: AudioMixExpr; stop:
213
+ AudioMixExpr[]; }; } | { kind: 'burst'; when?: AudioMixExpr; out: string; type?: 'lowpass' | 'highpass' |
214
+ 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass'; freq: AudioMixExpr; gain:
215
+ AudioMixExpr; decay: AudioMixExpr; t?: AudioMixExpr; freqEnd?: AudioMixExpr; q?: AudioMixExpr; attack?:
216
+ AudioMixExpr; hold?: AudioMixExpr; pan?: AudioMixExpr; rate?: AudioMixExpr; })[]; })[]; }
217
+ /** A native graph mark scheduler; predicates read actual mixer observations. */
218
+ export const AudioOneShotScheduleSchema: v.GenericSchema<AudioOneShotSchedule> = v.pipe(v.strictObject({mark:id,tick:id,every:v.tuple([v.pipe(finite,v.minValue(0.001),v.maxValue(600)),v.pipe(finite,v.minValue(0),v.maxValue(600)),v.pipe(finite,v.minValue(0),v.maxValue(10))]),when:v.exactOptional(mixExpr),
219
+ start:v.exactOptional(v.picklist(['mark','built'])),entered:v.exactOptional(v.boolean()),random:v.exactOptional(v.picklist(['host','global'])),
220
+ shot:v.exactOptional(v.strictObject({family:id,chance:mixExpr,gain:mixExpr,radius:v.tuple([v.pipe(finite,v.minValue(0),v.maxValue(2000)),v.pipe(finite,v.minValue(0),v.maxValue(2000))])})),
221
+ program:v.exactOptional(id),targets:v.pipe(v.array(id),v.maxLength(32))}),v.check(row=>row.shot===undefined?(row.program!==undefined&&row.targets.length>0):row.program===undefined,'one scheduled phrase or sample'));
222
+
223
+ export interface AudioOneShotSchedule { mark: string; tick: string; every: [ number, number, number ]; when?:
224
+ AudioMixExpr; start?: 'mark' | 'built'; entered?: boolean; random?: 'host' | 'global'; shot?: { family:
225
+ string; chance: AudioMixExpr; gain: AudioMixExpr; radius: [ number, number ]; }; program?: string; targets:
226
+ string[]; }
227
+ /** A scoped ambient scheduler for an admitted phrase. */
228
+ export const AudioPhraseScheduleSchema: v.GenericSchema<AudioPhraseSchedule> = v.strictObject({tick:id,wait:v.pipe(v.tuple([finite,finite]),v.check(values=>values[0]>0&&values[1]>=values[0]&&values[1]<=600)),program:AudioPhraseProgramSchema});
229
+
230
+ const zone = v.pipe(v.strictObject({ id, x: finite, z: finite, inner: v.pipe(finite, v.minValue(0), v.maxValue(2000)), outer: v.pipe(finite, v.minValue(0), v.maxValue(2000)), gain,
231
+ fade: v.optional(v.pipe(finite, v.minValue(0.001), v.maxValue(2000))), open: v.optional(v.boolean()), source: v.optional(id) }), v.check((row) => row.inner < row.outer && (row.fade === undefined || row.outer === row.inner + row.fade), 'audio zone fade must extend outside its inner radius'));
232
+ const rectangle = v.pipe(v.strictObject({ id, zone: id, x0: finite, x1: finite, z0: finite, z1: finite }), v.check((row) => row.x0 < row.x1 && row.z0 < row.z1, 'positive rectangular audio region'));
233
+ /** Bounded native spatial probes; authored weights never replace the live world owners. */
234
+ const audioSpatialProbe=v.variant('kind',[
235
+ v.strictObject({kind:v.literal('bounds'),id,from:id,key:id}),
236
+ v.strictObject({kind:v.literal('near'),id,radius:v.pipe(finite,v.minValue(0.001))}),
237
+ v.strictObject({kind:v.literal('footprint'),id,floor:id,sites:id,minY:finite,maxY:finite,x:v.tuple([finite,finite]),z:v.tuple([finite,finite])}),
238
+ v.strictObject({kind:v.literal('circle'),id,source:id,inner:finite,outer:finite,pan:v.exactOptional(id)}),
239
+ v.strictObject({kind:v.literal('spots'),source:id,ids:v.pipe(v.array(id),v.maxLength(32)),fade:finite,open:id,initial:mixExpr,pans:v.pipe(v.array(id),v.maxLength(32))}),
240
+ v.strictObject({kind:v.literal('maximum'),id,source:id,initial:mixExpr,inner:finite,outer:finite,gain:finite})
241
+ ]);
242
+ /** Native mix ownership, borrowed numeric inputs and entered/source teardown. */
243
+ const ambienceReference=v.strictObject({owner:id,path:v.pipe(v.array(id),v.minLength(1),v.maxLength(8))});
244
+ export const AudioAmbienceLifecycleSchema: v.GenericSchema<AudioAmbienceLifecycle> = v.strictObject({
245
+ scope:id,zone:id,childScope:v.boolean(),ownedZones:v.boolean(),dispose:v.picklist(['scope','samples']),
246
+ bank:v.boolean(),wind:v.boolean(),logZone:v.boolean(),random:v.picklist(['audio','global']),
247
+ values:v.pipe(v.record(id,finite),v.check(rows=>Object.keys(rows).length<=32)),
248
+ surfaces:v.boolean(),spots:v.boolean(),
249
+ points:v.exactOptional(v.pipe(v.record(id,v.strictObject({x:mixExpr,z:mixExpr,height:v.exactOptional(mixExpr)})),v.check(rows=>Object.keys(rows).length<=16))),
250
+ circles:v.pipe(v.record(id,ambienceReference),v.check(rows=>Object.keys(rows).length<=16)),
251
+ pointLists:v.pipe(v.record(id,ambienceReference),v.check(rows=>Object.keys(rows).length<=16)),
252
+ spotBindings:v.pipe(v.record(id,v.strictObject({zone:id,gain:ambienceReference,above:finite})),v.check(rows=>Object.keys(rows).length<=16)),
253
+ inputs:v.pipe(v.array(v.variant('kind',[
254
+ v.strictObject({kind:v.literal('read'),id,owner:id,path:v.pipe(v.array(id),v.minLength(1),v.maxLength(8))}),
255
+ v.strictObject({kind:v.literal('value'),id,value:mixExpr}),
256
+ ])),v.maxLength(32)),
257
+ });
258
+ export interface AudioAmbienceLifecycle { scope: string; zone: string; childScope: boolean; ownedZones: boolean;
259
+ dispose: 'scope' | 'samples'; bank: boolean; wind: boolean; logZone: boolean; random: 'audio' | 'global';
260
+ values: Record<string, number>; surfaces: boolean; spots: boolean; points?: Record<string, { x:
261
+ AudioMixExpr; z: AudioMixExpr; height?: AudioMixExpr; }>; circles: Record<string, { owner: string; path:
262
+ string[]; }>; pointLists: Record<string, { owner: string; path: string[]; }>; spotBindings: Record<string, { zone: string; gain: { owner: string; path: string[]; }; above: number; }>; inputs: ({ kind: 'read'; id:
263
+ string; owner: string; path: string[]; } | { kind: 'value'; id: string; value: AudioMixExpr; })[]; }
264
+
265
+ /** Native audio lifecycle policy; observations and decoded samples are supplied by the resident owner. */
266
+ export const AudioAmbienceRoutingSchema: v.GenericSchema<AudioAmbienceRouting> = v.strictObject({
267
+ probes:v.exactOptional(v.pipe(v.array(audioSpatialProbe),v.maxLength(64))),probeFinite:v.exactOptional(v.pipe(v.array(id),v.maxLength(32))),
268
+ warm:v.pipe(v.array(id),v.maxLength(32)),prewarm:v.pipe(v.array(id),v.maxLength(32)),listener:v.picklist(['context','port']),
269
+ underwater:v.exactOptional(v.tuple([finite,finite])),
270
+ bounds:v.pipe(v.array(v.strictObject({id,from:id,key:id})),v.maxLength(64)),
271
+ near:v.pipe(v.array(v.strictObject({id,radius:v.pipe(finite,v.minValue(0.001))})),v.maxLength(64)),
272
+ steer:v.pipe(v.array(v.strictObject({pan:id,toward:id,width:finite,tau:finite})),v.maxLength(32)),
273
+ rooms:v.strictObject({from:id,to:id,input:v.exactOptional(id),prewarmMissing:v.exactOptional(v.boolean()),
274
+ list:v.pipe(v.array(v.strictObject({id,ir:id,weight:id,level:mixExpr,feeds:v.exactOptional(list)})),v.maxLength(16))}),
275
+ zoneNames:list,
276
+ samples:v.exactOptional(v.strictObject({startDelay:finite,tap:id,
277
+ beds:v.pipe(v.array(v.strictObject({id,out:id,panned:v.boolean()})),v.maxLength(32))})),
278
+ activeGains:v.exactOptional(v.pipe(v.array(v.tuple([id,v.union([id,finite])])),v.maxLength(16)))
279
+ });
280
+ export interface AudioAmbienceRouting { probes?: ({ kind: 'bounds'; id: string; from: string; key: string; } | {
281
+ kind: 'near'; id: string; radius: number; } | { kind: 'footprint'; id: string; floor: string; sites: string;
282
+ minY: number; maxY: number; x: [ number, number ]; z: [ number, number ]; } | { kind: 'circle'; id: string;
283
+ source: string; inner: number; outer: number; pan?: string; } | { kind: 'spots'; source: string; ids:
284
+ string[]; fade: number; open: string; initial: AudioMixExpr; pans: string[]; } | { kind: 'maximum'; id:
285
+ string; source: string; initial: AudioMixExpr; inner: number; outer: number; gain: number; })[]; probeFinite?:
286
+ string[]; warm: string[]; prewarm: string[]; listener: 'context' | 'port'; underwater?: [ number, number ];
287
+ bounds: { id: string; from: string; key: string; }[]; near: { id: string; radius: number; }[]; steer: { pan:
288
+ string; toward: string; width: number; tau: number; }[]; rooms: { from: string; to: string; input?: string;
289
+ prewarmMissing?: boolean; list: { id: string; ir: string; weight: string; level: AudioMixExpr; feeds?:
290
+ string[]; }[]; }; zoneNames: string[]; samples?: { startDelay: number; tap: string; beds: { id: string; out:
291
+ string; panned: boolean; }[]; }; activeGains?: [ string, string | number ][]; }
292
+ /** Bounded zone/mixer data. Terrain, moving emitters and bespoke synthesis remain trusted runtime ports. */
293
+ /** Sampled loop levels and seeded distant calls; native mixers own playback. */
294
+ const sampleInterval = v.pipe(v.tuple([v.pipe(finite,v.minValue(0),v.maxValue(600)),v.pipe(finite,v.minValue(0),v.maxValue(600))]),v.check(row=>row[0]<=row[1]));
295
+ export const AudioSampleMixSchema: v.GenericSchema<AudioSampleMix> = v.pipe(v.strictObject({
296
+ random:v.variant('kind',[
297
+ v.strictObject({kind:v.literal('seeded'),salt:id}),
298
+ v.strictObject({kind:v.literal('stream'),id:v.literal('cosmetic')}),
299
+ ]),
300
+ initial:v.pipe(v.record(id,finite),v.check(rows=>Object.keys(rows).length<=64)),
301
+ values:mixValues(64),diagnostics:mixValues(32),pans:mixValues(32),
302
+ beds:v.pipe(v.array(v.strictObject({id,tap:id,ambient:v.boolean(),panned:v.boolean(),level:mixExpr,keepSilent:v.boolean()})),v.maxLength(32)),
303
+ zones:v.pipe(v.array(v.strictObject({id,weight:mixExpr})),v.minLength(1),v.maxLength(32)),
304
+ calls:v.pipe(v.array(v.strictObject({tick:v.nullable(id),initial:sampleInterval,every:sampleInterval,advance:mixExpr,when:mixExpr,reset:v.picklist(['before','after']),
305
+ emit:v.variant('kind',[
306
+ v.strictObject({kind:v.literal('animal'),choices:v.pipe(v.array(id),v.minLength(1),v.maxLength(2)),chance:v.pipe(finite,v.minValue(0),v.maxValue(1)),distance:sampleInterval,up:finite}),
307
+ v.strictObject({kind:v.literal('cue'),id,gain}),
308
+ ])})),v.maxLength(16)),
309
+ }),v.check(rows=>new Set(rows.beds.map(row=>row.id)).size===rows.beds.length&&new Set(rows.zones.map(row=>row.id)).size===rows.zones.length&&rows.calls.every(row=>row.every[0]>0),'unique sample rows and positive call periods'));
310
+ export interface AudioSampleMix { random: { kind: 'seeded'; salt: string; } | { kind: 'stream'; id: 'cosmetic'; };
311
+ initial: Record<string, number>; values: [ string, AudioMixExpr ][]; diagnostics: [ string, AudioMixExpr
312
+ ][]; pans: [ string, AudioMixExpr ][]; beds: { id: string; tap: string; ambient: boolean; panned: boolean;
313
+ level: AudioMixExpr; keepSilent: boolean; }[]; zones: { id: string; weight: AudioMixExpr; }[]; calls: { tick:
314
+ string | null; initial: [ number, number ]; every: [ number, number ]; advance: AudioMixExpr; when:
315
+ AudioMixExpr; reset: 'before' | 'after'; emit: { kind: 'animal'; choices: string[]; chance: number; distance:
316
+ [ number, number ]; up: number; } | { kind: 'cue'; id: string; gain: number; }; }[]; }
317
+ export const AudioZonesSchema: v.GenericSchema<AudioZones> = v.strictObject({ id, sampleMix:v.exactOptional(AudioSampleMixSchema), lifecycle:v.exactOptional(AudioAmbienceLifecycleSchema), routing:v.exactOptional(AudioAmbienceRoutingSchema), nodes:v.exactOptional(v.pipe(v.array(AudioNodeSchema),v.maxLength(64))), schedules:v.exactOptional(v.pipe(v.array(AudioOneShotScheduleSchema),v.maxLength(32))), programs:v.exactOptional(v.pipe(v.record(id,AudioPhraseProgramSchema),v.check(rows=>Object.keys(rows).length<=32))), graph:v.exactOptional(SynthBedGraphSchema), mix:v.exactOptional(AudioMixSchema), smoothSeconds: v.pipe(finite, v.minValue(0.001), v.maxValue(10)), tickHz: v.pipe(finite, v.minValue(0.1), v.maxValue(120)),
318
+ silentSeconds: v.pipe(finite, v.minValue(0), v.maxValue(600)), holdSeconds: v.pipe(finite, v.minValue(0), v.maxValue(60)),
319
+ levels: v.pipe(v.record(id, gain), v.check((levels) => Object.keys(levels).length <= 64, 'bounded levels')),
320
+ blendMetres: v.optional(v.pipe(finite, v.minValue(0.001), v.maxValue(2000))),
321
+ rectangles: v.optional(v.pipe(v.array(rectangle), v.maxLength(512), v.check((rows) => new Set(rows.map((row) => row.id)).size === rows.length, 'unique rectangular regions'))),
322
+ beds: v.optional(v.pipe(v.array(v.strictObject({ id, zone: id })), v.maxLength(32), v.check((rows) => new Set(rows.map((row) => row.id)).size === rows.length, 'unique bed ids'))),
323
+ positional: v.optional(v.strictObject({ sample: id, max: v.pipe(finite, v.safeInteger(), v.minValue(1), v.maxValue(32)), reach: v.pipe(finite, v.minValue(0.001), v.maxValue(2000)) })),
324
+ wet: v.pipe(v.record(id, v.pipe(finite, v.minValue(0), v.maxValue(1))), v.check((levels) => Object.keys(levels).length <= 16, 'bounded rooms')),
325
+ zones: v.pipe(v.array(zone), v.maxLength(512), v.check((zones) => new Set(zones.map((row) => row.id)).size === zones.length, 'unique audio zones')) });
326
+ /** The validated score's stable catalogue slots and scene rules. */
327
+ export interface AudioMusic { id: string; base: string; slots: string[]; bootSlots: string[]; setPlayback?: {
328
+ scene: Record<string, string | number | boolean | null>; stateMode: boolean; waitForBank: boolean; };
329
+ /** Keep the original calm recording at control; admit tension afterward on the same sample clock. */
330
+ controlTension?: 'late';
331
+ setCatalogue?: { inventory: 'base' | 'title'; priority: boolean; bootSynth: boolean; titleStings: boolean;
332
+ baseSamples: boolean; cueOverlay: boolean; }; lifecycle?: { persistent: boolean; dispose: boolean; logChanges:
333
+ boolean; bossScene?: string; }; synthLead: 'pluck' | 'marimba'; minFade: number; source: { dir: string;
334
+ manifestKey: string; } | null; sets: Record<string, string>; selection: { slots: string[]; when: { field:
335
+ string; op: 'equals' | 'not-equals' | 'greater'; value: string | number | boolean | null; }[]; }[];
336
+ selectMode: 'first' | 'all'; catalogue?: { mode: 'slots' | 'bank'; extraStings: ('pickup' | 'death' | 'chunk'
337
+ | 'dawn')[]; stingSets: { pickup?: string; death?: string; chunk?: string; dawn?: string; }; }; }
338
+ /** The validated same-byte sample selection. */
339
+ export interface AudioSamples { catalogue?: { ownMusic: boolean; priorityOwn: boolean; overlaySamples: boolean;
340
+ inventoryOmitSlots: string[]; loopOrder: string[]; }; set: string; bed: string; loopGains: Record<string, number>; omitLoops?: string[] | undefined; omitShots?: string[] | undefined; omitSlots?: string[] |
341
+ undefined; }
342
+ /** The validated mixer timing and named ambience zones. */
343
+ export interface AudioZones { id: string; sampleMix?: AudioSampleMix; lifecycle?: AudioAmbienceLifecycle; routing?:
344
+ AudioAmbienceRouting; nodes?: AudioNodeRow[]; schedules?: AudioOneShotSchedule[]; programs?: Record<string, AudioPhraseProgram>; graph?: SynthBedGraphData; mix?: AudioMixRecipe; smoothSeconds: number; tickHz: number;
345
+ silentSeconds: number; holdSeconds: number; levels: Record<string, number>; blendMetres?: number |
346
+ undefined; rectangles?: { id: string; zone: string; x0: number; x1: number; z0: number; z1: number; }[] |
347
+ undefined; beds?: { id: string; zone: string; }[] | undefined; positional?: { sample: string; max: number;
348
+ reach: number; } | undefined; wet: Record<string, number>; zones: { id: string; x: number; z: number; inner:
349
+ number; outer: number; gain: number; fade?: number | undefined; open?: boolean | undefined; source?: string |
350
+ undefined; }[]; }
351
+
352
+ /** Bounded offline DSP commands; the bank still supplies its actual sample rate and variant seed. */
353
+ const pcmModes=v.pipe(v.array(v.tuple([mixExpr,mixExpr,mixExpr])),v.maxLength(16));
354
+ const pcmFilter=v.picklist(['lowpass','highpass','bandpass','peaking','notch']);
355
+ const pcmStep=v.variant('kind',[
356
+ v.strictObject({kind:v.literal('values'),rows:mixValues(32)}),
357
+ v.strictObject({kind:v.literal('formants'),id,rows:pcmModes}),
358
+ v.strictObject({kind:v.literal('noise'),at:mixExpr,type:pcmFilter,f:mixExpr,f1:v.exactOptional(mixExpr),q:v.exactOptional(mixExpr),attack:mixExpr,decay:mixExpr,gain:mixExpr,pink:v.exactOptional(v.boolean())}),
359
+ v.strictObject({kind:v.literal('thump'),at:mixExpr,args:v.tuple([mixExpr,mixExpr,mixExpr,mixExpr])}),
360
+ v.strictObject({kind:v.literal('grains'),at:mixExpr,rate:mixExpr,dur:mixExpr,f:mixExpr,q:mixExpr,gain:mixExpr,grain:v.exactOptional(mixExpr),shape:v.exactOptional(mixExpr)}),
361
+ v.strictObject({kind:v.literal('strike'),at:mixExpr,modes:pcmModes,gain:mixExpr,jitter:v.exactOptional(mixExpr)}),
362
+ v.strictObject({kind:v.literal('click'),at:mixExpr,args:v.tuple([mixExpr,mixExpr,mixExpr])}),
363
+ v.strictObject({kind:v.literal('bubbles'),at:mixExpr,args:v.tuple([mixExpr,mixExpr,mixExpr,mixExpr,mixExpr])}),
364
+ v.strictObject({kind:v.literal('voice'),at:mixExpr,dur:mixExpr,f0:mixExpr,tense:mixExpr,breath:mixExpr,
365
+ vowel:id,vowelIndex:v.exactOptional(mixExpr),blend:v.exactOptional(v.strictObject({to:id,amount:mixExpr})),env:v.tuple([mixExpr,mixExpr,mixExpr]),gain:mixExpr,
366
+ rough:v.exactOptional(mixExpr),jitter:v.exactOptional(mixExpr),shimmer:v.exactOptional(mixExpr)}),
367
+ v.strictObject({kind:v.literal('saturate'),drive:mixExpr}),
368
+ v.strictObject({kind:v.literal('filter'),type:pcmFilter,f:mixExpr,q:mixExpr}),
369
+ v.strictObject({kind:v.literal('flutter'),f:mixExpr,q:mixExpr,base:mixExpr,depth:mixExpr,drive:mixExpr}),
370
+ v.strictObject({kind:v.literal('sine'),f:mixExpr,gain:mixExpr,envelope:mixExpr})
371
+ ]);
372
+ export const AudioPcmProgramSchema: v.GenericSchema<AudioPcmProgram> =v.pipe(v.strictObject({seed:v.tuple([finite,finite]),
373
+ values:mixValues(32),duration:mixExpr,
374
+ steps:v.pipe(v.array(v.variant('kind',[...pcmStep.options,
375
+ v.strictObject({kind:v.literal('repeat'),count:mixExpr,max:v.pipe(finite,v.safeInteger(),v.minValue(1),v.maxValue(32)),index:id,while:v.exactOptional(mixExpr),body:v.pipe(v.array(pcmStep),v.maxLength(32))})])),v.maxLength(64)),
376
+ finish:v.tuple([finite,finite])}),v.check(program=>program.steps.reduce((sum,row)=>sum+(row.kind==='repeat'?row.max*row.body.length:1),0)<=2048,'bounded PCM recipe'));
377
+ export interface AudioPcmProgram { seed: [ number, number ]; values: [ string, AudioMixExpr ][]; duration:
378
+ AudioMixExpr; steps: ({ kind: 'values'; rows: [ string, AudioMixExpr ][]; } | { kind: 'formants'; id: string;
379
+ rows: [ AudioMixExpr, AudioMixExpr, AudioMixExpr ][]; } | { kind: 'noise'; at: AudioMixExpr; type: 'lowpass' |
380
+ 'highpass' | 'bandpass' | 'peaking' | 'notch'; f: AudioMixExpr; f1?: AudioMixExpr; q?: AudioMixExpr; attack:
381
+ AudioMixExpr; decay: AudioMixExpr; gain: AudioMixExpr; pink?: boolean; } | { kind: 'thump'; at: AudioMixExpr;
382
+ args: [ AudioMixExpr, AudioMixExpr, AudioMixExpr, AudioMixExpr ]; } | { kind: 'grains'; at: AudioMixExpr;
383
+ rate: AudioMixExpr; dur: AudioMixExpr; f: AudioMixExpr; q: AudioMixExpr; gain: AudioMixExpr; grain?:
384
+ AudioMixExpr; shape?: AudioMixExpr; } | { kind: 'strike'; at: AudioMixExpr; modes: [ AudioMixExpr,
385
+ AudioMixExpr, AudioMixExpr ][]; gain: AudioMixExpr; jitter?: AudioMixExpr; } | { kind: 'click'; at:
386
+ AudioMixExpr; args: [ AudioMixExpr, AudioMixExpr, AudioMixExpr ]; } | { kind: 'bubbles'; at: AudioMixExpr;
387
+ args: [ AudioMixExpr, AudioMixExpr, AudioMixExpr, AudioMixExpr, AudioMixExpr ]; } | { kind: 'voice'; at:
388
+ AudioMixExpr; dur: AudioMixExpr; f0: AudioMixExpr; tense: AudioMixExpr; breath: AudioMixExpr; vowel: string;
389
+ vowelIndex?: AudioMixExpr; blend?: { to: string; amount: AudioMixExpr; }; env: [ AudioMixExpr, AudioMixExpr,
390
+ AudioMixExpr ]; gain: AudioMixExpr; rough?: AudioMixExpr; jitter?: AudioMixExpr; shimmer?: AudioMixExpr; } | {
391
+ kind: 'saturate'; drive: AudioMixExpr; } | { kind: 'filter'; type: 'lowpass' | 'highpass' | 'bandpass' |
392
+ 'peaking' | 'notch'; f: AudioMixExpr; q: AudioMixExpr; } | { kind: 'flutter'; f: AudioMixExpr; q:
393
+ AudioMixExpr; base: AudioMixExpr; depth: AudioMixExpr; drive: AudioMixExpr; } | { kind: 'sine'; f:
394
+ AudioMixExpr; gain: AudioMixExpr; envelope: AudioMixExpr; } | { kind: 'repeat'; count: AudioMixExpr; max:
395
+ number; index: string; while?: AudioMixExpr; body: ({ kind: 'values'; rows: [ string, AudioMixExpr ][]; } | {
396
+ kind: 'formants'; id: string; rows: [ AudioMixExpr, AudioMixExpr, AudioMixExpr ][]; } | { kind: 'noise'; at:
397
+ AudioMixExpr; type: 'lowpass' | 'highpass' | 'bandpass' | 'peaking' | 'notch'; f: AudioMixExpr; f1?:
398
+ AudioMixExpr; q?: AudioMixExpr; attack: AudioMixExpr; decay: AudioMixExpr; gain: AudioMixExpr; pink?: boolean;
399
+ } | { kind: 'thump'; at: AudioMixExpr; args: [ AudioMixExpr, AudioMixExpr, AudioMixExpr, AudioMixExpr ]; } | {
400
+ kind: 'grains'; at: AudioMixExpr; rate: AudioMixExpr; dur: AudioMixExpr; f: AudioMixExpr; q: AudioMixExpr;
401
+ gain: AudioMixExpr; grain?: AudioMixExpr; shape?: AudioMixExpr; } | { kind: 'strike'; at: AudioMixExpr; modes:
402
+ [ AudioMixExpr, AudioMixExpr, AudioMixExpr ][]; gain: AudioMixExpr; jitter?: AudioMixExpr; } | { kind:
403
+ 'click'; at: AudioMixExpr; args: [ AudioMixExpr, AudioMixExpr, AudioMixExpr ]; } | { kind: 'bubbles'; at:
404
+ AudioMixExpr; args: [ AudioMixExpr, AudioMixExpr, AudioMixExpr, AudioMixExpr, AudioMixExpr ]; } | { kind:
405
+ 'voice'; at: AudioMixExpr; dur: AudioMixExpr; f0: AudioMixExpr; tense: AudioMixExpr; breath: AudioMixExpr;
406
+ vowel: string; vowelIndex?: AudioMixExpr; blend?: { to: string; amount: AudioMixExpr; }; env: [ AudioMixExpr,
407
+ AudioMixExpr, AudioMixExpr ]; gain: AudioMixExpr; rough?: AudioMixExpr; jitter?: AudioMixExpr; shimmer?:
408
+ AudioMixExpr; } | { kind: 'saturate'; drive: AudioMixExpr; } | { kind: 'filter'; type: 'lowpass' | 'highpass'
409
+ | 'bandpass' | 'peaking' | 'notch'; f: AudioMixExpr; q: AudioMixExpr; } | { kind: 'flutter'; f: AudioMixExpr;
410
+ q: AudioMixExpr; base: AudioMixExpr; depth: AudioMixExpr; drive: AudioMixExpr; } | { kind: 'sine'; f:
411
+ AudioMixExpr; gain: AudioMixExpr; envelope: AudioMixExpr; })[]; })[]; finish: [ number, number ]; }
412
+
413
+ /** Ordered gameplay observations; the native owner lends scalar/actor readers and existing sound operations. */
414
+ const observationNames=v.pipe(v.array(id),v.maxLength(32));
415
+ export const AudioObservationSystemSchema: v.GenericSchema<AudioObservationSystem> =v.strictObject({id,before:observationNames,after:observationNames,
416
+ inputs:v.pipe(v.array(v.strictObject({id,source:id,path:v.pipe(v.array(id),v.maxLength(8)),op:v.picklist(['number','truth','present','equals']),value:v.exactOptional(scalar),fallback:v.exactOptional(finite)})),v.maxLength(64)),
417
+ interval:v.pipe(finite,v.minValue(0),v.maxValue(60)),initial:v.pipe(v.record(id,finite),v.check(rows=>Object.keys(rows).length<=64)),
418
+ frame:v.pipe(v.array(v.strictObject({write:id,value:mixExpr,when:v.exactOptional(mixExpr)})),v.maxLength(32)),
419
+ steps:v.pipe(v.array(v.variant('kind',[
420
+ v.strictObject({kind:v.literal('state'),id,value:mixExpr,when:v.exactOptional(mixExpr),changed:v.exactOptional(id)}),
421
+ v.strictObject({kind:v.literal('call'),call:id,when:v.exactOptional(mixExpr),remember:v.exactOptional(id)}),
422
+ v.strictObject({kind:v.literal('entities'),list:id,actorKind:id,state:id,exclude:observationNames,
423
+ gap:v.pipe(finite,v.minValue(0),v.maxValue(600)),radius:v.pipe(finite,v.minValue(0),v.maxValue(2000)),remember:id,call:id})
424
+ ])),v.maxLength(64))});
425
+ export interface AudioObservationSystem { id: string; before: string[]; after: string[]; inputs: { id: string;
426
+ source: string; path: string[]; op: 'number' | 'truth' | 'present' | 'equals'; value?: string | number |
427
+ boolean | null; fallback?: number; }[]; interval: number; initial: Record<string, number>; frame: { write:
428
+ string; value: AudioMixExpr; when?: AudioMixExpr; }[]; steps: ({ kind: 'state'; id: string; value:
429
+ AudioMixExpr; when?: AudioMixExpr; changed?: string; } | { kind: 'call'; call: string; when?: AudioMixExpr;
430
+ remember?: string; } | { kind: 'entities'; list: string; actorKind: string; state: string; exclude: string[];
431
+ gap: number; radius: number; remember: string; call: string; })[]; }
432
+
433
+ /** Ordered persistent oscillator graphs. The caller owns the output and all fade/stop policy. */
434
+ export const AudioLoopGraphSchema: v.GenericSchema<AudioLoopGraph> =v.pipe(v.array(v.variant('kind',[
435
+ v.strictObject({kind:v.literal('gain'),id,value:finite}),
436
+ v.strictObject({kind:v.literal('filter'),id,type:v.picklist(['lowpass','highpass','bandpass']),frequency:finite,q:finite}),
437
+ v.strictObject({kind:v.literal('oscillator'),id,type:v.picklist(['sine','triangle','square','sawtooth']),frequency:finite,midi:v.exactOptional(finite),detune:v.exactOptional(finite)}),
438
+ v.strictObject({kind:v.literal('connect'),from:id,to:id,param:v.exactOptional(v.picklist(['gain','frequency','detune']))}),
439
+ v.strictObject({kind:v.literal('start'),id})
440
+ ])),v.maxLength(64));
441
+ export type AudioLoopGraph = ({ kind: 'gain'; id: string; value: number; } | { kind: 'filter'; id: string; type:
442
+ 'lowpass' | 'highpass' | 'bandpass'; frequency: number; q: number; } | { kind: 'oscillator'; id: string; type:
443
+ 'sine' | 'triangle' | 'square' | 'sawtooth'; frequency: number; midi?: number; detune?: number; } | { kind:
444
+ 'connect'; from: string; to: string; param?: 'gain' | 'frequency' | 'detune'; } | { kind: 'start'; id: string;
445
+ })[];
446
+
447
+ /** Ordered footstep probes over actual floors and terrain; queries remain lazy and native. */
448
+ export const AudioSurfaceSchema: v.GenericSchema<AudioSurfaceRecipe> = v.strictObject({ fallback:id, rules:v.pipe(v.array(v.variant('kind',[
449
+ v.strictObject({kind:v.literal('floor'),source:id,tolerance:v.pipe(finite,v.minValue(0),v.maxValue(10)),surface:id}),
450
+ v.strictObject({kind:v.literal('value'),source:id,op:v.picklist(['lt','gt']),threshold:finite,surface:id,when:v.exactOptional(mixExpr)}),
451
+ v.strictObject({kind:v.literal('circle'),source:id,padding:finite,surface:id})
452
+ ])),v.maxLength(32)) });
453
+ export interface AudioSurfaceRecipe { fallback: string; rules: ({ kind: 'floor'; source: string; tolerance: number;
454
+ surface: string; } | { kind: 'value'; source: string; op: 'lt' | 'gt'; threshold: number; surface: string;
455
+ when?: AudioMixExpr; } | { kind: 'circle'; source: string; padding: number; surface: string; })[]; }
456
+
457
+ /** Native generated or recorded playback, with ordered scalar controls and no author callbacks. */
458
+ export const AudioPlaybackSchema: v.GenericSchema<AudioPlaybackRecipe> = v.strictObject({ mode:v.picklist(['voices','samples']),initial:v.pipe(v.record(id,finite),v.check(rows=>Object.keys(rows).length<=32)),
459
+ prewarm:v.pipe(v.array(id),v.maxLength(128)),tables:v.pipe(v.record(id,v.record(id,finite)),v.check(rows=>Object.keys(rows).length<=32&&Object.values(rows).every(table=>Object.keys(table).length<=128))),
460
+ actions:v.pipe(v.record(id,v.strictObject({family:v.strictObject({prefix:v.pipe(v.string(),v.maxLength(128)),param:v.exactOptional(id)}),
461
+ warm:v.exactOptional(v.boolean()),state:mixValues(16),values:mixValues(32),
462
+ options:v.pipe(v.array(v.tuple([v.picklist(['gain','rate','pan','panTo','delay','jitter']),mixExpr])),v.maxLength(6)),tap:v.exactOptional(id)})),v.check(rows=>Object.keys(rows).length<=128)),
463
+ sample:v.exactOptional(v.strictObject({reach:v.pipe(finite,v.minValue(0)),scale:v.pipe(finite,v.minValue(0.001)),power:v.pipe(finite,v.minValue(0)),cutoffScale:v.pipe(finite,v.minValue(0.001)),delay:v.pipe(finite,v.minValue(0)),jitter:v.pipe(finite,v.minValue(0)),outOfRangeHandled:v.boolean()})) });
464
+ export interface AudioPlaybackRecipe { mode: 'voices' | 'samples'; initial: Record<string, number>; prewarm:
465
+ string[]; tables: Record<string, Record<string, number>>; actions: Record<string, { family: { prefix:
466
+ string; param?: string; }; warm?: boolean; state: [ string, AudioMixExpr ][]; values: [ string, AudioMixExpr
467
+ ][]; options: [ 'gain' | 'rate' | 'pan' | 'panTo' | 'delay' | 'jitter', AudioMixExpr ][]; tap?: string; }>;
468
+ sample?: { reach: number; scale: number; power: number; cutoffScale: number; delay: number; jitter: number;
469
+ outOfRangeHandled: boolean; }; }
470
+
471
+ /** Recorded/synth loop ownership and fades, with optional native proximity and music ducking. */
472
+ const emitterFade=v.strictObject({mode:v.picklist(['linear','target']),seconds:v.pipe(finite,v.minValue(0.001),v.maxValue(60))});
473
+ export const AudioLoopEmitterSchema: v.GenericSchema<AudioLoopEmitterRecipe> =v.pipe(v.strictObject({scope:id,sample:id,graph:id,out:v.picklist(['ambient','sfx']),
474
+ tap:v.exactOptional(id),level:gain,initial:v.picklist(['value','scheduled']),connect:v.picklist(['always','sample']),offset:v.picklist(['random','fixed']),
475
+ fadeIn:emitterFade,fadeOut:emitterFade,
476
+ stop:v.strictObject({mode:v.picklist(['scheduled','timer']),after:v.pipe(finite,v.minValue(0),v.maxValue(60)),order:v.pipe(v.array(v.pipe(finite,v.safeInteger(),v.minValue(0),v.maxValue(63))),v.maxLength(64))}),
477
+ disconnect:v.strictObject({after:v.pipe(finite,v.minValue(0),v.maxValue(60)),node:v.picklist(['out','panner'])}),
478
+ proximity:v.exactOptional(v.pipe(v.strictObject({reference:v.pipe(finite,v.minValue(0)),max:v.pipe(finite,v.minValue(0)),build:v.pipe(finite,v.minValue(0)),drop:v.pipe(finite,v.minValue(0)),
479
+ duckNear:v.pipe(finite,v.minValue(0)),duckFar:v.pipe(finite,v.minValue(0)),duckGain:v.pipe(finite,v.minValue(0),v.maxValue(1))}),v.check(row=>row.reference<row.max&&row.build<row.drop&&row.duckNear<row.duckFar))) }),v.check(row=>row.disconnect.node==='out'?(row.stop.mode==='timer'&&row.disconnect.after===row.stop.after):(row.stop.mode==='scheduled'&&row.proximity!==undefined),'native loop disconnect policy'));
480
+ export interface AudioLoopEmitterRecipe { scope: string; sample: string; graph: string; out: 'ambient' | 'sfx';
481
+ tap?: string; level: number; initial: 'value' | 'scheduled'; connect: 'always' | 'sample'; offset: 'random' |
482
+ 'fixed'; fadeIn: { mode: 'linear' | 'target'; seconds: number; }; fadeOut: { mode: 'linear' | 'target';
483
+ seconds: number; }; stop: { mode: 'scheduled' | 'timer'; after: number; order: number[]; }; disconnect: {
484
+ after: number; node: 'out' | 'panner'; }; proximity?: { reference: number; max: number; build: number; drop:
485
+ number; duckNear: number; duckFar: number; duckGain: number; }; }
486
+
487
+ /** Mutable validated synth graph; authored readonly graph inputs remain separate. */
488
+ export interface SynthBedGraphData { tap?: string; beds: { id: string; out: string; gain?: number; pan?: number;
489
+ lfos?: { rate: number; depth: number; type?: 'sine' | 'square' | 'sawtooth' | 'triangle'; }[]; }[]; chains: ({
490
+ noise?: 'noise-white' | 'noise-pink' | 'native-white'; osc?: number; sample?: string; filters?: (['lowpass' |
491
+ 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass', number] | ['lowpass' |
492
+ 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass', number, number])[];
493
+ sweeps?: [number, { rate: number; depth: number; type?: 'sine' | 'square' | 'sawtooth' | 'triangle'; }][];
494
+ stages?: { gain: number; lfos?: { rate: number; depth: number; type?: 'sine' | 'square' | 'sawtooth' |
495
+ 'triangle'; }[]; flutter?: { noise: 'noise-white' | 'noise-pink' | 'native-white'; filters: (['lowpass' |
496
+ 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass', number] | ['lowpass' |
497
+ 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass', number, number])[];
498
+ depth: number; }; }[]; pan?: string; to: string; } | { mark: string; })[]; }
499
+
500
+ /** One admitted phrase with its bounded scheduling interval. */
501
+ export interface AudioPhraseSchedule { tick: string; wait: [number, number]; program: AudioPhraseProgram }
@@ -0,0 +1,67 @@
1
+ import * as v from 'valibot';
2
+
3
+ type CueField='pan'|'gain'|'strength'|'sprinting'|'surface'|'point'|'dir'|'speed'|'heavy'|'kind'|'killed'|'clang'|'headshot'|'phase';
4
+ type CueScalar=number|boolean|string;
5
+ type CueCondition={op:'present';field:CueField}|{op:'number';field:CueField}
6
+ |{op:'equals';field:CueField;value:CueScalar}|{op:'in';field:CueField;values:CueScalar[]};
7
+ interface CueDefaults {
8
+ pan?:number|undefined; gain?:number|undefined; strength?:number|undefined; speed?:number|undefined;
9
+ heavy?:boolean|undefined; killed?:boolean|undefined; sprinting?:boolean|undefined;
10
+ surface?:string|undefined; kind?:string|undefined; phase?:string|undefined; clang?:'wood'|'stone'|undefined;
11
+ }
12
+ interface CueActionInput {
13
+ voice:string; when?:CueCondition[]|undefined; defaults?:CueDefaults|undefined;
14
+ overrides?:CueDefaults|undefined; delay?:number|null|undefined;
15
+ }
16
+ interface CueAction {
17
+ voice:string; when:CueCondition[]; defaults:CueDefaults; overrides?:CueDefaults|undefined; delay:number|null;
18
+ }
19
+ interface CueRouteInput {
20
+ id:string; bus?:'audio'|'combat'|undefined; when?:CueCondition[]|undefined; actions:CueActionInput[];
21
+ }
22
+ interface CueRoute {
23
+ id:string; bus?:'audio'|'combat'|undefined; when:CueCondition[]; actions:CueAction[];
24
+ }
25
+ type VoiceValue={kind:'literal';value:CueScalar}|{kind:'field';field:CueField;fallback?:CueScalar}
26
+ |{kind:'owner';owner:string;key:string};
27
+ type VoiceArgument=VoiceValue|{kind:'options';fields:Record<string,VoiceValue>};
28
+ interface VoiceBindingInput {
29
+ id:string; owner:string; method:string; when?:CueCondition[]|undefined; args:VoiceArgument[];
30
+ }
31
+ interface VoiceBinding {
32
+ id:string; owner:string; method:string; when:CueCondition[]; args:VoiceArgument[];
33
+ }
34
+
35
+ const id = v.pipe(v.string(), v.minLength(1), v.maxLength(128));
36
+ const finite = v.pipe(v.number(), v.finite());
37
+ const field = v.picklist(['pan', 'gain', 'strength', 'sprinting', 'surface', 'point', 'dir', 'speed', 'heavy', 'kind', 'killed', 'clang', 'headshot', 'phase']);
38
+ const scalar = v.union([finite, v.boolean(), id]);
39
+ const condition = v.variant('op', [
40
+ v.strictObject({ op: v.literal('present'), field }), v.strictObject({ op: v.literal('number'), field }),
41
+ v.strictObject({ op: v.literal('equals'), field, value: scalar }),
42
+ v.strictObject({ op: v.literal('in'), field, values: v.pipe(v.array(scalar), v.minLength(1), v.maxLength(32)) }),
43
+ ]);
44
+ const conditions = v.pipe(v.array(condition), v.maxLength(16));
45
+ const defaults = v.strictObject({ pan: v.optional(v.pipe(finite, v.minValue(-1), v.maxValue(1))),
46
+ gain: v.optional(v.pipe(finite, v.minValue(0), v.maxValue(8))), strength: v.optional(v.pipe(finite, v.minValue(0), v.maxValue(8))),
47
+ speed: v.optional(v.pipe(finite, v.minValue(0), v.maxValue(60))), heavy: v.optional(v.boolean()), killed: v.optional(v.boolean()),
48
+ sprinting: v.optional(v.boolean()), surface: v.optional(id), kind: v.optional(id), phase: v.optional(id), clang: v.optional(v.picklist(['wood', 'stone'])) });
49
+ const action = v.strictObject({ voice: id, when: v.optional(conditions, []), defaults: v.optional(defaults, {}),
50
+ overrides: v.optional(defaults),
51
+ delay: v.optional(v.nullable(v.pipe(finite, v.minValue(0), v.maxValue(60))), null) });
52
+ /** Ordered bounded cue rules dispatch admitted catalogue voices, with optional conditions, defaults and scope-owned delayed actions. No author callbacks. */
53
+ export const AudioRoutingSchema: v.GenericSchema<CueRouteInput[],AudioRouting> = v.pipe(v.array(v.strictObject({ id, bus: v.optional(v.picklist(['audio', 'combat'])), when: v.optional(conditions, []),
54
+ actions: v.pipe(v.array(action), v.maxLength(16)) })), v.maxLength(512));
55
+ /** Canonical cue routes accepted by the audio interpreter; array order preserves today's dispatch boundaries. */
56
+ export type AudioRouting = CueRoute[];
57
+
58
+ const member=v.pipe(id,v.regex(/^[A-Za-z][A-Za-z0-9_]*$/u),v.check(key=>!['constructor','prototype','__proto__','caller','callee','arguments'].includes(key)));
59
+ const voiceValue=v.variant('kind',[
60
+ v.strictObject({kind:v.literal('literal'),value:scalar}),
61
+ v.strictObject({kind:v.literal('field'),field,fallback:v.exactOptional(scalar)}),
62
+ v.strictObject({kind:v.literal('owner'),owner:id,key:member})
63
+ ]);
64
+ const voiceArgument=v.union([voiceValue,v.strictObject({kind:v.literal('options'),fields:v.pipe(v.record(member,voiceValue),v.check(rows=>Object.keys(rows).length<=16))})]);
65
+ /** Bounded argument loans to existing voice methods; caller objects and point references remain native. */
66
+ export const AudioVoiceBindingsSchema:v.GenericSchema<VoiceBindingInput[],AudioVoiceBindings>=v.pipe(v.array(v.strictObject({id,owner:id,method:member,when:v.optional(conditions,[]),args:v.pipe(v.array(voiceArgument),v.maxLength(8))})),v.maxLength(128),v.check(rows=>new Set(rows.map(row=>row.id)).size===rows.length));
67
+ export type AudioVoiceBindings=VoiceBinding[];