redscript-mc 2.6.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/.github/workflows/ci.yml +11 -0
  2. package/CHANGELOG.md +18 -9
  3. package/README-benchmarks.md +48 -0
  4. package/README-vscode-test.md +251 -0
  5. package/RELEASE_NOTES.md +74 -0
  6. package/ROADMAP.md +131 -167
  7. package/benchmarks/_shared.ts +468 -0
  8. package/benchmarks/baseline.json +2816 -0
  9. package/benchmarks/baseline.md +13 -0
  10. package/benchmarks/compiler-perf.report.json +207 -0
  11. package/benchmarks/compiler-perf.ts +76 -0
  12. package/benchmarks/results.md +13 -0
  13. package/benchmarks/stdlib-complexity.report.json +2606 -0
  14. package/benchmarks/stdlib-complexity.ts +54 -0
  15. package/benchmarks/stdlib-size.md +57 -0
  16. package/benchmarks/stdlib-size.ts +91 -0
  17. package/coverage-report.md +177 -0
  18. package/dist/src/__tests__/budget.test.js +4 -0
  19. package/dist/src/__tests__/cache/cache-behavior.test.d.ts +10 -0
  20. package/dist/src/__tests__/cache/cache-behavior.test.js +425 -0
  21. package/dist/src/__tests__/cache-extra.test.d.ts +5 -0
  22. package/dist/src/__tests__/cache-extra.test.js +211 -0
  23. package/dist/src/__tests__/cli-init.test.d.ts +1 -0
  24. package/dist/src/__tests__/cli-init.test.js +97 -0
  25. package/dist/src/__tests__/cli-publish.test.d.ts +9 -0
  26. package/dist/src/__tests__/cli-publish.test.js +189 -0
  27. package/dist/src/__tests__/cli.test.js +76 -0
  28. package/dist/src/__tests__/compile-preprocess.test.d.ts +11 -0
  29. package/dist/src/__tests__/compile-preprocess.test.js +328 -0
  30. package/dist/src/__tests__/compiler/break-stmt.test.d.ts +1 -0
  31. package/dist/src/__tests__/compiler/break-stmt.test.js +58 -0
  32. package/dist/src/__tests__/compiler/const-decl.test.d.ts +1 -0
  33. package/dist/src/__tests__/compiler/const-decl.test.js +123 -0
  34. package/dist/src/__tests__/compiler/continue-stmt.test.d.ts +1 -0
  35. package/dist/src/__tests__/compiler/continue-stmt.test.js +67 -0
  36. package/dist/src/__tests__/compiler/coroutine-extended.test.d.ts +17 -0
  37. package/dist/src/__tests__/compiler/coroutine-extended.test.js +565 -0
  38. package/dist/src/__tests__/compiler/deprecated.test.d.ts +4 -0
  39. package/dist/src/__tests__/compiler/deprecated.test.js +285 -0
  40. package/dist/src/__tests__/compiler/do-while.test.d.ts +1 -0
  41. package/dist/src/__tests__/compiler/do-while.test.js +120 -0
  42. package/dist/src/__tests__/compiler/enum-payload.test.d.ts +9 -0
  43. package/dist/src/__tests__/compiler/enum-payload.test.js +272 -0
  44. package/dist/src/__tests__/compiler/interface.test.d.ts +10 -0
  45. package/dist/src/__tests__/compiler/interface.test.js +258 -0
  46. package/dist/src/__tests__/compiler/labeled-loops.test.d.ts +1 -0
  47. package/dist/src/__tests__/compiler/labeled-loops.test.js +263 -0
  48. package/dist/src/__tests__/compiler/match-string.test.d.ts +1 -0
  49. package/dist/src/__tests__/compiler/match-string.test.js +43 -0
  50. package/dist/src/__tests__/compiler/memoize.test.d.ts +1 -0
  51. package/dist/src/__tests__/compiler/memoize.test.js +113 -0
  52. package/dist/src/__tests__/compiler/method-chain.test.d.ts +5 -0
  53. package/dist/src/__tests__/compiler/method-chain.test.js +115 -0
  54. package/dist/src/__tests__/compiler/module-import.test.d.ts +12 -0
  55. package/dist/src/__tests__/compiler/module-import.test.js +261 -0
  56. package/dist/src/__tests__/compiler/option-extensions.test.d.ts +6 -0
  57. package/dist/src/__tests__/compiler/option-extensions.test.js +191 -0
  58. package/dist/src/__tests__/compiler/profile-decorator.test.d.ts +1 -0
  59. package/dist/src/__tests__/compiler/profile-decorator.test.js +69 -0
  60. package/dist/src/__tests__/compiler/string-advanced.test.d.ts +7 -0
  61. package/dist/src/__tests__/compiler/string-advanced.test.js +281 -0
  62. package/dist/src/__tests__/compiler/struct-extends.test.d.ts +1 -0
  63. package/dist/src/__tests__/compiler/struct-extends.test.js +95 -0
  64. package/dist/src/__tests__/compiler/throttle-retry.test.d.ts +1 -0
  65. package/dist/src/__tests__/compiler/throttle-retry.test.js +166 -0
  66. package/dist/src/__tests__/compiler/tuple-type.test.d.ts +10 -0
  67. package/dist/src/__tests__/compiler/tuple-type.test.js +229 -0
  68. package/dist/src/__tests__/compiler/watch-decorator.test.d.ts +1 -0
  69. package/dist/src/__tests__/compiler/watch-decorator.test.js +65 -0
  70. package/dist/src/__tests__/config/project-config.test.d.ts +1 -0
  71. package/dist/src/__tests__/config/project-config.test.js +199 -0
  72. package/dist/src/__tests__/config-decorator.test.d.ts +8 -0
  73. package/dist/src/__tests__/config-decorator.test.js +142 -0
  74. package/dist/src/__tests__/diagnostics-extra.test.d.ts +6 -0
  75. package/dist/src/__tests__/diagnostics-extra.test.js +132 -0
  76. package/dist/src/__tests__/emit/compile-branches.test.d.ts +1 -0
  77. package/dist/src/__tests__/emit/compile-branches.test.js +123 -0
  78. package/dist/src/__tests__/emit/compile-coverage.test.d.ts +25 -0
  79. package/dist/src/__tests__/emit/compile-coverage.test.js +617 -0
  80. package/dist/src/__tests__/emit/compile-extra-branches.test.d.ts +12 -0
  81. package/dist/src/__tests__/emit/compile-extra-branches.test.js +225 -0
  82. package/dist/src/__tests__/emit/compile-mocked-branches.test.d.ts +0 -0
  83. package/dist/src/__tests__/emit/compile-mocked-branches.test.js +238 -0
  84. package/dist/src/__tests__/emit/execute-chain.test.d.ts +10 -0
  85. package/dist/src/__tests__/emit/execute-chain.test.js +94 -0
  86. package/dist/src/__tests__/emit/index.test.js +2 -1
  87. package/dist/src/__tests__/emit/modules-branches.test.d.ts +1 -0
  88. package/dist/src/__tests__/emit/modules-branches.test.js +88 -0
  89. package/dist/src/__tests__/emit/modules-coverage.test.d.ts +15 -0
  90. package/dist/src/__tests__/emit/modules-coverage.test.js +221 -0
  91. package/dist/src/__tests__/emit/modules-errors.test.d.ts +12 -0
  92. package/dist/src/__tests__/emit/modules-errors.test.js +169 -0
  93. package/dist/src/__tests__/emit/modules-rewrite.test.d.ts +17 -0
  94. package/dist/src/__tests__/emit/modules-rewrite.test.js +204 -0
  95. package/dist/src/__tests__/emit/source-map.test.d.ts +1 -0
  96. package/dist/src/__tests__/emit/source-map.test.js +167 -0
  97. package/dist/src/__tests__/enum.test.js +9 -4
  98. package/dist/src/__tests__/error-recovery.test.d.ts +7 -0
  99. package/dist/src/__tests__/error-recovery.test.js +217 -0
  100. package/dist/src/__tests__/events-types-extra.test.d.ts +10 -0
  101. package/dist/src/__tests__/events-types-extra.test.js +91 -0
  102. package/dist/src/__tests__/events-types.test.d.ts +4 -0
  103. package/dist/src/__tests__/events-types.test.js +56 -0
  104. package/dist/src/__tests__/formatter.test.js +13 -5
  105. package/dist/src/__tests__/hir/lower-extra.test.d.ts +9 -0
  106. package/dist/src/__tests__/hir/lower-extra.test.js +140 -0
  107. package/dist/src/__tests__/hir/monomorphize-extra.test.d.ts +15 -0
  108. package/dist/src/__tests__/hir/monomorphize-extra.test.js +200 -0
  109. package/dist/src/__tests__/hir/monomorphize-extra2.test.d.ts +16 -0
  110. package/dist/src/__tests__/hir/monomorphize-extra2.test.js +316 -0
  111. package/dist/src/__tests__/incremental.test.js +10 -2
  112. package/dist/src/__tests__/index-extra.test.d.ts +10 -0
  113. package/dist/src/__tests__/index-extra.test.js +71 -0
  114. package/dist/src/__tests__/lexer.test.js +2 -2
  115. package/dist/src/__tests__/lint/rules.test.d.ts +5 -0
  116. package/dist/src/__tests__/lint/rules.test.js +208 -0
  117. package/dist/src/__tests__/lir/lower.test.js +29 -0
  118. package/dist/src/__tests__/lir/verify.test.js +30 -0
  119. package/dist/src/__tests__/lsp/completion.test.d.ts +7 -0
  120. package/dist/src/__tests__/lsp/completion.test.js +583 -0
  121. package/dist/src/__tests__/lsp/definition.test.d.ts +7 -0
  122. package/dist/src/__tests__/lsp/definition.test.js +454 -0
  123. package/dist/src/__tests__/lsp/diagnostics.test.d.ts +10 -0
  124. package/dist/src/__tests__/lsp/diagnostics.test.js +98 -0
  125. package/dist/src/__tests__/lsp/hover-docs.test.d.ts +10 -0
  126. package/dist/src/__tests__/lsp/hover-docs.test.js +210 -0
  127. package/dist/src/__tests__/lsp.test.js +4 -1
  128. package/dist/src/__tests__/mc-integration/item-entity-events.test.js +4 -0
  129. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +4 -0
  130. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.d.ts +13 -0
  131. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1227 -0
  132. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.d.ts +13 -0
  133. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1509 -0
  134. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.d.ts +14 -0
  135. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1374 -0
  136. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.d.ts +10 -0
  137. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +759 -0
  138. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.d.ts +13 -0
  139. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +855 -0
  140. package/dist/src/__tests__/mc-integration/stdlib-coverage.test.js +4 -0
  141. package/dist/src/__tests__/mc-integration/syntax-coverage.test.js +4 -0
  142. package/dist/src/__tests__/mc-validator-coverage.test.d.ts +13 -0
  143. package/dist/src/__tests__/mc-validator-coverage.test.js +296 -0
  144. package/dist/src/__tests__/mc-validator-extra.test.d.ts +13 -0
  145. package/dist/src/__tests__/mc-validator-extra.test.js +245 -0
  146. package/dist/src/__tests__/mir/lower-extra.test.d.ts +20 -0
  147. package/dist/src/__tests__/mir/lower-extra.test.js +361 -0
  148. package/dist/src/__tests__/mir/lower-extra2.test.d.ts +17 -0
  149. package/dist/src/__tests__/mir/lower-extra2.test.js +317 -0
  150. package/dist/src/__tests__/mir/lower-extra3.test.d.ts +19 -0
  151. package/dist/src/__tests__/mir/lower-extra3.test.js +249 -0
  152. package/dist/src/__tests__/mir/lower-extra4.test.d.ts +23 -0
  153. package/dist/src/__tests__/mir/lower-extra4.test.js +606 -0
  154. package/dist/src/__tests__/mir/lower-extra5.test.d.ts +25 -0
  155. package/dist/src/__tests__/mir/lower-extra5.test.js +543 -0
  156. package/dist/src/__tests__/mir/lower-extra6.test.d.ts +16 -0
  157. package/dist/src/__tests__/mir/lower-extra6.test.js +471 -0
  158. package/dist/src/__tests__/mir/lower-extra7.test.d.ts +35 -0
  159. package/dist/src/__tests__/mir/lower-extra7.test.js +921 -0
  160. package/dist/src/__tests__/mir/lower-extra8.test.d.ts +19 -0
  161. package/dist/src/__tests__/mir/lower-extra8.test.js +626 -0
  162. package/dist/src/__tests__/mir/lower-extra9.test.d.ts +14 -0
  163. package/dist/src/__tests__/mir/lower-extra9.test.js +717 -0
  164. package/dist/src/__tests__/optimizer/auto-inline.test.d.ts +1 -0
  165. package/dist/src/__tests__/optimizer/auto-inline.test.js +176 -0
  166. package/dist/src/__tests__/optimizer/cse.test.d.ts +4 -0
  167. package/dist/src/__tests__/optimizer/cse.test.js +178 -0
  168. package/dist/src/__tests__/optimizer/inline_fn.test.d.ts +1 -0
  169. package/dist/src/__tests__/optimizer/inline_fn.test.js +221 -0
  170. package/dist/src/__tests__/optimizer/licm.test.d.ts +1 -0
  171. package/dist/src/__tests__/optimizer/licm.test.js +244 -0
  172. package/dist/src/__tests__/optimizer/optimizer-extended.test.d.ts +12 -0
  173. package/dist/src/__tests__/optimizer/optimizer-extended.test.js +993 -0
  174. package/dist/src/__tests__/optimizer/strength-reduction.test.d.ts +1 -0
  175. package/dist/src/__tests__/optimizer/strength-reduction.test.js +86 -0
  176. package/dist/src/__tests__/optimizer/tco.test.d.ts +14 -0
  177. package/dist/src/__tests__/optimizer/tco.test.js +203 -0
  178. package/dist/src/__tests__/parser-coverage.test.d.ts +25 -0
  179. package/dist/src/__tests__/parser-coverage.test.js +491 -0
  180. package/dist/src/__tests__/parser-extra.test.d.ts +6 -0
  181. package/dist/src/__tests__/parser-extra.test.js +451 -0
  182. package/dist/src/__tests__/parser.test.js +12 -0
  183. package/dist/src/__tests__/repl-extra.test.d.ts +13 -0
  184. package/dist/src/__tests__/repl-extra.test.js +174 -0
  185. package/dist/src/__tests__/repl-server-extra.test.d.ts +10 -0
  186. package/dist/src/__tests__/repl-server-extra.test.js +161 -0
  187. package/dist/src/__tests__/repl-server.test.d.ts +6 -0
  188. package/dist/src/__tests__/repl-server.test.js +146 -0
  189. package/dist/src/__tests__/runtime-extra.test.d.ts +15 -0
  190. package/dist/src/__tests__/runtime-extra.test.js +732 -0
  191. package/dist/src/__tests__/singleton-decorator.test.d.ts +11 -0
  192. package/dist/src/__tests__/singleton-decorator.test.js +260 -0
  193. package/dist/src/__tests__/sourcemap.test.js +1 -1
  194. package/dist/src/__tests__/stdlib/advanced.test.d.ts +5 -0
  195. package/dist/src/__tests__/stdlib/advanced.test.js +301 -0
  196. package/dist/src/__tests__/stdlib/bigint.test.d.ts +4 -0
  197. package/dist/src/__tests__/stdlib/bigint.test.js +83 -0
  198. package/dist/src/__tests__/stdlib/bits.test.d.ts +4 -0
  199. package/dist/src/__tests__/stdlib/bits.test.js +96 -0
  200. package/dist/src/__tests__/stdlib/bossbar.test.d.ts +4 -0
  201. package/dist/src/__tests__/stdlib/bossbar.test.js +72 -0
  202. package/dist/src/__tests__/stdlib/color.test.d.ts +4 -0
  203. package/dist/src/__tests__/stdlib/color.test.js +84 -0
  204. package/dist/src/__tests__/stdlib/combat.test.d.ts +4 -0
  205. package/dist/src/__tests__/stdlib/combat.test.js +64 -0
  206. package/dist/src/__tests__/stdlib/cooldown.test.d.ts +4 -0
  207. package/dist/src/__tests__/stdlib/cooldown.test.js +64 -0
  208. package/dist/src/__tests__/stdlib/dialog.test.js +15 -7
  209. package/dist/src/__tests__/stdlib/ecs.test.d.ts +4 -0
  210. package/dist/src/__tests__/stdlib/ecs.test.js +81 -0
  211. package/dist/src/__tests__/stdlib/effects.test.d.ts +4 -0
  212. package/dist/src/__tests__/stdlib/effects.test.js +72 -0
  213. package/dist/src/__tests__/stdlib/events.test.d.ts +4 -0
  214. package/dist/src/__tests__/stdlib/events.test.js +55 -0
  215. package/dist/src/__tests__/stdlib/expr.test.d.ts +4 -0
  216. package/dist/src/__tests__/stdlib/expr.test.js +77 -0
  217. package/dist/src/__tests__/stdlib/fft.test.d.ts +4 -0
  218. package/dist/src/__tests__/stdlib/fft.test.js +82 -0
  219. package/dist/src/__tests__/stdlib/graph.test.d.ts +4 -0
  220. package/dist/src/__tests__/stdlib/graph.test.js +102 -0
  221. package/dist/src/__tests__/stdlib/interactions.test.d.ts +4 -0
  222. package/dist/src/__tests__/stdlib/interactions.test.js +60 -0
  223. package/dist/src/__tests__/stdlib/inventory.test.d.ts +4 -0
  224. package/dist/src/__tests__/stdlib/inventory.test.js +68 -0
  225. package/dist/src/__tests__/stdlib/linalg.test.d.ts +5 -0
  226. package/dist/src/__tests__/stdlib/linalg.test.js +78 -0
  227. package/dist/src/__tests__/stdlib/map.test.d.ts +1 -0
  228. package/dist/src/__tests__/stdlib/map.test.js +84 -0
  229. package/dist/src/__tests__/stdlib/math.test.js +19 -6
  230. package/dist/src/__tests__/stdlib/math_hp.test.d.ts +4 -0
  231. package/dist/src/__tests__/stdlib/math_hp.test.js +80 -0
  232. package/dist/src/__tests__/stdlib/mobs.test.d.ts +4 -0
  233. package/dist/src/__tests__/stdlib/mobs.test.js +61 -0
  234. package/dist/src/__tests__/stdlib/noise.test.d.ts +4 -0
  235. package/dist/src/__tests__/stdlib/noise.test.js +73 -0
  236. package/dist/src/__tests__/stdlib/ode.test.d.ts +4 -0
  237. package/dist/src/__tests__/stdlib/ode.test.js +68 -0
  238. package/dist/src/__tests__/stdlib/parabola.test.d.ts +4 -0
  239. package/dist/src/__tests__/stdlib/parabola.test.js +77 -0
  240. package/dist/src/__tests__/stdlib/particles.test.d.ts +4 -0
  241. package/dist/src/__tests__/stdlib/particles.test.js +68 -0
  242. package/dist/src/__tests__/stdlib/physics.test.d.ts +4 -0
  243. package/dist/src/__tests__/stdlib/physics.test.js +76 -0
  244. package/dist/src/__tests__/stdlib/player.test.d.ts +4 -0
  245. package/dist/src/__tests__/stdlib/player.test.js +64 -0
  246. package/dist/src/__tests__/stdlib/quaternion.test.d.ts +4 -0
  247. package/dist/src/__tests__/stdlib/quaternion.test.js +73 -0
  248. package/dist/src/__tests__/stdlib/queue.test.d.ts +1 -0
  249. package/dist/src/__tests__/stdlib/queue.test.js +97 -0
  250. package/dist/src/__tests__/stdlib/random.test.d.ts +4 -0
  251. package/dist/src/__tests__/stdlib/random.test.js +76 -0
  252. package/dist/src/__tests__/stdlib/result.test.d.ts +12 -0
  253. package/dist/src/__tests__/stdlib/result.test.js +329 -0
  254. package/dist/src/__tests__/stdlib/scheduler.test.js +19 -8
  255. package/dist/src/__tests__/stdlib/set_int.test.d.ts +1 -0
  256. package/dist/src/__tests__/stdlib/set_int.test.js +88 -0
  257. package/dist/src/__tests__/stdlib/sets.test.d.ts +6 -0
  258. package/dist/src/__tests__/stdlib/sets.test.js +60 -0
  259. package/dist/src/__tests__/stdlib/signal.test.d.ts +4 -0
  260. package/dist/src/__tests__/stdlib/signal.test.js +84 -0
  261. package/dist/src/__tests__/stdlib/spawn.test.d.ts +4 -0
  262. package/dist/src/__tests__/stdlib/spawn.test.js +68 -0
  263. package/dist/src/__tests__/stdlib/string.test.d.ts +12 -0
  264. package/dist/src/__tests__/stdlib/string.test.js +231 -0
  265. package/dist/src/__tests__/stdlib/strings.test.d.ts +4 -0
  266. package/dist/src/__tests__/stdlib/strings.test.js +83 -0
  267. package/dist/src/__tests__/stdlib/tags.test.d.ts +4 -0
  268. package/dist/src/__tests__/stdlib/tags.test.js +57 -0
  269. package/dist/src/__tests__/stdlib/teams.test.d.ts +4 -0
  270. package/dist/src/__tests__/stdlib/teams.test.js +72 -0
  271. package/dist/src/__tests__/stdlib/timer.test.d.ts +4 -0
  272. package/dist/src/__tests__/stdlib/timer.test.js +79 -0
  273. package/dist/src/__tests__/stdlib/vec.test.d.ts +5 -0
  274. package/dist/src/__tests__/stdlib/vec.test.js +94 -0
  275. package/dist/src/__tests__/stdlib/world.test.d.ts +4 -0
  276. package/dist/src/__tests__/stdlib/world.test.js +72 -0
  277. package/dist/src/__tests__/struct-display.test.d.ts +1 -0
  278. package/dist/src/__tests__/struct-display.test.js +64 -0
  279. package/dist/src/__tests__/test-framework/runner.test.d.ts +10 -0
  280. package/dist/src/__tests__/test-framework/runner.test.js +193 -0
  281. package/dist/src/__tests__/tuner/adapters.test.d.ts +14 -0
  282. package/dist/src/__tests__/tuner/adapters.test.js +194 -0
  283. package/dist/src/__tests__/tuner/simulator-extra.test.d.ts +4 -0
  284. package/dist/src/__tests__/tuner/simulator-extra.test.js +193 -0
  285. package/dist/src/__tests__/typechecker-coverage.test.d.ts +30 -0
  286. package/dist/src/__tests__/typechecker-coverage.test.js +627 -0
  287. package/dist/src/__tests__/typechecker.test.js +3 -3
  288. package/dist/src/__tests__/watch-decorator.test.d.ts +1 -0
  289. package/dist/src/__tests__/watch-decorator.test.js +54 -0
  290. package/dist/src/ast/types.d.ts +102 -3
  291. package/dist/src/cache/incremental.d.ts +13 -14
  292. package/dist/src/cache/incremental.js +106 -89
  293. package/dist/src/cache/index.d.ts +8 -2
  294. package/dist/src/cache/index.js +18 -6
  295. package/dist/src/cli.d.ts +1 -0
  296. package/dist/src/cli.js +466 -17
  297. package/dist/src/config/project-config.d.ts +29 -0
  298. package/dist/src/config/project-config.js +180 -0
  299. package/dist/src/diagnostics/index.d.ts +9 -0
  300. package/dist/src/diagnostics/index.js +18 -1
  301. package/dist/src/emit/compile.d.ts +10 -0
  302. package/dist/src/emit/compile.js +395 -50
  303. package/dist/src/emit/index.d.ts +40 -0
  304. package/dist/src/emit/index.js +307 -14
  305. package/dist/src/emit/modules.js +21 -3
  306. package/dist/src/emit/sourcemap.d.ts +23 -27
  307. package/dist/src/emit/sourcemap.js +52 -30
  308. package/dist/src/formatter/index.js +33 -8
  309. package/dist/src/hir/deprecated.d.ts +13 -0
  310. package/dist/src/hir/deprecated.js +218 -0
  311. package/dist/src/hir/lower.js +114 -8
  312. package/dist/src/hir/monomorphize.js +22 -2
  313. package/dist/src/hir/types.d.ts +65 -1
  314. package/dist/src/index.d.ts +6 -0
  315. package/dist/src/index.js +18 -3
  316. package/dist/src/lexer/index.d.ts +2 -1
  317. package/dist/src/lexer/index.js +39 -3
  318. package/dist/src/lint/index.d.ts +45 -0
  319. package/dist/src/lint/index.js +930 -0
  320. package/dist/src/lir/lower.js +29 -2
  321. package/dist/src/lir/types.d.ts +2 -0
  322. package/dist/src/lsp/server.js +92 -5
  323. package/dist/src/mir/lower.js +775 -34
  324. package/dist/src/mir/macro.js +36 -2
  325. package/dist/src/mir/types.d.ts +12 -0
  326. package/dist/src/mir/verify.js +9 -0
  327. package/dist/src/optimizer/auto-inline.d.ts +2 -0
  328. package/dist/src/optimizer/auto-inline.js +67 -0
  329. package/dist/src/optimizer/cse.d.ts +20 -0
  330. package/dist/src/optimizer/cse.js +234 -0
  331. package/dist/src/optimizer/inline.d.ts +26 -0
  332. package/dist/src/optimizer/inline.js +286 -0
  333. package/dist/src/optimizer/interprocedural.js +4 -0
  334. package/dist/src/optimizer/licm.d.ts +32 -0
  335. package/dist/src/optimizer/licm.js +371 -0
  336. package/dist/src/optimizer/pipeline.js +12 -2
  337. package/dist/src/optimizer/strength_reduction.d.ts +15 -0
  338. package/dist/src/optimizer/strength_reduction.js +90 -0
  339. package/dist/src/optimizer/tco.d.ts +53 -0
  340. package/dist/src/optimizer/tco.js +238 -0
  341. package/dist/src/parser/index.d.ts +32 -0
  342. package/dist/src/parser/index.js +421 -59
  343. package/dist/src/repl-server.d.ts +13 -0
  344. package/dist/src/repl-server.js +127 -0
  345. package/dist/src/structs/expand.d.ts +15 -0
  346. package/dist/src/structs/expand.js +46 -0
  347. package/dist/src/testing/runner.d.ts +40 -0
  348. package/dist/src/testing/runner.js +237 -0
  349. package/dist/src/typechecker/index.d.ts +3 -0
  350. package/dist/src/typechecker/index.js +254 -9
  351. package/dist/tsconfig.tsbuildinfo +1 -1
  352. package/doc-drafts/redscript-docs/docs/en/stdlib/graph.md +104 -0
  353. package/doc-drafts/redscript-docs/docs/en/stdlib/parabola.md +113 -0
  354. package/doc-drafts/redscript-docs/docs/en/stdlib/pathfind.md +104 -0
  355. package/doc-drafts/redscript-docs/docs/en/stdlib/physics.md +134 -0
  356. package/doc-drafts/redscript-docs/docs/en/stdlib/quaternion.md +135 -0
  357. package/doc-drafts/redscript-docs/docs/zh/stdlib/graph.md +104 -0
  358. package/doc-drafts/redscript-docs/docs/zh/stdlib/parabola.md +113 -0
  359. package/doc-drafts/redscript-docs/docs/zh/stdlib/pathfind.md +104 -0
  360. package/doc-drafts/redscript-docs/docs/zh/stdlib/physics.md +134 -0
  361. package/doc-drafts/redscript-docs/docs/zh/stdlib/quaternion.md +135 -0
  362. package/docs/stdlib/result.md +156 -0
  363. package/docs/stdlib/result.zh.md +156 -0
  364. package/editors/vscode/fixtures/test.mcrs +7 -0
  365. package/editors/vscode/out/extension.js +2095 -225
  366. package/editors/vscode/out/lsp-server.js +519 -51
  367. package/editors/vscode/package-lock.json +9 -4
  368. package/editors/vscode/package.json +1 -1
  369. package/examples/display-demo.mcrs +64 -0
  370. package/examples/game/racing.mcrs +301 -0
  371. package/examples/game/tower_defense.mcrs +311 -0
  372. package/examples/math/physics_sim.mcrs +322 -0
  373. package/examples/rpg/boss_fight.mcrs +313 -0
  374. package/examples/rpg/health_system.mcrs +237 -0
  375. package/examples/rpg/inventory.mcrs +265 -0
  376. package/examples/util/debug_hud.mcrs +279 -0
  377. package/jest.config.js +10 -0
  378. package/package.json +12 -3
  379. package/playground/index.html +823 -0
  380. package/scripts/gen-docs.ts +533 -0
  381. package/scripts/update-redscript-docs-stdlib.sh +770 -0
  382. package/src/__tests__/budget.test.ts +5 -0
  383. package/src/__tests__/cache/cache-behavior.test.ts +480 -0
  384. package/src/__tests__/cache-extra.test.ts +199 -0
  385. package/src/__tests__/cli-docs.test.ts +77 -0
  386. package/src/__tests__/cli-init.test.ts +91 -0
  387. package/src/__tests__/cli-publish.test.ts +190 -0
  388. package/src/__tests__/cli.test.ts +117 -1
  389. package/src/__tests__/compile-preprocess.test.ts +366 -0
  390. package/src/__tests__/compiler/break-stmt.test.ts +66 -0
  391. package/src/__tests__/compiler/const-decl.test.ts +141 -0
  392. package/src/__tests__/compiler/continue-stmt.test.ts +81 -0
  393. package/src/__tests__/compiler/coroutine-extended.test.ts +723 -0
  394. package/src/__tests__/compiler/deprecated.test.ts +305 -0
  395. package/src/__tests__/compiler/do-while.test.ts +130 -0
  396. package/src/__tests__/compiler/enum-payload.test.ts +299 -0
  397. package/src/__tests__/compiler/interface.test.ts +287 -0
  398. package/src/__tests__/compiler/labeled-loops.test.ts +279 -0
  399. package/src/__tests__/compiler/match-string.test.ts +45 -0
  400. package/src/__tests__/compiler/memoize.test.ts +126 -0
  401. package/src/__tests__/compiler/method-chain.test.ts +121 -0
  402. package/src/__tests__/compiler/module-import.test.ts +240 -0
  403. package/src/__tests__/compiler/option-extensions.test.ts +207 -0
  404. package/src/__tests__/compiler/profile-decorator.test.ts +79 -0
  405. package/src/__tests__/compiler/string-advanced.test.ts +310 -0
  406. package/src/__tests__/compiler/struct-extends.test.ts +109 -0
  407. package/src/__tests__/compiler/throttle-retry.test.ts +191 -0
  408. package/src/__tests__/compiler/tuple-type.test.ts +263 -0
  409. package/src/__tests__/compiler/watch-decorator.test.ts +72 -0
  410. package/src/__tests__/config/project-config.test.ts +181 -0
  411. package/src/__tests__/config-decorator.test.ts +157 -0
  412. package/src/__tests__/diagnostics-extra.test.ts +155 -0
  413. package/src/__tests__/emit/compile-branches.test.ts +135 -0
  414. package/src/__tests__/emit/compile-coverage.test.ts +696 -0
  415. package/src/__tests__/emit/compile-extra-branches.test.ts +228 -0
  416. package/src/__tests__/emit/compile-mocked-branches.test.ts +249 -0
  417. package/src/__tests__/emit/compile.test.ts +6 -1
  418. package/src/__tests__/emit/execute-chain.test.ts +114 -0
  419. package/src/__tests__/emit/index.test.ts +2 -1
  420. package/src/__tests__/emit/modules-branches.test.ts +90 -0
  421. package/src/__tests__/emit/modules-coverage.test.ts +241 -0
  422. package/src/__tests__/emit/modules-errors.test.ts +192 -0
  423. package/src/__tests__/emit/modules-rewrite.test.ts +232 -0
  424. package/src/__tests__/emit/source-map.test.ts +152 -0
  425. package/src/__tests__/enum.test.ts +9 -4
  426. package/src/__tests__/error-recovery.test.ts +226 -0
  427. package/src/__tests__/events-types-extra.test.ts +110 -0
  428. package/src/__tests__/events-types.test.ts +66 -0
  429. package/src/__tests__/formatter.test.ts +15 -5
  430. package/src/__tests__/generics.test.ts +16 -9
  431. package/src/__tests__/hir/lower-extra.test.ts +151 -0
  432. package/src/__tests__/hir/monomorphize-coverage.test.ts +432 -0
  433. package/src/__tests__/hir/monomorphize-extra.test.ts +220 -0
  434. package/src/__tests__/hir/monomorphize-extra2.test.ts +350 -0
  435. package/src/__tests__/impl.test.ts +12 -8
  436. package/src/__tests__/incremental.test.ts +10 -2
  437. package/src/__tests__/index-extra.test.ts +79 -0
  438. package/src/__tests__/lexer.test.ts +2 -2
  439. package/src/__tests__/lint/hir-coverage.test.ts +1716 -0
  440. package/src/__tests__/lint/rules-coverage.test.ts +598 -0
  441. package/src/__tests__/lint/rules.test.ts +230 -0
  442. package/src/__tests__/lir/lower.test.ts +33 -0
  443. package/src/__tests__/lir/verify.test.ts +33 -0
  444. package/src/__tests__/lsp/completion.test.ts +687 -0
  445. package/src/__tests__/lsp/definition.test.ts +499 -0
  446. package/src/__tests__/lsp/diagnostics.test.ts +108 -0
  447. package/src/__tests__/lsp/hover-docs.test.ts +222 -0
  448. package/src/__tests__/lsp.test.ts +4 -1
  449. package/src/__tests__/mc-integration/item-entity-events.test.ts +5 -0
  450. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +5 -0
  451. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1105 -0
  452. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1366 -0
  453. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1245 -0
  454. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +755 -0
  455. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +771 -0
  456. package/src/__tests__/mc-integration/stdlib-coverage.test.ts +5 -0
  457. package/src/__tests__/mc-integration/syntax-coverage.test.ts +5 -0
  458. package/src/__tests__/mc-validator-coverage.test.ts +325 -0
  459. package/src/__tests__/mc-validator-extra.test.ts +252 -0
  460. package/src/__tests__/mir/lower-extra.test.ts +402 -0
  461. package/src/__tests__/mir/lower-extra2.test.ts +348 -0
  462. package/src/__tests__/mir/lower-extra3.test.ts +277 -0
  463. package/src/__tests__/mir/lower-extra4.test.ts +636 -0
  464. package/src/__tests__/mir/lower-extra5.test.ts +612 -0
  465. package/src/__tests__/mir/lower-extra6.test.ts +520 -0
  466. package/src/__tests__/mir/lower-extra7.test.ts +1045 -0
  467. package/src/__tests__/mir/lower-extra8.test.ts +704 -0
  468. package/src/__tests__/mir/lower-extra9.test.ts +821 -0
  469. package/src/__tests__/optimizer/auto-inline.test.ts +206 -0
  470. package/src/__tests__/optimizer/cse.test.ts +195 -0
  471. package/src/__tests__/optimizer/inline_fn.test.ts +263 -0
  472. package/src/__tests__/optimizer/licm.test.ts +358 -0
  473. package/src/__tests__/optimizer/nbt-coalesce.test.ts +147 -0
  474. package/src/__tests__/optimizer/optimizer-extended.test.ts +1081 -0
  475. package/src/__tests__/optimizer/scoreboard-batch.test.ts +141 -0
  476. package/src/__tests__/optimizer/strength-reduction.test.ts +111 -0
  477. package/src/__tests__/optimizer/tco-coverage.test.ts +309 -0
  478. package/src/__tests__/optimizer/tco.test.ts +238 -0
  479. package/src/__tests__/option.test.ts +14 -7
  480. package/src/__tests__/parser-coverage.test.ts +576 -0
  481. package/src/__tests__/parser-extra.test.ts +531 -0
  482. package/src/__tests__/parser.test.ts +14 -0
  483. package/src/__tests__/repl-extra.test.ts +195 -0
  484. package/src/__tests__/repl-server-extra.test.ts +150 -0
  485. package/src/__tests__/repl-server.test.ts +122 -0
  486. package/src/__tests__/runtime-extra.test.ts +862 -0
  487. package/src/__tests__/singleton-decorator.test.ts +285 -0
  488. package/src/__tests__/sourcemap.test.ts +1 -1
  489. package/src/__tests__/stdlib/advanced.test.ts +312 -0
  490. package/src/__tests__/stdlib/bigint.test.ts +57 -0
  491. package/src/__tests__/stdlib/bits.test.ts +75 -0
  492. package/src/__tests__/stdlib/bossbar.test.ts +45 -0
  493. package/src/__tests__/stdlib/color.test.ts +60 -0
  494. package/src/__tests__/stdlib/combat.test.ts +35 -0
  495. package/src/__tests__/stdlib/cooldown.test.ts +35 -0
  496. package/src/__tests__/stdlib/dialog.test.ts +14 -6
  497. package/src/__tests__/stdlib/ecs.test.ts +54 -0
  498. package/src/__tests__/stdlib/effects.test.ts +45 -0
  499. package/src/__tests__/stdlib/events.test.ts +23 -0
  500. package/src/__tests__/stdlib/expr.test.ts +48 -0
  501. package/src/__tests__/stdlib/fft.test.ts +54 -0
  502. package/src/__tests__/stdlib/graph.test.ts +77 -0
  503. package/src/__tests__/stdlib/interactions.test.ts +30 -0
  504. package/src/__tests__/stdlib/inventory.test.ts +40 -0
  505. package/src/__tests__/stdlib/linalg.test.ts +52 -0
  506. package/src/__tests__/stdlib/map.test.ts +55 -0
  507. package/src/__tests__/stdlib/math.test.ts +19 -5
  508. package/src/__tests__/stdlib/math_hp.test.ts +55 -0
  509. package/src/__tests__/stdlib/mobs.test.ts +40 -0
  510. package/src/__tests__/stdlib/noise.test.ts +46 -0
  511. package/src/__tests__/stdlib/ode.test.ts +40 -0
  512. package/src/__tests__/stdlib/parabola.test.ts +51 -0
  513. package/src/__tests__/stdlib/particles.test.ts +40 -0
  514. package/src/__tests__/stdlib/physics.test.ts +50 -0
  515. package/src/__tests__/stdlib/player.test.ts +35 -0
  516. package/src/__tests__/stdlib/quaternion.test.ts +46 -0
  517. package/src/__tests__/stdlib/queue.test.ts +73 -0
  518. package/src/__tests__/stdlib/random.test.ts +50 -0
  519. package/src/__tests__/stdlib/result.test.ts +326 -0
  520. package/src/__tests__/stdlib/scheduler.test.ts +18 -7
  521. package/src/__tests__/stdlib/set_int.test.ts +62 -0
  522. package/src/__tests__/stdlib/sets.test.ts +28 -0
  523. package/src/__tests__/stdlib/signal.test.ts +60 -0
  524. package/src/__tests__/stdlib/spawn.test.ts +40 -0
  525. package/src/__tests__/stdlib/string.test.ts +224 -0
  526. package/src/__tests__/stdlib/strings.test.ts +55 -0
  527. package/src/__tests__/stdlib/tags.test.ts +32 -0
  528. package/src/__tests__/stdlib/teams.test.ts +45 -0
  529. package/src/__tests__/stdlib/timer.test.ts +53 -0
  530. package/src/__tests__/stdlib/vec.test.ts +72 -0
  531. package/src/__tests__/stdlib/world.test.ts +45 -0
  532. package/src/__tests__/struct-display.test.ts +69 -0
  533. package/src/__tests__/test-framework/runner.test.ts +208 -0
  534. package/src/__tests__/tuner/adapters.test.ts +232 -0
  535. package/src/__tests__/tuner/simulator-extra.test.ts +222 -0
  536. package/src/__tests__/tuple.test.ts +11 -4
  537. package/src/__tests__/typechecker-coverage.test.ts +671 -0
  538. package/src/__tests__/typechecker.test.ts +4 -3
  539. package/src/__tests__/watch-decorator.test.ts +59 -0
  540. package/src/ast/types.ts +65 -3
  541. package/src/cache/incremental.ts +128 -99
  542. package/src/cache/index.ts +35 -8
  543. package/src/cli.ts +538 -29
  544. package/src/config/project-config.ts +176 -0
  545. package/src/diagnostics/index.ts +22 -0
  546. package/src/docs.ts +98 -0
  547. package/src/emit/compile.ts +408 -51
  548. package/src/emit/index.ts +366 -18
  549. package/src/emit/modules.ts +19 -3
  550. package/src/emit/sourcemap.ts +64 -43
  551. package/src/formatter/index.ts +35 -8
  552. package/src/hir/deprecated.ts +212 -0
  553. package/src/hir/lower.ts +128 -8
  554. package/src/hir/monomorphize.ts +24 -2
  555. package/src/hir/types.ts +26 -1
  556. package/src/index.ts +23 -3
  557. package/src/lexer/index.ts +45 -6
  558. package/src/lint/index.ts +922 -0
  559. package/src/lir/lower.ts +30 -2
  560. package/src/lir/types.ts +4 -0
  561. package/src/lsp/server.ts +100 -1
  562. package/src/mir/lower.ts +785 -40
  563. package/src/mir/macro.ts +30 -2
  564. package/src/mir/types.ts +13 -0
  565. package/src/mir/verify.ts +10 -2
  566. package/src/optimizer/auto-inline.ts +86 -0
  567. package/src/optimizer/copy_prop.ts +2 -2
  568. package/src/optimizer/coroutine.ts +3 -3
  569. package/src/optimizer/cse.ts +205 -0
  570. package/src/optimizer/dce.ts +2 -2
  571. package/src/optimizer/inline.ts +335 -0
  572. package/src/optimizer/interprocedural.ts +5 -1
  573. package/src/optimizer/licm.ts +454 -0
  574. package/src/optimizer/nbt-coalesce.ts +109 -0
  575. package/src/optimizer/pipeline.ts +16 -2
  576. package/src/optimizer/scoreboard-batch.ts +52 -0
  577. package/src/optimizer/strength_reduction.ts +95 -0
  578. package/src/optimizer/tco.ts +267 -0
  579. package/src/optimizer/unroll.ts +2 -2
  580. package/src/parser/index.ts +426 -53
  581. package/src/repl-server.ts +102 -0
  582. package/src/stdlib/advanced.mcrs +271 -101
  583. package/src/stdlib/bigint.mcrs +97 -11
  584. package/src/stdlib/bits.mcrs +75 -12
  585. package/src/stdlib/bossbar.mcrs +37 -8
  586. package/src/stdlib/calculus.mcrs +82 -26
  587. package/src/stdlib/color.mcrs +98 -16
  588. package/src/stdlib/combat.mcrs +23 -5
  589. package/src/stdlib/cooldown.mcrs +19 -0
  590. package/src/stdlib/dialog.mcrs +45 -7
  591. package/src/stdlib/easing.mcrs +132 -12
  592. package/src/stdlib/ecs.mcrs +142 -25
  593. package/src/stdlib/effects.mcrs +88 -12
  594. package/src/stdlib/events.mcrs +21 -2
  595. package/src/stdlib/expr.mcrs +18 -3
  596. package/src/stdlib/fft.mcrs +66 -56
  597. package/src/stdlib/geometry.mcrs +137 -39
  598. package/src/stdlib/graph.mcrs +73 -0
  599. package/src/stdlib/heap.mcrs +49 -8
  600. package/src/stdlib/i18n/zh.yaml +2891 -0
  601. package/src/stdlib/interactions.mcrs +43 -20
  602. package/src/stdlib/inventory.mcrs +14 -3
  603. package/src/stdlib/linalg.mcrs +185 -30
  604. package/src/stdlib/list.mcrs +168 -18
  605. package/src/stdlib/map.mcrs +112 -0
  606. package/src/stdlib/math.mcrs +68 -18
  607. package/src/stdlib/math_hp.mcrs +124 -33
  608. package/src/stdlib/matrix.mcrs +133 -20
  609. package/src/stdlib/mobs.mcrs +87 -0
  610. package/src/stdlib/noise.mcrs +65 -21
  611. package/src/stdlib/ode.mcrs +96 -0
  612. package/src/stdlib/parabola.mcrs +104 -29
  613. package/src/stdlib/particles.mcrs +78 -21
  614. package/src/stdlib/pathfind.mcrs +89 -35
  615. package/src/stdlib/physics.mcrs +134 -26
  616. package/src/stdlib/player.mcrs +18 -0
  617. package/src/stdlib/quaternion.mcrs +213 -9
  618. package/src/stdlib/queue.mcrs +123 -0
  619. package/src/stdlib/random.mcrs +63 -18
  620. package/src/stdlib/result.mcrs +111 -0
  621. package/src/stdlib/scheduler.mcrs +59 -10
  622. package/src/stdlib/set_int.mcrs +240 -0
  623. package/src/stdlib/sets.mcrs +49 -19
  624. package/src/stdlib/signal.mcrs +151 -79
  625. package/src/stdlib/sort.mcrs +44 -24
  626. package/src/stdlib/spawn.mcrs +30 -7
  627. package/src/stdlib/state.mcrs +40 -5
  628. package/src/stdlib/strings.mcrs +131 -3
  629. package/src/stdlib/tags.mcrs +2 -2
  630. package/src/stdlib/teams.mcrs +22 -10
  631. package/src/stdlib/timer.mcrs +36 -6
  632. package/src/stdlib/vec.mcrs +44 -9
  633. package/src/stdlib/world.mcrs +57 -25
  634. package/src/structs/expand.ts +64 -0
  635. package/src/testing/runner.ts +271 -0
  636. package/src/typechecker/index.ts +273 -9
@@ -2,98 +2,185 @@
2
2
  // Copy the names you need into your own project until RedScript gets imports.
3
3
 
4
4
  // Hostile mobs
5
+ /// Entity type ID for zombie.
5
6
  const ZOMBIE ="minecraft:zombie"
7
+ /// Entity type ID for skeleton.
6
8
  const SKELETON ="minecraft:skeleton"
9
+ /// Entity type ID for creeper.
7
10
  const CREEPER ="minecraft:creeper"
11
+ /// Entity type ID for spider.
8
12
  const SPIDER ="minecraft:spider"
13
+ /// Entity type ID for cave spider.
9
14
  const CAVE_SPIDER ="minecraft:cave_spider"
15
+ /// Entity type ID for enderman.
10
16
  const ENDERMAN ="minecraft:enderman"
17
+ /// Entity type ID for witch.
11
18
  const WITCH ="minecraft:witch"
19
+ /// Entity type ID for phantom.
12
20
  const PHANTOM ="minecraft:phantom"
21
+ /// Entity type ID for drowned.
13
22
  const DROWNED ="minecraft:drowned"
23
+ /// Entity type ID for husk.
14
24
  const HUSK ="minecraft:husk"
25
+ /// Entity type ID for stray.
15
26
  const STRAY ="minecraft:stray"
27
+ /// Entity type ID for warden.
16
28
  const WARDEN ="minecraft:warden"
29
+ /// Entity type ID for pillager.
17
30
  const PILLAGER ="minecraft:pillager"
31
+ /// Entity type ID for ravager.
18
32
  const RAVAGER ="minecraft:ravager"
33
+ /// Entity type ID for vindicator.
19
34
  const VINDICATOR ="minecraft:vindicator"
35
+ /// Entity type ID for evoker.
20
36
  const EVOKER ="minecraft:evoker"
37
+ /// Entity type ID for vex.
21
38
  const VEXE ="minecraft:vex"
39
+ /// Entity type ID for zombie villager.
22
40
  const ZOMBIE_VILLAGER ="minecraft:zombie_villager"
41
+ /// Entity type ID for blaze.
23
42
  const BLAZE ="minecraft:blaze"
43
+ /// Entity type ID for ghast.
24
44
  const GHAST ="minecraft:ghast"
45
+ /// Entity type ID for magma cube.
25
46
  const MAGMA_CUBE ="minecraft:magma_cube"
47
+ /// Entity type ID for slime.
26
48
  const SLIME ="minecraft:slime"
49
+ /// Entity type ID for piglin brute.
27
50
  const PIGLIN_BRUTE ="minecraft:piglin_brute"
51
+ /// Entity type ID for hoglin.
28
52
  const HOGLIN ="minecraft:hoglin"
53
+ /// Entity type ID for zoglin.
29
54
  const ZOGLIN ="minecraft:zoglin"
55
+ /// Entity type ID for endermite.
30
56
  const ENDERMITE ="minecraft:endermite"
57
+ /// Entity type ID for silverfish.
31
58
  const SILVERFISH ="minecraft:silverfish"
59
+ /// Entity type ID for shulker.
32
60
  const SHULKER ="minecraft:shulker"
61
+ /// Entity type ID for guardian.
33
62
  const GUARDIAN ="minecraft:guardian"
63
+ /// Entity type ID for elder guardian.
34
64
  const ELDER_GUARDIAN ="minecraft:elder_guardian"
65
+ /// Entity type ID for bogged.
35
66
  const BOGGED ="minecraft:bogged"
67
+ /// Entity type ID for breeze.
36
68
  const BREEZE ="minecraft:breeze"
37
69
 
38
70
  // Passive mobs
71
+ /// Entity type ID for pig.
39
72
  const PIG ="minecraft:pig"
73
+ /// Entity type ID for cow.
40
74
  const COW ="minecraft:cow"
75
+ /// Entity type ID for sheep.
41
76
  const SHEEP ="minecraft:sheep"
77
+ /// Entity type ID for chicken.
42
78
  const CHICKEN ="minecraft:chicken"
79
+ /// Entity type ID for horse.
43
80
  const HORSE ="minecraft:horse"
81
+ /// Entity type ID for donkey.
44
82
  const DONKEY ="minecraft:donkey"
83
+ /// Entity type ID for mule.
45
84
  const MULE ="minecraft:mule"
85
+ /// Entity type ID for rabbit.
46
86
  const RABBIT ="minecraft:rabbit"
87
+ /// Entity type ID for cod.
47
88
  const COD ="minecraft:cod"
89
+ /// Entity type ID for salmon.
48
90
  const SALMON ="minecraft:salmon"
91
+ /// Entity type ID for tropical fish.
49
92
  const TROPICAL_FISH ="minecraft:tropical_fish"
93
+ /// Entity type ID for pufferfish.
50
94
  const PUFFERFISH ="minecraft:pufferfish"
95
+ /// Entity type ID for squid.
51
96
  const SQUID ="minecraft:squid"
97
+ /// Entity type ID for glow squid.
52
98
  const GLOW_SQUID ="minecraft:glow_squid"
99
+ /// Entity type ID for bat.
53
100
  const BAT ="minecraft:bat"
101
+ /// Entity type ID for villager.
54
102
  const VILLAGER ="minecraft:villager"
103
+ /// Entity type ID for wandering trader.
55
104
  const WANDERING_TRADER ="minecraft:wandering_trader"
105
+ /// Entity type ID for snow golem.
56
106
  const SNOW_GOLEM ="minecraft:snow_golem"
107
+ /// Entity type ID for strider.
57
108
  const STRIDER ="minecraft:strider"
109
+ /// Entity type ID for axolotl.
58
110
  const AXOLOTL ="minecraft:axolotl"
111
+ /// Entity type ID for frog.
59
112
  const FROG ="minecraft:frog"
113
+ /// Entity type ID for tadpole.
60
114
  const TADPOLE ="minecraft:tadpole"
115
+ /// Entity type ID for allay.
61
116
  const ALLAY ="minecraft:allay"
117
+ /// Entity type ID for sniffer.
62
118
  const SNIFFER ="minecraft:sniffer"
119
+ /// Entity type ID for armadillo.
63
120
  const ARMADILLO ="minecraft:armadillo"
121
+ /// Entity type ID for turtle.
64
122
  const TURTLE ="minecraft:turtle"
65
123
 
66
124
  // Neutral mobs
125
+ /// Entity type ID for wolf.
67
126
  const WOLF ="minecraft:wolf"
127
+ /// Entity type ID for bee.
68
128
  const BEE ="minecraft:bee"
129
+ /// Entity type ID for polar bear.
69
130
  const POLAR_BEAR ="minecraft:polar_bear"
131
+ /// Entity type ID for dolphin.
70
132
  const DOLPHIN ="minecraft:dolphin"
133
+ /// Entity type ID for iron golem.
71
134
  const IRON_GOLEM ="minecraft:iron_golem"
135
+ /// Entity type ID for piglin.
72
136
  const PIGLIN ="minecraft:piglin"
137
+ /// Entity type ID for zombified piglin.
73
138
  const ZOMBIFIED_PIGLIN ="minecraft:zombified_piglin"
139
+ /// Entity type ID for panda.
74
140
  const PANDA ="minecraft:panda"
141
+ /// Entity type ID for llama.
75
142
  const LLAMA ="minecraft:llama"
143
+ /// Entity type ID for trader llama.
76
144
  const TRADER_LLAMA ="minecraft:trader_llama"
145
+ /// Entity type ID for cat.
77
146
  const CAT ="minecraft:cat"
147
+ /// Entity type ID for ocelot.
78
148
  const OCELOT ="minecraft:ocelot"
149
+ /// Entity type ID for fox.
79
150
  const FOX ="minecraft:fox"
151
+ /// Entity type ID for goat.
80
152
  const GOAT ="minecraft:goat"
153
+ /// Entity type ID for camel.
81
154
  const CAMEL ="minecraft:camel"
82
155
 
83
156
  // Bosses
157
+ /// Entity type ID for ender dragon.
84
158
  const ENDER_DRAGON ="minecraft:ender_dragon"
159
+ /// Entity type ID for wither.
85
160
  const WITHER ="minecraft:wither"
86
161
 
87
162
  // Special / misc
163
+ /// Entity type ID for armor stand.
88
164
  const ARMOR_STAND ="minecraft:armor_stand"
165
+ /// Entity type ID for item frame.
89
166
  const ITEM_FRAME ="minecraft:item_frame"
167
+ /// Entity type ID for glow item frame.
90
168
  const GLOW_ITEM_FRAME ="minecraft:glow_item_frame"
169
+ /// Entity type ID for painting.
91
170
  const PAINTING ="minecraft:painting"
171
+ /// Entity type ID for boat.
92
172
  const BOAT ="minecraft:boat"
173
+ /// Entity type ID for minecart.
93
174
  const MINECART ="minecraft:minecart"
175
+ /// Entity type ID for primed TNT.
94
176
  const TNT ="minecraft:tnt"
177
+ /// Entity type ID for falling block.
95
178
  const FALLING_BLOCK ="minecraft:falling_block"
179
+ /// Entity type ID for dropped item.
96
180
  const ITEM ="minecraft:item"
181
+ /// Entity type ID for experience orb.
97
182
  const XP_ORB ="minecraft:experience_orb"
183
+ /// Entity type ID for fireball.
98
184
  const FIREBALL ="minecraft:fireball"
185
+ /// Entity type ID for player.
99
186
  const PLAYER ="minecraft:player"
@@ -15,8 +15,12 @@ module library;
15
15
 
16
16
  // ─── Hash functions ───────────────────────────────────────────────────────────
17
17
 
18
- // hash_1d(x): pseudo-random int from a 1D coordinate
19
- // Returns any int (use % to restrict range)
18
+ /// Generate a pseudo-random integer from a 1D integer coordinate.
19
+ /// @since 1.0.0
20
+ /// @param x Input coordinate (any integer)
21
+ /// @returns Pseudo-random integer (any value; use % to restrict range)
22
+ /// @example
23
+ /// let h: int = hash_1d(42) // deterministic hash of coordinate 42
20
24
  fn hash_1d(x: int): int {
21
25
  let h: int = x * 374761393;
22
26
  h = h + 1013904223;
@@ -25,19 +29,36 @@ fn hash_1d(x: int): int {
25
29
  return h;
26
30
  }
27
31
 
28
- // hash_2d(x, z): pseudo-random int from 2D coordinates
32
+ /// Generate a pseudo-random integer from a 2D integer coordinate pair.
33
+ /// @since 1.0.0
34
+ /// @param x First coordinate (any integer)
35
+ /// @param z Second coordinate (any integer)
36
+ /// @returns Pseudo-random integer combining both inputs deterministically
37
+ /// @example
38
+ /// let h: int = hash_2d(10, 20) // deterministic hash of (10, 20)
29
39
  fn hash_2d(x: int, z: int): int {
30
40
  return hash_1d(x + hash_1d(z));
31
41
  }
32
42
 
33
- // hash_1d_pos(x): hash in [0, 10000]
43
+ /// Generate a non-negative hash in [0, 10000] from a 1D coordinate.
44
+ /// @since 1.0.0
45
+ /// @param x Input coordinate
46
+ /// @returns Integer in [0, 10000]
47
+ /// @example
48
+ /// let v: int = hash_1d_pos(5) // value between 0 and 10000
34
49
  fn hash_1d_pos(x: int): int {
35
50
  let h: int = hash_1d(x);
36
51
  if (h < 0) { h = 0 - h; }
37
52
  return h % 10001;
38
53
  }
39
54
 
40
- // hash_2d_pos(x, z): hash in [0, 10000]
55
+ /// Generate a non-negative hash in [0, 10000] from a 2D coordinate pair.
56
+ /// @since 1.0.0
57
+ /// @param x First coordinate
58
+ /// @param z Second coordinate
59
+ /// @returns Integer in [0, 10000]
60
+ /// @example
61
+ /// let v: int = hash_2d_pos(3, 7) // value between 0 and 10000
41
62
  fn hash_2d_pos(x: int, z: int): int {
42
63
  let h: int = hash_2d(x, z);
43
64
  if (h < 0) { h = 0 - h; }
@@ -46,9 +67,12 @@ fn hash_2d_pos(x: int, z: int): int {
46
67
 
47
68
  // ─── Value noise ─────────────────────────────────────────────────────────────
48
69
 
49
- // value_noise_1d(x_fx): smooth 1D noise at position x_fx (fixed-point ×10000)
50
- // Returns value in [0, 10000]
51
- // Uses linear interpolation between random values at integer coords
70
+ /// Smooth 1D value noise at a fixed-point position.
71
+ /// @since 1.0.0
72
+ /// @param x_fx Position ×10000 (e.g. 10000 = coordinate 1.0)
73
+ /// @returns Noise value in [0, 10000] with smooth interpolation between integer coords
74
+ /// @example
75
+ /// let n: int = value_noise_1d(15000) // smooth noise at x=1.5
52
76
  fn value_noise_1d(x_fx: int): int {
53
77
  let xi: int = x_fx / 10000; // integer part
54
78
  let xf: int = x_fx % 10000; // fractional part [0, 9999]
@@ -62,8 +86,13 @@ fn value_noise_1d(x_fx: int): int {
62
86
  return v0 + (v1 - v0) * t / 10000;
63
87
  }
64
88
 
65
- // value_noise_2d(x_fx, z_fx): smooth 2D noise
66
- // Returns value in [0, 10000]
89
+ /// Smooth 2D value noise at a fixed-point position.
90
+ /// @since 1.0.0
91
+ /// @param x_fx X position ×10000
92
+ /// @param z_fx Z position ×10000
93
+ /// @returns Noise value in [0, 10000] with bilinear smooth interpolation
94
+ /// @example
95
+ /// let n: int = value_noise_2d(15000, 23000) // noise at (1.5, 2.3)
67
96
  fn value_noise_2d(x_fx: int, z_fx: int): int {
68
97
  let xi: int = x_fx / 10000;
69
98
  let xf: int = x_fx % 10000;
@@ -91,11 +120,14 @@ fn value_noise_2d(x_fx: int, z_fx: int): int {
91
120
 
92
121
  // ─── Fractal Brownian Motion ──────────────────────────────────────────────────
93
122
 
94
- // fbm_1d(x_fx, octaves, persistence_fx):
95
- // x_fx: position ×10000
96
- // octaves: number of noise layers (1-6, more = more detail)
97
- // persistence_fx: amplitude decay per octave ×10000 (typical: 5000 = 0.5)
98
- // Returns value in approximately [0, 10000]
123
+ /// 1D Fractal Brownian Motion — stacks multiple octaves of value noise.
124
+ /// @since 1.0.0
125
+ /// @param x_fx Position ×10000
126
+ /// @param octaves Number of noise layers (1–6; more = more detail but slower)
127
+ /// @param persistence_fx Amplitude decay per octave ×10000 (5000 = 0.5 recommended)
128
+ /// @returns Normalized noise value in approximately [0, 10000]
129
+ /// @example
130
+ /// let h: int = fbm_1d(50000, 4, 5000) // 4 octave noise at x=5.0
99
131
  fn fbm_1d(x_fx: int, octaves: int, persistence_fx: int): int {
100
132
  let value: int = 0;
101
133
  let amplitude: int = 10000;
@@ -117,7 +149,15 @@ fn fbm_1d(x_fx: int, octaves: int, persistence_fx: int): int {
117
149
  return value * 10000 / max_val;
118
150
  }
119
151
 
120
- // fbm_2d(x_fx, z_fx, octaves, persistence_fx): 2D fractal Brownian motion
152
+ /// 2D Fractal Brownian Motion — stacks multiple octaves of 2D value noise.
153
+ /// @since 1.0.0
154
+ /// @param x_fx X position ×10000
155
+ /// @param z_fx Z position ×10000
156
+ /// @param octaves Number of noise layers (1–6)
157
+ /// @param persistence_fx Amplitude decay per octave ×10000 (5000 = 0.5)
158
+ /// @returns Normalized noise value in approximately [0, 10000]
159
+ /// @example
160
+ /// let h: int = fbm_2d(30000, 50000, 3, 5000) // 3 octave 2D noise
121
161
  fn fbm_2d(x_fx: int, z_fx: int, octaves: int, persistence_fx: int): int {
122
162
  let value: int = 0;
123
163
  let amplitude: int = 10000;
@@ -141,11 +181,15 @@ fn fbm_2d(x_fx: int, z_fx: int, octaves: int, persistence_fx: int): int {
141
181
 
142
182
  // ─── Convenience: terrain height ─────────────────────────────────────────────
143
183
 
144
- // terrain_height(x, z, base_y, amplitude):
145
- // Generates a terrain height using 3-octave fbm.
146
- // x, z: block coordinates (integers, NOT fixed-point)
147
- // base_y: baseline height in blocks
148
- // amplitude: max height variation in blocks
184
+ /// Generate a terrain height using 3-octave FBM noise.
185
+ /// @since 1.0.0
186
+ /// @param x Block X coordinate (integer, not fixed-point)
187
+ /// @param z Block Z coordinate (integer, not fixed-point)
188
+ /// @param base_y Baseline height in blocks
189
+ /// @param amplitude Maximum height variation above/below base_y in blocks
190
+ /// @returns Block height at (x, z): base_y + noise * amplitude / 10000
191
+ /// @example
192
+ /// let h: int = terrain_height(100, 200, 64, 16) // terrain at (100, 200) near y=64
149
193
  fn terrain_height(x: int, z: int, base_y: int, amplitude: int): int {
150
194
  // Scale x,z by ×10000 for fixed-point, divide by 4 for wider features
151
195
  let noise: int = fbm_2d(x * 2500, z * 2500, 3, 5000);
@@ -21,10 +21,24 @@
21
21
 
22
22
  module library
23
23
 
24
+ /// Fixed-point multiplication: `a_fx * b_fx / 10000`.
25
+ ///
26
+ /// @since 2.0.0
27
+ /// @param a_fx First operand ×10000
28
+ /// @param b_fx Second operand ×10000
29
+ /// @returns Product in ×10000 scale
24
30
  fn ode_mul_fx(a_fx: int, b_fx: int): int {
25
31
  return a_fx * b_fx / 10000
26
32
  }
27
33
 
34
+ /// Compute the RK4 weighted increment: `h * (k1 + 2k2 + 2k3 + k4) / 6`.
35
+ ///
36
+ /// All values are ×10000. The divisor 60000 = 6 × 10000.
37
+ ///
38
+ /// @since 2.0.0
39
+ /// @param h_fx Step size ×10000
40
+ /// @param deriv_sum_fx `k1 + 2k2 + 2k3 + k4` in ×10000
41
+ /// @returns Weighted increment in ×10000
28
42
  fn ode_weighted_increment(h_fx: int, deriv_sum_fx: int): int {
29
43
  return h_fx * deriv_sum_fx / 60000
30
44
  }
@@ -47,6 +61,17 @@ fn _ode_get_slot5(): int { raw("execute store result score $ret __OBJ__ run data
47
61
  fn _ode_get_slot6(): int { raw("execute store result score $ret __OBJ__ run data get storage rs:ode state[6]"); raw("return 1"); return 0 }
48
62
  fn _ode_get_slot7(): int { raw("execute store result score $ret __OBJ__ run data get storage rs:ode state[7]"); raw("return 1"); return 0 }
49
63
 
64
+ /// Initialise the ODE module state in `storage rs:ode`.
65
+ ///
66
+ /// @since 2.0.0
67
+ /// @param system_id Built-in system constant (1=decay, 2=growth, 3=oscillator)
68
+ /// @param t_fx Initial time ×10000
69
+ /// @param y_fx Initial primary variable y(0) ×10000
70
+ /// @param y2_fx Initial secondary variable y'(0) ×10000 (for system 3)
71
+ /// @param k_fx Rate/spring constant ×10000
72
+ /// @param extra_fx Damping coefficient ×10000 (for system 3)
73
+ /// @example
74
+ /// ode_reset(1, 0, 10000, 0, 10000, 0)
50
75
  fn ode_reset(system_id: int, t_fx: int, y_fx: int, y2_fx: int, k_fx: int, extra_fx: int) {
51
76
  raw("data modify storage rs:ode state set value [0,0,0,0,0,0,0,0]")
52
77
  _ode_set_slot0(system_id)
@@ -59,12 +84,46 @@ fn ode_reset(system_id: int, t_fx: int, y_fx: int, y2_fx: int, k_fx: int, extra_
59
84
  _ode_set_slot7(0)
60
85
  }
61
86
 
87
+ /// Return the current system ID from ODE state.
88
+ ///
89
+ /// @since 2.0.0
90
+ /// @returns System ID stored in slot 0
62
91
  fn ode_get_system(): int { return _ode_get_slot0() }
92
+
93
+ /// Return the current time `t` from ODE state (×10000).
94
+ ///
95
+ /// @since 2.0.0
96
+ /// @returns Current time ×10000
63
97
  fn ode_get_t(): int { return _ode_get_slot1() }
98
+
99
+ /// Return the current primary variable `y` from ODE state (×10000).
100
+ ///
101
+ /// @since 2.0.0
102
+ /// @returns Current y value ×10000
64
103
  fn ode_get_y(): int { return _ode_get_slot2() }
104
+
105
+ /// Return the current secondary variable `y'` from ODE state (×10000).
106
+ ///
107
+ /// @since 2.0.0
108
+ /// @returns Current y' value ×10000 (meaningful for system 3 only)
65
109
  fn ode_get_y2(): int { return _ode_get_slot3() }
110
+
111
+ /// Return the rate constant `k` from ODE state (×10000).
112
+ ///
113
+ /// @since 2.0.0
114
+ /// @returns Rate constant ×10000
66
115
  fn ode_get_k(): int { return _ode_get_slot4() }
116
+
117
+ /// Return the extra parameter from ODE state (×10000).
118
+ ///
119
+ /// @since 2.0.0
120
+ /// @returns Extra parameter ×10000 (damping for system 3)
67
121
  fn ode_get_extra(): int { return _ode_get_slot5() }
122
+
123
+ /// Return the number of steps taken so far.
124
+ ///
125
+ /// @since 2.0.0
126
+ /// @returns Step count (plain integer)
68
127
  fn ode_get_steps(): int { return _ode_get_slot6() }
69
128
 
70
129
  // Scalar-system dispatcher helper matching the callback-free pattern.
@@ -100,6 +159,13 @@ fn ode_eval_y2(system_id: int, t_fx: int, y_fx: int, y2_fx: int, k_fx: int, extr
100
159
  return 0
101
160
  }
102
161
 
162
+ /// Advance the ODE state by one RK4 step of size `h_fx`.
163
+ ///
164
+ /// Updates time `t`, primary variable `y` (and `y2` for system 3), and
165
+ /// increments the step counter in `storage rs:ode`.
166
+ ///
167
+ /// @since 2.0.0
168
+ /// @param h_fx Step size ×10000 (e.g. `1000` = 0.1 time unit)
103
169
  fn ode_step(h_fx: int) {
104
170
  let system_id: int = ode_get_system()
105
171
  let t_fx: int = ode_get_t()
@@ -149,6 +215,21 @@ fn ode_step(h_fx: int) {
149
215
  _ode_set_slot6(step_count + 1)
150
216
  }
151
217
 
218
+ /// Run `steps` RK4 steps of a scalar ODE system and store results in module state.
219
+ ///
220
+ /// Built-in systems: `1` = exponential decay (`dy/dt = -k·y`),
221
+ /// `2` = exponential growth (`dy/dt = k·y`).
222
+ ///
223
+ /// @since 2.0.0
224
+ /// @param system_id Built-in system constant (1 or 2 for scalar systems)
225
+ /// @param t0_fx Initial time ×10000
226
+ /// @param y0_fx Initial y value ×10000
227
+ /// @param h_fx Step size ×10000
228
+ /// @param steps Number of RK4 steps to execute
229
+ /// @param k_fx Rate constant ×10000
230
+ /// @example
231
+ /// ode_run(1, 0, 10000, 1000, 10, 10000)
232
+ /// let y: int = ode_get_y()
152
233
  fn ode_run(system_id: int, t0_fx: int, y0_fx: int, h_fx: int, steps: int, k_fx: int) {
153
234
  ode_reset(system_id, t0_fx, y0_fx, 0, k_fx, 0)
154
235
  let i: int = 0
@@ -158,6 +239,21 @@ fn ode_run(system_id: int, t0_fx: int, y0_fx: int, h_fx: int, steps: int, k_fx:
158
239
  }
159
240
  }
160
241
 
242
+ /// Run `steps` RK4 steps of a 2D ODE system (e.g. harmonic oscillator).
243
+ ///
244
+ /// Built-in system 3: `y' = y2`, `y2' = -k·y - extra·y2`.
245
+ ///
246
+ /// @since 2.0.0
247
+ /// @param system_id Built-in system constant (use `3` for harmonic oscillator)
248
+ /// @param t0_fx Initial time ×10000
249
+ /// @param y0_fx Initial y value ×10000
250
+ /// @param y20_fx Initial y' value ×10000
251
+ /// @param h_fx Step size ×10000
252
+ /// @param steps Number of RK4 steps to execute
253
+ /// @param k_fx Spring constant ×10000
254
+ /// @param extra_fx Damping coefficient ×10000
255
+ /// @example
256
+ /// ode_run2(3, 0, 10000, 0, 1000, 20, 10000, 500)
161
257
  fn ode_run2(system_id: int, t0_fx: int, y0_fx: int, y20_fx: int, h_fx: int, steps: int, k_fx: int, extra_fx: int) {
162
258
  ode_reset(system_id, t0_fx, y0_fx, y20_fx, k_fx, extra_fx)
163
259
  let i: int = 0