hbengine 0.2.3
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/README.md +20 -0
- package/engine-cli/connect.mjs +73 -0
- package/engine-cli/hbengine.mjs +565 -0
- package/engine-cli/package.json +1 -0
- package/engine-cli/templates.mjs +14 -0
- package/engine-conformance/analyse-worker.mjs +12 -0
- package/engine-conformance/analyse.mjs +4458 -0
- package/engine-conformance/bundle.mjs +208 -0
- package/engine-conformance/clock.mjs +294 -0
- package/engine-conformance/csp.go +56 -0
- package/engine-conformance/csp.json +6 -0
- package/engine-conformance/csp.mjs +20 -0
- package/engine-conformance/gzip-sizes.mjs +9 -0
- package/engine-conformance/package.json +1 -0
- package/engine-conformance/picture.mjs +55 -0
- package/engine-conformance/report.go +349 -0
- package/engine-conformance/run.mjs +1217 -0
- package/engine-conformance/scan.mjs +476 -0
- package/engine-conformance/testdata/clock-overlay/bundle/assets.json +1 -0
- package/engine-conformance/testdata/clock-overlay/bundle/game.css +17 -0
- package/engine-conformance/testdata/clock-overlay/bundle/game.js +83 -0
- package/engine-conformance/testdata/clock-overlay/bundle/hbtest.json +4 -0
- package/engine-conformance/testdata/clock-overlay/bundle/index.html +34 -0
- package/engine-conformance/testdata/clock-probe/bundle/assets.json +1 -0
- package/engine-conformance/testdata/clock-probe/bundle/game.css +17 -0
- package/engine-conformance/testdata/clock-probe/bundle/game.js +65 -0
- package/engine-conformance/testdata/clock-probe/bundle/hbtest.json +4 -0
- package/engine-conformance/testdata/clock-probe/bundle/index.html +35 -0
- package/engine-conformance/testdata/clock-probe/bundle/probe-worker.js +46 -0
- package/engine-conformance/testdata/clock-probe/bundle/probe.js +210 -0
- package/engine-conformance/testdata/clock-probe/math/dice.tsv +100 -0
- package/engine-conformance/testdata/clock-probe/math/manifest.json +2925 -0
- package/engine-conformance/testdata/clock-worker/bundle/assets.json +1 -0
- package/engine-conformance/testdata/clock-worker/bundle/clock-worker.js +14 -0
- package/engine-conformance/testdata/clock-worker/bundle/game.css +17 -0
- package/engine-conformance/testdata/clock-worker/bundle/game.js +61 -0
- package/engine-conformance/testdata/clock-worker/bundle/hbtest.json +4 -0
- package/engine-conformance/testdata/clock-worker/bundle/index.html +35 -0
- package/engine-conformance/testdata/clock-worker/math/dice.tsv +100 -0
- package/engine-conformance/testdata/clock-worker/math/manifest.json +2925 -0
- package/engine-conformance/travel.mjs +1209 -0
- package/engine-conformance/vendor/acorn/LICENSE +21 -0
- package/engine-conformance/vendor/acorn/acorn.mjs +6266 -0
- package/engine-conformance/wasm-releases.json +168 -0
- package/engine-examples/README.md +23 -0
- package/engine-examples/coin/AGENTS.md +3 -0
- package/engine-examples/coin/README.md +7 -0
- package/engine-examples/coin/bundle/assets.json +1 -0
- package/engine-examples/coin/bundle/game.css +5 -0
- package/engine-examples/coin/bundle/game.js +19 -0
- package/engine-examples/coin/bundle/hbtest.json +5 -0
- package/engine-examples/coin/bundle/index.html +16 -0
- package/engine-examples/coin/math/coin.tsv +2 -0
- package/engine-examples/coin/math/manifest.json +17 -0
- package/engine-examples/crash/AGENTS.md +3 -0
- package/engine-examples/crash/README.md +14 -0
- package/engine-examples/crash/bundle/assets.json +1 -0
- package/engine-examples/crash/bundle/game.css +8 -0
- package/engine-examples/crash/bundle/game.js +90 -0
- package/engine-examples/crash/bundle/hbtest.json +5 -0
- package/engine-examples/crash/bundle/index.html +20 -0
- package/engine-examples/crash/math/crash-01.tsv +2 -0
- package/engine-examples/crash/math/crash-02.tsv +2 -0
- package/engine-examples/crash/math/crash-03.tsv +2 -0
- package/engine-examples/crash/math/crash-04.tsv +2 -0
- package/engine-examples/crash/math/crash-05.tsv +2 -0
- package/engine-examples/crash/math/crash-06.tsv +2 -0
- package/engine-examples/crash/math/crash-07.tsv +2 -0
- package/engine-examples/crash/math/crash-08.tsv +2 -0
- package/engine-examples/crash/math/crash-09.tsv +2 -0
- package/engine-examples/crash/math/crash-10.tsv +2 -0
- package/engine-examples/crash/math/crash-11.tsv +2 -0
- package/engine-examples/crash/math/crash-12.tsv +2 -0
- package/engine-examples/crash/math/crash-13.tsv +2 -0
- package/engine-examples/crash/math/crash-14.tsv +2 -0
- package/engine-examples/crash/math/crash-15.tsv +2 -0
- package/engine-examples/crash/math/crash-16.tsv +2 -0
- package/engine-examples/crash/math/crash-17.tsv +2 -0
- package/engine-examples/crash/math/crash-18.tsv +2 -0
- package/engine-examples/crash/math/crash-19.tsv +2 -0
- package/engine-examples/crash/math/crash-20.tsv +2 -0
- package/engine-examples/crash/math/crash-21.tsv +2 -0
- package/engine-examples/crash/math/crash-22.tsv +2 -0
- package/engine-examples/crash/math/crash-23.tsv +2 -0
- package/engine-examples/crash/math/crash-24.tsv +2 -0
- package/engine-examples/crash/math/crash-25.tsv +2 -0
- package/engine-examples/crash/math/crash-26.tsv +2 -0
- package/engine-examples/crash/math/crash-27.tsv +2 -0
- package/engine-examples/crash/math/crash-28.tsv +2 -0
- package/engine-examples/crash/math/crash-29.tsv +2 -0
- package/engine-examples/crash/math/crash-30.tsv +2 -0
- package/engine-examples/crash/math/crash-31.tsv +2 -0
- package/engine-examples/crash/math/crash-32.tsv +2 -0
- package/engine-examples/crash/math/crash-33.tsv +2 -0
- package/engine-examples/crash/math/crash-34.tsv +2 -0
- package/engine-examples/crash/math/crash-35.tsv +2 -0
- package/engine-examples/crash/math/crash-36.tsv +2 -0
- package/engine-examples/crash/math/crash-37.tsv +2 -0
- package/engine-examples/crash/math/crash-38.tsv +2 -0
- package/engine-examples/crash/math/crash-39.tsv +2 -0
- package/engine-examples/crash/math/crash-40.tsv +2 -0
- package/engine-examples/crash/math/crash-41.tsv +2 -0
- package/engine-examples/crash/math/crash-42.tsv +2 -0
- package/engine-examples/crash/math/crash-43.tsv +2 -0
- package/engine-examples/crash/math/crash-44.tsv +2 -0
- package/engine-examples/crash/math/crash-45.tsv +2 -0
- package/engine-examples/crash/math/crash-46.tsv +2 -0
- package/engine-examples/crash/math/crash-47.tsv +2 -0
- package/engine-examples/crash/math/crash-48.tsv +2 -0
- package/engine-examples/crash/math/crash-49.tsv +2 -0
- package/engine-examples/crash/math/crash-50.tsv +2 -0
- package/engine-examples/crash/math/crash-51.tsv +2 -0
- package/engine-examples/crash/math/crash-52.tsv +2 -0
- package/engine-examples/crash/math/crash-53.tsv +2 -0
- package/engine-examples/crash/math/crash-54.tsv +2 -0
- package/engine-examples/crash/math/crash-55.tsv +2 -0
- package/engine-examples/crash/math/crash-56.tsv +2 -0
- package/engine-examples/crash/math/crash-57.tsv +2 -0
- package/engine-examples/crash/math/crash-58.tsv +2 -0
- package/engine-examples/crash/math/crash-59.tsv +2 -0
- package/engine-examples/crash/math/crash-60.tsv +2 -0
- package/engine-examples/crash/math/crash-61.tsv +2 -0
- package/engine-examples/crash/math/crash-62.tsv +2 -0
- package/engine-examples/crash/math/crash-63.tsv +2 -0
- package/engine-examples/crash/math/crash-64.tsv +2 -0
- package/engine-examples/crash/math/gen.mjs +31 -0
- package/engine-examples/crash/math/manifest.json +1 -0
- package/engine-examples/dice/AGENTS.md +3 -0
- package/engine-examples/dice/README.md +25 -0
- package/engine-examples/dice/bundle/assets.json +1 -0
- package/engine-examples/dice/bundle/game.css +17 -0
- package/engine-examples/dice/bundle/game.js +61 -0
- package/engine-examples/dice/bundle/hbtest.json +4 -0
- package/engine-examples/dice/bundle/index.html +34 -0
- package/engine-examples/dice/math/dice.tsv +100 -0
- package/engine-examples/dice/math/manifest.json +2925 -0
- package/engine-examples/keno/AGENTS.md +3 -0
- package/engine-examples/keno/README.md +11 -0
- package/engine-examples/keno/bundle/assets.json +1 -0
- package/engine-examples/keno/bundle/game.css +14 -0
- package/engine-examples/keno/bundle/game.js +86 -0
- package/engine-examples/keno/bundle/hbtest.json +4 -0
- package/engine-examples/keno/bundle/i18n.json +342 -0
- package/engine-examples/keno/bundle/index.html +20 -0
- package/engine-examples/keno/bundle/model.json +1 -0
- package/engine-examples/keno/math/gen.mjs +35 -0
- package/engine-examples/keno/math/keno-picks-1.tsv +2 -0
- package/engine-examples/keno/math/keno-picks-10.tsv +11 -0
- package/engine-examples/keno/math/keno-picks-2.tsv +3 -0
- package/engine-examples/keno/math/keno-picks-3.tsv +4 -0
- package/engine-examples/keno/math/keno-picks-4.tsv +5 -0
- package/engine-examples/keno/math/keno-picks-5.tsv +6 -0
- package/engine-examples/keno/math/keno-picks-6.tsv +7 -0
- package/engine-examples/keno/math/keno-picks-7.tsv +8 -0
- package/engine-examples/keno/math/keno-picks-8.tsv +9 -0
- package/engine-examples/keno/math/keno-picks-9.tsv +10 -0
- package/engine-examples/keno/math/manifest.json +1 -0
- package/engine-examples/keno/math-kit/pack.mjs +165 -0
- package/engine-examples/keno/math-kit/package.json +8 -0
- package/engine-examples/keno/math-kit/slot.mjs +94 -0
- package/engine-examples/keno/math-kit/tumble.mjs +94 -0
- package/engine-examples/lines/AGENTS.md +3 -0
- package/engine-examples/lines/README.md +20 -0
- package/engine-examples/lines/bundle/assets.json +1 -0
- package/engine-examples/lines/bundle/game.css +16 -0
- package/engine-examples/lines/bundle/game.js +125 -0
- package/engine-examples/lines/bundle/hbtest.json +4 -0
- package/engine-examples/lines/bundle/i18n.json +242 -0
- package/engine-examples/lines/bundle/index.html +23 -0
- package/engine-examples/lines/bundle/model.json +1 -0
- package/engine-examples/lines/math/gen.mjs +54 -0
- package/engine-examples/lines/math-kit/pack.mjs +165 -0
- package/engine-examples/lines/math-kit/package.json +8 -0
- package/engine-examples/lines/math-kit/slot.mjs +94 -0
- package/engine-examples/lines/math-kit/tumble.mjs +94 -0
- package/engine-examples/mines/AGENTS.md +3 -0
- package/engine-examples/mines/README.md +13 -0
- package/engine-examples/mines/bundle/assets.json +1 -0
- package/engine-examples/mines/bundle/game.css +12 -0
- package/engine-examples/mines/bundle/game.js +58 -0
- package/engine-examples/mines/bundle/hbtest.json +8 -0
- package/engine-examples/mines/bundle/index.html +16 -0
- package/engine-examples/mines/math/gen.mjs +40 -0
- package/engine-examples/mines/math/manifest.json +1 -0
- package/engine-examples/mines/math/mines-1-1.tsv +2 -0
- package/engine-examples/mines/math/mines-1-2.tsv +2 -0
- package/engine-examples/mines/math/mines-1-22.tsv +2 -0
- package/engine-examples/mines/math/mines-1-23.tsv +2 -0
- package/engine-examples/mines/math/mines-1-24.tsv +2 -0
- package/engine-examples/mines/math/mines-1-3.tsv +2 -0
- package/engine-examples/mines/math/mines-10-1.tsv +2 -0
- package/engine-examples/mines/math/mines-10-10.tsv +2 -0
- package/engine-examples/mines/math/mines-10-11.tsv +2 -0
- package/engine-examples/mines/math/mines-10-12.tsv +2 -0
- package/engine-examples/mines/math/mines-10-13.tsv +2 -0
- package/engine-examples/mines/math/mines-10-14.tsv +2 -0
- package/engine-examples/mines/math/mines-10-15.tsv +2 -0
- package/engine-examples/mines/math/mines-10-2.tsv +2 -0
- package/engine-examples/mines/math/mines-10-3.tsv +2 -0
- package/engine-examples/mines/math/mines-10-4.tsv +2 -0
- package/engine-examples/mines/math/mines-10-5.tsv +2 -0
- package/engine-examples/mines/math/mines-10-6.tsv +2 -0
- package/engine-examples/mines/math/mines-10-7.tsv +2 -0
- package/engine-examples/mines/math/mines-10-8.tsv +2 -0
- package/engine-examples/mines/math/mines-10-9.tsv +2 -0
- package/engine-examples/mines/math/mines-11-1.tsv +2 -0
- package/engine-examples/mines/math/mines-11-10.tsv +2 -0
- package/engine-examples/mines/math/mines-11-11.tsv +2 -0
- package/engine-examples/mines/math/mines-11-12.tsv +2 -0
- package/engine-examples/mines/math/mines-11-13.tsv +2 -0
- package/engine-examples/mines/math/mines-11-14.tsv +2 -0
- package/engine-examples/mines/math/mines-11-2.tsv +2 -0
- package/engine-examples/mines/math/mines-11-3.tsv +2 -0
- package/engine-examples/mines/math/mines-11-4.tsv +2 -0
- package/engine-examples/mines/math/mines-11-5.tsv +2 -0
- package/engine-examples/mines/math/mines-11-6.tsv +2 -0
- package/engine-examples/mines/math/mines-11-7.tsv +2 -0
- package/engine-examples/mines/math/mines-11-8.tsv +2 -0
- package/engine-examples/mines/math/mines-11-9.tsv +2 -0
- package/engine-examples/mines/math/mines-12-1.tsv +2 -0
- package/engine-examples/mines/math/mines-12-10.tsv +2 -0
- package/engine-examples/mines/math/mines-12-11.tsv +2 -0
- package/engine-examples/mines/math/mines-12-12.tsv +2 -0
- package/engine-examples/mines/math/mines-12-13.tsv +2 -0
- package/engine-examples/mines/math/mines-12-2.tsv +2 -0
- package/engine-examples/mines/math/mines-12-3.tsv +2 -0
- package/engine-examples/mines/math/mines-12-4.tsv +2 -0
- package/engine-examples/mines/math/mines-12-5.tsv +2 -0
- package/engine-examples/mines/math/mines-12-6.tsv +2 -0
- package/engine-examples/mines/math/mines-12-7.tsv +2 -0
- package/engine-examples/mines/math/mines-12-8.tsv +2 -0
- package/engine-examples/mines/math/mines-12-9.tsv +2 -0
- package/engine-examples/mines/math/mines-13-1.tsv +2 -0
- package/engine-examples/mines/math/mines-13-10.tsv +2 -0
- package/engine-examples/mines/math/mines-13-11.tsv +2 -0
- package/engine-examples/mines/math/mines-13-12.tsv +2 -0
- package/engine-examples/mines/math/mines-13-2.tsv +2 -0
- package/engine-examples/mines/math/mines-13-3.tsv +2 -0
- package/engine-examples/mines/math/mines-13-4.tsv +2 -0
- package/engine-examples/mines/math/mines-13-5.tsv +2 -0
- package/engine-examples/mines/math/mines-13-6.tsv +2 -0
- package/engine-examples/mines/math/mines-13-7.tsv +2 -0
- package/engine-examples/mines/math/mines-13-8.tsv +2 -0
- package/engine-examples/mines/math/mines-13-9.tsv +2 -0
- package/engine-examples/mines/math/mines-14-1.tsv +2 -0
- package/engine-examples/mines/math/mines-14-10.tsv +2 -0
- package/engine-examples/mines/math/mines-14-11.tsv +2 -0
- package/engine-examples/mines/math/mines-14-2.tsv +2 -0
- package/engine-examples/mines/math/mines-14-3.tsv +2 -0
- package/engine-examples/mines/math/mines-14-4.tsv +2 -0
- package/engine-examples/mines/math/mines-14-5.tsv +2 -0
- package/engine-examples/mines/math/mines-14-6.tsv +2 -0
- package/engine-examples/mines/math/mines-14-7.tsv +2 -0
- package/engine-examples/mines/math/mines-14-8.tsv +2 -0
- package/engine-examples/mines/math/mines-14-9.tsv +2 -0
- package/engine-examples/mines/math/mines-15-1.tsv +2 -0
- package/engine-examples/mines/math/mines-15-10.tsv +2 -0
- package/engine-examples/mines/math/mines-15-2.tsv +2 -0
- package/engine-examples/mines/math/mines-15-3.tsv +2 -0
- package/engine-examples/mines/math/mines-15-4.tsv +2 -0
- package/engine-examples/mines/math/mines-15-5.tsv +2 -0
- package/engine-examples/mines/math/mines-15-6.tsv +2 -0
- package/engine-examples/mines/math/mines-15-7.tsv +2 -0
- package/engine-examples/mines/math/mines-15-8.tsv +2 -0
- package/engine-examples/mines/math/mines-15-9.tsv +2 -0
- package/engine-examples/mines/math/mines-16-1.tsv +2 -0
- package/engine-examples/mines/math/mines-16-2.tsv +2 -0
- package/engine-examples/mines/math/mines-16-3.tsv +2 -0
- package/engine-examples/mines/math/mines-16-4.tsv +2 -0
- package/engine-examples/mines/math/mines-16-5.tsv +2 -0
- package/engine-examples/mines/math/mines-16-6.tsv +2 -0
- package/engine-examples/mines/math/mines-16-7.tsv +2 -0
- package/engine-examples/mines/math/mines-16-8.tsv +2 -0
- package/engine-examples/mines/math/mines-16-9.tsv +2 -0
- package/engine-examples/mines/math/mines-17-1.tsv +2 -0
- package/engine-examples/mines/math/mines-17-2.tsv +2 -0
- package/engine-examples/mines/math/mines-17-3.tsv +2 -0
- package/engine-examples/mines/math/mines-17-4.tsv +2 -0
- package/engine-examples/mines/math/mines-17-5.tsv +2 -0
- package/engine-examples/mines/math/mines-17-6.tsv +2 -0
- package/engine-examples/mines/math/mines-17-7.tsv +2 -0
- package/engine-examples/mines/math/mines-17-8.tsv +2 -0
- package/engine-examples/mines/math/mines-18-1.tsv +2 -0
- package/engine-examples/mines/math/mines-18-2.tsv +2 -0
- package/engine-examples/mines/math/mines-18-3.tsv +2 -0
- package/engine-examples/mines/math/mines-18-4.tsv +2 -0
- package/engine-examples/mines/math/mines-18-5.tsv +2 -0
- package/engine-examples/mines/math/mines-18-6.tsv +2 -0
- package/engine-examples/mines/math/mines-18-7.tsv +2 -0
- package/engine-examples/mines/math/mines-19-1.tsv +2 -0
- package/engine-examples/mines/math/mines-19-2.tsv +2 -0
- package/engine-examples/mines/math/mines-19-3.tsv +2 -0
- package/engine-examples/mines/math/mines-19-4.tsv +2 -0
- package/engine-examples/mines/math/mines-19-5.tsv +2 -0
- package/engine-examples/mines/math/mines-19-6.tsv +2 -0
- package/engine-examples/mines/math/mines-2-1.tsv +2 -0
- package/engine-examples/mines/math/mines-2-19.tsv +2 -0
- package/engine-examples/mines/math/mines-2-2.tsv +2 -0
- package/engine-examples/mines/math/mines-2-20.tsv +2 -0
- package/engine-examples/mines/math/mines-2-21.tsv +2 -0
- package/engine-examples/mines/math/mines-2-22.tsv +2 -0
- package/engine-examples/mines/math/mines-2-23.tsv +2 -0
- package/engine-examples/mines/math/mines-2-3.tsv +2 -0
- package/engine-examples/mines/math/mines-2-4.tsv +2 -0
- package/engine-examples/mines/math/mines-2-5.tsv +2 -0
- package/engine-examples/mines/math/mines-20-1.tsv +2 -0
- package/engine-examples/mines/math/mines-20-2.tsv +2 -0
- package/engine-examples/mines/math/mines-20-3.tsv +2 -0
- package/engine-examples/mines/math/mines-20-4.tsv +2 -0
- package/engine-examples/mines/math/mines-20-5.tsv +2 -0
- package/engine-examples/mines/math/mines-21-1.tsv +2 -0
- package/engine-examples/mines/math/mines-21-2.tsv +2 -0
- package/engine-examples/mines/math/mines-21-3.tsv +2 -0
- package/engine-examples/mines/math/mines-21-4.tsv +2 -0
- package/engine-examples/mines/math/mines-22-1.tsv +2 -0
- package/engine-examples/mines/math/mines-22-2.tsv +2 -0
- package/engine-examples/mines/math/mines-22-3.tsv +2 -0
- package/engine-examples/mines/math/mines-23-1.tsv +2 -0
- package/engine-examples/mines/math/mines-23-2.tsv +2 -0
- package/engine-examples/mines/math/mines-24-1.tsv +2 -0
- package/engine-examples/mines/math/mines-3-1.tsv +2 -0
- package/engine-examples/mines/math/mines-3-17.tsv +2 -0
- package/engine-examples/mines/math/mines-3-18.tsv +2 -0
- package/engine-examples/mines/math/mines-3-19.tsv +2 -0
- package/engine-examples/mines/math/mines-3-2.tsv +2 -0
- package/engine-examples/mines/math/mines-3-20.tsv +2 -0
- package/engine-examples/mines/math/mines-3-21.tsv +2 -0
- package/engine-examples/mines/math/mines-3-22.tsv +2 -0
- package/engine-examples/mines/math/mines-3-3.tsv +2 -0
- package/engine-examples/mines/math/mines-3-4.tsv +2 -0
- package/engine-examples/mines/math/mines-3-5.tsv +2 -0
- package/engine-examples/mines/math/mines-3-6.tsv +2 -0
- package/engine-examples/mines/math/mines-4-1.tsv +2 -0
- package/engine-examples/mines/math/mines-4-13.tsv +2 -0
- package/engine-examples/mines/math/mines-4-14.tsv +2 -0
- package/engine-examples/mines/math/mines-4-15.tsv +2 -0
- package/engine-examples/mines/math/mines-4-16.tsv +2 -0
- package/engine-examples/mines/math/mines-4-17.tsv +2 -0
- package/engine-examples/mines/math/mines-4-18.tsv +2 -0
- package/engine-examples/mines/math/mines-4-19.tsv +2 -0
- package/engine-examples/mines/math/mines-4-2.tsv +2 -0
- package/engine-examples/mines/math/mines-4-20.tsv +2 -0
- package/engine-examples/mines/math/mines-4-21.tsv +2 -0
- package/engine-examples/mines/math/mines-4-3.tsv +2 -0
- package/engine-examples/mines/math/mines-4-4.tsv +2 -0
- package/engine-examples/mines/math/mines-4-5.tsv +2 -0
- package/engine-examples/mines/math/mines-4-6.tsv +2 -0
- package/engine-examples/mines/math/mines-4-7.tsv +2 -0
- package/engine-examples/mines/math/mines-4-8.tsv +2 -0
- package/engine-examples/mines/math/mines-4-9.tsv +2 -0
- package/engine-examples/mines/math/mines-5-1.tsv +2 -0
- package/engine-examples/mines/math/mines-5-10.tsv +2 -0
- package/engine-examples/mines/math/mines-5-11.tsv +2 -0
- package/engine-examples/mines/math/mines-5-12.tsv +2 -0
- package/engine-examples/mines/math/mines-5-13.tsv +2 -0
- package/engine-examples/mines/math/mines-5-14.tsv +2 -0
- package/engine-examples/mines/math/mines-5-15.tsv +2 -0
- package/engine-examples/mines/math/mines-5-16.tsv +2 -0
- package/engine-examples/mines/math/mines-5-17.tsv +2 -0
- package/engine-examples/mines/math/mines-5-18.tsv +2 -0
- package/engine-examples/mines/math/mines-5-19.tsv +2 -0
- package/engine-examples/mines/math/mines-5-2.tsv +2 -0
- package/engine-examples/mines/math/mines-5-20.tsv +2 -0
- package/engine-examples/mines/math/mines-5-3.tsv +2 -0
- package/engine-examples/mines/math/mines-5-4.tsv +2 -0
- package/engine-examples/mines/math/mines-5-5.tsv +2 -0
- package/engine-examples/mines/math/mines-5-6.tsv +2 -0
- package/engine-examples/mines/math/mines-5-7.tsv +2 -0
- package/engine-examples/mines/math/mines-5-8.tsv +2 -0
- package/engine-examples/mines/math/mines-5-9.tsv +2 -0
- package/engine-examples/mines/math/mines-6-1.tsv +2 -0
- package/engine-examples/mines/math/mines-6-10.tsv +2 -0
- package/engine-examples/mines/math/mines-6-11.tsv +2 -0
- package/engine-examples/mines/math/mines-6-12.tsv +2 -0
- package/engine-examples/mines/math/mines-6-13.tsv +2 -0
- package/engine-examples/mines/math/mines-6-14.tsv +2 -0
- package/engine-examples/mines/math/mines-6-15.tsv +2 -0
- package/engine-examples/mines/math/mines-6-16.tsv +2 -0
- package/engine-examples/mines/math/mines-6-17.tsv +2 -0
- package/engine-examples/mines/math/mines-6-18.tsv +2 -0
- package/engine-examples/mines/math/mines-6-19.tsv +2 -0
- package/engine-examples/mines/math/mines-6-2.tsv +2 -0
- package/engine-examples/mines/math/mines-6-3.tsv +2 -0
- package/engine-examples/mines/math/mines-6-4.tsv +2 -0
- package/engine-examples/mines/math/mines-6-5.tsv +2 -0
- package/engine-examples/mines/math/mines-6-6.tsv +2 -0
- package/engine-examples/mines/math/mines-6-7.tsv +2 -0
- package/engine-examples/mines/math/mines-6-8.tsv +2 -0
- package/engine-examples/mines/math/mines-6-9.tsv +2 -0
- package/engine-examples/mines/math/mines-7-1.tsv +2 -0
- package/engine-examples/mines/math/mines-7-10.tsv +2 -0
- package/engine-examples/mines/math/mines-7-11.tsv +2 -0
- package/engine-examples/mines/math/mines-7-12.tsv +2 -0
- package/engine-examples/mines/math/mines-7-13.tsv +2 -0
- package/engine-examples/mines/math/mines-7-14.tsv +2 -0
- package/engine-examples/mines/math/mines-7-15.tsv +2 -0
- package/engine-examples/mines/math/mines-7-16.tsv +2 -0
- package/engine-examples/mines/math/mines-7-17.tsv +2 -0
- package/engine-examples/mines/math/mines-7-18.tsv +2 -0
- package/engine-examples/mines/math/mines-7-2.tsv +2 -0
- package/engine-examples/mines/math/mines-7-3.tsv +2 -0
- package/engine-examples/mines/math/mines-7-4.tsv +2 -0
- package/engine-examples/mines/math/mines-7-5.tsv +2 -0
- package/engine-examples/mines/math/mines-7-6.tsv +2 -0
- package/engine-examples/mines/math/mines-7-7.tsv +2 -0
- package/engine-examples/mines/math/mines-7-8.tsv +2 -0
- package/engine-examples/mines/math/mines-7-9.tsv +2 -0
- package/engine-examples/mines/math/mines-8-1.tsv +2 -0
- package/engine-examples/mines/math/mines-8-10.tsv +2 -0
- package/engine-examples/mines/math/mines-8-11.tsv +2 -0
- package/engine-examples/mines/math/mines-8-12.tsv +2 -0
- package/engine-examples/mines/math/mines-8-13.tsv +2 -0
- package/engine-examples/mines/math/mines-8-14.tsv +2 -0
- package/engine-examples/mines/math/mines-8-15.tsv +2 -0
- package/engine-examples/mines/math/mines-8-16.tsv +2 -0
- package/engine-examples/mines/math/mines-8-17.tsv +2 -0
- package/engine-examples/mines/math/mines-8-2.tsv +2 -0
- package/engine-examples/mines/math/mines-8-3.tsv +2 -0
- package/engine-examples/mines/math/mines-8-4.tsv +2 -0
- package/engine-examples/mines/math/mines-8-5.tsv +2 -0
- package/engine-examples/mines/math/mines-8-6.tsv +2 -0
- package/engine-examples/mines/math/mines-8-7.tsv +2 -0
- package/engine-examples/mines/math/mines-8-8.tsv +2 -0
- package/engine-examples/mines/math/mines-8-9.tsv +2 -0
- package/engine-examples/mines/math/mines-9-1.tsv +2 -0
- package/engine-examples/mines/math/mines-9-10.tsv +2 -0
- package/engine-examples/mines/math/mines-9-11.tsv +2 -0
- package/engine-examples/mines/math/mines-9-12.tsv +2 -0
- package/engine-examples/mines/math/mines-9-13.tsv +2 -0
- package/engine-examples/mines/math/mines-9-14.tsv +2 -0
- package/engine-examples/mines/math/mines-9-15.tsv +2 -0
- package/engine-examples/mines/math/mines-9-16.tsv +2 -0
- package/engine-examples/mines/math/mines-9-2.tsv +2 -0
- package/engine-examples/mines/math/mines-9-3.tsv +2 -0
- package/engine-examples/mines/math/mines-9-4.tsv +2 -0
- package/engine-examples/mines/math/mines-9-5.tsv +2 -0
- package/engine-examples/mines/math/mines-9-6.tsv +2 -0
- package/engine-examples/mines/math/mines-9-7.tsv +2 -0
- package/engine-examples/mines/math/mines-9-8.tsv +2 -0
- package/engine-examples/mines/math/mines-9-9.tsv +2 -0
- package/engine-examples/plinko/AGENTS.md +3 -0
- package/engine-examples/plinko/README.md +9 -0
- package/engine-examples/plinko/bundle/assets.json +1 -0
- package/engine-examples/plinko/bundle/game.css +5 -0
- package/engine-examples/plinko/bundle/game.js +92 -0
- package/engine-examples/plinko/bundle/hbtest.json +4 -0
- package/engine-examples/plinko/bundle/index.html +16 -0
- package/engine-examples/plinko/bundle/model.json +1 -0
- package/engine-examples/plinko/math/gen.mjs +40 -0
- package/engine-examples/plinko/math/manifest.json +1 -0
- package/engine-examples/plinko/math/plinko-12-high.tsv +13 -0
- package/engine-examples/plinko/math/plinko-12-low.tsv +13 -0
- package/engine-examples/plinko/math/plinko-12-medium.tsv +13 -0
- package/engine-examples/plinko/math/plinko-16-high.tsv +17 -0
- package/engine-examples/plinko/math/plinko-16-low.tsv +17 -0
- package/engine-examples/plinko/math/plinko-16-medium.tsv +17 -0
- package/engine-examples/plinko/math/plinko-8-high.tsv +9 -0
- package/engine-examples/plinko/math/plinko-8-low.tsv +9 -0
- package/engine-examples/plinko/math/plinko-8-medium.tsv +9 -0
- package/engine-examples/plinko/math-kit/pack.mjs +165 -0
- package/engine-examples/plinko/math-kit/package.json +8 -0
- package/engine-examples/plinko/math-kit/slot.mjs +94 -0
- package/engine-examples/plinko/math-kit/tumble.mjs +94 -0
- package/engine-examples/slot/AGENTS.md +3 -0
- package/engine-examples/slot/README.md +26 -0
- package/engine-examples/slot/bundle/assets.json +1 -0
- package/engine-examples/slot/bundle/game.css +19 -0
- package/engine-examples/slot/bundle/game.js +42 -0
- package/engine-examples/slot/bundle/hbtest.json +4 -0
- package/engine-examples/slot/bundle/index.html +23 -0
- package/engine-examples/slot/math/gen.mjs +79 -0
- package/engine-examples/slot/math/manifest.json +1 -0
- package/engine-examples/slot/math/slot.tsv +110592 -0
- package/engine-examples/tower/AGENTS.md +3 -0
- package/engine-examples/tower/README.md +21 -0
- package/engine-examples/tower/bundle/assets.json +1 -0
- package/engine-examples/tower/bundle/game.css +8 -0
- package/engine-examples/tower/bundle/game.js +37 -0
- package/engine-examples/tower/bundle/hbtest.json +5 -0
- package/engine-examples/tower/bundle/index.html +16 -0
- package/engine-examples/tower/math/floor.tsv +4 -0
- package/engine-examples/tower/math/manifest.json +61 -0
- package/engine-examples/tumble/AGENTS.md +3 -0
- package/engine-examples/tumble/README.md +18 -0
- package/engine-examples/tumble/bundle/assets.json +1 -0
- package/engine-examples/tumble/bundle/game.css +13 -0
- package/engine-examples/tumble/bundle/game.js +119 -0
- package/engine-examples/tumble/bundle/hbtest.json +4 -0
- package/engine-examples/tumble/bundle/i18n.json +122 -0
- package/engine-examples/tumble/bundle/index.html +20 -0
- package/engine-examples/tumble/bundle/model.json +1 -0
- package/engine-examples/tumble/math/gen.mjs +38 -0
- package/engine-examples/tumble/math-kit/pack.mjs +165 -0
- package/engine-examples/tumble/math-kit/package.json +8 -0
- package/engine-examples/tumble/math-kit/slot.mjs +94 -0
- package/engine-examples/tumble/math-kit/tumble.mjs +94 -0
- package/engine-examples/wheel/README.md +14 -0
- package/engine-examples/wheel/bundle/assets.json +1 -0
- package/engine-examples/wheel/bundle/game.css +7 -0
- package/engine-examples/wheel/bundle/game.js +51 -0
- package/engine-examples/wheel/bundle/hbtest.json +4 -0
- package/engine-examples/wheel/bundle/index.html +19 -0
- package/engine-examples/wheel/math/high.tsv +24 -0
- package/engine-examples/wheel/math/low.tsv +24 -0
- package/engine-examples/wheel/math/manifest.json +48 -0
- package/engine-examples/wheel/math/medium.tsv +24 -0
- package/engine-math/pack.mjs +165 -0
- package/engine-math/package.json +1 -0
- package/engine-math/slot.mjs +94 -0
- package/engine-math/tumble.mjs +94 -0
- package/engine-mcp/package.json +1 -0
- package/engine-mcp/server.mjs +151 -0
- package/engine-sdk/GUIDE.md +855 -0
- package/engine-sdk/assets.js +92 -0
- package/engine-sdk/autoplay.js +82 -0
- package/engine-sdk/bet-field.js +391 -0
- package/engine-sdk/kit/fiat-coins.js +51 -0
- package/engine-sdk/kit/numeric-input.js +116 -0
- package/engine-sdk/kit/wallet-format.js +423 -0
- package/engine-sdk/marks.js +22 -0
- package/engine-sdk/messages.js +289 -0
- package/engine-sdk/money.js +89 -0
- package/engine-sdk/package.json +1 -0
- package/engine-sdk/protocol.js +263 -0
- package/engine-sdk/sdk.d.ts +138 -0
- package/engine-sdk/sdk.js +330 -0
- package/engine-sdk/stake.js +68 -0
- package/engine-sdk/ui.d.ts +36 -0
- package/engine-sdk/ui.js +340 -0
- package/engine-shell/core/faults.js +127 -0
- package/engine-shell/core/rgs.js +193 -0
- package/engine-shell/core/router.js +917 -0
- package/engine-shell/host/boot.js +408 -0
- package/engine-shell/host/engine-v1.js +438 -0
- package/engine-shell/host/fair.js +285 -0
- package/engine-shell/host/fonts/SOURCE.json +11 -0
- package/engine-shell/host/fonts/figtree-400.woff2 +0 -0
- package/engine-shell/host/fonts/figtree-500.woff2 +0 -0
- package/engine-shell/host/fonts/figtree-600.woff2 +0 -0
- package/engine-shell/host/fonts/red-hat-display-700.woff2 +0 -0
- package/engine-shell/host/index.html +230 -0
- package/engine-shell/host/page.js +809 -0
- package/engine-shell/host/sandbox-panel.js +681 -0
- package/engine-shell/host/sandbox-scenarios.js +554 -0
- package/engine-shell/host/site-bridge.js +87 -0
- package/engine-shell/host/strings.js +916 -0
- package/engine-shell/package.json +1 -0
- package/engine-shell/verifiers/badcat/coin.tsv +2 -0
- package/engine-shell/verifiers/badcat/dice-2.tsv +11 -0
- package/engine-shell/verifiers/badcat/dice-5.tsv +26 -0
- package/engine-shell/verifiers/badcat/dice-9.tsv +46 -0
- package/engine-shell/verifiers/badcat/manifest.json +3344 -0
- package/engine-shell/verifiers/badcat/rps.tsv +3 -0
- package/engine-shell/verifiers/badcat/triple.tsv +66 -0
- package/engine-shell/verifiers/engine-verify.js +358 -0
- package/engine-shell/verifiers/package.json +5 -0
- package/engine-shell/verifiers/parity/manifest.json +27 -0
- package/engine-shell/verifiers/parity/wide.tsv +5 -0
- package/engine-shell/verifiers/parity-vectors.json +244 -0
- package/engine-shell/verifiers/vectors.json +100 -0
- package/package.json +10 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
{
|
|
2
|
+
"about": "WebAssembly modules the scan accepts, by the SHA-256 of their bytes: each is a file of a library release as published on npm (the package, the versions that ship these bytes and the file's name inside the tarball). A .wasm in a bundle whose hash is not here is refused (wasm-source), whatever it is named; the game's own code never runs WebAssembly, only the library's does (GUIDE §3.6). To add a release: download the tarball from the registry, hash the .wasm with `shasum -a 256`, add the row. Nothing here is derived from a file's name or banner.",
|
|
3
|
+
"modules": {
|
|
4
|
+
"4562092f86ee53d0ad1ba1f992c5c39fb227ceae0f1a64264e2eadb1c63456b3": {
|
|
5
|
+
"library": "Rapier",
|
|
6
|
+
"package": "@dimforge/rapier2d",
|
|
7
|
+
"versions": [
|
|
8
|
+
"0.17.3"
|
|
9
|
+
],
|
|
10
|
+
"file": "rapier_wasm2d_bg.wasm",
|
|
11
|
+
"bytes": 1287577
|
|
12
|
+
},
|
|
13
|
+
"8b729a302e7593852d0196226c769006085d610d7921d40cf9da7c62dd8a4a31": {
|
|
14
|
+
"library": "Rapier",
|
|
15
|
+
"package": "@dimforge/rapier2d",
|
|
16
|
+
"versions": [
|
|
17
|
+
"0.19.0"
|
|
18
|
+
],
|
|
19
|
+
"file": "rapier_wasm2d_bg.wasm",
|
|
20
|
+
"bytes": 1141065
|
|
21
|
+
},
|
|
22
|
+
"322b00649f412e75e047c79741b6b89e6323f6f81034d114a9e8ab872bae7435": {
|
|
23
|
+
"library": "Rapier",
|
|
24
|
+
"package": "@dimforge/rapier2d",
|
|
25
|
+
"versions": [
|
|
26
|
+
"0.21.0"
|
|
27
|
+
],
|
|
28
|
+
"file": "rapier_wasm2d_bg.wasm",
|
|
29
|
+
"bytes": 2404467
|
|
30
|
+
},
|
|
31
|
+
"0570d5c822275fbadbbfe4bda0c589b039c2f41259676dc53f6679085601155d": {
|
|
32
|
+
"library": "Rapier",
|
|
33
|
+
"package": "@dimforge/rapier2d-deterministic",
|
|
34
|
+
"versions": [
|
|
35
|
+
"0.21.0"
|
|
36
|
+
],
|
|
37
|
+
"file": "rapier_wasm2d_bg.wasm",
|
|
38
|
+
"bytes": 2436321
|
|
39
|
+
},
|
|
40
|
+
"ec7b8411136062877112dfadc856774626173e0dbb3276a6aefc0cafc560a737": {
|
|
41
|
+
"library": "Rapier",
|
|
42
|
+
"package": "@dimforge/rapier3d",
|
|
43
|
+
"versions": [
|
|
44
|
+
"0.17.3"
|
|
45
|
+
],
|
|
46
|
+
"file": "rapier_wasm3d_bg.wasm",
|
|
47
|
+
"bytes": 1698487
|
|
48
|
+
},
|
|
49
|
+
"c03f7c601607e1aadc9cfed791d96f571715afe4c1d113ed11530bd739f56bd5": {
|
|
50
|
+
"library": "Rapier",
|
|
51
|
+
"package": "@dimforge/rapier3d",
|
|
52
|
+
"versions": [
|
|
53
|
+
"0.19.0"
|
|
54
|
+
],
|
|
55
|
+
"file": "rapier_wasm3d_bg.wasm",
|
|
56
|
+
"bytes": 1555651
|
|
57
|
+
},
|
|
58
|
+
"17cfa80eebd8de0291b948496dbffba724b98b489687f8272ca236a7bbf1dd4b": {
|
|
59
|
+
"library": "Rapier",
|
|
60
|
+
"package": "@dimforge/rapier3d",
|
|
61
|
+
"versions": [
|
|
62
|
+
"0.21.0"
|
|
63
|
+
],
|
|
64
|
+
"file": "rapier_wasm3d_bg.wasm",
|
|
65
|
+
"bytes": 3082103
|
|
66
|
+
},
|
|
67
|
+
"4e9890fd2df60072f9db06a33e4030221249c1b3687b722b2388c21f09e97551": {
|
|
68
|
+
"library": "Rapier",
|
|
69
|
+
"package": "@dimforge/rapier3d-deterministic",
|
|
70
|
+
"versions": [
|
|
71
|
+
"0.21.0"
|
|
72
|
+
],
|
|
73
|
+
"file": "rapier_wasm3d_bg.wasm",
|
|
74
|
+
"bytes": 3105893
|
|
75
|
+
},
|
|
76
|
+
"a55cc68bd2bb14c1902176e9508cbcdb377aa1690c8dee95244f6efbabd5dc6d": {
|
|
77
|
+
"library": "Box2D",
|
|
78
|
+
"package": "box2d-wasm",
|
|
79
|
+
"versions": [
|
|
80
|
+
"6.0.4"
|
|
81
|
+
],
|
|
82
|
+
"file": "Box2D.simd.wasm",
|
|
83
|
+
"bytes": 161752
|
|
84
|
+
},
|
|
85
|
+
"860ae5ed50a6139ee6034b3a2463217b11efa24f8975ae58e13f8864e22b3b76": {
|
|
86
|
+
"library": "Box2D",
|
|
87
|
+
"package": "box2d-wasm",
|
|
88
|
+
"versions": [
|
|
89
|
+
"7.0.0"
|
|
90
|
+
],
|
|
91
|
+
"file": "Box2D.simd.wasm",
|
|
92
|
+
"bytes": 162582
|
|
93
|
+
},
|
|
94
|
+
"412e1465e23e6f38a58aa5621bc84b78d3d81dc8c2abc8cd6c589fb594f13c32": {
|
|
95
|
+
"library": "Box2D",
|
|
96
|
+
"package": "box2d-wasm",
|
|
97
|
+
"versions": [
|
|
98
|
+
"6.0.4"
|
|
99
|
+
],
|
|
100
|
+
"file": "Box2D.wasm",
|
|
101
|
+
"bytes": 160560
|
|
102
|
+
},
|
|
103
|
+
"c8f283be5ab39e79d4c0ec99fef55beb144c3abcba57fc36bfa3a206cb97de2d": {
|
|
104
|
+
"library": "Box2D",
|
|
105
|
+
"package": "box2d-wasm",
|
|
106
|
+
"versions": [
|
|
107
|
+
"7.0.0"
|
|
108
|
+
],
|
|
109
|
+
"file": "Box2D.wasm",
|
|
110
|
+
"bytes": 161347
|
|
111
|
+
},
|
|
112
|
+
"16be07b989963bddebfef66eab28a4387536eb37014d9df1531dab380bd96a93": {
|
|
113
|
+
"library": "three.js",
|
|
114
|
+
"package": "three",
|
|
115
|
+
"versions": [
|
|
116
|
+
"0.170.0",
|
|
117
|
+
"0.175.0",
|
|
118
|
+
"0.180.0"
|
|
119
|
+
],
|
|
120
|
+
"file": "ammo.wasm.wasm",
|
|
121
|
+
"bytes": 651386
|
|
122
|
+
},
|
|
123
|
+
"6cf17dc889352c42e9acf8897107978d127005fe3386c36a0e3845e27967630a": {
|
|
124
|
+
"library": "three.js",
|
|
125
|
+
"package": "three",
|
|
126
|
+
"versions": [
|
|
127
|
+
"0.170.0",
|
|
128
|
+
"0.175.0",
|
|
129
|
+
"0.180.0"
|
|
130
|
+
],
|
|
131
|
+
"file": "basis_transcoder.wasm",
|
|
132
|
+
"bytes": 527333
|
|
133
|
+
},
|
|
134
|
+
"c55a594e8ffd18426d36b27fea9618af3df5e173640a3e56d46f09d76f0574f2": {
|
|
135
|
+
"library": "three.js",
|
|
136
|
+
"package": "three",
|
|
137
|
+
"versions": [
|
|
138
|
+
"0.170.0",
|
|
139
|
+
"0.175.0",
|
|
140
|
+
"0.180.0"
|
|
141
|
+
],
|
|
142
|
+
"file": "draco_decoder.wasm",
|
|
143
|
+
"bytes": 285747
|
|
144
|
+
},
|
|
145
|
+
"a680d927bed9cb864ddbd63521868891af2bfbe755092761b4837487618df8ac": {
|
|
146
|
+
"library": "three.js",
|
|
147
|
+
"package": "three",
|
|
148
|
+
"versions": [
|
|
149
|
+
"0.170.0",
|
|
150
|
+
"0.175.0",
|
|
151
|
+
"0.180.0"
|
|
152
|
+
],
|
|
153
|
+
"file": "draco_decoder.wasm",
|
|
154
|
+
"bytes": 192420
|
|
155
|
+
},
|
|
156
|
+
"6b2db3e30f39828d53aedcd8d55def981c2ad438747cc2cacd6a2f2d0f77acfc": {
|
|
157
|
+
"library": "three.js",
|
|
158
|
+
"package": "three",
|
|
159
|
+
"versions": [
|
|
160
|
+
"0.170.0",
|
|
161
|
+
"0.175.0",
|
|
162
|
+
"0.180.0"
|
|
163
|
+
],
|
|
164
|
+
"file": "rhino3dm.wasm",
|
|
165
|
+
"bytes": 2545991
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# House Engine examples
|
|
2
|
+
|
|
3
|
+
Eleven games, eleven kinds of math, each a complete studio package (`math/`,
|
|
4
|
+
`bundle/`, `README.md`, `AGENTS.md`) that passes the scan and the
|
|
5
|
+
conformance run on desktop and phone. `npx hbengine init my-game
|
|
6
|
+
--template <name> --slug my-game` copies one as yours.
|
|
7
|
+
|
|
8
|
+
| | math | frontend | game code |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| **coin** | one table, two bets, 1.98× | engine panel | 19 lines |
|
|
11
|
+
| **dice** | one 100-row table, 194 bets (under/over 2–98) | engine panel; the zone picks the bet | 61 lines |
|
|
12
|
+
| **slot** | a 110,592-row reel table (3 × 48 stops), one line bet, 8 pay tiers | engine panel; reels spin to the server's stops | 40 lines |
|
|
13
|
+
| **lines** | a 130,444-row table of whole rounds (base + free spins) from the maths kit, fitted to exactly 96.00% | engine panel; reels, paying lines, free spins played back from the row | 104 lines |
|
|
14
|
+
| **tumble** | a 76,557-row table of whole rounds (tumbles, free spins, multipliers) from the maths kit, fitted to exactly 96.00% | engine panel; the grid drops, each tumble plays back from the row | 114 lines |
|
|
15
|
+
| **keno** | ten 2–11-row tables, weights C(n, k)·C(40−n, 10−k), paytable solved for 99% | engine panel; the board's picks choose the mode | 77 lines |
|
|
16
|
+
| **plinko** | nine 9–17-row tables, weights C(n, k), the centre multiplier solved | engine panel; a `select` event redraws the board | 92 lines |
|
|
17
|
+
| **crash** | a 64-step ladder with cash-out, level k survived with weight m(k−1) : m(k)−m(k−1), 99% at every stop | engine panel without Next; the page climbs with `game.advance()` on the Bet click's activation, then on a tap; Cash out is the player's press | 79 lines |
|
|
18
|
+
| **mines** | 24 ladders (1–24 mines), step weights (25−m−j) : m, payouts 0.99 ÷ P rounded to 0.01× | engine panel without Next; a tile click is the next step | 57 lines |
|
|
19
|
+
| **tower** | an 8-step ladder with cash-out, 1 trap in 4 | engine panel (Next / Cash out); the zone draws the floors | 40 lines |
|
|
20
|
+
| **wheel** | three modes (low / medium / high), 24 segments each | engine panel; a `select` event redraws the wheel | 51 lines |
|
|
21
|
+
|
|
22
|
+
A full custom frontend (BAD CAT: four games, lobby, skins, music) passes the
|
|
23
|
+
same pipeline; custom frontends are the other door (GUIDE.md §1).
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# For agents
|
|
2
|
+
|
|
3
|
+
This is a House Engine game (Housebets). Read the guide first: `engine_guide` (MCP) or `engine-sdk/GUIDE.md`. Then `hbengine verify`, `hbengine dev`, `hbengine upload` (or the `engine_*` tools). The math is `math/`, the frontend `bundle/`; never compute money or outcomes in the frontend.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Coin — the smallest House Engine game
|
|
2
|
+
|
|
3
|
+
One table, two sides, 1.98× (RTP 99%). The panel is the engine's
|
|
4
|
+
(`/engine-sdk/ui.js`); `bundle/game.js` only shows the side the server drew.
|
|
5
|
+
|
|
6
|
+
npx hbengine verify . exact RTP per bet, the mathHash
|
|
7
|
+
npx hbengine init my-coin --template coin --slug my-coin # make it yours, then: verify, dev, upload
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "groups": { "boot": { "files": ["index.html", "game.js", "game.css"] } } }
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
body { margin: 0; background: #08141a; }
|
|
2
|
+
.coin { width: 220px; height: 220px; border-radius: 50%; display: grid; place-items: center; background: radial-gradient(circle at 35% 30%, #5cf6f6, #0a3a47 70%); box-shadow: 0 12px 40px rgba(0, 0, 0, .5); transition: transform .6s cubic-bezier(.2, .8, .2, 1); }
|
|
3
|
+
.coin.spin { transform: rotateY(1080deg); }
|
|
4
|
+
.coin.lose { filter: grayscale(.7); }
|
|
5
|
+
.face { font: 700 44px/1 'Figtree', system-ui, sans-serif; color: #041015; text-transform: uppercase; }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Coin: one draw, two sides. The panel is the engine's (engine-sdk/ui.js);
|
|
2
|
+
// this file only shows the side the server drew.
|
|
3
|
+
import { mount } from '/engine-sdk/ui.js';
|
|
4
|
+
|
|
5
|
+
const coin = document.getElementById('coin');
|
|
6
|
+
const face = document.getElementById('face');
|
|
7
|
+
const wait = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
8
|
+
|
|
9
|
+
await mount(document.getElementById('game'), {
|
|
10
|
+
async reveal(round) {
|
|
11
|
+
coin.classList.remove('spin', 'lose');
|
|
12
|
+
face.textContent = '';
|
|
13
|
+
void coin.offsetWidth; // restart the spin
|
|
14
|
+
coin.classList.add('spin');
|
|
15
|
+
await wait(600);
|
|
16
|
+
face.textContent = round.data[0].side;
|
|
17
|
+
coin.classList.toggle('lose', round.payout === 0);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
6
|
+
<title>Coin</title>
|
|
7
|
+
<link rel="stylesheet" href="./game.css">
|
|
8
|
+
<script type="module" src="/engine-sdk/bet-field.js"></script>
|
|
9
|
+
<script type="module" src="./game.js"></script>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<hb-game id="game">
|
|
13
|
+
<div slot="zone" class="coin" id="coin" aria-live="polite"><span class="face" id="face">?</span></div>
|
|
14
|
+
</hb-game>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "house-engine-math/1",
|
|
3
|
+
"game": "coin",
|
|
4
|
+
"rtpBp": 9900,
|
|
5
|
+
"modes": [
|
|
6
|
+
{
|
|
7
|
+
"id": "coin",
|
|
8
|
+
"label": "Coin",
|
|
9
|
+
"kind": "table",
|
|
10
|
+
"table": "coin.tsv",
|
|
11
|
+
"bets": [
|
|
12
|
+
{ "id": "heads", "label": "Heads", "tiers": [{ "outcomes": [[0, 0]], "multBp": 19800 }] },
|
|
13
|
+
{ "id": "tails", "label": "Tails", "tiers": [{ "outcomes": [[1, 1]], "multBp": 19800 }] }
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# For agents
|
|
2
|
+
|
|
3
|
+
This is a House Engine game (Housebets). Read the guide first: `engine_guide` (MCP) or `engine-sdk/GUIDE.md`. Then `hbengine verify`, `hbengine dev`, `hbengine upload` (or the `engine_*` tools). The math is `math/`, the frontend `bundle/`; never compute money or outcomes in the frontend.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Crash — a ladder that climbs by itself
|
|
2
|
+
|
|
3
|
+
64 levels from 1.01× to about 1,000×. After the bet the page climbs the levels
|
|
4
|
+
as the multiplier grows like e^t, 2× in 2.5 s (`game.advance()`, the engine
|
|
5
|
+
panel without its Next button)
|
|
6
|
+
until the player cashes out (the panel's Cash out: the shell takes a cash-out,
|
|
7
|
+
like a step, only on the player's click, so the page never cashes out for
|
|
8
|
+
them) or the round busts. The climb itself rides on the Bet click's activation
|
|
9
|
+
for a few seconds, then waits for a tap on the zone. Level k is survived with weight m(k−1) against
|
|
10
|
+
m(k) − m(k−1), so a cash-out at any level returns exactly 99% (the engine's
|
|
11
|
+
verifier reports every stop). Every level is drawn at the bet; the server
|
|
12
|
+
shows each only when it is reached, so the page cannot know the crash point.
|
|
13
|
+
|
|
14
|
+
node math/gen.mjs && npx hbengine verify .
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "groups": { "boot": { "files": ["index.html", "game.js", "game.css"] } } }
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
body { margin: 0; background: #08141a; }
|
|
2
|
+
.crash { position: relative; width: 100%; height: 100%; min-height: 340px; display: grid; place-items: center; align-content: center; gap: 6px; padding: 16px; box-sizing: border-box; font-family: 'Figtree', system-ui, sans-serif; }
|
|
3
|
+
canvas { position: absolute; inset: 16px 16px 56px 16px; width: calc(100% - 32px); height: calc(100% - 72px); }
|
|
4
|
+
.mult { position: relative; font: 800 clamp(48px, 12cqi, 96px)/1 'Red Hat Display', system-ui, sans-serif; color: #F9F9FB; font-variant-numeric: tabular-nums; }
|
|
5
|
+
.crash { container-type: inline-size; }
|
|
6
|
+
.mult.cashed { color: #FDDC73; }
|
|
7
|
+
.mult.bust { color: #ff6b81; }
|
|
8
|
+
.note { position: relative; height: 20px; color: #8F96A8; font-size: 14px; }
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Crash: a ladder with cash-out that climbs by itself. The panel is the
|
|
2
|
+
// engine's (engine-sdk/ui.js, no Next button); after a bet this file climbs
|
|
3
|
+
// the levels with game.advance(), the multiplier growing as e^(RATE·t) (2×
|
|
4
|
+
// in 2.5 s), until the player cashes out (the panel's Cash out) or the round
|
|
5
|
+
// busts. Every level was drawn at the bet; the server shows each only when
|
|
6
|
+
// it is reached. A step is the player's: the shell takes one only on the
|
|
7
|
+
// player's recent click (the Bet press carries the climb for a few seconds,
|
|
8
|
+
// and a bounded run of steps), then refuses it, so the climb waits and a tap
|
|
9
|
+
// on the zone takes it on. Cash out is the player's press too — nothing here
|
|
10
|
+
// cashes out for them: the shell takes a cash-out, like a step, only on the
|
|
11
|
+
// player's click, so an auto cash-out target would be refused the moment the
|
|
12
|
+
// click lapsed (a target belongs in the maths as its own stop, not in the page).
|
|
13
|
+
import { mount } from '/engine-sdk/ui.js';
|
|
14
|
+
|
|
15
|
+
const RATE = Math.log(2) / 2500; // per ms
|
|
16
|
+
const zone = document.getElementById('zone'), multEl = document.getElementById('mult'), note = document.getElementById('note');
|
|
17
|
+
const canvas = document.getElementById('curve'), ctx = canvas.getContext('2d');
|
|
18
|
+
const wait = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
19
|
+
let levels = [], path = [], climbing = false, last = 'climb';
|
|
20
|
+
const x = (bp) => (bp / 10000).toFixed(2) + '×';
|
|
21
|
+
|
|
22
|
+
// The curve on a time axis: level m is reached at ln(m)/RATE, its height is m.
|
|
23
|
+
function draw(state = last) {
|
|
24
|
+
last = state;
|
|
25
|
+
const dpr = devicePixelRatio || 1, w = canvas.clientWidth, h = canvas.clientHeight;
|
|
26
|
+
canvas.width = w * dpr; canvas.height = h * dpr; ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
27
|
+
ctx.clearRect(0, 0, w, h);
|
|
28
|
+
if (path.length < 2) return;
|
|
29
|
+
const top = Math.max(2, path.at(-1) / 10000), span = Math.log(top);
|
|
30
|
+
ctx.beginPath();
|
|
31
|
+
for (let i = 0; i <= 60; i++) {
|
|
32
|
+
const t = (i / 60) * span, px = (t / span) * w, py = h - ((Math.exp(t) - 1) / (top - 1)) * h * 0.85;
|
|
33
|
+
i ? ctx.lineTo(px, py) : ctx.moveTo(px, py);
|
|
34
|
+
}
|
|
35
|
+
ctx.strokeStyle = state === 'bust' ? '#ff6b81' : state === 'cashed' ? '#FDDC73' : '#5cf6f6';
|
|
36
|
+
ctx.lineWidth = 3; ctx.lineJoin = 'round'; ctx.stroke();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// round.step: the levels climbed; a bust happened on the level after the
|
|
40
|
+
// last one reached, so it shows the multiplier it got to. (round.busted is
|
|
41
|
+
// the drawn path's, shown once the round closes — a cash-out can carry it.)
|
|
42
|
+
function show(round) {
|
|
43
|
+
const state = round.state === 'busted' ? 'bust' : round.state === 'open' ? 'climb' : 'cashed';
|
|
44
|
+
const reached = state === 'bust' ? round.step - 1 : round.step;
|
|
45
|
+
const shown = reached > 0 ? levels[reached - 1] : 10000;
|
|
46
|
+
path = [10000, ...levels.slice(0, reached)];
|
|
47
|
+
multEl.textContent = x(shown);
|
|
48
|
+
multEl.className = 'mult' + (state === 'climb' ? '' : ' ' + state);
|
|
49
|
+
note.textContent = state === 'bust' ? `Crashed at ${x(shown)}` : state === 'cashed' ? `Cashed out at ${x(shown)}` : '';
|
|
50
|
+
draw(state);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// After a bet: climb until the round is over, or the top level is reached
|
|
54
|
+
// (then the climb simply stops: the multiplier holds, and Cash out is the
|
|
55
|
+
// player's press).
|
|
56
|
+
async function climb() {
|
|
57
|
+
if (climbing) return;
|
|
58
|
+
climbing = true;
|
|
59
|
+
while (game.open) {
|
|
60
|
+
const k = game.open.step, now = k ? levels[k - 1] : 0;
|
|
61
|
+
if (k >= levels.length) break;
|
|
62
|
+
await wait(Math.log(levels[k] / (now || 10000)) / RATE); // the time to the next level
|
|
63
|
+
if (!game.open) break;
|
|
64
|
+
// A refused step ends the climb, not the round — unless the shell only
|
|
65
|
+
// paced it (one tap buys a bounded run of steps): then it says when to
|
|
66
|
+
// go on, and the climb waits that long. Otherwise (the player's click
|
|
67
|
+
// has lapsed) the multiplier holds, Cash out stays, a tap climbs on.
|
|
68
|
+
if (!(await game.advance())) {
|
|
69
|
+
const why = game.refusal;
|
|
70
|
+
if (why && why.code === 'pacing') { await wait(why.retryAfterMs || 100); continue; }
|
|
71
|
+
if (game.open) note.textContent = 'Tap to keep climbing';
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
climbing = false;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const game = await mount(document.getElementById('game'), {
|
|
79
|
+
next: false,
|
|
80
|
+
step(round) {
|
|
81
|
+
show(round);
|
|
82
|
+
if (round.state === 'open') climb();
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
levels = game.engine.config.modes[0].ladderBp;
|
|
86
|
+
// On the click, not pointerdown: a touch grants the shell its activation only
|
|
87
|
+
// when the finger lifts (pointerup), so a climb started on pointerdown could
|
|
88
|
+
// reach the shell before the tap counts and be refused again on a phone.
|
|
89
|
+
zone.addEventListener('click', () => { if (game.open && !climbing) { note.textContent = ''; climb(); } });
|
|
90
|
+
new ResizeObserver(() => draw()).observe(zone); // keeps the last colour
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
6
|
+
<title>Crash</title>
|
|
7
|
+
<link rel="stylesheet" href="./game.css">
|
|
8
|
+
<script type="module" src="/engine-sdk/bet-field.js"></script>
|
|
9
|
+
<script type="module" src="./game.js"></script>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<hb-game id="game">
|
|
13
|
+
<div slot="zone" class="crash" id="zone">
|
|
14
|
+
<canvas id="curve" aria-hidden="true"></canvas>
|
|
15
|
+
<div class="mult" id="mult" aria-live="polite">1.00×</div>
|
|
16
|
+
<div class="note" id="note"></div>
|
|
17
|
+
</div>
|
|
18
|
+
</hb-game>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|