code wiki / (root) / nx_desktop_craft.nx

nx_desktop_craft.nx source

↩ module page · 217 lines · 9007 B

1// nx_desktop_craft.nx -- NISHI CRAFT native: the generated 3D voxel world in a real desktop window, 2// ZERO wasm / ZERO JS / ZERO third-party anything -- the same nx_wasm_craft organ the browser page 3// runs, on the shared nx_desktop_game surface. This is the no-webassembly path the operator asked 4// for; the Nishi Browser launches exactly this binary when a page carries the nishi-game marker. 5// `nx_desktop_craft selftest` proves the whole pipeline against the real X server with no human. 6// license_tier: ORIGINAL 7import "nx_syscalls.nx" 8import "nx_wasm_craft.nx" 9import "nx_desktop_game.nx" 10const K_MAGIC_1000000: i64 = 1000000 11const K_MAGIC_4096: i64 = 4096 12const K_MAGIC_20260728: i64 = 20260728 13const K_MAGIC_40000: i64 = 40000 14const K_MAGIC_3000: i64 = 3000 15 16func dcw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 17func dcn(v: i64) -> i64 { 18 let t: *u8 = sys_mmap(32) as *u8 19 var m: i64 = v; var w2: i64 = 0 20 if m<0 { t[w2]=45 as u8; w2=w2+1; m=0-m } 21 if m==0 { t[w2]=48 as u8; sys_write(1,t,w2+1); return 0 } 22 let d: *u8 = sys_mmap(32) as *u8 23 var k: i64=0 24 while m>0 { d[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } 25 var j: i64=0 26 while j<k { t[w2]=d[k-1-j]; w2=w2+1; j=j+1 } 27 sys_write(1,t,w2); return 0 28} 29 30// world persistence: the save IMAGE is built/validated by the organ; this surface only moves bytes 31func dc_save_world(base: i64) -> i64 { 32 let n: i64 = wc_save_build(base) 33 let fd: i64 = sys_openat_wr("knowledge/nx_craft_world.sav\x00" as *u8, 0x1a4) 34 if fd < 0 { return 0 - 1 } 35 var off: i64 = 0 36 while off < n { 37 let w2: i64 = sys_write(fd, ((base + O_SAVE + off)) as *u8, n - off) 38 if w2 <= 0 { sys_close(fd); return 0 - 1 } 39 off = off + w2 40 } 41 sys_close(fd) 42 return n 43} 44func dc_load_world(base: i64) -> i64 { 45 let lp: *i64 = sys_mmap(16) as *i64 46 let buf: *u8 = sys_read_file("knowledge/nx_craft_world.sav\x00" as *u8, lp) 47 if lp[0] != SAVE_LEN { return 0 - 1 } 48 let dst: *u8 = (base + O_SAVE) as *u8 49 var i: i64 = 0 50 while i < SAVE_LEN { dst[i] = buf[i]; i = i + 1 } 51 return wc_save_apply(base) 52} 53 54func dc_ms(ts: *i64) -> i64 { 55 sys_clock_gettime_mono(ts) 56 return ts[0]*1000 + ts[1]/K_MAGIC_1000000 57} 58 59func main(argc: i64, argv: *i64) -> i64 { 60 var selftest: i64 = 0 61 var bench: i64 = 0 62 if argc > 1 { 63 let a1: *u8 = argv[1] as *u8 64 if a1[0] == 0x73 { selftest = 1 } 65 if a1[0] == 0x62 { bench = 1 } 66 } 67 if bench == 1 { 68 // NATIVE RENDER BENCH: the honest numbers for the fast surface (no window, pure CPU) 69 let bb: i64 = sys_mmap(CRAFT_BYTES + K_MAGIC_4096) as i64 70 init_impl(bb, K_MAGIC_20260728) 71 let sb: *i64 = wst(bb) 72 var qq: i64 = 1 73 while qq <= 2 { 74 sb[S_Q] = qq 75 var wu: i64 = 0 76 while wu < 3 { render_impl(bb); wu = wu + 1 } 77 let tsb: *i64 = sys_mmap(32) as *i64 78 let t0: i64 = dc_ms(tsb) 79 var fr: i64 = 0 80 while fr < 40 { step_impl(bb); render_impl(bb); fr = fr + 1 } 81 let t1: i64 = dc_ms(tsb) 82 dcw("BENCH q=" as *u8); dcn(qq) 83 dcw(" 40 frames in " as *u8); dcn(t1 - t0) 84 dcw("ms = " as *u8); dcn((t1 - t0)/40) 85 dcw("ms/frame (" as *u8) 86 var fps: i64 = 0 87 if t1 > t0 { fps = K_MAGIC_40000/(t1 - t0) } 88 dcn(fps); dcw(" fps)\n" as *u8) 89 qq = qq + 1 90 } 91 return 0 92 } 93 let sout: *i64 = sys_mmap(64) as *i64 94 if dg_setup("NISHI CRAFT - SOVEREIGN 3D NATIVE" as *u8, 33, W, H, sout) < 0 { 95 dcw("nx_desktop_craft: X11 setup failed\n" as *u8) 96 return 2 97 } 98 let conn: *X11Conn = sout[0] as *X11Conn 99 let wid: i64 = sout[1] 100 let gc: i64 = sout[2] 101 let frc: i64 = sout[3] 102 let vk_table: *i64 = sys_mmap(NX_X11_KEYMAP_N*8) as *i64 103 let kpk: i64 = nx_x11_load_keymap(conn, vk_table) 104 105 let base: i64 = sys_mmap(CRAFT_BYTES + K_MAGIC_4096) as i64 106 init_impl(base, K_MAGIC_20260728) 107 if selftest == 0 { 108 if dc_load_world(base) == 0 { dcw("world loaded from knowledge/nx_craft_world.sav\n" as *u8) } 109 } 110 let s: *i64 = wst(base) 111 let zbuf: *u8 = sys_mmap(W*H*4 + K_MAGIC_4096) 112 let ev: *u8 = sys_mmap(64) 113 let pfd: *u8 = sys_mmap(16) 114 let mctx: *i64 = sys_mmap(64) as *i64 115 116 if selftest == 1 { 117 var pass: i64 = 0 118 let total: i64 = 7 119 dcw("=== nx_desktop_craft selftest (native 3D world, REAL X server, no wasm) ===\n" as *u8) 120 dcw("S1 setup flush rc=" as *u8); dcn(frc) 121 dcw(" depth=" as *u8); dcn(conn.root_depth); dcw("\n" as *u8) 122 if frc == 0 { pass = pass + 1 } 123 124 let kc_w: i64 = dg_kc_for(vk_table, 87) 125 let kc_e: i64 = dg_kc_for(vk_table, 69) 126 dcw("S2 keymap kpk=" as *u8); dcn(kpk) 127 dcw(" keycode(w)=" as *u8); dcn(kc_w) 128 dcw(" keycode(e)=" as *u8); dcn(kc_e); dcw("\n" as *u8) 129 if kpk > 0 { if kc_w > 0 { if kc_e > 0 { pass = pass + 1 } } } 130 131 render_impl(base) 132 let pout: *i64 = sys_mmap(64) as *i64 133 let prc: i64 = dg_prove_surface(conn, wid, gc, wfb(base), W, H, zbuf, pout) 134 dcw("S3 blit bands=" as *u8); dcn(pout[0]) 135 dcw(" flush rc=" as *u8); dcn(pout[1]); dcw("\n" as *u8) 136 if prc == 0 { if pout[0] > 0 { if pout[1] == 0 { pass = pass + 1 } } } 137 dcw("S4 round-trip bytes=" as *u8); dcn(pout[2]) 138 dcw(" mismatched-BGR=" as *u8); dcn(pout[3]) 139 dcw("/" as *u8); dcn(W*H*3); dcw("\n" as *u8) 140 if pout[2] >= W*H*4 { if pout[3] == 0 { pass = pass + 1 } } 141 142 // S5 a synthetic 'w' through the REAL server walks the camera via the same path a finger uses 143 let z0: i64 = s[S_CZ] 144 nx_x11_send_key(conn, wid, kc_w, 1) 145 dg_poll_in(pfd, conn.fd, 300) 146 dg_pump2(conn, wid, W, H, winp(base), ev, pfd, vk_table, mctx) 147 var f2: i64 = 0 148 while f2 < 5 { step_impl(base); f2 = f2 + 1 } 149 let z1: i64 = s[S_CZ] 150 nx_x11_send_key(conn, wid, kc_w, 0) 151 dg_poll_in(pfd, conn.fd, 300) 152 dg_pump2(conn, wid, W, H, winp(base), ev, pfd, vk_table, mctx) 153 step_impl(base) 154 let z2: i64 = s[S_CZ] 155 dcw("S5 synthetic-w camz " as *u8); dcn(z0) 156 dcw(" -> " as *u8); dcn(z1) 157 dcw(" release-> " as *u8); dcn(z2); dcw("\n" as *u8) 158 if z1 != z0 { if z2 == z1 { pass = pass + 1 } } 159 160 // S6 MOUSELOOK through the REAL server: two synthetic MotionNotify events (init + delta) 161 // -> relative delta into the look channel -> step turns the camera 162 let yaw0: i64 = s[S_YAW] 163 nx_x11_send_motion(conn, wid, W/2, H/2) 164 nx_x11_send_motion(conn, wid, W/2 + 40, H/2 + 10) 165 dg_poll_in(pfd, conn.fd, 300) 166 dg_pump2(conn, wid, W, H, winp(base), ev, pfd, vk_table, mctx) 167 step_impl(base) 168 let yaw1: i64 = s[S_YAW] 169 dcw("S6 synthetic-motion yaw " as *u8); dcn(yaw0) 170 dcw(" -> " as *u8); dcn(yaw1) 171 dcw(" (delta " as *u8); dcn(yaw1 - yaw0); dcw(", want 240)\n" as *u8) 172 if yaw1 - yaw0 == 240 { pass = pass + 1 } 173 174 // S7 PERSISTENCE through the FILE surface: edit -> save -> fresh world -> load -> edit is back 175 s[S_PITCH] = 0 - K_MAGIC_3000 176 apply2_impl(base, 0, 0, 0, 0, 0, 0, 0, 0, 0) 177 tick_impl(base, 4) 178 let shx: i64 = s[S_HX] 179 let shy: i64 = s[S_HY] 180 let shz: i64 = s[S_HZ] 181 let sn: i64 = dc_save_world(base) 182 init_impl(base, K_MAGIC_20260728) 183 let gone: i64 = vget(base, shx, shy, shz) 184 let lrc: i64 = dc_load_world(base) 185 let backv: i64 = vget(base, shx, shy, shz) 186 dcw("S7 save n=" as *u8); dcn(sn) 187 dcw(" fresh-had=" as *u8); dcn(gone) 188 dcw(" load rc=" as *u8); dcn(lrc) 189 dcw(" after-load=" as *u8); dcn(backv) 190 dcw(" broken=" as *u8); dcn(s[S_BROKEN]); dcw(" (edit must survive)\n" as *u8) 191 if sn > 0 { if gone != 0 { if lrc == 0 { if backv == 0 { if s[S_BROKEN] == 1 { 192 pass = pass + 1 } } } } } 193 194 dcw("nx_desktop_craft selftest: " as *u8); dcn(pass); dcw("/" as *u8); dcn(total); dcw("\n" as *u8) 195 if pass == total { 196 dcw("VERDICT GREEN -- the generated 3D world runs NATIVE in a desktop window, no wasm\n" as *u8) 197 sys_exit(0) 198 } 199 dcw("VERDICT RED\n" as *u8) 200 sys_exit(1) 201 } 202 203 dcw("NISHI CRAFT native window up (WASD move, MOUSE look, L/R-click break/place, space jump, ESC quits)\n" as *u8) 204 var quit: i64 = 0 205 while quit == 0 { 206 quit = dg_pump2(conn, wid, W, H, winp(base), ev, pfd, vk_table, mctx) 207 if quit == 0 { 208 step_impl(base) 209 render_impl(base) 210 if dg_blit(conn, wid, gc, wfb(base), W, H, zbuf) < 0 { quit = 1 } 211 dg_poll_in(pfd, conn.fd, DG_FRAME_MS) 212 } 213 } 214 if dc_save_world(base) > 0 { dcw("world saved to knowledge/nx_craft_world.sav\n" as *u8) } 215 dcw("bye\n" as *u8) 216 return 0 217}