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.
- package/.github/workflows/ci.yml +11 -0
- package/CHANGELOG.md +18 -9
- package/README-benchmarks.md +48 -0
- package/README-vscode-test.md +251 -0
- package/RELEASE_NOTES.md +74 -0
- package/ROADMAP.md +131 -167
- package/benchmarks/_shared.ts +468 -0
- package/benchmarks/baseline.json +2816 -0
- package/benchmarks/baseline.md +13 -0
- package/benchmarks/compiler-perf.report.json +207 -0
- package/benchmarks/compiler-perf.ts +76 -0
- package/benchmarks/results.md +13 -0
- package/benchmarks/stdlib-complexity.report.json +2606 -0
- package/benchmarks/stdlib-complexity.ts +54 -0
- package/benchmarks/stdlib-size.md +57 -0
- package/benchmarks/stdlib-size.ts +91 -0
- package/coverage-report.md +177 -0
- package/dist/src/__tests__/budget.test.js +4 -0
- package/dist/src/__tests__/cache/cache-behavior.test.d.ts +10 -0
- package/dist/src/__tests__/cache/cache-behavior.test.js +425 -0
- package/dist/src/__tests__/cache-extra.test.d.ts +5 -0
- package/dist/src/__tests__/cache-extra.test.js +211 -0
- package/dist/src/__tests__/cli-init.test.d.ts +1 -0
- package/dist/src/__tests__/cli-init.test.js +97 -0
- package/dist/src/__tests__/cli-publish.test.d.ts +9 -0
- package/dist/src/__tests__/cli-publish.test.js +189 -0
- package/dist/src/__tests__/cli.test.js +76 -0
- package/dist/src/__tests__/compile-preprocess.test.d.ts +11 -0
- package/dist/src/__tests__/compile-preprocess.test.js +328 -0
- package/dist/src/__tests__/compiler/break-stmt.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/break-stmt.test.js +58 -0
- package/dist/src/__tests__/compiler/const-decl.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/const-decl.test.js +123 -0
- package/dist/src/__tests__/compiler/continue-stmt.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/continue-stmt.test.js +67 -0
- package/dist/src/__tests__/compiler/coroutine-extended.test.d.ts +17 -0
- package/dist/src/__tests__/compiler/coroutine-extended.test.js +565 -0
- package/dist/src/__tests__/compiler/deprecated.test.d.ts +4 -0
- package/dist/src/__tests__/compiler/deprecated.test.js +285 -0
- package/dist/src/__tests__/compiler/do-while.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/do-while.test.js +120 -0
- package/dist/src/__tests__/compiler/enum-payload.test.d.ts +9 -0
- package/dist/src/__tests__/compiler/enum-payload.test.js +272 -0
- package/dist/src/__tests__/compiler/interface.test.d.ts +10 -0
- package/dist/src/__tests__/compiler/interface.test.js +258 -0
- package/dist/src/__tests__/compiler/labeled-loops.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/labeled-loops.test.js +263 -0
- package/dist/src/__tests__/compiler/match-string.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/match-string.test.js +43 -0
- package/dist/src/__tests__/compiler/memoize.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/memoize.test.js +113 -0
- package/dist/src/__tests__/compiler/method-chain.test.d.ts +5 -0
- package/dist/src/__tests__/compiler/method-chain.test.js +115 -0
- package/dist/src/__tests__/compiler/module-import.test.d.ts +12 -0
- package/dist/src/__tests__/compiler/module-import.test.js +261 -0
- package/dist/src/__tests__/compiler/option-extensions.test.d.ts +6 -0
- package/dist/src/__tests__/compiler/option-extensions.test.js +191 -0
- package/dist/src/__tests__/compiler/profile-decorator.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/profile-decorator.test.js +69 -0
- package/dist/src/__tests__/compiler/string-advanced.test.d.ts +7 -0
- package/dist/src/__tests__/compiler/string-advanced.test.js +281 -0
- package/dist/src/__tests__/compiler/struct-extends.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/struct-extends.test.js +95 -0
- package/dist/src/__tests__/compiler/throttle-retry.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/throttle-retry.test.js +166 -0
- package/dist/src/__tests__/compiler/tuple-type.test.d.ts +10 -0
- package/dist/src/__tests__/compiler/tuple-type.test.js +229 -0
- package/dist/src/__tests__/compiler/watch-decorator.test.d.ts +1 -0
- package/dist/src/__tests__/compiler/watch-decorator.test.js +65 -0
- package/dist/src/__tests__/config/project-config.test.d.ts +1 -0
- package/dist/src/__tests__/config/project-config.test.js +199 -0
- package/dist/src/__tests__/config-decorator.test.d.ts +8 -0
- package/dist/src/__tests__/config-decorator.test.js +142 -0
- package/dist/src/__tests__/diagnostics-extra.test.d.ts +6 -0
- package/dist/src/__tests__/diagnostics-extra.test.js +132 -0
- package/dist/src/__tests__/emit/compile-branches.test.d.ts +1 -0
- package/dist/src/__tests__/emit/compile-branches.test.js +123 -0
- package/dist/src/__tests__/emit/compile-coverage.test.d.ts +25 -0
- package/dist/src/__tests__/emit/compile-coverage.test.js +617 -0
- package/dist/src/__tests__/emit/compile-extra-branches.test.d.ts +12 -0
- package/dist/src/__tests__/emit/compile-extra-branches.test.js +225 -0
- package/dist/src/__tests__/emit/compile-mocked-branches.test.d.ts +0 -0
- package/dist/src/__tests__/emit/compile-mocked-branches.test.js +238 -0
- package/dist/src/__tests__/emit/execute-chain.test.d.ts +10 -0
- package/dist/src/__tests__/emit/execute-chain.test.js +94 -0
- package/dist/src/__tests__/emit/index.test.js +2 -1
- package/dist/src/__tests__/emit/modules-branches.test.d.ts +1 -0
- package/dist/src/__tests__/emit/modules-branches.test.js +88 -0
- package/dist/src/__tests__/emit/modules-coverage.test.d.ts +15 -0
- package/dist/src/__tests__/emit/modules-coverage.test.js +221 -0
- package/dist/src/__tests__/emit/modules-errors.test.d.ts +12 -0
- package/dist/src/__tests__/emit/modules-errors.test.js +169 -0
- package/dist/src/__tests__/emit/modules-rewrite.test.d.ts +17 -0
- package/dist/src/__tests__/emit/modules-rewrite.test.js +204 -0
- package/dist/src/__tests__/emit/source-map.test.d.ts +1 -0
- package/dist/src/__tests__/emit/source-map.test.js +167 -0
- package/dist/src/__tests__/enum.test.js +9 -4
- package/dist/src/__tests__/error-recovery.test.d.ts +7 -0
- package/dist/src/__tests__/error-recovery.test.js +217 -0
- package/dist/src/__tests__/events-types-extra.test.d.ts +10 -0
- package/dist/src/__tests__/events-types-extra.test.js +91 -0
- package/dist/src/__tests__/events-types.test.d.ts +4 -0
- package/dist/src/__tests__/events-types.test.js +56 -0
- package/dist/src/__tests__/formatter.test.js +13 -5
- package/dist/src/__tests__/hir/lower-extra.test.d.ts +9 -0
- package/dist/src/__tests__/hir/lower-extra.test.js +140 -0
- package/dist/src/__tests__/hir/monomorphize-extra.test.d.ts +15 -0
- package/dist/src/__tests__/hir/monomorphize-extra.test.js +200 -0
- package/dist/src/__tests__/hir/monomorphize-extra2.test.d.ts +16 -0
- package/dist/src/__tests__/hir/monomorphize-extra2.test.js +316 -0
- package/dist/src/__tests__/incremental.test.js +10 -2
- package/dist/src/__tests__/index-extra.test.d.ts +10 -0
- package/dist/src/__tests__/index-extra.test.js +71 -0
- package/dist/src/__tests__/lexer.test.js +2 -2
- package/dist/src/__tests__/lint/rules.test.d.ts +5 -0
- package/dist/src/__tests__/lint/rules.test.js +208 -0
- package/dist/src/__tests__/lir/lower.test.js +29 -0
- package/dist/src/__tests__/lir/verify.test.js +30 -0
- package/dist/src/__tests__/lsp/completion.test.d.ts +7 -0
- package/dist/src/__tests__/lsp/completion.test.js +583 -0
- package/dist/src/__tests__/lsp/definition.test.d.ts +7 -0
- package/dist/src/__tests__/lsp/definition.test.js +454 -0
- package/dist/src/__tests__/lsp/diagnostics.test.d.ts +10 -0
- package/dist/src/__tests__/lsp/diagnostics.test.js +98 -0
- package/dist/src/__tests__/lsp/hover-docs.test.d.ts +10 -0
- package/dist/src/__tests__/lsp/hover-docs.test.js +210 -0
- package/dist/src/__tests__/lsp.test.js +4 -1
- package/dist/src/__tests__/mc-integration/item-entity-events.test.js +4 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +4 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.d.ts +13 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1227 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.d.ts +13 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1509 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.d.ts +14 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1374 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.d.ts +10 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +759 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.d.ts +13 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +855 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage.test.js +4 -0
- package/dist/src/__tests__/mc-integration/syntax-coverage.test.js +4 -0
- package/dist/src/__tests__/mc-validator-coverage.test.d.ts +13 -0
- package/dist/src/__tests__/mc-validator-coverage.test.js +296 -0
- package/dist/src/__tests__/mc-validator-extra.test.d.ts +13 -0
- package/dist/src/__tests__/mc-validator-extra.test.js +245 -0
- package/dist/src/__tests__/mir/lower-extra.test.d.ts +20 -0
- package/dist/src/__tests__/mir/lower-extra.test.js +361 -0
- package/dist/src/__tests__/mir/lower-extra2.test.d.ts +17 -0
- package/dist/src/__tests__/mir/lower-extra2.test.js +317 -0
- package/dist/src/__tests__/mir/lower-extra3.test.d.ts +19 -0
- package/dist/src/__tests__/mir/lower-extra3.test.js +249 -0
- package/dist/src/__tests__/mir/lower-extra4.test.d.ts +23 -0
- package/dist/src/__tests__/mir/lower-extra4.test.js +606 -0
- package/dist/src/__tests__/mir/lower-extra5.test.d.ts +25 -0
- package/dist/src/__tests__/mir/lower-extra5.test.js +543 -0
- package/dist/src/__tests__/mir/lower-extra6.test.d.ts +16 -0
- package/dist/src/__tests__/mir/lower-extra6.test.js +471 -0
- package/dist/src/__tests__/mir/lower-extra7.test.d.ts +35 -0
- package/dist/src/__tests__/mir/lower-extra7.test.js +921 -0
- package/dist/src/__tests__/mir/lower-extra8.test.d.ts +19 -0
- package/dist/src/__tests__/mir/lower-extra8.test.js +626 -0
- package/dist/src/__tests__/mir/lower-extra9.test.d.ts +14 -0
- package/dist/src/__tests__/mir/lower-extra9.test.js +717 -0
- package/dist/src/__tests__/optimizer/auto-inline.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/auto-inline.test.js +176 -0
- package/dist/src/__tests__/optimizer/cse.test.d.ts +4 -0
- package/dist/src/__tests__/optimizer/cse.test.js +178 -0
- package/dist/src/__tests__/optimizer/inline_fn.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/inline_fn.test.js +221 -0
- package/dist/src/__tests__/optimizer/licm.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/licm.test.js +244 -0
- package/dist/src/__tests__/optimizer/optimizer-extended.test.d.ts +12 -0
- package/dist/src/__tests__/optimizer/optimizer-extended.test.js +993 -0
- package/dist/src/__tests__/optimizer/strength-reduction.test.d.ts +1 -0
- package/dist/src/__tests__/optimizer/strength-reduction.test.js +86 -0
- package/dist/src/__tests__/optimizer/tco.test.d.ts +14 -0
- package/dist/src/__tests__/optimizer/tco.test.js +203 -0
- package/dist/src/__tests__/parser-coverage.test.d.ts +25 -0
- package/dist/src/__tests__/parser-coverage.test.js +491 -0
- package/dist/src/__tests__/parser-extra.test.d.ts +6 -0
- package/dist/src/__tests__/parser-extra.test.js +451 -0
- package/dist/src/__tests__/parser.test.js +12 -0
- package/dist/src/__tests__/repl-extra.test.d.ts +13 -0
- package/dist/src/__tests__/repl-extra.test.js +174 -0
- package/dist/src/__tests__/repl-server-extra.test.d.ts +10 -0
- package/dist/src/__tests__/repl-server-extra.test.js +161 -0
- package/dist/src/__tests__/repl-server.test.d.ts +6 -0
- package/dist/src/__tests__/repl-server.test.js +146 -0
- package/dist/src/__tests__/runtime-extra.test.d.ts +15 -0
- package/dist/src/__tests__/runtime-extra.test.js +732 -0
- package/dist/src/__tests__/singleton-decorator.test.d.ts +11 -0
- package/dist/src/__tests__/singleton-decorator.test.js +260 -0
- package/dist/src/__tests__/sourcemap.test.js +1 -1
- package/dist/src/__tests__/stdlib/advanced.test.d.ts +5 -0
- package/dist/src/__tests__/stdlib/advanced.test.js +301 -0
- package/dist/src/__tests__/stdlib/bigint.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/bigint.test.js +83 -0
- package/dist/src/__tests__/stdlib/bits.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/bits.test.js +96 -0
- package/dist/src/__tests__/stdlib/bossbar.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/bossbar.test.js +72 -0
- package/dist/src/__tests__/stdlib/color.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/color.test.js +84 -0
- package/dist/src/__tests__/stdlib/combat.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/combat.test.js +64 -0
- package/dist/src/__tests__/stdlib/cooldown.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/cooldown.test.js +64 -0
- package/dist/src/__tests__/stdlib/dialog.test.js +15 -7
- package/dist/src/__tests__/stdlib/ecs.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/ecs.test.js +81 -0
- package/dist/src/__tests__/stdlib/effects.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/effects.test.js +72 -0
- package/dist/src/__tests__/stdlib/events.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/events.test.js +55 -0
- package/dist/src/__tests__/stdlib/expr.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/expr.test.js +77 -0
- package/dist/src/__tests__/stdlib/fft.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/fft.test.js +82 -0
- package/dist/src/__tests__/stdlib/graph.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/graph.test.js +102 -0
- package/dist/src/__tests__/stdlib/interactions.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/interactions.test.js +60 -0
- package/dist/src/__tests__/stdlib/inventory.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/inventory.test.js +68 -0
- package/dist/src/__tests__/stdlib/linalg.test.d.ts +5 -0
- package/dist/src/__tests__/stdlib/linalg.test.js +78 -0
- package/dist/src/__tests__/stdlib/map.test.d.ts +1 -0
- package/dist/src/__tests__/stdlib/map.test.js +84 -0
- package/dist/src/__tests__/stdlib/math.test.js +19 -6
- package/dist/src/__tests__/stdlib/math_hp.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/math_hp.test.js +80 -0
- package/dist/src/__tests__/stdlib/mobs.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/mobs.test.js +61 -0
- package/dist/src/__tests__/stdlib/noise.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/noise.test.js +73 -0
- package/dist/src/__tests__/stdlib/ode.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/ode.test.js +68 -0
- package/dist/src/__tests__/stdlib/parabola.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/parabola.test.js +77 -0
- package/dist/src/__tests__/stdlib/particles.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/particles.test.js +68 -0
- package/dist/src/__tests__/stdlib/physics.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/physics.test.js +76 -0
- package/dist/src/__tests__/stdlib/player.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/player.test.js +64 -0
- package/dist/src/__tests__/stdlib/quaternion.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/quaternion.test.js +73 -0
- package/dist/src/__tests__/stdlib/queue.test.d.ts +1 -0
- package/dist/src/__tests__/stdlib/queue.test.js +97 -0
- package/dist/src/__tests__/stdlib/random.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/random.test.js +76 -0
- package/dist/src/__tests__/stdlib/result.test.d.ts +12 -0
- package/dist/src/__tests__/stdlib/result.test.js +329 -0
- package/dist/src/__tests__/stdlib/scheduler.test.js +19 -8
- package/dist/src/__tests__/stdlib/set_int.test.d.ts +1 -0
- package/dist/src/__tests__/stdlib/set_int.test.js +88 -0
- package/dist/src/__tests__/stdlib/sets.test.d.ts +6 -0
- package/dist/src/__tests__/stdlib/sets.test.js +60 -0
- package/dist/src/__tests__/stdlib/signal.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/signal.test.js +84 -0
- package/dist/src/__tests__/stdlib/spawn.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/spawn.test.js +68 -0
- package/dist/src/__tests__/stdlib/string.test.d.ts +12 -0
- package/dist/src/__tests__/stdlib/string.test.js +231 -0
- package/dist/src/__tests__/stdlib/strings.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/strings.test.js +83 -0
- package/dist/src/__tests__/stdlib/tags.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/tags.test.js +57 -0
- package/dist/src/__tests__/stdlib/teams.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/teams.test.js +72 -0
- package/dist/src/__tests__/stdlib/timer.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/timer.test.js +79 -0
- package/dist/src/__tests__/stdlib/vec.test.d.ts +5 -0
- package/dist/src/__tests__/stdlib/vec.test.js +94 -0
- package/dist/src/__tests__/stdlib/world.test.d.ts +4 -0
- package/dist/src/__tests__/stdlib/world.test.js +72 -0
- package/dist/src/__tests__/struct-display.test.d.ts +1 -0
- package/dist/src/__tests__/struct-display.test.js +64 -0
- package/dist/src/__tests__/test-framework/runner.test.d.ts +10 -0
- package/dist/src/__tests__/test-framework/runner.test.js +193 -0
- package/dist/src/__tests__/tuner/adapters.test.d.ts +14 -0
- package/dist/src/__tests__/tuner/adapters.test.js +194 -0
- package/dist/src/__tests__/tuner/simulator-extra.test.d.ts +4 -0
- package/dist/src/__tests__/tuner/simulator-extra.test.js +193 -0
- package/dist/src/__tests__/typechecker-coverage.test.d.ts +30 -0
- package/dist/src/__tests__/typechecker-coverage.test.js +627 -0
- package/dist/src/__tests__/typechecker.test.js +3 -3
- package/dist/src/__tests__/watch-decorator.test.d.ts +1 -0
- package/dist/src/__tests__/watch-decorator.test.js +54 -0
- package/dist/src/ast/types.d.ts +102 -3
- package/dist/src/cache/incremental.d.ts +13 -14
- package/dist/src/cache/incremental.js +106 -89
- package/dist/src/cache/index.d.ts +8 -2
- package/dist/src/cache/index.js +18 -6
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.js +466 -17
- package/dist/src/config/project-config.d.ts +29 -0
- package/dist/src/config/project-config.js +180 -0
- package/dist/src/diagnostics/index.d.ts +9 -0
- package/dist/src/diagnostics/index.js +18 -1
- package/dist/src/emit/compile.d.ts +10 -0
- package/dist/src/emit/compile.js +395 -50
- package/dist/src/emit/index.d.ts +40 -0
- package/dist/src/emit/index.js +307 -14
- package/dist/src/emit/modules.js +21 -3
- package/dist/src/emit/sourcemap.d.ts +23 -27
- package/dist/src/emit/sourcemap.js +52 -30
- package/dist/src/formatter/index.js +33 -8
- package/dist/src/hir/deprecated.d.ts +13 -0
- package/dist/src/hir/deprecated.js +218 -0
- package/dist/src/hir/lower.js +114 -8
- package/dist/src/hir/monomorphize.js +22 -2
- package/dist/src/hir/types.d.ts +65 -1
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +18 -3
- package/dist/src/lexer/index.d.ts +2 -1
- package/dist/src/lexer/index.js +39 -3
- package/dist/src/lint/index.d.ts +45 -0
- package/dist/src/lint/index.js +930 -0
- package/dist/src/lir/lower.js +29 -2
- package/dist/src/lir/types.d.ts +2 -0
- package/dist/src/lsp/server.js +92 -5
- package/dist/src/mir/lower.js +775 -34
- package/dist/src/mir/macro.js +36 -2
- package/dist/src/mir/types.d.ts +12 -0
- package/dist/src/mir/verify.js +9 -0
- package/dist/src/optimizer/auto-inline.d.ts +2 -0
- package/dist/src/optimizer/auto-inline.js +67 -0
- package/dist/src/optimizer/cse.d.ts +20 -0
- package/dist/src/optimizer/cse.js +234 -0
- package/dist/src/optimizer/inline.d.ts +26 -0
- package/dist/src/optimizer/inline.js +286 -0
- package/dist/src/optimizer/interprocedural.js +4 -0
- package/dist/src/optimizer/licm.d.ts +32 -0
- package/dist/src/optimizer/licm.js +371 -0
- package/dist/src/optimizer/pipeline.js +12 -2
- package/dist/src/optimizer/strength_reduction.d.ts +15 -0
- package/dist/src/optimizer/strength_reduction.js +90 -0
- package/dist/src/optimizer/tco.d.ts +53 -0
- package/dist/src/optimizer/tco.js +238 -0
- package/dist/src/parser/index.d.ts +32 -0
- package/dist/src/parser/index.js +421 -59
- package/dist/src/repl-server.d.ts +13 -0
- package/dist/src/repl-server.js +127 -0
- package/dist/src/structs/expand.d.ts +15 -0
- package/dist/src/structs/expand.js +46 -0
- package/dist/src/testing/runner.d.ts +40 -0
- package/dist/src/testing/runner.js +237 -0
- package/dist/src/typechecker/index.d.ts +3 -0
- package/dist/src/typechecker/index.js +254 -9
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/doc-drafts/redscript-docs/docs/en/stdlib/graph.md +104 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/parabola.md +113 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/pathfind.md +104 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/physics.md +134 -0
- package/doc-drafts/redscript-docs/docs/en/stdlib/quaternion.md +135 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/graph.md +104 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/parabola.md +113 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/pathfind.md +104 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/physics.md +134 -0
- package/doc-drafts/redscript-docs/docs/zh/stdlib/quaternion.md +135 -0
- package/docs/stdlib/result.md +156 -0
- package/docs/stdlib/result.zh.md +156 -0
- package/editors/vscode/fixtures/test.mcrs +7 -0
- package/editors/vscode/out/extension.js +2095 -225
- package/editors/vscode/out/lsp-server.js +519 -51
- package/editors/vscode/package-lock.json +9 -4
- package/editors/vscode/package.json +1 -1
- package/examples/display-demo.mcrs +64 -0
- package/examples/game/racing.mcrs +301 -0
- package/examples/game/tower_defense.mcrs +311 -0
- package/examples/math/physics_sim.mcrs +322 -0
- package/examples/rpg/boss_fight.mcrs +313 -0
- package/examples/rpg/health_system.mcrs +237 -0
- package/examples/rpg/inventory.mcrs +265 -0
- package/examples/util/debug_hud.mcrs +279 -0
- package/jest.config.js +10 -0
- package/package.json +12 -3
- package/playground/index.html +823 -0
- package/scripts/gen-docs.ts +533 -0
- package/scripts/update-redscript-docs-stdlib.sh +770 -0
- package/src/__tests__/budget.test.ts +5 -0
- package/src/__tests__/cache/cache-behavior.test.ts +480 -0
- package/src/__tests__/cache-extra.test.ts +199 -0
- package/src/__tests__/cli-docs.test.ts +77 -0
- package/src/__tests__/cli-init.test.ts +91 -0
- package/src/__tests__/cli-publish.test.ts +190 -0
- package/src/__tests__/cli.test.ts +117 -1
- package/src/__tests__/compile-preprocess.test.ts +366 -0
- package/src/__tests__/compiler/break-stmt.test.ts +66 -0
- package/src/__tests__/compiler/const-decl.test.ts +141 -0
- package/src/__tests__/compiler/continue-stmt.test.ts +81 -0
- package/src/__tests__/compiler/coroutine-extended.test.ts +723 -0
- package/src/__tests__/compiler/deprecated.test.ts +305 -0
- package/src/__tests__/compiler/do-while.test.ts +130 -0
- package/src/__tests__/compiler/enum-payload.test.ts +299 -0
- package/src/__tests__/compiler/interface.test.ts +287 -0
- package/src/__tests__/compiler/labeled-loops.test.ts +279 -0
- package/src/__tests__/compiler/match-string.test.ts +45 -0
- package/src/__tests__/compiler/memoize.test.ts +126 -0
- package/src/__tests__/compiler/method-chain.test.ts +121 -0
- package/src/__tests__/compiler/module-import.test.ts +240 -0
- package/src/__tests__/compiler/option-extensions.test.ts +207 -0
- package/src/__tests__/compiler/profile-decorator.test.ts +79 -0
- package/src/__tests__/compiler/string-advanced.test.ts +310 -0
- package/src/__tests__/compiler/struct-extends.test.ts +109 -0
- package/src/__tests__/compiler/throttle-retry.test.ts +191 -0
- package/src/__tests__/compiler/tuple-type.test.ts +263 -0
- package/src/__tests__/compiler/watch-decorator.test.ts +72 -0
- package/src/__tests__/config/project-config.test.ts +181 -0
- package/src/__tests__/config-decorator.test.ts +157 -0
- package/src/__tests__/diagnostics-extra.test.ts +155 -0
- package/src/__tests__/emit/compile-branches.test.ts +135 -0
- package/src/__tests__/emit/compile-coverage.test.ts +696 -0
- package/src/__tests__/emit/compile-extra-branches.test.ts +228 -0
- package/src/__tests__/emit/compile-mocked-branches.test.ts +249 -0
- package/src/__tests__/emit/compile.test.ts +6 -1
- package/src/__tests__/emit/execute-chain.test.ts +114 -0
- package/src/__tests__/emit/index.test.ts +2 -1
- package/src/__tests__/emit/modules-branches.test.ts +90 -0
- package/src/__tests__/emit/modules-coverage.test.ts +241 -0
- package/src/__tests__/emit/modules-errors.test.ts +192 -0
- package/src/__tests__/emit/modules-rewrite.test.ts +232 -0
- package/src/__tests__/emit/source-map.test.ts +152 -0
- package/src/__tests__/enum.test.ts +9 -4
- package/src/__tests__/error-recovery.test.ts +226 -0
- package/src/__tests__/events-types-extra.test.ts +110 -0
- package/src/__tests__/events-types.test.ts +66 -0
- package/src/__tests__/formatter.test.ts +15 -5
- package/src/__tests__/generics.test.ts +16 -9
- package/src/__tests__/hir/lower-extra.test.ts +151 -0
- package/src/__tests__/hir/monomorphize-coverage.test.ts +432 -0
- package/src/__tests__/hir/monomorphize-extra.test.ts +220 -0
- package/src/__tests__/hir/monomorphize-extra2.test.ts +350 -0
- package/src/__tests__/impl.test.ts +12 -8
- package/src/__tests__/incremental.test.ts +10 -2
- package/src/__tests__/index-extra.test.ts +79 -0
- package/src/__tests__/lexer.test.ts +2 -2
- package/src/__tests__/lint/hir-coverage.test.ts +1716 -0
- package/src/__tests__/lint/rules-coverage.test.ts +598 -0
- package/src/__tests__/lint/rules.test.ts +230 -0
- package/src/__tests__/lir/lower.test.ts +33 -0
- package/src/__tests__/lir/verify.test.ts +33 -0
- package/src/__tests__/lsp/completion.test.ts +687 -0
- package/src/__tests__/lsp/definition.test.ts +499 -0
- package/src/__tests__/lsp/diagnostics.test.ts +108 -0
- package/src/__tests__/lsp/hover-docs.test.ts +222 -0
- package/src/__tests__/lsp.test.ts +4 -1
- package/src/__tests__/mc-integration/item-entity-events.test.ts +5 -0
- package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +5 -0
- package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1105 -0
- package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1366 -0
- package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1245 -0
- package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +755 -0
- package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +771 -0
- package/src/__tests__/mc-integration/stdlib-coverage.test.ts +5 -0
- package/src/__tests__/mc-integration/syntax-coverage.test.ts +5 -0
- package/src/__tests__/mc-validator-coverage.test.ts +325 -0
- package/src/__tests__/mc-validator-extra.test.ts +252 -0
- package/src/__tests__/mir/lower-extra.test.ts +402 -0
- package/src/__tests__/mir/lower-extra2.test.ts +348 -0
- package/src/__tests__/mir/lower-extra3.test.ts +277 -0
- package/src/__tests__/mir/lower-extra4.test.ts +636 -0
- package/src/__tests__/mir/lower-extra5.test.ts +612 -0
- package/src/__tests__/mir/lower-extra6.test.ts +520 -0
- package/src/__tests__/mir/lower-extra7.test.ts +1045 -0
- package/src/__tests__/mir/lower-extra8.test.ts +704 -0
- package/src/__tests__/mir/lower-extra9.test.ts +821 -0
- package/src/__tests__/optimizer/auto-inline.test.ts +206 -0
- package/src/__tests__/optimizer/cse.test.ts +195 -0
- package/src/__tests__/optimizer/inline_fn.test.ts +263 -0
- package/src/__tests__/optimizer/licm.test.ts +358 -0
- package/src/__tests__/optimizer/nbt-coalesce.test.ts +147 -0
- package/src/__tests__/optimizer/optimizer-extended.test.ts +1081 -0
- package/src/__tests__/optimizer/scoreboard-batch.test.ts +141 -0
- package/src/__tests__/optimizer/strength-reduction.test.ts +111 -0
- package/src/__tests__/optimizer/tco-coverage.test.ts +309 -0
- package/src/__tests__/optimizer/tco.test.ts +238 -0
- package/src/__tests__/option.test.ts +14 -7
- package/src/__tests__/parser-coverage.test.ts +576 -0
- package/src/__tests__/parser-extra.test.ts +531 -0
- package/src/__tests__/parser.test.ts +14 -0
- package/src/__tests__/repl-extra.test.ts +195 -0
- package/src/__tests__/repl-server-extra.test.ts +150 -0
- package/src/__tests__/repl-server.test.ts +122 -0
- package/src/__tests__/runtime-extra.test.ts +862 -0
- package/src/__tests__/singleton-decorator.test.ts +285 -0
- package/src/__tests__/sourcemap.test.ts +1 -1
- package/src/__tests__/stdlib/advanced.test.ts +312 -0
- package/src/__tests__/stdlib/bigint.test.ts +57 -0
- package/src/__tests__/stdlib/bits.test.ts +75 -0
- package/src/__tests__/stdlib/bossbar.test.ts +45 -0
- package/src/__tests__/stdlib/color.test.ts +60 -0
- package/src/__tests__/stdlib/combat.test.ts +35 -0
- package/src/__tests__/stdlib/cooldown.test.ts +35 -0
- package/src/__tests__/stdlib/dialog.test.ts +14 -6
- package/src/__tests__/stdlib/ecs.test.ts +54 -0
- package/src/__tests__/stdlib/effects.test.ts +45 -0
- package/src/__tests__/stdlib/events.test.ts +23 -0
- package/src/__tests__/stdlib/expr.test.ts +48 -0
- package/src/__tests__/stdlib/fft.test.ts +54 -0
- package/src/__tests__/stdlib/graph.test.ts +77 -0
- package/src/__tests__/stdlib/interactions.test.ts +30 -0
- package/src/__tests__/stdlib/inventory.test.ts +40 -0
- package/src/__tests__/stdlib/linalg.test.ts +52 -0
- package/src/__tests__/stdlib/map.test.ts +55 -0
- package/src/__tests__/stdlib/math.test.ts +19 -5
- package/src/__tests__/stdlib/math_hp.test.ts +55 -0
- package/src/__tests__/stdlib/mobs.test.ts +40 -0
- package/src/__tests__/stdlib/noise.test.ts +46 -0
- package/src/__tests__/stdlib/ode.test.ts +40 -0
- package/src/__tests__/stdlib/parabola.test.ts +51 -0
- package/src/__tests__/stdlib/particles.test.ts +40 -0
- package/src/__tests__/stdlib/physics.test.ts +50 -0
- package/src/__tests__/stdlib/player.test.ts +35 -0
- package/src/__tests__/stdlib/quaternion.test.ts +46 -0
- package/src/__tests__/stdlib/queue.test.ts +73 -0
- package/src/__tests__/stdlib/random.test.ts +50 -0
- package/src/__tests__/stdlib/result.test.ts +326 -0
- package/src/__tests__/stdlib/scheduler.test.ts +18 -7
- package/src/__tests__/stdlib/set_int.test.ts +62 -0
- package/src/__tests__/stdlib/sets.test.ts +28 -0
- package/src/__tests__/stdlib/signal.test.ts +60 -0
- package/src/__tests__/stdlib/spawn.test.ts +40 -0
- package/src/__tests__/stdlib/string.test.ts +224 -0
- package/src/__tests__/stdlib/strings.test.ts +55 -0
- package/src/__tests__/stdlib/tags.test.ts +32 -0
- package/src/__tests__/stdlib/teams.test.ts +45 -0
- package/src/__tests__/stdlib/timer.test.ts +53 -0
- package/src/__tests__/stdlib/vec.test.ts +72 -0
- package/src/__tests__/stdlib/world.test.ts +45 -0
- package/src/__tests__/struct-display.test.ts +69 -0
- package/src/__tests__/test-framework/runner.test.ts +208 -0
- package/src/__tests__/tuner/adapters.test.ts +232 -0
- package/src/__tests__/tuner/simulator-extra.test.ts +222 -0
- package/src/__tests__/tuple.test.ts +11 -4
- package/src/__tests__/typechecker-coverage.test.ts +671 -0
- package/src/__tests__/typechecker.test.ts +4 -3
- package/src/__tests__/watch-decorator.test.ts +59 -0
- package/src/ast/types.ts +65 -3
- package/src/cache/incremental.ts +128 -99
- package/src/cache/index.ts +35 -8
- package/src/cli.ts +538 -29
- package/src/config/project-config.ts +176 -0
- package/src/diagnostics/index.ts +22 -0
- package/src/docs.ts +98 -0
- package/src/emit/compile.ts +408 -51
- package/src/emit/index.ts +366 -18
- package/src/emit/modules.ts +19 -3
- package/src/emit/sourcemap.ts +64 -43
- package/src/formatter/index.ts +35 -8
- package/src/hir/deprecated.ts +212 -0
- package/src/hir/lower.ts +128 -8
- package/src/hir/monomorphize.ts +24 -2
- package/src/hir/types.ts +26 -1
- package/src/index.ts +23 -3
- package/src/lexer/index.ts +45 -6
- package/src/lint/index.ts +922 -0
- package/src/lir/lower.ts +30 -2
- package/src/lir/types.ts +4 -0
- package/src/lsp/server.ts +100 -1
- package/src/mir/lower.ts +785 -40
- package/src/mir/macro.ts +30 -2
- package/src/mir/types.ts +13 -0
- package/src/mir/verify.ts +10 -2
- package/src/optimizer/auto-inline.ts +86 -0
- package/src/optimizer/copy_prop.ts +2 -2
- package/src/optimizer/coroutine.ts +3 -3
- package/src/optimizer/cse.ts +205 -0
- package/src/optimizer/dce.ts +2 -2
- package/src/optimizer/inline.ts +335 -0
- package/src/optimizer/interprocedural.ts +5 -1
- package/src/optimizer/licm.ts +454 -0
- package/src/optimizer/nbt-coalesce.ts +109 -0
- package/src/optimizer/pipeline.ts +16 -2
- package/src/optimizer/scoreboard-batch.ts +52 -0
- package/src/optimizer/strength_reduction.ts +95 -0
- package/src/optimizer/tco.ts +267 -0
- package/src/optimizer/unroll.ts +2 -2
- package/src/parser/index.ts +426 -53
- package/src/repl-server.ts +102 -0
- package/src/stdlib/advanced.mcrs +271 -101
- package/src/stdlib/bigint.mcrs +97 -11
- package/src/stdlib/bits.mcrs +75 -12
- package/src/stdlib/bossbar.mcrs +37 -8
- package/src/stdlib/calculus.mcrs +82 -26
- package/src/stdlib/color.mcrs +98 -16
- package/src/stdlib/combat.mcrs +23 -5
- package/src/stdlib/cooldown.mcrs +19 -0
- package/src/stdlib/dialog.mcrs +45 -7
- package/src/stdlib/easing.mcrs +132 -12
- package/src/stdlib/ecs.mcrs +142 -25
- package/src/stdlib/effects.mcrs +88 -12
- package/src/stdlib/events.mcrs +21 -2
- package/src/stdlib/expr.mcrs +18 -3
- package/src/stdlib/fft.mcrs +66 -56
- package/src/stdlib/geometry.mcrs +137 -39
- package/src/stdlib/graph.mcrs +73 -0
- package/src/stdlib/heap.mcrs +49 -8
- package/src/stdlib/i18n/zh.yaml +2891 -0
- package/src/stdlib/interactions.mcrs +43 -20
- package/src/stdlib/inventory.mcrs +14 -3
- package/src/stdlib/linalg.mcrs +185 -30
- package/src/stdlib/list.mcrs +168 -18
- package/src/stdlib/map.mcrs +112 -0
- package/src/stdlib/math.mcrs +68 -18
- package/src/stdlib/math_hp.mcrs +124 -33
- package/src/stdlib/matrix.mcrs +133 -20
- package/src/stdlib/mobs.mcrs +87 -0
- package/src/stdlib/noise.mcrs +65 -21
- package/src/stdlib/ode.mcrs +96 -0
- package/src/stdlib/parabola.mcrs +104 -29
- package/src/stdlib/particles.mcrs +78 -21
- package/src/stdlib/pathfind.mcrs +89 -35
- package/src/stdlib/physics.mcrs +134 -26
- package/src/stdlib/player.mcrs +18 -0
- package/src/stdlib/quaternion.mcrs +213 -9
- package/src/stdlib/queue.mcrs +123 -0
- package/src/stdlib/random.mcrs +63 -18
- package/src/stdlib/result.mcrs +111 -0
- package/src/stdlib/scheduler.mcrs +59 -10
- package/src/stdlib/set_int.mcrs +240 -0
- package/src/stdlib/sets.mcrs +49 -19
- package/src/stdlib/signal.mcrs +151 -79
- package/src/stdlib/sort.mcrs +44 -24
- package/src/stdlib/spawn.mcrs +30 -7
- package/src/stdlib/state.mcrs +40 -5
- package/src/stdlib/strings.mcrs +131 -3
- package/src/stdlib/tags.mcrs +2 -2
- package/src/stdlib/teams.mcrs +22 -10
- package/src/stdlib/timer.mcrs +36 -6
- package/src/stdlib/vec.mcrs +44 -9
- package/src/stdlib/world.mcrs +57 -25
- package/src/structs/expand.ts +64 -0
- package/src/testing/runner.ts +271 -0
- package/src/typechecker/index.ts +273 -9
package/src/stdlib/ecs.mcrs
CHANGED
|
@@ -55,7 +55,12 @@ let ECS_COMP_DAMAGE: int = 3
|
|
|
55
55
|
// Registry is a 16-element int[] where registry[comp_id] == 1 means registered.
|
|
56
56
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
/// Allocate a blank 16-slot component registry.
|
|
59
|
+
///
|
|
60
|
+
/// @since 2.0.0
|
|
61
|
+
/// @returns A new `int[]` of length 16 with all slots set to `0`
|
|
62
|
+
/// @example
|
|
63
|
+
/// let reg: int[] = ecs_registry_new()
|
|
59
64
|
fn ecs_registry_new(): int[] {
|
|
60
65
|
let reg: int[] = []
|
|
61
66
|
let i: int = 0
|
|
@@ -66,7 +71,14 @@ fn ecs_registry_new(): int[] {
|
|
|
66
71
|
return reg
|
|
67
72
|
}
|
|
68
73
|
|
|
69
|
-
|
|
74
|
+
/// Mark `comp_id` as registered in the registry and return the updated registry.
|
|
75
|
+
///
|
|
76
|
+
/// @since 2.0.0
|
|
77
|
+
/// @param reg Registry array from `ecs_registry_new`
|
|
78
|
+
/// @param comp_id Component type ID in range [0, 15]
|
|
79
|
+
/// @returns Updated registry array
|
|
80
|
+
/// @example
|
|
81
|
+
/// reg = ecs_register(reg, ECS_COMP_HEALTH)
|
|
70
82
|
fn ecs_register(reg: int[], comp_id: int): int[] {
|
|
71
83
|
if (comp_id >= 0) {
|
|
72
84
|
if (comp_id < 16) {
|
|
@@ -76,7 +88,14 @@ fn ecs_register(reg: int[], comp_id: int): int[] {
|
|
|
76
88
|
return reg
|
|
77
89
|
}
|
|
78
90
|
|
|
79
|
-
|
|
91
|
+
/// Check whether `comp_id` is registered.
|
|
92
|
+
///
|
|
93
|
+
/// @since 2.0.0
|
|
94
|
+
/// @param reg Registry array from `ecs_registry_new`
|
|
95
|
+
/// @param comp_id Component type ID in range [0, 15]
|
|
96
|
+
/// @returns `1` if registered, `0` otherwise
|
|
97
|
+
/// @example
|
|
98
|
+
/// if (ecs_is_registered(reg, ECS_COMP_HEALTH) == 1) { }
|
|
80
99
|
fn ecs_is_registered(reg: int[], comp_id: int): int {
|
|
81
100
|
if (comp_id >= 0) {
|
|
82
101
|
if (comp_id < 16) {
|
|
@@ -96,8 +115,14 @@ fn ecs_is_registered(reg: int[], comp_id: int): int {
|
|
|
96
115
|
// [3..7] reserved — 0
|
|
97
116
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
98
117
|
|
|
99
|
-
|
|
100
|
-
|
|
118
|
+
/// Create a health component state with `current_hp = max_hp` (full health).
|
|
119
|
+
///
|
|
120
|
+
/// @since 2.0.0
|
|
121
|
+
/// @param entity_score Scoreboard score identifying the entity
|
|
122
|
+
/// @param max_hp Maximum hit points
|
|
123
|
+
/// @returns New 8-element health component state array
|
|
124
|
+
/// @example
|
|
125
|
+
/// let hp: int[] = ecs_health_init(42, 100)
|
|
101
126
|
fn ecs_health_init(entity_score: int, max_hp: int): int[] {
|
|
102
127
|
let s: int[] = []
|
|
103
128
|
s.push(entity_score)
|
|
@@ -111,17 +136,36 @@ fn ecs_health_init(entity_score: int, max_hp: int): int[] {
|
|
|
111
136
|
return s
|
|
112
137
|
}
|
|
113
138
|
|
|
114
|
-
|
|
139
|
+
/// Return current HP from a health component state.
|
|
140
|
+
///
|
|
141
|
+
/// @since 2.0.0
|
|
142
|
+
/// @param state Health component state from `ecs_health_init`
|
|
143
|
+
/// @returns Current hit point value
|
|
144
|
+
/// @example
|
|
145
|
+
/// let hp: int = ecs_health_get(state)
|
|
115
146
|
fn ecs_health_get(state: int[]): int {
|
|
116
147
|
return state[1]
|
|
117
148
|
}
|
|
118
149
|
|
|
119
|
-
|
|
150
|
+
/// Return maximum HP from a health component state.
|
|
151
|
+
///
|
|
152
|
+
/// @since 2.0.0
|
|
153
|
+
/// @param state Health component state from `ecs_health_init`
|
|
154
|
+
/// @returns Maximum hit point value
|
|
155
|
+
/// @example
|
|
156
|
+
/// let max: int = ecs_health_max(state)
|
|
120
157
|
fn ecs_health_max(state: int[]): int {
|
|
121
158
|
return state[2]
|
|
122
159
|
}
|
|
123
160
|
|
|
124
|
-
|
|
161
|
+
/// Set current HP (clamped to [0, max]) and return the updated state.
|
|
162
|
+
///
|
|
163
|
+
/// @since 2.0.0
|
|
164
|
+
/// @param state Health component state from `ecs_health_init`
|
|
165
|
+
/// @param hp New HP value (clamped to valid range automatically)
|
|
166
|
+
/// @returns Updated state array
|
|
167
|
+
/// @example
|
|
168
|
+
/// state = ecs_health_set(state, 50)
|
|
125
169
|
fn ecs_health_set(state: int[], hp: int): int[] {
|
|
126
170
|
let clamped: int = hp
|
|
127
171
|
if (clamped < 0) { clamped = 0 }
|
|
@@ -130,7 +174,14 @@ fn ecs_health_set(state: int[], hp: int): int[] {
|
|
|
130
174
|
return state
|
|
131
175
|
}
|
|
132
176
|
|
|
133
|
-
|
|
177
|
+
/// Subtract `amount` from HP (clamped to 0) and return the updated state.
|
|
178
|
+
///
|
|
179
|
+
/// @since 2.0.0
|
|
180
|
+
/// @param state Health component state
|
|
181
|
+
/// @param amount Damage amount to subtract (positive integer)
|
|
182
|
+
/// @returns Updated state array
|
|
183
|
+
/// @example
|
|
184
|
+
/// state = ecs_health_damage(state, 30)
|
|
134
185
|
fn ecs_health_damage(state: int[], amount: int): int[] {
|
|
135
186
|
let next: int = state[1] - amount
|
|
136
187
|
if (next < 0) { next = 0 }
|
|
@@ -138,7 +189,14 @@ fn ecs_health_damage(state: int[], amount: int): int[] {
|
|
|
138
189
|
return state
|
|
139
190
|
}
|
|
140
191
|
|
|
141
|
-
|
|
192
|
+
/// Add `amount` to HP (clamped to max) and return the updated state.
|
|
193
|
+
///
|
|
194
|
+
/// @since 2.0.0
|
|
195
|
+
/// @param state Health component state
|
|
196
|
+
/// @param amount Healing amount to add (positive integer)
|
|
197
|
+
/// @returns Updated state array
|
|
198
|
+
/// @example
|
|
199
|
+
/// state = ecs_health_heal(state, 20)
|
|
142
200
|
fn ecs_health_heal(state: int[], amount: int): int[] {
|
|
143
201
|
let next: int = state[1] + amount
|
|
144
202
|
if (next > state[2]) { next = state[2] }
|
|
@@ -146,14 +204,25 @@ fn ecs_health_heal(state: int[], amount: int): int[] {
|
|
|
146
204
|
return state
|
|
147
205
|
}
|
|
148
206
|
|
|
149
|
-
|
|
207
|
+
/// Return `1` if the entity HP is at or below zero, otherwise `0`.
|
|
208
|
+
///
|
|
209
|
+
/// @since 2.0.0
|
|
210
|
+
/// @param state Health component state
|
|
211
|
+
/// @returns `1` if dead, `0` if alive
|
|
212
|
+
/// @example
|
|
213
|
+
/// if (ecs_health_is_dead(state) == 1) { /* handle death */ }
|
|
150
214
|
fn ecs_health_is_dead(state: int[]): int {
|
|
151
215
|
if (state[1] <= 0) { return 1 }
|
|
152
216
|
return 0
|
|
153
217
|
}
|
|
154
218
|
|
|
155
|
-
|
|
156
|
-
|
|
219
|
+
/// Return HP as a percentage in fixed-point ×10000 (e.g., `5000` = 50.00%).
|
|
220
|
+
///
|
|
221
|
+
/// @since 2.0.0
|
|
222
|
+
/// @param state Health component state
|
|
223
|
+
/// @returns `current_hp * 10000 / max_hp`, or `0` if max_hp is zero
|
|
224
|
+
/// @example
|
|
225
|
+
/// let pct: int = ecs_health_pct(state)
|
|
157
226
|
fn ecs_health_pct(state: int[]): int {
|
|
158
227
|
if (state[2] <= 0) { return 0 }
|
|
159
228
|
return state[1] * 10000 / state[2]
|
|
@@ -171,7 +240,15 @@ fn ecs_health_pct(state: int[]): int {
|
|
|
171
240
|
// Fixed-point convention: 1000 = 1.0 block/tick
|
|
172
241
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
173
242
|
|
|
174
|
-
|
|
243
|
+
/// Create a velocity component state with the given initial velocities.
|
|
244
|
+
///
|
|
245
|
+
/// @since 2.0.0
|
|
246
|
+
/// @param vx X velocity ×1000 fixed-point (1000 = 1.0 block/tick)
|
|
247
|
+
/// @param vy Y velocity ×1000 fixed-point
|
|
248
|
+
/// @param vz Z velocity ×1000 fixed-point
|
|
249
|
+
/// @returns New 8-element velocity component state array
|
|
250
|
+
/// @example
|
|
251
|
+
/// let vel: int[] = ecs_vel_init(1000, 0, 500)
|
|
175
252
|
fn ecs_vel_init(vx: int, vy: int, vz: int): int[] {
|
|
176
253
|
let s: int[] = []
|
|
177
254
|
s.push(vx)
|
|
@@ -185,22 +262,43 @@ fn ecs_vel_init(vx: int, vy: int, vz: int): int[] {
|
|
|
185
262
|
return s
|
|
186
263
|
}
|
|
187
264
|
|
|
188
|
-
|
|
265
|
+
/// Return X velocity from a velocity component state.
|
|
266
|
+
///
|
|
267
|
+
/// @since 2.0.0
|
|
268
|
+
/// @param state Velocity component state
|
|
269
|
+
/// @returns X velocity ×1000 fixed-point
|
|
189
270
|
fn ecs_vel_get_x(state: int[]): int {
|
|
190
271
|
return state[0]
|
|
191
272
|
}
|
|
192
273
|
|
|
193
|
-
|
|
274
|
+
/// Return Y velocity from a velocity component state.
|
|
275
|
+
///
|
|
276
|
+
/// @since 2.0.0
|
|
277
|
+
/// @param state Velocity component state
|
|
278
|
+
/// @returns Y velocity ×1000 fixed-point
|
|
194
279
|
fn ecs_vel_get_y(state: int[]): int {
|
|
195
280
|
return state[1]
|
|
196
281
|
}
|
|
197
282
|
|
|
198
|
-
|
|
283
|
+
/// Return Z velocity from a velocity component state.
|
|
284
|
+
///
|
|
285
|
+
/// @since 2.0.0
|
|
286
|
+
/// @param state Velocity component state
|
|
287
|
+
/// @returns Z velocity ×1000 fixed-point
|
|
199
288
|
fn ecs_vel_get_z(state: int[]): int {
|
|
200
289
|
return state[2]
|
|
201
290
|
}
|
|
202
291
|
|
|
203
|
-
|
|
292
|
+
/// Set all velocity components and return the updated state.
|
|
293
|
+
///
|
|
294
|
+
/// @since 2.0.0
|
|
295
|
+
/// @param state Velocity component state
|
|
296
|
+
/// @param vx New X velocity ×1000
|
|
297
|
+
/// @param vy New Y velocity ×1000
|
|
298
|
+
/// @param vz New Z velocity ×1000
|
|
299
|
+
/// @returns Updated state array
|
|
300
|
+
/// @example
|
|
301
|
+
/// state = ecs_vel_set(state, 500, 1200, 0)
|
|
204
302
|
fn ecs_vel_set(state: int[], vx: int, vy: int, vz: int): int[] {
|
|
205
303
|
state[0] = vx
|
|
206
304
|
state[1] = vy
|
|
@@ -208,9 +306,16 @@ fn ecs_vel_set(state: int[], vx: int, vy: int, vz: int): int[] {
|
|
|
208
306
|
return state
|
|
209
307
|
}
|
|
210
308
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
309
|
+
/// Return the speed (magnitude) of the velocity vector ×1000.
|
|
310
|
+
///
|
|
311
|
+
/// Uses `sqrt_fixed` from `math.mcrs`. For example,
|
|
312
|
+
/// `ecs_vel_speed([3000, 4000, 0, ...])` returns approximately `5000`.
|
|
313
|
+
///
|
|
314
|
+
/// @since 2.0.0
|
|
315
|
+
/// @param state Velocity component state
|
|
316
|
+
/// @returns `sqrt(vx² + vy² + vz²)` in ×1000 fixed-point
|
|
317
|
+
/// @example
|
|
318
|
+
/// let speed: int = ecs_vel_speed(vel_state)
|
|
214
319
|
fn ecs_vel_speed(state: int[]): int {
|
|
215
320
|
let vx: int = state[0]
|
|
216
321
|
let vy: int = state[1]
|
|
@@ -221,15 +326,27 @@ fn ecs_vel_speed(state: int[]): int {
|
|
|
221
326
|
return sqrt_fixed(mag_sq)
|
|
222
327
|
}
|
|
223
328
|
|
|
224
|
-
|
|
225
|
-
|
|
329
|
+
/// Apply gravity by subtracting `gravity_fx` from the Y velocity each tick.
|
|
330
|
+
///
|
|
331
|
+
/// @since 2.0.0
|
|
332
|
+
/// @param state Velocity component state
|
|
333
|
+
/// @param gravity_fx Gravity acceleration ×1000 per tick (e.g. `980` ≈ 0.98 blocks/tick²)
|
|
334
|
+
/// @returns Updated state array
|
|
335
|
+
/// @example
|
|
336
|
+
/// vel_state = ecs_vel_apply_gravity(vel_state, 980)
|
|
226
337
|
fn ecs_vel_apply_gravity(state: int[], gravity_fx: int): int[] {
|
|
227
338
|
state[1] = state[1] - gravity_fx
|
|
228
339
|
return state
|
|
229
340
|
}
|
|
230
341
|
|
|
231
|
-
|
|
232
|
-
|
|
342
|
+
/// Apply a friction damping factor to all velocity components.
|
|
343
|
+
///
|
|
344
|
+
/// @since 2.0.0
|
|
345
|
+
/// @param state Velocity component state
|
|
346
|
+
/// @param factor_fx Friction factor ×10000 (e.g. `8000` = 0.80 damping)
|
|
347
|
+
/// @returns Updated state array with each component multiplied by `factor_fx/10000`
|
|
348
|
+
/// @example
|
|
349
|
+
/// vel_state = ecs_vel_damp(vel_state, 9000)
|
|
233
350
|
fn ecs_vel_damp(state: int[], factor_fx: int): int[] {
|
|
234
351
|
state[0] = state[0] * factor_fx / 10000
|
|
235
352
|
state[1] = state[1] * factor_fx / 10000
|
package/src/stdlib/effects.mcrs
CHANGED
|
@@ -1,61 +1,137 @@
|
|
|
1
1
|
// Effect helper functions
|
|
2
2
|
|
|
3
|
-
/// Give speed boost
|
|
3
|
+
/// Give a speed boost to the target entity.
|
|
4
|
+
/// @since 1.0.0
|
|
5
|
+
/// @param target Entity selector (e.g. @p, @a, @e[...])
|
|
6
|
+
/// @param duration Effect duration in ticks (20 ticks = 1 second)
|
|
7
|
+
/// @param level Amplifier level (0 = Speed I, 1 = Speed II, ...)
|
|
8
|
+
/// @returns void — applies minecraft:speed effect
|
|
9
|
+
/// @example
|
|
10
|
+
/// speed(@p, 200, 1) // Speed II for 10 seconds
|
|
4
11
|
fn speed(target: selector, duration: int, level: int) {
|
|
5
12
|
effect(target, "minecraft:speed", duration, level);
|
|
6
13
|
}
|
|
7
14
|
|
|
8
|
-
/// Give jump boost
|
|
15
|
+
/// Give a jump boost to the target entity.
|
|
16
|
+
/// @since 1.0.0
|
|
17
|
+
/// @param target Entity selector
|
|
18
|
+
/// @param duration Effect duration in ticks
|
|
19
|
+
/// @param level Amplifier level (0 = Jump Boost I, 1 = Jump Boost II, ...)
|
|
20
|
+
/// @returns void — applies minecraft:jump_boost effect
|
|
21
|
+
/// @example
|
|
22
|
+
/// jump(@p, 100, 0) // Jump Boost I for 5 seconds
|
|
9
23
|
fn jump(target: selector, duration: int, level: int) {
|
|
10
24
|
effect(target, "minecraft:jump_boost", duration, level);
|
|
11
25
|
}
|
|
12
26
|
|
|
13
|
-
/// Give regeneration
|
|
27
|
+
/// Give regeneration to the target entity.
|
|
28
|
+
/// @since 1.0.0
|
|
29
|
+
/// @param target Entity selector
|
|
30
|
+
/// @param duration Effect duration in ticks
|
|
31
|
+
/// @param level Amplifier level (0 = Regeneration I, ...)
|
|
32
|
+
/// @returns void — applies minecraft:regeneration effect
|
|
33
|
+
/// @example
|
|
34
|
+
/// regen(@p, 60, 0) // Regeneration I for 3 seconds
|
|
14
35
|
fn regen(target: selector, duration: int, level: int) {
|
|
15
36
|
effect(target, "minecraft:regeneration", duration, level);
|
|
16
37
|
}
|
|
17
38
|
|
|
18
|
-
/// Give resistance
|
|
39
|
+
/// Give damage resistance to the target entity.
|
|
40
|
+
/// @since 1.0.0
|
|
41
|
+
/// @param target Entity selector
|
|
42
|
+
/// @param duration Effect duration in ticks
|
|
43
|
+
/// @param level Amplifier level (0 = Resistance I, ...)
|
|
44
|
+
/// @returns void — applies minecraft:resistance effect
|
|
45
|
+
/// @example
|
|
46
|
+
/// resistance(@p, 400, 0) // Resistance I for 20 seconds
|
|
19
47
|
fn resistance(target: selector, duration: int, level: int) {
|
|
20
48
|
effect(target, "minecraft:resistance", duration, level);
|
|
21
49
|
}
|
|
22
50
|
|
|
23
|
-
/// Give strength
|
|
51
|
+
/// Give strength to the target entity.
|
|
52
|
+
/// @since 1.0.0
|
|
53
|
+
/// @param target Entity selector
|
|
54
|
+
/// @param duration Effect duration in ticks
|
|
55
|
+
/// @param level Amplifier level (0 = Strength I, 1 = Strength II, ...)
|
|
56
|
+
/// @returns void — applies minecraft:strength effect
|
|
57
|
+
/// @example
|
|
58
|
+
/// strength(@p, 200, 1) // Strength II for 10 seconds
|
|
24
59
|
fn strength(target: selector, duration: int, level: int) {
|
|
25
60
|
effect(target, "minecraft:strength", duration, level);
|
|
26
61
|
}
|
|
27
62
|
|
|
28
|
-
///
|
|
63
|
+
/// Make the target entity invisible.
|
|
64
|
+
/// @since 1.0.0
|
|
65
|
+
/// @param target Entity selector
|
|
66
|
+
/// @param duration Effect duration in ticks
|
|
67
|
+
/// @returns void — applies minecraft:invisibility at amplifier 0
|
|
68
|
+
/// @example
|
|
69
|
+
/// invisible(@p, 300) // invisibility for 15 seconds
|
|
29
70
|
fn invisible(target: selector, duration: int) {
|
|
30
71
|
effect(target, "minecraft:invisibility", duration, 0);
|
|
31
72
|
}
|
|
32
73
|
|
|
33
|
-
/// Give night vision
|
|
74
|
+
/// Give night vision to the target entity.
|
|
75
|
+
/// @since 1.0.0
|
|
76
|
+
/// @param target Entity selector
|
|
77
|
+
/// @param duration Effect duration in ticks
|
|
78
|
+
/// @returns void — applies minecraft:night_vision at amplifier 0
|
|
79
|
+
/// @example
|
|
80
|
+
/// night_vision(@p, 6000) // night vision for 5 minutes
|
|
34
81
|
fn night_vision(target: selector, duration: int) {
|
|
35
82
|
effect(target, "minecraft:night_vision", duration, 0);
|
|
36
83
|
}
|
|
37
84
|
|
|
38
|
-
/// Give slow falling
|
|
85
|
+
/// Give slow falling to the target entity.
|
|
86
|
+
/// @since 1.0.0
|
|
87
|
+
/// @param target Entity selector
|
|
88
|
+
/// @param duration Effect duration in ticks
|
|
89
|
+
/// @returns void — applies minecraft:slow_falling at amplifier 0
|
|
90
|
+
/// @example
|
|
91
|
+
/// slow_fall(@p, 200) // slow falling for 10 seconds
|
|
39
92
|
fn slow_fall(target: selector, duration: int) {
|
|
40
93
|
effect(target, "minecraft:slow_falling", duration, 0);
|
|
41
94
|
}
|
|
42
95
|
|
|
43
|
-
/// Give glowing effect
|
|
96
|
+
/// Give the glowing outline effect to the target entity.
|
|
97
|
+
/// @since 1.0.0
|
|
98
|
+
/// @param target Entity selector
|
|
99
|
+
/// @param duration Effect duration in ticks
|
|
100
|
+
/// @returns void — applies minecraft:glowing at amplifier 0
|
|
101
|
+
/// @example
|
|
102
|
+
/// glow(@e[type=zombie], 100) // make all zombies glow for 5 seconds
|
|
44
103
|
fn glow(target: selector, duration: int) {
|
|
45
104
|
effect(target, "minecraft:glowing", duration, 0);
|
|
46
105
|
}
|
|
47
106
|
|
|
48
|
-
/// Clear all effects from target
|
|
107
|
+
/// Clear all active effects from the target entity.
|
|
108
|
+
/// @since 1.0.0
|
|
109
|
+
/// @param target Entity selector
|
|
110
|
+
/// @returns void — removes all potion effects via effect_clear
|
|
111
|
+
/// @example
|
|
112
|
+
/// clear_effects(@p) // remove all effects from nearest player
|
|
49
113
|
fn clear_effects(target: selector) {
|
|
50
114
|
effect_clear(target);
|
|
51
115
|
}
|
|
52
116
|
|
|
53
|
-
/// Clear specific effect from target
|
|
117
|
+
/// Clear a specific effect from the target entity.
|
|
118
|
+
/// @since 1.0.0
|
|
119
|
+
/// @param target Entity selector
|
|
120
|
+
/// @param eff Effect resource location string (e.g. "minecraft:speed")
|
|
121
|
+
/// @returns void — removes the specified potion effect
|
|
122
|
+
/// @example
|
|
123
|
+
/// clear_effect(@p, "minecraft:poison") // cure poison
|
|
54
124
|
fn clear_effect(target: selector, eff: string) {
|
|
55
125
|
effect_clear(target, eff);
|
|
56
126
|
}
|
|
57
127
|
|
|
58
|
-
///
|
|
128
|
+
/// Apply a full buff package (Speed I, Strength I, Regeneration I, Resistance I).
|
|
129
|
+
/// @since 1.0.0
|
|
130
|
+
/// @param target Entity selector
|
|
131
|
+
/// @param duration Duration in ticks for all four effects
|
|
132
|
+
/// @returns void — applies speed, strength, regen, and resistance at level 1 (or 0 for resistance)
|
|
133
|
+
/// @example
|
|
134
|
+
/// buff_all(@p, 600) // full buff for 30 seconds
|
|
59
135
|
fn buff_all(target: selector, duration: int) {
|
|
60
136
|
speed(target, duration, 1);
|
|
61
137
|
strength(target, duration, 1);
|
package/src/stdlib/events.mcrs
CHANGED
|
@@ -1,13 +1,32 @@
|
|
|
1
|
+
// events.mcrs — RedScript event dispatcher.
|
|
2
|
+
//
|
|
3
|
+
// Detects MC scoreboard-driven events each tick and dispatches them to
|
|
4
|
+
// function tags so multiple handlers can be registered with @on(EventType).
|
|
5
|
+
//
|
|
6
|
+
// Supported events (dispatched via function tags):
|
|
7
|
+
// #rs:on_player_join — fired once for each player without the rs.joined tag
|
|
8
|
+
// #rs:on_player_death — fired when a player's rs.deaths score reaches 1+
|
|
9
|
+
// #rs:on_entity_kill — fired when a player's rs.kills score reaches 1+
|
|
10
|
+
// #rs:on_item_use — fired when a player uses a carrot-on-a-stick
|
|
11
|
+
//
|
|
12
|
+
// Usage:
|
|
13
|
+
// @on(PlayerJoin) fn greet() { tellraw(@s, "Welcome!"); }
|
|
14
|
+
|
|
1
15
|
module events
|
|
2
|
-
// RedScript event dispatcher — detects MC events and dispatches to function tags.
|
|
3
|
-
// Handlers register via @on(EventType) decorator (compiler-generated tag JSON).
|
|
4
16
|
|
|
17
|
+
/// Internal load function: registers scoreboard objectives for death, kill, and item-use tracking.
|
|
18
|
+
/// Do not call directly — invoked automatically at datapack load.
|
|
19
|
+
/// @since 1.2.0
|
|
5
20
|
@load fn __events_load() {
|
|
6
21
|
raw("scoreboard objectives add rs.deaths deathCount")
|
|
7
22
|
raw("scoreboard objectives add rs.kills totalKillCount")
|
|
8
23
|
raw("scoreboard objectives add rs.item_use minecraft.used:minecraft.carrot_on_a_stick")
|
|
9
24
|
}
|
|
10
25
|
|
|
26
|
+
/// Internal tick function: polls scoreboard objectives each game tick and dispatches
|
|
27
|
+
/// PlayerJoin / PlayerDeath / EntityKill / ItemUse events to their respective function tags.
|
|
28
|
+
/// Do not call directly — invoked automatically every tick.
|
|
29
|
+
/// @since 1.2.0
|
|
11
30
|
@tick fn __events_tick() {
|
|
12
31
|
// PlayerJoin: players without rs.joined tag
|
|
13
32
|
raw("execute as @a[tag=!rs.joined] run function #rs:on_player_join")
|
package/src/stdlib/expr.mcrs
CHANGED
|
@@ -26,9 +26,24 @@ module library;
|
|
|
26
26
|
// With x = 15000 (1.5): result = mulfix10k(20000, 15000) + 10000
|
|
27
27
|
// = 30000 + 10000 = 40000 (4.0)
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
/// Evaluate an RPN (Reverse Polish Notation) token stream with a single variable substitution.
|
|
30
|
+
///
|
|
31
|
+
/// Token encoding (all values × 10000):
|
|
32
|
+
/// - Positive integer: literal value pushed onto the stack
|
|
33
|
+
/// - `-10000`: variable `x` (replaced by the `x` argument)
|
|
34
|
+
/// - `-1` ADD, `-2` SUB, `-3` MUL (fixed-point), `-4` DIV (fixed-point)
|
|
35
|
+
/// - `-5` SIN (degrees × 10000 → result × 10000), `-6` COS, `-7` SQRT, `-8` ABS
|
|
36
|
+
///
|
|
37
|
+
/// Internal stack depth: 16 elements. Behaviour is undefined for malformed token streams.
|
|
38
|
+
/// @since 1.2.0
|
|
39
|
+
/// @param tokens RPN token array of length n
|
|
40
|
+
/// @param n Number of tokens
|
|
41
|
+
/// @param x Variable value × 10000 substituted for token `-10000`
|
|
42
|
+
/// @returns Top-of-stack value × 10000 after evaluating all tokens
|
|
43
|
+
/// @example
|
|
44
|
+
/// // 2*x + 1 → RPN: [20000, -10000, -3, 10000, -1]
|
|
45
|
+
/// let prog: int[] = [20000, -10000, -3, 10000, -1];
|
|
46
|
+
/// expr_eval(prog, 5, 15000); // 40000 (2×1.5 + 1 = 4.0)
|
|
32
47
|
fn expr_eval(tokens: int[], n: int, x: int): int {
|
|
33
48
|
let stack: int[] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
|
34
49
|
let sp: int = 0; // stack pointer: number of items on stack
|