@cimplify/sdk 0.108.0 → 0.110.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/LICENSE +21 -0
  2. package/dist/advanced.d.mts +4 -3
  3. package/dist/advanced.d.ts +4 -3
  4. package/dist/advanced.js +24 -24
  5. package/dist/advanced.mjs +5 -5
  6. package/dist/animation-4EXBXRVX.js +27 -0
  7. package/dist/animation-6DICNWUP.mjs +6 -0
  8. package/dist/audio-DhvyjqdA.d.mts +249 -0
  9. package/dist/audio-m0w8cnxq.d.ts +249 -0
  10. package/dist/avatars.d.mts +110 -0
  11. package/dist/avatars.d.ts +110 -0
  12. package/dist/avatars.js +82 -0
  13. package/dist/avatars.mjs +5 -0
  14. package/dist/backend-gUCzs5Kg.d.mts +3866 -0
  15. package/dist/backend-gUCzs5Kg.d.ts +3866 -0
  16. package/dist/{catalogue-B4eLL8Mi.d.ts → catalogue-CPTMyBUz.d.mts} +109 -221
  17. package/dist/catalogue-DzrTXP3v.d.mts +541 -0
  18. package/dist/catalogue-DzrTXP3v.d.ts +541 -0
  19. package/dist/{catalogue-OT89_Ifs.d.mts → catalogue-OTuS5zp-.d.ts} +109 -221
  20. package/dist/chunk-22BD3RHN.mjs +1809 -0
  21. package/dist/chunk-25T4JHEA.mjs +21 -0
  22. package/dist/chunk-2AQ237Y4.js +508 -0
  23. package/dist/chunk-2IC4H6OV.mjs +48 -0
  24. package/dist/chunk-2LHLG4OB.mjs +71 -0
  25. package/dist/chunk-2O2CG465.js +1709 -0
  26. package/dist/chunk-2Q4DTHXK.js +316 -0
  27. package/dist/chunk-2QTQ6BUH.mjs +46 -0
  28. package/dist/chunk-2UN4SFLR.mjs +100 -0
  29. package/dist/chunk-2V75I7K3.js +454 -0
  30. package/dist/chunk-2V7IL4HC.js +10 -0
  31. package/dist/chunk-34XBXUMW.js +296 -0
  32. package/dist/chunk-3C4C654I.js +71 -0
  33. package/dist/chunk-3DAD2LDF.mjs +72 -0
  34. package/dist/chunk-3GXH2NFD.mjs +4 -0
  35. package/dist/chunk-3O47ZFW3.js +961 -0
  36. package/dist/chunk-3OY3VYNF.mjs +11 -0
  37. package/dist/chunk-3S6WPBZL.js +2936 -0
  38. package/dist/chunk-3TUOUP5T.js +399 -0
  39. package/dist/chunk-3VEH23I5.mjs +1380 -0
  40. package/dist/chunk-3ZYSAW2T.mjs +263 -0
  41. package/dist/chunk-4ANVF274.js +103 -0
  42. package/dist/chunk-4C7I3ELN.js +388 -0
  43. package/dist/chunk-4DYKAYFO.mjs +8 -0
  44. package/dist/chunk-4ZDR72SG.js +329 -0
  45. package/dist/chunk-52YS45RR.js +1066 -0
  46. package/dist/chunk-5325XSCH.js +107 -0
  47. package/dist/chunk-5AD5X6AV.js +13 -0
  48. package/dist/chunk-5BYDGGWO.mjs +197 -0
  49. package/dist/chunk-5C3C7VDM.mjs +55 -0
  50. package/dist/chunk-5HFMY3D7.js +660 -0
  51. package/dist/chunk-5LH2QN3T.js +1862 -0
  52. package/dist/chunk-5PJEXSOW.js +44 -0
  53. package/dist/chunk-5SXDH3Y7.js +90 -0
  54. package/dist/chunk-5YFBGGCK.mjs +502 -0
  55. package/dist/chunk-5YWN6H5Q.mjs +133 -0
  56. package/dist/chunk-66QP3SMN.js +402 -0
  57. package/dist/chunk-6DAEZKIG.mjs +385 -0
  58. package/dist/chunk-6DATW7TB.mjs +420 -0
  59. package/dist/{chunk-JRGK3NXR.mjs → chunk-6ETDAU62.mjs} +72 -212
  60. package/dist/chunk-6H254EVP.mjs +178 -0
  61. package/dist/chunk-6PFNJPBJ.mjs +820 -0
  62. package/dist/chunk-6PJWXIFX.mjs +357 -0
  63. package/dist/chunk-6SWKWCMS.js +80 -0
  64. package/dist/chunk-6VVXXX7S.js +808 -0
  65. package/dist/chunk-6WUBSMTX.js +1403 -0
  66. package/dist/chunk-73SGZLAQ.mjs +35 -0
  67. package/dist/chunk-76L2V6KD.mjs +4 -0
  68. package/dist/chunk-7AAIAVAA.js +1531 -0
  69. package/dist/chunk-7ARSJPV3.mjs +93 -0
  70. package/dist/chunk-7BHW5GTC.mjs +1234 -0
  71. package/dist/chunk-7DQSDKDU.js +6 -0
  72. package/dist/chunk-7IQQQENP.mjs +401 -0
  73. package/dist/chunk-7KFTYENS.js +11357 -0
  74. package/dist/chunk-7SM6XSPZ.js +3171 -0
  75. package/dist/chunk-7SXOHAIR.mjs +28 -0
  76. package/dist/chunk-A2MAX6S4.js +90 -0
  77. package/dist/chunk-A33OORT7.mjs +1530 -0
  78. package/dist/{chunk-U6ACF76H.mjs → chunk-A36JRXXH.mjs} +1075 -1845
  79. package/dist/chunk-A7BU3BK4.js +52 -0
  80. package/dist/chunk-A7MQSN2V.mjs +77 -0
  81. package/dist/chunk-A7V4L2IT.mjs +416 -0
  82. package/dist/chunk-AABEK6XU.js +226 -0
  83. package/dist/chunk-AGV33FWC.mjs +5005 -0
  84. package/dist/chunk-AHNR3BXI.js +108 -0
  85. package/dist/chunk-AQ5RLBU2.mjs +286 -0
  86. package/dist/chunk-AQOE6WCG.js +1270 -0
  87. package/dist/chunk-ATAWRACV.mjs +62 -0
  88. package/dist/chunk-ATCURNUV.js +14 -0
  89. package/dist/chunk-AWPV33OO.js +6 -0
  90. package/dist/chunk-AYJPHKYV.js +337 -0
  91. package/dist/chunk-AZ5BGWHB.js +162 -0
  92. package/dist/chunk-AZAXD44P.js +1373 -0
  93. package/dist/chunk-BBGKQIJJ.mjs +406 -0
  94. package/dist/chunk-BP4JLSUA.js +1453 -0
  95. package/dist/{chunk-SUCE7FWA.mjs → chunk-BTUSVHIE.mjs} +539 -978
  96. package/dist/chunk-BU6OK542.mjs +818 -0
  97. package/dist/chunk-CVSRWM6W.js +418 -0
  98. package/dist/chunk-CYBMFMJD.mjs +247 -0
  99. package/dist/chunk-DDJLDOUX.mjs +217 -0
  100. package/dist/{chunk-V32BCG7M.js → chunk-DFZWHNRG.js} +75 -215
  101. package/dist/chunk-DJ2C7AVG.js +644 -0
  102. package/dist/chunk-DS2VU4WW.mjs +102 -0
  103. package/dist/chunk-DSAG7T5P.js +7290 -0
  104. package/dist/chunk-E2QPPH7I.js +327 -0
  105. package/dist/chunk-E65WCTIG.mjs +1187 -0
  106. package/dist/{chunk-33VCYWVL.mjs → chunk-E6QQKDNE.mjs} +30 -42
  107. package/dist/chunk-ECDK6QBF.mjs +981 -0
  108. package/dist/chunk-EIB4OWVQ.mjs +620 -0
  109. package/dist/chunk-EQUZYCGO.js +250 -0
  110. package/dist/chunk-F3UJ6ZRM.mjs +313 -0
  111. package/dist/chunk-F63N2ZTQ.js +7023 -0
  112. package/dist/chunk-F6XRYEM3.mjs +26 -0
  113. package/dist/chunk-FE6VCE4K.js +5030 -0
  114. package/dist/chunk-FLWD6GRR.js +1372 -0
  115. package/dist/chunk-FQBFWJBS.mjs +110 -0
  116. package/dist/chunk-FXVJ2HFU.js +26 -0
  117. package/dist/chunk-FZMQMQBW.js +312 -0
  118. package/dist/chunk-G3EEC44R.js +53 -0
  119. package/dist/{chunk-KG3WT4PR.mjs → chunk-GCKWKLZF.mjs} +73 -104
  120. package/dist/chunk-GCX7TY4D.mjs +6826 -0
  121. package/dist/chunk-GDB6TCSD.js +450 -0
  122. package/dist/chunk-GDCV4IWO.mjs +21 -0
  123. package/dist/chunk-GDZT5LZ5.js +170 -0
  124. package/dist/chunk-GHPUYD4I.mjs +213 -0
  125. package/dist/chunk-GHS6MIL6.mjs +1432 -0
  126. package/dist/chunk-GPS2THCL.mjs +11 -0
  127. package/dist/{chunk-EV2EVOYS.js → chunk-GTJWQAGU.js} +31 -42
  128. package/dist/chunk-GVTI6UJQ.mjs +130 -0
  129. package/dist/chunk-GXKI64OT.mjs +1138 -0
  130. package/dist/chunk-GYDYF2WX.js +275 -0
  131. package/dist/chunk-GYLP6UG4.mjs +705 -0
  132. package/dist/chunk-H3OQKK6X.js +1158 -0
  133. package/dist/chunk-H5DFSCJ6.js +40 -0
  134. package/dist/chunk-HAGEIC2L.mjs +186 -0
  135. package/dist/chunk-HAJ4JRFO.js +293 -0
  136. package/dist/chunk-HDR72GB6.js +188 -0
  137. package/dist/chunk-HF5HPS4T.mjs +40 -0
  138. package/dist/chunk-HK6LOFDS.js +218 -0
  139. package/dist/chunk-HMWYTXCY.mjs +143 -0
  140. package/dist/chunk-HPCSRCMA.js +89 -0
  141. package/dist/chunk-HSEO6TPU.js +247 -0
  142. package/dist/chunk-I5FOHCLH.js +132 -0
  143. package/dist/chunk-IDLW4NWA.mjs +85 -0
  144. package/dist/chunk-IIDZ5WUX.js +61 -0
  145. package/dist/chunk-IR74FJHU.js +2332 -0
  146. package/dist/chunk-IRVFYAKP.mjs +100 -0
  147. package/dist/{chunk-XBL3TMPC.mjs → chunk-IZDWAL53.mjs} +1795 -3287
  148. package/dist/chunk-J2KZXIU3.js +51 -0
  149. package/dist/chunk-J2U6PJSO.js +91 -0
  150. package/dist/chunk-J5AJNY2N.js +283 -0
  151. package/dist/chunk-J6KQZ4FO.mjs +821 -0
  152. package/dist/{chunk-OWW5GUSB.js → chunk-JGBCIKJV.js} +7 -6
  153. package/dist/chunk-JKGTBMU7.mjs +25 -0
  154. package/dist/chunk-JR3TNEQC.js +422 -0
  155. package/dist/chunk-JURRXY2J.mjs +29 -0
  156. package/dist/chunk-K3HW5I2A.mjs +317 -0
  157. package/dist/chunk-K46SMZ66.mjs +103 -0
  158. package/dist/chunk-K4UDGE3Z.mjs +6 -0
  159. package/dist/chunk-KDQOR4QQ.mjs +350 -0
  160. package/dist/chunk-KDTVOLHI.mjs +288 -0
  161. package/dist/chunk-KGHJH5KJ.mjs +35 -0
  162. package/dist/chunk-KIZOA5LX.mjs +140 -0
  163. package/dist/chunk-KK6HYVBI.mjs +242 -0
  164. package/dist/chunk-KMKWGXMK.js +856 -0
  165. package/dist/chunk-KPA6K5IB.js +80 -0
  166. package/dist/chunk-KU7O4IXU.mjs +260 -0
  167. package/dist/chunk-KVFNRJOR.mjs +11142 -0
  168. package/dist/chunk-KZJRSXHK.js +2432 -0
  169. package/dist/chunk-LHWPRUJL.js +79 -0
  170. package/dist/chunk-LIV3KXJG.mjs +369 -0
  171. package/dist/chunk-LKV4LACG.js +21 -0
  172. package/dist/chunk-LUY45X3U.mjs +263 -0
  173. package/dist/chunk-LYEZZEEF.mjs +17 -0
  174. package/dist/chunk-M5EXQZYY.mjs +1519 -0
  175. package/dist/chunk-ME6HGG4I.mjs +1338 -0
  176. package/dist/chunk-MEXP6DA6.js +31 -0
  177. package/dist/chunk-MG52AW3H.js +902 -0
  178. package/dist/chunk-MIPO6F72.js +334 -0
  179. package/dist/{chunk-5QW7CQBA.js → chunk-MKIJQL5Q.js} +211 -321
  180. package/dist/chunk-MN3YETVN.mjs +17 -0
  181. package/dist/chunk-MOBSBXVE.mjs +2391 -0
  182. package/dist/chunk-MOMOZEUM.mjs +88 -0
  183. package/dist/chunk-MRFUNRAP.js +62 -0
  184. package/dist/chunk-MTIHEW2M.js +433 -0
  185. package/dist/chunk-N4RGGDEL.mjs +73 -0
  186. package/dist/chunk-NH654HAT.js +10 -0
  187. package/dist/chunk-NHJUGZUR.mjs +253 -0
  188. package/dist/chunk-NMQT4HG3.mjs +757 -0
  189. package/dist/chunk-NPSYB6DC.mjs +906 -0
  190. package/dist/chunk-NW2GPMSO.js +857 -0
  191. package/dist/chunk-NXKQOQ6L.js +76 -0
  192. package/dist/chunk-NXLAZIJZ.js +309 -0
  193. package/dist/chunk-NYWNA5CF.js +148 -0
  194. package/dist/chunk-NZTKLY2W.js +1442 -0
  195. package/dist/chunk-O2ICABUD.js +36 -0
  196. package/dist/chunk-OIVVQQ22.js +862 -0
  197. package/dist/chunk-OKC2B4O3.mjs +312 -0
  198. package/dist/chunk-OLWFPDBK.js +2220 -0
  199. package/dist/chunk-OMTVH334.js +3779 -0
  200. package/dist/chunk-OQRVEM56.mjs +362 -0
  201. package/dist/chunk-OXMIBOD4.js +337 -0
  202. package/dist/chunk-PBL6YL5L.mjs +288 -0
  203. package/dist/chunk-PDOELNNQ.js +97 -0
  204. package/dist/chunk-PDQJY2GZ.js +136 -0
  205. package/dist/chunk-PKOZXD2Q.js +1274 -0
  206. package/dist/chunk-PPF2BYFL.mjs +2191 -0
  207. package/dist/chunk-PQTQKNKD.js +539 -0
  208. package/dist/chunk-PRSR4FAV.mjs +81 -0
  209. package/dist/chunk-PTRNO5UD.js +95 -0
  210. package/dist/chunk-Q2Y3VMKH.js +2000 -0
  211. package/dist/chunk-QCZOE65N.js +96 -0
  212. package/dist/chunk-QDYFLATW.mjs +52 -0
  213. package/dist/chunk-QQABGCMM.js +22 -0
  214. package/dist/chunk-QS6TRHMR.js +345 -0
  215. package/dist/chunk-R56P64LB.mjs +208 -0
  216. package/dist/chunk-RCQ2MPBV.js +428 -0
  217. package/dist/chunk-RFVRPYR2.mjs +856 -0
  218. package/dist/chunk-RKBLPGPV.js +11521 -0
  219. package/dist/chunk-RM2V4IND.mjs +327 -0
  220. package/dist/chunk-RQXN5A34.mjs +613 -0
  221. package/dist/chunk-RUVGVNOF.mjs +2687 -0
  222. package/dist/chunk-SAFJIGYB.mjs +165 -0
  223. package/dist/chunk-SKQFLBDD.js +263 -0
  224. package/dist/chunk-SMK6JU2F.mjs +2092 -0
  225. package/dist/{chunk-UVRPC2P7.js → chunk-SNNEOS5Z.js} +1984 -3476
  226. package/dist/chunk-SPCRQ6NO.mjs +1246 -0
  227. package/dist/chunk-SWX4SALA.mjs +19 -0
  228. package/dist/{chunk-JVODCGFP.mjs → chunk-SYEO2WV4.mjs} +128 -238
  229. package/dist/chunk-T2QQMX2N.js +10 -0
  230. package/dist/chunk-T3AFF3L7.mjs +57 -0
  231. package/dist/chunk-T6Z2EXYL.js +712 -0
  232. package/dist/chunk-T7LOXGYX.js +118 -0
  233. package/dist/chunk-TJCAE7RC.mjs +1315 -0
  234. package/dist/chunk-TJI3K6RP.js +137 -0
  235. package/dist/chunk-TL2SVO4P.mjs +55 -0
  236. package/dist/chunk-TM63CYGN.mjs +399 -0
  237. package/dist/chunk-TU5RYTYU.mjs +13 -0
  238. package/dist/chunk-TVJZ4GPS.js +1553 -0
  239. package/dist/chunk-TWM6DLYF.js +371 -0
  240. package/dist/chunk-U63OC4TQ.js +30 -0
  241. package/dist/{chunk-L5GKVQVJ.js → chunk-U6BVSJZ6.js} +25 -57
  242. package/dist/chunk-U6UVWEAK.mjs +792 -0
  243. package/dist/chunk-UCEPNO6N.mjs +11048 -0
  244. package/dist/{chunk-ANT574FD.js → chunk-UCR5HRYM.js} +74 -105
  245. package/dist/chunk-UG5BTOTF.mjs +334 -0
  246. package/dist/chunk-UGH37BQW.mjs +157 -0
  247. package/dist/chunk-V7ZRH3PY.mjs +271 -0
  248. package/dist/chunk-VBGHBL3E.mjs +1394 -0
  249. package/dist/chunk-VRBDAS5I.js +920 -0
  250. package/dist/chunk-VVE3Y76O.js +230 -0
  251. package/dist/chunk-W65JIRI4.mjs +1182 -0
  252. package/dist/chunk-WHYKAT7G.js +62 -0
  253. package/dist/{chunk-YOIVZ6OA.mjs → chunk-WIZRUIZB.mjs} +25 -57
  254. package/dist/chunk-WKWTDZS7.js +385 -0
  255. package/dist/chunk-WLMINRC4.mjs +78 -0
  256. package/dist/chunk-WOF3AD3J.js +22 -0
  257. package/dist/chunk-WWKMOA76.js +1262 -0
  258. package/dist/chunk-X5A5FOWW.js +615 -0
  259. package/dist/chunk-X6CN6KQF.mjs +192 -0
  260. package/dist/chunk-XD2PMH46.mjs +517 -0
  261. package/dist/chunk-XJA2NGTI.mjs +88 -0
  262. package/dist/chunk-XJIHN3BY.mjs +8 -0
  263. package/dist/chunk-XK6UDWJS.js +203 -0
  264. package/dist/chunk-XPG3N5CF.mjs +415 -0
  265. package/dist/chunk-XVZ2NKSU.mjs +74 -0
  266. package/dist/chunk-XYP45OLE.js +117 -0
  267. package/dist/chunk-XZSDGZX6.mjs +301 -0
  268. package/dist/chunk-Y2EMGN4T.mjs +120 -0
  269. package/dist/chunk-Y3XWP5XW.mjs +298 -0
  270. package/dist/chunk-Y4K22JL6.js +228 -0
  271. package/dist/chunk-Y65LXQGA.mjs +3164 -0
  272. package/dist/chunk-Y66WVMO5.mjs +87 -0
  273. package/dist/chunk-Y7JWLB25.mjs +7280 -0
  274. package/dist/chunk-YCDXAJKU.js +175 -0
  275. package/dist/chunk-YRDQCCIS.js +152 -0
  276. package/dist/chunk-YV52DGSA.js +111 -0
  277. package/dist/chunk-YXGZQPUD.js +94 -0
  278. package/dist/chunk-Z3A3AFVU.mjs +102 -0
  279. package/dist/chunk-ZCY6YKKP.mjs +475 -0
  280. package/dist/chunk-ZEQHXVU5.js +215 -0
  281. package/dist/chunk-ZF7JCXCI.js +284 -0
  282. package/dist/chunk-ZJBRUH6V.js +29 -0
  283. package/dist/chunk-ZMIL4ZOA.js +365 -0
  284. package/dist/chunk-ZR5ULMN2.mjs +337 -0
  285. package/dist/chunk-ZXREOYOW.js +87 -0
  286. package/dist/{client-BSP9U1O1.d.mts → client-CX_WR0-J.d.mts} +2 -2
  287. package/dist/client-Dytx_ZTC.d.ts +230 -0
  288. package/dist/{client-B878xeAP.d.ts → client-dqOhP9Nc.d.ts} +2 -2
  289. package/dist/client-hTKbCuhG.d.mts +230 -0
  290. package/dist/clock-B-UAjkKa.d.mts +5 -0
  291. package/dist/clock-B-UAjkKa.d.ts +5 -0
  292. package/dist/config-BlXQluJR.d.mts +36 -0
  293. package/dist/config-BlXQluJR.d.ts +36 -0
  294. package/dist/courier-Cnn-edJ4.d.ts +95 -0
  295. package/dist/courier-FmGfkvIN.d.mts +95 -0
  296. package/dist/crowd-DdHFbqKK.d.ts +186 -0
  297. package/dist/crowd-hOVSAmA3.d.mts +186 -0
  298. package/dist/danfo-BEBapFlX.d.mts +146 -0
  299. package/dist/danfo-UQ_PTIIx.d.ts +146 -0
  300. package/dist/{elements-Bty6Qs_N.d.mts → elements-DdsRig-2.d.mts} +1548 -257
  301. package/dist/{elements-Bty6Qs_N.d.ts → elements-DdsRig-2.d.ts} +1548 -257
  302. package/dist/engines/godot.d.mts +56 -0
  303. package/dist/engines/godot.d.ts +56 -0
  304. package/dist/engines/godot.js +28 -0
  305. package/dist/engines/godot.mjs +3 -0
  306. package/dist/engines/wasm.d.mts +11 -0
  307. package/dist/engines/wasm.d.ts +11 -0
  308. package/dist/engines/wasm.js +178 -0
  309. package/dist/engines/wasm.mjs +176 -0
  310. package/dist/fallback-CrG_lTFk.d.mts +270 -0
  311. package/dist/fallback-CrG_lTFk.d.ts +270 -0
  312. package/dist/fallback-KDB4Y2CE.mjs +6 -0
  313. package/dist/fallback-Y26TQENE.js +19 -0
  314. package/dist/features-CZB4rmcD.d.mts +118 -0
  315. package/dist/features-CZB4rmcD.d.ts +118 -0
  316. package/dist/fit-BWiE7rgA.d.mts +44 -0
  317. package/dist/fit-DK0oT7zO.d.ts +44 -0
  318. package/dist/five-a-side-Bv1AOUy3.d.mts +115 -0
  319. package/dist/five-a-side-EC51SJY1.d.ts +115 -0
  320. package/dist/fluid-ARr0qUIL.d.ts +939 -0
  321. package/dist/fluid-DLlEj2cs.d.mts +939 -0
  322. package/dist/game/conformance.d.mts +84 -0
  323. package/dist/game/conformance.d.ts +84 -0
  324. package/dist/game/conformance.js +1025 -0
  325. package/dist/game/conformance.mjs +994 -0
  326. package/dist/game/heap.d.mts +40 -0
  327. package/dist/game/heap.d.ts +40 -0
  328. package/dist/game/heap.js +48 -0
  329. package/dist/game/heap.mjs +7 -0
  330. package/dist/game/kit/canvas.d.mts +240 -0
  331. package/dist/game/kit/canvas.d.ts +240 -0
  332. package/dist/game/kit/canvas.js +3566 -0
  333. package/dist/game/kit/canvas.mjs +1039 -0
  334. package/dist/game/kit/courier.d.mts +17 -0
  335. package/dist/game/kit/courier.d.ts +17 -0
  336. package/dist/game/kit/courier.js +66 -0
  337. package/dist/game/kit/courier.mjs +49 -0
  338. package/dist/game/kit/danfo.d.mts +11 -0
  339. package/dist/game/kit/danfo.d.ts +11 -0
  340. package/dist/game/kit/danfo.js +109 -0
  341. package/dist/game/kit/danfo.mjs +44 -0
  342. package/dist/game/kit/engine.d.mts +29 -0
  343. package/dist/game/kit/engine.d.ts +29 -0
  344. package/dist/game/kit/engine.js +183 -0
  345. package/dist/game/kit/engine.mjs +30 -0
  346. package/dist/game/kit/five-a-side.d.mts +11 -0
  347. package/dist/game/kit/five-a-side.d.ts +11 -0
  348. package/dist/game/kit/five-a-side.js +86 -0
  349. package/dist/game/kit/five-a-side.mjs +41 -0
  350. package/dist/game/kit/frontier.d.mts +344 -0
  351. package/dist/game/kit/frontier.d.ts +344 -0
  352. package/dist/game/kit/frontier.js +435 -0
  353. package/dist/game/kit/frontier.mjs +14 -0
  354. package/dist/game/kit/genesis.d.mts +752 -0
  355. package/dist/game/kit/genesis.d.ts +752 -0
  356. package/dist/game/kit/genesis.js +380 -0
  357. package/dist/game/kit/genesis.mjs +15 -0
  358. package/dist/game/kit/ludo.d.mts +15 -0
  359. package/dist/game/kit/ludo.d.ts +15 -0
  360. package/dist/game/kit/ludo.js +87 -0
  361. package/dist/game/kit/ludo.mjs +42 -0
  362. package/dist/game/kit/runner.d.mts +12 -0
  363. package/dist/game/kit/runner.d.ts +12 -0
  364. package/dist/game/kit/runner.js +83 -0
  365. package/dist/game/kit/runner.mjs +46 -0
  366. package/dist/game/kit/shootout.d.mts +13 -0
  367. package/dist/game/kit/shootout.d.ts +13 -0
  368. package/dist/game/kit/shootout.js +122 -0
  369. package/dist/game/kit/shootout.mjs +57 -0
  370. package/dist/game/kit/slots.d.mts +392 -0
  371. package/dist/game/kit/slots.d.ts +392 -0
  372. package/dist/game/kit/slots.js +215 -0
  373. package/dist/game/kit/slots.mjs +6 -0
  374. package/dist/game/kit/tycoon.d.mts +16 -0
  375. package/dist/game/kit/tycoon.d.ts +16 -0
  376. package/dist/game/kit/tycoon.js +145 -0
  377. package/dist/game/kit/tycoon.mjs +44 -0
  378. package/dist/game/kit/word.d.mts +11 -0
  379. package/dist/game/kit/word.d.ts +11 -0
  380. package/dist/game/kit/word.js +78 -0
  381. package/dist/game/kit/word.mjs +41 -0
  382. package/dist/game/kit/worlds.d.mts +18 -0
  383. package/dist/game/kit/worlds.d.ts +18 -0
  384. package/dist/game/kit/worlds.js +74 -0
  385. package/dist/game/kit/worlds.mjs +49 -0
  386. package/dist/game/kit.d.mts +53 -0
  387. package/dist/game/kit.d.ts +53 -0
  388. package/dist/game/kit.js +2610 -0
  389. package/dist/game/kit.mjs +101 -0
  390. package/dist/game/prepared.d.mts +14 -0
  391. package/dist/game/prepared.d.ts +14 -0
  392. package/dist/game/prepared.js +81 -0
  393. package/dist/game/prepared.mjs +32 -0
  394. package/dist/game-Bx8onkhX.d.mts +1451 -0
  395. package/dist/game-fgQy2YIm.d.ts +1451 -0
  396. package/dist/game-theme-CBTw1b_d.d.mts +35 -0
  397. package/dist/game-theme-Dg-ict5A.d.ts +35 -0
  398. package/dist/game.d.mts +3546 -0
  399. package/dist/game.d.ts +3546 -0
  400. package/dist/game.js +4455 -0
  401. package/dist/game.mjs +50 -0
  402. package/dist/graphics-C6YjWYvP.d.ts +5 -0
  403. package/dist/graphics-Dk2yQnYN.d.mts +5 -0
  404. package/dist/guest-DrsA00XD.d.mts +732 -0
  405. package/dist/guest-wIdfoT05.d.ts +732 -0
  406. package/dist/hit-stop-BKkVwTq7.d.mts +43 -0
  407. package/dist/hit-stop-D-8pPYnM.d.ts +43 -0
  408. package/dist/hot-Crn9XpHJ.d.ts +29 -0
  409. package/dist/hot-DH3nOhQD.d.mts +29 -0
  410. package/dist/{index-CQStGb3B.d.mts → index-6gkHMGAq.d.mts} +2 -2
  411. package/dist/index-B8ybCKJI.d.ts +41 -0
  412. package/dist/{index-DJwXmoaP.d.ts → index-B98Xac8e.d.ts} +2 -2
  413. package/dist/{index-B7oA_1XI.d.ts → index-B_ByTtIT.d.ts} +2 -2
  414. package/dist/index-DHjNHb1c.d.mts +41 -0
  415. package/dist/{index-DhUSTAhT.d.mts → index-DbAN_VQE.d.mts} +2 -2
  416. package/dist/index.d.mts +134 -24
  417. package/dist/index.d.ts +134 -24
  418. package/dist/index.js +407 -248
  419. package/dist/index.mjs +184 -58
  420. package/dist/interactives-authoring.d.mts +231 -0
  421. package/dist/interactives-authoring.d.ts +231 -0
  422. package/dist/interactives-authoring.js +1743 -0
  423. package/dist/interactives-authoring.mjs +1704 -0
  424. package/dist/interactives-canvas.global.js +148 -0
  425. package/dist/interactives-guest.d.mts +20 -0
  426. package/dist/interactives-guest.d.ts +20 -0
  427. package/dist/interactives-guest.js +63 -0
  428. package/dist/interactives-guest.json +1 -0
  429. package/dist/interactives-guest.mjs +61 -0
  430. package/dist/interactives-jsc.global.js +9357 -0
  431. package/dist/interactives-meters.d.mts +93 -0
  432. package/dist/interactives-meters.d.ts +93 -0
  433. package/dist/interactives-meters.js +252 -0
  434. package/dist/interactives-meters.mjs +68 -0
  435. package/dist/interactives-production.d.mts +430 -0
  436. package/dist/interactives-production.d.ts +430 -0
  437. package/dist/interactives-production.js +1231 -0
  438. package/dist/interactives-production.mjs +1170 -0
  439. package/dist/interactives-record.d.mts +112 -0
  440. package/dist/interactives-record.d.ts +112 -0
  441. package/dist/interactives-record.js +302 -0
  442. package/dist/interactives-record.mjs +295 -0
  443. package/dist/interactives-runtime.d.mts +61 -0
  444. package/dist/interactives-runtime.d.ts +61 -0
  445. package/dist/interactives-runtime.js +442 -0
  446. package/dist/interactives-runtime.mjs +25 -0
  447. package/dist/interactives-studio-kernel.global.js +1 -0
  448. package/dist/interactives-studio.d.mts +806 -0
  449. package/dist/interactives-studio.d.ts +806 -0
  450. package/dist/interactives-studio.js +5741 -0
  451. package/dist/interactives-studio.mjs +5651 -0
  452. package/dist/interactives-tick.d.mts +90 -0
  453. package/dist/interactives-tick.d.ts +90 -0
  454. package/dist/interactives-tick.js +203 -0
  455. package/dist/interactives-tick.mjs +6 -0
  456. package/dist/interactives-web.d.mts +762 -0
  457. package/dist/interactives-web.d.ts +762 -0
  458. package/dist/interactives-web.js +5000 -0
  459. package/dist/interactives-web.mjs +4628 -0
  460. package/dist/interactives.d.mts +2430 -0
  461. package/dist/interactives.d.ts +2430 -0
  462. package/dist/interactives.js +5723 -0
  463. package/dist/interactives.mjs +4333 -0
  464. package/dist/juice-CoHxlpKA.d.ts +42 -0
  465. package/dist/juice-DQztFS43.d.mts +42 -0
  466. package/dist/launch-T2f4_Di4.d.mts +151 -0
  467. package/dist/launch-d6oreMzR.d.ts +151 -0
  468. package/dist/library-DXYaMFhi.d.mts +69 -0
  469. package/dist/library-DXYaMFhi.d.ts +69 -0
  470. package/dist/link-BUTqGmyi.d.mts +38 -0
  471. package/dist/link-BUTqGmyi.d.ts +38 -0
  472. package/dist/lint.js +104 -204
  473. package/dist/lint.mjs +103 -203
  474. package/dist/local-D8_I6UeL.d.mts +6967 -0
  475. package/dist/local-VZkqsCzR.d.ts +6967 -0
  476. package/dist/lockstep-BLf6dglI.d.mts +321 -0
  477. package/dist/lockstep-D50Ia0JW.d.ts +321 -0
  478. package/dist/ludo-B8ClkDqr.d.ts +205 -0
  479. package/dist/ludo-BOuohQ-M.d.mts +205 -0
  480. package/dist/mock/cli.mjs +200 -56
  481. package/dist/mock/library.js +200 -56
  482. package/dist/mock/library.mjs +200 -56
  483. package/dist/mock/msw.js +200 -56
  484. package/dist/mock/msw.mjs +200 -56
  485. package/dist/native-BodxSh03.d.mts +16 -0
  486. package/dist/native-DUHMT8gA.d.ts +16 -0
  487. package/dist/network-ZXLD7l1b.d.mts +19 -0
  488. package/dist/network-ZXLD7l1b.d.ts +19 -0
  489. package/dist/online-XeymeM9s.d.ts +381 -0
  490. package/dist/online-d7W_Al9a.d.mts +381 -0
  491. package/dist/params-DxFb5G_U.d.mts +155 -0
  492. package/dist/params-DxFb5G_U.d.ts +155 -0
  493. package/dist/play-BRRlfLhX.d.ts +940 -0
  494. package/dist/play-ClrMd_e8.d.mts +940 -0
  495. package/dist/policy-CCw8tXLm.d.mts +3078 -0
  496. package/dist/policy-CMqOSQIu.d.ts +3078 -0
  497. package/dist/ports-B_0v_P3A.d.mts +13 -0
  498. package/dist/ports-CGU_3e_0.d.ts +13 -0
  499. package/dist/prefetch-BHnicOQj.d.ts +117 -0
  500. package/dist/prefetch-CBXgYacv.d.mts +117 -0
  501. package/dist/{price-CSztR02F.d.mts → price-BOzexBww.d.mts} +1 -1
  502. package/dist/{price-C_vasx9A.d.ts → price-C1h9sPxE.d.ts} +1 -1
  503. package/dist/protocol-C8qbpUbT.d.mts +242 -0
  504. package/dist/protocol-C8qbpUbT.d.ts +242 -0
  505. package/dist/rapier-AZHT4YI7.js +7886 -0
  506. package/dist/rapier-ODEPCQA6.mjs +7792 -0
  507. package/dist/react.d.mts +157 -15
  508. package/dist/react.d.ts +157 -15
  509. package/dist/react.js +5564 -5904
  510. package/dist/react.mjs +5451 -5808
  511. package/dist/runner-CQcLL7By.d.ts +189 -0
  512. package/dist/runner-D46Yj-wE.d.mts +189 -0
  513. package/dist/runtime-BRWfkf_q.d.mts +51 -0
  514. package/dist/runtime-DyuBMkKM.d.ts +51 -0
  515. package/dist/scheduling-D2ajXpMC.d.ts +224 -0
  516. package/dist/scheduling-DSRbbaZb.d.mts +224 -0
  517. package/dist/schema-BrWxzKp6.d.mts +63 -0
  518. package/dist/schema-BrWxzKp6.d.ts +63 -0
  519. package/dist/server/evict.js +34 -37
  520. package/dist/server/evict.mjs +34 -37
  521. package/dist/server/tanstack.d.mts +49 -3
  522. package/dist/server/tanstack.d.ts +49 -3
  523. package/dist/server/tanstack.js +169 -117
  524. package/dist/server/tanstack.mjs +166 -118
  525. package/dist/{server-Dckg4Vdr.d.ts → server-D29IIuDV.d.ts} +136 -130
  526. package/dist/{server-B6dW7-Lj.d.mts → server-DQMWPnc8.d.mts} +136 -130
  527. package/dist/server.d.mts +45 -5
  528. package/dist/server.d.ts +45 -5
  529. package/dist/server.js +171 -227
  530. package/dist/server.mjs +165 -225
  531. package/dist/session-grant-CJ27DwrT.d.mts +19 -0
  532. package/dist/session-grant-CJ27DwrT.d.ts +19 -0
  533. package/dist/shootout-BJZeX6FG.d.ts +140 -0
  534. package/dist/shootout-tcZd1Rxt.d.mts +140 -0
  535. package/dist/state-replica-stMtdkVD.d.mts +42 -0
  536. package/dist/state-replica-stMtdkVD.d.ts +42 -0
  537. package/dist/studio-CowqWqez.d.mts +14 -0
  538. package/dist/studio-CowqWqez.d.ts +14 -0
  539. package/dist/styles.css +1 -1
  540. package/dist/template-AhCdB1kW.d.mts +190 -0
  541. package/dist/template-BkEGVTQj.d.ts +190 -0
  542. package/dist/terrain-BMxEc6Oc.d.ts +429 -0
  543. package/dist/terrain-C-XC1Oui.d.mts +429 -0
  544. package/dist/testing/msw.d.mts +28 -4
  545. package/dist/testing/msw.d.ts +28 -4
  546. package/dist/testing/msw.js +15 -21
  547. package/dist/testing/msw.mjs +15 -21
  548. package/dist/testing/suite.d.mts +6 -5
  549. package/dist/testing/suite.d.ts +6 -5
  550. package/dist/testing/suite.js +89 -124
  551. package/dist/testing/suite.mjs +81 -116
  552. package/dist/testing.d.mts +27 -1227
  553. package/dist/testing.d.ts +27 -1227
  554. package/dist/testing.js +127 -131
  555. package/dist/testing.mjs +19 -23
  556. package/dist/tick-transport-C8QEh8Uw.d.mts +50 -0
  557. package/dist/tick-transport-UjHY3xK1.d.ts +50 -0
  558. package/dist/timeline-protocol-hp6e8zFB.d.mts +47 -0
  559. package/dist/timeline-protocol-hp6e8zFB.d.ts +47 -0
  560. package/dist/tokens-DhanQRQS.d.mts +21 -0
  561. package/dist/tokens-K8yxwd6G.d.ts +21 -0
  562. package/dist/tree-C-Io2Hbx.d.mts +35 -0
  563. package/dist/tree-CP_qSW4H.d.ts +35 -0
  564. package/dist/tycoon-B5KHk2Xx.d.mts +255 -0
  565. package/dist/tycoon-hmHo-3HX.d.ts +255 -0
  566. package/dist/types-BQkxPwZP.d.mts +219 -0
  567. package/dist/types-D_f6UUxM.d.ts +219 -0
  568. package/dist/ui-DwHicuFv.d.mts +563 -0
  569. package/dist/ui-hi7S2YcH.d.ts +563 -0
  570. package/dist/{sign-in-DQlIdqsi.d.mts → url-52ndUruG.d.mts} +15 -1
  571. package/dist/{sign-in-DQlIdqsi.d.ts → url-52ndUruG.d.ts} +15 -1
  572. package/dist/utils.d.mts +3 -3
  573. package/dist/utils.d.ts +3 -3
  574. package/dist/utils.js +37 -37
  575. package/dist/utils.mjs +4 -4
  576. package/dist/vars-Dc_PrhBK.d.mts +511 -0
  577. package/dist/vars-Dc_PrhBK.d.ts +511 -0
  578. package/dist/vm-IUARFFAI.mjs +63 -0
  579. package/dist/vm-N7L6MGGH.js +65 -0
  580. package/dist/weave-delivery-CW-Kstut.d.mts +360 -0
  581. package/dist/weave-delivery-CW-Kstut.d.ts +360 -0
  582. package/dist/web-Dss74a7v.d.ts +883 -0
  583. package/dist/web-f9ZQPoyw.d.mts +883 -0
  584. package/dist/web-transport-C7MkBL0a.d.ts +19 -0
  585. package/dist/web-transport-aYEqXMd9.d.mts +19 -0
  586. package/dist/weight-CPGjsgjV.d.ts +92 -0
  587. package/dist/weight-tF1ODR1p.d.mts +92 -0
  588. package/dist/word-BcX9Jcmv.d.mts +70 -0
  589. package/dist/word-C7sVPLHm.d.ts +70 -0
  590. package/dist/world-PvILHDR1.d.ts +2285 -0
  591. package/dist/world-qekkXjJv.d.mts +2285 -0
  592. package/dist/worlds-Br2Pb0Cs.d.ts +109 -0
  593. package/dist/worlds-D5ydYr7d.d.mts +109 -0
  594. package/engines/c/cimplify.h +108 -0
  595. package/engines/c/cimplify.lib.js +11 -0
  596. package/engines/godot/addons/cimplify/cimplify.gd +97 -0
  597. package/engines/rust/interactives-ctx/Cargo.toml +9 -0
  598. package/engines/rust/interactives-ctx/src/lib.rs +189 -0
  599. package/package.json +189 -3
  600. package/vendor/rapier3d-compat/LICENSE +201 -0
  601. package/vendor/rapier3d-compat/PATCHES.md +61 -0
  602. package/dist/chunk-2P4KXFB6.js +0 -274
  603. package/dist/chunk-3G6RQLXK.mjs +0 -21
  604. package/dist/chunk-3V4DVXV3.mjs +0 -254
  605. package/dist/chunk-EDK3LNM6.js +0 -2436
  606. package/dist/chunk-F7J3HK27.js +0 -4549
  607. package/dist/chunk-U4MW6PYU.mjs +0 -23
  608. package/dist/chunk-XREIZ56K.js +0 -26
@@ -0,0 +1,517 @@
1
+ // src/game/kit/identity/base.ts
2
+ var MESH_SLOTS = ["body", "hair", "brows", "facialHair"], KIND_BYTES = { f32: 4, i16: 2, u16: 2, u32: 4, u8: 1 };
3
+ function weldPositions(positions) {
4
+ let seen = /* @__PURE__ */ new Map(), out = new Uint32Array(positions.length / 3);
5
+ for (let v = 0; v < out.length; v++) {
6
+ let key = `${positions[v * 3]},${positions[v * 3 + 1]},${positions[v * 3 + 2]}`, first = seen.get(key);
7
+ first === void 0 ? (seen.set(key, v), out[v] = v) : out[v] = first;
8
+ }
9
+ return out;
10
+ }
11
+ var IdentityFormatError = class extends Error {
12
+ constructor(message) {
13
+ super(message), this.name = "IdentityFormatError";
14
+ }
15
+ };
16
+ function fnv1a(bytes) {
17
+ let hash = 2166136261;
18
+ for (let i = 0; i < bytes.length; i++)
19
+ hash ^= bytes[i], hash = Math.imul(hash, 16777619);
20
+ return hash >>> 0;
21
+ }
22
+ function typed(bytes, start, ref) {
23
+ let size = KIND_BYTES[ref.kind], begin = start + ref.offset, end = begin + ref.count * size;
24
+ if (!Number.isInteger(ref.offset) || !Number.isInteger(ref.count) || ref.offset < 0 || ref.count < 0 || end > bytes.byteLength)
25
+ throw new IdentityFormatError("array outside the identity base");
26
+ let copy = bytes.slice(begin, end);
27
+ switch (ref.kind) {
28
+ case "f32":
29
+ return new Float32Array(copy.buffer, 0, ref.count);
30
+ case "i16":
31
+ return new Int16Array(copy.buffer, 0, ref.count);
32
+ case "u16":
33
+ return new Uint16Array(copy.buffer, 0, ref.count);
34
+ case "u32":
35
+ return new Uint32Array(copy.buffer, 0, ref.count);
36
+ case "u8":
37
+ return copy;
38
+ }
39
+ }
40
+ function expect(value, ctor, length, what) {
41
+ if (!(value instanceof ctor) || value.length !== length) throw new IdentityFormatError(`${what} has the wrong size`);
42
+ return value;
43
+ }
44
+ function parseIdentityBase(bytes) {
45
+ if (bytes.byteLength < 12) throw new IdentityFormatError("identity base is truncated");
46
+ let view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
47
+ if (view.getUint32(0, true) !== 1111771459) throw new IdentityFormatError("not an identity base");
48
+ if (view.getUint32(4, true) !== 1) throw new IdentityFormatError("unsupported identity base version");
49
+ let jsonBytes = view.getUint32(8, true);
50
+ if (12 + jsonBytes > bytes.byteLength) throw new IdentityFormatError("identity base is truncated");
51
+ let raw = JSON.parse(new TextDecoder().decode(bytes.subarray(12, 12 + jsonBytes))), start = 12 + jsonBytes, get = (ref) => typed(bytes, start, ref), jointCount = raw.joints.length, cageCount = get(raw.basis.cage).length / 3, components = raw.basis.face + raw.basis.body;
52
+ raw.joints.forEach((joint, j) => {
53
+ if (joint.parent >= j || joint.parent < -1) throw new IdentityFormatError("joints must follow their parents");
54
+ });
55
+ for (let joint of raw.skin) if (joint < 0 || joint >= jointCount) throw new IdentityFormatError("skin joint out of range");
56
+ let meshes = raw.meshes.map((m) => {
57
+ let positions = get(m.positions), vertices = positions.length / 3, lods = m.lods.map((ref) => {
58
+ let lod = get(ref);
59
+ if (!(lod instanceof Uint16Array || lod instanceof Uint32Array)) throw new IdentityFormatError("lod indices must be u16 or u32");
60
+ for (let i = 0; i < lod.length; i++) if (lod[i] >= vertices) throw new IdentityFormatError("lod index out of range");
61
+ return lod;
62
+ }), cageIndex = expect(get(m.cage.index), Uint16Array, vertices * 4, "mesh cage index");
63
+ for (let i = 0; i < cageIndex.length; i++) if (cageIndex[i] >= cageCount) throw new IdentityFormatError("cage index out of range");
64
+ let normals = expect(get(m.normals), Int16Array, vertices * 3, "mesh normals"), joints = expect(get(m.joints), Uint8Array, vertices * 4, "mesh joints");
65
+ for (let i = 0; i < joints.length; i++) if (joints[i] >= raw.skin.length) throw new IdentityFormatError("skin joint out of range");
66
+ if (!MESH_SLOTS.includes(m.slot)) throw new IdentityFormatError("unknown mesh slot");
67
+ return {
68
+ name: m.name,
69
+ material: m.material,
70
+ slot: m.slot,
71
+ style: m.style,
72
+ positions: expect(positions, Float32Array, vertices * 3, "mesh positions"),
73
+ normals: Float32Array.from(normals, (v) => v / 32767),
74
+ uvs: expect(get(m.uvs), Float32Array, vertices * 2, "mesh uvs"),
75
+ joints,
76
+ weights: expect(get(m.weights), Uint8Array, vertices * 4, "mesh weights"),
77
+ lods,
78
+ cageIndex,
79
+ cageWeight: expect(get(m.cage.weight), Uint16Array, vertices * 4, "mesh cage weight"),
80
+ weld: weldPositions(positions)
81
+ };
82
+ }), anchorCount = raw.anchors.names.length, base = {
83
+ id: fnv1a(bytes),
84
+ components,
85
+ name: raw.name,
86
+ joints: raw.joints,
87
+ skin: raw.skin,
88
+ inverseBind: expect(get(raw.inverseBind), Float32Array, raw.skin.length * 16, "inverse bind matrices"),
89
+ jointCageIndex: expect(get(raw.jointCage.index), Uint16Array, jointCount * 4, "joint cage index"),
90
+ jointCageWeight: expect(get(raw.jointCage.weight), Uint16Array, jointCount * 4, "joint cage weight"),
91
+ meshes,
92
+ materials: raw.materials,
93
+ images: raw.images.map((image) => ({ role: image.role, bytes: expect(get(image.bytes), Uint8Array, image.bytes.count, "image") })),
94
+ styles: raw.styles,
95
+ palettes: raw.palettes,
96
+ basis: {
97
+ face: raw.basis.face,
98
+ body: raw.basis.body,
99
+ names: raw.basis.names,
100
+ scale: expect(get(raw.basis.scale), Float32Array, components, "basis scale"),
101
+ cage: expect(get(raw.basis.cage), Float32Array, cageCount * 3, "cage"),
102
+ rows: expect(get(raw.basis.rows), Int16Array, components * cageCount * 3, "basis rows")
103
+ },
104
+ anchors: {
105
+ names: raw.anchors.names,
106
+ layout: raw.anchors.layout,
107
+ rest: expect(get(raw.anchors.rest), Float32Array, anchorCount * 3, "anchor rest"),
108
+ cageIndex: expect(get(raw.anchors.cage.index), Uint16Array, anchorCount * 4, "anchor cage index"),
109
+ cageWeight: expect(get(raw.anchors.cage.weight), Uint16Array, anchorCount * 4, "anchor cage weight")
110
+ },
111
+ humanoid: raw.humanoid
112
+ };
113
+ for (let m of base.materials)
114
+ if (m.image >= base.images.length || m.normal >= base.images.length) throw new IdentityFormatError("material image out of range");
115
+ for (let m of meshes) if (m.material < 0 || m.material >= base.materials.length) throw new IdentityFormatError("mesh material out of range");
116
+ for (let index of [base.jointCageIndex, base.anchors.cageIndex])
117
+ for (let i = 0; i < index.length; i++) if (index[i] >= cageCount) throw new IdentityFormatError("cage index out of range");
118
+ if (base.anchors.layout.length !== anchorCount) throw new IdentityFormatError("anchor layout does not match the anchors");
119
+ return base;
120
+ }
121
+ function cageDisplacement(base, coefficients, out) {
122
+ let cage = base.basis.cage.length;
123
+ out.fill(0);
124
+ let { rows, scale } = base.basis;
125
+ for (let k = 0; k < base.components; k++) {
126
+ let c = coefficients[k] * scale[k];
127
+ if (c === 0) continue;
128
+ let row = k * cage;
129
+ for (let i = 0; i < cage; i++) out[i] += rows[row + i] * c;
130
+ }
131
+ }
132
+ function blendCage(displacement, index, weight, item, out) {
133
+ let x = 0, y = 0, z = 0;
134
+ for (let k = 0; k < 4; k++) {
135
+ let w = weight[item * 4 + k] / 65535;
136
+ if (w === 0) continue;
137
+ let c = index[item * 4 + k] * 3;
138
+ x += displacement[c] * w, y += displacement[c + 1] * w, z += displacement[c + 2] * w;
139
+ }
140
+ out[0] = x, out[1] = y, out[2] = z;
141
+ }
142
+
143
+ // src/game/kit/identity/colour.ts
144
+ function fifthRoot(a) {
145
+ let r = 1;
146
+ for (let step = 0; step < 48; step++) {
147
+ let r2 = r * r;
148
+ r = (4 * r + a / (r2 * r2)) / 5;
149
+ }
150
+ return r;
151
+ }
152
+ function srgbToLinear(byte2) {
153
+ let c = byte2 / 255;
154
+ if (c <= 0.04045) return Math.fround(c / 12.92);
155
+ let y = (c + 0.055) / 1.055, y2 = y * y;
156
+ return Math.fround(y2 * fifthRoot(y2));
157
+ }
158
+ function luma(c) {
159
+ return (0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2]) / 255;
160
+ }
161
+ function distance(a, b) {
162
+ let dr = srgbToLinear(a[0]) - srgbToLinear(b[0]), dg = srgbToLinear(a[1]) - srgbToLinear(b[1]), db = srgbToLinear(a[2]) - srgbToLinear(b[2]);
163
+ return dr * dr * 0.2126 + dg * dg * 0.7152 + db * db * 0.0722 + (luma(a) - luma(b)) * (luma(a) - luma(b));
164
+ }
165
+ function mix(a, b, t) {
166
+ return [Math.round(a[0] + (b[0] - a[0]) * t), Math.round(a[1] + (b[1] - a[1]) * t), Math.round(a[2] + (b[2] - a[2]) * t)];
167
+ }
168
+ function nearestOnRamp(colour, ramp) {
169
+ let best = ramp[0], bestDistance = distance(colour, best);
170
+ for (let i = 0; i + 1 < ramp.length; i++)
171
+ for (let s = 0; s <= 16; s++) {
172
+ let candidate = mix(ramp[i], ramp[i + 1], s / 16), d = distance(colour, candidate);
173
+ d < bestDistance && (bestDistance = d, best = candidate);
174
+ }
175
+ return best;
176
+ }
177
+ function nearestInPalette(colour, palette) {
178
+ let best = 0, bestDistance = distance(colour, palette[0]);
179
+ for (let i = 1; i < palette.length; i++) {
180
+ let d = distance(colour, palette[i]);
181
+ d < bestDistance && (bestDistance = d, best = i);
182
+ }
183
+ return best;
184
+ }
185
+ function styliseColours(captured, palettes, stylise) {
186
+ let defaultSkin = palettes.skin[palettes.skin.length >> 1];
187
+ if (captured === null) return { skin: defaultSkin, hair: palettes.hair[0], eye: palettes.eye[0] };
188
+ let skinTarget = nearestOnRamp(captured.skin, palettes.skin), hairTarget = captured.hair === null ? palettes.hair[0] : palettes.hair[nearestInPalette(captured.hair, palettes.hair)], eyeTarget = captured.eye === null ? palettes.eye[0] : palettes.eye[nearestInPalette(captured.eye, palettes.eye)];
189
+ return {
190
+ skin: mix(captured.skin, skinTarget, stylise),
191
+ hair: captured.hair === null ? hairTarget : mix(captured.hair, hairTarget, stylise),
192
+ eye: eyeTarget
193
+ };
194
+ }
195
+
196
+ // src/game/kit/identity/tone.ts
197
+ var MONK_STOPS = 10, TONE_PER_STOP = 7280, TONE_MAX = (7280) * ((10) - 1), TONE_AMOUNT_MAX = 255, MONK_TONES = [
198
+ [246, 237, 228],
199
+ [243, 231, 219],
200
+ [247, 234, 208],
201
+ [234, 218, 186],
202
+ [215, 189, 150],
203
+ [160, 126, 86],
204
+ [130, 92, 67],
205
+ [96, 65, 52],
206
+ [58, 49, 42],
207
+ [41, 36, 32]
208
+ ], UNDERTONES = ["neutral", "warm", "cool", "olive"], UNDERTONE_SHIFT = {
209
+ neutral: [0, 0, 0],
210
+ warm: [14, 4, -16],
211
+ cool: [-10, -2, 14],
212
+ olive: [-8, 8, -10]
213
+ }, CHANNELS = 3, BYTE_MAX = 255, SHIFT_DENOMINATOR = (255) * (255) * (3), SEARCH_STEP = 16, SEARCH_AMOUNTS = [0, 85, 170, 255];
214
+ function toneRamp(value) {
215
+ let v = Math.min(Math.max(Math.round(value), 0), TONE_MAX), segment = Math.min(Math.floor(v / (7280)), (10) - 2), rem = v - segment * (7280), low = MONK_TONES[segment], high = MONK_TONES[segment + 1], channel = (c) => Math.floor((low[c] * ((7280) - rem) + high[c] * rem + (7280) / 2) / (7280));
216
+ return [channel(0), channel(1), channel(2)];
217
+ }
218
+ function divideRounded(numerator, denominator) {
219
+ let half = Math.floor(denominator / 2);
220
+ return numerator >= 0 ? Math.floor((numerator + half) / denominator) : -Math.floor((half - numerator) / denominator);
221
+ }
222
+ function toneColour(tone) {
223
+ let base = toneRamp(tone.value), sum = base[0] + base[1] + base[2], shift = UNDERTONE_SHIFT[tone.undertone], amount = Math.min(Math.max(Math.round(tone.amount), 0), (255)), channel = (c) => Math.min(Math.max(base[c] + divideRounded(shift[c] * amount * sum, SHIFT_DENOMINATOR), 0), (255));
224
+ return [channel(0), channel(1), channel(2)];
225
+ }
226
+ function monkTone(stop) {
227
+ return { value: Math.min(Math.max(Math.floor(stop), 0), (10) - 1) * (7280), undertone: "neutral", amount: 0 };
228
+ }
229
+ function snapTone(tone) {
230
+ let value = Math.min(Math.max(Math.round(tone.value), 0), TONE_MAX), stop = Math.min(Math.floor((value + (7280) / 2) / (7280)), (10) - 1);
231
+ return { ...tone, value: stop * (7280) };
232
+ }
233
+ function linearDistance(a, b) {
234
+ let sum = 0;
235
+ for (let c = 0; c < (3); c++) {
236
+ let d = srgbToLinear(a[c]) - srgbToLinear(b[c]);
237
+ sum += d * d;
238
+ }
239
+ return sum;
240
+ }
241
+ function toneFromColour(colour) {
242
+ let best = monkTone(0), bestDistance = Number.POSITIVE_INFINITY;
243
+ for (let value = 0; value <= TONE_MAX; value += (16))
244
+ for (let undertone of UNDERTONES)
245
+ for (let amount of SEARCH_AMOUNTS) {
246
+ if (undertone === "neutral" && amount !== 0) continue;
247
+ let tone = { value, undertone, amount }, d = linearDistance(colour, toneColour(tone));
248
+ d < bestDistance && (bestDistance = d, best = tone);
249
+ }
250
+ return best;
251
+ }
252
+
253
+ // src/game/kit/identity/params.ts
254
+ var IDENTITY_PARAMS_MAGIC = 1346652483, IDENTITY_PARAMS_VERSION = 2, IDENTITY_PARAMS_V1 = 1, COEFFICIENT_STEPS = 1024, MAX_SIGMA = 31, RESIDUAL_STEP_METRES = 5e-4, MAX_RESIDUAL_STEPS = 127, STYLISE_STEPS = 255;
255
+ var NEUTRAL_LEVEL = 128, NO_PART = 65535, CATALOGUE_PART = 32768, MAX_ASSISTIVE = 8, SKIN_CONDITIONS = ["plain", "vitiligo", "albinism"], CURL_PATTERNS = ["1A", "1B", "1C", "2A", "2B", "2C", "3A", "3B", "3C", "4A", "4B", "4C"], ASSISTIVE_KINDS = ["wheelchair", "prosthetic_arm", "prosthetic_leg", "hearing_aid", "cochlear_implant", "glasses", "cane"], ASSISTIVE_SIDES = ["centre", "left", "right", "both"], FLAG_RESIDUAL = 1, FLAG_PHOTO = 2, HEADER_BYTES = 12, V1_COLOUR_BYTES = 9, V1_STYLE_BYTES = 4, SKIN_BYTES = 8, HAIR_COLOUR_BYTES = 6, EYE_BYTES = 3, HAIR_BLOCK_BYTES = 10, STYLE_BYTES = 4, ASSISTIVE_COUNT_BYTES = 1, ASSISTIVE_BYTES = 4, FIXED_BLOCK_BYTES = (8) + (6) + (3) + (10) + (4) + (1), CHECK_BYTES = 2, I16_BYTES = 2, AXES = 3, CHECK_MASK = 65535, CHECK_SHIFT = 16, MAX_COUNT = 255, MAX_U16 = 65535, SKIN_MODE_TONE = 0, SKIN_MODE_RGB = 1, NEUTRAL_HAIR = {
256
+ pattern: "1A",
257
+ volume: (128),
258
+ density: (128),
259
+ hairline: (128),
260
+ edges: (128),
261
+ length: (128),
262
+ covering: (65535)
263
+ }, IdentityParamsError = class extends Error {
264
+ constructor(message) {
265
+ super(message), this.name = "IdentityParamsError";
266
+ }
267
+ };
268
+ function quantiseCoefficient(value) {
269
+ let steps = Math.round(value * (1024)), limit = (31) * (1024);
270
+ return Math.max(-limit, Math.min(limit, steps)) + 0;
271
+ }
272
+ function quantiseResidual(value) {
273
+ return Math.max(-(127), Math.min((127), Math.round(value / (5e-4)))) + 0;
274
+ }
275
+ function byte(value) {
276
+ return Math.max(0, Math.min((255), Math.round(value)));
277
+ }
278
+ function word(value) {
279
+ return Math.max(0, Math.min((65535), Math.round(value)));
280
+ }
281
+ function rgb(colour) {
282
+ return [byte(colour[0]), byte(colour[1]), byte(colour[2])];
283
+ }
284
+ function quantiseTone(tone) {
285
+ return { value: Math.min(word(tone.value), TONE_MAX), undertone: tone.undertone, amount: byte(tone.amount) };
286
+ }
287
+ function isCatalogueHair(style) {
288
+ return style >= (32768) && style !== (65535);
289
+ }
290
+ function catalogueHair(part) {
291
+ return (32768) + Math.max(0, Math.min((65535) - (32768) - 1, Math.round(part)));
292
+ }
293
+ function quantiseIdentity(params) {
294
+ let tone = params.tone === null ? null : quantiseTone(params.tone), block = params.hairBlock;
295
+ return {
296
+ ...params,
297
+ basis: params.basis >>> 0,
298
+ face: Float32Array.from(params.face, (v) => quantiseCoefficient(v) / (1024)),
299
+ body: Float32Array.from(params.body, (v) => quantiseCoefficient(v) / (1024)),
300
+ skin: tone === null ? rgb(params.skin) : toneColour(tone),
301
+ tone,
302
+ conditionAmount: byte(params.conditionAmount),
303
+ conditionSeed: byte(params.conditionSeed),
304
+ hair: rgb(params.hair),
305
+ hairTip: rgb(params.hairTip),
306
+ eye: rgb(params.eye),
307
+ hairStyle: word(params.hairStyle),
308
+ hairBlock: { pattern: block.pattern, volume: byte(block.volume), density: byte(block.density), hairline: byte(block.hairline), edges: byte(block.edges), length: byte(block.length), covering: word(block.covering) },
309
+ brows: byte(params.brows),
310
+ facialHair: byte(params.facialHair),
311
+ stylise: byte(params.stylise * (255)) / (255),
312
+ height: byte(params.height),
313
+ assistive: params.assistive.map((a) => ({ kind: a.kind, side: a.side, part: word(a.part) })),
314
+ residual: params.residual === null ? null : Float32Array.from(params.residual, (v) => quantiseResidual(v) * (5e-4))
315
+ };
316
+ }
317
+ function identityParamsBytes(face, body, residualAnchors, assistive = 0) {
318
+ let residual = residualAnchors > 0 ? 1 + residualAnchors * (3) : 0;
319
+ return (12) + (face + body) * (2) + FIXED_BLOCK_BYTES + assistive * (4) + residual + (2);
320
+ }
321
+ function check(bytes) {
322
+ let hash = fnv1a(bytes);
323
+ return (hash ^ hash >>> (16)) & (65535);
324
+ }
325
+ function indexOf(values, value) {
326
+ let at = values.indexOf(value);
327
+ if (at < 0) throw new IdentityParamsError("identity parameters hold an out-of-range field");
328
+ return at;
329
+ }
330
+ function valueAt(values, at) {
331
+ if (at >= values.length) throw new IdentityParamsError("identity parameters hold an out-of-range field");
332
+ return values[at];
333
+ }
334
+ function encodeIdentity(params) {
335
+ let face = params.face.length, body = params.body.length;
336
+ if (face > (255) || body > (255)) throw new IdentityParamsError("too many coefficients");
337
+ let residual = params.residual;
338
+ if (residual !== null && (residual.length % (3) !== 0 || residual.length / (3) > (255))) throw new IdentityParamsError("residual must hold up to 255 anchors");
339
+ if (params.assistive.length > (8)) throw new IdentityParamsError("too many assistive parts");
340
+ let anchors = residual === null ? 0 : residual.length / (3), length = identityParamsBytes(face, body, anchors, params.assistive.length) + (residual !== null && anchors === 0 ? 1 : 0), out = new Uint8Array(length), view = new DataView(out.buffer);
341
+ view.setUint32(0, (1346652483), true), out[4] = (2), out[5] = (residual !== null ? (1) : 0) | (params.fromPhoto ? (2) : 0), view.setUint32(6, params.basis >>> 0, true), out[10] = face, out[11] = body;
342
+ let at = (12);
343
+ for (let i = 0; i < face; i++, at += (2)) view.setInt16(at, quantiseCoefficient(params.face[i]), true);
344
+ for (let i = 0; i < body; i++, at += (2)) view.setInt16(at, quantiseCoefficient(params.body[i]), true);
345
+ if (params.tone !== null) {
346
+ let tone = quantiseTone(params.tone);
347
+ out[at++] = (0), view.setUint16(at, tone.value, true), at += (2), out[at++] = indexOf(UNDERTONES, tone.undertone), out[at++] = tone.amount;
348
+ } else {
349
+ out[at++] = (1);
350
+ for (let c = 0; c < (3); c++) out[at++] = byte(params.skin[c]);
351
+ out[at++] = 0;
352
+ }
353
+ out[at++] = indexOf(SKIN_CONDITIONS, params.condition), out[at++] = byte(params.conditionAmount), out[at++] = byte(params.conditionSeed);
354
+ for (let colour of [params.hair, params.hairTip, params.eye]) for (let c = 0; c < (3); c++) out[at++] = byte(colour[c]);
355
+ let block = params.hairBlock;
356
+ out[at++] = indexOf(CURL_PATTERNS, block.pattern);
357
+ for (let level of [block.volume, block.density, block.hairline, block.edges, block.length]) out[at++] = byte(level);
358
+ view.setUint16(at, word(params.hairStyle), true), at += (2), view.setUint16(at, word(block.covering), true), at += (2), out[at++] = byte(params.brows), out[at++] = byte(params.facialHair), out[at++] = byte(params.stylise * (255)), out[at++] = byte(params.height), out[at++] = params.assistive.length;
359
+ for (let part of params.assistive)
360
+ out[at++] = indexOf(ASSISTIVE_KINDS, part.kind), out[at++] = indexOf(ASSISTIVE_SIDES, part.side), view.setUint16(at, word(part.part), true), at += (2);
361
+ if (residual !== null) {
362
+ out[at++] = anchors;
363
+ for (let i = 0; i < residual.length; i++) view.setInt8(at++, quantiseResidual(residual[i]));
364
+ }
365
+ return view.setUint16(at, check(out.subarray(0, at)), true), out;
366
+ }
367
+ var ParamReader = class {
368
+ constructor(bytes) {
369
+ this.bytes = bytes;
370
+ this.at = (12);
371
+ this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
372
+ }
373
+ need(n) {
374
+ if (this.at + n + (2) > this.bytes.byteLength) throw new IdentityParamsError("identity parameters are truncated");
375
+ }
376
+ byte() {
377
+ return this.bytes[this.at++];
378
+ }
379
+ word() {
380
+ let value = this.view.getUint16(this.at, true);
381
+ return this.at += (2), value;
382
+ }
383
+ colour() {
384
+ let c = [this.bytes[this.at], this.bytes[this.at + 1], this.bytes[this.at + 2]];
385
+ return this.at += (3), c;
386
+ }
387
+ coefficients(count) {
388
+ this.need(count * (2));
389
+ let values = new Float32Array(count);
390
+ for (let i = 0; i < count; i++, this.at += (2)) values[i] = this.view.getInt16(this.at, true) / (1024);
391
+ return values;
392
+ }
393
+ residual(flags) {
394
+ if ((flags & (1)) === 0) return null;
395
+ this.need(1);
396
+ let anchors = this.byte();
397
+ this.need(anchors * (3));
398
+ let residual = new Float32Array(anchors * (3));
399
+ for (let i = 0; i < residual.length; i++) residual[i] = this.view.getInt8(this.at++) * (5e-4);
400
+ return residual;
401
+ }
402
+ finish() {
403
+ if (this.at + (2) !== this.bytes.byteLength) throw new IdentityParamsError("identity parameters have trailing bytes");
404
+ if (this.view.getUint16(this.at, true) !== check(this.bytes.subarray(0, this.at))) throw new IdentityParamsError("identity parameter checksum mismatch");
405
+ }
406
+ };
407
+ function decodeV1(r, basis, flags, face, body) {
408
+ let faceValues = r.coefficients(face), bodyValues = r.coefficients(body);
409
+ r.need((9) + (4));
410
+ let skin = r.colour(), hair = r.colour(), eye = r.colour(), hairStyle = r.byte(), brows = r.byte(), facialHair = r.byte(), stylise = r.byte() / (255), residual = r.residual(flags);
411
+ return r.finish(), {
412
+ basis,
413
+ face: faceValues,
414
+ body: bodyValues,
415
+ skin,
416
+ tone: null,
417
+ condition: "plain",
418
+ conditionAmount: 0,
419
+ conditionSeed: 0,
420
+ hair,
421
+ hairTip: hair,
422
+ eye,
423
+ hairStyle,
424
+ hairBlock: NEUTRAL_HAIR,
425
+ brows,
426
+ facialHair,
427
+ stylise,
428
+ height: (128),
429
+ assistive: [],
430
+ fromPhoto: (flags & (2)) !== 0,
431
+ residual
432
+ };
433
+ }
434
+ function decodeV2(r, basis, flags, face, body) {
435
+ if ((flags & -4) !== 0) throw new IdentityParamsError("identity parameters hold an out-of-range field");
436
+ let faceValues = r.coefficients(face), bodyValues = r.coefficients(body);
437
+ r.need(FIXED_BLOCK_BYTES);
438
+ let tone = null, skin, mode = r.byte();
439
+ if (mode === (0)) {
440
+ let value = r.word();
441
+ if (tone = { value, undertone: valueAt(UNDERTONES, r.byte()), amount: r.byte() }, value > TONE_MAX) throw new IdentityParamsError("identity parameters hold an out-of-range field");
442
+ skin = toneColour(tone);
443
+ } else if (mode === (1)) {
444
+ if (skin = r.colour(), r.byte() !== 0) throw new IdentityParamsError("identity parameters hold an out-of-range field");
445
+ } else throw new IdentityParamsError("identity parameters hold an out-of-range field");
446
+ let condition = valueAt(SKIN_CONDITIONS, r.byte()), conditionAmount = r.byte(), conditionSeed = r.byte(), hair = r.colour(), hairTip = r.colour(), eye = r.colour(), pattern = valueAt(CURL_PATTERNS, r.byte()), volume = r.byte(), density = r.byte(), hairline = r.byte(), edges = r.byte(), length = r.byte(), hairStyle = r.word(), covering = r.word(), brows = r.byte(), facialHair = r.byte(), stylise = r.byte() / (255), height = r.byte(), count = r.byte();
447
+ if (count > (8)) throw new IdentityParamsError("identity parameters hold an out-of-range field");
448
+ r.need(count * (4));
449
+ let assistive = [];
450
+ for (let i = 0; i < count; i++) assistive.push({ kind: valueAt(ASSISTIVE_KINDS, r.byte()), side: valueAt(ASSISTIVE_SIDES, r.byte()), part: r.word() });
451
+ let residual = r.residual(flags);
452
+ return r.finish(), {
453
+ basis,
454
+ face: faceValues,
455
+ body: bodyValues,
456
+ skin,
457
+ tone,
458
+ condition,
459
+ conditionAmount,
460
+ conditionSeed,
461
+ hair,
462
+ hairTip,
463
+ eye,
464
+ hairStyle,
465
+ hairBlock: { pattern, volume, density, hairline, edges, length, covering },
466
+ brows,
467
+ facialHair,
468
+ stylise,
469
+ height,
470
+ assistive,
471
+ fromPhoto: (flags & (2)) !== 0,
472
+ residual
473
+ };
474
+ }
475
+ function decodeIdentity(bytes) {
476
+ if (bytes.byteLength < (12) + (2)) throw new IdentityParamsError("identity parameters are truncated");
477
+ let r = new ParamReader(bytes);
478
+ if (r.view.getUint32(0, true) !== (1346652483)) throw new IdentityParamsError("not identity parameters");
479
+ let basis = r.view.getUint32(6, true), flags = bytes[5], face = bytes[10], body = bytes[11];
480
+ if (bytes[4] === (1)) return decodeV1(r, basis, flags, face, body);
481
+ if (bytes[4] === (2)) return decodeV2(r, basis, flags, face, body);
482
+ throw new IdentityParamsError("unsupported identity parameter version");
483
+ }
484
+ function checkIdentityFits(base, params) {
485
+ if (params.basis !== base.id) throw new IdentityParamsError("parameters were made for a different identity base");
486
+ if (params.face.length !== base.basis.face || params.body.length !== base.basis.body) throw new IdentityParamsError("coefficient counts do not match the identity base");
487
+ if (params.residual !== null && params.residual.length !== base.anchors.names.length * (3)) throw new IdentityParamsError("residual does not match the identity anchors");
488
+ if (params.hairStyle < (32768) && params.hairStyle >= base.styles.hair.length || params.brows >= base.styles.brows.length || params.facialHair >= base.styles.facialHair.length)
489
+ throw new IdentityParamsError("style index out of range");
490
+ }
491
+ function neutralIdentity(base) {
492
+ let hair = base.palettes.hair[0];
493
+ return {
494
+ basis: base.id,
495
+ face: new Float32Array(base.basis.face),
496
+ body: new Float32Array(base.basis.body),
497
+ skin: base.palettes.skin[Math.floor(base.palettes.skin.length / 2)],
498
+ tone: null,
499
+ condition: "plain",
500
+ conditionAmount: 0,
501
+ conditionSeed: 0,
502
+ hair,
503
+ hairTip: hair,
504
+ eye: base.palettes.eye[0],
505
+ hairStyle: 0,
506
+ hairBlock: NEUTRAL_HAIR,
507
+ brows: 0,
508
+ facialHair: 0,
509
+ stylise: 1,
510
+ height: (128),
511
+ assistive: [],
512
+ fromPhoto: false,
513
+ residual: null
514
+ };
515
+ }
516
+
517
+ export { CURL_PATTERNS, MONK_TONES, NEUTRAL_HAIR, NEUTRAL_LEVEL, NO_PART, blendCage, cageDisplacement, catalogueHair, checkIdentityFits, decodeIdentity, encodeIdentity, isCatalogueHair, monkTone, neutralIdentity, parseIdentityBase, quantiseIdentity, snapTone, srgbToLinear, styliseColours, toneColour, toneFromColour };
@@ -0,0 +1,88 @@
1
+ import { GameError } from './chunk-XJIHN3BY.mjs';
2
+
3
+ // src/game/text/registry.ts
4
+ var tables = /* @__PURE__ */ new Map();
5
+ function registerFontTable(font, table) {
6
+ tables.set(font, table);
7
+ }
8
+ function fontTable(font) {
9
+ return tables.get(font);
10
+ }
11
+
12
+ // src/game/text/font.ts
13
+ var ASCII = 128, NO_GLYPH = 65535, FORMS = 4, FORM_ISOLATED = 0, FORM_FINAL = 1, FORM_INITIAL = 2, FORM_MEDIAL = 3, LIGATURE_FORMS = 2, MAGIC = 1414415939, VERSION = 2, HEADER = 64, SECTION_ALIGN = 16, WORD = 4;
14
+ function alignUp(value) {
15
+ return Math.ceil(value / (16)) * (16);
16
+ }
17
+ var FontTable = class {
18
+ constructor(bytes) {
19
+ let header = new DataView(bytes);
20
+ if (bytes.byteLength < (64) || header.getUint32(0, true) !== (1414415939) || header.getUint32(4, true) !== (2))
21
+ throw new GameError("asset_load_failed", "font table is not a Cimplify font");
22
+ let word = (i) => header.getUint32(4 + i * (4), true), float = (i) => header.getFloat32(4 + i * (4), true), glyphs = word(1), cmap = word(2), kerning = word(3), forms = word(12), ligatures = word(13);
23
+ this.glyphCount = glyphs, this.fallback = word(11), this.metrics = {
24
+ atlas: [word(4), word(5)],
25
+ emPx: float(6),
26
+ rangePx: float(7),
27
+ ascender: float(8),
28
+ descender: float(9),
29
+ lineGap: float(10)
30
+ };
31
+ let at = (64), take = (bytesNeeded) => {
32
+ let start = at;
33
+ return at = alignUp(at + bytesNeeded), start;
34
+ }, ascii = take((128) * 2), codepoints = take(cmap * 4), cmapGlyphs = take(cmap * 2), advances = take(glyphs * 4), planes = take(glyphs * 16), uvs = take(glyphs * 16), kernKeys = take(kerning * 4), kernValues = take(kerning * 4), kernRows = take((glyphs + 1) * 4), formCodepoints = take(forms * 4), formGlyphs = take(forms * (4) * 2), ligatureKeys = take(ligatures * 8), ligatureGlyphs = take(ligatures * (2) * 2);
35
+ if (at !== bytes.byteLength || glyphs === 0 || this.fallback >= glyphs)
36
+ throw new GameError("asset_load_failed", "font table sections do not match its header");
37
+ this.ascii = new Uint16Array(bytes, ascii, (128)), this.codepoints = new Uint32Array(bytes, codepoints, cmap), this.cmapGlyphs = new Uint16Array(bytes, cmapGlyphs, cmap), this.advances = new Float32Array(bytes, advances, glyphs), this.planes = new Float32Array(bytes, planes, glyphs * 4), this.uvs = new Float32Array(bytes, uvs, glyphs * 4), this.kernKeys = new Uint32Array(bytes, kernKeys, kerning), this.kernValues = new Float32Array(bytes, kernValues, kerning), this.kernRows = new Uint32Array(bytes, kernRows, glyphs + 1), this.formCodepoints = new Uint32Array(bytes, formCodepoints, forms), this.formGlyphs = new Uint16Array(bytes, formGlyphs, forms * (4)), this.ligatureKeys = new Uint32Array(bytes, ligatureKeys, ligatures * 2), this.ligatureGlyphs = new Uint16Array(bytes, ligatureGlyphs, ligatures * (2));
38
+ }
39
+ lookup(codepoint) {
40
+ if (codepoint < (128)) return this.ascii[codepoint];
41
+ let index = search(this.codepoints, 0, this.codepoints.length, codepoint);
42
+ return index < 0 ? (65535) : this.cmapGlyphs[index];
43
+ }
44
+ glyph(codepoint) {
45
+ let glyph = this.lookup(codepoint);
46
+ return glyph === (65535) ? this.fallback : glyph;
47
+ }
48
+ advance(glyph) {
49
+ return this.advances[glyph];
50
+ }
51
+ plane(glyph, corner) {
52
+ return this.planes[glyph * 4 + corner];
53
+ }
54
+ uv(glyph, corner) {
55
+ return this.uvs[glyph * 4 + corner];
56
+ }
57
+ kerning(left, right) {
58
+ let start = this.kernRows[left], end = this.kernRows[left + 1];
59
+ if (start === end) return 0;
60
+ let index = search(this.kernKeys, start, end, (left << 16 | right) >>> 0);
61
+ return index < 0 ? 0 : this.kernValues[index];
62
+ }
63
+ get hasForms() {
64
+ return this.formCodepoints.length > 0;
65
+ }
66
+ form(codepoint, form) {
67
+ let index = search(this.formCodepoints, 0, this.formCodepoints.length, codepoint);
68
+ return index < 0 ? (65535) : this.formGlyphs[index * (4) + form];
69
+ }
70
+ ligature(first, second, form) {
71
+ let low = 0, high = this.ligatureKeys.length / 2;
72
+ for (; low < high; ) {
73
+ let middle = low + high >>> 1, a = this.ligatureKeys[middle * 2], b = this.ligatureKeys[middle * 2 + 1];
74
+ a < first || a === first && b < second ? low = middle + 1 : high = middle;
75
+ }
76
+ return low < this.ligatureKeys.length / 2 && this.ligatureKeys[low * 2] === first && this.ligatureKeys[low * 2 + 1] === second ? this.ligatureGlyphs[low * (2) + form] : (65535);
77
+ }
78
+ };
79
+ function search(keys, start, end, key) {
80
+ let low = start, high = end;
81
+ for (; low < high; ) {
82
+ let middle = low + high >>> 1;
83
+ keys[middle] < key ? low = middle + 1 : high = middle;
84
+ }
85
+ return low < end && keys[low] === key ? low : -1;
86
+ }
87
+
88
+ export { FORM_FINAL, FORM_INITIAL, FORM_ISOLATED, FORM_MEDIAL, FontTable, NO_GLYPH, fontTable, registerFontTable };
@@ -0,0 +1,8 @@
1
+ // src/game/errors.ts
2
+ var GameError = class extends Error {
3
+ constructor(code, message) {
4
+ super(message), this.name = "GameError", this.code = code;
5
+ }
6
+ };
7
+
8
+ export { GameError };