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}