The game as of artifact version 24, ready for local development with coding agents. - Source split from three large files into 52 small ones under src/sim, src/render and src/ui, joined in the order in src/manifest.json by build.py. The joined code is unchanged apart from comments; every headless suite gives the same output, and screenshots in both looks are pixel-identical to before. - Light tidying with no change in behaviour: one movement scan loop, shared hazard-stripe and belt shader helpers, unused code removed, a shared check helper for the test suites. - World files can be exported as an ordinary download outside claude.ai. - Tests: broken old scripts removed, experiments moved to tools/, test/run_all.py added. Tools: shot.py (repeatable screenshots), where.py, map.py. - Docs: AGENTS.md, CLAUDE.md, NOTES.md (the owner's to-do inbox), docs/PROJECT_MAP.md, DESIGN.md, TESTING.md, systems notes, the owner's requests and an agent log. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9kLmYADKSEjuwUN3rFxDA
25 lines
1.0 KiB
JavaScript
25 lines
1.0 KiB
JavaScript
'use strict';
|
|
/* Deepgrain Foundry: simulation core (src/sim/). No DOM anywhere in src/sim/: plain data and
|
|
functions, so the headless tests can run it and the layout can be ported to Rust later.
|
|
This file: the random number generators and the phase ids every material has. */
|
|
|
|
// ---------- RNG ----------
|
|
let RS = 0x2545F491 | 0;
|
|
function rnd() { RS ^= RS << 13; RS ^= RS >>> 17; RS ^= RS << 5; return (RS >>> 0) * 2.3283064365386963e-10; }
|
|
function mulberry32(a) {
|
|
return function () {
|
|
a |= 0; a = a + 0x6D2B79F5 | 0;
|
|
let t = Math.imul(a ^ a >>> 15, 1 | a);
|
|
t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
|
|
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
};
|
|
}
|
|
function hash2(x, y, s) {
|
|
let h = Math.imul(x, 374761393) + Math.imul(y, 668265263) + Math.imul(s, 1442695041);
|
|
h = Math.imul(h ^ (h >>> 13), 1274126177);
|
|
return ((h ^ (h >>> 16)) >>> 0);
|
|
}
|
|
|
|
// ---------- Phases ----------
|
|
const PH_EMPTY = 0, PH_SOLID = 1, PH_POWDER = 2, PH_LIQUID = 3, PH_GAS = 4, PH_ITEM = 5; // items (bars) never sit in the grid
|