@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,1315 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { isJsonData } from './json.ts';
|
|
3
|
+
import { ClientChannelsSchema, ClientChannelInputsSchema, ClientChannelPropertySchema } from './clientChannels.ts';
|
|
4
|
+
|
|
5
|
+
const scalar = v.pipe(v.number(), v.finite(), v.minValue(0), v.maxValue(10000));
|
|
6
|
+
const positive = v.pipe(scalar, v.minValue(0.000001));
|
|
7
|
+
const seconds = v.pipe(v.number(), v.finite(), v.minValue(0), v.maxValue(86400));
|
|
8
|
+
const duration = v.pipe(seconds, v.minValue(0.000001));
|
|
9
|
+
const count = v.pipe(scalar, v.integer(), v.maxValue(1024));
|
|
10
|
+
const slots = v.pipe(count, v.minValue(1));
|
|
11
|
+
const probability = v.pipe(scalar, v.maxValue(1));
|
|
12
|
+
const swing = v.pipe(v.strictObject({ windup: seconds, slashEnd: duration, total: duration, damage: scalar,
|
|
13
|
+
stagger: v.exactOptional(scalar), sweep: v.exactOptional(v.pipe(v.number(), v.finite(), v.minValue(-10000), v.maxValue(10000))), reach: v.exactOptional(positive) }),
|
|
14
|
+
v.check(row => row.windup <= row.slashEnd && row.slashEnd <= row.total, 'Ordered native swing phases'));
|
|
15
|
+
const flight = v.strictObject({ gravity: scalar, drag: scalar, windCoupling: scalar });
|
|
16
|
+
const cone = v.strictObject({ degrees: scalar, radius: v.picklist(['linear', 'sqrt']), axisScale: v.picklist([1, 2]) });
|
|
17
|
+
|
|
18
|
+
/** Renderer-free contact and clock parameters for the shared melee/swept family. Poses and trails belong to WP-4 views. */
|
|
19
|
+
export const MeleeWeaponProfileSchema: v.StrictObjectSchema<{ readonly family: v.GenericSchema<MeleeWeaponProfileRowsInput['family'], MeleeWeaponProfileRows['family']>; readonly damage: v.GenericSchema<MeleeWeaponProfileRowsInput['damage'], MeleeWeaponProfileRows['damage']>; readonly reach: v.GenericSchema<MeleeWeaponProfileRowsInput['reach'], MeleeWeaponProfileRows['reach']>; readonly swingScale: v.GenericSchema<MeleeWeaponProfileRowsInput['swingScale'], MeleeWeaponProfileRows['swingScale']>; readonly cooldown: v.GenericSchema<MeleeWeaponProfileRowsInput['cooldown'], MeleeWeaponProfileRows['cooldown']>; readonly comboGap: v.GenericSchema<MeleeWeaponProfileRowsInput['comboGap'], MeleeWeaponProfileRows['comboGap']>; readonly chainLag: v.GenericSchema<MeleeWeaponProfileRowsInput['chainLag'], MeleeWeaponProfileRows['chainLag']>; readonly heavyCharge: v.GenericSchema<MeleeWeaponProfileRowsInput['heavyCharge'], MeleeWeaponProfileRows['heavyCharge']>; readonly moves: v.GenericSchema<MeleeWeaponProfileRowsInput['moves'], MeleeWeaponProfileRows['moves']>; readonly mounted: v.ExactOptionalSchema<v.GenericSchema<Exclude<MeleeWeaponProfileRowsInput['mounted'], undefined>, Exclude<MeleeWeaponProfileRows['mounted'], undefined>>, undefined>; readonly lunge: v.GenericSchema<MeleeWeaponProfileRowsInput['lunge'], MeleeWeaponProfileRows['lunge']>; readonly sweep: v.GenericSchema<MeleeWeaponProfileRowsInput['sweep'], MeleeWeaponProfileRows['sweep']>; }, undefined> = v.strictObject({
|
|
20
|
+
family: v.literal('melee'), damage: scalar, reach: positive, swingScale: positive,
|
|
21
|
+
cooldown: seconds, comboGap: seconds, chainLag: seconds, heavyCharge: duration,
|
|
22
|
+
moves: v.strictObject({ combo: v.pipe(v.array(swing), v.minLength(1), v.maxLength(16)), heavy: swing,
|
|
23
|
+
passes: v.exactOptional(v.strictObject({ left: swing, right: swing })) }),
|
|
24
|
+
mounted: v.exactOptional(v.strictObject({ reach: positive, cooldown: seconds, sense: scalar, chainWindow: seconds,
|
|
25
|
+
chainStep: scalar, chainMax: v.pipe(scalar, v.minValue(1)), speedDivisor: positive,
|
|
26
|
+
behind: v.pipe(v.number(), v.finite(), v.minValue(-10000), v.maxValue(10000)) })),
|
|
27
|
+
lunge: v.pipe(v.strictObject({ range: scalar, heavyRange: scalar, cone: scalar, stop: scalar,
|
|
28
|
+
speed: positive, minTime: seconds, maxTime: seconds }), v.check(row => row.minTime <= row.maxTime, 'Ordered lunge duration')),
|
|
29
|
+
sweep: v.strictObject({ rays: slots, extensions: v.pipe(v.array(scalar), v.minLength(1), v.maxLength(32)), step: positive, maxSamples: slots, maxHits: slots }),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
/** Shared held/full-release bow timing and flight numbers; wind, aim, bodies and ammunition remain native owner ports. */
|
|
33
|
+
export const BowWeaponProfileSchema: v.StrictObjectSchema<{ readonly family: v.GenericSchema<BowWeaponProfileRowsInput['family'], BowWeaponProfileRows['family']>; readonly quiver: v.GenericSchema<BowWeaponProfileRowsInput['quiver'], BowWeaponProfileRows['quiver']>; readonly speedBase: v.GenericSchema<BowWeaponProfileRowsInput['speedBase'], BowWeaponProfileRows['speedBase']>; readonly speedDraw: v.GenericSchema<BowWeaponProfileRowsInput['speedDraw'], BowWeaponProfileRows['speedDraw']>; readonly damageScale: v.GenericSchema<BowWeaponProfileRowsInput['damageScale'], BowWeaponProfileRows['damageScale']>; readonly draw: v.GenericSchema<BowWeaponProfileRowsInput['draw'], BowWeaponProfileRows['draw']>; readonly spread: v.GenericSchema<BowWeaponProfileRowsInput['spread'], BowWeaponProfileRows['spread']>; readonly flight: v.GenericSchema<BowWeaponProfileRowsInput['flight'], BowWeaponProfileRows['flight']>; readonly muzzle: v.GenericSchema<BowWeaponProfileRowsInput['muzzle'], BowWeaponProfileRows['muzzle']>; readonly pool: v.GenericSchema<BowWeaponProfileRowsInput['pool'], BowWeaponProfileRows['pool']>; readonly substeps: v.GenericSchema<BowWeaponProfileRowsInput['substeps'], BowWeaponProfileRows['substeps']>; readonly lifetime: v.GenericSchema<BowWeaponProfileRowsInput['lifetime'], BowWeaponProfileRows['lifetime']>; }, undefined> = v.strictObject({
|
|
34
|
+
family: v.literal('bow'), quiver: count, speedBase: scalar, speedDraw: scalar, damageScale: scalar,
|
|
35
|
+
draw: v.pipe(v.strictObject({ drawTime: duration, letdownTime: duration, renockTime: duration, renockEarly: probability,
|
|
36
|
+
holdSteady: seconds, holdTire: duration, tiredTime: seconds }), v.check(row => row.holdSteady < row.holdTire, 'Ordered bow fatigue')),
|
|
37
|
+
spread: v.strictObject({ ...cone.entries, aimMultiplier: probability, motion: scalar }), flight, muzzle: scalar, pool: slots, substeps: v.pipe(slots, v.maxValue(64)), lifetime: duration,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/** Serializable held-bow feel, clocks and mounting policy. A null final gait
|
|
41
|
+
* bound represents infinity on the wire; view strategies come from the bake. */
|
|
42
|
+
export const HeldBowBaseSchema: v.GenericSchema<HeldBowBaseRowsInput, HeldBowBaseRows> = v.strictObject({
|
|
43
|
+
family: v.literal('bow'), parent: v.exactOptional(v.pipe(v.string(), v.regex(/^(weapon|tool)\.[a-zA-Z0-9.-]+$/u, 'Invalid held bow parent'))), quiver: count,
|
|
44
|
+
swayMax: scalar, speedBase: scalar, speedDraw: scalar, damageScale: scalar,
|
|
45
|
+
aimZoom: scalar, aimVmZoom: scalar, aimSway: scalar, aimSpread: scalar, aimIn: scalar,
|
|
46
|
+
arcFrom: scalar, arcColour: v.number(), arcMode: v.picklist(['setting', 'aim']), zoomLook: v.boolean(),
|
|
47
|
+
inspectZ: v.number(), inspectHidesArms: v.boolean(), transparentParts: v.boolean(), vmScale: scalar,
|
|
48
|
+
draw: v.exactOptional(BowWeaponProfileSchema.entries.draw),
|
|
49
|
+
loose: v.exactOptional(v.strictObject({ ...cone.entries, aimMultiplier: v.exactOptional(probability), motion: scalar, muzzle: scalar })),
|
|
50
|
+
projectile: v.exactOptional(v.strictObject({ ...flight.entries, maxFlying: slots, substeps: slots, lifetime: duration })),
|
|
51
|
+
mounted: v.exactOptional(v.strictObject({ drawTime: duration, rearAngle: scalar, rearDraw: scalar, rearSpread: scalar, arc: v.boolean(),
|
|
52
|
+
gaits: v.pipe(v.array(v.strictObject({ below: v.nullable(scalar), spread: scalar })), v.minLength(1), v.maxLength(32), v.check(gaits => !gaits.some(({ below }, index) => below === null ? index !== gaits.length - 1 : index > 0 && below <= (gaits[index - 1]?.below ?? Infinity)), 'Invalid held bow gaits')) })),
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
/** Magazine, per-round lever and single-bolt parameters for the shared firearm family. Rendering and sounds are separate. */
|
|
56
|
+
export const FirearmWeaponProfileSchema: v.StrictObjectSchema<{ readonly family: v.GenericSchema<FirearmWeaponProfileRowsInput['family'], FirearmWeaponProfileRows['family']>; readonly action: v.GenericSchema<FirearmWeaponProfileRowsInput['action'], FirearmWeaponProfileRows['action']>; readonly magazine: v.GenericSchema<FirearmWeaponProfileRowsInput['magazine'], FirearmWeaponProfileRows['magazine']>; readonly reserve: v.GenericSchema<FirearmWeaponProfileRowsInput['reserve'], FirearmWeaponProfileRows['reserve']>; readonly interval: v.GenericSchema<FirearmWeaponProfileRowsInput['interval'], FirearmWeaponProfileRows['interval']>; readonly reload: v.GenericSchema<FirearmWeaponProfileRowsInput['reload'], FirearmWeaponProfileRows['reload']>; readonly reloadMode: v.GenericSchema<FirearmWeaponProfileRowsInput['reloadMode'], FirearmWeaponProfileRows['reloadMode']>; readonly autoReload: v.GenericSchema<FirearmWeaponProfileRowsInput['autoReload'], FirearmWeaponProfileRows['autoReload']>; readonly damageScale: v.GenericSchema<FirearmWeaponProfileRowsInput['damageScale'], FirearmWeaponProfileRows['damageScale']>; readonly range: v.GenericSchema<FirearmWeaponProfileRowsInput['range'], FirearmWeaponProfileRows['range']>; readonly spreadAds: v.GenericSchema<FirearmWeaponProfileRowsInput['spreadAds'], FirearmWeaponProfileRows['spreadAds']>; readonly spreadHip: v.GenericSchema<FirearmWeaponProfileRowsInput['spreadHip'], FirearmWeaponProfileRows['spreadHip']>; readonly spreadRadius: v.GenericSchema<FirearmWeaponProfileRowsInput['spreadRadius'], FirearmWeaponProfileRows['spreadRadius']>; readonly spreadAxisScale: v.OptionalSchema<v.GenericSchema<Exclude<FirearmWeaponProfileRowsInput['spreadAxisScale'], undefined>, Exclude<FirearmWeaponProfileRows['spreadAxisScale'], undefined>>, undefined>; readonly bloomShot: v.GenericSchema<FirearmWeaponProfileRowsInput['bloomShot'], FirearmWeaponProfileRows['bloomShot']>; readonly bloomMax: v.GenericSchema<FirearmWeaponProfileRowsInput['bloomMax'], FirearmWeaponProfileRows['bloomMax']>; readonly movingSpread: v.GenericSchema<FirearmWeaponProfileRowsInput['movingSpread'], FirearmWeaponProfileRows['movingSpread']>; readonly movingAimReduction: v.GenericSchema<FirearmWeaponProfileRowsInput['movingAimReduction'], FirearmWeaponProfileRows['movingAimReduction']>; readonly lever: v.ExactOptionalSchema<v.GenericSchema<Exclude<FirearmWeaponProfileRowsInput['lever'], undefined>, Exclude<FirearmWeaponProfileRows['lever'], undefined>>, undefined>; readonly projectile: v.GenericSchema<FirearmWeaponProfileRowsInput['projectile'], FirearmWeaponProfileRows['projectile']>; }, undefined> = v.strictObject({
|
|
57
|
+
family: v.literal('firearm'), action: v.picklist(['semi', 'lever', 'bolt']), magazine: slots, reserve: count,
|
|
58
|
+
interval: seconds, reload: duration, reloadMode: v.picklist(['magazine', 'perRound', 'single']), autoReload: seconds,
|
|
59
|
+
damageScale: scalar, range: positive, spreadAds: scalar, spreadHip: scalar, spreadRadius: v.picklist(['linear', 'sqrt']), spreadAxisScale: v.optional(v.picklist([1, 2])),
|
|
60
|
+
bloomShot: scalar, bloomMax: scalar, movingSpread: scalar, movingAimReduction: probability,
|
|
61
|
+
lever: v.exactOptional(v.strictObject({ cycleDelay: seconds, cycleTime: duration, reloadIn: seconds, reloadOut: seconds,
|
|
62
|
+
ejectAt: probability, cockAt: probability, autoReloadClose: duration })),
|
|
63
|
+
projectile: v.strictObject({ kind: v.picklist(['bullet', 'bolt']), delivery: v.picklist(['hitscan', 'flight']),
|
|
64
|
+
speed: scalar, radius: scalar, muzzle: v.optional(scalar), flight, pool: slots, substeps: v.pipe(slots, v.maxValue(64)), lifetime: duration }),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
/** Existing ThrownProfile numeric launch, pool, pickup and recovery fields as data; no target, RNG or physics authority. */
|
|
68
|
+
export const ThrownWeaponProfileSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{ readonly family: v.GenericSchema<ThrownWeaponProfileRowsInput['family'], ThrownWeaponProfileRows['family']>; readonly speed: v.GenericSchema<ThrownWeaponProfileRowsInput['speed'], ThrownWeaponProfileRows['speed']>; readonly gravity: v.GenericSchema<ThrownWeaponProfileRowsInput['gravity'], ThrownWeaponProfileRows['gravity']>; readonly damage: v.GenericSchema<ThrownWeaponProfileRowsInput['damage'], ThrownWeaponProfileRows['damage']>; readonly headMultiplier: v.GenericSchema<ThrownWeaponProfileRowsInput['headMultiplier'], ThrownWeaponProfileRows['headMultiplier']>; readonly radius: v.GenericSchema<ThrownWeaponProfileRowsInput['radius'], ThrownWeaponProfileRows['radius']>; readonly headOffset: v.GenericSchema<ThrownWeaponProfileRowsInput['headOffset'], ThrownWeaponProfileRows['headOffset']>; readonly windup: v.GenericSchema<ThrownWeaponProfileRowsInput['windup'], ThrownWeaponProfileRows['windup']>; readonly release: v.GenericSchema<ThrownWeaponProfileRowsInput['release'], ThrownWeaponProfileRows['release']>; readonly recovery: v.GenericSchema<ThrownWeaponProfileRowsInput['recovery'], ThrownWeaponProfileRows['recovery']>; readonly carried: v.GenericSchema<ThrownWeaponProfileRowsInput['carried'], ThrownWeaponProfileRows['carried']>; readonly pool: v.GenericSchema<ThrownWeaponProfileRowsInput['pool'], ThrownWeaponProfileRows['pool']>; readonly pickupRadius: v.GenericSchema<ThrownWeaponProfileRowsInput['pickupRadius'], ThrownWeaponProfileRows['pickupRadius']>; readonly pickupHeight: v.GenericSchema<ThrownWeaponProfileRowsInput['pickupHeight'], ThrownWeaponProfileRows['pickupHeight']>; readonly survive: v.GenericSchema<ThrownWeaponProfileRowsInput['survive'], ThrownWeaponProfileRows['survive']>; readonly arcPoints: v.GenericSchema<ThrownWeaponProfileRowsInput['arcPoints'], ThrownWeaponProfileRows['arcPoints']>; readonly arcAfter: v.GenericSchema<ThrownWeaponProfileRowsInput['arcAfter'], ThrownWeaponProfileRows['arcAfter']>; readonly stagger: v.GenericSchema<ThrownWeaponProfileRowsInput['stagger'], ThrownWeaponProfileRows['stagger']>; }, undefined>, v.CheckAction<{ [K in keyof ThrownWeaponProfileRows]: ThrownWeaponProfileRows[K] }, 'Carried thrown weapons fit the native pool'>]> = v.pipe(v.strictObject({
|
|
69
|
+
family: v.literal('thrown'), speed: positive, gravity: scalar, damage: scalar, headMultiplier: scalar,
|
|
70
|
+
radius: positive, headOffset: scalar, windup: duration, release: duration, recovery: duration,
|
|
71
|
+
carried: count, pool: slots, pickupRadius: positive, pickupHeight: positive, survive: probability,
|
|
72
|
+
arcPoints: v.pipe(slots, v.minValue(2)), arcAfter: seconds, stagger: scalar,
|
|
73
|
+
}), v.check(row => row.carried <= row.pool, 'Carried thrown weapons fit the native pool'));
|
|
74
|
+
|
|
75
|
+
/** Native timed lash contacts: bounded unroll/double-crack clocks, pull/stagger reactions and named pipeline moves.
|
|
76
|
+
* The profile supplies values only; the trusted family retains its contact ordering and continuation. */
|
|
77
|
+
export const LashWeaponProfileSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{ readonly family: v.GenericSchema<LashWeaponProfileRowsInput['family'], LashWeaponProfileRows['family']>; readonly contact: v.ExactOptionalSchema<v.GenericSchema<Exclude<LashWeaponProfileRowsInput['contact'], undefined>, Exclude<LashWeaponProfileRows['contact'], undefined>>, undefined>; readonly timing: v.GenericSchema<LashWeaponProfileRowsInput['timing'], LashWeaponProfileRows['timing']>; readonly moves: v.GenericSchema<LashWeaponProfileRowsInput['moves'], LashWeaponProfileRows['moves']>; }, undefined>, v.CheckAction<{ [K in keyof LashWeaponProfileRows]: LashWeaponProfileRows[K] }, 'Ordered native lash contacts'>]> = v.pipe(v.strictObject({
|
|
78
|
+
family: v.literal('lash'),
|
|
79
|
+
contact: v.exactOptional(v.strictObject({ chestHeight: scalar, bodyAllowance: scalar })),
|
|
80
|
+
timing: v.strictObject({ unroll: duration, second: duration, show: duration, stagger: scalar, pull: positive, pullMaxHp: positive }),
|
|
81
|
+
moves: v.strictObject({ light: v.pipe(v.string(), v.minLength(1), v.maxLength(128)),
|
|
82
|
+
first: v.pipe(v.string(), v.minLength(1), v.maxLength(128)), second: v.pipe(v.string(), v.minLength(1), v.maxLength(128)) }),
|
|
83
|
+
}), v.check(row => row.timing.second > row.timing.unroll && row.timing.show > row.timing.unroll, 'Ordered native lash contacts'));
|
|
84
|
+
|
|
85
|
+
const contactTag = v.custom<`${string}.${string}`>((value) => typeof value === 'string'
|
|
86
|
+
&& /^[a-z][a-zA-Z0-9.-]*\.[a-zA-Z0-9.-]+$/u.test(value) && value.length <= 128);
|
|
87
|
+
const reaction = v.variant('kind', [
|
|
88
|
+
v.strictObject({ when: v.picklist(['before', 'survived']), kind: v.literal('impulse'),
|
|
89
|
+
direction: v.picklist(['radial-away', 'aim-backward']), speed: scalar,
|
|
90
|
+
lift: v.pipe(v.number(), v.finite(), v.minValue(-10000), v.maxValue(10000)), maxHealth: v.exactOptional(scalar) }),
|
|
91
|
+
v.strictObject({ when: v.picklist(['before', 'survived']), kind: v.literal('stagger'),
|
|
92
|
+
strength: scalar, aboveHealth: v.exactOptional(scalar) }),
|
|
93
|
+
]);
|
|
94
|
+
/** Ordered cone/lane contacts, with authority supplied by the trusted owner rather than JSON. */
|
|
95
|
+
export const MeleeContactRowSchema: v.GenericSchema<MeleeContactDataInput, MeleeContactData> = v.pipe(v.strictObject({
|
|
96
|
+
lane: v.picklist(['primary', 'secondary']), heavy: v.boolean(), cooldown: seconds,
|
|
97
|
+
shape: v.picklist(['cone', 'lane']), reach: v.pipe(positive, v.maxValue(20)),
|
|
98
|
+
size: v.pipe(positive, v.maxValue(20)), height: v.pipe(scalar, v.maxValue(20)), allowance: v.pipe(scalar, v.maxValue(20)),
|
|
99
|
+
lands: v.pipe(v.array(seconds), v.maxLength(16)), show: seconds, reports: v.boolean(),
|
|
100
|
+
hits: v.pipe(v.array(v.strictObject({ source: v.picklist(['owner', 'env']), damage: scalar,
|
|
101
|
+
tags: v.pipe(v.array(contactTag), v.maxLength(32)), moveId: v.pipe(v.string(), v.minLength(1), v.maxLength(128)),
|
|
102
|
+
copyVectors: v.boolean(), copyTags: v.boolean(), reactions: v.pipe(v.array(reaction), v.maxLength(16)) })), v.minLength(1), v.maxLength(16)),
|
|
103
|
+
}), v.check(row => row.lands.length === 0 ? row.hits.length === 1
|
|
104
|
+
: row.lands.length === row.hits.length && row.lands.every((at, i) => at <= row.show && (i === 0 || at > (row.lands[i - 1] ?? Infinity))),
|
|
105
|
+
'Immediate contact or ordered one-hit-per-landing contacts'));
|
|
106
|
+
type AuthoredContact<T> = T extends readonly (infer U)[] ? readonly AuthoredContact<U>[]
|
|
107
|
+
: T extends object ? { readonly [K in keyof T]: AuthoredContact<T[K]> } : T;
|
|
108
|
+
/** Literal authored rows accept readonly arrays; the engine retains their declared vector/tag ownership. */
|
|
109
|
+
export type MeleeContactRow = AuthoredContact<v.InferOutput<typeof MeleeContactRowSchema>>;
|
|
110
|
+
/** Optional item attachment, bounded before the shared contact controller allocates its moves. */
|
|
111
|
+
export const MeleeContactsSchema: v.GenericSchema<MeleeContactsRowsInput, MeleeContactsRows> = v.pipe(v.array(MeleeContactRowSchema), v.minLength(1), v.maxLength(16));
|
|
112
|
+
/** Cone contacts read slash damage/cooldowns from the item; this profile declares the reach allowance and gust. */
|
|
113
|
+
export const ConeWeaponProfileSchema: v.StrictObjectSchema<{
|
|
114
|
+
readonly family: v.LiteralSchema<'cone', undefined>;
|
|
115
|
+
readonly slash: v.GenericSchema<ConeWeaponProfileRowsInput['slash'], ConeWeaponProfileRows['slash']>;
|
|
116
|
+
readonly gust: v.StrictObjectSchema<{
|
|
117
|
+
[Key in Exclude<keyof ConeWeaponProfileRows['gust'], 'tags'>]: v.GenericSchema<ConeWeaponProfileRowsInput['gust'][Key], ConeWeaponProfileRows['gust'][Key]>;
|
|
118
|
+
} & { readonly tags: v.GenericSchema<ConeWeaponProfileRowsInput['gust']['tags'], ConeWeaponProfileRows['gust']['tags']> & {
|
|
119
|
+
readonly pipe: readonly [v.ArraySchema<v.CustomSchema<`${string}.${string}`, undefined>, undefined>, unknown];
|
|
120
|
+
} }, undefined>;
|
|
121
|
+
}, undefined> = v.strictObject({
|
|
122
|
+
family: v.literal('cone'), slash: v.strictObject({ reachAllowance: v.pipe(scalar, v.maxValue(20)) }),
|
|
123
|
+
gust: v.strictObject({ reach: positive, halfAngle: v.pipe(positive, v.maxValue(Math.PI)),
|
|
124
|
+
push: scalar, lift: scalar, damage: scalar, cooldown: seconds,
|
|
125
|
+
tags: v.pipe(v.array(contactTag), v.maxLength(32)),
|
|
126
|
+
move: v.pipe(v.string(), v.regex(/^[a-z][a-zA-Z0-9.-]*\.[a-zA-Z0-9.-]+$/u), v.maxLength(128)),
|
|
127
|
+
}),
|
|
128
|
+
});
|
|
129
|
+
/** Parsed cone contact parameters; view poses, input and body authority stay outside the profile. */
|
|
130
|
+
export type ConeWeaponProfile = v.InferOutput<typeof ConeWeaponProfileSchema>;
|
|
131
|
+
|
|
132
|
+
/** Bounded numeric weapon profiles. Optional item attachment is additive; native family controllers stay with their owners. */
|
|
133
|
+
export const WeaponProfileSchema: v.GenericSchema<WeaponProfileInput, WeaponProfile> = v.pipe(v.unknown(), v.check(isJsonData, 'JSON-only weapon profile'),
|
|
134
|
+
v.variant('family', [MeleeWeaponProfileSchema, BowWeaponProfileSchema, FirearmWeaponProfileSchema, ThrownWeaponProfileSchema, LashWeaponProfileSchema, ConeWeaponProfileSchema]));
|
|
135
|
+
/** Authored numeric profile, independent of engine, game, renderer and injected view callbacks. */
|
|
136
|
+
|
|
137
|
+
/** Validate all bounds and relationships before allocation or passing data to a native family. */
|
|
138
|
+
export function parseWeaponProfile(input: unknown): WeaponProfile { return v.parse(WeaponProfileSchema, input); }
|
|
139
|
+
|
|
140
|
+
const nativeKey = v.pipe(v.string(), v.regex(/^[a-z][a-zA-Z0-9.-]*$/u), v.maxLength(128));
|
|
141
|
+
const nativeBinding = v.strictObject({ key: nativeKey,
|
|
142
|
+
source: v.picklist(['constant', 'primary', 'secondary', 'time', 'heavy', 'landed', 'target', 'world', 'direction']),
|
|
143
|
+
constant: v.exactOptional(v.pipe(v.number(), v.finite())),
|
|
144
|
+
min: v.exactOptional(v.pipe(v.number(), v.finite())), max: v.exactOptional(v.pipe(v.number(), v.finite())) });
|
|
145
|
+
const nativeHeld = v.strictObject({ action: v.pipe(count, v.maxValue(15)), mode: v.picklist(['replace', 'after']),
|
|
146
|
+
continuation: v.variant('kind', [v.strictObject({ kind: v.literal('step'), id: nativeKey }),
|
|
147
|
+
v.strictObject({ kind: v.literal('field'), key: nativeKey })]) });
|
|
148
|
+
const nativeInput = v.strictObject({ attack: v.pipe(count,v.maxValue(15)), aimActor: v.exactOptional(nativeKey),
|
|
149
|
+
scripts: v.pipe(v.array(v.strictObject({actor:nativeKey,value:v.pipe(count,v.maxValue(65535)),action:v.pipe(count,v.maxValue(15))})),v.maxLength(32)),
|
|
150
|
+
world: v.exactOptional(v.strictObject({light:v.pipe(count,v.maxValue(15)),heavy:v.pipe(count,v.maxValue(15))})) });
|
|
151
|
+
/** Fixed-step melee owner policy. Contacts stay on the item; continuation fields preserve an existing wire contract. */
|
|
152
|
+
export const NativeMeleeRowSchema: v.GenericSchema<NativeMeleeRowsInput, NativeMeleeRows> = v.pipe(v.strictObject({
|
|
153
|
+
step: nativeKey, input: v.exactOptional(nativeInput), held: v.exactOptional(nativeHeld), eye: v.pipe(scalar, v.maxValue(20)), mode: v.picklist(['timed', 'immediate']),
|
|
154
|
+
pitchLimit: v.nullable(v.pipe(positive, v.maxValue(Math.PI))), zeroAim: v.picklist(['retain', 'refuse']),
|
|
155
|
+
body: v.picklist(['volumes', 'none']), liveTargetsOnly: v.boolean(), commandsAfterCool: v.boolean(),
|
|
156
|
+
actions: v.pipe(v.array(v.strictObject({ action: v.pipe(count, v.maxValue(15)), move: v.pipe(count, v.maxValue(15)),
|
|
157
|
+
aim: v.picklist(['selected', 'facing']), hook: v.nullable(v.picklist([3, 4])) })), v.minLength(1), v.maxLength(16)),
|
|
158
|
+
continuation: v.strictObject({ encoding: v.picklist(['json', 'object']), fields: v.pipe(v.array(nativeBinding), v.minLength(1), v.maxLength(16)) }),
|
|
159
|
+
}), v.check(row => new Set(row.actions.map(action => action.action)).size === row.actions.length
|
|
160
|
+
&& new Set(row.continuation.fields.map(field => field.key)).size === row.continuation.fields.length
|
|
161
|
+
&& new Set(row.continuation.fields.map(field => field.source)).size === row.continuation.fields.length
|
|
162
|
+
&& (row.held === undefined || row.actions.some(action => action.action === row.held?.action)
|
|
163
|
+
&& (row.held.continuation.kind === 'step' ? row.held.continuation.id !== row.step : !row.continuation.fields.some(field => field.key === (row.held?.continuation.kind === 'field' ? row.held.continuation.key : undefined))))
|
|
164
|
+
&& (row.input===undefined || [row.input.attack,...row.input.scripts.map(script=>script.action),...(row.input.world===undefined?[]:[row.input.world.light,row.input.world.heavy])].every(id=>row.actions.some(action=>action.action===id))
|
|
165
|
+
&& new Set(row.input.scripts.map(script=>`${script.actor}:${script.value}`)).size===row.input.scripts.length)
|
|
166
|
+
&& row.continuation.fields.every(field => (field.source === 'constant') === (field.constant !== undefined)
|
|
167
|
+
&& (field.min === undefined || field.max === undefined || field.min <= field.max))
|
|
168
|
+
&& (row.mode === 'timed' ? ['primary', 'time', 'heavy', 'landed', 'target', 'world', 'direction'] : ['primary', 'secondary'])
|
|
169
|
+
.every(source => row.continuation.fields.some(field => field.source === source)), 'Unique actions and complete native melee continuation'));
|
|
170
|
+
|
|
171
|
+
/** Admit only the supported native single-bolt or per-round hitscan law, before allocation or RNG. */
|
|
172
|
+
export function parseNativeFirearmProfile(input: unknown, mode: 'bolt' | 'lever'): v.InferOutput<typeof FirearmWeaponProfileSchema> {
|
|
173
|
+
if (mode === 'bolt') {
|
|
174
|
+
const p = v.parse(FirearmWeaponProfileSchema, input);
|
|
175
|
+
if (p.action !== 'bolt' || p.magazine !== 1 || p.reloadMode !== 'single' || p.lever !== undefined ||
|
|
176
|
+
p.projectile.kind !== 'bolt' || p.projectile.delivery !== 'flight' || p.projectile.speed <= 0 || p.projectile.radius <= 0 || p.projectile.muzzle === undefined ||
|
|
177
|
+
p.spreadAxisScale === undefined || p.projectile.flight.windCoupling !== 0 || p.range !== 310 ||
|
|
178
|
+
p.bloomShot !== 0 || p.bloomMax !== 0 || p.movingSpread !== 0 || p.movingAimReduction !== 0) throw new Error('Unsupported native single-bolt profile');
|
|
179
|
+
return p;
|
|
180
|
+
}
|
|
181
|
+
const row = v.parse(FirearmWeaponProfileSchema, input);
|
|
182
|
+
if (row.action !== 'lever' || row.reloadMode !== 'perRound' || row.lever === undefined || row.projectile.kind !== 'bullet' || row.projectile.delivery !== 'hitscan'
|
|
183
|
+
|| row.bloomShot !== 0 || row.bloomMax !== 0 || row.interval !== row.lever.cycleDelay + row.lever.cycleTime
|
|
184
|
+
|| row.projectile.speed !== 0 || row.projectile.radius !== 0 || row.projectile.pool !== 1 || row.projectile.substeps !== 1
|
|
185
|
+
|| row.projectile.flight.gravity !== 0 || row.projectile.flight.drag !== 0 || row.projectile.flight.windCoupling !== 0) throw new Error('Unsupported native per-round profile');
|
|
186
|
+
return { ...row, lever: row.lever };
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// A held firearm's view rows as JSON (game/plugin/heldFirearm HeldModelRows and HeldFirearmRows `presentation`), admitted
|
|
190
|
+
// before the host builds anything; shards keep them in data (Nalati's heldRifle.json, Pine's custom/leverDetails rows).
|
|
191
|
+
// Plain numbers: JSON holds no non-finite value, and a product section's wire schema has no `finite` action.
|
|
192
|
+
const real = v.number(), vec3 = v.tuple([real, real, real]), rowId = v.pipe(v.string(), v.minLength(1), v.maxLength(64));
|
|
193
|
+
const primitive = v.strictObject({ kind: v.picklist(['box', 'cylinder', 'cone', 'sphere', 'torus', 'icosahedron', 'capsule']), args: v.pipe(v.array(real), v.maxLength(8)),
|
|
194
|
+
ops: v.exactOptional(v.array(v.union([v.tuple([v.picklist(['translate', 'scale']), real, real, real]), v.tuple([v.picklist(['rotateX', 'rotateY', 'rotateZ']), real])]))) });
|
|
195
|
+
const look = v.strictObject({ set: v.exactOptional(rowId), normalScale: v.exactOptional(v.tuple([real, real])), color: v.exactOptional(vec3),
|
|
196
|
+
roughness: v.exactOptional(real), metalness: v.exactOptional(real), envMapIntensity: v.exactOptional(real), specularIntensity: v.exactOptional(real) });
|
|
197
|
+
/** A held model's rows (materials, procedural sets, primitive geometry, parts, anchors, glow, brass, root scale). */
|
|
198
|
+
export const HeldModelRowsSchema: v.ObjectSchema<{ readonly materials: v.GenericSchema<HeldModelDataInput['materials'], HeldModelData['materials']>; readonly textures: v.ExactOptionalSchema<v.GenericSchema<Exclude<HeldModelDataInput['textures'], undefined>, Exclude<HeldModelData['textures'], undefined>>, undefined>; readonly primitives: v.ExactOptionalSchema<v.GenericSchema<Exclude<HeldModelDataInput['primitives'], undefined>, Exclude<HeldModelData['primitives'], undefined>>, undefined>; readonly parts: v.GenericSchema<HeldModelDataInput['parts'], HeldModelData['parts']>; readonly anchors: v.GenericSchema<HeldModelDataInput['anchors'], HeldModelData['anchors']>; readonly glow: v.ExactOptionalSchema<v.GenericSchema<Exclude<HeldModelDataInput['glow'], undefined>, Exclude<HeldModelData['glow'], undefined>>, undefined>; readonly brass: v.ExactOptionalSchema<v.GenericSchema<Exclude<HeldModelDataInput['brass'], undefined>, Exclude<HeldModelData['brass'], undefined>>, undefined>; readonly scaleRoot: v.ExactOptionalSchema<v.GenericSchema<Exclude<HeldModelDataInput['scaleRoot'], undefined>, Exclude<HeldModelData['scaleRoot'], undefined>>, undefined>; }, undefined> = v.object({
|
|
199
|
+
materials: v.record(rowId, v.union([v.strictObject({ name: rowId, look }), v.strictObject({ name: rowId, basic: v.strictObject({ color: real, opacity: real }) })])),
|
|
200
|
+
textures: v.exactOptional(v.record(rowId, v.strictObject({ set: v.picklist(['gunmetal', 'anodised', 'polymer', 'walnut', 'brushed-steel', 'leather', 'cord', 'bolt']), repeat: v.exactOptional(v.tuple([real, real])) }))),
|
|
201
|
+
primitives: v.exactOptional(v.record(rowId, v.pipe(v.array(primitive), v.maxLength(512)))),
|
|
202
|
+
parts: v.pipe(v.array(v.strictObject({ id: rowId, geometry: rowId, material: rowId, at: v.exactOptional(v.union([rowId, vec3])), rot: v.exactOptional(vec3),
|
|
203
|
+
sighted: v.exactOptional(v.boolean()), hidden: v.exactOptional(v.boolean()), display: v.exactOptional(v.union([v.boolean(), v.strictObject({ rot: vec3 })])) })), v.maxLength(64)),
|
|
204
|
+
anchors: v.record(rowId, vec3),
|
|
205
|
+
glow: v.exactOptional(v.strictObject({ part: rowId, opacity: real })), brass: v.exactOptional(v.strictObject({ geometry: rowId, material: rowId })), scaleRoot: v.exactOptional(v.boolean()),
|
|
206
|
+
});
|
|
207
|
+
const kick = v.tuple([v.picklist(['right', 'up', 'forward']), real, real]);
|
|
208
|
+
/** A held firearm's presentation: the held camera's timing, the muzzle flash, the ejected case, the tracer, the hit muzzle. */
|
|
209
|
+
export const HeldPresentationSchema: v.GenericSchema<HeldPresentationRowsInput, HeldPresentationRows> = v.strictObject({
|
|
210
|
+
frame: v.strictObject({ clock: v.picklist(['frame', 'world']), fovWhen: v.picklist(['always', 'active']), recoil: v.strictObject({ decay: real, attack: real, recovery: real }),
|
|
211
|
+
lag: v.strictObject({ gain: real, clampYaw: real, clampPitch: real, k: real, c: real }), clampAfter: v.boolean(),
|
|
212
|
+
readout: v.strictObject({ range: real, mask: real, held: v.boolean(), posed: v.boolean() }) }),
|
|
213
|
+
flash: v.strictObject({ shape: v.strictObject({ size: v.exactOptional(real), y: real, z: real, secondaryZ: real, secondaryScale: vec3, lightY: real, lightZ: real }), colour: real }),
|
|
214
|
+
ejection: v.strictObject({ velocity: v.tuple([kick, kick, kick]), spin: v.tuple([vec3, vec3, vec3]), rotation: v.tuple([real, real, real, real]), floorOffset: real }),
|
|
215
|
+
tracer: v.strictObject({ mode: v.picklist(['segment', 'trail']), points: real, width: real, color: vec3, order: real, lifetime: real, fade: real, markerScale: real }),
|
|
216
|
+
hitMuzzle: vec3,
|
|
217
|
+
});
|
|
218
|
+
/** Complete held-firearm playback rows, shared by magazine and lever weapons. */
|
|
219
|
+
export const HeldFirearmRowsSchema: v.GenericSchema<HeldFirearmRowsInput, HeldFirearmRows> = v.object({ ...HeldModelRowsSchema.entries,
|
|
220
|
+
mount: v.picklist(['ownPass', 'shared']), gate: v.exactOptional(rowId), round: v.exactOptional(rowId),
|
|
221
|
+
brass: v.strictObject({ geometry: rowId, material: rowId }), rotationReads: v.exactOptional(v.record(rowId, rowId)),
|
|
222
|
+
playback: v.strictObject({ groups: v.record(rowId, v.array(v.unknown())),
|
|
223
|
+
inputs: v.array(v.strictObject({ group: rowId, rows: v.unknown() })),
|
|
224
|
+
outputs: v.array(v.strictObject({ group: rowId, rows: v.array(v.strictObject({ property: v.string(), target: v.string(), path: v.array(v.string()) })), target: v.picklist(['frame', 'sight', 'values', 'grip']) })),
|
|
225
|
+
schedule: v.strictObject({ frame: rowId, sight: rowId, pose: rowId, action: v.array(rowId), grip: v.array(rowId) }) }),
|
|
226
|
+
presentation: HeldPresentationSchema,
|
|
227
|
+
});
|
|
228
|
+
/** Camera and pool tuning for the existing held-firearm owner. */
|
|
229
|
+
export const HeldFirearmViewSchema: v.GenericSchema<HeldFirearmViewRowsInput, HeldFirearmViewRows> = v.looseObject({ kick: real, port: vec3,
|
|
230
|
+
sight: v.looseObject({ muzzleZ: real }), timing: v.looseObject({ autoReloadDelay: real, autoReloadClose: v.exactOptional(real) }),
|
|
231
|
+
hip: v.strictObject({ px: real, py: real, pz: real, rx: real, ry: real, rz: real, scale: real }),
|
|
232
|
+
flash: v.strictObject({ frames: real, lightTime: real, light: real, size: v.exactOptional(real) }),
|
|
233
|
+
brass: v.strictObject({ count: real, life: real }), tracer: v.strictObject({ count: real, time: real }),
|
|
234
|
+
});
|
|
235
|
+
const firearmPageRows: v.GenericSchema<HeldFirearmRowsInput, HeldFirearmRows> = v.strictObject({ ...HeldModelRowsSchema.entries,
|
|
236
|
+
mount: v.picklist(['ownPass', 'shared']), gate: v.exactOptional(rowId), round: v.exactOptional(rowId),
|
|
237
|
+
brass: v.strictObject({ geometry: rowId, material: rowId }), rotationReads: v.exactOptional(v.record(rowId, rowId)),
|
|
238
|
+
playback: v.strictObject({ groups: v.pipe(v.record(rowId, ClientChannelsSchema), v.maxEntries(32)),
|
|
239
|
+
inputs: v.pipe(v.array(v.strictObject({ group: rowId, rows: ClientChannelInputsSchema })), v.maxLength(32)),
|
|
240
|
+
outputs: v.pipe(v.array(v.strictObject({ group: rowId,
|
|
241
|
+
rows: v.pipe(v.array(v.strictObject({ property: ClientChannelPropertySchema, target: rowId,
|
|
242
|
+
path: v.pipe(v.array(rowId), v.minLength(1), v.maxLength(16)) })), v.maxLength(128)),
|
|
243
|
+
target: v.picklist(['frame', 'sight', 'values', 'grip']) })), v.maxLength(32)),
|
|
244
|
+
schedule: v.strictObject({ frame: rowId, sight: rowId, pose: rowId,
|
|
245
|
+
action: v.pipe(v.array(rowId), v.maxLength(32)), grip: v.pipe(v.array(rowId), v.maxLength(32)) }) }),
|
|
246
|
+
presentation: HeldPresentationSchema,
|
|
247
|
+
});
|
|
248
|
+
/** The full emitted firearm page, including every feel/view field and the
|
|
249
|
+
* original typed numeric programs. Native controller parsers stay unchanged. */
|
|
250
|
+
export const HeldFirearmPageSchema: v.GenericSchema<unknown, HeldFirearmPageRows> = v.pipe(v.unknown(), v.check(isJsonData), v.strictObject({
|
|
251
|
+
feel: v.strictObject({ ads: v.strictObject({ blend: real, frontZ: real, motion: real, muzzleZ: real, nearMargin: real, rearZ: real, sightY: real }),
|
|
252
|
+
brass: v.strictObject({ count: real, life: real }), kick: real, tracer: v.strictObject({ count: real, life: real, width: real }) }),
|
|
253
|
+
view: v.strictObject({ kick: real, port: vec3, sight: v.strictObject({ muzzleZ: real }),
|
|
254
|
+
timing: v.strictObject({ autoReloadDelay: real, autoReloadClose: v.exactOptional(real) }),
|
|
255
|
+
hip: v.strictObject({ px: real, py: real, pz: real, rx: real, ry: real, rz: real, scale: real }),
|
|
256
|
+
flash: v.strictObject({ frames: real, lightTime: real, light: real, size: v.exactOptional(real) }),
|
|
257
|
+
brass: v.strictObject({ count: real, life: real }), tracer: v.strictObject({ count: real, time: real }) }),
|
|
258
|
+
rows: firearmPageRows,
|
|
259
|
+
}));
|
|
260
|
+
|
|
261
|
+
/** Admit complete playback without changing the existing firearm controller. */
|
|
262
|
+
export function parseHeldFirearmRows(input: unknown): v.InferOutput<typeof HeldFirearmRowsSchema> { return v.parse(HeldFirearmRowsSchema, input); }
|
|
263
|
+
/** Admit camera/pool rows before the held owner allocates them. */
|
|
264
|
+
export function parseHeldFirearmView(input: unknown): v.InferOutput<typeof HeldFirearmViewSchema> { return v.parse(HeldFirearmViewSchema, input); }
|
|
265
|
+
|
|
266
|
+
/** Admit a held model's JSON rows before building anything. */
|
|
267
|
+
export function parseHeldModelRows(input: unknown): v.InferOutput<typeof HeldModelRowsSchema> { return v.parse(HeldModelRowsSchema, input); }
|
|
268
|
+
/** Admit a held firearm's presentation rows before building anything. */
|
|
269
|
+
export function parseHeldPresentation(input: unknown): v.InferOutput<typeof HeldPresentationSchema> { return v.parse(HeldPresentationSchema, input); }
|
|
270
|
+
|
|
271
|
+
/** Shared baked bow view rows: borrowed part names, material data and numeric shape samples. */
|
|
272
|
+
const heldBowNumber = v.pipe(v.number(), v.finite());
|
|
273
|
+
const heldBowTriple = v.tuple([heldBowNumber, heldBowNumber, heldBowNumber]), heldBowNumbers = v.pipe(v.array(heldBowNumber), v.maxLength(65536));
|
|
274
|
+
const heldBowPose = v.strictObject({ pos: heldBowTriple, aim: heldBowTriple, cant: heldBowNumber, pitch: heldBowNumber });
|
|
275
|
+
const heldBowPainterly = v.strictObject({ rim: v.exactOptional(heldBowNumber), bands: v.exactOptional(heldBowNumber), shade: v.exactOptional(heldBowNumber), transparent: v.exactOptional(v.boolean()) });
|
|
276
|
+
const heldBowLook = v.strictObject({ set: v.exactOptional(v.string()), normalScale: v.exactOptional(v.tuple([heldBowNumber, heldBowNumber])), color: v.exactOptional(heldBowTriple),
|
|
277
|
+
roughness: heldBowNumber, metalness: heldBowNumber, envMapIntensity: v.exactOptional(heldBowNumber), specularIntensity: v.exactOptional(heldBowNumber),
|
|
278
|
+
anisotropy: v.exactOptional(heldBowNumber), anisotropyRotation: v.exactOptional(heldBowNumber), emissive: v.exactOptional(heldBowNumber), emissiveIntensity: v.exactOptional(heldBowNumber),
|
|
279
|
+
alphaTest: v.exactOptional(heldBowNumber), vertexColors: v.exactOptional(v.boolean()), forceSinglePass: v.exactOptional(v.boolean()), side: v.exactOptional(v.picklist([0, 1, 2])) });
|
|
280
|
+
const heldBowMaterial = v.union([v.strictObject({ name: v.string(), painterly: heldBowPainterly }), v.strictObject({ name: v.string(), look: heldBowLook })]);
|
|
281
|
+
/** Baked bow rows support both lit and painterly material data. */
|
|
282
|
+
export const HeldBowRowsSchema: v.GenericSchema<HeldBowRowsInput, HeldBowRows> = v.strictObject({
|
|
283
|
+
bake: v.strictObject({ look: v.string(), arrow: v.string(), ringU: heldBowNumbers, ringSign: heldBowNumbers, limbVerts: heldBowNumber, dynVerts: heldBowNumber,
|
|
284
|
+
sectionSamples: v.strictObject({ widths: heldBowNumbers, ridges: heldBowNumbers }), lWrist: heldBowTriple, rWrist: heldBowTriple, rHook: heldBowTriple, rWristDir: heldBowTriple }),
|
|
285
|
+
parts: v.strictObject({ stave: v.string(), nocked: v.string(), rightFist: v.string(), leftSleeve: v.string(), rightSleeve: v.string(), arrow: v.string() }),
|
|
286
|
+
materials: v.strictObject({ bow: heldBowMaterial, arrow: heldBowMaterial }),
|
|
287
|
+
arrow: v.strictObject({ gravity: heldBowNumber, drag: heldBowNumber, windCoupling: heldBowNumber, bury: heldBowNumber, recover: heldBowNumber, maxFlying: heldBowNumber, maxStuck: heldBowNumber }),
|
|
288
|
+
wind: v.union([v.strictObject({ base: heldBowNumber, gust: heldBowNumber }), v.strictObject({ field: v.literal('steppe') })]),
|
|
289
|
+
poses: v.strictObject({ rest: heldBowPose, drawn: heldBowPose, restPort: heldBowPose, drawnPort: heldBowPose, aim: heldBowPose, aimPort: heldBowPose }),
|
|
290
|
+
styles: v.exactOptional(v.pipe(v.record(v.string(), v.string()), v.minEntries(1, 'Invalid held bow styles'), v.maxEntries(8, 'Invalid held bow styles'))),
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
/** Complete held-bow binding; executable view strategies belong to the shared host. */
|
|
294
|
+
export const HeldBowDefinitionSchema: v.StrictObjectSchema<{ readonly base: v.GenericSchema<HeldBowDefinitionRowsInput['base'], HeldBowDefinitionRows['base']>; readonly bow: v.GenericSchema<HeldBowDefinitionRowsInput['bow'], HeldBowDefinitionRows['bow']>; }, undefined> = v.strictObject({ base: HeldBowBaseSchema, bow: HeldBowRowsSchema });
|
|
295
|
+
/** The same named-pool document admitted before an entered bow reads it. */
|
|
296
|
+
const heldBowPoolNames = v.pipe(v.array(v.pipe(v.string(), v.maxLength(256))), v.maxLength(32));
|
|
297
|
+
const HeldBowPoolSchema = v.strictObject({ url: v.pipe(v.string(), v.maxLength(512)), parts: heldBowPoolNames, channels: v.exactOptional(v.pipe(v.array(v.strictObject({
|
|
298
|
+
name: v.string(), source: v.string(), width: v.picklist([1, 2, 3, 4]), parts: v.exactOptional(heldBowPoolNames) })), v.maxLength(8))) });
|
|
299
|
+
export const HeldBowFileSchema: v.GenericSchema<HeldBowFileRowsInput, HeldBowFileRows> = v.strictObject({ pool: HeldBowPoolSchema, bow: HeldBowRowsSchema, base: HeldBowBaseSchema });
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
/** Admitted data contracts, independent of validator implementation metadata. */
|
|
303
|
+
export type MeleeWeaponProfileRowsInput = MeleeWeaponProfileRows;
|
|
304
|
+
interface MeleeWeaponProfileRowsFields {
|
|
305
|
+
family: 'melee';
|
|
306
|
+
damage: number;
|
|
307
|
+
reach: number;
|
|
308
|
+
swingScale: number;
|
|
309
|
+
cooldown: number;
|
|
310
|
+
comboGap: number;
|
|
311
|
+
chainLag: number;
|
|
312
|
+
heavyCharge: number;
|
|
313
|
+
moves: {
|
|
314
|
+
combo: ({
|
|
315
|
+
windup: number;
|
|
316
|
+
slashEnd: number;
|
|
317
|
+
total: number;
|
|
318
|
+
damage: number;
|
|
319
|
+
stagger?: number;
|
|
320
|
+
sweep?: number;
|
|
321
|
+
reach?: number;
|
|
322
|
+
})[];
|
|
323
|
+
heavy: {
|
|
324
|
+
windup: number;
|
|
325
|
+
slashEnd: number;
|
|
326
|
+
total: number;
|
|
327
|
+
damage: number;
|
|
328
|
+
stagger?: number;
|
|
329
|
+
sweep?: number;
|
|
330
|
+
reach?: number;
|
|
331
|
+
};
|
|
332
|
+
passes?: {
|
|
333
|
+
left: {
|
|
334
|
+
windup: number;
|
|
335
|
+
slashEnd: number;
|
|
336
|
+
total: number;
|
|
337
|
+
damage: number;
|
|
338
|
+
stagger?: number;
|
|
339
|
+
sweep?: number;
|
|
340
|
+
reach?: number;
|
|
341
|
+
};
|
|
342
|
+
right: {
|
|
343
|
+
windup: number;
|
|
344
|
+
slashEnd: number;
|
|
345
|
+
total: number;
|
|
346
|
+
damage: number;
|
|
347
|
+
stagger?: number;
|
|
348
|
+
sweep?: number;
|
|
349
|
+
reach?: number;
|
|
350
|
+
};
|
|
351
|
+
};
|
|
352
|
+
};
|
|
353
|
+
mounted?: {
|
|
354
|
+
reach: number;
|
|
355
|
+
cooldown: number;
|
|
356
|
+
sense: number;
|
|
357
|
+
chainWindow: number;
|
|
358
|
+
chainStep: number;
|
|
359
|
+
chainMax: number;
|
|
360
|
+
speedDivisor: number;
|
|
361
|
+
behind: number;
|
|
362
|
+
};
|
|
363
|
+
lunge: {
|
|
364
|
+
range: number;
|
|
365
|
+
heavyRange: number;
|
|
366
|
+
cone: number;
|
|
367
|
+
stop: number;
|
|
368
|
+
speed: number;
|
|
369
|
+
minTime: number;
|
|
370
|
+
maxTime: number;
|
|
371
|
+
};
|
|
372
|
+
sweep: {
|
|
373
|
+
rays: number;
|
|
374
|
+
extensions: (number)[];
|
|
375
|
+
step: number;
|
|
376
|
+
maxSamples: number;
|
|
377
|
+
maxHits: number;
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
export type MeleeWeaponProfileRows = { [Key in keyof MeleeWeaponProfileRowsFields]: MeleeWeaponProfileRowsFields[Key] };
|
|
381
|
+
export type BowWeaponProfileRowsInput = BowWeaponProfileRows;
|
|
382
|
+
interface BowWeaponProfileRowsFields {
|
|
383
|
+
family: 'bow';
|
|
384
|
+
quiver: number;
|
|
385
|
+
speedBase: number;
|
|
386
|
+
speedDraw: number;
|
|
387
|
+
damageScale: number;
|
|
388
|
+
draw: {
|
|
389
|
+
drawTime: number;
|
|
390
|
+
letdownTime: number;
|
|
391
|
+
renockTime: number;
|
|
392
|
+
renockEarly: number;
|
|
393
|
+
holdSteady: number;
|
|
394
|
+
holdTire: number;
|
|
395
|
+
tiredTime: number;
|
|
396
|
+
};
|
|
397
|
+
spread: {
|
|
398
|
+
aimMultiplier: number;
|
|
399
|
+
motion: number;
|
|
400
|
+
} & {
|
|
401
|
+
degrees: number;
|
|
402
|
+
radius: 'linear' | 'sqrt';
|
|
403
|
+
axisScale: 1 | 2;
|
|
404
|
+
};
|
|
405
|
+
flight: {
|
|
406
|
+
gravity: number;
|
|
407
|
+
drag: number;
|
|
408
|
+
windCoupling: number;
|
|
409
|
+
};
|
|
410
|
+
muzzle: number;
|
|
411
|
+
pool: number;
|
|
412
|
+
substeps: number;
|
|
413
|
+
lifetime: number;
|
|
414
|
+
}
|
|
415
|
+
export type BowWeaponProfileRows = { [Key in keyof BowWeaponProfileRowsFields]: BowWeaponProfileRowsFields[Key] };
|
|
416
|
+
export type FirearmWeaponProfileRowsInput = FirearmWeaponProfileRows;
|
|
417
|
+
interface FirearmWeaponProfileRowsFields {
|
|
418
|
+
family: 'firearm';
|
|
419
|
+
action: 'semi' | 'lever' | 'bolt';
|
|
420
|
+
magazine: number;
|
|
421
|
+
reserve: number;
|
|
422
|
+
interval: number;
|
|
423
|
+
reload: number;
|
|
424
|
+
reloadMode: 'magazine' | 'perRound' | 'single';
|
|
425
|
+
autoReload: number;
|
|
426
|
+
damageScale: number;
|
|
427
|
+
range: number;
|
|
428
|
+
spreadAds: number;
|
|
429
|
+
spreadHip: number;
|
|
430
|
+
spreadRadius: 'linear' | 'sqrt';
|
|
431
|
+
spreadAxisScale?: 1 | 2 | undefined;
|
|
432
|
+
bloomShot: number;
|
|
433
|
+
bloomMax: number;
|
|
434
|
+
movingSpread: number;
|
|
435
|
+
movingAimReduction: number;
|
|
436
|
+
lever?: {
|
|
437
|
+
cycleDelay: number;
|
|
438
|
+
cycleTime: number;
|
|
439
|
+
reloadIn: number;
|
|
440
|
+
reloadOut: number;
|
|
441
|
+
ejectAt: number;
|
|
442
|
+
cockAt: number;
|
|
443
|
+
autoReloadClose: number;
|
|
444
|
+
};
|
|
445
|
+
projectile: {
|
|
446
|
+
kind: 'bullet' | 'bolt';
|
|
447
|
+
delivery: 'hitscan' | 'flight';
|
|
448
|
+
speed: number;
|
|
449
|
+
radius: number;
|
|
450
|
+
muzzle?: number | undefined;
|
|
451
|
+
flight: {
|
|
452
|
+
gravity: number;
|
|
453
|
+
drag: number;
|
|
454
|
+
windCoupling: number;
|
|
455
|
+
};
|
|
456
|
+
pool: number;
|
|
457
|
+
substeps: number;
|
|
458
|
+
lifetime: number;
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
export type FirearmWeaponProfileRows = { [Key in keyof FirearmWeaponProfileRowsFields]: FirearmWeaponProfileRowsFields[Key] };
|
|
462
|
+
export type ThrownWeaponProfileRowsInput = ThrownWeaponProfileRows;
|
|
463
|
+
interface ThrownWeaponProfileRowsFields {
|
|
464
|
+
family: 'thrown';
|
|
465
|
+
speed: number;
|
|
466
|
+
gravity: number;
|
|
467
|
+
damage: number;
|
|
468
|
+
headMultiplier: number;
|
|
469
|
+
radius: number;
|
|
470
|
+
headOffset: number;
|
|
471
|
+
windup: number;
|
|
472
|
+
release: number;
|
|
473
|
+
recovery: number;
|
|
474
|
+
carried: number;
|
|
475
|
+
pool: number;
|
|
476
|
+
pickupRadius: number;
|
|
477
|
+
pickupHeight: number;
|
|
478
|
+
survive: number;
|
|
479
|
+
arcPoints: number;
|
|
480
|
+
arcAfter: number;
|
|
481
|
+
stagger: number;
|
|
482
|
+
}
|
|
483
|
+
export type ThrownWeaponProfileRows = { [Key in keyof ThrownWeaponProfileRowsFields]: ThrownWeaponProfileRowsFields[Key] };
|
|
484
|
+
export type LashWeaponProfileRowsInput = LashWeaponProfileRows;
|
|
485
|
+
interface LashWeaponProfileRowsFields {
|
|
486
|
+
family: 'lash';
|
|
487
|
+
contact?: {
|
|
488
|
+
chestHeight: number;
|
|
489
|
+
bodyAllowance: number;
|
|
490
|
+
};
|
|
491
|
+
timing: {
|
|
492
|
+
unroll: number;
|
|
493
|
+
second: number;
|
|
494
|
+
show: number;
|
|
495
|
+
stagger: number;
|
|
496
|
+
pull: number;
|
|
497
|
+
pullMaxHp: number;
|
|
498
|
+
};
|
|
499
|
+
moves: {
|
|
500
|
+
light: string;
|
|
501
|
+
first: string;
|
|
502
|
+
second: string;
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
export type LashWeaponProfileRows = { [Key in keyof LashWeaponProfileRowsFields]: LashWeaponProfileRowsFields[Key] };
|
|
506
|
+
interface HeldBowBaseRowsInputFields {
|
|
507
|
+
family: 'bow';
|
|
508
|
+
parent?: string;
|
|
509
|
+
quiver: number;
|
|
510
|
+
swayMax: number;
|
|
511
|
+
speedBase: number;
|
|
512
|
+
speedDraw: number;
|
|
513
|
+
damageScale: number;
|
|
514
|
+
aimZoom: number;
|
|
515
|
+
aimVmZoom: number;
|
|
516
|
+
aimSway: number;
|
|
517
|
+
aimSpread: number;
|
|
518
|
+
aimIn: number;
|
|
519
|
+
arcFrom: number;
|
|
520
|
+
arcColour: number;
|
|
521
|
+
arcMode: 'setting' | 'aim';
|
|
522
|
+
zoomLook: boolean;
|
|
523
|
+
inspectZ: number;
|
|
524
|
+
inspectHidesArms: boolean;
|
|
525
|
+
transparentParts: boolean;
|
|
526
|
+
vmScale: number;
|
|
527
|
+
draw?: v.InferInput<typeof BowWeaponProfileSchema.entries.draw>;
|
|
528
|
+
loose?: {
|
|
529
|
+
aimMultiplier?: number;
|
|
530
|
+
motion: number;
|
|
531
|
+
muzzle: number;
|
|
532
|
+
} & {
|
|
533
|
+
degrees: number;
|
|
534
|
+
radius: 'linear' | 'sqrt';
|
|
535
|
+
axisScale: 1 | 2;
|
|
536
|
+
};
|
|
537
|
+
projectile?: {
|
|
538
|
+
maxFlying: number;
|
|
539
|
+
substeps: number;
|
|
540
|
+
lifetime: number;
|
|
541
|
+
} & {
|
|
542
|
+
gravity: number;
|
|
543
|
+
drag: number;
|
|
544
|
+
windCoupling: number;
|
|
545
|
+
};
|
|
546
|
+
mounted?: {
|
|
547
|
+
drawTime: number;
|
|
548
|
+
rearAngle: number;
|
|
549
|
+
rearDraw: number;
|
|
550
|
+
rearSpread: number;
|
|
551
|
+
arc: boolean;
|
|
552
|
+
gaits: ({
|
|
553
|
+
below: (number) | null;
|
|
554
|
+
spread: number;
|
|
555
|
+
})[];
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
export type HeldBowBaseRowsInput = { [Key in keyof HeldBowBaseRowsInputFields]: HeldBowBaseRowsInputFields[Key] };
|
|
559
|
+
interface HeldBowBaseRowsFields {
|
|
560
|
+
family: 'bow';
|
|
561
|
+
parent?: string;
|
|
562
|
+
quiver: number;
|
|
563
|
+
swayMax: number;
|
|
564
|
+
speedBase: number;
|
|
565
|
+
speedDraw: number;
|
|
566
|
+
damageScale: number;
|
|
567
|
+
aimZoom: number;
|
|
568
|
+
aimVmZoom: number;
|
|
569
|
+
aimSway: number;
|
|
570
|
+
aimSpread: number;
|
|
571
|
+
aimIn: number;
|
|
572
|
+
arcFrom: number;
|
|
573
|
+
arcColour: number;
|
|
574
|
+
arcMode: 'setting' | 'aim';
|
|
575
|
+
zoomLook: boolean;
|
|
576
|
+
inspectZ: number;
|
|
577
|
+
inspectHidesArms: boolean;
|
|
578
|
+
transparentParts: boolean;
|
|
579
|
+
vmScale: number;
|
|
580
|
+
draw?: v.InferOutput<typeof BowWeaponProfileSchema.entries.draw>;
|
|
581
|
+
loose?: {
|
|
582
|
+
aimMultiplier?: number;
|
|
583
|
+
motion: number;
|
|
584
|
+
muzzle: number;
|
|
585
|
+
} & {
|
|
586
|
+
degrees: number;
|
|
587
|
+
radius: 'linear' | 'sqrt';
|
|
588
|
+
axisScale: 1 | 2;
|
|
589
|
+
};
|
|
590
|
+
projectile?: {
|
|
591
|
+
maxFlying: number;
|
|
592
|
+
substeps: number;
|
|
593
|
+
lifetime: number;
|
|
594
|
+
} & {
|
|
595
|
+
gravity: number;
|
|
596
|
+
drag: number;
|
|
597
|
+
windCoupling: number;
|
|
598
|
+
};
|
|
599
|
+
mounted?: {
|
|
600
|
+
drawTime: number;
|
|
601
|
+
rearAngle: number;
|
|
602
|
+
rearDraw: number;
|
|
603
|
+
rearSpread: number;
|
|
604
|
+
arc: boolean;
|
|
605
|
+
gaits: ({
|
|
606
|
+
below: (number) | null;
|
|
607
|
+
spread: number;
|
|
608
|
+
})[];
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
export type HeldBowBaseRows = { [Key in keyof HeldBowBaseRowsFields]: HeldBowBaseRowsFields[Key] };
|
|
612
|
+
export type MeleeContactDataInput = MeleeContactData;
|
|
613
|
+
interface MeleeContactDataFields {
|
|
614
|
+
lane: 'primary' | 'secondary';
|
|
615
|
+
heavy: boolean;
|
|
616
|
+
cooldown: number;
|
|
617
|
+
shape: 'cone' | 'lane';
|
|
618
|
+
reach: number;
|
|
619
|
+
size: number;
|
|
620
|
+
height: number;
|
|
621
|
+
allowance: number;
|
|
622
|
+
lands: (number)[];
|
|
623
|
+
show: number;
|
|
624
|
+
reports: boolean;
|
|
625
|
+
hits: ({
|
|
626
|
+
source: 'owner' | 'env';
|
|
627
|
+
damage: number;
|
|
628
|
+
tags: (`${string}.${string}`)[];
|
|
629
|
+
moveId: string;
|
|
630
|
+
copyVectors: boolean;
|
|
631
|
+
copyTags: boolean;
|
|
632
|
+
reactions: (({
|
|
633
|
+
when: 'before' | 'survived';
|
|
634
|
+
kind: 'impulse';
|
|
635
|
+
direction: 'radial-away' | 'aim-backward';
|
|
636
|
+
speed: number;
|
|
637
|
+
lift: number;
|
|
638
|
+
maxHealth?: number;
|
|
639
|
+
}) | ({
|
|
640
|
+
when: 'before' | 'survived';
|
|
641
|
+
kind: 'stagger';
|
|
642
|
+
strength: number;
|
|
643
|
+
aboveHealth?: number;
|
|
644
|
+
}))[];
|
|
645
|
+
})[];
|
|
646
|
+
}
|
|
647
|
+
export type MeleeContactData = { [Key in keyof MeleeContactDataFields]: MeleeContactDataFields[Key] };
|
|
648
|
+
export type MeleeContactsRowsInput = (MeleeContactDataInput)[];
|
|
649
|
+
export type MeleeContactsRows = (MeleeContactData)[];
|
|
650
|
+
export type WeaponProfileInput = unknown;
|
|
651
|
+
export type WeaponProfile = (MeleeWeaponProfileRows) | (BowWeaponProfileRows) | (FirearmWeaponProfileRows) | (ThrownWeaponProfileRows) | (LashWeaponProfileRows) | ({
|
|
652
|
+
family: 'cone';
|
|
653
|
+
slash: {
|
|
654
|
+
reachAllowance: number;
|
|
655
|
+
};
|
|
656
|
+
gust: {
|
|
657
|
+
reach: number;
|
|
658
|
+
halfAngle: number;
|
|
659
|
+
push: number;
|
|
660
|
+
lift: number;
|
|
661
|
+
damage: number;
|
|
662
|
+
cooldown: number;
|
|
663
|
+
tags: (`${string}.${string}`)[];
|
|
664
|
+
move: string;
|
|
665
|
+
};
|
|
666
|
+
});
|
|
667
|
+
export type NativeMeleeRowsInput = NativeMeleeRows;
|
|
668
|
+
interface NativeMeleeRowsFields {
|
|
669
|
+
step: string;
|
|
670
|
+
input?: {
|
|
671
|
+
attack: number;
|
|
672
|
+
aimActor?: string;
|
|
673
|
+
scripts: ({
|
|
674
|
+
actor: string;
|
|
675
|
+
value: number;
|
|
676
|
+
action: number;
|
|
677
|
+
})[];
|
|
678
|
+
world?: {
|
|
679
|
+
light: number;
|
|
680
|
+
heavy: number;
|
|
681
|
+
};
|
|
682
|
+
};
|
|
683
|
+
held?: {
|
|
684
|
+
action: number;
|
|
685
|
+
mode: 'replace' | 'after';
|
|
686
|
+
continuation: ({
|
|
687
|
+
kind: 'step';
|
|
688
|
+
id: string;
|
|
689
|
+
}) | ({
|
|
690
|
+
kind: 'field';
|
|
691
|
+
key: string;
|
|
692
|
+
});
|
|
693
|
+
};
|
|
694
|
+
eye: number;
|
|
695
|
+
mode: 'timed' | 'immediate';
|
|
696
|
+
pitchLimit: (number) | null;
|
|
697
|
+
zeroAim: 'retain' | 'refuse';
|
|
698
|
+
body: 'volumes' | 'none';
|
|
699
|
+
liveTargetsOnly: boolean;
|
|
700
|
+
commandsAfterCool: boolean;
|
|
701
|
+
actions: ({
|
|
702
|
+
action: number;
|
|
703
|
+
move: number;
|
|
704
|
+
aim: 'selected' | 'facing';
|
|
705
|
+
hook: (3 | 4) | null;
|
|
706
|
+
})[];
|
|
707
|
+
continuation: {
|
|
708
|
+
encoding: 'json' | 'object';
|
|
709
|
+
fields: ({
|
|
710
|
+
key: string;
|
|
711
|
+
source: 'constant' | 'primary' | 'secondary' | 'time' | 'heavy' | 'landed' | 'target' | 'world' | 'direction';
|
|
712
|
+
constant?: number;
|
|
713
|
+
min?: number;
|
|
714
|
+
max?: number;
|
|
715
|
+
})[];
|
|
716
|
+
};
|
|
717
|
+
}
|
|
718
|
+
export type NativeMeleeRows = { [Key in keyof NativeMeleeRowsFields]: NativeMeleeRowsFields[Key] };
|
|
719
|
+
export type HeldModelDataInput = HeldModelData;
|
|
720
|
+
interface HeldModelDataFields {
|
|
721
|
+
materials: Record<string, ({
|
|
722
|
+
name: string;
|
|
723
|
+
look: {
|
|
724
|
+
set?: string;
|
|
725
|
+
normalScale?: [
|
|
726
|
+
number,
|
|
727
|
+
number
|
|
728
|
+
];
|
|
729
|
+
color?: [
|
|
730
|
+
number,
|
|
731
|
+
number,
|
|
732
|
+
number
|
|
733
|
+
];
|
|
734
|
+
roughness?: number;
|
|
735
|
+
metalness?: number;
|
|
736
|
+
envMapIntensity?: number;
|
|
737
|
+
specularIntensity?: number;
|
|
738
|
+
};
|
|
739
|
+
}) | ({
|
|
740
|
+
name: string;
|
|
741
|
+
basic: {
|
|
742
|
+
color: number;
|
|
743
|
+
opacity: number;
|
|
744
|
+
};
|
|
745
|
+
})>;
|
|
746
|
+
textures?: Record<string, {
|
|
747
|
+
set: 'gunmetal' | 'anodised' | 'polymer' | 'walnut' | 'brushed-steel' | 'leather' | 'cord' | 'bolt';
|
|
748
|
+
repeat?: [
|
|
749
|
+
number,
|
|
750
|
+
number
|
|
751
|
+
];
|
|
752
|
+
}>;
|
|
753
|
+
primitives?: Record<string, ({
|
|
754
|
+
kind: 'box' | 'cylinder' | 'cone' | 'sphere' | 'torus' | 'icosahedron' | 'capsule';
|
|
755
|
+
args: (number)[];
|
|
756
|
+
ops?: (([
|
|
757
|
+
'translate' | 'scale',
|
|
758
|
+
number,
|
|
759
|
+
number,
|
|
760
|
+
number
|
|
761
|
+
]) | ([
|
|
762
|
+
'rotateX' | 'rotateY' | 'rotateZ',
|
|
763
|
+
number
|
|
764
|
+
]))[];
|
|
765
|
+
})[]>;
|
|
766
|
+
parts: ({
|
|
767
|
+
id: string;
|
|
768
|
+
geometry: string;
|
|
769
|
+
material: string;
|
|
770
|
+
at?: (string) | ([
|
|
771
|
+
number,
|
|
772
|
+
number,
|
|
773
|
+
number
|
|
774
|
+
]);
|
|
775
|
+
rot?: [
|
|
776
|
+
number,
|
|
777
|
+
number,
|
|
778
|
+
number
|
|
779
|
+
];
|
|
780
|
+
sighted?: boolean;
|
|
781
|
+
hidden?: boolean;
|
|
782
|
+
display?: (boolean) | ({
|
|
783
|
+
rot: [
|
|
784
|
+
number,
|
|
785
|
+
number,
|
|
786
|
+
number
|
|
787
|
+
];
|
|
788
|
+
});
|
|
789
|
+
})[];
|
|
790
|
+
anchors: Record<string, [
|
|
791
|
+
number,
|
|
792
|
+
number,
|
|
793
|
+
number
|
|
794
|
+
]>;
|
|
795
|
+
glow?: {
|
|
796
|
+
part: string;
|
|
797
|
+
opacity: number;
|
|
798
|
+
};
|
|
799
|
+
brass?: {
|
|
800
|
+
geometry: string;
|
|
801
|
+
material: string;
|
|
802
|
+
};
|
|
803
|
+
scaleRoot?: boolean;
|
|
804
|
+
}
|
|
805
|
+
export type HeldModelData = { [Key in keyof HeldModelDataFields]: HeldModelDataFields[Key] };
|
|
806
|
+
export type HeldPresentationRowsInput = HeldPresentationRows;
|
|
807
|
+
interface HeldPresentationRowsFields {
|
|
808
|
+
frame: {
|
|
809
|
+
clock: 'frame' | 'world';
|
|
810
|
+
fovWhen: 'always' | 'active';
|
|
811
|
+
recoil: {
|
|
812
|
+
decay: number;
|
|
813
|
+
attack: number;
|
|
814
|
+
recovery: number;
|
|
815
|
+
};
|
|
816
|
+
lag: {
|
|
817
|
+
gain: number;
|
|
818
|
+
clampYaw: number;
|
|
819
|
+
clampPitch: number;
|
|
820
|
+
k: number;
|
|
821
|
+
c: number;
|
|
822
|
+
};
|
|
823
|
+
clampAfter: boolean;
|
|
824
|
+
readout: {
|
|
825
|
+
range: number;
|
|
826
|
+
mask: number;
|
|
827
|
+
held: boolean;
|
|
828
|
+
posed: boolean;
|
|
829
|
+
};
|
|
830
|
+
};
|
|
831
|
+
flash: {
|
|
832
|
+
shape: {
|
|
833
|
+
size?: number;
|
|
834
|
+
y: number;
|
|
835
|
+
z: number;
|
|
836
|
+
secondaryZ: number;
|
|
837
|
+
secondaryScale: [
|
|
838
|
+
number,
|
|
839
|
+
number,
|
|
840
|
+
number
|
|
841
|
+
];
|
|
842
|
+
lightY: number;
|
|
843
|
+
lightZ: number;
|
|
844
|
+
};
|
|
845
|
+
colour: number;
|
|
846
|
+
};
|
|
847
|
+
ejection: {
|
|
848
|
+
velocity: [
|
|
849
|
+
[
|
|
850
|
+
'right' | 'up' | 'forward',
|
|
851
|
+
number,
|
|
852
|
+
number
|
|
853
|
+
],
|
|
854
|
+
[
|
|
855
|
+
'right' | 'up' | 'forward',
|
|
856
|
+
number,
|
|
857
|
+
number
|
|
858
|
+
],
|
|
859
|
+
[
|
|
860
|
+
'right' | 'up' | 'forward',
|
|
861
|
+
number,
|
|
862
|
+
number
|
|
863
|
+
]
|
|
864
|
+
];
|
|
865
|
+
spin: [
|
|
866
|
+
[
|
|
867
|
+
number,
|
|
868
|
+
number,
|
|
869
|
+
number
|
|
870
|
+
],
|
|
871
|
+
[
|
|
872
|
+
number,
|
|
873
|
+
number,
|
|
874
|
+
number
|
|
875
|
+
],
|
|
876
|
+
[
|
|
877
|
+
number,
|
|
878
|
+
number,
|
|
879
|
+
number
|
|
880
|
+
]
|
|
881
|
+
];
|
|
882
|
+
rotation: [
|
|
883
|
+
number,
|
|
884
|
+
number,
|
|
885
|
+
number,
|
|
886
|
+
number
|
|
887
|
+
];
|
|
888
|
+
floorOffset: number;
|
|
889
|
+
};
|
|
890
|
+
tracer: {
|
|
891
|
+
mode: 'segment' | 'trail';
|
|
892
|
+
points: number;
|
|
893
|
+
width: number;
|
|
894
|
+
color: [
|
|
895
|
+
number,
|
|
896
|
+
number,
|
|
897
|
+
number
|
|
898
|
+
];
|
|
899
|
+
order: number;
|
|
900
|
+
lifetime: number;
|
|
901
|
+
fade: number;
|
|
902
|
+
markerScale: number;
|
|
903
|
+
};
|
|
904
|
+
hitMuzzle: [
|
|
905
|
+
number,
|
|
906
|
+
number,
|
|
907
|
+
number
|
|
908
|
+
];
|
|
909
|
+
}
|
|
910
|
+
export type HeldPresentationRows = { [Key in keyof HeldPresentationRowsFields]: HeldPresentationRowsFields[Key] };
|
|
911
|
+
export type HeldFirearmRowsInput = {
|
|
912
|
+
mount: 'ownPass' | 'shared';
|
|
913
|
+
gate?: string;
|
|
914
|
+
round?: string;
|
|
915
|
+
brass: {
|
|
916
|
+
geometry: string;
|
|
917
|
+
material: string;
|
|
918
|
+
};
|
|
919
|
+
rotationReads?: Record<string, string>;
|
|
920
|
+
playback: {
|
|
921
|
+
groups: Record<string, (unknown)[]>;
|
|
922
|
+
inputs: ({
|
|
923
|
+
group: string;
|
|
924
|
+
rows: unknown;
|
|
925
|
+
})[];
|
|
926
|
+
outputs: ({
|
|
927
|
+
group: string;
|
|
928
|
+
rows: ({
|
|
929
|
+
property: string;
|
|
930
|
+
target: string;
|
|
931
|
+
path: (string)[];
|
|
932
|
+
})[];
|
|
933
|
+
target: 'frame' | 'sight' | 'values' | 'grip';
|
|
934
|
+
})[];
|
|
935
|
+
schedule: {
|
|
936
|
+
frame: string;
|
|
937
|
+
sight: string;
|
|
938
|
+
pose: string;
|
|
939
|
+
action: (string)[];
|
|
940
|
+
grip: (string)[];
|
|
941
|
+
};
|
|
942
|
+
};
|
|
943
|
+
presentation: HeldPresentationRowsInput;
|
|
944
|
+
} & HeldModelDataInput;
|
|
945
|
+
export type HeldFirearmRows = {
|
|
946
|
+
mount: 'ownPass' | 'shared';
|
|
947
|
+
gate?: string;
|
|
948
|
+
round?: string;
|
|
949
|
+
brass: {
|
|
950
|
+
geometry: string;
|
|
951
|
+
material: string;
|
|
952
|
+
};
|
|
953
|
+
rotationReads?: Record<string, string>;
|
|
954
|
+
playback: {
|
|
955
|
+
groups: Record<string, (unknown)[]>;
|
|
956
|
+
inputs: ({
|
|
957
|
+
group: string;
|
|
958
|
+
rows: unknown;
|
|
959
|
+
})[];
|
|
960
|
+
outputs: ({
|
|
961
|
+
group: string;
|
|
962
|
+
rows: ({
|
|
963
|
+
property: string;
|
|
964
|
+
target: string;
|
|
965
|
+
path: (string)[];
|
|
966
|
+
})[];
|
|
967
|
+
target: 'frame' | 'sight' | 'values' | 'grip';
|
|
968
|
+
})[];
|
|
969
|
+
schedule: {
|
|
970
|
+
frame: string;
|
|
971
|
+
sight: string;
|
|
972
|
+
pose: string;
|
|
973
|
+
action: (string)[];
|
|
974
|
+
grip: (string)[];
|
|
975
|
+
};
|
|
976
|
+
};
|
|
977
|
+
presentation: HeldPresentationRows;
|
|
978
|
+
} & HeldModelData;
|
|
979
|
+
export type HeldFirearmViewRowsInput = HeldFirearmViewRows;
|
|
980
|
+
export type HeldFirearmViewRows = ({
|
|
981
|
+
kick: number;
|
|
982
|
+
port: [
|
|
983
|
+
number,
|
|
984
|
+
number,
|
|
985
|
+
number
|
|
986
|
+
];
|
|
987
|
+
sight: ({
|
|
988
|
+
muzzleZ: number;
|
|
989
|
+
}) & Record<string, unknown>;
|
|
990
|
+
timing: ({
|
|
991
|
+
autoReloadDelay: number;
|
|
992
|
+
autoReloadClose?: number;
|
|
993
|
+
}) & Record<string, unknown>;
|
|
994
|
+
hip: {
|
|
995
|
+
px: number;
|
|
996
|
+
py: number;
|
|
997
|
+
pz: number;
|
|
998
|
+
rx: number;
|
|
999
|
+
ry: number;
|
|
1000
|
+
rz: number;
|
|
1001
|
+
scale: number;
|
|
1002
|
+
};
|
|
1003
|
+
flash: {
|
|
1004
|
+
frames: number;
|
|
1005
|
+
lightTime: number;
|
|
1006
|
+
light: number;
|
|
1007
|
+
size?: number;
|
|
1008
|
+
};
|
|
1009
|
+
brass: {
|
|
1010
|
+
count: number;
|
|
1011
|
+
life: number;
|
|
1012
|
+
};
|
|
1013
|
+
tracer: {
|
|
1014
|
+
count: number;
|
|
1015
|
+
time: number;
|
|
1016
|
+
};
|
|
1017
|
+
}) & Record<string, unknown>;
|
|
1018
|
+
interface HeldFirearmPageRowsInputFields {
|
|
1019
|
+
feel: ({
|
|
1020
|
+
ads: ({
|
|
1021
|
+
blend: number;
|
|
1022
|
+
}) & Record<string, unknown>;
|
|
1023
|
+
}) & Record<string, unknown>;
|
|
1024
|
+
view: HeldFirearmViewRowsInput;
|
|
1025
|
+
rows: HeldFirearmRowsInput;
|
|
1026
|
+
}
|
|
1027
|
+
export type HeldFirearmPageRowsInput = { [Key in keyof HeldFirearmPageRowsInputFields]: HeldFirearmPageRowsInputFields[Key] };
|
|
1028
|
+
interface HeldFirearmPageRowsFields {
|
|
1029
|
+
feel: ({
|
|
1030
|
+
ads: ({
|
|
1031
|
+
blend: number;
|
|
1032
|
+
}) & Record<string, unknown>;
|
|
1033
|
+
}) & Record<string, unknown>;
|
|
1034
|
+
view: HeldFirearmViewRows;
|
|
1035
|
+
rows: HeldFirearmRows;
|
|
1036
|
+
}
|
|
1037
|
+
export type HeldFirearmPageRows = { [Key in keyof HeldFirearmPageRowsFields]: HeldFirearmPageRowsFields[Key] };
|
|
1038
|
+
export type HeldBowRowsInput = HeldBowRows;
|
|
1039
|
+
interface HeldBowRowsFields {
|
|
1040
|
+
bake: {
|
|
1041
|
+
look: string;
|
|
1042
|
+
arrow: string;
|
|
1043
|
+
ringU: (number)[];
|
|
1044
|
+
ringSign: (number)[];
|
|
1045
|
+
limbVerts: number;
|
|
1046
|
+
dynVerts: number;
|
|
1047
|
+
sectionSamples: {
|
|
1048
|
+
widths: (number)[];
|
|
1049
|
+
ridges: (number)[];
|
|
1050
|
+
};
|
|
1051
|
+
lWrist: [
|
|
1052
|
+
number,
|
|
1053
|
+
number,
|
|
1054
|
+
number
|
|
1055
|
+
];
|
|
1056
|
+
rWrist: [
|
|
1057
|
+
number,
|
|
1058
|
+
number,
|
|
1059
|
+
number
|
|
1060
|
+
];
|
|
1061
|
+
rHook: [
|
|
1062
|
+
number,
|
|
1063
|
+
number,
|
|
1064
|
+
number
|
|
1065
|
+
];
|
|
1066
|
+
rWristDir: [
|
|
1067
|
+
number,
|
|
1068
|
+
number,
|
|
1069
|
+
number
|
|
1070
|
+
];
|
|
1071
|
+
};
|
|
1072
|
+
parts: {
|
|
1073
|
+
stave: string;
|
|
1074
|
+
nocked: string;
|
|
1075
|
+
rightFist: string;
|
|
1076
|
+
leftSleeve: string;
|
|
1077
|
+
rightSleeve: string;
|
|
1078
|
+
arrow: string;
|
|
1079
|
+
};
|
|
1080
|
+
materials: {
|
|
1081
|
+
bow: ({
|
|
1082
|
+
name: string;
|
|
1083
|
+
painterly: {
|
|
1084
|
+
rim?: number;
|
|
1085
|
+
bands?: number;
|
|
1086
|
+
shade?: number;
|
|
1087
|
+
transparent?: boolean;
|
|
1088
|
+
};
|
|
1089
|
+
}) | ({
|
|
1090
|
+
name: string;
|
|
1091
|
+
look: {
|
|
1092
|
+
set?: string;
|
|
1093
|
+
normalScale?: [
|
|
1094
|
+
number,
|
|
1095
|
+
number
|
|
1096
|
+
];
|
|
1097
|
+
color?: [
|
|
1098
|
+
number,
|
|
1099
|
+
number,
|
|
1100
|
+
number
|
|
1101
|
+
];
|
|
1102
|
+
roughness: number;
|
|
1103
|
+
metalness: number;
|
|
1104
|
+
envMapIntensity?: number;
|
|
1105
|
+
specularIntensity?: number;
|
|
1106
|
+
anisotropy?: number;
|
|
1107
|
+
anisotropyRotation?: number;
|
|
1108
|
+
emissive?: number;
|
|
1109
|
+
emissiveIntensity?: number;
|
|
1110
|
+
alphaTest?: number;
|
|
1111
|
+
vertexColors?: boolean;
|
|
1112
|
+
forceSinglePass?: boolean;
|
|
1113
|
+
side?: 0 | 1 | 2;
|
|
1114
|
+
};
|
|
1115
|
+
});
|
|
1116
|
+
arrow: ({
|
|
1117
|
+
name: string;
|
|
1118
|
+
painterly: {
|
|
1119
|
+
rim?: number;
|
|
1120
|
+
bands?: number;
|
|
1121
|
+
shade?: number;
|
|
1122
|
+
transparent?: boolean;
|
|
1123
|
+
};
|
|
1124
|
+
}) | ({
|
|
1125
|
+
name: string;
|
|
1126
|
+
look: {
|
|
1127
|
+
set?: string;
|
|
1128
|
+
normalScale?: [
|
|
1129
|
+
number,
|
|
1130
|
+
number
|
|
1131
|
+
];
|
|
1132
|
+
color?: [
|
|
1133
|
+
number,
|
|
1134
|
+
number,
|
|
1135
|
+
number
|
|
1136
|
+
];
|
|
1137
|
+
roughness: number;
|
|
1138
|
+
metalness: number;
|
|
1139
|
+
envMapIntensity?: number;
|
|
1140
|
+
specularIntensity?: number;
|
|
1141
|
+
anisotropy?: number;
|
|
1142
|
+
anisotropyRotation?: number;
|
|
1143
|
+
emissive?: number;
|
|
1144
|
+
emissiveIntensity?: number;
|
|
1145
|
+
alphaTest?: number;
|
|
1146
|
+
vertexColors?: boolean;
|
|
1147
|
+
forceSinglePass?: boolean;
|
|
1148
|
+
side?: 0 | 1 | 2;
|
|
1149
|
+
};
|
|
1150
|
+
});
|
|
1151
|
+
};
|
|
1152
|
+
arrow: {
|
|
1153
|
+
gravity: number;
|
|
1154
|
+
drag: number;
|
|
1155
|
+
windCoupling: number;
|
|
1156
|
+
bury: number;
|
|
1157
|
+
recover: number;
|
|
1158
|
+
maxFlying: number;
|
|
1159
|
+
maxStuck: number;
|
|
1160
|
+
};
|
|
1161
|
+
wind: ({
|
|
1162
|
+
base: number;
|
|
1163
|
+
gust: number;
|
|
1164
|
+
}) | ({
|
|
1165
|
+
field: 'steppe';
|
|
1166
|
+
});
|
|
1167
|
+
poses: {
|
|
1168
|
+
rest: {
|
|
1169
|
+
pos: [
|
|
1170
|
+
number,
|
|
1171
|
+
number,
|
|
1172
|
+
number
|
|
1173
|
+
];
|
|
1174
|
+
aim: [
|
|
1175
|
+
number,
|
|
1176
|
+
number,
|
|
1177
|
+
number
|
|
1178
|
+
];
|
|
1179
|
+
cant: number;
|
|
1180
|
+
pitch: number;
|
|
1181
|
+
};
|
|
1182
|
+
drawn: {
|
|
1183
|
+
pos: [
|
|
1184
|
+
number,
|
|
1185
|
+
number,
|
|
1186
|
+
number
|
|
1187
|
+
];
|
|
1188
|
+
aim: [
|
|
1189
|
+
number,
|
|
1190
|
+
number,
|
|
1191
|
+
number
|
|
1192
|
+
];
|
|
1193
|
+
cant: number;
|
|
1194
|
+
pitch: number;
|
|
1195
|
+
};
|
|
1196
|
+
restPort: {
|
|
1197
|
+
pos: [
|
|
1198
|
+
number,
|
|
1199
|
+
number,
|
|
1200
|
+
number
|
|
1201
|
+
];
|
|
1202
|
+
aim: [
|
|
1203
|
+
number,
|
|
1204
|
+
number,
|
|
1205
|
+
number
|
|
1206
|
+
];
|
|
1207
|
+
cant: number;
|
|
1208
|
+
pitch: number;
|
|
1209
|
+
};
|
|
1210
|
+
drawnPort: {
|
|
1211
|
+
pos: [
|
|
1212
|
+
number,
|
|
1213
|
+
number,
|
|
1214
|
+
number
|
|
1215
|
+
];
|
|
1216
|
+
aim: [
|
|
1217
|
+
number,
|
|
1218
|
+
number,
|
|
1219
|
+
number
|
|
1220
|
+
];
|
|
1221
|
+
cant: number;
|
|
1222
|
+
pitch: number;
|
|
1223
|
+
};
|
|
1224
|
+
aim: {
|
|
1225
|
+
pos: [
|
|
1226
|
+
number,
|
|
1227
|
+
number,
|
|
1228
|
+
number
|
|
1229
|
+
];
|
|
1230
|
+
aim: [
|
|
1231
|
+
number,
|
|
1232
|
+
number,
|
|
1233
|
+
number
|
|
1234
|
+
];
|
|
1235
|
+
cant: number;
|
|
1236
|
+
pitch: number;
|
|
1237
|
+
};
|
|
1238
|
+
aimPort: {
|
|
1239
|
+
pos: [
|
|
1240
|
+
number,
|
|
1241
|
+
number,
|
|
1242
|
+
number
|
|
1243
|
+
];
|
|
1244
|
+
aim: [
|
|
1245
|
+
number,
|
|
1246
|
+
number,
|
|
1247
|
+
number
|
|
1248
|
+
];
|
|
1249
|
+
cant: number;
|
|
1250
|
+
pitch: number;
|
|
1251
|
+
};
|
|
1252
|
+
};
|
|
1253
|
+
styles?: Record<string, string>;
|
|
1254
|
+
}
|
|
1255
|
+
export type HeldBowRows = { [Key in keyof HeldBowRowsFields]: HeldBowRowsFields[Key] };
|
|
1256
|
+
interface HeldBowDefinitionRowsInputFields {
|
|
1257
|
+
base: HeldBowBaseRowsInput;
|
|
1258
|
+
bow: HeldBowRowsInput;
|
|
1259
|
+
}
|
|
1260
|
+
export type HeldBowDefinitionRowsInput = { [Key in keyof HeldBowDefinitionRowsInputFields]: HeldBowDefinitionRowsInputFields[Key] };
|
|
1261
|
+
interface HeldBowDefinitionRowsFields {
|
|
1262
|
+
base: HeldBowBaseRows;
|
|
1263
|
+
bow: HeldBowRows;
|
|
1264
|
+
}
|
|
1265
|
+
export type HeldBowDefinitionRows = { [Key in keyof HeldBowDefinitionRowsFields]: HeldBowDefinitionRowsFields[Key] };
|
|
1266
|
+
interface HeldBowFileRowsInputFields {
|
|
1267
|
+
pool: {
|
|
1268
|
+
url: string;
|
|
1269
|
+
parts: (string)[];
|
|
1270
|
+
channels?: ({
|
|
1271
|
+
name: string;
|
|
1272
|
+
source: string;
|
|
1273
|
+
width: 1 | 2 | 3 | 4;
|
|
1274
|
+
parts?: (string)[];
|
|
1275
|
+
})[];
|
|
1276
|
+
};
|
|
1277
|
+
bow: HeldBowRowsInput;
|
|
1278
|
+
base: HeldBowBaseRowsInput;
|
|
1279
|
+
}
|
|
1280
|
+
export type HeldBowFileRowsInput = { [Key in keyof HeldBowFileRowsInputFields]: HeldBowFileRowsInputFields[Key] };
|
|
1281
|
+
interface HeldBowFileRowsFields {
|
|
1282
|
+
pool: {
|
|
1283
|
+
url: string;
|
|
1284
|
+
parts: (string)[];
|
|
1285
|
+
channels?: ({
|
|
1286
|
+
name: string;
|
|
1287
|
+
source: string;
|
|
1288
|
+
width: 1 | 2 | 3 | 4;
|
|
1289
|
+
parts?: (string)[];
|
|
1290
|
+
})[];
|
|
1291
|
+
};
|
|
1292
|
+
bow: HeldBowRows;
|
|
1293
|
+
base: HeldBowBaseRows;
|
|
1294
|
+
}
|
|
1295
|
+
export type HeldBowFileRows = { [Key in keyof HeldBowFileRowsFields]: HeldBowFileRowsFields[Key] };
|
|
1296
|
+
|
|
1297
|
+
/** Admitted data contracts, independent of validator implementation metadata. */
|
|
1298
|
+
export type ConeWeaponProfileRowsInput = ConeWeaponProfileRows;
|
|
1299
|
+
interface ConeWeaponProfileRowsFields {
|
|
1300
|
+
family: 'cone';
|
|
1301
|
+
slash: {
|
|
1302
|
+
reachAllowance: number;
|
|
1303
|
+
};
|
|
1304
|
+
gust: {
|
|
1305
|
+
reach: number;
|
|
1306
|
+
halfAngle: number;
|
|
1307
|
+
push: number;
|
|
1308
|
+
lift: number;
|
|
1309
|
+
damage: number;
|
|
1310
|
+
cooldown: number;
|
|
1311
|
+
tags: (`${string}.${string}`)[];
|
|
1312
|
+
move: string;
|
|
1313
|
+
};
|
|
1314
|
+
}
|
|
1315
|
+
export type ConeWeaponProfileRows = { [Key in keyof ConeWeaponProfileRowsFields]: ConeWeaponProfileRowsFields[Key] };
|