nx_craft_placement_floor_t316.nx source
↩ module page · 18 lines · 917 B
1// Exact extraction from canonical nx_wasm_craft.nx; callers provide the existing world/contact owners.
2const WC_BODY_CELLS: i64 = 2 // the two body cells mob_fits proves above a floor
3const WC_BLOCK_Q8: i64 = 256 // one block in Q8 world units (S_CX: 256 = one block)
4func wc_place_floor_q(base: i64, xq: i64, zq: i64) -> i64 {
5 if wsp(base)[P_SURF] != 1 { return wc_contact_floor_q(base,xq,zq,WY-1) }
6 var floor: i64 = wc_surface_source(base,xq,zq)
7 if floor < 0 { return 0 - 1 }
8 var cell: i64 = floor >> 8
9 while cell < WY && cell*WC_BLOCK_Q8 < floor+WC_BODY_CELLS*WC_BLOCK_Q8 {
10 if beach_contact_cell_solid(base,xq >> 8,cell,zq >> 8) == 1 { floor = (cell+1)*WC_BLOCK_Q8 }
11 cell = cell + 1
12 }
13 return floor
14}
15func wc_actor_seat_q(base: i64, xq: i64, zq: i64, yq: i64) -> i64 {
16 if wsp(base)[P_SURF] == 1 { return wc_place_floor_q(base,xq,zq) }
17 return wc_contact_floor_q(base,xq,zq,yq >> 8)
18}