code wiki / (root) / nx_craft_placement_wasm_gate_t316.nx

nx_craft_placement_wasm_gate_t316.nx source

↩ module page · 84 lines · 4553 B

1// nx_craft_placement_wasm_gate_t316.nx -- Tests placement VM functionality against specified terrain and actor seat conditions. 2import "nx_craft_imported_placement_candidate_t316.nx" 3import "nx_gate_verdict.nx" 4import "nx_wasm_vm.nx" 5func placement_vm_case(m:*WasmMod,c:*i64)->i64 { 6 let base:i64=m.mem as i64 7 let spec:*i64=wsp(base);spec[P_SURF]=1;spec[P_WATER]=0 8 hq_set(base,10,10,1152);hq_set(base,11,10,1408);hq_set(base,10,11,1152);hq_set(base,11,11,1408) 9 let x:i64=10*256+128;let z:i64=10*256+128 10 gv_check_eq("fractional terrain placement",placement_vm_floor(m,x,z),1536,c) 11 gv_check_eq("actor seat repairs below-field position",placement_vm_seat(m,x,z,1000),1536,c) 12 gv_check_eq("negative x refused",placement_vm_floor(m,-1,z),-1,c) 13 gv_check_eq("negative z refused",placement_vm_floor(m,x,-1),-1,c) 14 gv_check_eq("last x corner lacks interpolation neighbor",placement_vm_floor(m,(WX-1)*256,z),-1,c) 15 gv_check_eq("last z corner lacks interpolation neighbor",placement_vm_floor(m,x,(WZ-1)*256),-1,c) 16 vset(base,10,8,10,6) 17 gv_check_eq("overhead canopy does not become arrival floor",placement_vm_floor(m,x,z),1536,c) 18 gv_check_eq("legacy sky scan distinguishes canopy",wc_contact_floor_q(base,x,z,WY-1),2304,c) 19 vset(base,10,7,10,6) 20 gv_check_eq("body course obstruction rises through contiguous structure",placement_vm_floor(m,x,z),2304,c) 21 vset(base,10,7,10,0);vset(base,10,8,10,0);vset(base,10,6,10,5) 22 gv_check_eq("terrain voxel ignored in continuous mode",placement_vm_floor(m,x,z),1536,c) 23 spec[P_SURF]=0 24 gv_check_eq("voxel mode retains top solid",placement_vm_floor(m,x,z),1792,c) 25 gv_check_eq("voxel actor seat respects supplied altitude",placement_vm_seat(m,x,z,1000),-1,c) 26 spec[P_SURF]=1 27 var valid:i64=1;var offset:i64=0 28 while offset<256{if placement_vm_floor(m,10*256+offset,z)!=1408+offset{valid=0};offset=offset+1} 29 gv_check("all256 fractional x samples follow actual linear field",valid,c) 30 gv_check_eq("body registry remains available",wm_run(m,"body_init",2,m.mem_bytes,0,0,0,2),0,c) 31 gv_check_eq("body ABI stage unchanged",O_IMPORTED_STAGE,27534176,c) 32 gv_check_eq("runtime pages unchanged",WASM_PAGES_REQ,421,c) 33 gv_check_eq("actual bytecode below-field support",wm_run(m,"wc_contact_floor_below_q",0,x,z,WY-1,1535,5),1536,c) 34 gv_check_eq("old rule negative control",placement_old_support(base,x,z,WY-1,1535),-1,c) 35 let state:*i64=wst(base);state[S_CY]=1535+EYE 36 gv_check_eq("actual player current-column target",wm_run(m,"wstand_here",0,x,z,0,0,3),1536+EYE,c) 37 return 0 38} 39 40func placement_vm_floor(m:*WasmMod,x:i64,z:i64)->i64{return wm_run(m,"wc_place_floor_q",0,x,z,0,0,3)} 41func placement_vm_seat(m:*WasmMod,x:i64,z:i64,y:i64)->i64{return wm_run(m,"wc_actor_seat_q",0,x,z,y,0,4)} 42func main(argc:i64,argv:*i64)->i64 { 43 if argc!=3{return 3};let c:*i64=gv_ctr();gv_head("PLACEMENT-ACTUAL-PLAIN-SHARED") 44 var a:i64=1;while a<3{ 45 let box:*i64=sys_mmap(8) as *i64;let bytes:*u8=sys_read_file(argv[a] as *u8,box) 46 if (bytes as i64)<=0{return 3};let m:*WasmMod=wm_new(bytes,box[0]);let rc:i64=wm_parse(m) 47 gv_check("candidate bytecode parses",rc==0,c);if rc!=0{return 3} 48 gv_check("placement export exists",wm_find_export(m,"wc_place_floor_q")>=0,c) 49 gv_check("actor seat export exists",wm_find_export(m,"wc_actor_seat_q")>=0,c) 50 let pages:i64=wm_run(m,"wasm_pages_req",0,0,0,0,0,0) 51 gv_check_eq("actual runtime required pages preserved",pages,421,c) 52 if pages!=421{return 3} 53 if m.mem_bytes<pages*65536{let expanded:*u8=sys_mmap(pages*65536);var k:i64=0;while k<m.mem_bytes{expanded[k]=m.mem[k];k=k+1};m.mem=expanded;m.mem_bytes=pages*65536} 54 gv_check_eq("actual body staging offset preserved",wm_run(m,"body_stage_off",0,0,0,0,0,0),27534176,c) 55 placement_vm_case(m,c);a=a+1 56 } 57 return gv_verdict("PLACEMENT-ACTUAL-PLAIN-SHARED",c,"Both actual compiled runtimes interpreted; threaded host execution and page placement remain separate.") 58} 59 60func placement_old_support(base: i64, xq: i64, zq: i64, top: i64, ceiling: i64) -> i64 { 61 let sp: *i64 = wsp(base) 62 var y: i64 = top 63 if y >= WY { y = WY - 1 } 64 var floor: i64 = 0 - 1 65 if sp[P_SURF] == 1 { 66 floor = wc_surface_source(base,xq,zq) 67 if floor < 0 { return 0 - 1 } 68 if floor > ceiling { floor = 0 - 1 } 69 } 70 while y >= 0 { 71 let b: i64 = vget(base,xq >> 8,y,zq >> 8) 72 var eligible: i64 = vsolid(base,xq >> 8,y,zq >> 8) 73 if sp[P_SURF] == 1 { if wterrain(b) == 1 { eligible = 0 } } 74 if eligible == 1 { 75 let celltop: i64 = (y+1)*256 76 if celltop <= ceiling { 77 if celltop > floor { floor = celltop } 78 return floor 79 } 80 } 81 y = y - 1 82 } 83 return floor 84}