code wiki / _hdl_build / nx_craft_relief_canonical_gate_t143.nx
nx_craft_relief_canonical_gate_t143.nx source
↩ module page · 254 lines · 13054 B
1// Private actual-engine qualification. No network, production data or hardware writes.
2import "nx_wasm_craft_move_t72.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}