code wiki / (root) / nx_beach_controller_contact_gate.nx

nx_beach_controller_contact_gate.nx source

↩ module page · 92 lines · 4750 B

1import "nx_wasm_craft.nx" 2import "nx_gate_verdict.nx" 3func ccg_pose(base: i64, x: i64, y: i64, z: i64, vy: i64, grounded: i64) -> i64 { 4 let s: *i64=wst(base) 5 s[S_CX]=x; s[S_CY]=y; s[S_CZ]=z; s[S_VY]=vy; s[S_GROUNDED]=grounded 6 return 0 7} 8func main() -> i64 { 9 let c: *i64=gv_ctr() 10 let base: i64=sys_mmap(CRAFT_EXT_TOTAL) as i64 11 let s: *i64=wst(base) 12 let sp: *i64=wsp(base) 13 sp[P_SURF]=1; sp[P_WATER]=0 14 var z: i64=8 15 while z <= 13 { 16 var x: i64=8 17 while x <= 13 { hq_set(base,x,z,1024); vset(base,x,4,z,5); x=x+1 } 18 z=z+1 19 } 20 gv_check_eq("scratch box layout matches reserved words",__size_of(BeachContactBox),CONTACT_BOX_WORDS*8,c) 21 gv_check_eq("scratch result layout matches reserved words",__size_of(BeachContactResult),CONTACT_RESULT_WORDS*8,c) 22 var fits: i64=0 23 if CRAFT_TOTAL <= WASM_MEM_BYTES { fits=1 } 24 gv_check_eq("initial arena including contact scratch fits initial Wasm memory",fits,1,c) 25 gv_kv("initial_arena_bytes",CRAFT_TOTAL) 26 gv_kv("extended_cast_arena_bytes",CRAFT_EXT_TOTAL) 27 gv_kv("initial_wasm_bytes",WASM_MEM_BYTES) 28 gv_kv("exported_required_pages",WASM_PAGES_REQ) 29 gv_check_eq("persistent save version unchanged",SAVE_VER,6,c) 30 gv_check_eq("persistent save byte contract unchanged",SAVE_LEN,853728,c) 31 vset(base,10,12,10,6) 32 ccg_pose(base,2432,3251,2688,0,0) 33 wc_player_motion(base,256,0,0) 34 gv_check_eq("actual airborne controller clips before wood",s[S_CX],2560,c) 35 gv_check_eq("wall tangency still allows gravity",s[S_CY],3242,c) 36 gv_check_eq("wall side contact does not ground player",s[S_GROUNDED],0,c) 37 gv_check_eq("admitted motion has no initial overlap",contact_initial_overlap_impl(base),0,c) 38 ccg_pose(base,2688,1715,2688,0,1) 39 wc_player_motion(base,40,0,0) 40 gv_check_eq("controller walks beneath high overhang",s[S_CX],2728,c) 41 gv_check_eq("continuous ground remains support beneath overhang",s[S_CY],1715,c) 42 ccg_pose(base,2688,2600,2688,600,0) 43 wc_player_motion(base,0,0,0) 44 gv_check_eq("controller upward sweep stops at ceiling underside",s[S_CY],2944,c) 45 gv_check_eq("ceiling stops vertical velocity",s[S_VY],0,c) 46 ccg_pose(base,2688,3830,2688,-120,0) 47 wc_player_motion(base,0,0,0) 48 gv_check_eq("controller falling lands on crossed platform",s[S_CY],3763,c) 49 gv_check_eq("platform landing marks grounded",s[S_GROUNDED],1,c) 50 // The point footprint can slide along an exposed wall face, but a shared solid 51 // face is interior to the roof union. A four-cell corner follows the same rule. 52 vset(base,9,12,10,6) 53 ccg_pose(base,2560,2600,2688,600,0) 54 wc_player_motion(base,0,0,0) 55 gv_check_eq("continuous roof seam cannot be tunneled",s[S_CY],2944,c) 56 vset(base,10,12,9,6); vset(base,9,12,9,6) 57 ccg_pose(base,2560,2600,2560,600,0) 58 wc_player_motion(base,0,0,0) 59 gv_check_eq("continuous four-cell roof corner cannot be tunneled",s[S_CY],2944,c) 60 ccg_pose(base,2560,3251,2560,0,0) 61 wc_player_motion(base,0,0,0) 62 gv_check_eq("union seam initial penetration is explicit",contact_initial_overlap_impl(base),1,c) 63 gv_check_eq("initial overlap is not an arbitrary relocation",s[S_CY],3251,c) 64 vset(base,10,12,10,0); vset(base,9,12,10,0) 65 vset(base,10,12,9,0); vset(base,9,12,9,0) 66 vset(base,10,5,10,6) 67 ccg_pose(base,2432,1715,2688,0,1) 68 wc_player_motion(base,256,0,0) 69 gv_check_eq("grounded controller retains legitimate step movement",s[S_CX],2688,c) 70 gv_check_eq("grounded step resolves up across down trajectory",s[S_CY],1971,c) 71 gv_check_eq("stepped body remains supported",s[S_GROUNDED],1,c) 72 vset(base,10,5,10,0) 73 // A post-motion personal-space push must use actual-pose admission too. 74 vset(base,10,12,10,7) 75 ccg_pose(base,2432,3251,2688,0,0) 76 wc_player_axis_apply(base,0,256,0) 77 gv_check_eq("shared push admission cannot place body inside leaf",s[S_CX],2560,c) 78 // Native seeded initialization and actual apply2 include world streaming and NPC pushes. 79 let seeded: i64=sys_mmap(CRAFT_EXT_TOTAL) as i64 80 init_impl_v(seeded,BEACH_RELEASE_WORLD,CRAFT_DEFAULT_SEED) 81 let ss: *i64=wst(seeded) 82 let field: i64=wc_surface_source(seeded,ss[S_CX],ss[S_CZ]) 83 var spawn_ok: i64=0 84 if ss[S_CY] >= 0 { if field >= 0 { if ss[S_CY]-EYE >= field { spawn_ok=1 } } } 85 gv_check_eq("real seeded spawn is above continuous terrain",spawn_ok,1,c) 86 apply2_impl(seeded,0,0,0,0,0,0,0,0,0) 87 gv_check_eq("seeded controller frame starts without body penetration",contact_initial_overlap_impl(seeded),0,c) 88 let expected_spec: i64=sys_mmap(CRAFT_EXT_TOTAL) as i64 89 wc_spec(expected_spec,BEACH_RELEASE_WORLD) 90 gv_check_eq("release bush does not overwrite world foliage palette",wsp(seeded)[P_PAL+7],wsp(expected_spec)[P_PAL+7],c) 91 return gv_verdict("BEACH-CONTROLLER-CONTACT",c,"Actual controller phase, solid-union point contacts, stairs, support, spawn and palette ownership; browser replay and anatomical width remain unverified.") 92}