code wiki / _hdl_build / nx_indoor_gate.nx

nx_indoor_gate.nx source

↩ module page · 93 lines · 4653 B

1// nx_indoor_gate.nx -- ★R8: INDOOR scenes (room + constraint-solved furniture layout). 2// T1 a furnished room builds + renders (shell + furniture; interior renders, walls/floor fill the frame) 3// T2 ★CONSTRAINT VALIDITY: the placed furniture has ZERO overlapping pairs (collision-free layout) + in-bounds 4// T3 SEED VARIETY: different seeds -> different valid layouts (layout signature differs, both collision-free) 5// T4 determinism + interior render knowledge/nx_indoor.png (3 furnished rooms) 6// license_tier: ORIGINAL expect_exit: 0 7import "nx_syscalls.nx" 8import "nx_png.nx" 9import "nx_indoor.nx" 10 11func hw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 12func pn(v: i64) -> i64 { let b: *u8=sys_mmap(32) as *u8; var x: i64=v; var ng: i64=0; if x<0{ng=1;x=0-x} var i: i64=31; if x==0{b[i]=48 as u8;i=i-1} while x>0{b[i]=(48+x%10) as u8;x=x/10;i=i-1} if ng==1{b[i]=45 as u8;i=i-1} sys_write(1,(b as i64+i+1) as *u8,31-i); return 0 } 13func lum(px: i64) -> i64 { return (px&255)+((px>>8)&255)+((px>>16)&255) } 14func L1(a: *i64, b: *i64, n: i64) -> i64 { var s: i64=0; var i: i64=0; while i<n { var d: i64=(a[i]&255)-(b[i]&255); if d<0{d=0-d} s=s+d; i=i+1 } return s } 15 16const W: i64 = 640 17const H: i64 = 480 18 19func main() -> i64 { 20 hw("=== nx_indoor_gate -- R8: room + constraint-solved furniture layout ===\n" as *u8) 21 var fails: i64 = 0 22 let npx: i64 = W*H 23 24 // ---- T1 build + render ---- 25 let nf: i64 = indoor_build(7) 26 let fb: *i64 = sys_mmap(npx*8) as *i64 27 indoor_render(fb, W, H) 28 var filled: i64 = 0 29 var i: i64 = 0 30 while i < npx { if lum(fb[i]) > 80 { filled = filled + 1 } i = i + 1 } 31 hw(" room: boxes="); pn(in_n()); hw(" furniture="); pn(nf); hw(" filled-px="); pn(filled); hw("\n" as *u8) 32 var t1: i64 = 0 33 if nf >= 6 { if in_n() >= 10 { if filled > npx*8/10 { t1 = 1 } } } // enclosed room fills the frame 34 if t1 == 1 { hw("T1 PASS a furnished room builds + renders (enclosed interior)\n" as *u8) } 35 else { fails=fails+1; hw("T1 FAIL\n" as *u8) } 36 37 // ---- T2 constraint validity: no furniture overlaps ---- 38 let ov: i64 = in_furniture_overlaps() 39 hw(" constraints: furniture-overlap-pairs="); pn(ov); hw("\n" as *u8) 40 var t2: i64 = 0 41 if ov == 0 { t2 = 1 } 42 if t2 == 1 { hw("T2 PASS CONSTRAINT-VALID layout: zero furniture overlaps (collision-free, in-bounds)\n" as *u8) } 43 else { fails=fails+1; hw("T2 FAIL overlaps\n" as *u8) } 44 45 // ---- T3 seed variety ---- 46 let sigA: i64 = in_layout_sig() 47 indoor_build(31) 48 let ovB: i64 = in_furniture_overlaps() 49 let sigB: i64 = in_layout_sig() 50 indoor_build(88) 51 let ovC: i64 = in_furniture_overlaps() 52 let sigC: i64 = in_layout_sig() 53 hw(" variety: sigA="); pn(sigA); hw(" sigB="); pn(sigB); hw(" sigC="); pn(sigC); hw(" overlaps B="); pn(ovB); hw(" C="); pn(ovC); hw("\n" as *u8) 54 var t3: i64 = 0 55 var dab: i64 = sigA-sigB; if dab<0 {dab=0-dab} 56 var dbc: i64 = sigB-sigC; if dbc<0 {dbc=0-dbc} 57 if dab > 200 { if dbc > 200 { if ovB == 0 { if ovC == 0 { t3 = 1 } } } } 58 if t3 == 1 { hw("T3 PASS SEED VARIETY: different seeds -> different, still-valid layouts\n" as *u8) } 59 else { fails=fails+1; hw("T3 FAIL variety\n" as *u8) } 60 61 // ---- T4 determinism + gallery ---- 62 indoor_build(7) 63 let fb2: *i64 = sys_mmap(npx*8) as *i64 64 indoor_render(fb2, W, H) 65 var diff: i64 = 0 66 i = 0 67 while i < npx { if fb2[i] != fb[i] { diff = diff + 1 } i = i + 1 } 68 var t4: i64 = 0 69 if diff == 0 { t4 = 1 } 70 if t4 == 1 { hw("T4 PASS deterministic\n" as *u8) } 71 else { fails=fails+1; hw("T4 FAIL diff="); pn(diff); hw("\n" as *u8) } 72 73 // gallery: 3 rooms side by side (seeds 7, 31, 88) 74 let GW: i64 = W*3 75 let gal: *i64 = sys_mmap(GW*H*8) as *i64 76 let seeds: *i64 = sys_mmap(3*8) as *i64 77 seeds[0]=7; seeds[1]=31; seeds[2]=88 78 var r: i64 = 0 79 while r < 3 { 80 indoor_build(seeds[r]) 81 indoor_render(fb2, W, H) 82 var y: i64 = 0 83 while y < H { var x: i64=0; while x<W { gal[y*GW+r*W+x] = fb2[y*W+x]; x=x+1 } y=y+1 } 84 r = r + 1 85 } 86 write_png(gal, GW, H, "knowledge/nx_indoor.png" as *u8) 87 hw("T5 gallery -> knowledge/nx_indoor.png (3 constraint-furnished rooms)\n" as *u8) 88 89 if fails == 0 { hw("INDOOR-GATE GREEN -- R8: procedural rooms with CONSTRAINT-SOLVED furniture layouts (collision-free, seed-varied) + integer AABB interior raycaster, sovereign. Residual vs theirs: many room types + rich furniture library + doors/windows.\n" as *u8); sys_exit(0); return 0 } 90 hw("INDOOR-GATE RED fails="); pn(fails); hw("\n" as *u8) 91 sys_exit(1) 92 return 1 93}