nx_knight_bind_t24.nx source
↩ module page · 68 lines · 4157 B
1// Isolated real-asset bind qualification. Fixed source and output fixture; no serving writes.
2import "nx_syscalls.nx"
3import "nx_fbx_import.nx"
4import "nx_fbx_bind.nx"
5import "nx_nxa.nx"
6import "nx_base64.nx"
7import "nx_readcap_lib.nx"
8func kbw(s: *u8) -> i64 { var n:i64=0;while s[n]!=(0 as u8){n=n+1};sys_write(1,s,n);return 0 }
9func kbn(n:i64) -> i64 {var d:*u8=sys_mmap(32);var m:i64=n;var i:i64=0;if m<0{kbw("-" as *u8);m=0-m};if m==0{kbw("0" as *u8)};while m>0{d[i]=(48+m%10) as u8;i=i+1;m=m/10};while i>0{i=i-1;sys_write(1,((d as i64)+i) as *u8,1)};sys_munmap(d,32);return 0}
10func kbv(s:*u8,n:i64)->i64{kbw(s);kbn(n);kbw("\n" as *u8);return 0}
11func main(argc:i64,argv:*i64)->i64 {
12 let encn:i64=11693160
13 let nxan:i64=11279224
14 let state:*i64=sys_mmap(24) as *i64
15 let enc:*u8=sys_mmap(encn)
16 let en:i64=rc_read_file_into("/volume1/homes/elderwesto/nishihost/sites/nishifamily/world/rigsrc-darkknight.txt" as *u8,enc,encn,state)
17 if rc_complete(state)==0||en!=encn{kbw("REFUSED source read\n" as *u8);return 4}
18 let b:*u8=sys_mmap(encn)
19 let n:i64=b64_decode(enc,en,b)
20 if n!=8769868{kbw("REFUSED decode identity\n" as *u8);return 4}
21 let asset:*u8=sys_mmap(nxan)
22 if rc_read_file_into("/volume1/homes/elderwesto/nishihost/sites/nishifamily/world/dark_knight.nxa" as *u8,asset,nxan,state)!=nxan||rc_complete(state)==0{return 4}
23 let vo:i64=nxa_counted_section(asset,nxan,nxa_tag4("VERT" as *u8),3)
24 let to:i64=nxa_counted_section(asset,nxan,nxa_tag4("TRIS" as *u8),3)
25 let so:i64=nxa_counted_section(asset,nxan,nxa_tag4("SKEL" as *u8),8)
26 let wo:i64=nxa_counted_section(asset,nxan,nxa_tag4("SKIN" as *u8),8)
27 if vo<0||to<0||so<0||wo<0{return 4}
28 let vs:*i64=((asset as i64)+vo*8) as *i64
29 let ts:*i64=((asset as i64)+to*8) as *i64
30 let sk:*i64=((asset as i64)+so*8) as *i64
31 let sw:*i64=((asset as i64)+wo*8) as *i64
32 let nv:i64=vs[0];let nt:i64=ts[0]
33 if nv!=53296||nt!=98574||sk[0]!=113||sw[0]!=nv{return 4}
34 let v:*i64=sys_mmap(nv*24) as *i64
35 let t:*i64=sys_mmap(nt*24) as *i64
36 let st:*i64=sys_mmap(128) as *i64
37 st[0]=v as i64;st[1]=t as i64;st[2]=nv;st[3]=nt;st[12]=fbxc_big(fbxc_version(b,n))
38 fbx_walk(b,n,27,n,st)
39 kbv("vertices=" as *u8,st[4]);kbv("triangles=" as *u8,st[5]);kbv("geometries=" as *u8,st[9]);kbv("decode_failures=" as *u8,st[11])
40 if st[4]!=nv||st[5]!=nt||st[9]!=33||st[11]!=0{return 4}
41 var i:i64=0;var mismatch:i64=0
42 while i<nv*3{if v[i]*1000/1024!=vs[1+i]{mismatch=mismatch+1};i=i+1}
43 kbv("raw_vertex_mismatches=" as *u8,mismatch)
44 if mismatch!=0{return 4}
45 i=0;while i<nt*3{if t[i]!=ts[1+i]{mismatch=mismatch+1};i=i+1}
46 kbv("topology_mismatches=" as *u8,mismatch);if mismatch!=0{return 4}
47 i=0;while i<nv{var j:i64=0;var sum:i64=0;while j<4{let id:i64=sw[1+i*8+j];let w:i64=sw[1+i*8+4+j];if id<0||id>=sk[0]||w<0{return 4};sum=sum+w;j=j+1};if sum!=4096{return 4};i=i+1}
48 let scene:*FbxBindScene=sys_mmap(__size_of(FbxBindScene)) as *FbxBindScene
49 let lr:i64=fbb_load(b,n,scene);kbv("bind_load_rc=" as *u8,lr);if lr!=0{return 4}
50 let pr:i64=fbb_pose_models(b,n,scene);kbv("bind_pose_rc=" as *u8,pr);if pr!=0{return 4}
51 let fixed:*i64=sys_mmap(nv*24) as *i64
52 let ar:i64=fbb_apply_pose(scene,v,nv,fixed);kbv("bind_apply_rc=" as *u8,ar);if ar!=0{return 4}
53 let out:*u8=sys_mmap(nxan)
54 i=0;while i<nxan{out[i]=asset[i];i=i+1}
55 let ovs:*i64=((out as i64)+vo*8) as *i64
56 i=0;while i<nv*3{ovs[1+i]=fixed[i]*1000/1024;i=i+1}
57 let toc:*i64=((out as i64)+32) as *i64
58 let hdr:*i64=out as *i64
59 i=0;while i<hdr[2]{if toc[i*4]==nxa_tag4("VERT" as *u8){toc[i*4+3]=nxa_check2(1,ovs,1+nv*3)};i=i+1}
60 hdr[3]=nxa_check2(1,toc,hdr[2]*4)
61 if nxa_counted_section(out,nxan,nxa_tag4("VERT" as *u8),3)<0{return 4}
62 i=0;var preserved:i64=0;while i<nxan{if i>=vo*8&&i<vo*8+(1+nv*3)*8{}else{if i>=32+hdr[2]*32{if out[i]!=asset[i]{return 4};preserved=preserved+1}};i=i+1}
63 kbv("unchanged_nonvertex_payload_bytes=" as *u8,preserved)
64 let fd:i64=sys_openat_wr("/tmp/nx_knight_bind_t24.nxa" as *u8,MODE_0644)
65 if fd<0{return 4};let wr:i64=sys_write(fd,out,nxan);sys_close(fd);if wr!=nxan{return 4}
66 kbw("KNIGHT-BIND candidate written /tmp/nx_knight_bind_t24.nxa; originals untouched; ANIM absent; visible verification pending\n" as *u8)
67 return 0
68}