code wiki / _hdl_build / nx_wolf_walk_gate.nx

nx_wolf_walk_gate.nx source

↩ module page · 162 lines · 7192 B

1// nx_wolf_walk_gate.nx -- the ANIMAL moves: the bestiary wolf WALKS on a quadruped FK rig with a real diagonal 2// gait, rendered on the production shader, shipped as sovereign video. Completes the operator's species span 3// (person waves -> beastman looks around -> wolf walks). 4// T1 valid APNG (acTL num_frames == N) 5// T2 MOTION present (frame checksums differ) 6// T3 DIAGONAL GAIT correct: at peak phase, FL and FR feet displace in OPPOSITE x directions (and FL matches HR) 7// T4 wolf on screen (foreground coverage >= 5%) 8// Writes knowledge/synth_wolfwalk.png (APNG) + knowledge/synth_wolfwalk_f0.png (still). license_tier: ORIGINAL 9// expect_exit: 0 10import "nx_syscalls.nx" 11import "nx_quadruped.nx" 12import "nx_apng.nx" 13import "nx_png.nx" 14 15func hw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 16func pn(v: i64) -> i64 { 17 let b: *u8 = sys_mmap(32) as *u8 18 var x: i64 = v; var neg: i64 = 0 19 if x < 0 { neg = 1; x = 0 - x } 20 var i: i64 = 31 21 if x == 0 { b[i] = 48 as u8; i = i - 1 } 22 while x > 0 { b[i] = (48 + x % 10) as u8; x = x / 10; i = i - 1 } 23 if neg == 1 { b[i] = 45 as u8; i = i - 1 } 24 sys_write(1, (b as i64 + i + 1) as *u8, 31 - i) 25 return 0 26} 27func cksum(fb: *i64, n: i64) -> i64 { 28 var s: i64 = 1469598103 29 var i: i64 = 0 30 while i < n { s = (s * 31 + (fb[i] & 0xffffff)) & 0x0fffffffffffffff; i = i + 1 } 31 return s 32} 33func find4(buf: *u8, n: i64, a: i64, b: i64, c: i64, d: i64) -> i64 { 34 var i: i64 = 0 35 while i + 4 <= n { 36 if (buf[i]&0xff)==a { if (buf[i+1]&0xff)==b { if (buf[i+2]&0xff)==c { if (buf[i+3]&0xff)==d { return i } } } } 37 i = i + 1 38 } 39 return 0 - 1 40} 41func plcount(fb: *i64, n: i64) -> i64 { 42 var c: i64 = 0 43 var i: i64 = 0 44 while i < n { let px: i64 = fb[i]; let r: i64 = px & 255; let b: i64 = (px >> 16) & 255; if r >= b { c = c + 1 } i = i + 1 } 45 return c 46} 47 48const RW: i64 = 144 49const RH: i64 = 96 50const RFOCAL: i64 = 164 // 586 * 144 / 512 51 52func ww_render(base: i64, fb: *i64, yaw: i64) -> i64 { 53 let R: i64 = 5 * 1024 54 let cy4: i64 = it_cos4096(yaw) 55 let sy4: i64 = it_sin4096(yaw) 56 let rox: i64 = 0 - sy4 * R / 4096 57 let roz: i64 = 0 - cy4 * R / 4096 58 var y: i64 = 0 59 while y < RH { 60 let mc1: i64 = 24 + y * 30 / RH 61 let mc2: i64 = 26 + y * 28 / RH 62 let mc3: i64 = 40 + y * 26 / RH 63 let misscol: i64 = mc1 + mc2 * 256 + mc3 * 65536 64 var x: i64 = 0 65 while x < RW { 66 let ndcx: i64 = (2 * x + 1 - RW) * 1024 / (2 * RFOCAL) 67 let ndcy: i64 = (RH - (2 * y + 1)) * 1024 / (2 * RFOCAL) 68 let rl: i64 = sdf_isqrt(ndcx * ndcx + ndcy * ndcy + 1024 * 1024) 69 let vdx: i64 = ndcx * 1024 / rl 70 let rdy: i64 = ndcy * 1024 / rl 71 let vdz: i64 = 1024 * 1024 / rl 72 let rdx: i64 = (cy4 * vdx + sy4 * vdz) / 4096 73 let rdz: i64 = (0 - sy4 * vdx + cy4 * vdz) / 4096 74 let col: i64 = sdf_shade_ray(base, rox, 0, roz, rdx, rdy, rdz, 176, 158, 138, misscol) // grey-brown fur tone 75 fb[y * RW + x] = col 76 x = x + 1 77 } 78 y = y + 1 79 } 80 return 0 81} 82 83func main() -> i64 { 84 hw("=== nx_wolf_walk_gate -- the bestiary WOLF WALKS (quadruped FK + diagonal gait -> sovereign video) ===\n" as *u8) 85 let base: i64 = sys_mmap(sdf_bytes()) as i64 86 let fb: *i64 = sys_mmap(RW * RH * 8) as *i64 87 let sk: i64 = sys_mmap(sk_bytes()) as i64 88 quad_build(sk) 89 90 // T3 first: diagonal coordination at peak phase (t=1024, sin=+1) 91 quad_gait_pose(sk, 1024, 26) 92 sk_update(sk) 93 let bflf: *i64 = sk_bone(sk, QR_FLFOOT) 94 let bflh: *i64 = sk_bone(sk, QR_FLHIP) 95 let bfrf: *i64 = sk_bone(sk, QR_FRFOOT) 96 let bfrh: *i64 = sk_bone(sk, QR_FRHIP) 97 let bhrf: *i64 = sk_bone(sk, QR_HRFOOT) 98 let bhrh: *i64 = sk_bone(sk, QR_HRHIP) 99 let dxFL: i64 = bflf[15] - bflh[15] 100 let dxFR: i64 = bfrf[15] - bfrh[15] 101 let dxHR: i64 = bhrf[15] - bhrh[15] 102 hw(" peak-phase foot swing: dxFL=" as *u8); pn(dxFL); hw(" dxFR=" as *u8); pn(dxFR); hw(" dxHR=" as *u8); pn(dxHR); hw("\n" as *u8) 103 104 let apbuf: *u8 = sys_mmap(16 * 1024 * 1024) 105 let seq: *i64 = sys_mmap(8) as *i64; seq[0] = 0 106 let nframes: i64 = 8 107 var o: i64 = apng_open(apbuf, RW, RH, nframes) 108 var sum0: i64 = 0 109 var summid: i64 = 0 110 var fg0: i64 = 0 111 var f: i64 = 0 112 while f < nframes { 113 let t: i64 = f * 4096 / nframes 114 quad_gait_pose(sk, t, 26) 115 sk_update(sk) 116 let np: i64 = quadpose_fill(base, sk) 117 ww_render(base, fb, 220) // slight 3/4 view; side-on so the stride reads 118 if f == 0 { 119 sum0 = cksum(fb, RW * RH) 120 fg0 = plcount(fb, RW * RH) 121 write_png(fb, RW, RH, "knowledge/synth_wolfwalk_f0.png" as *u8) 122 hw(" wolf: parts=" as *u8); pn(np); hw(" fg-px=" as *u8); pn(fg0); hw("\n" as *u8) 123 } 124 if f == nframes / 2 { summid = cksum(fb, RW * RH) } 125 var first: i64 = 0 126 if f == 0 { first = 1 } 127 o = apng_frame(apbuf, o, seq, fb, RW, RH, 6, first) 128 f = f + 1 129 } 130 o = apng_close(apbuf, o) 131 let fd: i64 = sys_openat_wr("knowledge/synth_wolfwalk.png" as *u8, 0x1a4) 132 if fd >= 0 { sys_write(fd, apbuf, o); sys_close(fd) } 133 hw(" wrote knowledge/synth_wolfwalk.png bytes=" as *u8); pn(o); hw(" frames=" as *u8); pn(nframes); hw("\n" as *u8) 134 135 var fails: i64 = 0 136 var t1: i64 = 1 137 if (apbuf[0]&0xff) != 137 { t1 = 0 } 138 let actl: i64 = find4(apbuf, o, 97, 99, 84, 76) 139 var nf_field: i64 = 0 140 if actl >= 0 { nf_field = ((apbuf[actl+4]&0xff)<<24)|((apbuf[actl+5]&0xff)<<16)|((apbuf[actl+6]&0xff)<<8)|(apbuf[actl+7]&0xff) } 141 if nf_field != nframes { t1 = 0 } 142 if find4(apbuf, o, 102, 100, 65, 84) < 0 { t1 = 0 } 143 if t1 == 1 { hw("T1 PASS valid APNG (acTL num_frames=" as *u8); pn(nf_field); hw(")\n" as *u8) } 144 else { fails = fails + 1; hw("T1 FAIL APNG invalid\n" as *u8) } 145 if sum0 != summid { hw("T2 PASS motion present (the wolf strides)\n" as *u8) } 146 else { fails = fails + 1; hw("T2 FAIL no motion\n" as *u8) } 147 var t3: i64 = 1 148 if dxFL * dxFR >= 0 { t3 = 0 } // FL vs FR must oppose 149 if dxFL * dxHR <= 0 { t3 = 0 } // FL and HR must match (diagonal pair) 150 var mag: i64 = dxFL 151 if mag < 0 { mag = 0 - mag } 152 if mag < 120 { t3 = 0 } // real swing, not jitter 153 if t3 == 1 { hw("T3 PASS diagonal gait (FL opposes FR, matches HR; swing magnitude " as *u8); pn(mag); hw(")\n" as *u8) } 154 else { fails = fails + 1; hw("T3 FAIL gait coordination\n" as *u8) } 155 let fgmin: i64 = RW * RH * 5 / 100 156 if fg0 >= fgmin { hw("T4 PASS wolf on screen (" as *u8); pn(fg0 * 100 / (RW * RH)); hw(" percent)\n" as *u8) } 157 else { fails = fails + 1; hw("T4 FAIL not visible (fg=" as *u8); pn(fg0); hw(")\n" as *u8) } 158 159 if fails == 0 { hw("WOLF-WALK-GATE 4/4 GREEN -- a quadruped bestiary animal WALKS with a correct diagonal gait as sovereign video\n" as *u8); sys_exit(0); return 0 } 160 hw("WOLF-WALK-GATE RED fails=" as *u8); pn(fails); hw("\n" as *u8) 161 sys_exit(1); return 1 162}