code wiki / _hdl_build / nx_craft_dunes_boundary_gate_t70.nx

nx_craft_dunes_boundary_gate_t70.nx source

↩ module page · 167 lines · 8627 B

1// Private actual-engine qualification. No network, production data or hardware writes. 2import "nx_wasm_craft_dunes_t70.nx" 3import "nx_gate_verdict.nx" 4func dg_equal(a: *u8,b: *u8,n: i64) -> i64 { 5 var i: i64 = 0 6 while i < n { if a[i] != b[i] { return 0 }; i = i + 1 } 7 return 1 8} 9func dg_copy(a: *u8,b: *u8,n: i64) -> i64 { 10 var i: i64 = 0 11 while i < n { a[i] = b[i]; i = i + 1 } 12 return n 13} 14func dg_legacy_q(base: i64,x: i64,z: i64,seed: i64) -> i64 { 15 let sp: *i64 = wsp(base) 16 return wclamp(sp[P_TBASE]*256 + wnoise(x,z,16,seed)*sp[P_TAMP1] + wnoise(x,z,5,seed+7)*sp[P_TAMP2],256,(WY-8)*256) 17} 18func dg_hq_parity(base: i64) -> i64 { 19 let s: *i64 = wst(base) 20 var errors: i64 = 0; var z: i64 = 0 21 while z < WZ { 22 var x: i64 = 0 23 while x < WX { 24 let wanted: i64 = wsp_beach_ocean_q(wsp(base),x+s[S_WOX],z+s[S_WOZ],wheight_qe(base,x+s[S_WOX],z+s[S_WOZ],s[S_SEED])) 25 if hq_get(base,x,z) != wanted { errors = errors + 1 } 26 x = x + 1 27 } 28 z = z + 1 29 } 30 return errors 31} 32func main() -> i64 { 33 let arena: *u8 = sys_mmap(CRAFT_EXT_TOTAL) 34 let capture: *u8 = sys_mmap(CRAFT_EXT_TOTAL) 35 if (arena as i64) <= 0 || (capture as i64) <= 0 { return 3 } 36 let base: i64 = arena as i64 37 let sp: *i64 = wsp(base); let s: *i64 = wst(base) 38 let ctr: *i64 = gv_ctr() 39 gv_head("DUNES / actual shared heightfield and contact" as *u8) 40 gv_check_eq("slot fits existing spec allocation",WC_SPECN*8,O_EJRN-O_SPEC,ctr) 41 gv_check_eq("explicit dune predicate admits dune slot",genp_dune_gen_ok(P_DUNE),1,ctr) 42 gv_check_eq("generic engines retain original index admission",genp_gen_ok(P_DUNE),0,ctr) 43 gv_check_eq("allowlist census",genp_gen_count(),GA_ADMITTED,ctr) 44 var identity: i64 = 0; var other_bad: i64 = 0 45 while identity < 4 { 46 wc_spec(base,identity) 47 if identity != 2 { if sp[P_DUNE] != 0 { other_bad = other_bad + 1 } } 48 identity = identity + 1 49 } 50 gv_check_eq("other identities retain disabled dune data",other_bad,0,ctr) 51 wc_spec(base,2) 52 gv_check_eq("Beach explicitly enables reviewed recipe",sp[P_DUNE],BEACH_DUNE_RECIPE,ctr) 53 gv_check_eq("Beach packed recipe valid",wc_dune_valid(sp[P_DUNE]),1,ctr) 54 gv_check_eq("negative packed data refused",wc_dune_valid(0-1),0,ctr) 55 gv_check_eq("reserved bits refused",wc_dune_valid(WC_DUNE_PACK_MAX+1),0,ctr) 56 gv_check_eq("sub-grid wavelength refused",wc_dune_valid(768+(3 << WC_DUNE_WAVE_SHIFT)),0,ctr) 57 var bad: i64 = 0; var changed: i64 = 0; var varied: i64 = 0 58 var minrelief: i64 = BEACH_DUNE_AMPLITUDE_Q8; var maxrelief: i64 = 0 59 var maxstep: i64 = 0; var z: i64 = 0-32 60 while z < 128 { 61 var x: i64 = 0-32 62 while x < 128 { 63 let a: i64 = wc_dune_q(sp,x,z,123) 64 let b: i64 = wc_dune_q(sp,x,z,321) 65 if a < 0 || a > BEACH_DUNE_AMPLITUDE_Q8 { bad = bad + 1 } 66 if a < minrelief { minrelief = a }; if a > maxrelief { maxrelief = a } 67 if a != b { varied = varied + 1 } 68 var step: i64 = a-wc_dune_q(sp,x+1,z,123) 69 if step < 0 { step = 0-step } 70 if step > maxstep { maxstep = step } 71 if z >= 100 { if a != 0 { bad = bad + 1 } } 72 let enabled: i64 = wheight_q(base,x,z,123) 73 sp[P_DUNE] = 0 74 let disabled: i64 = wheight_q(base,x,z,123) 75 if disabled != dg_legacy_q(base,x,z,123) { bad = bad + 1 } 76 let raw: i64 = wclamp(sp[P_TBASE]+wnoise(x,z,16,123)*sp[P_TAMP1]/256+wnoise(x,z,5,130)*sp[P_TAMP2]/256,1,WY-8) 77 if wheight_raw(base,x,z,123) != raw { bad = bad + 1 } 78 sp[P_DUNE] = BEACH_DUNE_RECIPE 79 if enabled != disabled { changed = changed + 1 } 80 if wheight_raw(base,x,z,123) != (enabled+128)/256 { bad = bad + 1 } 81 x = x + 1 82 } 83 z = z + 1 84 } 85 gv_check_eq("25600 signed-coordinate samples bounded and disabled baseline exact",bad,0,ctr) 86 gv_check("enabled geometry changes sampled terrain" as *u8,changed > 0,ctr) 87 gv_check("seed changes dune shape" as *u8,varied > 0,ctr) 88 gv_kv("changed_samples",changed); gv_kv("seed_changed_samples",varied) 89 gv_kv("relief_min_q8",minrelief); gv_kv("relief_max_q8",maxrelief); gv_kv("max_sampled_x_step_q8",maxstep) 90 let boot_start: i64 = sys_clock_now_us() 91 init_impl_v(base,2,20260728) 92 gv_kv("enabled_boot_us",sys_clock_now_us()-boot_start) 93 gv_check_eq("initial complete HQ matches absolute native terrain",dg_hq_parity(base),0,ctr) 94 let floor: i64 = wc_surface_source(base,s[S_CX],s[S_CZ]) 95 gv_check_eq("player feet start on admitted support",s[S_CY]-EYE,wc_contact_floor_q(base,s[S_CX],s[S_CZ],WY-1),ctr) 96 gv_check_eq("standing player body is clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 97 let mobs0: *i64 = mobp(base); var k: i64 = 0; var npc_bad: i64 = 0 98 while k < en_count(mobs0) { 99 let h: i64 = en_nth(mobs0,k) 100 let mx: i64 = en_get(mobs0,h,MC_X); let mz: i64 = en_get(mobs0,h,MC_Z) 101 if en_get(mobs0,h,MC_Y) != wc_contact_floor_q(base,mx,mz,WY-1) { npc_bad = npc_bad + 1 } 102 k = k + 1 103 } 104 gv_check("actual NPC contact population nonempty" as *u8,k > 0,ctr) 105 gv_check_eq("actual initial NPC roots match native contact",npc_bad,0,ctr); gv_kv("npc_count",k) 106 let shift_start: i64 = sys_clock_now_us() 107 wc_shift(base,16,0-16) 108 gv_kv("enabled_shift_us",sys_clock_now_us()-shift_start) 109 gv_check_eq("shifted complete HQ matches same absolute surface",dg_hq_parity(base),0,ctr) 110 dg_copy(capture,(base+O_HQ) as *u8,WX*WZ*8) 111 wc_hq_restore(base) 112 gv_check_eq("derived restore produces exact shifted HQ bytes",dg_equal(capture,(base+O_HQ) as *u8,WX*WZ*8),1,ctr) 113 wc_edit(base,32,24,32,6) 114 let save_bytes: i64 = wc_save_build(base) 115 dg_copy(capture,(base+O_SAVE) as *u8,save_bytes) 116 init_impl_v(base,2,999) 117 dg_copy((base+O_SAVE) as *u8,capture,save_bytes) 118 gv_check_eq("same recipe save loads through bounded native door",wc_save_apply_bytes(base,save_bytes),0,ctr) 119 gv_check_eq("saved seed and origin regenerate complete HQ",dg_hq_parity(base),0,ctr) 120 gv_check_eq("saved edit and journal survive",ej_get(base,48,24,16),6,ctr) 121 // Existing save format omits spec. Retain that boundary, do not claim cross-recipe migration. 122 gv_kv("save_recipe_identity_persisted",0) 123 let gp: *i64 = wgp(base) 124 gp[0] = GENP_MAGIC; gp[1] = 1; gp[2] = P_DUNE; gp[3] = 0 125 let baseline_start: i64 = sys_clock_now_us() 126 init_impl_v(base,2,20260728) 127 gv_kv("disabled_boot_us",sys_clock_now_us()-baseline_start) 128 gv_check_eq("gen-time override disables Beach relief before generation",sp[P_DUNE],0,ctr) 129 gv_check_eq("override application count",s[S_GENP],1,ctr) 130 gp[3] = BEACH_DUNE_RECIPE 131 init_impl_v(base,2,20260728) 132 gv_check_eq("gen-time override enables actual Beach height cache",dg_hq_parity(base),0,ctr) 133 134 // Native preflight must reject before wc_spec, GENP assignment or world mutation. 135 gv_check_eq("maximum packed recipe admitted",genp_dune_valid(GA_DUNE_PACK_MAX),1,ctr) 136 gv_check_eq("zero-amplitude nonzero recipe refused",genp_dune_valid(4 << GA_DUNE_WAVE_SHIFT),0,ctr) 137 gv_check_eq("minimum wavelength and amplitude admitted",genp_dune_valid(1+(GA_DUNE_MIN_WAVE << GA_DUNE_WAVE_SHIFT)),1,ctr) 138 var refused: i64 = 0 139 while refused < 4 { 140 gp[0] = GENP_MAGIC; gp[1] = 2; gp[2] = P_WPIPE; gp[3] = 12 141 gp[4] = P_DUNE 142 if refused == 0 { gp[5] = 0 - 1 } 143 if refused == 1 { gp[5] = WC_DUNE_PACK_MAX + 1 } 144 if refused == 2 { gp[5] = 4 << GA_DUNE_WAVE_SHIFT } 145 if refused == 3 { gp[5] = 1 + (3 << GA_DUNE_WAVE_SHIFT) } 146 dg_copy(capture,arena,CRAFT_EXT_TOTAL) 147 gv_check_eq("invalid recipe with earlier staged-pipeline pair returns named init error",init_impl_v(base,2,123),WC_INIT_DUNE_INVALID,ctr) 148 gv_check_eq("refused init preserves entire arena including old scene",dg_equal(capture,arena,CRAFT_EXT_TOTAL),1,ctr) 149 refused = refused + 1 150 } 151 gp[5] = BEACH_DUNE_RECIPE 152 gv_check_eq("valid staged-pipeline dune recipe initializes",init_impl_v(base,2,123),0,ctr) 153 gv_check_eq("staged-pipeline full HQ uses admitted dune surface",dg_hq_parity(base),0,ctr) 154 gv_check_eq("staged-pipeline column rounds same Q8 geometry",wheight_raw(base,32,32,123),(wheight_q(base,32,32,123)+128)/256,ctr) 155 gp[1] = 1; gp[2] = P_DUNE; gp[3] = 0 156 init_impl_v(base,2,20260728) 157 dg_copy(capture,(base+O_HQ) as *u8,WX*WZ*8) 158 wc_edit(base,32,24,32,6) 159 wc_save_build(base) 160 // An old recipe save is authentic but contains no terrain recipe identity. 161 sp[P_DUNE] = BEACH_DUNE_RECIPE 162 gv_check_eq("legacy-recipe payload checksum still admits today",wc_save_apply_bytes(base,SAVE_LEN),0,ctr) 163 gv_check_eq("negative control detects old-save changed terrain",dg_equal(capture,(base+O_HQ) as *u8,WX*WZ*8),0,ctr) 164 gv_check_eq("negative control retains actual old-save edit",ej_get(base,32,24,32),6,ctr) 165 sys_munmap(arena,CRAFT_EXT_TOTAL); sys_munmap(capture,CRAFT_EXT_TOTAL) 166 return gv_verdict("BEACH-DUNES" as *u8,ctr,"native geometry/contact; browser GPU parity, near/mid visuals and old-save recipe migration remain separate" as *u8) 167}