code wiki / _hdl_build / nx_asset_floor_gate.nx
nx_asset_floor_gate.nx
buildroot/runtime/_hdl_build/nx_asset_floor_gate.nx
about
nx_asset_floor_gate.nx -- THE ASSET FLOOR: measure our shipped character against a declared
game-ready floor, and NAME WHAT IS MISSING. Operator 2026-08-02 pointed at a commercial
game-ready character listing as "the floor we need to reach". That listing is behind a bot
challenge and could not be read, so this gate does the honest version instead: it parses OUR
OWN asset and reports the capability gaps a commercial game-ready character would carry.
THE POINT IS THE GAP LIST, NOT A GREEN LIGHT. A gate that only says PASS/FAIL on triangle
count would call our figure "game ready" while she ships with no face geometry, no breast
bones and no blend shapes -- the exact defects the operator saw on screen. So every capability
is REPORTED, present or absent, and the absent ones are the roadmap.
Reads the NXA container directly (the format the browser loads): magic NXANIM01, u64 version,
u64 section count, then 32-byte section headers {tag[4], _, off, wordlen, ck_lo, ck_hi}.
Sections: VERT TRIS SKEL SKIN ANIM (required) + GVRT GTRI (garment) HSTR (hair) POSE (idle).
license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0
dependencies 2 imports · 0 importers
imports: nx_syscalls.nxnx_gate_verdict.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 22 | const AF_PATH: *u8 = "sites/nishifamily/world/ref9d.nxa" |
| 33 | const AF_MIDLINE: i64 = 3000 |
| 34 | const AF_HDR: i64 = 32 |
| 35 | const AF_SECHDR: i64 = 32 |
| 50 | const AF_RIG_CONF: *u8 = "knowledge/rigfloor_nxa.conf" |
| 51 | const AF_DONOR_CONF: *u8 = "knowledge/rigfloor_msh.conf" |
| 52 | const AF_CONTAINER_NXA: i64 = 1 |
| 53 | const AF_PERMIL: i64 = 1000 |
| 55 | const AF_BAND_UNOBS: i64 = 0 |
| 56 | const AF_BAND_OK: i64 = 1 |
| 57 | const AF_BAND_XCONT: i64 = 2 |
| 61 | const AF_FIX_VERTS: i64 = 7000 |
| 62 | const AF_FIX_TRIS: i64 = 14000 |
| 63 | const AF_FIX_JOINTS: i64 = 2 |
| 64 | const AF_FIX_NSEC: i64 = 3 |
| 65 | const AF_FIX_VERSION: i64 = 1 |
| 66 | const AF_WORD: i64 = 8 |
| 67 | const AF_ASCII_NL: i64 = 10 |
| 68 | const AF_ASCII_EQ: i64 = 61 |
| 69 | const AF_ASCII_ZERO: i64 = 48 |
| 70 | const AF_ASCII_NINE: i64 = 57 |
| 71 | const AF_DECIMAL: i64 = 10 |
| 72 | const AF_MISS: i64 = 0 - 1 |
| 73 | const AF_CORPUS_COMPLETE: i64 = 1 |
| 74 | const AF_TMPDIR_MODE: i64 = 493 |
| 78 | const AF_BUST_PERMIL_LO: i64 = 700 |
| 79 | const AF_BUST_PERMIL_HI: i64 = 790 |
functions
| 81 | func af_rd64(b: *u8, off: i64) -> i64 |
| 87 | func af_tag(b: *u8, off: i64, t: *u8) -> i64 called by 1: af_find |
| 93 | func af_find(b: *u8, nsec: i64, t: *u8) -> i64 |
| 105 | func af_conf_int(path: *u8, key: *u8, miss: i64) -> i64 |
| 154 | func af_rig_band(path: *u8, kmin: *u8, kmax: *u8, lo: *i64, hi: *i64) -> i64 |
| 167 | func af_in_band(v: i64, lo: i64, hi: i64) -> i64 |
| 174 | func af_axis(name: *u8, tooth: *u8, v: i64, kmin: *u8, kmax: *u8, ctr: *i64) -> i64 |
| 195 | func af_wr64(b: *u8, off: i64, v: i64) -> i64 called by 1: af_write_fixture |
| 204 | func af_write_fixture(path: *u8, nv: i64, nt: i64, nj: i64) -> i64 |
| 240 | func af_counts(path: *u8, out: *i64) -> i64 |
| 256 | func af_report(name: *u8, present: i64) -> i64 |
| 263 | func main(argc: i64, argv: *i64) -> i64 |