code wiki / _hdl_build / nx_craft_dunes_gate_t70.nx

nx_craft_dunes_gate_t70.nx source

↩ module page · 134 lines · 6560 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("one gen-time allowlist admits dune slot",genp_gen_ok(P_DUNE),1,ctr) 42 gv_check_eq("allowlist census",genp_gen_count(),GA_ADMITTED,ctr) 43 var identity: i64 = 0; var other_bad: i64 = 0 44 while identity < 4 { 45 wc_spec(base,identity) 46 if identity != 2 { if sp[P_DUNE] != 0 { other_bad = other_bad + 1 } } 47 identity = identity + 1 48 } 49 gv_check_eq("other identities retain disabled dune data",other_bad,0,ctr) 50 wc_spec(base,2) 51 gv_check_eq("Beach explicitly enables reviewed recipe",sp[P_DUNE],BEACH_DUNE_RECIPE,ctr) 52 gv_check_eq("Beach packed recipe valid",wc_dune_valid(sp[P_DUNE]),1,ctr) 53 gv_check_eq("negative packed data refused",wc_dune_valid(0-1),0,ctr) 54 gv_check_eq("reserved bits refused",wc_dune_valid(WC_DUNE_PACK_MAX+1),0,ctr) 55 gv_check_eq("sub-grid wavelength refused",wc_dune_valid(768+(3 << WC_DUNE_WAVE_SHIFT)),0,ctr) 56 var bad: i64 = 0; var changed: i64 = 0; var varied: i64 = 0 57 var minrelief: i64 = BEACH_DUNE_AMPLITUDE_Q8; var maxrelief: i64 = 0 58 var maxstep: i64 = 0; var z: i64 = 0-32 59 while z < 128 { 60 var x: i64 = 0-32 61 while x < 128 { 62 let a: i64 = wc_dune_q(sp,x,z,123) 63 let b: i64 = wc_dune_q(sp,x,z,321) 64 if a < 0 || a > BEACH_DUNE_AMPLITUDE_Q8 { bad = bad + 1 } 65 if a < minrelief { minrelief = a }; if a > maxrelief { maxrelief = a } 66 if a != b { varied = varied + 1 } 67 var step: i64 = a-wc_dune_q(sp,x+1,z,123) 68 if step < 0 { step = 0-step } 69 if step > maxstep { maxstep = step } 70 if z >= 100 { if a != 0 { bad = bad + 1 } } 71 let enabled: i64 = wheight_q(base,x,z,123) 72 sp[P_DUNE] = 0 73 let disabled: i64 = wheight_q(base,x,z,123) 74 if disabled != dg_legacy_q(base,x,z,123) { bad = bad + 1 } 75 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) 76 if wheight_raw(base,x,z,123) != raw { bad = bad + 1 } 77 sp[P_DUNE] = BEACH_DUNE_RECIPE 78 if enabled != disabled { changed = changed + 1 } 79 if wheight_raw(base,x,z,123) != (enabled+128)/256 { bad = bad + 1 } 80 x = x + 1 81 } 82 z = z + 1 83 } 84 gv_check_eq("25600 signed-coordinate samples bounded and disabled baseline exact",bad,0,ctr) 85 gv_check("enabled geometry changes sampled terrain" as *u8,changed > 0,ctr) 86 gv_check("seed changes dune shape" as *u8,varied > 0,ctr) 87 gv_kv("changed_samples",changed); gv_kv("seed_changed_samples",varied) 88 gv_kv("relief_min_q8",minrelief); gv_kv("relief_max_q8",maxrelief); gv_kv("max_sampled_x_step_q8",maxstep) 89 let boot_start: i64 = sys_clock_now_us() 90 init_impl_v(base,2,20260728) 91 gv_kv("enabled_boot_us",sys_clock_now_us()-boot_start) 92 gv_check_eq("initial complete HQ matches absolute native terrain",dg_hq_parity(base),0,ctr) 93 let floor: i64 = wc_surface_source(base,s[S_CX],s[S_CZ]) 94 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) 95 gv_check_eq("standing player body is clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 96 let mobs0: *i64 = mobp(base); var k: i64 = 0; var npc_bad: i64 = 0 97 while k < en_count(mobs0) { 98 let h: i64 = en_nth(mobs0,k) 99 let mx: i64 = en_get(mobs0,h,MC_X); let mz: i64 = en_get(mobs0,h,MC_Z) 100 if en_get(mobs0,h,MC_Y) != wc_contact_floor_q(base,mx,mz,WY-1) { npc_bad = npc_bad + 1 } 101 k = k + 1 102 } 103 gv_check("actual NPC contact population nonempty" as *u8,k > 0,ctr) 104 gv_check_eq("actual initial NPC roots match native contact",npc_bad,0,ctr); gv_kv("npc_count",k) 105 let shift_start: i64 = sys_clock_now_us() 106 wc_shift(base,16,0-16) 107 gv_kv("enabled_shift_us",sys_clock_now_us()-shift_start) 108 gv_check_eq("shifted complete HQ matches same absolute surface",dg_hq_parity(base),0,ctr) 109 dg_copy(capture,(base+O_HQ) as *u8,WX*WZ*8) 110 wc_hq_restore(base) 111 gv_check_eq("derived restore produces exact shifted HQ bytes",dg_equal(capture,(base+O_HQ) as *u8,WX*WZ*8),1,ctr) 112 wc_edit(base,32,24,32,6) 113 let save_bytes: i64 = wc_save_build(base) 114 dg_copy(capture,(base+O_SAVE) as *u8,save_bytes) 115 init_impl_v(base,2,999) 116 dg_copy((base+O_SAVE) as *u8,capture,save_bytes) 117 gv_check_eq("same recipe save loads through bounded native door",wc_save_apply_bytes(base,save_bytes),0,ctr) 118 gv_check_eq("saved seed and origin regenerate complete HQ",dg_hq_parity(base),0,ctr) 119 gv_check_eq("saved edit and journal survive",ej_get(base,48,24,16),6,ctr) 120 // Existing save format omits spec. Retain that boundary, do not claim cross-recipe migration. 121 gv_kv("save_recipe_identity_persisted",0) 122 let gp: *i64 = wgp(base) 123 gp[0] = GENP_MAGIC; gp[1] = 1; gp[2] = P_DUNE; gp[3] = 0 124 let baseline_start: i64 = sys_clock_now_us() 125 init_impl_v(base,2,20260728) 126 gv_kv("disabled_boot_us",sys_clock_now_us()-baseline_start) 127 gv_check_eq("gen-time override disables Beach relief before generation",sp[P_DUNE],0,ctr) 128 gv_check_eq("override application count",s[S_GENP],1,ctr) 129 gp[3] = BEACH_DUNE_RECIPE 130 init_impl_v(base,2,20260728) 131 gv_check_eq("gen-time override enables actual Beach height cache",dg_hq_parity(base),0,ctr) 132 sys_munmap(arena,CRAFT_EXT_TOTAL); sys_munmap(capture,CRAFT_EXT_TOTAL) 133 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) 134}