code wiki / _hdl_build / nx_craft_move_gate_t72.nx

nx_craft_move_gate_t72.nx source

↩ module page · 236 lines · 14201 B

1// Private actual controller gate. Fixture mutations are confined to allocated arenas. 2import "nx_wasm_craft_move_t72.nx" 3import "nx_gate_verdict.nx" 4func mg_copy(a: *u8,b: *u8,n: i64) -> i64 { var i: i64=0;while i<n { a[i]=b[i];i=i+1 };return n } 5func mg_equal(a: *u8,b: *u8,n: i64) -> i64 { var i: i64=0;while i<n { if a[i]!=b[i] { return 0 };i=i+1 };return 1 } 6func mg_flat(base: i64) -> i64 { 7 let s: *i64=wst(base); let sp: *i64=wsp(base) 8 let vx: *u8=wvx(base) 9 var i: i64=0;while i<WX*WY*WZ { vx[i]=0 as u8;i=i+1 } 10 sp[P_SURF]=1;sp[P_WATER]=0 11 var z: i64=0;while z<WZ { var x: i64=0;while x<WX { hq_set(base,x,z,2304);vset(base,x,9,z,5);x=x+1 };z=z+1 } 12 s[S_CX]=64*256;s[S_CZ]=64*256;s[S_CY]=2560+EYE;s[S_GROUNDED]=1;s[S_VY]=0 13 s[S_SPX]=s[S_CX];s[S_SPY]=s[S_CY];s[S_SPZ]=s[S_CZ] 14 wc_move_reset(base) 15 return 0 16} 17func mg_profile(base: i64,repeat: i64) -> i64 { return wc_move_set(base,1,9810,4095,9375,28125,384,repeat) } 18func main() -> i64 { 19 let arena: *u8=sys_mmap(CRAFT_EXT_TOTAL) 20 let copy: *u8=sys_mmap(CRAFT_EXT_TOTAL) 21 if (arena as i64)<=0 || (copy as i64)<=0 { return 3 } 22 let base: i64=arena as i64;let s: *i64=wst(base);let ctr: *i64=gv_ctr() 23 gv_head("PLAYER physical-gravity / actual native contact" as *u8) 24 gv_check_eq("Beach boot accepts physical-gravity recipe",init_impl_v(base,2,20260728),0,ctr) 25 gv_check_eq("Beach mode enabled",s[S_MOVE_MODE],1,ctr) 26 gv_check_eq("state tail fits64word ABI",S_MOVE_REV,63,ctr) 27 gv_check_eq("millimetre fixed tick denominator",WC_MOVE_DEN,3600000,ctr) 28 mg_flat(base) 29 gv_check_eq("fixture body initially clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 30 mg_copy(copy,arena,CRAFT_EXT_TOTAL) 31 gv_check_eq("same profile replay returns success",mg_profile(base,1),0,ctr) 32 gv_check_eq("same profile replay preserves whole arena and revision",mg_equal(copy,arena,CRAFT_EXT_TOTAL),1,ctr) 33 // Full-state comparison for each rejected public parameter profile. 34 var k: i64=0 35 while k<15 { 36 var g: i64=9810;var j: i64=4095;var w: i64=9375;var t: i64=28125;var step: i64=384;var rep: i64=1 37 if k==0 { g=0 };if k==1 { g=WC_MOVE_GRAV_MAX_MM+1 } 38 if k==2 { j=0-1 };if k==3 { j=WC_MOVE_SPEED_MAX_MM+1 } 39 if k==4 { w=0-1 };if k==5 { w=9223372036854775807 } 40 if k==6 { t=0 };if k==7 { t=WC_MOVE_SPEED_MAX_MM+1 } 41 if k==8 { step=WY*256 };if k==9 { rep=2 } 42 if k==10 { g=0-1 };if k==11 { j=0 };if k==12 { step=0-1 };if k==13 { rep=0-1 };if k==14 { t=0-1 } 43 mg_copy(copy,arena,CRAFT_EXT_TOTAL) 44 gv_check_eq("invalid profile refused before mutation",wc_move_set(base,1,g,j,w,t,step,rep),WC_MOVE_RC_PROFILE,ctr) 45 gv_check_eq("invalid profile preserves whole actual arena",mg_equal(copy,arena,CRAFT_EXT_TOTAL),1,ctr) 46 k=k+1 47 } 48 gv_check_eq("zero walk and step are supported policies",wc_move_set(base,1,9810,4095,0,28125,0,0),0,ctr) 49 gv_check_eq("zero walk actually emits zero displacement",wc_move_horizontal(base,0,4096),0,ctr) 50 mg_profile(base,1) 51 s[S_GROUNDED]=0 52 mg_copy(copy,arena,CRAFT_EXT_TOTAL) 53 gv_check_eq("airborne profile switch refused",mg_profile(base,0),WC_MOVE_RC_ACTIVE,ctr) 54 gv_check_eq("airborne refusal leaves whole arena",mg_equal(copy,arena,CRAFT_EXT_TOTAL),1,ctr) 55 s[S_GROUNDED]=1;s[S_MOVE_RY]=1 56 mg_copy(copy,arena,CRAFT_EXT_TOTAL) 57 gv_check_eq("precise residual prevents stationary claim",mg_profile(base,0),WC_MOVE_RC_ACTIVE,ctr) 58 gv_check_eq("residual refusal leaves whole arena",mg_equal(copy,arena,CRAFT_EXT_TOTAL),1,ctr) 59 wc_move_reset(base) 60 ia_key(winp(base),87,1) 61 mg_copy(copy,arena,CRAFT_EXT_TOTAL) 62 gv_check_eq("held movement prevents profile switch",mg_profile(base,0),WC_MOVE_RC_ACTIVE,ctr) 63 gv_check_eq("held movement refusal leaves whole arena",mg_equal(copy,arena,CRAFT_EXT_TOTAL),1,ctr) 64 ia_key(winp(base),87,0) 65 // Maximum admitted dimensions execute the real arithmetic path without signed overflow. 66 gv_check_eq("max profile values accepted",wc_move_set(base,1,WC_MOVE_GRAV_MAX_MM,WC_MOVE_SPEED_MAX_MM,WC_MOVE_SPEED_MAX_MM,WC_MOVE_SPEED_MAX_MM,WY*256-1,1),0,ctr) 67 gv_check_eq("maximum horizontal numerator remains exact",wc_move_horizontal(base,0,8192),2*WY*256,ctr) 68 wc_move_reset(base) 69 gv_check_eq("maximum acceleration and launch cancel exactly",wc_move_vertical_request(base,1),0,ctr) 70 mg_flat(base);mg_profile(base,1) 71 mg_flat(base) 72 gv_check_eq("small positive takeoff admitted",wc_move_set(base,1,9810,300,9375,28125,384,1),0,ctr) 73 wc_player_motion(base,0,0,1) 74 gv_check_eq("subQ8 rising request has zero whole displacement",s[S_CY],2560+EYE,ctr) 75 gv_check("positive precise takeoff not arrested by floor" as *u8,s[S_MOVE_VNUM]>0,ctr) 76 gv_check_eq("positive subQ8 takeoff clears grounded",s[S_GROUNDED],0,ctr) 77 wc_player_motion(base,0,0,0) 78 gv_check_eq("unresolved tiny rise settles once descending",s[S_GROUNDED],1,ctr) 79 mg_flat(base) 80 gv_check_eq("minimum positive launch accepted",wc_move_set(base,1,9810,1,9375,28125,384,1),0,ctr) 81 wc_player_motion(base,0,0,1) 82 gv_check_eq("launch below one gravity step cannot rise",s[S_CY],2560+EYE,ctr) 83 mg_flat(base);mg_profile(base,1) 84 // Fractional acceleration must survive before one Q8 of displacement is available. 85 s[S_CY]=s[S_CY]+256;s[S_GROUNDED]=0 86 let fall_y: i64=s[S_CY] 87 wc_player_motion(base,0,0,0) 88 gv_check_eq("first fractional fall retains exact numerator",s[S_MOVE_VNUM],0-2511360,ctr) 89 gv_check_eq("first subQ8 displacement remains zero",s[S_CY],fall_y,ctr) 90 wc_player_motion(base,0,0,0) 91 gv_check_eq("second fractional fall accumulates to2Q8",s[S_CY],fall_y-2,ctr) 92 // Actual full jump compared with independently retained closed arithmetic recurrence. 93 mg_flat(base);mg_profile(base,1) 94 var n: i64=0;var ymax: i64=0;var apex_tick: i64=0;var landing: i64=0;var mismatch: i64=0 95 var ref_y: i64=0;var ref_r: i64=0 96 while n<60 { 97 var jump: i64=0;if n==0 { jump=1 } 98 wc_player_motion(base,0,0,jump) 99 n=n+1 100 if landing==0 { 101 let vn: i64=4095*256*60-n*9810*256 102 let total: i64=ref_r+vn 103 let delta: i64=total/3600000 104 ref_r=total-delta*3600000 105 ref_y=ref_y+delta 106 if ref_y<=0 { ref_y=0 } 107 if s[S_CY]-(2560+EYE)!=ref_y { mismatch=mismatch+1 } 108 } 109 let rise: i64=s[S_CY]-(2560+EYE) 110 if rise>ymax { ymax=rise;apex_tick=n } 111 if s[S_GROUNDED]==1 && landing==0 { landing=n } 112 if wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ])!=1 { mismatch=mismatch+1 } 113 } 114 gv_check_eq("actual jump matches independent recurrence",mismatch,0,ctr) 115 gv_check_eq("actual physical-gravity apex preserves210Q8",ymax,210,ctr) 116 gv_check_eq("actual physical-gravity landing tick",landing,50,ctr) 117 gv_check_eq("landed feet match actual surface",s[S_CY]-EYE,wc_surface_source(base,s[S_CX],s[S_CZ]),ctr) 118 gv_check_eq("landing clears velocity numerator",s[S_MOVE_VNUM],0,ctr) 119 gv_check_eq("landing clears vertical remainder",s[S_MOVE_RY],0,ctr) 120 gv_kv("physical_apex_tick",apex_tick);gv_kv("physical_flight_ticks",landing);gv_kv("physical_apex_q8",ymax) 121 // Policy is independent: holding input does not retrigger in edge mode. 122 mg_flat(base);mg_profile(base,0) 123 n=0;var rises: i64=0;var last_ground: i64=1 124 while n<110 { wc_player_motion(base,0,0,1);if last_ground==1 && s[S_GROUNDED]==0 { rises=rises+1 };last_ground=s[S_GROUNDED];n=n+1 } 125 gv_check_eq("edge policy held input launches once",rises,1,ctr) 126 wc_player_motion(base,0,0,0);wc_player_motion(base,0,0,1) 127 gv_check_eq("edge policy launches after release and press",s[S_GROUNDED],0,ctr) 128 mg_flat(base);mg_profile(base,1) 129 n=0;rises=0;last_ground=1 130 while n<110 { wc_player_motion(base,0,0,1);if last_ground==1 && s[S_GROUNDED]==0 { rises=rises+1 };last_ground=s[S_GROUNDED];n=n+1 } 131 gv_check_eq("held-repeat policy launches three times in110ticks",rises,3,ctr) 132 // Existing serialized format is untouched and accepted restores reset transient physics. 133 mg_flat(base);mg_profile(base,1) 134 wc_edit(base,32,24,32,6) 135 let saved: i64=wc_save_build(base) 136 wc_player_motion(base,0,0,1) 137 gv_check("preload precise velocity is nonzero" as *u8,s[S_MOVE_VNUM]>0,ctr) 138 mg_copy(copy,arena,CRAFT_EXT_TOTAL) 139 gv_check_eq("bad save extent refuses",wc_save_apply_bytes(base,saved-1),SAVE_RC_LENGTH,ctr) 140 gv_check_eq("refused save preserves all physics and arena",mg_equal(copy,arena,CRAFT_EXT_TOTAL),1,ctr) 141 gv_check_eq("valid save accepted",wc_save_apply_bytes(base,saved),0,ctr) 142 gv_check_eq("valid save clears precise velocity",s[S_MOVE_VNUM],0,ctr) 143 gv_check_eq("valid save clears precise vertical remainder",s[S_MOVE_RY],0,ctr) 144 gv_check_eq("valid save retains actual edit",ej_get(base,32,24,32),6,ctr) 145 gv_check_eq("save extent unchanged",saved,SAVE_LEN,ctr) 146 // Actual ceiling geometry: limit is derived from the occupied cell bottom and body head. 147 mg_flat(base);mg_profile(base,1) 148 var cz: i64=63;while cz<=65 { var cx: i64=63;while cx<=65 { vset(base,cx,13,cz,6);cx=cx+1 };cz=cz+1 } 149 gv_check_eq("ceiling fixture starts clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 150 n=0;ymax=0;mismatch=0;var ceiling_clip: i64=0 151 while n<70 { 152 var jump: i64=0;if n==0 { jump=1 } 153 wc_player_motion(base,0,0,jump) 154 let rise: i64=s[S_CY]-(2560+EYE) 155 if rise>ymax { ymax=rise } 156 if wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ])!=1 { mismatch=mismatch+1 } 157 if contact_clipped_axes_impl(base)!=0 { ceiling_clip=1 } 158 n=n+1 159 } 160 gv_check_eq("ceiling sweep respects exact available head clearance",ymax,13*256-(2560+EYE+128),ctr) 161 gv_check_eq("ceiling trajectory stays body clear",mismatch,0,ctr) 162 gv_check_eq("ceiling stop lands on original field",s[S_CY],2560+EYE,ctr) 163 gv_check_eq("ceiling landing clears fractional velocity",s[S_MOVE_VNUM],0,ctr) 164 gv_kv("ceiling_max_rise_q8",ymax);gv_kv("ceiling_audit_observed",ceiling_clip) 165 // The same one-cell structural step, with the existing allowance enabled and disabled. 166 mg_flat(base);mg_profile(base,1) 167 cz=63;while cz<=65 { vset(base,65,10,cz,6);cz=cz+1 } 168 let step_x: i64=s[S_CX] 169 wc_player_motion(base,384,0,0) 170 gv_check_eq("configured legacy allowance traverses one-block step",s[S_CX],step_x+384,ctr) 171 gv_check_eq("step uses actual structure top",s[S_CY],2816+EYE,ctr) 172 gv_check_eq("stepped body remains clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 173 mg_flat(base) 174 gv_check_eq("zero step policy accepted for obstacle fixture",wc_move_set(base,1,9810,4095,9375,28125,0,1),0,ctr) 175 cz=63;while cz<=65 { vset(base,65,10,cz,6);cz=cz+1 } 176 wc_player_motion(base,384,0,0) 177 gv_check("disabled step clips actual horizontal motion" as *u8,s[S_CX]<step_x+384,ctr) 178 gv_check_eq("disabled step does not lift camera",s[S_CY],2560+EYE,ctr) 179 gv_check_eq("disabled step leaves body clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 180 mg_flat(base);mg_profile(base,1) 181 cz=63;while cz<=65 { vset(base,65,10,cz,6);vset(base,65,11,cz,6);cz=cz+1 } 182 wc_player_motion(base,384,0,0) 183 gv_check("two-block rise exceeds retained allowance" as *u8,s[S_CX]<step_x+384,ctr) 184 gv_check_eq("refused high step leaves body clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),1,ctr) 185 // A deterministic native field slope, forward and reverse. Measure any downward following gap. 186 mg_flat(base);mg_profile(base,1) 187 var sz: i64=0;while sz<WZ { var sx: i64=0;while sx<WX { hq_set(base,sx,sz,2304+(sx-64)*4);sx=sx+1 };sz=sz+1 } 188 n=0;mismatch=0;var slope_gap_max: i64=0;var slope_grounded: i64=0 189 while n<120 { 190 var dx: i64=40;if n>=60 { dx=0-40 } 191 wc_player_motion(base,dx,0,0) 192 let field: i64=wc_surface_source(base,s[S_CX],s[S_CZ]) 193 let gap: i64=s[S_CY]-EYE-field 194 if gap<0 { mismatch=mismatch+1 } 195 if gap>slope_gap_max { slope_gap_max=gap } 196 if s[S_GROUNDED]==1 { slope_grounded=slope_grounded+1 } 197 if wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ])!=1 { mismatch=mismatch+1 } 198 n=n+1 199 } 200 gv_check_eq("actual up/down slope has no sampled penetration",mismatch,0,ctr) 201 gv_check_eq("slope route returns to same horizontal position",s[S_CX],64*256,ctr) 202 n=0;while n<60 { wc_player_motion(base,0,0,0);n=n+1 } 203 gv_check_eq("rest after slope reaches exact native support",s[S_CY]-EYE,wc_surface_source(base,s[S_CX],s[S_CZ]),ctr) 204 gv_kv("slope_gap_max_q8",slope_gap_max);gv_kv("slope_grounded_samples_of120",slope_grounded) 205 // Keep the existing water float offset. This is contact compatibility, not fluid simulation. 206 mg_flat(base);mg_profile(base,1);let water_spec: *i64=wsp(base);water_spec[P_WATER]=10 207 cz=63;while cz<=65 { var wx: i64=63;while wx<=65 { vset(base,wx,10,cz,4);wx=wx+1 };cz=cz+1 } 208 wc_player_motion(base,0,0,0) 209 gv_check_eq("existing water contact offset preserved",s[S_CY],11*256+EYE-96,ctr) 210 gv_check_eq("water rest is grounded under existing rule",s[S_GROUNDED],1,ctr) 211 // An enclosed body must be explicitly unresolved and cannot advance farther downward. 212 mg_flat(base);mg_profile(base,1) 213 var by: i64=10;while by<WY { cz=63;while cz<=65 { var bx: i64=63;while bx<=65 { vset(base,bx,by,cz,6);bx=bx+1 };cz=cz+1 };by=by+1 } 214 let blocked_y: i64=s[S_CY] 215 gv_check_eq("occupied full column reports unresolved recovery",wc_player_recover(base),0-1,ctr) 216 wc_player_motion(base,0,0,0) 217 gv_check_eq("unresolved body never falls farther",s[S_CY],blocked_y,ctr) 218 gv_check_eq("unresolved body clears precise velocity",s[S_MOVE_VNUM],0,ctr) 219 gv_check_eq("unresolved body is not falsely called clear",wc_player_position_clear(base,s[S_CX],s[S_CY],s[S_CZ]),0,ctr) 220 // Other-world bootstrap keeps the legacy profile and exact incumbent parabola. 221 gv_check_eq("nonBeach initializes legacy",init_impl_v(base,0,20260728),0,ctr) 222 gv_check_eq("nonBeach profile remains zero",s[S_MOVE_MODE],0,ctr) 223 mg_flat(base);n=0;var ly: i64=0;var lv: i64=66;mismatch=0;ymax=0;landing=0 224 while n<20 { 225 var jump: i64=0;if n==0 { jump=1 } 226 wc_player_motion(base,0,0,jump);n=n+1 227 lv=lv-9;ly=ly+lv;if ly<=0 { ly=0;lv=0 } 228 if s[S_CY]-(2560+EYE)!=ly || s[S_VY]!=lv { mismatch=mismatch+1 } 229 if ly>ymax { ymax=ly };if landing==0 && s[S_GROUNDED]==1 { landing=n } 230 } 231 gv_check_eq("legacy actual20tick parabola unchanged",mismatch,0,ctr) 232 gv_check_eq("legacy apex210Q8 unchanged",ymax,210,ctr) 233 gv_check_eq("legacy landing14ticks unchanged",landing,14,ctr) 234 sys_munmap(arena,CRAFT_EXT_TOTAL);sys_munmap(copy,CRAFT_EXT_TOTAL) 235 return gv_verdict("PLAYER-PHYSICAL-GRAVITY" as *u8,ctr,"private native only; shared/WASM, served feel, NPC gravity and configuration adapter qualification remain open" as *u8) 236}