@wildshard/shard-format 0.0.1 → 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.
- package/corpus/brasscap-mesa/blobs/bin/02da0052111419cdff3a29f1c6d0ff0d223e0b53a956c16c65ed63d87928b3b9.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/068a121cd780a2a9164416f6e4fde44834f2d2f3a5ed65c174e480b7a2d3f627.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/07d5a061cd338618e528747d61eb2b17709510550ef0ba40a58b67761b200f3f.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/086e3706070555baca863f6ecf9dbca09c084afa501d92d4246d896b09546f36.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/08b1b9ab7c732d7dbe8f961f1fc40e84042d1fe42544f55c9ee89f04dffe3d5e.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/18bdbdc704cb8aac93435d208dfe0e9a44374efb73afa3bc58c631650e0a2995.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/1a210fcddcb9749ecb1c244837e8e37ea69b038faae191dee6bbbde228d31a18.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/264ab9ede386504a5ff9814b0a620b879cb29f3f45a80bcfc0c80b8ee236e364.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/2b6fbea4c846a23cf4802ebdb1804e128896c8dd87e5d23509db6729e5b1be4e.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/2d755cc635dee90b0f3958272855a821e2dd605a189a5ffcd480a325155fe84f.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/2d76c6829fe77fb55cc2541e4aca5ce5d18b68508dcdf3fa957fe4a83b9c887a.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/32c15d55a4548501740593807c5007217c72dbc10a21f4613ef5e0cee0b90d1d.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/3539b362cf3a61a79e92e113ebf8f255d0b25ec2d2edd816498879de831fa912.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/3af38a2377bc89f6c6c82ee1e83df674efa2793db932b50a23bbce7ec9cd7941.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/3c176a7a0d0850fdcee790ed2641216fc3d1cba025928de3d7784262bb9b6f4a.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/3fb37e488aa81a64c997b3dd09794e988994c6ee3476c6d653ced1670888dd8e.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/424dcc7b320317bf3f2c62c8f19bc80564035127eb38ab811e460934d57ea38c.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/45cea35fab6bb06051a3286fca2307944850c7f9ed7aa89b7c24fafef28efda6.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/499cc7863851f97d79dbfc64e76f9e6978894199184a0d80ebdca13066a8fa78.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/4b7217644763b00c6ee6ae3f176c726914966fb791654a385c0638bb998b6dd2.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/4cf11c7177bb082f335e5bc7a037ef00d09355c5ad8263e284a96a92630ff9ae.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/536b37cab5a1edd6a68a71d122aab6898e44c68a5470a4ca8a9a72c57c02e034.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/55d3628b27e0fcea383df86c434a69761439f51a013359f0829675b07ee2b616.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/5652ba90fbd8146edaf42660329cc81798752f2f60b8d03956714460d5ba75ef.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/57459ab5e2ac6cec65ef5e59789dd82b9666d8573df41c4a398df603f1fa456f.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/5915b6aed21bba49b841b45574f44f60d26b44810bd68ac70b22f3f3b0dab072.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/5c4a5c7a8e99253561105c5fa3faf14326cf0c23adc32bfe7f8aea4dbf4b05f9.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/61822a412cfd461f4f7ae50bc13f242a0fca6c5c58fca72247b596ab037a1c85.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/673b7712908966718341508469b39cd49e6461f690ca3c23d4621ea7eba0cc30.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/69394a49520f84f6dccc1655f1c89eedc913ac53a7e48ac5dc1bff4141639bb4.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/6e58a53a6c2acd50f9f80fd270ca034c54421df8a587e181101b4b75b952ac5d.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/75dc9f23ee71e11a3a0c67eb77275d741a281c3398808fb42efd52b9973d5d04.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/76c6a403293a68ed3d6ad14e9dd27b555c3a1ef4a3cae12a2bd2ab3e67c5ad02.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/82b73ce3a18e47092840fc029177861887aa2867b007248ac79ffa20895a4491.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/8430d9bbfb4e2b678c54595ad95555c3c73d0e1b144a4d6e29664ccb4371baf0.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/848d4492508689f5c4a224079dca8809e872e33b8f2635c9f16da5dc21beed16.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/84941ac387a0d245ea20bd663ff4ee78c5315bedfa058ada0961765aff61acaf.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/859b7bbcf048a4525db0548b8f5afef83bfc4870914767153f44c05e83436ec5.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/87b68b45680a57c796eed9183211b03335a6ad6737372b3ef476c2cf42efa631.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/8cef94308af8d09670e4c99a3b6c3d9280b7a27d386653a3bd7d482b2cdf2b65.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/8e564bce3f352c2186ae09ed7fbca9739c10abc46fd5f6893c68cb47178bd2b4.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/8f89e79d0fb9b04d48c7b5719e1d024161c6a2119835b18dcb193ff51123a9be.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/8fe511ad48656a0b10801100b9100edab1be605a8a182dc5c834d298bf0d9166.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/900bda6562d06fafda54c495e325d57dbb7931813178ee207449c5519d89d537.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/997b1b7d9210bfa77dc71f16a57c6bd66bc7c648686dc2a2666044c95042978a.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/a111bb4c6cec536bcf57dddc744b871ac9f3d094ce459c16243adca19020db77.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/a2208bf899e6c84942eef9fbab569d597f574551afae5864f1953c6a517af068.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/a302ddb2598a72ece53780094b64ad861dc68e6913d8a1ea08f5d141736e2986.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/afcbc671326d0dac14e460662c1f793335877ba53cc965f67c0306833b087e7c.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/b657159e6a28c801a211024f96a7ef60e388ce928a7b41ae3d7555a6f8fd2e3e.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/be6bbc6cd15ba525790075252ba0ed0b28dae5cfbfa118c00dfb9ea1ab95e668.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/c1360e3cbe6b3dc8894bc66c359853854c2e5adeac9c7cd5ba63f5db448be601.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/c7983018dbf8e384ddf73191f526075bd0b29907061ab17642ecdc18ea7b9897.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/cea66f27ca60ea173ee0a2bcd91964dc2638eb5657250fe3aa5bd3e41faf8730.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/d052be571a0f3ab69926951f3a4c9d63f05da2ca6d91e5963dd63e04ecb515de.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/d162a993a60dd682c8c21dd111429d84d8d30413a000cf481cf98d06ca83e706.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/d238c3d3d054911714ebe30dafc99e6ad13925b7a600ba9f8d532d0f515f3f5a.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/d9a98cfe2865a9bb0e94f35c735a570b0625b58f890a6b1f6e14fab2401f0af2.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/dc27ae954b7b8a13a9459d6ca6ef2997f662715ff5f5453ea0da169f141748b8.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/e3ff1fd41cf76668b8e1927c0c2e4056b63a293ebbd300a8f1b1d27d87786271.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/e45b7344d373b3ef4a94f560cf4e17b1eb3b8cd89d1e552fc9be11d6b7b546f0.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/eb14eb898224d5d81d1012bec54f2b79f9377dc60fa1d01e49b4c3e148292d77.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/ed0e0101a3d91a3a615f9e78ef36f7deb8bb0eab0f133241d621925d0b596599.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/f722e3a3b1f0a3d7b9f7d7c66c46d8c87245de5f8eece055daf95c7086f8c267.bin +0 -0
- package/corpus/brasscap-mesa/blobs/bin/f76013aedfd810f136fa689a151024bcb942687ef42ae7edf1fd3513ac4e22c7.bin +0 -0
- package/corpus/brasscap-mesa/blobs/glb/0547e63693282614673b13bade4c08eb772020757b131b7c80f2077873aab70e.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/0cf89e9b1824440d213c8e9e33fb357734b7241b4c7eedaba3df7f8306e05425.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/0e01060e3a507ffff6461c50b5c565c71380a6a67d9760cdd7a09afd3e30b584.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/0ef326c5cf5292cd15b48b851460ee8156f51e0a5b62457c8f1f3c53c41665a3.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/1112ff4a3f69db3b62c6d2d6ae021e7c43ce0ca1feb1d3130376881decb3c6b0.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/11357cb8a0670fdc9a03780dd79a31e0aa7a0537786cbf66491bae1722d6feb3.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/11dbecc73bd343c375bd4b79db8dbda2272e76a6b8426ac29e90f2b1272ccfc2.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/133f639cfa837bc5da7915121c71fd32281660c2aaa0248bd59bde47e7faf8bc.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/16812a090136b6678633aa4db03e4187920ae0aca776ad6da373c600cd341972.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/17e63980d7934cfe1d2823d78652af338fe9f0c2170106cd4506a2c4e7f4716f.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/199224cafc86904bdefec8f01d131d7ca3e076a22b689bfc6a26dd20373cf286.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/1a5c8cf223a2f64715ea5eaf14d97a0131f9ebdef4388dc4823dcfa57817724c.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/1b0ec09ad6718149d7ca514136cee09b04c96425f03af0559fd097112aa0daa5.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/1e5024bbb1284b2ed39bbca2d0ade3acb5be2a2c6ba643291f269b76098c7f79.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/1e7635972e13468ffcbb1608f1d12559b066b4533912be2c35e3db07fd4a679d.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/1f03db3a38a21b8d4d02f8ede30e1303cd8d4c426815326a88f45a268b17a492.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/2624abb7bf45618be40f8c3221445179fca44f7321baff415fdf7ddd5e0afc6f.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/27fc3bad6db6e2b5ade5d242867d882362482ddf19c647edef821afc27d52dc2.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/29959bdb5b04a9180e88ec1ed976bae55424d3dc50985f13c0f85bae11ae79ee.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/308cbce2b1b6360f9a2dc275d0bc28be1966fc3ff5e0a58844405ba867f3f668.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/3674d7be969755aaffa368e57b8d1bb743bc98e766a57948859d54fdc7d2c066.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/3736ca95c9c40b30e21302ae6c89148d8ac09264dfbb7e5764b08c265a73ba3c.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/3bc90e1dc9411d249697e4ec352baa4886f91cacfe4940ac43aed879f60966c9.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/3f519c7c7482307cae908b27602dcb7716e2da4b651eff39c4c37103998d18fa.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/4767636d5554b60c94b447b87b77fc1456a2b9af42bfe08585389d27f306dd5e.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/4a3242773b3a73a73ee746a0cdf30c8d6d904bb4406dfdf9822dcd535d6ae308.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/4c7bf3788cba151442d85c3f76553c2e356edf8566ae8243d0a535c9bcde51d0.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/4f3b9f4c818ed6d375947e9603dd058c539e14ff05aa193fb5054d899dbb82a2.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/4fdf7ee67d12de1cd30c3c2bbd9409032dcab5feb3a7d3977b92c50b1d161afe.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/5821f33aa00e9acd2f4c0a29129978ee7006a879d163ce1463ae476031bfabcf.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/5a986c3e44fc686a2efe7648c3945bb7b51cf303918381383f21f898dd312cad.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/5c32fc1de6d198ed606d3e8c3264319acdd950dab18e8b723fc6332bf2f56aea.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/602ce4e8b00a0afbc1a894b65641e48d362ec834a559b9d97a4801473bb01da7.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/6180f9f96167522d8cab4de1d52598cecee8d7ee042f48e41669c98cf61c19c3.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/6205973ba63f7a554662ba05010d25131bed2d9656de422e2067ca54709d5b3c.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/693e556f2165232e8a38b1b2d68676f235ece5705c564992cfa7731426f4d376.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/6a46175438bec5527c281b577bd220b6badedf3c74266b997d39e596f83b8853.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/6ca1bcad7ea053a259b7f9fc5a7ec388a4cd29d44391d93386ea8b1143d94c21.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/6f9bc99656b611890d6acc76ee416f6222ca2d5f62167840b4216a21e020a4c8.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/6fb1e7857996662233ab5314fc13f8aa30703f91c04542e352ec17f9dc4fc054.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/7028ec39712143a7e9d09d2e1477282b654d0470102ca9d272ac82b23604cb21.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/73af65ac86efa61099178f3e7075dcd26d389ee9b9aa3546c18dede10c3dfda1.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/73b992b71bd3165ff7701ab1430c075cb5ba9b74e6363d24640377b1011ddc93.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/7471261d4df59979ba41a622d93779b66ebecd50353ad433862e603ee65f8748.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/76e9a3fcca962c2f900cf79dc1a0851840bd405dc11231f629f784adbcb69d23.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/79d2d29e8cd8b642386b5f31429b39bc4d6f13e53107dda00ebc463abf80c79d.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/7de66fcfffe4ff108510cbe6bebec44e28ab4b78e98e9c1a38466db5b81881f7.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/811fa798cb81ea99488db98e3d3ddea815aac8f6e7493ad04d0176f603978678.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/89b277f1636be220ff5658ff1f1c62efe14079d6e1f42efb373fbf0246801533.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/905c5fe666d9f6174e987382e47d3f325c5696cf8792d7a4a1dd120a438b8270.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/90efe3e05370ee853c0130b98ee82f00b86f7c7104e96b094715187fa49ac16f.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/968a7c5cb13014bce00a29d43b344bd6943ff00ae2908abbc6b40a994f1172a1.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/9a955b4e69dfa5b38f071099053c1a3684cf85ec2d346420de2853c61768f8cc.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/9da2781216a2e482dd8a6ada5ebb43bcf48e0169430e787ac277559cb2ade19a.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/9db02aab14a3b52463deadefbf4ba771809941e7fcb137c905955bdc80ec23bd.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/a3fe1788cf5d7f260249c722f0e0695a4d55744d1b14be44122377147a296256.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/a5c75af8f090d3c95fa46d2be49be5031138d7cd1bae234ae028edf717bf299e.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/a771abd40bd337a464c1bd19f841b62e290124faa89b19ec50e85ab36bc740a5.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/a94a2ad2ed463a47cdda117df25b06b3cf6be37ddac08594bc5f5d76c7237730.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/ad434e4a6490e495994b25f7574a5847a9f7d9c2ca5a2b229a9dfdd2e5e2bb72.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/aeae7b05404b852008a7897689e58aacef44a2c3bc0e87d2519ecdb4cb1e3ff5.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/b0c0c8a4985f92be3b358a8e703c67957427501882aeee05b4ccd3c7880930d4.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/b25174c3cd13eea6e1d9c3104ee5197dc6330129b2f0f7676e8a429900999d9b.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/b3eecdec571df96338edf690443394ff859383b4c94f4cf33d42c240006f8543.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/b7aa0c61ff9e7411535c7b7b8e587849a92bad00d431171ab16ad47d55db0a53.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/b9deef944c22331bc05220d1d6e46412e3cb1246ef041a4405d0cbbd90c2d624.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/ba9376e4ac39b809133ab717edb4c88b5219118766db492d7c97534ce119c2ec.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/baf338e9c272158b905fb58a712e29410c657a45be2764f1c6c43ca87fd1db48.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/bd442ac9fbe52b9f2e4ba586670017c3f2d9fedf1cbdec77ef24e9f8b3a183c8.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/c142adcf253be43b66f23ede8cea1e8fcfa256ebf53054a1068ace04745718a6.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/c6d7cbdc4b2ee9d416edf4d736a4f374f08aea98ca395ad371a50a1853744cfc.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/cfb165a7675d15cee2c490b31095a58f73bace50ccc1e0fdf2c8dc4400f1df27.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/d40f2ee59612473e9f687f17a0e203fdb4ba54c7185b05a8d81a433b04f24134.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/d50ce95411156a6b6cf386aefa5ee58db659811813f74be74f323e7c5795056f.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/d6af418bbde39b4fc7d22a61401d416be7a3fc1214ea2d3f42b4549c392d22ca.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/de7222ceeb1f72693dfb7fd1f343798659e03772d77f2b498fd8ebece2d5550a.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/e26975b198127ac3b6b4f5c4bc08ad47d6691398feee777743285391cd36d502.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/ea428490cd5f2672676a2776a598b819b08246871e76de94b7196f9643144986.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/eb96567a266d24be188cb5b08021112f2fad311cbead939d53c5565da11f6265.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/ecf66230bf7b68050c0827c2e4caf3de90e46859d291b794faa0dd3816d9dac6.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/ed8f067763a4a8adb83d80c8324b2a9668f1061f5f5352f21295e6cc5132386f.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/ee507a38772865467736d370791fe73c6aa4d83fe3e7ff4baa156b9cb2894c1c.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/eedc5b62dc6f27d4a089e9f5b282f626129236d3f1689b001e04f8748bf8859c.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/f4119b9c6c23435619682b5d247743459e76584b9b0d6c5cb689d8e156906695.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/f576047267a0bf9bd4bfc47072ea3d11066345b839953546292da678d1cb4722.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/f8cdfb11997d4ccabea88bcdd3924cc8b621b33618b18fe5fbfd286edfc1d87e.glb +0 -0
- package/corpus/brasscap-mesa/blobs/glb/fce95ecc5db24c903bd46f338e366e2715411465a5efac180e2f0f46397e59de.glb +0 -0
- package/corpus/brasscap-mesa/blobs/image/0579557f9344df6f2c4b1225e6252e53ab86d417a4c9b504b5c714a08a388e47.jpg +0 -0
- package/corpus/brasscap-mesa/blobs/image/9e18816a2ec16fbbb1f00f4a39c73ac2cbf6a8cdc17b4c96b1eba4cc9a754dc7.jpg +0 -0
- package/corpus/brasscap-mesa/blobs/image/eb453c71cfb1f9441eb00b32281f98e226e49d9dcf75c231455575fcdc652222.jpg +0 -0
- package/corpus/brasscap-mesa/blobs/json/e0072ed82115c519b891f53a194ea3b28fff7d3826d8ddf23460d6f21b7728d9.json +1 -0
- package/corpus/brasscap-mesa/blobs/json/ffb0e08eaaa7188db1f55931c9b6330937316091cc7463ed2eff6767bbfa33de.json +1 -0
- package/corpus/brasscap-mesa/blobs/wasm/1d6ace79610c4d510b60ad0c52915e42b57797d91f1ef292f60d8a3daec03dd6.wasm +0 -0
- package/corpus/brasscap-mesa/blobs/wasm/24a4d4c1292677b1c984b5c0d3497ae2929528bf511df475f80cc20945bb08ec.wasm +0 -0
- package/corpus/brasscap-mesa/blobs/wasm/b86d8afcc269fb063ebf64768fc3787635b65a7409a571115b07be2e4da39733.wasm +0 -0
- package/corpus/brasscap-mesa/cook.json +1 -0
- package/corpus/brasscap-mesa/mounts/shardfiles/brasscap-mesa/discovery.json +1 -0
- package/corpus/brasscap-mesa/sections/actors/creatures.json +1 -0
- package/corpus/brasscap-mesa/sections/actors/crowds.json +1 -0
- package/corpus/brasscap-mesa/sections/actors/species.json +1 -0
- package/corpus/brasscap-mesa/sections/audio/audio.json +1 -0
- package/corpus/brasscap-mesa/sections/combat/encounters.json +1 -0
- package/corpus/brasscap-mesa/sections/combat/items.json +1 -0
- package/corpus/brasscap-mesa/sections/combat/strikes.json +1 -0
- package/corpus/brasscap-mesa/sections/economy/ledger.json +1 -0
- package/corpus/brasscap-mesa/sections/economy/loot.json +1 -0
- package/corpus/brasscap-mesa/sections/look/look.json +1 -0
- package/corpus/brasscap-mesa/sections/look/materials.json +1 -0
- package/corpus/brasscap-mesa/sections/quests/quests.json +1 -0
- package/corpus/brasscap-mesa/sections/sim/client-scripts.json +1 -0
- package/corpus/brasscap-mesa/sections/sim/hooks.json +1 -0
- package/corpus/brasscap-mesa/sections/sim/plumbing.json +1 -0
- package/corpus/brasscap-mesa/sections/sim/scripts.json +1 -0
- package/corpus/brasscap-mesa/sections/sim/sim.json +1 -0
- package/corpus/brasscap-mesa/sections/state/migrations.json +1 -0
- package/corpus/brasscap-mesa/sections/state/state.json +1 -0
- package/corpus/brasscap-mesa/sections/ui/card.json +1 -0
- package/corpus/brasscap-mesa/sections/ui/compendium.json +1 -0
- package/corpus/brasscap-mesa/sections/ui/level.json +1 -0
- package/corpus/brasscap-mesa/sections/ui/ui.json +1 -0
- package/corpus/brasscap-mesa/sections/world/collision.json +1 -0
- package/corpus/brasscap-mesa/sections/world/days.json +1 -0
- package/corpus/brasscap-mesa/sections/world/edge.json +1 -0
- package/corpus/brasscap-mesa/sections/world/movers.json +1 -0
- package/corpus/brasscap-mesa/sections/world/navigation.json +1 -0
- package/corpus/brasscap-mesa/sections/world/props.json +1 -0
- package/corpus/brasscap-mesa/sections/world/spawn.json +1 -0
- package/corpus/brasscap-mesa/sections/world/terrain.json +1 -0
- package/corpus/brasscap-mesa/sections/world/tiles.json +1 -0
- package/corpus/brasscap-mesa/sections/world/traversal.json +1 -0
- package/corpus/brasscap-mesa/sections/world/water.json +1 -0
- package/corpus/brasscap-mesa/sections/world/weather.json +1 -0
- package/corpus/brasscap-mesa/shard.json +1 -0
- package/corpus/brasscap-mesa/validation.json +1 -0
- package/corpus/handwritten/blobs/bin/027822f6ae9c374ce1ced851f2227cb9acb03077e5cc6b7fecb245c31f021abd.bin +0 -0
- package/corpus/handwritten/blobs/bin/0377ce182bd604bcf4d501f14bf954c434ea64ad856ad9d71c502d1045612703.bin +0 -0
- package/corpus/handwritten/blobs/bin/05ad93d239eeeb5d9afa09b00d90c56098d88e8850e5b5e691fcaa7520dec3cd.bin +0 -0
- package/corpus/handwritten/blobs/bin/0c8980141e6e394ea473df1eb11c347ba617a1a9a4b39b3fa1871b5d15b97d87.bin +0 -0
- package/corpus/handwritten/blobs/bin/14eb11f8d809320e0a68b1edea7837d7a5b4a3da71f1ce4f54068e0afe0b039b.bin +0 -0
- package/corpus/handwritten/blobs/bin/16590066c039ac71e5038a9866a53ccb95e21af13db29cb655b379c4fcfef7bb.bin +0 -0
- package/corpus/handwritten/blobs/bin/1795b5147ad52482445d2414ee22823b947c43a917b6e96fd9ec017f17000912.bin +0 -0
- package/corpus/handwritten/blobs/bin/18f2e24ecc1ed1b1d12ae1c89732a5a1a618ab6e973d4ff0332cf9ecc4e4f4a6.bin +0 -0
- package/corpus/handwritten/blobs/bin/1a18ade01095f1a9ebe75650127861ef27dda0bb17c2b91bde057ec88ef2e98a.bin +0 -0
- package/corpus/handwritten/blobs/bin/1dba017cddb874bc147efb00c55418846ffa344a696f4df702bbabeea55034d0.bin +0 -0
- package/corpus/handwritten/blobs/bin/248c703537e4687ddd2b69a40d1ef3936da718626289d6867ce0a6866f562ba4.bin +0 -0
- package/corpus/handwritten/blobs/bin/2612d9fd4727f8c349f2dbfb7b1650bb7a752d0798a4966ac22cf2b6cdd9fcef.bin +0 -0
- package/corpus/handwritten/blobs/bin/28c54c766e90e3b046a2377b9fa015b0ce45cf3da4420f2b10553251f86c06aa.bin +0 -0
- package/corpus/handwritten/blobs/bin/30866b4807b12579f50218f6525c3db00919fbd43c97921daf47b3244b25dca6.bin +0 -0
- package/corpus/handwritten/blobs/bin/3d14fae85d77406a9b8c59f2e973cdae9587d49108ea92fb460679ca860196b8.bin +0 -0
- package/corpus/handwritten/blobs/bin/3f2201a53c441abcfb52089fe9bbb01f26fac8744099d3fb6668452885c2fa11.bin +0 -0
- package/corpus/handwritten/blobs/bin/42f270a99367fc4cc901518ccaa344ab595e265f113be944510da745c11f69d1.bin +0 -0
- package/corpus/handwritten/blobs/bin/43fd4327fedd51a586684ac611bcad4a8b9d62e51e03967de71fb42c9bf0f6e1.bin +0 -0
- package/corpus/handwritten/blobs/bin/484adda0898a881b6f095dad447f6a619bf0933f65efe940b72f1ab7f3630c22.bin +0 -0
- package/corpus/handwritten/blobs/bin/4a38cd49e8797429ce76265c3d8972195d5b0a02a35fc05fc513eab11240f415.bin +0 -0
- package/corpus/handwritten/blobs/bin/4fe636237bbbd4f836b0816bc61702f4c224d4cb91fbd94f244c731e24a1b945.bin +0 -0
- package/corpus/handwritten/blobs/bin/51b1cff782dc7ebb382bc429ee965023d4cdb52c7b3e37d6ffff5ef55c1c2813.bin +0 -0
- package/corpus/handwritten/blobs/bin/52561f02071ecaa98432fab5e8ece407a8e8f733a01f8eb7c543d1efe02614da.bin +0 -0
- package/corpus/handwritten/blobs/bin/556d6333923afea9641c4738741a41d6a46ae28a508288b9a49a749a344c1398.bin +0 -0
- package/corpus/handwritten/blobs/bin/5caeb97f32c7f31e1029eebdf31131f879f781bb5e3a225206a646710d83fd75.bin +0 -0
- package/corpus/handwritten/blobs/bin/5d1131e42a045083225105b640ff72e02c7f353ee6285545ac264d01bea26b1b.bin +0 -0
- package/corpus/handwritten/blobs/bin/5d80b30eee9f8342a92f6756fd0d84fb9d2d2ce994d222627641e584ad45d2a8.bin +0 -0
- package/corpus/handwritten/blobs/bin/5e0f9f7f2a85abe11a0a61ede853c9b9942b4494c3eb9943785cf6ae221e40e3.bin +0 -0
- package/corpus/handwritten/blobs/bin/5fdc5485343bba8201185c9bae862ad8618498ab5ce63b53514e4e0226fa7bdb.bin +0 -0
- package/corpus/handwritten/blobs/bin/6623dcb0b31c9ca0be342f6dca6b9e607ec3c12ff82068fa6030c142c2df77f7.bin +0 -0
- package/corpus/handwritten/blobs/bin/6887131a04175edbd1989aa95e8749d1703e7f2d0b8464e85f6bad28d6964125.bin +0 -0
- package/corpus/handwritten/blobs/bin/6cf89771d998486cad9049e6f4fc177d742a18ad79fafa4596814ff9d3cf1952.bin +0 -0
- package/corpus/handwritten/blobs/bin/74bbb0fc219e8476cd5550014a357ee18abc981ff3fe787ae3e60d4593705ec5.bin +0 -0
- package/corpus/handwritten/blobs/bin/76784a7f519ac43ce113a0c9365881839b75f66f96aa009fe8d3c8ab539ef283.bin +0 -0
- package/corpus/handwritten/blobs/bin/79a2f693ee2da546bb551f8b641b9c3affd2b8bfb5632ed7f417daba9d900af9.bin +0 -0
- package/corpus/handwritten/blobs/bin/7b593b0f9eefb957fb9d58b316d9836971203038d7c8127284bba44ccb3090bb.bin +0 -0
- package/corpus/handwritten/blobs/bin/7bb8e518ca5606de78972a6c648b57623f8bc12d7e06b4bbf43c60ac419a9bbd.bin +0 -0
- package/corpus/handwritten/blobs/bin/7c6133f3350147257fa501f41269cb77cb11d8ed96d351e873333b079cee524a.bin +0 -0
- package/corpus/handwritten/blobs/bin/7f5acf1893828995256f5b2c54948f80ba21e53de72db26ea72ce2479f5b0682.bin +0 -0
- package/corpus/handwritten/blobs/bin/836516253cf0f3e6e79537609fdbe6331c8c5c974f9ec4d3fbe4a7db48cf123d.bin +0 -0
- package/corpus/handwritten/blobs/bin/89900344f82d5c1474d2a163f8d29903447bac64e9c9775123ef499be70c2380.bin +0 -0
- package/corpus/handwritten/blobs/bin/95d76a9273c3edd98b3643c54e2e7989800bdcaf6f815230ef09f601e760330f.bin +0 -0
- package/corpus/handwritten/blobs/bin/a7b5a5fe053a38c93eed899bde5051cddd80e0a3f3c82b6fd814869097f0944b.bin +0 -0
- package/corpus/handwritten/blobs/bin/b29be84df0bfd1bc97a1464fd5ea068130947bfed3328e167640c81326eb45d7.bin +0 -0
- package/corpus/handwritten/blobs/bin/b6518dc352be03332a256f1cd9d1149da262fe6829e87ba43364f19c687ca7c9.bin +0 -0
- package/corpus/handwritten/blobs/bin/b7edb8095beeb158adb61ae3caa1653773757afbcd8fb2764c94b975a43fe9e2.bin +0 -0
- package/corpus/handwritten/blobs/bin/b86d617ae7fa397df51ff7af87cd89fa113ac19abd3840ea8f3a086d6c82905c.bin +0 -0
- package/corpus/handwritten/blobs/bin/bb860b5c67ee7f2fafd67588822152228d6f6c9de1231123eeafa4844732b18b.bin +0 -0
- package/corpus/handwritten/blobs/bin/bf8c3971bbb224075d488ffa9cfc20e322c61f9ca0c59c356838415f6778014b.bin +0 -0
- package/corpus/handwritten/blobs/bin/c2edd52ee14ebdc9fcc01d38c15d6ab3379df7a20098c260c546551898959cd1.bin +0 -0
- package/corpus/handwritten/blobs/bin/c3de13c551c5b45270143dcbb9fc9a31651f6012355823c0709c2fe6cafda940.bin +0 -0
- package/corpus/handwritten/blobs/bin/c57a8d9da18b1289afd16de00dd1ec75027048b8dcf7dd218da36bc3276ff035.bin +0 -0
- package/corpus/handwritten/blobs/bin/cc2975c9dea4c31b1bf380623a8f44059423004653f9cae4f603d374174323b7.bin +0 -0
- package/corpus/handwritten/blobs/bin/d476abba2e1c63ad3c7527617559173484ee837a5be2744d968466d5527c286b.bin +0 -0
- package/corpus/handwritten/blobs/bin/db242f89115c878cf0c3b976a1647e9cdeb6a1a51813b1dacaf1188715603294.bin +0 -0
- package/corpus/handwritten/blobs/bin/dcc4b9b3bc4ca777d11c494ae5478f17ad7cf2efa18dcba30def872d55355bc3.bin +0 -0
- package/corpus/handwritten/blobs/bin/dd99da483f385327d6b8319d6e2e9000b580280069353718aa0fda2230707e8b.bin +0 -0
- package/corpus/handwritten/blobs/bin/dfc139dba26f1789e16f72602e654636f2d99bcd41e3f10454da74b3a6a64dda.bin +0 -0
- package/corpus/handwritten/blobs/bin/e15ab3cc9f60657321cfe8d9751e086f025734f4e7068271e0baf6066a686f18.bin +0 -0
- package/corpus/handwritten/blobs/bin/e16a83a71213db6f804ce1d53981a2308062752c85c440022d9eeb7605fd37c8.bin +0 -0
- package/corpus/handwritten/blobs/bin/e7355876487f660ac9f25c9d9dfcd66eaf432e1e1669eb89d12ce8267a8d3e86.bin +0 -0
- package/corpus/handwritten/blobs/bin/e81a632e2da0f6a4d801f18aadfe2c6e640401cc1178935a9099ebb8e3af6cc1.bin +0 -0
- package/corpus/handwritten/blobs/bin/f0721c60d0b1046579d8c587fac8482a70822f0b39a85f9acc0cfc31f82b7dd2.bin +0 -0
- package/corpus/handwritten/blobs/bin/f301cf574de6d84030f839098ca44705dca115f9d3e4ee848e0b35fff3deaf77.bin +0 -0
- package/corpus/handwritten/blobs/bin/f7797f295a7570c437bf7020a1ddf208fea2a7aab595333320a6396c1608d360.bin +0 -0
- package/corpus/handwritten/blobs/glb/08de0bb2439ac812adef528b4b073bdb954bbeada972a2f3afb1757bd0540396.glb +0 -0
- package/corpus/handwritten/blobs/glb/153681171c35d2898569324e21ebe734b8418d4122833618a1e64ea326be1e5e.glb +0 -0
- package/corpus/handwritten/blobs/glb/1df5ce0b6cae72ec4cf3c41510681ba70ebb474f9745d536ebd4f03e8fc82de9.glb +0 -0
- package/corpus/handwritten/blobs/glb/262031e2fa710bd8d586eafce1019ca1434a2170e407567741aac1d99fc9c5ab.glb +0 -0
- package/corpus/handwritten/blobs/glb/27466efb180fb5b5074b40e424bd0b8d78f7ff0f5f3663748e014daeeeb5bedd.glb +0 -0
- package/corpus/handwritten/blobs/glb/2d2f6d00a14c89a4efb7f679b371118f564f258797ed8b8b42baf4ae60902ea6.glb +0 -0
- package/corpus/handwritten/blobs/glb/31f327d215ed7ef422e2169172f3869769e9816c9da979616844081e74f2eb09.glb +0 -0
- package/corpus/handwritten/blobs/glb/3bfe0e9ca18077ffee9c284ef40fed9f2fc354f7495612c785a6f980b5966559.glb +0 -0
- package/corpus/handwritten/blobs/glb/3db43042b3eeb1dee7ce9de1cc00322cefc348aa18c37d168b0858e6af6ca7a4.glb +0 -0
- package/corpus/handwritten/blobs/glb/46460a50da44fb8e792b48a646ec9ce025bb309d315dbcf67d2e9598591750de.glb +0 -0
- package/corpus/handwritten/blobs/glb/4902213556fedaf269fba6f0f195e424b2e49973ab45dcb8b69e34d253d9d8ff.glb +0 -0
- package/corpus/handwritten/blobs/glb/4dda463c9cd4bf339e5611871d4ba2fe16fe1487389a88b2888e96bc55e45d93.glb +0 -0
- package/corpus/handwritten/blobs/glb/4ed23469bd2b6b73183564cfc80a1ebcd0ffe2666a90a556752af0ca147fd2f7.glb +0 -0
- package/corpus/handwritten/blobs/glb/4fe74a1bed6b67129885b90cfcae01b5ca82e23e6d40507e280f02fca7fda54f.glb +0 -0
- package/corpus/handwritten/blobs/glb/50521bb3a50cc7199d324a0b25bc167c2e9d69770cb500490428efefc81ce3ea.glb +0 -0
- package/corpus/handwritten/blobs/glb/5ecca36d1e503edc092af0ef42f139cdcad99b8c2008318eb6ad337023d57296.glb +0 -0
- package/corpus/handwritten/blobs/glb/60fc036925852568cdb1b9fb85218dc43a8bf2ed86d3971a221ad942ece203a7.glb +0 -0
- package/corpus/handwritten/blobs/glb/611633cee0e5822b744486e6dff5414ad5b159eaabffe1c0ba0bb68be794bfa1.glb +0 -0
- package/corpus/handwritten/blobs/glb/67c7f983a0bcb9f84425378acac121a53f30795dce3181643bc1b763d0ae80b5.glb +0 -0
- package/corpus/handwritten/blobs/glb/6ecc0d307030943727484b49b1872643479c55ccc92252fca06e9e3cbe98fa90.glb +0 -0
- package/corpus/handwritten/blobs/glb/774b366df4de56cb6f9e3c904f02ec98016ac2ec489dc9e214b09220fca2f8e5.glb +0 -0
- package/corpus/handwritten/blobs/glb/785bae514ffc029e611d602259db7d37cbef589409a0814b9d37175d8b6c0a45.glb +0 -0
- package/corpus/handwritten/blobs/glb/79e79524efb2830e90af3c945c5b36ef07c1a38f2da2958112203a99eac52a16.glb +0 -0
- package/corpus/handwritten/blobs/glb/7bebdcdaf0be30d9f8d21bde72af68c32d825d12dc668f48109223ed7ff71c9f.glb +0 -0
- package/corpus/handwritten/blobs/glb/7d8b5ec9326a11362b3f9fa3409cb59d11b99f549cc304319c63c1ec55cbf5ab.glb +0 -0
- package/corpus/handwritten/blobs/glb/82e886f826315e4bf962363165fadadd3d93f85132c1909095045e0a7ccc0b34.glb +0 -0
- package/corpus/handwritten/blobs/glb/84b4ef190c3994ae7ca1b1f7a936526d1d20ad7deac13f949e3fe6bb7ba139ed.glb +0 -0
- package/corpus/handwritten/blobs/glb/85b7153e943fbe8c659bd6e4b323511dc6f6e2c7a3a1185e7a9a29ea6ddfdfa6.glb +0 -0
- package/corpus/handwritten/blobs/glb/85cf2d2be91cedbaf454ca42ad53c0c17b311088528d274695dbcea490d6c684.glb +0 -0
- package/corpus/handwritten/blobs/glb/8662b4cdc626c61a45e63f71dc866746c083cd0d4644b817a373105f936a7047.glb +0 -0
- package/corpus/handwritten/blobs/glb/8a4d33bfbb17d865e5deb0a0bdf3de67fc2312950a7568ed2635c22fbe4b1ecf.glb +0 -0
- package/corpus/handwritten/blobs/glb/8b11171d41c9027411ca8b87797d9ec70355471bdd3a247c114c49b8b781bbd9.glb +0 -0
- package/corpus/handwritten/blobs/glb/9026e1c4f0250832b69a989e69fe3071e5cad72adfe9c22ce11c409b18bb3357.glb +0 -0
- package/corpus/handwritten/blobs/glb/945b946f17b6393ea040230641c3083678bb6ab42e1d7239aeb9c950d0e7d5bb.glb +0 -0
- package/corpus/handwritten/blobs/glb/9afab455d603f1f8a38074c5a6cbed26d7d7f2cfd8a531820bd165d4b37399ee.glb +0 -0
- package/corpus/handwritten/blobs/glb/a6d702fb1be1095517625bfb2a2383f5f9638775059fd7e0d093d2044651b848.glb +0 -0
- package/corpus/handwritten/blobs/glb/aae479c2f99848998a1b499bbcad815d971349c2442bc363786aef63baad4337.glb +0 -0
- package/corpus/handwritten/blobs/glb/b155bd41f260d5303e293d691b657e0fb9b9c8b2f8aa589a0187061baa033eb7.glb +0 -0
- package/corpus/handwritten/blobs/glb/b1e8b770d99e8ca4396f21fd512f632c587149fc13db69deba388f702a46982f.glb +0 -0
- package/corpus/handwritten/blobs/glb/b382c318a5baac35da59a7b99ebaad6992e30c4bac327e85851ce0b2f89aa58b.glb +0 -0
- package/corpus/handwritten/blobs/glb/ba4478198696802808262af9bbfc224fe37e24e3f8c13de91debc87d3e1a9d41.glb +0 -0
- package/corpus/handwritten/blobs/glb/baf02cd967d1bf3c6a2ae878f4ca4ed34d0c39302ca2b8b6e3560a4e87b5c16f.glb +0 -0
- package/corpus/handwritten/blobs/glb/bc14dd152815ea6ed39458dcf89f2d69173d61d6e2b57be99d31ce2da64ccf67.glb +0 -0
- package/corpus/handwritten/blobs/glb/bc4e4d3bcf7ace855183efec0fbf242d444a32714d8b2fd8a45fa7b539ef2c73.glb +0 -0
- package/corpus/handwritten/blobs/glb/bc53475e2aa2fc9c2c0574b36a449fd57259c462d771e2b360def5c338d37c26.glb +0 -0
- package/corpus/handwritten/blobs/glb/c35d9e50f392c29f2587e3a6eb4f21143ba08e48d76a53b9de62d3b5be46c1a5.glb +0 -0
- package/corpus/handwritten/blobs/glb/c6911e059d3ac6aea75bc0ad3dd8b220704bfbba8ba98b57705e7aa3ecbe0050.glb +0 -0
- package/corpus/handwritten/blobs/glb/c84d88b6ed878490bcf9fa985b5e6a7a683de8ee7808ee4151a3b6a898fbe4f2.glb +0 -0
- package/corpus/handwritten/blobs/glb/c9d5d02ef0e38ac2898d3e6ecbc2ea0a6d2bd04531118550ab54b5e83293d7ec.glb +0 -0
- package/corpus/handwritten/blobs/glb/cd9d04e361e4c3d0aeb82f8682d71114ff8318b8fc4980bccee3c5e5c16afc27.glb +0 -0
- package/corpus/handwritten/blobs/glb/d32499928422a0cd1a32b1afaeacc31d2d84d74876f6805b36218dc04402a921.glb +0 -0
- package/corpus/handwritten/blobs/glb/dc7ea629fcddeba445599d73a5d721f4d5004e056c3c140baa3e6817393c6462.glb +0 -0
- package/corpus/handwritten/blobs/glb/dce79b59c85ca5a7f9fc25e585d253b15558f8f5d8497a76923c9071601de8b1.glb +0 -0
- package/corpus/handwritten/blobs/glb/e7fa1b02bae6c8d19ace0e8db44810beab9a1be9f8172d5816324760267d6d11.glb +0 -0
- package/corpus/handwritten/blobs/glb/eb664feed0fdcc3ac73cecbe737109994fe5dfad8a33997de88598965fa936ba.glb +0 -0
- package/corpus/handwritten/blobs/glb/ec6a771ca852b0b69e55a12df9d347384d01e611c8c6151ea771910f1601605d.glb +0 -0
- package/corpus/handwritten/blobs/glb/ede05013f575b4216d2b4b3f8a14d611ef28756f952f702bb169529c8ab02eff.glb +0 -0
- package/corpus/handwritten/blobs/glb/fec21fa96950340a1a031b31b37407468361ab0a7645c683e0d7773c18591a26.glb +0 -0
- package/corpus/handwritten/blobs/glb/ff21ea082bb00b01006900e7dbbb85220f31f45c144405c840a70872f9e09cb9.glb +0 -0
- package/corpus/handwritten/blobs/image/248fe9601e921305ffb35421414bc5f03e9f1b3dba15bf9b5c3387d8f255da17.png +0 -0
- package/corpus/handwritten/blobs/image/4b47420aff1ded28c9c6cf1eb92d6e2d7b01d057f2654654405445ff8d562e55.webp +0 -0
- package/corpus/handwritten/blobs/image/5dbc818ed0be692e6ba3df87898fd623280a2686eed5a538333e1325764b238d.png +0 -0
- package/corpus/handwritten/blobs/image/d5ae692911bbc2b60b5fdde239b70aad4ce9be0d7665c4a91b438de6077e21e3.jpg +0 -0
- package/corpus/handwritten/blobs/ktx2/df0dd2e8adc1d9479148bb198cb750471df454680cf0c9ffd6dc85d6262ed676.ktx2 +0 -0
- package/corpus/handwritten/blobs/wasm/ecc886d8bbebcf190298ff9162b6bb364f2125606f5bdc8cc220ea28044f96ea.wasm +0 -0
- package/corpus/handwritten/cook.json +1 -0
- package/corpus/handwritten/mounts/shardfiles/blender-template/discovery.json +1 -0
- package/corpus/handwritten/sections/actors/creatures.json +1 -0
- package/corpus/handwritten/sections/actors/crowds.json +1 -0
- package/corpus/handwritten/sections/actors/species.json +1 -0
- package/corpus/handwritten/sections/audio/audio.json +1 -0
- package/corpus/handwritten/sections/client/plan.json +1 -0
- package/corpus/handwritten/sections/combat/encounters.json +1 -0
- package/corpus/handwritten/sections/combat/items.json +1 -0
- package/corpus/handwritten/sections/combat/strikes.json +1 -0
- package/corpus/handwritten/sections/economy/ledger.json +1 -0
- package/corpus/handwritten/sections/economy/loot.json +1 -0
- package/corpus/handwritten/sections/look/look.json +1 -0
- package/corpus/handwritten/sections/look/map.json +1 -0
- package/corpus/handwritten/sections/look/materials.json +1 -0
- package/corpus/handwritten/sections/quests/quests.json +1 -0
- package/corpus/handwritten/sections/sim/client-scripts.json +1 -0
- package/corpus/handwritten/sections/sim/hooks.json +1 -0
- package/corpus/handwritten/sections/sim/plumbing.json +1 -0
- package/corpus/handwritten/sections/sim/sim.json +1 -0
- package/corpus/handwritten/sections/state/migrations.json +1 -0
- package/corpus/handwritten/sections/state/state.json +1 -0
- package/corpus/handwritten/sections/ui/card.json +1 -0
- package/corpus/handwritten/sections/ui/compendium.json +1 -0
- package/corpus/handwritten/sections/ui/level.json +1 -0
- package/corpus/handwritten/sections/ui/ui.json +1 -0
- package/corpus/handwritten/sections/world/collision.json +1 -0
- package/corpus/handwritten/sections/world/days.json +1 -0
- package/corpus/handwritten/sections/world/edge.json +1 -0
- package/corpus/handwritten/sections/world/movers.json +1 -0
- package/corpus/handwritten/sections/world/navigation.json +1 -0
- package/corpus/handwritten/sections/world/props.json +1 -0
- package/corpus/handwritten/sections/world/spawn.json +1 -0
- package/corpus/handwritten/sections/world/terrain.json +1 -0
- package/corpus/handwritten/sections/world/tiles.json +1 -0
- package/corpus/handwritten/sections/world/traversal.json +1 -0
- package/corpus/handwritten/sections/world/water.json +1 -0
- package/corpus/handwritten/sections/world/weather.json +1 -0
- package/corpus/handwritten/shard.json +1 -0
- package/corpus/handwritten/validation.json +1 -0
- package/package.json +504 -2
- package/packages/wire/src/net-command.ts +150 -0
- package/src/cli/bin.mjs +9 -0
- package/src/cli/main.ts +148 -0
- package/src/cli/pack.ts +262 -0
- package/src/cli/validate.ts +210 -0
- package/src/cli/version.ts +13 -0
- package/src/format/aacIndex.ts +160 -0
- package/src/format/accent.ts +35 -0
- package/src/format/achievementCounters.ts +22 -0
- package/src/format/actorMoves.ts +615 -0
- package/src/format/actorProjectionV2.ts +93 -0
- package/src/format/admissionControl.ts +66 -0
- package/src/format/admissionLate.ts +22 -0
- package/src/format/admissionLimits.ts +11 -0
- package/src/format/admissionServer.ts +30 -0
- package/src/format/ambientLife.ts +123 -0
- package/src/format/arenaRoomDocument.ts +114 -0
- package/src/format/arenaScriptRows.ts +107 -0
- package/src/format/arenaView.ts +30 -0
- package/src/format/assetAdmission.ts +279 -0
- package/src/format/audio-measure.ts +184 -0
- package/src/format/audio-mp4.ts +234 -0
- package/src/format/audio-rules.ts +271 -0
- package/src/format/audio-waiver.ts +55 -0
- package/src/format/audio.ts +463 -0
- package/src/format/audioBank.ts +37 -0
- package/src/format/audioProfiles.ts +501 -0
- package/src/format/audioRouting.ts +67 -0
- package/src/format/audioScene.ts +342 -0
- package/src/format/bakedTerrainBytes.ts +35 -0
- package/src/format/bakedTerrainSampling.ts +66 -0
- package/src/format/bakedTiles.ts +407 -0
- package/src/format/binarySource.ts +32 -0
- package/src/format/bodySlots.ts +90 -0
- package/src/format/bossEncounter.ts +354 -0
- package/src/format/bossProfiles.ts +709 -0
- package/src/format/bossSocketRig.ts +92 -0
- package/src/format/bowVariantRows.ts +68 -0
- package/src/format/brains.ts +252 -0
- package/src/format/budget.ts +214 -0
- package/src/format/buildings.ts +496 -0
- package/src/format/builtIndexes.ts +26 -0
- package/src/format/catalogueEconomy.ts +65 -0
- package/src/format/caveInterior.ts +225 -0
- package/src/format/cellBounds.ts +47 -0
- package/src/format/cellField.ts +98 -0
- package/src/format/chapterDirector.ts +193 -0
- package/src/format/clientChannels.ts +450 -0
- package/src/format/clientCues.ts +34 -0
- package/src/format/clientNative.ts +358 -0
- package/src/format/clientOwnership.ts +43 -0
- package/src/format/clientPlan.ts +306 -0
- package/src/format/clientScripts.ts +116 -0
- package/src/format/clientState.ts +273 -0
- package/src/format/clientTrails.ts +56 -0
- package/src/format/collectionDisplay.ts +232 -0
- package/src/format/colourFunction.ts +44 -0
- package/src/format/colourLut.ts +4 -0
- package/src/format/commonsCosts.ts +28 -0
- package/src/format/compendiumRows.ts +151 -0
- package/src/format/compendiumSketches.ts +23 -0
- package/src/format/completion.ts +83 -0
- package/src/format/contentBounds.ts +76 -0
- package/src/format/contentCost.ts +50 -0
- package/src/format/contracts.ts +305 -0
- package/src/format/cook-data.ts +148 -0
- package/src/format/cook-preparation.ts +241 -0
- package/src/format/coverAppearance.ts +53 -0
- package/src/format/creatures.ts +175 -0
- package/src/format/crowdPresentation.ts +87 -0
- package/src/format/crowds.ts +46 -0
- package/src/format/cueDirector.ts +134 -0
- package/src/format/dayCycle.ts +28 -0
- package/src/format/dayLook.ts +44 -0
- package/src/format/decisionBindings.ts +80 -0
- package/src/format/decisionPublication.ts +35 -0
- package/src/format/decisionScripts.ts +327 -0
- package/src/format/declaredQuestPage.ts +101 -0
- package/src/format/deviceMemoryCost.ts +50 -0
- package/src/format/director.ts +52 -0
- package/src/format/directorProduct.ts +27 -0
- package/src/format/directorStages.ts +165 -0
- package/src/format/directorWhen.ts +78 -0
- package/src/format/discoveryValues.ts +416 -0
- package/src/format/easedFields.ts +48 -0
- package/src/format/edgeProfiles.ts +40 -0
- package/src/format/eliteContinuation.ts +110 -0
- package/src/format/eliteEntryRows.ts +351 -0
- package/src/format/eliteFeature.ts +605 -0
- package/src/format/eliteScripts.ts +60 -0
- package/src/format/encounterRows.ts +1030 -0
- package/src/format/encounters.ts +65 -0
- package/src/format/engine-music.ts +42 -0
- package/src/format/entryClearance.ts +86 -0
- package/src/format/entryCoverage.ts +61 -0
- package/src/format/entryGeometry.ts +56 -0
- package/src/format/entryLanding.ts +83 -0
- package/src/format/entryReads.ts +45 -0
- package/src/format/entrywayAssets.ts +33 -0
- package/src/format/entryways.ts +58 -0
- package/src/format/exchange.ts +25 -0
- package/src/format/explorerCatalogue.ts +312 -0
- package/src/format/feature-sides.ts +233 -0
- package/src/format/fieldPresentation.ts +62 -0
- package/src/format/figures.ts +437 -0
- package/src/format/findsCatalogue.ts +67 -0
- package/src/format/fixedDraws.ts +24 -0
- package/src/format/flyers.ts +226 -0
- package/src/format/forestNativeInputs.ts +37 -0
- package/src/format/forestPage.ts +285 -0
- package/src/format/forestWeather.ts +333 -0
- package/src/format/geometryPack.ts +136 -0
- package/src/format/glbBuffers.ts +77 -0
- package/src/format/glbCost.ts +212 -0
- package/src/format/glbImages.ts +95 -0
- package/src/format/glbTriangles.ts +95 -0
- package/src/format/graphArmsRows.ts +200 -0
- package/src/format/grapple.ts +123 -0
- package/src/format/grazers.ts +164 -0
- package/src/format/grid-catalogue.ts +247 -0
- package/src/format/gridReadiness.ts +49 -0
- package/src/format/groupBrains.ts +249 -0
- package/src/format/heldArms.ts +576 -0
- package/src/format/heldEquipment.ts +78 -0
- package/src/format/heldFinishes.ts +415 -0
- package/src/format/heldGear.ts +68 -0
- package/src/format/heldJianDocument.ts +75 -0
- package/src/format/heldMelee.ts +866 -0
- package/src/format/heldView.ts +26 -0
- package/src/format/heldWeaponDocuments.ts +36 -0
- package/src/format/herdShelter.ts +58 -0
- package/src/format/hooks.ts +45 -0
- package/src/format/immutable.ts +59 -0
- package/src/format/inputDeclarations.ts +157 -0
- package/src/format/islandLibrary.ts +51 -0
- package/src/format/items.ts +229 -0
- package/src/format/json.ts +143 -0
- package/src/format/keyedSky.ts +314 -0
- package/src/format/kitFigure.ts +68 -0
- package/src/format/ktx2Cost.ts +47 -0
- package/src/format/ledger.ts +56 -0
- package/src/format/liftApproach.ts +75 -0
- package/src/format/liftRider.ts +10 -0
- package/src/format/lightEmitters.ts +105 -0
- package/src/format/lights.ts +135 -0
- package/src/format/limbCollision.ts +136 -0
- package/src/format/limbPopulation.ts +33 -0
- package/src/format/limbRig.ts +202 -0
- package/src/format/loadout.ts +156 -0
- package/src/format/look-light.ts +153 -0
- package/src/format/lootBag.ts +145 -0
- package/src/format/lootEconomy.ts +235 -0
- package/src/format/materialFamilies.ts +565 -0
- package/src/format/materialGraph.ts +1220 -0
- package/src/format/materials.ts +449 -0
- package/src/format/memoryAdmission.ts +84 -0
- package/src/format/memoryGates.json +7 -0
- package/src/format/meshCollision.ts +56 -0
- package/src/format/meshCollisionAssets.ts +19 -0
- package/src/format/meshCollisionBytes.ts +102 -0
- package/src/format/meshEntryways.ts +54 -0
- package/src/format/meshopt-decoder.wasm +0 -0
- package/src/format/meshopt-module.ts +177 -0
- package/src/format/meshopt-static.mjs +11 -0
- package/src/format/meshopt-wasm.ts +61 -0
- package/src/format/migrations.ts +209 -0
- package/src/format/minimap.ts +1052 -0
- package/src/format/mixedPopulation.ts +222 -0
- package/src/format/modes.ts +304 -0
- package/src/format/mountedSpecimenRows.ts +64 -0
- package/src/format/moverLifecycle.ts +34 -0
- package/src/format/moverMotion.ts +271 -0
- package/src/format/movers.ts +224 -0
- package/src/format/namedJsonContracts.ts +423 -0
- package/src/format/nativeActors.ts +45 -0
- package/src/format/nativeAssembly.ts +141 -0
- package/src/format/nativeGround.ts +37 -0
- package/src/format/nativeGroundAssets.ts +35 -0
- package/src/format/nativeItems.ts +184 -0
- package/src/format/nativePhysics.ts +140 -0
- package/src/format/nativeQuestComposition.ts +398 -0
- package/src/format/nativeRiding.ts +103 -0
- package/src/format/nativeRuntimePlan.ts +89 -0
- package/src/format/navigation.ts +99 -0
- package/src/format/navigationBytes.ts +111 -0
- package/src/format/nearPlaceholder.ts +111 -0
- package/src/format/nearPlaceholderAssets.ts +23 -0
- package/src/format/netCommand.ts +11 -0
- package/src/format/npcs.ts +546 -0
- package/src/format/outputAddress.ts +11 -0
- package/src/format/outputDownload.ts +34 -0
- package/src/format/outputFields.ts +123 -0
- package/src/format/outputIndex.ts +352 -0
- package/src/format/overdraw.ts +41 -0
- package/src/format/pageLife.ts +303 -0
- package/src/format/pagePreparation.ts +60 -0
- package/src/format/paintedLook.ts +55 -0
- package/src/format/paintedResources.ts +158 -0
- package/src/format/panelTemplate.ts +139 -0
- package/src/format/placeholderSource.ts +209 -0
- package/src/format/platformDataSections.ts +146 -0
- package/src/format/platformFileFamilies.ts +299 -0
- package/src/format/plumbing.ts +165 -0
- package/src/format/populationEnvironment.ts +210 -0
- package/src/format/populationKeeper.ts +163 -0
- package/src/format/populationProjection.ts +496 -0
- package/src/format/populationRespawn.ts +48 -0
- package/src/format/populationRoster.ts +158 -0
- package/src/format/portalFloor.ts +56 -0
- package/src/format/portalLink.ts +112 -0
- package/src/format/portalLinkAssets.ts +42 -0
- package/src/format/portalRide.ts +22 -0
- package/src/format/postGraphDocument.ts +36 -0
- package/src/format/postGraphLook.ts +477 -0
- package/src/format/postStack.ts +114 -0
- package/src/format/practiceCourseRows.ts +466 -0
- package/src/format/preflight.ts +155 -0
- package/src/format/presentation.ts +33 -0
- package/src/format/product-audio.ts +76 -0
- package/src/format/product-reads.ts +178 -0
- package/src/format/product-stream-admit.ts +100 -0
- package/src/format/product-stream-assets.ts +493 -0
- package/src/format/product-stream-facts.ts +208 -0
- package/src/format/product-stream-miss.ts +12 -0
- package/src/format/product-stream-node.ts +47 -0
- package/src/format/product-stream-packs.ts +242 -0
- package/src/format/product-stream-rows.ts +202 -0
- package/src/format/product-stream-tar.ts +192 -0
- package/src/format/product-stream.ts +284 -0
- package/src/format/product.ts +358 -0
- package/src/format/productValidation.ts +205 -0
- package/src/format/propMaterials.ts +254 -0
- package/src/format/props.ts +137 -0
- package/src/format/questContinuation.ts +42 -0
- package/src/format/questFigures.ts +227 -0
- package/src/format/questGraph.ts +30 -0
- package/src/format/questHost.ts +314 -0
- package/src/format/questInteractionSource.ts +57 -0
- package/src/format/questInteractions.ts +642 -0
- package/src/format/questPageComposition.ts +92 -0
- package/src/format/questPageFacets.ts +121 -0
- package/src/format/questRuntime.ts +118 -0
- package/src/format/questSteps.ts +182 -0
- package/src/format/questStory.ts +512 -0
- package/src/format/questStoryBindings.ts +43 -0
- package/src/format/questWorld.ts +36 -0
- package/src/format/quests.ts +333 -0
- package/src/format/rainPresentation.ts +131 -0
- package/src/format/rangedPage.ts +117 -0
- package/src/format/receipt-cost.ts +71 -0
- package/src/format/registeredJson.ts +530 -0
- package/src/format/returnProgramDocument.ts +40 -0
- package/src/format/returnProjectionV2.ts +84 -0
- package/src/format/riding.ts +377 -0
- package/src/format/riggedHulls.ts +160 -0
- package/src/format/roamingBossProjection.ts +178 -0
- package/src/format/roamingCombat.ts +22 -0
- package/src/format/ropeDeckSite.ts +148 -0
- package/src/format/rows.ts +86 -0
- package/src/format/runtime.ts +38 -0
- package/src/format/runtimeBinds.ts +49 -0
- package/src/format/runtimeCost.ts +80 -0
- package/src/format/runtimeSpawns.ts +73 -0
- package/src/format/scalarChannel.ts +38 -0
- package/src/format/scaledPost.ts +27 -0
- package/src/format/scaledPostContract.ts +51 -0
- package/src/format/sceneBuffers.ts +122 -0
- package/src/format/sceneDraws.ts +89 -0
- package/src/format/sceneDressing.ts +247 -0
- package/src/format/sceneInstances.ts +192 -0
- package/src/format/sceneMotion.ts +122 -0
- package/src/format/sceneRefs.ts +71 -0
- package/src/format/sceneSources.ts +730 -0
- package/src/format/script-side-grandfather.ts +62 -0
- package/src/format/script-sides.ts +289 -0
- package/src/format/scriptAbi.ts +14 -0
- package/src/format/scriptAbiV1.ts +56 -0
- package/src/format/scriptActionsV2.ts +101 -0
- package/src/format/scriptAdmission.ts +165 -0
- package/src/format/scriptAdmissionV2.ts +126 -0
- package/src/format/scriptContract.ts +170 -0
- package/src/format/scriptFuelV2.ts +124 -0
- package/src/format/scriptGroupBankV2.ts +54 -0
- package/src/format/scriptGroupStepV2.ts +165 -0
- package/src/format/scriptInputStateV2.ts +52 -0
- package/src/format/scriptLimits.ts +5 -0
- package/src/format/scriptMemoryV2.ts +17 -0
- package/src/format/scriptModuleV2.ts +116 -0
- package/src/format/scriptObservationColumnsV2.ts +226 -0
- package/src/format/scriptQueriesV2.ts +164 -0
- package/src/format/scriptQueryStateV2.ts +40 -0
- package/src/format/scriptRngV2.ts +52 -0
- package/src/format/scriptWireV2.ts +106 -0
- package/src/format/scripts.ts +31 -0
- package/src/format/sections.ts +140 -0
- package/src/format/shardSchema.ts +632 -0
- package/src/format/shardSections.ts +383 -0
- package/src/format/sketch.ts +79 -0
- package/src/format/skin-materials.ts +172 -0
- package/src/format/skinAssets.ts +107 -0
- package/src/format/skinData.ts +110 -0
- package/src/format/skinLayers.ts +90 -0
- package/src/format/skins.ts +37 -0
- package/src/format/socketLift.ts +58 -0
- package/src/format/socketLiftAssets.ts +81 -0
- package/src/format/socketRigCreature.ts +66 -0
- package/src/format/sourceResidency.ts +16 -0
- package/src/format/spawnCombat.ts +26 -0
- package/src/format/spawnScriptV2.ts +145 -0
- package/src/format/spawnScripts.ts +229 -0
- package/src/format/spawnTables.ts +46 -0
- package/src/format/spawnView.ts +26 -0
- package/src/format/speciesActorsFile.ts +86 -0
- package/src/format/speciesBookRows.ts +84 -0
- package/src/format/speciesBrain.ts +96 -0
- package/src/format/speciesLooks.ts +1021 -0
- package/src/format/speciesPrograms.ts +97 -0
- package/src/format/speciesScripts.ts +45 -0
- package/src/format/specimenCatalogue.ts +94 -0
- package/src/format/splatTerrain.ts +192 -0
- package/src/format/standalone-catalogue.ts +144 -0
- package/src/format/standaloneControl.ts +44 -0
- package/src/format/state.ts +61 -0
- package/src/format/stateLineage.ts +71 -0
- package/src/format/stealth.ts +106 -0
- package/src/format/stillImage.ts +135 -0
- package/src/format/streamedCover.ts +105 -0
- package/src/format/surfaceLooks.ts +50 -0
- package/src/format/tar-fields.ts +54 -0
- package/src/format/tar-paths.ts +103 -0
- package/src/format/tar-source.ts +13 -0
- package/src/format/tar-write.ts +152 -0
- package/src/format/tar.ts +203 -0
- package/src/format/targets.ts +217 -0
- package/src/format/terrain.ts +241 -0
- package/src/format/terrainTileBytes.ts +104 -0
- package/src/format/tierSelection.ts +195 -0
- package/src/format/toonLighting.ts +32 -0
- package/src/format/toonLook.ts +332 -0
- package/src/format/trail.ts +17 -0
- package/src/format/traversal.ts +13 -0
- package/src/format/treeSetRows.ts +93 -0
- package/src/format/ui.ts +90 -0
- package/src/format/uiStrings.ts +17 -0
- package/src/format/uniformRows.ts +31 -0
- package/src/format/upload-wire.ts +184 -0
- package/src/format/validationReceipt.ts +142 -0
- package/src/format/version.ts +9 -0
- package/src/format/vertexWear.ts +45 -0
- package/src/format/viewProgram.ts +329 -0
- package/src/format/voicePatches.ts +47 -0
- package/src/format/water.ts +247 -0
- package/src/format/waterWaves.ts +7 -0
- package/src/format/waterWorld.ts +34 -0
- package/src/format/weaponProfiles.ts +1315 -0
- package/src/format/weatherBundle.ts +36 -0
- package/src/format/weatherEffects.ts +78 -0
- package/src/format/weatherProgram.ts +422 -0
- package/src/format/wildlifePopulation.ts +210 -0
- package/src/format/wireLimits.ts +9 -0
- package/src/format/worldAssembly.ts +104 -0
- package/src/format/worldEntry.ts +151 -0
- package/src/format/worldPhysics.ts +292 -0
- package/src/format/worldSceneBatch.ts +106 -0
- package/src/format/worldSceneModels.ts +79 -0
- package/src/format/worldScenePages.ts +89 -0
- package/src/format/worldScenePlacement.ts +191 -0
- package/src/format/worldSceneSlabs.ts +43 -0
- package/src/format/worldSceneSurface.ts +113 -0
- package/src/format/worldSceneWeld.ts +702 -0
- package/src/format/worldScenes.ts +184 -0
- package/src/format/worldTargets.ts +111 -0
- package/src/format/worldUpdates.ts +229 -0
- package/src/hook/format-hook.d.mts +2 -0
- package/src/hook/format-hook.mjs +47 -0
- package/README.md +0 -8
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { RoamingEncounterSchema } from './bossEncounter.ts';
|
|
3
|
+
import { BossSocketRigSchema } from './bossSocketRig.ts';
|
|
4
|
+
import { isJsonData } from './json.ts';
|
|
5
|
+
|
|
6
|
+
const n = v.pipe(v.number(), v.finite()), id = v.pipe(v.string(), v.minLength(1), v.maxLength(256));
|
|
7
|
+
const xyz = v.tuple([n, n, n]);
|
|
8
|
+
/** Client-only roaming projection: native body/rig ids and declared channels. */
|
|
9
|
+
export const RoamingBossProjectionSchema: v.GenericSchema<RoamingBossProjectionRowsInput, RoamingBossProjectionRows> = v.pipe(v.unknown(), v.check(isJsonData, 'Roaming projection requires JSON rows'), v.strictObject({
|
|
10
|
+
id, session: id, spawn: id, spawnStream: id, variant: id, socketRig: BossSocketRigSchema, encounter: RoamingEncounterSchema,
|
|
11
|
+
presentation: id, events: v.strictObject({ hit: id, open: id, shut: id, burst: id, land: id }), roar: id, landSound: id,
|
|
12
|
+
colours: v.strictObject({ tell: xyz, wave: xyz, puff: xyz }),
|
|
13
|
+
prewarm: v.pipe(v.array(v.strictObject({ kind: id, variant: id })), v.maxLength(8)),
|
|
14
|
+
fur: v.strictObject({ prewarm: n, parked: n }),
|
|
15
|
+
wall: v.strictObject({ look: id, alpha: id, colour: id, name: id, radius: n, bottom: n, height: n, segments: n, lift: n, order: n, seal: n, visible: n, colourGain: n }),
|
|
16
|
+
hazard: v.strictObject({ look: id, alpha: id, name: id, meshes: v.pipe(v.array(v.strictObject({ geometry: id, material: id })), v.maxLength(4)), scale: n, flameScale: xyz, order: n,
|
|
17
|
+
landingLift: n, arc: n, rotation: xyz, alphaBase: n, dark: n, radius: n, pulse: v.tuple([n, n, n]), width: n }),
|
|
18
|
+
light: v.strictObject({ colour: n, distance: n, decay: n, playerAbove: n, focusAbove: n, darkness: n,
|
|
19
|
+
playerColour: xyz, playerDistance: n, playerGain: n, focusColour: xyz, focusDistance: n, focusGain: n, focusOpen: v.tuple([n, n]) }),
|
|
20
|
+
room: v.strictObject({ density: v.tuple([n, n]), fog: v.tuple([n, n]), hemi: n, environment: n, dome: n, lights: n, domeUniforms: v.tuple([id, id]) }),
|
|
21
|
+
puffs: v.strictObject({ count: v.pipe(n, v.integer(), v.minValue(1), v.maxValue(16)), enter: v.tuple([n, n, n, n]), leave: v.tuple([n, n, n, n]), lift: n }),
|
|
22
|
+
}), v.check(row => row.encounter.lanes.count <= 3 && row.socketRig.hazards.length <= 3, 'Existing client lane and hazard capacities'));
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
/** Admitted data contracts, independent of validator implementation metadata. */
|
|
26
|
+
export type RoamingBossProjectionRowsInput = unknown;
|
|
27
|
+
interface RoamingBossProjectionRowsFields {
|
|
28
|
+
id: string;
|
|
29
|
+
session: string;
|
|
30
|
+
spawn: string;
|
|
31
|
+
spawnStream: string;
|
|
32
|
+
variant: string;
|
|
33
|
+
socketRig: v.InferOutput<typeof BossSocketRigSchema>;
|
|
34
|
+
encounter: v.InferOutput<typeof RoamingEncounterSchema>;
|
|
35
|
+
presentation: string;
|
|
36
|
+
events: {
|
|
37
|
+
hit: string;
|
|
38
|
+
open: string;
|
|
39
|
+
shut: string;
|
|
40
|
+
burst: string;
|
|
41
|
+
land: string;
|
|
42
|
+
};
|
|
43
|
+
roar: string;
|
|
44
|
+
landSound: string;
|
|
45
|
+
colours: {
|
|
46
|
+
tell: [
|
|
47
|
+
number,
|
|
48
|
+
number,
|
|
49
|
+
number
|
|
50
|
+
];
|
|
51
|
+
wave: [
|
|
52
|
+
number,
|
|
53
|
+
number,
|
|
54
|
+
number
|
|
55
|
+
];
|
|
56
|
+
puff: [
|
|
57
|
+
number,
|
|
58
|
+
number,
|
|
59
|
+
number
|
|
60
|
+
];
|
|
61
|
+
};
|
|
62
|
+
prewarm: ({
|
|
63
|
+
kind: string;
|
|
64
|
+
variant: string;
|
|
65
|
+
})[];
|
|
66
|
+
fur: {
|
|
67
|
+
prewarm: number;
|
|
68
|
+
parked: number;
|
|
69
|
+
};
|
|
70
|
+
wall: {
|
|
71
|
+
look: string;
|
|
72
|
+
alpha: string;
|
|
73
|
+
colour: string;
|
|
74
|
+
name: string;
|
|
75
|
+
radius: number;
|
|
76
|
+
bottom: number;
|
|
77
|
+
height: number;
|
|
78
|
+
segments: number;
|
|
79
|
+
lift: number;
|
|
80
|
+
order: number;
|
|
81
|
+
seal: number;
|
|
82
|
+
visible: number;
|
|
83
|
+
colourGain: number;
|
|
84
|
+
};
|
|
85
|
+
hazard: {
|
|
86
|
+
look: string;
|
|
87
|
+
alpha: string;
|
|
88
|
+
name: string;
|
|
89
|
+
meshes: ({
|
|
90
|
+
geometry: string;
|
|
91
|
+
material: string;
|
|
92
|
+
})[];
|
|
93
|
+
scale: number;
|
|
94
|
+
flameScale: [
|
|
95
|
+
number,
|
|
96
|
+
number,
|
|
97
|
+
number
|
|
98
|
+
];
|
|
99
|
+
order: number;
|
|
100
|
+
landingLift: number;
|
|
101
|
+
arc: number;
|
|
102
|
+
rotation: [
|
|
103
|
+
number,
|
|
104
|
+
number,
|
|
105
|
+
number
|
|
106
|
+
];
|
|
107
|
+
alphaBase: number;
|
|
108
|
+
dark: number;
|
|
109
|
+
radius: number;
|
|
110
|
+
pulse: [
|
|
111
|
+
number,
|
|
112
|
+
number,
|
|
113
|
+
number
|
|
114
|
+
];
|
|
115
|
+
width: number;
|
|
116
|
+
};
|
|
117
|
+
light: {
|
|
118
|
+
colour: number;
|
|
119
|
+
distance: number;
|
|
120
|
+
decay: number;
|
|
121
|
+
playerAbove: number;
|
|
122
|
+
focusAbove: number;
|
|
123
|
+
darkness: number;
|
|
124
|
+
playerColour: [
|
|
125
|
+
number,
|
|
126
|
+
number,
|
|
127
|
+
number
|
|
128
|
+
];
|
|
129
|
+
playerDistance: number;
|
|
130
|
+
playerGain: number;
|
|
131
|
+
focusColour: [
|
|
132
|
+
number,
|
|
133
|
+
number,
|
|
134
|
+
number
|
|
135
|
+
];
|
|
136
|
+
focusDistance: number;
|
|
137
|
+
focusGain: number;
|
|
138
|
+
focusOpen: [
|
|
139
|
+
number,
|
|
140
|
+
number
|
|
141
|
+
];
|
|
142
|
+
};
|
|
143
|
+
room: {
|
|
144
|
+
density: [
|
|
145
|
+
number,
|
|
146
|
+
number
|
|
147
|
+
];
|
|
148
|
+
fog: [
|
|
149
|
+
number,
|
|
150
|
+
number
|
|
151
|
+
];
|
|
152
|
+
hemi: number;
|
|
153
|
+
environment: number;
|
|
154
|
+
dome: number;
|
|
155
|
+
lights: number;
|
|
156
|
+
domeUniforms: [
|
|
157
|
+
string,
|
|
158
|
+
string
|
|
159
|
+
];
|
|
160
|
+
};
|
|
161
|
+
puffs: {
|
|
162
|
+
count: number;
|
|
163
|
+
enter: [
|
|
164
|
+
number,
|
|
165
|
+
number,
|
|
166
|
+
number,
|
|
167
|
+
number
|
|
168
|
+
];
|
|
169
|
+
leave: [
|
|
170
|
+
number,
|
|
171
|
+
number,
|
|
172
|
+
number,
|
|
173
|
+
number
|
|
174
|
+
];
|
|
175
|
+
lift: number;
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
export type RoamingBossProjectionRows = { [Key in keyof RoamingBossProjectionRowsFields]: RoamingBossProjectionRowsFields[Key] };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { BossCombatSessionSchema, BossEncounterPresentationSchema } from './bossEncounter.ts';
|
|
3
|
+
import { RoamingBossProjectionSchema } from './roamingBossProjection.ts';
|
|
4
|
+
import { EliteEnteredPresentationSchema } from './eliteFeature.ts';
|
|
5
|
+
import { isJsonData } from './json.ts';
|
|
6
|
+
|
|
7
|
+
const n = v.pipe(v.number(), v.finite()), id = v.pipe(v.string(), v.minLength(1), v.maxLength(256));
|
|
8
|
+
/** Client-only encounter session resolves its installed loadout and body ids. */
|
|
9
|
+
export const RoamingCombatSchema: v.GenericSchema<RoamingCombatRowsInput, RoamingCombatRows> = v.pipe(v.unknown(), v.check(isJsonData, 'Combat composition requires JSON rows'), v.strictObject({
|
|
10
|
+
session: BossCombatSessionSchema, projection: RoamingBossProjectionSchema, presentation: BossEncounterPresentationSchema,
|
|
11
|
+
elitePresentation: EliteEnteredPresentationSchema,
|
|
12
|
+
loadout: id, elites: id, persistence: id, score: id, availability: n, dayScene: id, nightScene: id,
|
|
13
|
+
parked: v.strictObject({ name: id, y: n, finishes: v.pipe(v.array(id), v.maxLength(16)) }),
|
|
14
|
+
reward: v.strictObject({ finish: id, bowScale: n, bowPitch: n, trophy: id, count: n }),
|
|
15
|
+
tells: v.strictObject({ count: v.pipe(n, v.integer(), v.minValue(0), v.maxValue(3)), colour: v.tuple([n, n, n]), range: n, near: n, ahead: n,
|
|
16
|
+
width: n, scale: n, alpha: n, pulse: n, frequency: n }),
|
|
17
|
+
system: v.strictObject({ id, before: v.array(id) }), observers: v.strictObject({ elites: id, boss: id }),
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
/** Admitted combat data, independent of validator implementation metadata. */
|
|
21
|
+
export type RoamingCombatRowsInput = unknown;
|
|
22
|
+
export interface RoamingCombatRows { session: v.InferOutput<typeof BossCombatSessionSchema>; projection: v.InferOutput<typeof RoamingBossProjectionSchema>; presentation: v.InferOutput<typeof BossEncounterPresentationSchema>; elitePresentation: v.InferOutput<typeof EliteEnteredPresentationSchema>; loadout: string; elites: string; persistence: string; score: string; availability: number; dayScene: string; nightScene: string; parked: { name: string; y: number; finishes: (string)[]; }; reward: { finish: string; bowScale: number; bowPitch: number; trophy: string; count: number; }; tells: { count: number; colour: [number, number, number]; range: number; near: number; ahead: number; width: number; scale: number; alpha: number; pulse: number; frequency: number; }; system: { id: string; before: (string)[]; }; observers: { elites: string; boss: string; }; }
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { SpecimenModelMetadataSchema } from './specimenCatalogue.ts';
|
|
3
|
+
|
|
4
|
+
/** The defining rope-deck grammar, moved unchanged from the site host. */
|
|
5
|
+
const id = v.pipe(v.string(), v.minLength(1), v.maxLength(128)), n = v.pipe(v.number(), v.finite());
|
|
6
|
+
const xz = v.tuple([n, n]), point = v.object({ x: n, y: n, z: n });
|
|
7
|
+
export const RopeDeckSpanSchema: v.GenericSchema<RopeDeckSpanInput, RopeDeckSpan> = v.strictObject({ a: xz, b: xz, sag: v.exactOptional(n), width: v.exactOptional(n) });
|
|
8
|
+
/** a span's baked rest plan (its generator's row; fields the site does not read are ignored) */
|
|
9
|
+
const rest: v.GenericSchema<RopeDeckRestInput, RopeDeckRest> = v.object({ key: id, ground: v.pipe(v.array(point), v.maxLength(256)), origin: point, width: n, len: n, direction: v.object({ x: n, z: n }),
|
|
10
|
+
segments: v.pipe(v.array(v.object({ x: n, y: n, z: n, hz: n, rot: v.object({ x: n, y: n, z: n, w: n }) })), v.maxLength(256)),
|
|
11
|
+
ownDescs: v.pipe(v.array(v.unknown()), v.maxLength(256)) });
|
|
12
|
+
export const RopeDeckSiteSchema: v.GenericSchema<RopeDeckSiteRowsInput, RopeDeckSiteRows> = v.strictObject({
|
|
13
|
+
model: v.pick(SpecimenModelMetadataSchema, ['id', 'name', 'file', 'category', 'pipeline', 'surface']),
|
|
14
|
+
/** which baked span is the Explorer specimen's (flat ground), and the size of its loading stand-in */
|
|
15
|
+
specimen: v.pipe(v.number(), v.integer(), v.minValue(0)), loading: v.tuple([n, n, n]),
|
|
16
|
+
spans: v.pipe(v.array(rest), v.minLength(1), v.maxLength(8)),
|
|
17
|
+
/** the skinned deck's fixed draw slot for the specimen and for every other span */
|
|
18
|
+
draws: v.strictObject({ specimen: id, world: id }),
|
|
19
|
+
/** the deck's defaults (width, sag), segment half thickness and weight, bounds, hit owner and margin; its registry piece */
|
|
20
|
+
deck: v.strictObject({ width: n, sag: n, halfY: n, mass: n, maxSegments: v.pipe(v.number(), v.integer(), v.maxValue(256)),
|
|
21
|
+
maxColliders: v.pipe(v.number(), v.integer(), v.maxValue(256)), margin: n, owner: v.strictObject({ id, name: id }), piece: id }),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
/** The original numeric bake-key tuple, shared with its runtime reader. */
|
|
27
|
+
export const RopeDeckRestKeySchema: v.GenericSchema<RopeDeckRestKeyInput, RopeDeckRestKey> = v.tuple([xz, xz, n, n]);
|
|
28
|
+
|
|
29
|
+
/** Admitted data contracts, independent of validator implementation metadata. */
|
|
30
|
+
export type RopeDeckSpanInput = RopeDeckSpan;
|
|
31
|
+
interface RopeDeckSpanFields {
|
|
32
|
+
a: [
|
|
33
|
+
number,
|
|
34
|
+
number
|
|
35
|
+
];
|
|
36
|
+
b: [
|
|
37
|
+
number,
|
|
38
|
+
number
|
|
39
|
+
];
|
|
40
|
+
sag?: number;
|
|
41
|
+
width?: number;
|
|
42
|
+
}
|
|
43
|
+
export type RopeDeckSpan = { [Key in keyof RopeDeckSpanFields]: RopeDeckSpanFields[Key] };
|
|
44
|
+
export type RopeDeckRestInput = RopeDeckRest;
|
|
45
|
+
interface RopeDeckRestFields {
|
|
46
|
+
key: string;
|
|
47
|
+
ground: ({
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
z: number;
|
|
51
|
+
})[];
|
|
52
|
+
origin: {
|
|
53
|
+
x: number;
|
|
54
|
+
y: number;
|
|
55
|
+
z: number;
|
|
56
|
+
};
|
|
57
|
+
width: number;
|
|
58
|
+
len: number;
|
|
59
|
+
direction: {
|
|
60
|
+
x: number;
|
|
61
|
+
z: number;
|
|
62
|
+
};
|
|
63
|
+
segments: ({
|
|
64
|
+
x: number;
|
|
65
|
+
y: number;
|
|
66
|
+
z: number;
|
|
67
|
+
hz: number;
|
|
68
|
+
rot: {
|
|
69
|
+
x: number;
|
|
70
|
+
y: number;
|
|
71
|
+
z: number;
|
|
72
|
+
w: number;
|
|
73
|
+
};
|
|
74
|
+
})[];
|
|
75
|
+
ownDescs: (unknown)[];
|
|
76
|
+
}
|
|
77
|
+
export type RopeDeckRest = { [Key in keyof RopeDeckRestFields]: RopeDeckRestFields[Key] };
|
|
78
|
+
interface RopeDeckSiteRowsInputFields {
|
|
79
|
+
model: Pick<v.InferInput<typeof SpecimenModelMetadataSchema>, 'id' | 'name' | 'file' | 'category' | 'pipeline' | 'surface'>;
|
|
80
|
+
specimen: number;
|
|
81
|
+
loading: [
|
|
82
|
+
number,
|
|
83
|
+
number,
|
|
84
|
+
number
|
|
85
|
+
];
|
|
86
|
+
spans: (RopeDeckRestInput)[];
|
|
87
|
+
draws: {
|
|
88
|
+
specimen: string;
|
|
89
|
+
world: string;
|
|
90
|
+
};
|
|
91
|
+
deck: {
|
|
92
|
+
width: number;
|
|
93
|
+
sag: number;
|
|
94
|
+
halfY: number;
|
|
95
|
+
mass: number;
|
|
96
|
+
maxSegments: number;
|
|
97
|
+
maxColliders: number;
|
|
98
|
+
margin: number;
|
|
99
|
+
owner: {
|
|
100
|
+
id: string;
|
|
101
|
+
name: string;
|
|
102
|
+
};
|
|
103
|
+
piece: string;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export type RopeDeckSiteRowsInput = { [Key in keyof RopeDeckSiteRowsInputFields]: RopeDeckSiteRowsInputFields[Key] };
|
|
107
|
+
interface RopeDeckSiteRowsFields {
|
|
108
|
+
model: Pick<v.InferOutput<typeof SpecimenModelMetadataSchema>, 'id' | 'name' | 'file' | 'category' | 'pipeline' | 'surface'>;
|
|
109
|
+
specimen: number;
|
|
110
|
+
loading: [
|
|
111
|
+
number,
|
|
112
|
+
number,
|
|
113
|
+
number
|
|
114
|
+
];
|
|
115
|
+
spans: (RopeDeckRest)[];
|
|
116
|
+
draws: {
|
|
117
|
+
specimen: string;
|
|
118
|
+
world: string;
|
|
119
|
+
};
|
|
120
|
+
deck: {
|
|
121
|
+
width: number;
|
|
122
|
+
sag: number;
|
|
123
|
+
halfY: number;
|
|
124
|
+
mass: number;
|
|
125
|
+
maxSegments: number;
|
|
126
|
+
maxColliders: number;
|
|
127
|
+
margin: number;
|
|
128
|
+
owner: {
|
|
129
|
+
id: string;
|
|
130
|
+
name: string;
|
|
131
|
+
};
|
|
132
|
+
piece: string;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export type RopeDeckSiteRows = { [Key in keyof RopeDeckSiteRowsFields]: RopeDeckSiteRowsFields[Key] };
|
|
136
|
+
export type RopeDeckRestKeyInput = RopeDeckRestKey;
|
|
137
|
+
export type RopeDeckRestKey = [
|
|
138
|
+
[
|
|
139
|
+
number,
|
|
140
|
+
number
|
|
141
|
+
],
|
|
142
|
+
[
|
|
143
|
+
number,
|
|
144
|
+
number
|
|
145
|
+
],
|
|
146
|
+
number,
|
|
147
|
+
number
|
|
148
|
+
];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { LootEconomySchema, BarterEconomySchema, lootEconomyRules } from './lootEconomy.ts';
|
|
2
|
+
import * as v from 'valibot';
|
|
3
|
+
import { isJsonData } from './json.ts';
|
|
4
|
+
import { sketchReference } from './sketch.ts';
|
|
5
|
+
import { JournalRowSchema, journalRowRules } from './compendiumRows.ts';
|
|
6
|
+
|
|
7
|
+
const id = v.pipe(v.string(), v.regex(/^[a-z][a-zA-Z0-9.:-]*$/u), v.maxLength(128));
|
|
8
|
+
const text = v.pipe(v.string(), v.maxLength(4096));
|
|
9
|
+
const finite = v.pipe(v.number(), v.finite());
|
|
10
|
+
const positive = v.pipe(finite, v.minValue(0.000001), v.maxValue(10000000));
|
|
11
|
+
const nonnegative = v.pipe(finite, v.minValue(0), v.maxValue(10000000));
|
|
12
|
+
const unit = v.pipe(finite, v.minValue(0), v.maxValue(1));
|
|
13
|
+
const dimension = v.pipe(positive, v.maxValue(20));
|
|
14
|
+
const duration = v.pipe(positive, v.maxValue(86400));
|
|
15
|
+
const ordered = v.pipe(v.tuple([positive, positive]), v.check(([a, b]) => a <= b, 'ordered range'));
|
|
16
|
+
const shape = v.variant('kind', [
|
|
17
|
+
v.strictObject({ kind: v.literal('point'), radius: dimension }), v.strictObject({ kind: v.literal('sphere'), radius: dimension }),
|
|
18
|
+
v.strictObject({ kind: v.literal('lane'), length: dimension, width: dimension }),
|
|
19
|
+
v.strictObject({ kind: v.literal('arc'), radius: dimension, halfAngle: v.pipe(positive, v.maxValue(Math.PI)) }),
|
|
20
|
+
v.strictObject({ kind: v.literal('wedge'), length: dimension, halfAngle: v.pipe(positive, v.maxValue(Math.PI)) }),
|
|
21
|
+
v.pipe(v.strictObject({ kind: v.literal('ring'), inner: nonnegative, outer: dimension }), v.check((r) => r.inner <= r.outer, 'ordered ring')),
|
|
22
|
+
]);
|
|
23
|
+
const strike: v.StrictObjectSchema<{ readonly id: v.GenericSchema<StrikeRowsInput['id'], StrikeRows['id']>; readonly shape: v.GenericSchema<StrikeRowsInput['shape'], StrikeRows['shape']>; readonly windup: v.GenericSchema<StrikeRowsInput['windup'], StrikeRows['windup']>; readonly active: v.GenericSchema<StrikeRowsInput['active'], StrikeRows['active']>; readonly recover: v.GenericSchema<StrikeRowsInput['recover'], StrikeRows['recover']>; readonly cooldown: v.GenericSchema<StrikeRowsInput['cooldown'], StrikeRows['cooldown']>; readonly range: v.GenericSchema<StrikeRowsInput['range'], StrikeRows['range']>; readonly damage: v.GenericSchema<StrikeRowsInput['damage'], StrikeRows['damage']>; readonly tags: v.SchemaWithPipe<readonly [v.ArraySchema<v.GenericSchema<`${string}.${string}`>, undefined>, v.MaxLengthAction<StrikeRows['tags'], 32, undefined>]>; readonly weight: v.GenericSchema<StrikeRowsInput['weight'], StrikeRows['weight']>; readonly speed: v.GenericSchema<StrikeRowsInput['speed'], StrikeRows['speed']>; }, undefined> = v.strictObject({ id, shape, windup: nonnegative, active: nonnegative, recover: nonnegative, cooldown: nonnegative, range: dimension, damage: nonnegative,
|
|
24
|
+
tags: v.pipe(v.array(v.custom<`${string}.${string}`>((value) => typeof value === 'string' && value.length <= 128 && /^[a-z][a-zA-Z0-9.-]*\.[a-zA-Z0-9.-]+$/u.test(value))), v.maxLength(32)), weight: nonnegative, speed: v.pipe(nonnegative, v.maxValue(15)) });
|
|
25
|
+
const numbers = v.strictObject({ overcast: unit, rain: unit, wet: unit, wind: unit, fog: unit });
|
|
26
|
+
const weather = v.strictObject({ id, states: v.pipe(v.array(v.strictObject({ id, next: id, length: ordered, numbers })), v.minLength(1), v.maxLength(64)), initial: numbers, soak: unit, dry: unit,
|
|
27
|
+
modes: v.pipe(v.array(v.strictObject({ id, hold: v.nullable(id), at: unit, dry: v.boolean() })), v.maxLength(64)) });
|
|
28
|
+
const hour = v.pipe(finite, v.minValue(0), v.maxValue(24));
|
|
29
|
+
const day = v.strictObject({ id, units: v.literal('hour'), start: hour,
|
|
30
|
+
schedule: v.pipe(v.array(v.strictObject({ phase: v.picklist(['dawn', 'day', 'golden', 'dusk', 'night']), from: hour, to: hour, minutes: duration })), v.minLength(1), v.maxLength(64)),
|
|
31
|
+
sun: v.strictObject({ maxElevation: v.pipe(finite, v.minValue(0), v.maxValue(90)), azimuthOffset: v.pipe(finite, v.minValue(-180), v.maxValue(180)) }),
|
|
32
|
+
fixed: v.strictObject({ midday: hour, golden: hour, sunset: hour, night: hour }), presets: v.strictObject({ dawn: hour, noon: hour, dusk: hour, night: hour }) });
|
|
33
|
+
const mods = v.strictObject({ speed: positive, chargeDist: positive, damageTaken: positive, chargeDamage: nonnegative, relentless: v.boolean() });
|
|
34
|
+
const dims = v.strictObject({ bodyY: dimension, bodyHalfLen: dimension, bodyRadius: dimension, headRadius: dimension, legLen: dimension,
|
|
35
|
+
feet: v.pipe(v.array(v.tuple([finite, finite])), v.maxLength(16)), halfWidth: dimension });
|
|
36
|
+
const variant = v.strictObject({ id, label: text, rarity: v.picklist(['common', 'uncommon', 'rare', 'legendary']), weight: nonnegative, scale: ordered, hp: positive, mods });
|
|
37
|
+
const flight = v.strictObject({ altitude: v.pipe(finite, v.minValue(-250), v.maxValue(250)),
|
|
38
|
+
above: v.exactOptional(v.picklist(['ground', 'world'])), climbRate: v.pipe(positive, v.maxValue(30)), diveRate: v.pipe(positive, v.maxValue(30)),
|
|
39
|
+
lockRange: v.exactOptional(v.pipe(positive, v.maxValue(600))), bank: v.exactOptional(v.pipe(finite, v.check(n => n > 0 && n < Math.PI / 2, 'flight bank between 0 and pi/2'))) });
|
|
40
|
+
const species = v.strictObject({ id, kind: id, label: text, aggressive: v.boolean(), lockable: v.boolean(), dims, flight: v.exactOptional(flight),
|
|
41
|
+
variants: v.pipe(v.array(variant), v.minLength(1), v.maxLength(64)) });
|
|
42
|
+
const parameter = v.union([finite, v.boolean(), text, v.pipe(v.array(finite), v.maxLength(16))]);
|
|
43
|
+
const look = v.strictObject({ id, species: id, recipe: id, material: v.optional(v.nullable(id), null), parameters: v.record(id, parameter),
|
|
44
|
+
animation: v.strictObject({ recipe: id, parameters: v.record(id, parameter) }) });
|
|
45
|
+
const basicCompendium = v.strictObject({ id, className: id, title: text, tabs: v.pipe(v.array(v.strictObject({ id, label: text })), v.maxLength(16)), stamp: text,
|
|
46
|
+
stats: v.pipe(v.array(v.strictObject({ label: text, value: text })), v.maxLength(8)),
|
|
47
|
+
entries: v.pipe(v.array(v.strictObject({ id, kind: v.literal('species'), tab: id, name: text, notes: text, sketch: v.pipe(text, v.check(sketchReference, 'bounded inert SVG data or admitted sketch hash')), species: id })), v.maxLength(256)) });
|
|
48
|
+
const loot = v.union([
|
|
49
|
+
v.strictObject({ id, gear: v.literal('purse.coins'), finds: v.null(), marks: v.null(), charted: v.boolean(), chime: id, economy: v.exactOptional(LootEconomySchema) }),
|
|
50
|
+
v.strictObject({ id, economy: BarterEconomySchema }),
|
|
51
|
+
]);
|
|
52
|
+
const raw: v.StrictObjectSchema<{ readonly strikes: v.SchemaWithPipe<readonly [v.ArraySchema<typeof strike, undefined>, v.MaxLengthAction<ShardRows['strikes'], 256, undefined>]>; readonly weather: v.GenericSchema<ShardRowsInput['weather'], ShardRows['weather']>; readonly days: v.GenericSchema<ShardRowsInput['days'], ShardRows['days']>; readonly species: v.GenericSchema<ShardRowsInput['species'], ShardRows['species']>; readonly looks: v.GenericSchema<ShardRowsInput['looks'], ShardRows['looks']>; readonly compendiums: v.GenericSchema<ShardRowsInput['compendiums'], ShardRows['compendiums']>; readonly loot: v.GenericSchema<ShardRowsInput['loot'], ShardRows['loot']>; }, undefined> = v.strictObject({ strikes: v.pipe(v.array(strike), v.maxLength(256)), weather: v.pipe(v.array(weather), v.maxLength(16)), days: v.pipe(v.array(day), v.maxLength(16)),
|
|
53
|
+
species: v.pipe(v.array(species), v.maxLength(256)), looks: v.pipe(v.array(look), v.maxLength(256)), compendiums: v.pipe(v.array(v.union([basicCompendium, JournalRowSchema])), v.maxLength(16)), loot: v.pipe(v.array(loot), v.maxLength(16)) });
|
|
54
|
+
/** Pure author rows: numeric weights, state output tables, clocks and registered view/presentation recipes. */
|
|
55
|
+
|
|
56
|
+
/** Reference, uniqueness and complete clock/weather transition rules for data rows. */
|
|
57
|
+
export function rowRules(rows: ShardRows): string[] {
|
|
58
|
+
const errors: string[] = [];
|
|
59
|
+
for (const list of Object.values(rows)) if (new Set(list.map((r) => r.id)).size !== list.length) errors.push('unique row ids');
|
|
60
|
+
for (const row of rows.loot) if (row.economy !== undefined && !('kind' in row.economy)) errors.push(...lootEconomyRules(row.economy));
|
|
61
|
+
for (const w of rows.weather) {
|
|
62
|
+
const states = new Set(w.states.map((s) => s.id));
|
|
63
|
+
if (states.size !== w.states.length || w.states.some((s) => !states.has(s.next)) || w.modes.some((m) => m.hold !== null && !states.has(m.hold)) || new Set(w.modes.map((m) => m.id)).size !== w.modes.length) errors.push('weather states and transitions');
|
|
64
|
+
}
|
|
65
|
+
for (const d of rows.days) if (d.schedule[0]?.from !== 0 || d.schedule.at(-1)?.to !== 24 || d.schedule.some((s, i) => s.from >= s.to || (i > 0 && d.schedule[i - 1]?.to !== s.from))) errors.push('complete ordered day schedule');
|
|
66
|
+
const speciesIds = new Set(rows.species.map((s) => s.id));
|
|
67
|
+
for (const s of rows.species) if (new Set(s.variants.map((r) => r.id)).size !== s.variants.length || s.variants.some((r) => r.scale[1] > 10)) errors.push('species variants');
|
|
68
|
+
for (const l of rows.looks) if (!speciesIds.has(l.species)) errors.push('look species');
|
|
69
|
+
for (const c of rows.compendiums) {
|
|
70
|
+
if ('kind' in c) { errors.push(...journalRowRules(c)); continue; }
|
|
71
|
+
const tabs = new Set(c.tabs.map((t) => t.id));
|
|
72
|
+
if (tabs.size !== c.tabs.length || new Set(c.entries.map((e) => e.id)).size !== c.entries.length || c.entries.some((e) => !tabs.has(e.tab) || !speciesIds.has(e.species))) errors.push('compendium references');
|
|
73
|
+
}
|
|
74
|
+
return errors;
|
|
75
|
+
}
|
|
76
|
+
/** The independent JSON check runs before strict row schemas; functions/accessors/cycles never become data. */
|
|
77
|
+
export const RowsSchema: v.SchemaWithPipe<readonly [v.UnknownSchema, v.CheckAction<unknown, 'JSON-only rows'>, typeof raw, v.CheckAction<ShardRows, 'row reference rules'>]> = v.pipe(v.unknown(), v.check(isJsonData, 'JSON-only rows'), raw, v.check((rows) => rowRules(rows).length === 0, 'row reference rules'));
|
|
78
|
+
/** Validate rows at the author boundary, before JSON serialization can erase closures. */
|
|
79
|
+
export function parseRows(input: unknown): ShardRows { return v.parse(RowsSchema, input); }
|
|
80
|
+
|
|
81
|
+
/** Admitted author data independent of validator implementation metadata. */
|
|
82
|
+
export type StrikeRowsInput = StrikeRows;
|
|
83
|
+
export interface StrikeRows { id: string; shape: ({ kind: 'point'; radius: number; }) | ({ kind: 'sphere'; radius: number; }) | ({ kind: 'lane'; length: number; width: number; }) | ({ kind: 'arc'; radius: number; halfAngle: number; }) | ({ kind: 'wedge'; length: number; halfAngle: number; }) | ({ kind: 'ring'; inner: number; outer: number; }); windup: number; active: number; recover: number; cooldown: number; range: number; damage: number; tags: (`${string}.${string}`)[]; weight: number; speed: number; }
|
|
84
|
+
export interface ShardRowsInput { strikes: (StrikeRowsInput)[]; weather: ({ id: string; states: ({ id: string; next: string; length: [number, number]; numbers: { overcast: number; rain: number; wet: number; wind: number; fog: number; }; })[]; initial: { overcast: number; rain: number; wet: number; wind: number; fog: number; }; soak: number; dry: number; modes: ({ id: string; hold: (string) | null; at: number; dry: boolean; })[]; })[]; days: ({ id: string; units: 'hour'; start: number; schedule: ({ phase: 'dawn' | 'day' | 'golden' | 'dusk' | 'night'; from: number; to: number; minutes: number; })[]; sun: { maxElevation: number; azimuthOffset: number; }; fixed: { midday: number; golden: number; sunset: number; night: number; }; presets: { dawn: number; noon: number; dusk: number; night: number; }; })[]; species: ({ id: string; kind: string; label: string; aggressive: boolean; lockable: boolean; dims: { bodyY: number; bodyHalfLen: number; bodyRadius: number; headRadius: number; legLen: number; feet: ([number, number])[]; halfWidth: number; }; flight?: { altitude: number; above?: 'ground' | 'world'; climbRate: number; diveRate: number; lockRange?: number; bank?: number; }; variants: ({ id: string; label: string; rarity: 'common' | 'uncommon' | 'rare' | 'legendary'; weight: number; scale: [number, number]; hp: number; mods: { speed: number; chargeDist: number; damageTaken: number; chargeDamage: number; relentless: boolean; }; })[]; })[]; looks: ({ id: string; species: string; recipe: string; material?: (string) | null | undefined; parameters: Record<string, (number) | (boolean) | (string) | ((number)[])>; animation: { recipe: string; parameters: Record<string, (number) | (boolean) | (string) | ((number)[])>; }; })[]; compendiums: (({ id: string; className: string; title: string; tabs: ({ id: string; label: string; })[]; stamp: string; stats: ({ label: string; value: string; })[]; entries: ({ id: string; kind: 'species'; tab: string; name: string; notes: string; sketch: string; species: string; })[]; }) | (v.InferInput<typeof JournalRowSchema>))[]; loot: (({ id: string; gear: 'purse.coins'; finds: null; marks: null; charted: boolean; chime: string; economy?: v.InferInput<typeof LootEconomySchema>; }) | ({ id: string; economy: v.InferInput<typeof BarterEconomySchema>; }))[]; }
|
|
85
|
+
// oxlint-disable-next-line typescript/consistent-type-definitions -- Object.values needs the original implicit dictionary contract for row validation.
|
|
86
|
+
export type ShardRows = { strikes: (StrikeRows)[]; weather: ({ id: string; states: ({ id: string; next: string; length: [number, number]; numbers: { overcast: number; rain: number; wet: number; wind: number; fog: number; }; })[]; initial: { overcast: number; rain: number; wet: number; wind: number; fog: number; }; soak: number; dry: number; modes: ({ id: string; hold: (string) | null; at: number; dry: boolean; })[]; })[]; days: ({ id: string; units: 'hour'; start: number; schedule: ({ phase: 'dawn' | 'day' | 'golden' | 'dusk' | 'night'; from: number; to: number; minutes: number; })[]; sun: { maxElevation: number; azimuthOffset: number; }; fixed: { midday: number; golden: number; sunset: number; night: number; }; presets: { dawn: number; noon: number; dusk: number; night: number; }; })[]; species: ({ id: string; kind: string; label: string; aggressive: boolean; lockable: boolean; dims: { bodyY: number; bodyHalfLen: number; bodyRadius: number; headRadius: number; legLen: number; feet: ([number, number])[]; halfWidth: number; }; flight?: { altitude: number; above?: 'ground' | 'world'; climbRate: number; diveRate: number; lockRange?: number; bank?: number; }; variants: ({ id: string; label: string; rarity: 'common' | 'uncommon' | 'rare' | 'legendary'; weight: number; scale: [number, number]; hp: number; mods: { speed: number; chargeDist: number; damageTaken: number; chargeDamage: number; relentless: boolean; }; })[]; })[]; looks: ({ id: string; species: string; recipe: string; material: (string) | null; parameters: Record<string, (number) | (boolean) | (string) | ((number)[])>; animation: { recipe: string; parameters: Record<string, (number) | (boolean) | (string) | ((number)[])>; }; })[]; compendiums: (({ id: string; className: string; title: string; tabs: ({ id: string; label: string; })[]; stamp: string; stats: ({ label: string; value: string; })[]; entries: ({ id: string; kind: 'species'; tab: string; name: string; notes: string; sketch: string; species: string; })[]; }) | (v.InferOutput<typeof JournalRowSchema>))[]; loot: (({ id: string; gear: 'purse.coins'; finds: null; marks: null; charted: boolean; chime: string; economy?: v.InferOutput<typeof LootEconomySchema>; }) | ({ id: string; economy: v.InferOutput<typeof BarterEconomySchema>; }))[]; };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { RuntimeCostSchema, runtimeAccountedBytes } from './runtimeCost.ts';
|
|
3
|
+
import { RuntimeBindsSchema } from './runtimeBinds.ts';
|
|
4
|
+
import { RuntimeSpawnsSchema } from './runtimeSpawns.ts';
|
|
5
|
+
|
|
6
|
+
const cost = v.pipe(RuntimeCostSchema, v.check((row) => {
|
|
7
|
+
try { runtimeAccountedBytes(row); return true; } catch { return false; }
|
|
8
|
+
}, 'Runtime cost must contain a positive safe measured content bound'));
|
|
9
|
+
|
|
10
|
+
/** A compiled client-plan owner keeps its actual binds, spawns and measured cost,
|
|
11
|
+
* without naming any TypeScript module or introducing another loader registry. */
|
|
12
|
+
export const ClientPlanRuntimeSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{ readonly kind: v.GenericSchema<ClientPlanRuntimeRowsInput['kind'], ClientPlanRuntimeRows['kind']>; readonly cost: v.GenericSchema<ClientPlanRuntimeRowsInput['cost'], ClientPlanRuntimeRows['cost']>; readonly binds: v.GenericSchema<ClientPlanRuntimeRowsInput['binds'], ClientPlanRuntimeRows['binds']>; readonly spawns: v.OptionalSchema<v.GenericSchema<Exclude<ClientPlanRuntimeRowsInput['spawns'], undefined>, Exclude<ClientPlanRuntimeRows['spawns'], undefined>>, undefined>; }, undefined>, v.CheckAction<{ [K in keyof ClientPlanRuntimeRows]: ClientPlanRuntimeRows[K] }, 'runtime spawns are declared exactly when runtime.binds names spawns'>]> = v.pipe(v.strictObject({
|
|
13
|
+
kind: v.literal('client-plan'), cost, binds: RuntimeBindsSchema,
|
|
14
|
+
spawns: v.optional(RuntimeSpawnsSchema),
|
|
15
|
+
}), v.check(row => (row.spawns !== undefined) === row.binds.includes('spawns'),
|
|
16
|
+
'runtime spawns are declared exactly when runtime.binds names spawns'));
|
|
17
|
+
/** A shard's runtime declaration: only the compiled client plan (LD9 retired the copied-runtime `entry` arm). */
|
|
18
|
+
export const RuntimeSchema: v.GenericSchema<RuntimeDeclarationInput, RuntimeDeclaration> = ClientPlanRuntimeSchema;
|
|
19
|
+
/** Serializable runtime ownership, independent of its compiled or legacy constructor. */
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
/** Admitted data contracts, independent of validator implementation metadata. */
|
|
23
|
+
interface ClientPlanRuntimeRowsInputFields {
|
|
24
|
+
kind: 'client-plan';
|
|
25
|
+
cost: v.InferInput<typeof RuntimeCostSchema>;
|
|
26
|
+
binds: v.InferInput<typeof RuntimeBindsSchema>;
|
|
27
|
+
spawns?: v.InferInput<typeof RuntimeSpawnsSchema> | undefined;
|
|
28
|
+
}
|
|
29
|
+
export type ClientPlanRuntimeRowsInput = { [Key in keyof ClientPlanRuntimeRowsInputFields]: ClientPlanRuntimeRowsInputFields[Key] };
|
|
30
|
+
interface ClientPlanRuntimeRowsFields {
|
|
31
|
+
kind: 'client-plan';
|
|
32
|
+
cost: v.InferOutput<typeof RuntimeCostSchema>;
|
|
33
|
+
binds: v.InferOutput<typeof RuntimeBindsSchema>;
|
|
34
|
+
spawns?: v.InferOutput<typeof RuntimeSpawnsSchema> | undefined;
|
|
35
|
+
}
|
|
36
|
+
export type ClientPlanRuntimeRows = { [Key in keyof ClientPlanRuntimeRowsFields]: ClientPlanRuntimeRowsFields[Key] };
|
|
37
|
+
export type RuntimeDeclarationInput = ClientPlanRuntimeRowsInput;
|
|
38
|
+
export type RuntimeDeclaration = ClientPlanRuntimeRows;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Shardfile } from './shardSchema.ts';
|
|
2
|
+
import * as v from 'valibot';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The behaviour sections a trusted hybrid runtime may bind (SHARD-PLATFORM M3, the runtime-owner binding, E435). A hybrid
|
|
6
|
+
* shard's runtime owns its world and its play scope; a section named here stays declared data in the shardfile, validated
|
|
7
|
+
* like every row, and the platform installs it into that runtime's play scope through the same installers the template
|
|
8
|
+
* uses (`@wildshard/game/shardfile/hybridRows`). The data client never installs a bound section a second time, and a bound
|
|
9
|
+
* section's rows do not make a hybrid shardfile "non-empty": only an unbound behaviour row sends a hybrid shard down the
|
|
10
|
+
* full shardfile loader.
|
|
11
|
+
*
|
|
12
|
+
* - `quests`: quest graphs, flags and dialogue; the runtime supplies its flags and places world-piece markers.
|
|
13
|
+
* - `ledger`: fact → profile reward rules; the runtime emits declared facts, the platform grants once.
|
|
14
|
+
* - `items`: weapon / tool rows, input contexts and the loadout; the runtime may resolve a family of its own
|
|
15
|
+
* (`<slug>.<name>`) beside the kit's, and the declared input contexts register through its entered-input path.
|
|
16
|
+
* - `spawns`: the runtime's creatures as declared rows (`runtime.spawns`, ./runtimeSpawns.ts): its homes and boss bodies,
|
|
17
|
+
* each under a stable identity; the platform keeps the homes (respawn, retained identity), the runtime's species and
|
|
18
|
+
* encounter scripts stay its own.
|
|
19
|
+
* - `state`: host-owned shared scalar fields (including bounded JSON strings), migrated once from legacy slots and
|
|
20
|
+
* persisted by the platform under the stable instance id; player/public fields remain simulation-owned. Its numeric
|
|
21
|
+
* host fields may drive `look.curves` (the runtime hands the data client their live values, G345).
|
|
22
|
+
* - `modes`: validated traversal parameters consumed by the native player owner at its existing update phase.
|
|
23
|
+
* The data client never installs a second traversal owner.
|
|
24
|
+
* - `movers`: admitted fixed-step motion is installed once by the resident runtime.
|
|
25
|
+
* Its Wasm roots remain verified product files and never create a data-client host.
|
|
26
|
+
* - `clientChannels`: copied clock/state observations and bounded straight-line numeric expressions; the runtime
|
|
27
|
+
* binds private visual targets, never authoritative state or player objects.
|
|
28
|
+
* - `terrain`: a trusted runtime owns the terrain queries and draw construction. The data client omits those rows;
|
|
29
|
+
* unbound drawn tiles use the page's shared tile streamer. Edge rows remain platform data.
|
|
30
|
+
* - `loot`: the trusted runtime consumes the original economy rows; only the secondary data client omits them.
|
|
31
|
+
* - `props` (G227): the compiled props section (tiles, library models, panels, far proxy), bound the same way; the
|
|
32
|
+
* runtime keeps the behaviour of the pieces it dresses.
|
|
33
|
+
*/
|
|
34
|
+
export const RUNTIME_BOUND_SECTIONS = ['quests', 'ledger', 'items', 'spawns', 'state', 'terrain', 'props', 'modes', 'clientChannels', 'movers', 'loot'] as const;
|
|
35
|
+
/** One section a trusted runtime binds rather than the data client. */
|
|
36
|
+
export type RuntimeBoundSection = (typeof RUNTIME_BOUND_SECTIONS)[number];
|
|
37
|
+
/** `runtime.binds`: the declared capability that replaces the implicit "empty apart from audio, edges and colliders" rule. */
|
|
38
|
+
export const RuntimeBindsSchema: v.GenericSchema<RuntimeBindsRowsInput, RuntimeBindsRows> = v.pipe(v.array(v.picklist(RUNTIME_BOUND_SECTIONS)), v.maxLength(RUNTIME_BOUND_SECTIONS.length),
|
|
39
|
+
v.check((sections) => new Set(sections).size === sections.length, 'unique runtime-bound sections'));
|
|
40
|
+
|
|
41
|
+
/** Typed page declarations select a data owner; disk admission must also prove
|
|
42
|
+
* that its complete compiled client plan and native program are present. */
|
|
43
|
+
export function hasDeclaredClientPage(source: Partial<Pick<Shardfile, 'runtime' | 'questHost'>>): boolean {
|
|
44
|
+
return source.runtime === null && source.questHost?.page !== undefined && 'version' in source.questHost.page;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Admitted data contracts, independent of validator implementation metadata. */
|
|
48
|
+
export type RuntimeBindsRowsInput = RuntimeBindsRows;
|
|
49
|
+
export type RuntimeBindsRows = ((typeof RUNTIME_BOUND_SECTIONS)[number])[];
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { RUNTIME_RESIDENT_FACTOR } from './wireLimits.ts';
|
|
3
|
+
|
|
4
|
+
const mb = v.pipe(v.number(), v.finite(), v.minValue(0));
|
|
5
|
+
/** Reviewed trusted-runtime measurements, kept with their shard rather than presenting an empty data budget as its cost. */
|
|
6
|
+
export const MemoryMeasurementSchema: v.StrictObjectSchema<{ readonly webContentMB: v.GenericSchema<MemoryMeasurementRowsInput['webContentMB'], MemoryMeasurementRows['webContentMB']>; readonly glMB: v.GenericSchema<MemoryMeasurementRowsInput['glMB'], MemoryMeasurementRows['glMB']>; readonly engineBaseMB: v.GenericSchema<MemoryMeasurementRowsInput['engineBaseMB'], MemoryMeasurementRows['engineBaseMB']>; readonly residentBaseMB: v.ExactOptionalSchema<v.GenericSchema<Exclude<MemoryMeasurementRowsInput['residentBaseMB'], undefined>, Exclude<MemoryMeasurementRows['residentBaseMB'], undefined>>, undefined>; readonly rev: v.GenericSchema<MemoryMeasurementRowsInput['rev'], MemoryMeasurementRows['rev']>; readonly device: v.GenericSchema<MemoryMeasurementRowsInput['device'], MemoryMeasurementRows['device']>; readonly evidence: v.GenericSchema<MemoryMeasurementRowsInput['evidence'], MemoryMeasurementRows['evidence']>; }, undefined> = v.strictObject({
|
|
7
|
+
webContentMB: mb, glMB: mb, engineBaseMB: mb,
|
|
8
|
+
/** Matched settled pre-entry resident set. When present, subtract it instead of the dated engine-only calibration. */
|
|
9
|
+
residentBaseMB: v.exactOptional(mb),
|
|
10
|
+
rev: v.pipe(v.string(), v.regex(/^[a-f0-9]{9,40}$/u)),
|
|
11
|
+
device: v.pipe(v.string(), v.minLength(1), v.maxLength(200)),
|
|
12
|
+
evidence: v.pipe(v.string(), v.regex(/^progress\/memory\/[a-zA-Z0-9/_-]+\.json$/u)),
|
|
13
|
+
});
|
|
14
|
+
/** The current runtime measurement may retain its separate images-first reading for cold phone texture selection. */
|
|
15
|
+
export const RuntimeCostSchema: v.GenericSchema<RuntimeCostInput, RuntimeCost> = v.strictObject({ ...MemoryMeasurementSchema.entries, imagesFirst: v.optional(MemoryMeasurementSchema) });
|
|
16
|
+
/** Decimal MB; GL bytes accompany WebContent, never the GPU process as a replacement. */
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* SF22a / G144 / G258: remove the matched resident baseline (or legacy engine base) and undo the allocator's calibration exactly once. The allocator adds
|
|
21
|
+
* its current engine base and applies residentFactor when this home claim joins libraries, neighbours and the platform.
|
|
22
|
+
* Round upward to whole bytes; no computed cost is stored in the shardfile. Refuse measurements without content.
|
|
23
|
+
*/
|
|
24
|
+
export function runtimeAccountedBytes(input: unknown): number {
|
|
25
|
+
const row = v.parse(RuntimeCostSchema, input);
|
|
26
|
+
const baseline = row.residentBaseMB ?? row.engineBaseMB;
|
|
27
|
+
if (baseline < row.engineBaseMB) throw new RangeError('Runtime resident baseline must include its engine base');
|
|
28
|
+
const measured = (row.webContentMB + row.glMB - baseline) * 1_000_000;
|
|
29
|
+
if (measured <= 0) throw new RangeError('Runtime measurement must exceed its resident baseline');
|
|
30
|
+
const bytes = Math.ceil(measured / RUNTIME_RESIDENT_FACTOR);
|
|
31
|
+
if (!Number.isSafeInteger(bytes)) throw new RangeError('Runtime measurement exceeds safe resident accounting');
|
|
32
|
+
return bytes;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* SF57: a reviewed reading of what one admitted regional shardfile sim really keeps resident (JS heap, its buffers and its
|
|
37
|
+
* share of Rapier's linear memory, the generated ground included; its checkpoint basis is charged separately as
|
|
38
|
+
* `sim-basis:`). The declared `budgets.sim.resident` stays the validated authoring ceiling (scripts at their growth limit);
|
|
39
|
+
* this row only replaces the ceiling in the allocator's charge, and never raises it.
|
|
40
|
+
*/
|
|
41
|
+
export const RegionalSimCostSchema: v.GenericSchema<RegionalSimCostInput, RegionalSimCost> = v.strictObject({
|
|
42
|
+
residentMB: v.pipe(mb, v.minValue(0.001)),
|
|
43
|
+
rev: v.pipe(v.string(), v.regex(/^[a-f0-9]{9,40}$/u)),
|
|
44
|
+
device: v.pipe(v.string(), v.minLength(1), v.maxLength(200)),
|
|
45
|
+
evidence: v.pipe(v.string(), v.regex(/^progress\/memory\/[a-zA-Z0-9/_-]+\.json$/u)),
|
|
46
|
+
});
|
|
47
|
+
/** Decimal MB, measured per admitted regional sim. */
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
/** Admitted data contracts, independent of validator implementation metadata. */
|
|
52
|
+
export type MemoryMeasurementRowsInput = MemoryMeasurementRows;
|
|
53
|
+
interface MemoryMeasurementRowsFields {
|
|
54
|
+
webContentMB: number;
|
|
55
|
+
glMB: number;
|
|
56
|
+
engineBaseMB: number;
|
|
57
|
+
residentBaseMB?: number;
|
|
58
|
+
rev: string;
|
|
59
|
+
device: string;
|
|
60
|
+
evidence: string;
|
|
61
|
+
}
|
|
62
|
+
export type MemoryMeasurementRows = { [Key in keyof MemoryMeasurementRowsFields]: MemoryMeasurementRowsFields[Key] };
|
|
63
|
+
export type RuntimeCostInput = Omit<MemoryMeasurementRowsInput, keyof ({
|
|
64
|
+
imagesFirst?: MemoryMeasurementRowsInput | undefined;
|
|
65
|
+
})> & {
|
|
66
|
+
imagesFirst?: MemoryMeasurementRowsInput | undefined;
|
|
67
|
+
};
|
|
68
|
+
export type RuntimeCost = Omit<MemoryMeasurementRows, keyof ({
|
|
69
|
+
imagesFirst?: MemoryMeasurementRows | undefined;
|
|
70
|
+
})> & {
|
|
71
|
+
imagesFirst?: MemoryMeasurementRows | undefined;
|
|
72
|
+
};
|
|
73
|
+
export type RegionalSimCostInput = RegionalSimCost;
|
|
74
|
+
interface RegionalSimCostFields {
|
|
75
|
+
residentMB: number;
|
|
76
|
+
rev: string;
|
|
77
|
+
device: string;
|
|
78
|
+
evidence: string;
|
|
79
|
+
}
|
|
80
|
+
export type RegionalSimCost = { [Key in keyof RegionalSimCostFields]: RegionalSimCostFields[Key] };
|