code wiki / _hdl_build / nx_craft_relief_gate_t143.nx

nx_craft_relief_gate_t143.nx source

↩ module page · 254 lines · 13062 B

1// Private actual-engine qualification. No network, production data or hardware writes. 2import "nx_wasm_craft_relief_save_t143.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_dune_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",genp_dune_valid(sp[P_DUNE]),1,ctr) 53 gv_check_eq("negative packed data refused",genp_dune_valid(0-1),0,ctr) 54 gv_check_eq("reserved bits refused",genp_dune_valid(GA_DUNE_PACK_MAX+1),0,ctr) 55 gv_check_eq("sub-grid wavelength refused",genp_dune_valid(768+(3 << GA_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_relief_q(sp,x,z,123) 63 let b: i64 = wc_dune_relief_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_relief_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) != wclamp(raw+enabled/256-disabled/256,1,WY-8) { 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 90 var direction:i64=0;var directional_bad:i64=0 91 while direction<4 { 92 sp[P_OCEAN]=direction+(612<<2)+(20<<12)+(4<<18) 93 var distance:i64=0-2 94 while distance<=2 { 95 var x:i64=40;var zz:i64=100-distance 96 if direction==1{zz=100+distance};if direction==2{x=100-distance;zz=40};if direction==3{x=100+distance;zz=40} 97 let relief:i64=wc_dune_relief_q(sp,x,zz,123) 98 let enabled_q:i64=wheight_q(base,x,zz,123);let enabled_raw:i64=wheight_raw(base,x,zz,123) 99 sp[P_DUNE]=0 100 let disabled_q:i64=wheight_q(base,x,zz,123);let disabled_raw:i64=wheight_raw(base,x,zz,123) 101 sp[P_DUNE]=BEACH_DUNE_RECIPE 102 if distance<=0{if relief!=0||enabled_q!=disabled_q||enabled_raw!=disabled_raw{directional_bad=directional_bad+1}} 103 if enabled_raw!=wclamp(disabled_raw+enabled_q/256-disabled_q/256,1,WY-8){directional_bad=directional_bad+1} 104 distance=distance+1 105 };direction=direction+1 106 } 107 gv_check_eq("all four coast orientations preserve zero-relief shoreline raw and HQ",directional_bad,0,ctr) 108 wc_spec(base,2) 109 let boot_start: i64 = sys_clock_now_us() 110 init_impl_v(base,2,20260728) 111 gv_kv("enabled_boot_us",sys_clock_now_us()-boot_start) 112 gv_check_eq("initial complete HQ matches absolute native terrain",dg_hq_parity(base),0,ctr) 113 let floor: i64 = wc_surface_source(base,s[S_CX],s[S_CZ]) 114 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) 115 gv_check_eq("standing player body is clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 116 let mobs0: *i64 = mobp(base); var k: i64 = 0; var npc_bad: i64 = 0 117 while k < en_count(mobs0) { 118 let h: i64 = en_nth(mobs0,k) 119 let mx: i64 = en_get(mobs0,h,MC_X); let mz: i64 = en_get(mobs0,h,MC_Z) 120 if en_get(mobs0,h,MC_Y) != wc_contact_floor_q(base,mx,mz,WY-1) { npc_bad = npc_bad + 1 } 121 k = k + 1 122 } 123 gv_check("actual NPC contact population nonempty" as *u8,k > 0,ctr) 124 gv_check_eq("actual initial NPC roots match native contact",npc_bad,0,ctr); gv_kv("npc_count",k) 125 let shift_start: i64 = sys_clock_now_us() 126 wc_shift(base,16,0-16) 127 gv_kv("enabled_shift_us",sys_clock_now_us()-shift_start) 128 gv_check_eq("shifted complete HQ matches same absolute surface",dg_hq_parity(base),0,ctr) 129 dg_copy(capture,(base+O_HQ) as *u8,WX*WZ*8) 130 wc_hq_restore(base) 131 gv_check_eq("derived restore produces exact shifted HQ bytes",dg_equal(capture,(base+O_HQ) as *u8,WX*WZ*8),1,ctr) 132 wc_edit(base,32,24,32,6) 133 let save_bytes: i64 = wc_save_build(base) 134 dg_copy(capture,(base+O_SAVE) as *u8,save_bytes) 135 init_impl_v(base,2,999) 136 dg_copy((base+O_SAVE) as *u8,capture,save_bytes) 137 gv_check_eq("same recipe save loads through bounded native door",wc_save_apply_bytes(base,save_bytes),0,ctr) 138 gv_check_eq("saved seed and origin regenerate complete HQ",dg_hq_parity(base),0,ctr) 139 gv_check_eq("saved edit and journal survive",ej_get(base,48,24,16),6,ctr) 140 // v7 snapshots the existing generation allowlist; styles remain current surface-owned. 141 142 // Reuse the same world identity while changing active generation inputs. 143 let saved_dune:i64=wc_save_recipe(base)[SAVE_RECIPE_COUNT] 144 sp[P_DUNE]=0;sp[P_TBASE]=3 145 gv_check_eq("v7 load restores source generation inputs across active recipe change",wc_save_apply_bytes(base,save_bytes),0,ctr) 146 gv_check_eq("v7 source dune recipe restored",wsp(base)[P_DUNE],saved_dune,ctr) 147 gv_check_eq("v7 restored recipe regenerates complete HQ",dg_hq_parity(base),0,ctr) 148 gv_check_eq("v7 voxel payload retained",dg_equal(wvx(base),(base+O_SAVE+SAVE_HDR) as *u8,WX*WY*WZ),1,ctr) 149 gv_check_eq("exported save offset owns the dedicated image",save_off(),O_SAVE,ctr) 150 gv_check_eq("exported save capacity matches serialized bytes",save_capacity(),SAVE_LEN,ctr) 151 gv_check("save arena follows all inspection state",O_SAVE>=O_INSPECTION+INSPECTION_WORDS*8,ctr) 152 gv_check("save arena excludes physical spring state",O_SAVE>=O_SOFT+MOB_CAP*SB_PTS*SD_STRIDE*8,ctr) 153 gv_check_eq("visitor allocation floor follows save image",O_WCM,O_SAVE+SAVE_LEN,ctr) 154 gv_kv("dedicated_save_arena_bytes",SAVE_LEN) 155 gv_check_eq("same saved image loads twice without being overwritten",wc_save_apply_bytes(base,save_bytes),0,ctr) 156 gv_check_eq("repeat restore leaves valid image checksum",wc_save_ck(base),((base+O_SAVE) as *i64)[11],ctr) 157 var malformed:i64=0 158 while malformed<3 { 159 let valid_bytes:i64=wc_save_build(base) 160 let recipe:*i64=wc_save_recipe(base) 161 if malformed==0{recipe[0]=SAVE_RECIPE_COUNT+1} 162 if malformed==1{recipe[SAVE_RECIPE_COUNT]=0-1} 163 if malformed==2{recipe[SAVE_RECIPE_COUNT]=GA_DUNE_PACK_MAX+1} 164 dg_copy(capture,arena,CRAFT_EXT_TOTAL) 165 gv_check_eq("malformed v7 metadata refused",wc_save_apply_bytes(base,valid_bytes),SAVE_RC_RECIPE,ctr) 166 gv_check_eq("malformed v7 refusal preserves entire arena",dg_equal(capture,arena,CRAFT_EXT_TOTAL),1,ctr) 167 malformed=malformed+1 168 } 169 wc_save_build(base) 170 171 gv_kv("save_recipe_identity_persisted",1) 172 let gp: *i64 = wgp(base) 173 gp[0] = GENP_MAGIC; gp[1] = 1; gp[2] = P_DUNE; gp[3] = 0 174 let baseline_start: i64 = sys_clock_now_us() 175 init_impl_v(base,2,20260728) 176 gv_kv("disabled_boot_us",sys_clock_now_us()-baseline_start) 177 gv_check_eq("gen-time override disables Beach relief before generation",sp[P_DUNE],0,ctr) 178 gv_check_eq("override application count",s[S_GENP],1,ctr) 179 gp[3] = BEACH_DUNE_RECIPE 180 init_impl_v(base,2,20260728) 181 gv_check_eq("gen-time override enables actual Beach height cache",dg_hq_parity(base),0,ctr) 182 183 var refusal:i64=0 184 while refusal<3 { 185 gp[0]=GENP_MAGIC;gp[1]=2;gp[2]=P_DUNE;gp[3]=BEACH_DUNE_RECIPE 186 gp[4]=P_WPIPE;gp[5]=0 187 var expected_rc:i64=WC_INIT_DUNE_COMPOSITION 188 if refusal==0{gp[3]=0-1;expected_rc=WC_INIT_DUNE_INVALID} 189 if refusal==1{gp[5]=1} 190 if refusal==2{gp[4]=P_ERODE;gp[5]=1} 191 dg_copy(capture,arena,CRAFT_EXT_TOTAL) 192 gv_check_eq("invalid or mixed relief recipe refused before init",init_impl_v(base,2,20260728),expected_rc,ctr) 193 gv_check_eq("init refusal preserves entire active arena",dg_equal(capture,arena,CRAFT_EXT_TOTAL),1,ctr) 194 refusal=refusal+1 195 } 196 gp[1]=1;gp[2]=P_DUNE;gp[3]=0 197 init_impl_v(base,2,20260728) 198 let legacy_bytes:i64=SAVE_HDR+SAVE_BODY_V6 199 wc_save_build(base) 200 let legacy:*i64=(base+O_SAVE) as *i64 201 legacy[1]=SAVE_VER6;legacy[11]=wc_save_ck(base) 202 dg_copy(capture,(base+O_SAVE) as *u8,legacy_bytes) 203 gp[3]=BEACH_DUNE_RECIPE;init_impl_v(base,2,20260728) 204 dg_copy((base+O_SAVE) as *u8,capture,legacy_bytes) 205 gv_check_eq("legacy v6 still loads",wc_save_apply_bytes(base,legacy_bytes),0,ctr) 206 gv_check_eq("legacy v6 explicitly restores zero relief",sp[P_DUNE],0,ctr) 207 gv_check_eq("legacy v6 HQ matches preserved zero-relief voxels",dg_hq_parity(base),0,ctr) 208 209 // Generate actual voxel columns and HQ through the same owner for every coast orientation. 210 var dgdir:i64=0;var column_bad:i64=0;var column_count:i64=0 211 while dgdir<4 { 212 wc_spec(base,2);sp[P_OCEAN]=dgdir+(612<<2)+(20<<12)+(4<<18) 213 var dd:i64=0-4 214 while dd<=4 { 215 var ax:i64=40;var az:i64=100-dd 216 if dgdir==1{az=100+dd};if dgdir==2{ax=100-dd;az=40};if dgdir==3{ax=100+dd;az=40} 217 gencol(base,32,32,ax,az,123) 218 let top:i64=wsp_beach_ocean(sp,ax,az,wheight(base,ax,az,123)) 219 let wantedq:i64=wsp_beach_ocean_q(sp,ax,az,wheight_qe(base,ax,az,123)) 220 if hq_get(base,32,32)!=wantedq{column_bad=column_bad+1} 221 if vget(base,32,top,32)==0{column_bad=column_bad+1} 222 if top>=sp[P_WATER]{if vget(base,32,top+1,32)!=0{column_bad=column_bad+1}} 223 column_count=column_count+1;dd=dd+1 224 };dgdir=dgdir+1 225 } 226 gv_check_eq("four shore directions actual voxel top and HQ agree",column_bad,0,ctr) 227 gv_kv("generated_coast_columns",column_count) 228 gp[0]=GENP_MAGIC;gp[1]=1;gp[2]=P_DUNE;gp[3]=0 229 init_impl_v(base,2,20260728) 230 wc_save_build(base) 231 let v5hd:*i64=(base+O_SAVE) as *i64 232 v5hd[1]=SAVE_VER5;v5hd[11]=wc_save_ck_v5(base) 233 let v5bytes:i64=SAVE_HDR+SAVE_BODY_V5 234 dg_copy(capture,(base+O_SAVE) as *u8,v5bytes) 235 gp[3]=BEACH_DUNE_RECIPE;init_impl_v(base,2,999) 236 dg_copy((base+O_SAVE) as *u8,capture,v5bytes) 237 gv_check_eq("legacy v5 image still loads",wc_save_apply_bytes(base,v5bytes),0,ctr) 238 gv_check_eq("legacy v5 selects explicit zero relief",sp[P_DUNE],0,ctr) 239 gv_check_eq("legacy v5 derived HQ matches its zero-relief recipe",dg_hq_parity(base),0,ctr) 240 var invalid:i64=0 241 while invalid<3 { 242 let n:i64=wc_save_build(base) 243 let ih:*i64=(base+O_SAVE) as *i64 244 var wanted:i64=SAVE_RC_LENGTH;var inputn:i64=n-8 245 if invalid==1{ih[1]=SAVE_VER+1;inputn=n;wanted=0-2} 246 if invalid==2{let rr:*i64=wc_save_recipe(base);rr[SAVE_RECIPE_COUNT]=BEACH_DUNE_RECIPE;var ri:i64=0;var ra:i64=1;while ri<WC_SPECN{if genp_dune_gen_ok(ri)==1{if ri==P_WPIPE{rr[ra]=1};ra=ra+1};ri=ri+1};ih[11]=wc_save_ck(base);inputn=n;wanted=SAVE_RC_RECIPE} 247 dg_copy(capture,arena,CRAFT_EXT_TOTAL) 248 gv_check_eq("truncated unknown-version or incompatible serialized recipe refused",wc_save_apply_bytes(base,inputn),wanted,ctr) 249 gv_check_eq("serialized boundary refusal preserves complete arena",dg_equal(capture,arena,CRAFT_EXT_TOTAL),1,ctr) 250 invalid=invalid+1 251 } 252 sys_munmap(arena,CRAFT_EXT_TOTAL); sys_munmap(capture,CRAFT_EXT_TOTAL) 253 return gv_verdict("BEACH-DUNES" as *u8,ctr,"native geometry/contact; browser GPU parity, near/mid visuals and v5/v6 historical recipe inputs beyond zero-relief remain unknown" as *u8) 254}