code wiki / _hdl_build / nx_craft_save_recovery_gate_t21.nx

nx_craft_save_recovery_gate_t21.nx source

↩ module page · 89 lines · 5000 B

1// Actual engine functions over isolated allocated arena; no filesystem or estate writes. 2import "nx_wasm_craft_journal_index_t21.nx" 3import "nx_gate_verdict.nx" 4func sr_copy(dst: *u8,src: *u8,n: i64) -> i64 { 5 var i: i64=0;while i<n { dst[i]=src[i];i=i+1 };return n 6} 7func sr_equal(a: *u8,b: *u8,n: i64) -> i64 { 8 var i: i64=0;while i<n { if a[i]!=b[i] { return 0 };i=i+1 };return 1 9} 10func sr_save(base: i64,copy: *u8) -> i64 { 11 let n: i64=wc_save_build(base) 12 sr_copy(copy,(base+O_SAVE) as *u8,n);return n 13} 14func sr_load(base: i64,copy: *u8,n: i64) -> i64 { 15 sr_copy((base+O_SAVE) as *u8,copy,n);return wc_save_apply(base) 16} 17func sr_field(base: i64) -> i64 { 18 let s: *i64=wst(base);return wc_surface_source(base,s[S_CX],s[S_CZ]) 19} 20func main() -> i64 { 21 let arena: *u8=sys_mmap(CRAFT_EXT_TOTAL) 22 let save: *u8=sys_mmap(SAVE_LEN) 23 let expected: *u8=sys_mmap(CRAFT_EXT_TOTAL) 24 if (arena as i64)<=0||(save as i64)<=0||(expected as i64)<=0 { return 3 } 25 let base: i64=arena as i64;let s: *i64=wst(base);let hd: *i64=(base+O_SAVE) as *i64 26 let ctr: *i64=gv_ctr();gv_head("CRAFT SAVE RECOVERY / actual engine state" as *u8) 27 init_impl_v(base,2,123) 28 let floor: i64=sr_field(base) 29 s[S_CY]=floor+EYE-1 30 let n: i64=sr_save(base,save) 31 init_impl_v(base,2,123) 32 gv_check("authentic save loads and recovers one-Q8 penetration" as *u8,sr_load(base,save,n)==0&&s[S_CY]==floor+EYE,ctr) 33 gv_check("real vertical tick remains on surface" as *u8,wc_player_vertical_apply(base,0)==floor+EYE,ctr) 34 var shiftcase: i64=0 35 while shiftcase<2 { 36 init_impl_v(base,2,123) 37 var dz: i64=0;if shiftcase==1 { dz=0-16 } 38 wc_shift(base,16,dz) 39 sr_copy(expected,(base+O_HQ) as *u8,WX*WZ*8) 40 let before: i64=sr_field(base);sr_save(base,save) 41 init_impl_v(base,2,123) 42 gv_check("shifted X or XZ restore reconstructs exact height cache" as *u8,sr_load(base,save,n)==0&&sr_equal(expected,(base+O_HQ) as *u8,WX*WZ*8)==1&&sr_field(base)==before,ctr) 43 shiftcase=shiftcase+1 44 } 45 init_impl_v(base,2,321) 46 sr_copy(expected,(base+O_HQ) as *u8,WX*WZ*8);sr_save(base,save) 47 init_impl_v(base,2,123) 48 gv_check("different restored seed reconstructs exact height cache" as *u8,sr_load(base,save,n)==0&&sr_equal(expected,(base+O_HQ) as *u8,WX*WZ*8)==1,ctr) 49 var airborne: i64=0 50 while airborne<2 { 51 init_impl_v(base,2,123) 52 let wanted: i64=sr_field(base)+EYE+airborne*5*256 53 s[S_CY]=wanted;sr_save(base,save) 54 init_impl_v(base,2,123) 55 gv_check("clear standing or airborne saved camera remains unchanged" as *u8,sr_load(base,save,n)==0&&s[S_CY]==wanted&&hd[1]==SAVE_VER,ctr) 56 airborne=airborne+1 57 } 58 init_impl_v(base,2,123) 59 let x: i64=s[S_CX] >> 8;let z: i64=s[S_CZ] >> 8;let obstacle: i64=(sr_field(base) >> 8)+1 60 vset(base,x,obstacle,z,6);sr_copy(expected,wvx(base),WX*WY*WZ);sr_save(base,save) 61 init_impl_v(base,2,123) 62 gv_check("occupied-volume restore selects clear support without losing voxel" as *u8,sr_load(base,save,n)==0&&wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ])==1&&s[S_CY]-EYE>=(obstacle+1)*256&&sr_equal(expected,wvx(base),WX*WY*WZ)==1,ctr) 63 init_impl_v(base,2,123);wc_shift(base,16,0);wc_edit(base,32,24,32,6) 64 sr_copy(expected,wvx(base),WX*WY*WZ) 65 sr_copy(((expected as i64)+WX*WY*WZ) as *u8,(base+O_EJRN) as *u8,EJRN_BYTES) 66 sr_save(base,save);init_impl_v(base,2,123) 67 gv_check("actual player edit and nonempty journal survive restore byte for byte" as *u8,sr_load(base,save,n)==0&&sr_equal(expected,wvx(base),WX*WY*WZ)==1&&sr_equal(((expected as i64)+WX*WY*WZ) as *u8,(base+O_EJRN) as *u8,EJRN_BYTES)==1&&ej_get(base,48,24,32)==6,ctr) 68 init_impl_v(base,2,123);let wanted: i64=s[S_CY];wc_save_build(base) 69 hd[1]=SAVE_VER5;hd[11]=wc_save_ck_v5(base) 70 gv_check("legacy version-five checksum geometry and camera preserved" as *u8,wc_save_apply(base)==0&&s[S_CY]==wanted&&hd[1]==SAVE_VER5,ctr) 71 var refusal: i64=0 72 while refusal<3 { 73 init_impl_v(base,2,123);wc_save_build(base) 74 if refusal==0 { hd[0]=hd[0]+1 } 75 if refusal==1 { hd[1]=hd[1]+100 } 76 if refusal==2 { hd[11]=hd[11]+1 } 77 sr_copy(expected,arena,CRAFT_EXT_TOTAL) 78 gv_check("invalid magic/version/checksum retains entire arena unchanged" as *u8,wc_save_apply(base)==(0-refusal-1)&&sr_equal(expected,arena,CRAFT_EXT_TOTAL)==1,ctr) 79 refusal=refusal+1 80 } 81 init_impl_v(base,2,123) 82 let closedx: i64=s[S_CX] >> 8;let closedz: i64=s[S_CZ] >> 8;let held: i64=s[S_CY] 83 var y: i64=0;while y<WY { vset(base,closedx,y,closedz,6);y=y+1 } 84 sr_save(base,save);init_impl_v(base,2,123) 85 gv_check("fully occupied column is explicitly unresolved" as *u8,sr_load(base,save,n)==0&&wc_player_recover(base)==(0-1)&&wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ])==0,ctr) 86 gv_check("unresolved state cannot fall further" as *u8,wc_player_vertical_apply(base,0)==held,ctr) 87 sys_munmap(arena,CRAFT_EXT_TOTAL);sys_munmap(save,SAVE_LEN);sys_munmap(expected,CRAFT_EXT_TOTAL) 88 return gv_verdict("CRAFT-SAVE-RECOVERY" as *u8,ctr,"actual engine and saved edits; rendered Y parity, visible unresolved diagnostic and per-frame cost remain separate acceptance" as *u8) 89}