code wiki / (root) / nx_wasm_craft_contact_candidate.nx

nx_wasm_craft_contact_candidate.nx

buildroot/runtime/nx_wasm_craft_contact_candidate.nx

262144 B4681 linesdepth 4pulls 23 transitivereach 0 importersview sourcekind orphan librarytopic wasm
docsdependenciesstructsconstsfunctions

about

nx_wasm_craft.nx -- NISHI CRAFT: a GENERATED 3D VOXEL WORLD, playable first-person. The operator's 2026-05-19 vision ("build minecraft equivalent on the lowest possible hardware") finally EMITTING: procedural terrain (integer value-noise heightmap, biome banding, water, trees) in a 64x32x64 block grid, rendered by a per-pixel integer DDA raycast (true 3D: block faces, face shading, distance fog, sky), walked in first person (collision, auto-step-up, water float), and EDITED live (break/place at the crosshair). Every pixel and every world byte is NishiLang; base-relative so the identical code runs natively (gate, PNG proof) and as wasm (browser page); input arrives through nx_input_abstract (keyboard/gamepad/touch all work on day one). Controls (via the input layer's semantic actions): W/S or Up/Down = walk, A/D or Left/Right = turn, R/F = look up/down (bound to the MENU/PAUSE bits -- the 8-action mask is fully spent; widening it to 16 actions is the filed follow-up), E = break block, B = place stone. Touch d-pad works: center tap = break. license_tier: ORIGINAL

dependencies 16 imports · 0 importers

nx_syscalls.nx nx_itrig.nx nx_input_abstract.nx nx_atmosphere.nx nx_weather_lib.nx nx_softbind.nx nx_skeleton.nx nx_skin_ita.nx nx_nxa_anim_lib.nx nx_entity_store.nx nx_wasm_craft_contact_candidat

diagram shows first 10 each side; +6 more imports, +0 more importers in the complete lists below.

imports: nx_syscalls.nxnx_itrig.nxnx_input_abstract.nxnx_atmosphere.nxnx_weather_lib.nxnx_softbind.nxnx_skeleton.nxnx_skin_ita.nxnx_nxa_anim_lib.nxnx_entity_store.nxnx_gamesave_core.nxnx_indoorgen_data.nxnx_worldpipe_core.nxnx_genp_allow_lib.nxnx_perf_lib.nxnx_beach_release_recipe.nx

imported by: nobody (leaf or entry point)

structs

none

consts

41const WATER_MAGIC_16777216: i64 = 16777216
42const EJRN_HASH_MUL: i64 = 40503
43const WATER_MAGIC_33554431: i64 = 33554431
44const TERRAIN_HASH_X: i64 = 374761393
45const TERRAIN_HASH_Z: i64 = 668265263
46const TERRAIN_HASH_SEED: i64 = 1442695041
47const SAVE_CK_MASK: i64 = 4611686018427387903
48const TERRAIN_HASH_MIX: i64 = 1274126177
49const RAY_HUGE: i64 = 1099511627776
50const WATER_MAGIC_65536: i64 = 65536
51const WATER_MAGIC_4096: i64 = 4096
52const WATER_MAGIC_1048576: i64 = 1048576
53const WATER_MAGIC_1536: i64 = 1536
54const WATER_MAGIC_6144: i64 = 6144
55const GENE_MASK_TEMPERAMENT: i64 = 57344
56const SAVE_CK_SEED: i64 = 1469598103
57const SAVE_CK_PRIME: i64 = 1099511
58const WATER_MAGIC_2400: i64 = 2400
59const WATER_MAGIC_2500: i64 = 2500
60const WATER_MAGIC_1400: i64 = 1400
61const CRAFT_DEFAULT_SEED: i64 = 20260728
102const W: i64 = 1920
103const H: i64 = 1200
104const WASM_PAGE_BYTES: i64 = 65536
110const WASM_PAGES: i64 = 364
111const WASM_MEM_BYTES: i64 = WASM_PAGES * WASM_PAGE_BYTES
123const RES: i64 = 2 // ray per RESxRES pixel block (240x150 rays)
124const RW: i64 = 240
125const RH: i64 = 150
126const FOC: i64 = 120 // ~90 degree fov at RW=240
131const Q_MAX: i64 = 24
132const Q_START: i64 = 5
149const FB_COLOR_MASK: i64 = 16777215
150const FB_DEPTH_SHIFT: i64 = 32
151const FB_DEPTH_MAX: i64 = 16777215
157const HUD_DESIGN_W: i64 = 480
158const HUD_PIP_MAX: i64 = 24
159const HUD_HOTBAR_N: i64 = 7
161const WX: i64 = 128 // world blocks (v2: 4x the area, taller)
162const WY: i64 = 48
163const WZ: i64 = 128
164const WATER_H: i64 = 9
168const B_FARM: i64 = 12 // tilled farmland, dry
169const B_CROP0: i64 = 13 // crop sprout (placed by SEEDS onto farmland)
170const B_CROP1: i64 = 14 // crop growing
171const B_CROP2: i64 = 15 // crop MATURE -- breaking it is the HARVEST
172const B_FARMW: i64 = 16 // farmland, wet (rain or water within the 5x5 ring)
178const O_FB: i64 = 3592832 // W*H i64 packed R|G<<8|B<<16 (at the arena tail; see CRAFT_TOTAL)
179const O_ST: i64 = 1152000 // 64 state slots
180const O_INPUT: i64 = 1152512 // nx_input_abstract arena (64 words)
181const O_VOX: i64 = 1153024 // WX*WY*WZ u8 blocks
182const O_MOBS: i64 = 1939456 // nx_entity_store arena (certified part): en_bytes(16,7)=1632
183const MOB_CAP: i64 = 16
184const MOB_NCOMP: i64 = 7
185const MOB_BYTES: i64 = 1632
186const O_SPEC: i64 = 1941120 // GAME SPEC block (64 words) -- AFTER the arena's 1632B end
187const O_EJRN: i64 = 1941760 // EDIT JOURNAL: 8192 packed i64 hash slots at ABSOLUTE world
189const EJRN_SLOTS: i64 = 8192
190const EJRN_BYTES: i64 = 65536
191const O_SAVE: i64 = 2730336 // v6 save image (relocated past MOBAUX): 128B header + voxels
194const SAVE_HDR: i64 = 128
195const SAVE_BODY: i64 = 853600 // WX*WY*WZ + MOB_BYTES + EJRN_BYTES
196const SAVE_BODY_V5: i64 = 788064 // pre-streaming body (load-compat: v5 saves still open)
197const SAVE_LEN: i64 = 853728 // SAVE_HDR + SAVE_BODY
198const CRAFT_BYTES: i64 = 3584064 // O_SAVE + SAVE_LEN
199const O_MOBAUX: i64 = 2729952 // 16 mobs x (dx,dz,dy) last-applied step, i64 triples
217const O_MOBHDG: i64 = 2729696
218const O_MOBVY: i64 = 2729824 // GE12: 16 mobs x 1 word VERTICAL VELOCITY Q8/tick (128B, the slack
223const O_SOFT: i64 = 3584064 // A4 soft-body springs: 16 mobs x SB_PTS(6, R7 regions) x SD_STRIDE words.
226const O_NEED: i64 = 3588672 // C1 needs: 16 mobs x 4 words (hunger, energy, social, spare).
228const O_MIND: i64 = 3589184 // C3/C5 THE INNER LIFE: 16 girls x 24 words -- 8 THOUGHT
233const O_PASS: i64 = 3592256 // THE TRAVELER'S PASSPORT (the isekai carry): the
239const PASS_MAGIC: i64 = 20260802001
240const PASS_LEN: i64 = 192 // 24 wire words: [0]magic [1]ver [2]charseed [3]broken
245const O_GENP: i64 = 3592640 // W1c GEN-TIME RECIPE OVERRIDES (192B): [0] magic, [1] n,
251const GENP_MAGIC: i64 = 20260813001
252const GENP_MAXP: i64 = 11
262const O_RIG: i64 = O_FB + W*H*8
266const RIG_BYTES: i64 = 188736
267const O_PROJ: i64 = O_RIG + RIG_BYTES
268const PROJ_MAXV: i64 = 211 // projected-vertex slots == RIG_VERT_TOTAL (declared beside the
275const PROJ_BYTES: i64 = PROJ_MAXV * 24
276const O_SKIN3: i64 = O_PROJ + PROJ_BYTES // 3-word sRGB scratch for nx_skin_ita's out3 (wasm has no
299const WC_CAST_N: i64 = 12 // the cast genmobs places (placed < WC_CAST_N); hair state is sized to it
300const HG_MOBS: i64 = WC_CAST_N
301const HG_NP: i64 = 8 // points per HSTR strand: the section contract (GR_PTS in nx_nxa_groom)
302const HG_W: i64 = HG_NP*3 // words per strand (GR_WORDS)
303const HG_NSEG: i64 = HG_NP - 1
304const HG_REND_MAX: i64 = 1200 // render strands: the page's shipped NXH_GUIDES budget, PRESERVED and moved here
305const HG_SIM: i64 = 128 // simulated guides per girl. PICKED, named as picked: 1200/128 = 9.4 render
309const HG_TEX_SR: i64 = 4 // strands per guide-texture row: rows = strands/4 keep every hair texture under
311const HG_TAB_W: i64 = 8 // render-strand table row: [rest-idx nb1 nb2 w1 w2 lockw spanz 0]
312const HG_CAP_MAX: i64 = 32 // collider slots (mask bits): head neck 2 shoulders 2 arms torso + DYNA anchors
313const HG_CAP_W: i64 = 10 // ax ay az bx by bz r kind sx sy
314const HG_KIND_CAP: i64 = 0
315const HG_KIND_ELL: i64 = 1
316const HG_Q12: i64 = WATER_MAGIC_4096 // ellipse-scale / segment-parameter fixed point: the engine's fx4096
317const HG_SKEL_W: i64 = 8 // words per SKEL joint: parent x y z + 4 (the 64-byte joint record the page reads)
318const HG_DYNA_MINW: i64 = 8 // a DYNA row carries side x y z k c max infl before an anchor is readable
319const HG_DYNA_MAXW: i64 = 64 // a row wider than this is not this format (nx_nxa_dyna writes 12); bounds the count check
320const HG_DYNA_INFL: i64 = 7 // DYNA word: influence radius (nx_nxa_dyna payload layout)
321const HG_HDR_BYTES: i64 = 512
322const HG_H_LOADED: i64 = 0
323const HG_H_NSTR: i64 = 1
324const HG_H_NREND: i64 = 2
325const HG_H_NSIM: i64 = 3
326const HG_H_SKIN: i64 = 4
327const HG_H_LOCKW: i64 = 5
328const HG_H_NCAP: i64 = 6
329const HG_H_SEGLEN: i64 = 7
330const HG_H_SPAN: i64 = 8
331const HG_H_TICKS: i64 = 9
332const HG_H_PUSHES: i64 = 10
333const HG_H_INSIDE: i64 = 11
334const HG_H_MAXDISP: i64 = 12
335const HG_H_H: i64 = 13
336const HG_H_ZMN: i64 = 14
337const HG_H_HJ: i64 = 15
338const HG_H_RC: i64 = 16
339const HG_H_NOCOLL: i64 = 17 // gate lever: 1 skips the push-out (the neg-control that proves it fires)
340const HG_H_RESTIN: i64 = 18 // rest nodes inside a collider BODY at load: the clipping the operator sees at rest
341const HG_H_WINDOFF: i64 = 19 // gate lever: 1 ignores the wind field
342const HG_H_GUST: i64 = 20
343const HG_H_TICKED: i64 = 21 // girls ticked on the last hairtick
344const HG_RC_NOSTR: i64 = 0 - 1 // load refusals, each naming its conjunct
345const HG_RC_HSTRCAP: i64 = 0 - 2
346const HG_RC_NOVERT: i64 = 0 - 3
347const HG_RC_VERTCAP: i64 = 0 - 4
348const HG_RC_NOSKEL: i64 = 0 - 5
349const HG_RC_SKELCAP: i64 = 0 - 6
351const O_HGHDR: i64 = O_SKIN3 + 24
352const O_HGREST: i64 = O_HGHDR + HG_HDR_BYTES
353const O_HGRL: i64 = O_HGREST + HG_REND_MAX*HG_W*8
354const O_HGCAP: i64 = O_HGRL + HG_SIM*HG_NSEG*8
355const O_HGMASK: i64 = O_HGCAP + HG_CAP_MAX*HG_CAP_W*8
356const O_HGSIMIDX: i64 = O_HGMASK + HG_SIM*8
357const O_HGTAB: i64 = O_HGSIMIDX + HG_SIM*8
358const HG_BLK_BYTES: i64 = HG_MOBS*HG_SIM*HG_W*8
359const O_HGX: i64 = O_HGTAB + HG_REND_MAX*HG_TAB_W*8 // positions
360const O_HGP: i64 = O_HGX + HG_BLK_BYTES // previous positions (velocity = X - P)
361const O_HGD: i64 = O_HGP + HG_BLK_BYTES // THE EXPORT: displacement from rest, the buffer the page copies per frame
362const O_HGSCR: i64 = O_HGD + HG_BLK_BYTES // solver scratch: correction (HG_W) + collider probe (6) + point (3)
363const HG_SCR_WORDS: i64 = HG_W + 9
366const O_PERF: i64 = O_HGSCR + HG_SCR_WORDS*8
373const O_TILE: i64 = O_PERF + PF_WORDS*8
374const TILE_W: i64 = 32 // i64 words per worker slot
375const TILE_HOUT: i64 = 8 // word offset of the 5 wray outs inside a slot
376const TILE_MAX: i64 = 32 // the most workers a band pass may be cut into; the thread ladder
393const O_HQ: i64 = O_TILE + TILE_MAX*TILE_W*8
394const HQ_BYTES: i64 = WX*WZ*8
395const O_URAW: i64 = O_HQ + HQ_BYTES
396const URAW_WORDS: i64 = 44 // GE53: 41 words (r_surf at 40) padded to the vec4u boundary
397const URAW_BYTES: i64 = 176 // URAW_WORDS*4: a vec4u-aligned struct, so the 3-word tail pad is real (was 160 beside WORDS=44 -- pack_uniforms zeroed 176 B into a 160 B block; corrected 2026-09-06 when the GE53 shader shipped its 41-word struct)
398const UR_CAMX: i64 = 0 // Q8 world units (the page used camx()/256)
399const UR_CAMY: i64 = 1
400const UR_CAMZ: i64 = 2
401const UR_TNOW: i64 = 3
402const UR_YAW: i64 = 4 // Q12 radians (the page used yaw()/4096)
403const UR_PITCH: i64 = 5
404const UR_SUNEL: i64 = 6 // Q12 sine of the sun elevation (cal_sunel)
405const UR_DAYT: i64 = 7
406const UR_DLEN: i64 = 8
407const UR_RAIN: i64 = 9
408const UR_SKT: i64 = 10 // packed RGB (spec word 7)
409const UR_SKH: i64 = 11 // packed RGB (spec word 8)
410const UR_SUN: i64 = 12 // spec word 9 (the GPU applies the df>.04 daylight guard)
411const UR_CLD: i64 = 13 // spec word 10
412const UR_WMAX: i64 = 14
413const UR_SELB: i64 = 15 // sel_block(S_SEL)
414const UR_HOK: i64 = 16
415const UR_NPCT: i64 = 17 // npc target t, or -1
416const UR_BROKEN: i64 = 18 // edit counters (broken + placed): the bridge refreshes the voxel texture when their sum moves
417const UR_PLACED: i64 = 19
418const UR_PAL: i64 = 20 // 12 packed RGB words (spec 16..27), vec4u-aligned at byte 80
419const UR_PALF: i64 = 32 // 5 packed RGB words (spec 34..38) at byte 128
420const UR_RESW: i64 = 37 // canvas width in px -- the door tells the sim through set_res (the sim has no window)
421const UR_RESH: i64 = 38
422const UR_SURF: i64 = 40 // GE53: the ground-is-the-field word (sp[P_SURF]); words 41..43 are the vec4u tail pad
423const UR_YFLIP: i64 = 39 // 1 on the WebGPU door (top-left fragment origin), 0 on WebGL2 -- set_yflip
424const CRAFT_TOTAL: i64 = O_URAW + URAW_BYTES
439const NXA_NJ_CAP: i64 = 128 // ref9e 104 joints; the corpus tops out at 370 (nx_nxa_play) = the next rung
440const NXA_ANIM_CAP_W: i64 = 131072 // 1 MiB of key words; ref9e ANIM measured 113,465 words
441const NXA_POSE_CAP_W: i64 = 2048 // ref9e POSE measured 835 words (one frozen stand pose)
442const NXA_HDR_W: i64 = 16
443const NXA_H_LOADED: i64 = 0
444const NXA_H_NJ: i64 = 1
445const NXA_H_DUR: i64 = 2
446const NXA_H_MPB: i64 = 3
447const NXA_H_RJ: i64 = 4
448const NXA_H_POSE: i64 = 5
449const NXA_H_RV: i64 = 6 // six words: x0 y0 vx16 vy16 t0 span (nx_nxa_anim_lib NA_RV_W)
450const NXA_H_RC: i64 = 12
451const NXA_H_NAW: i64 = 13
452const NXA_MOB_W: i64 = 4 // per girl: idle weight q12, clip-time adjustment ms, two spare
453const NXA_M_IW: i64 = 0
454const NXA_M_CTADJ: i64 = 1
458const NXA_IW_IN_TENTHS_PER_S: i64 = 50
459const NXA_IW_OUT_TENTHS_PER_S: i64 = 25
460const NXA_SNAP_TENTHS_PER_S: i64 = 60
461const NXA_SNAP_IW_MAX_Q12: i64 = 3891
462const NXA_IW_FLOOR_Q12: i64 = 16
463const NXA_DT_MS_MAX: i64 = 1000 // a tab that slept a minute eases one second, it does not slam
464const NXA_RC_NOT_LOADED: i64 = 0 - 1
465const NXA_RC_NO_MOB: i64 = 0 - 2
466const NXA_RC_SLOT: i64 = 0 - 3
467const NXA_RC_NJ_ZERO: i64 = 0 - 11
468const NXA_RC_NJ_CAP: i64 = 0 - 12
469const NXA_RC_NAW_ZERO: i64 = 0 - 13
470const NXA_RC_NAW_CAP: i64 = 0 - 14
471const NXA_RC_NPW_CAP: i64 = 0 - 15
472const NXA_RC_POSE_OVERRUN: i64 = 0 - 16
473const NXA_RC_TRACKS: i64 = 0 - 20 // plus nx_nxa_anim_lib's own rc: -21 bad tracks, -22 overrun
474const O_NXA: i64 = CRAFT_TOTAL
475const O_NXA_SKEL: i64 = O_NXA + NXA_HDR_W*8
476const O_NXA_TIDX: i64 = O_NXA_SKEL + NXA_NJ_CAP*NA_SKEL_W*8
477const O_NXA_PQ: i64 = O_NXA_TIDX + NXA_NJ_CAP*NA_IDX_W*8
478const O_NXA_PD: i64 = O_NXA_PQ + NXA_NJ_CAP*4*8
479const O_NXA_MOB: i64 = O_NXA_PD + NXA_NJ_CAP*3*8
480const O_NXA_SCR: i64 = O_NXA_MOB + WC_CAST_N*NXA_MOB_W*8
481const O_NXA_OUT: i64 = O_NXA_SCR + NA_SCR_W*8
482const O_NXA_POSE: i64 = O_NXA_OUT + WC_CAST_N*NXA_NJ_CAP*NA_ROW_W*8
483const O_NXA_ANIM: i64 = O_NXA_POSE + NXA_POSE_CAP_W*8
485const O_NXA_ORDER: i64 = O_NXA_ANIM + NXA_ANIM_CAP_W*8
486const CRAFT_EXT_TOTAL: i64 = O_NXA_ORDER + NXA_NJ_CAP*8
488const WASM_PAGES_REQ: i64 = (CRAFT_EXT_TOTAL + WASM_PAGE_BYTES - 1)/WASM_PAGE_BYTES
494const HG_MIB: i64 = 1048576
495const HG_SCR_HSTR: i64 = O_FB
496const HG_SCR_HSTR_CAP: i64 = 4*HG_MIB
497const HG_SCR_VERT: i64 = O_FB + 4*HG_MIB
498const HG_SCR_VERT_CAP: i64 = 8*HG_MIB
499const HG_SCR_SKEL: i64 = O_FB + 12*HG_MIB
500const HG_SCR_SKEL_CAP: i64 = 2*HG_MIB
501const HG_SCR_DYNA: i64 = O_FB + 14*HG_MIB
502const HG_SCR_DYNA_CAP: i64 = HG_MIB
504const HG_TPS: i64 = 60 // see the header: the page accumulator's 16.6667 ms, hd_ticks_per_s()
505const HG_UNITS_PER_178CM: i64 = 171530 // the page's pairing (GPE_UNITS_PER_178CM), named as the same number
506const HG_CM_178: i64 = 178
507const HG_CM_PER_M: i64 = 100
508const HG_UPB: i64 = HG_UNITS_PER_178CM*HG_CM_PER_M/HG_CM_178 // bind units per world block (1 block = 1 m): 96365
509const HG_G_CMS2: i64 = 981 // standard gravity, cm/s^2
510const HG_G: i64 = HG_G_CMS2*HG_UNITS_PER_178CM/(HG_CM_178*HG_TPS*HG_TPS) // 262 units/tick^2 -- the dress lane's NXGD_G derivation
511const HG_FTL_S_PERMIL: i64 = 1000 - SB_C_HAIR*1000/SD_G // DFTL s_damping (Mueller 2012 "Fast Simulation of Inextensible Hair
513const HG_FENCE_DIV: i64 = 4 // the chain's small-angle validity fence: seglen/4 (SD_Q8/4 in the retired page solver)
514const HG_PROJ_ITERS: i64 = 3 // length/collision alternations per point; the LAST op is always the length projection
515const HG_LOCK_W_MIN: i64 = 900 // the ribbon builder's lock half-width floor (w09 = max(900, span*.045)), PRESERVED
516const HG_LOCK_W_PERMIL: i64 = 45
517const HG_SKIN_NUM: i64 = 16 // skin = lockw x 1.6: half-width + the .6 child scatter -- the farthest a render vertex sits off its guide
518const HG_SKIN_DEN: i64 = 10
519const HG_REACH_DIV: i64 = 2 // collider mask reach = strand length / 2: twice the static fence (L/4), for overshoot
520const HG_GUST_TICKS: i64 = 2*HG_TPS // gust envelope cadence 0.5 Hz: the incumbent shader sway (3.1 rad/s), PRESERVED
521const HG_GUST_SALT: i64 = 3400 // whash seed offset (the weather lib salts with seed + 3300)
522const HG_TORSO_GATE_X: i64 = 15000 // the MFS torso gate (axb < 15000.), the same half-width the paint bands use
524const HG_R_HEADBAND: i64 = 885
525const HG_R_HEAD_J: i64 = 955
526const HG_R_ACROMION: i64 = 818
527const HG_R_CHEST: i64 = 720
528const HG_R_HIP: i64 = 520
529const HG_R_ELBOW: i64 = 630
530const HG_R_NECK_LO: i64 = 840
531const HG_R_SH_LO: i64 = 770
532const HG_R_SH_HI: i64 = 860
533const HG_R_ARM_LO: i64 = 600
534const HG_R_ARM_HI: i64 = 800
535const HG_R_ARM_XMIN: i64 = 60
536const HG_R_ELBOW_XMIN: i64 = 50
539const TH_RAIN: i64 = 1
540const TH_FEAR: i64 = 2
541const TH_MET: i64 = 3
542const TH_SLEPT: i64 = 4
543const TH_HUNGRY: i64 = 5
544const TH_SAWTAKEN: i64 = 6
545const TH_HEARD_TAKEN: i64 = 7
546const TH_HEARD_FRIEND: i64 = 8
547const TH_COMPANY: i64 = 9
549const GO_FRIEND: i64 = 1
550const GO_TAKEN: i64 = 2
551const SAVE_MAGIC: i64 = 20260728001
552const SAVE_VER: i64 = 6 // v6 = STREAMING WORLD (origin + edit journal in the image);
554const SAVE_VER5: i64 = 5
556const MC_X: i64 = 0
557const MC_Y: i64 = 1
558const MC_Z: i64 = 2
559const MC_KIND: i64 = 3
560const MC_PH: i64 = 4
561const MC_DISG: i64 = 5 // 1 = a HUMAN girl disguised as a monster girl (the lore:
564const MC_GENE: i64 = 6 // 20-bit APPEARANCE GENOME rolled at spawn -- every girl is
570const S_SEED: i64 = 0
571const S_CX: i64 = 1 // camera pos Q8 (256 = one block)
572const S_CY: i64 = 2
573const S_CZ: i64 = 3
574const S_YAW: i64 = 4 // it-units (IT_PI = half turn)
575const S_PITCH: i64 = 5
576const S_T: i64 = 6
577const S_BROKEN: i64 = 7
578const S_PLACED: i64 = 8
579const S_HX: i64 = 9 // crosshair DDA hit cache
580const S_HY: i64 = 10
581const S_HZ: i64 = 11
582const S_HFACE: i64 = 12 // 0 none, 1 +x, 2 -x, 3 +y, 4 -y, 5 +z, 6 -z
583const S_HOK: i64 = 13 // 1 = in reach
584const S_VY: i64 = 14 // vertical velocity Q8/tick (jump + gravity)
585const S_GROUNDED: i64 = 15 // 1 = standing on a surface (jump allowed)
586const S_SEL: i64 = 16 // hotbar slot 0..4 (Q cycles; sel_block maps to a block type)
587const S_LBX: i64 = 17 // last-broken cell (probes/particles; the hit cache retargets
588const S_LBY: i64 = 18 // every frame, so "what did I just break" needs its own slots)
589const S_LBZ: i64 = 19
590const S_Q: i64 = 20 // ray pixel size 2..5 -- ADAPTIVE: the organ tunes itself from
591const S_FMA: i64 = 21 // the surface's reported frame ms (EMA x16); shim only reports
592const S_WMAX: i64 = 22 // highest solid y in the world -- rays above it heading up/flat
594const S_SPX: i64 = 23 // spawn point (H key + void-fall auto-respawn return here)
595const S_SPY: i64 = 24
596const S_SPZ: i64 = 25
597const S_NPCT: i64 = 26 // crosshair NPC target: dense index of the girl under the
599const S_FOUND: i64 = 27 // disguised humans FOUND (met + identified = under protection)
600const S_LOST: i64 = 28 // found humans TAKEN by wardens (the cost of not protecting)
601const S_BCD: i64 = 29 // birth cooldown ticks (community pacing)
602const S_WOX: i64 = 30 // WORLD ORIGIN of the window, in blocks (v6 streaming): the
603const S_WOZ: i64 = 31 // arena is a 128x48x128 CACHE over unbounded absolute terrain
604const S_EJDROP: i64 = 32 // edits REFUSED because the journal was full (loud, never silent)
605const S_HARV: i64 = 33 // MATURE crops harvested (the farming loop's payoff counter)
606const S_PLANT: i64 = 34 // seeds planted
607const S_GROWN: i64 = 35 // crops that reached maturity (world truth, gate-readable)
608const S_VAR: i64 = 36 // which world identity this arena runs (the passport's
610const S_GENP: i64 = 37
611const S_TGT: i64 = 38 // DISPLAY-DERIVED frame budget, EMA-x16 units (0 = shipped
616const S_BLDG: i64 = 39 // W3 settlements: buildings stamped into this arena (a
621const S_BLDGX: i64 = 40 // last-stamped building anchor, arena-local (gate probe)
622const S_BLDGY: i64 = 41 // its floor height
623const S_BLDGZ: i64 = 42
624const S_RESW: i64 = 44 // GE55: canvas size and origin, written by the door (set_res / set_yflip)
625const S_RESH: i64 = 45
626const S_YFLIP: i64 = 46
627const S_AGEN: i64 = 47
628const S_DPAPPLIED: i64 = 48 // GE59: the P_DAYPHASE value last applied to S_T (0 = never) -- one re-base per distinct poke, never per tick // GE57: arena GENERATION -- +1 per wc_shift that moves. The GPU tiers key every voxel-texture upload on it: a 16-block re-base drawn against the previous texture is the transport/fall-through the operator sees (2026-09-05).
629const S_GT_KEEP: i64 = 43 // ground-truth capture: when 1, render_impl leaves the depth plane in
633const SHIFT_STRIDE: i64 = 16 // one window slide, in blocks
634const SHIFT_MARGIN: i64 = 32 // player this close to a window edge -> the world slides under them
637const P_TBASE: i64 = 0 // terrain base height
638const P_TAMP1: i64 = 1 // large-noise amplitude
639const P_TAMP2: i64 = 2 // detail-noise amplitude
640const P_WATER: i64 = 3 // flood level
641const P_SNOW: i64 = 4 // snow line (99 = never)
642const P_TREE: i64 = 5 // tree sparsity modulus (0 = no trees)
643const P_CAVETH: i64 = 6 // cave carve threshold (lower = more cavern)
644const P_SKYTOP: i64 = 7 // packed zenith colour
645const P_SKYHOR: i64 = 8 // packed horizon colour
646const P_SUN: i64 = 9 // 1 = sun disc
647const P_CLOUD: i64 = 10 // 1 = cloud deck
651const P_WXCOV: i64 = 11 // cloud coverage Q12 (drives the cloud density band)
652const P_WXWINDX: i64 = 12 // wind x component, Q12-scaled speed*cos(dir)
653const P_WXWINDZ: i64 = 13 // wind z component
654const P_WXTYPE: i64 = 14 // precip type this eighth: 0 none, 1 rain, 2 snow
655const P_WXTEMP: i64 = 15 // temperature Q12 (relative scale, freezing=1024)
656const P_PAL: i64 = 16 // +blocktype = packed base colour (0..11)
657const P_MOBC: i64 = 28 // +kind*2+half = packed mob colours (3 kinds x 2 tones)
658const P_PAL2: i64 = 34 // +b-12 = packed colour for farm blocks 12..16 (5 rows, 34-38)
659const P_DAYLEN: i64 = 40 // A1 calendar: ticks per day (ALL timing is spec DATA)
660const P_SEASD: i64 = 41 // days per season (4 seasons cycle)
661const P_GROWE: i64 = 42 // farm-tick cadence: one grow/hydrate pass every N ticks
662const P_GROWW: i64 = 43 // crop speed on WET farmland (Minecraft stencil speed)
663const P_GROWD: i64 = 44 // crop speed on DRY farmland
664const P_RAINS: i64 = 45 // +season = rain permil per day-eighth (4 rows, 45-48)
687const P_STYLE: i64 = 49
688const P_DAYPHASE: i64 = 39 // GE59 (2026-09-05): the boot clock as DATA -- the OTHER dead hole (world_recipes.conf names 39 and 49). Post-boot band, so it cannot be read at init: apply2_impl re-bases S_T to it on the next tick, once per distinct value; 0 (the zeroing loop) leaves the DAYLEN/4 boot phase, so every existing world is byte-identical by construction. If P_PAL2 ever widens, this slot moves with the ONE named const.
689const WC_STYLE_REAL: i64 = 0 // textured, smooth light -- the shipped look, unchanged
690const WC_STYLE_TOON: i64 = 1 // banded light (anime/cel)
691const WC_STYLE_FLAT: i64 = 2 // untextured facets (artsy low-poly)
692const WC_STYLE_SOFT: i64 = 3 // SMOOTH TERRAIN: ground lit by a heightfield normal interpolated across the block (no grid bevel, no per-block facet)
696const WC_SOFT_SCAN: i64 = 3
697const WC_STYLE_MAX: i64 = 3 // the highest id this engine owns; set_style REFUSES above it
701const WC_TOON_CUT: i64 = 588
702const WC_TOON_LO: i64 = 412
703const WC_TOON_HI: i64 = 922
710const WC_TEX_NEUTRAL: i64 = 128
711const P_ADV: i64 = 50 // +i = smart-object ADVERTISEMENTS (C1): packed
715const P_HISTAGE: i64 = 60 // DECLARED geomorphic stage (Strahler bands): 0 = mature/
722const P_TREEMAX: i64 = 59 // tree altitude ceiling (0 = the historic hardcoded 19)
723const P_TREESPEC: i64 = 61 // W2 SPECIES GENOME (packed, 0 = legacy 4-block stamp):
733const P_WARD: i64 = 58 // warden daytime hunt radius in BLOCKS (0 = the 12-block
737const P_OUTFIT: i64 = 57 // outfit mode: 0 = identity keeps everyone clothed;
742const P_CURI: i64 = 56 // curiosity threshold: a girl approaches the player only
751const P_BLDG: i64 = 62 // W3 settlement density: site-cell modulus (0 = none; the
753const P_BLDGSPEC: i64 = 63 // low 4 bits = archetype row in nx_indoorgen_data
754const P_ERODE: i64 = 64 // E1 TALUS EROSION BUDGET in relaxation ticks (0 = OFF).
760const P_ERTAL: i64 = 65 // DERIVED talus threshold, WC_ER_Q units. NEVER authored:
788const P_GARM: i64 = 70
789const GAR_N: i64 = 9
790const GAR_BIKINI_TOP: i64 = 1
791const GAR_BIKINI_BOT: i64 = 2
792const GAR_ONEPIECE: i64 = 3
793const GAR_SARONG: i64 = 4
794const GAR_SUNDRESS: i64 = 5
795const GAR_TEE: i64 = 6
796const GAR_SHORTS: i64 = 7
797const GAR_SKIRT: i64 = 8
798const GAR_DRESS: i64 = 9
799const GAR_COV_TOP: i64 = 1
800const GAR_COV_BOT: i64 = 2
801const GAR_COV_FULL: i64 = 3
802const GAR_CAT_SWIM: i64 = 0
803const GAR_CAT_COVER: i64 = 1
804const GAR_CAT_CASUAL: i64 = 2
805const GAR_CAT_EVENING: i64 = 3
806const GAR_CAT_NONE: i64 = 4 // what mobgarc reports for a girl wearing nothing
807const GAR_CAT_SH: i64 = 2
808const GAR_CAT_MASK: i64 = 7
809const GAR_HUE_SH: i64 = 8
810const GAR_HUE_MASK: i64 = 511
811const GAR_SPAN_SH: i64 = 17
812const GAR_SPAN_MASK: i64 = 63
813const GAR_SPAN_UNIT_DEG: i64 = 4
814const GAR_SAT_SH: i64 = 23
815const GAR_LIT_SH: i64 = 27
816const GAR_NIB_MASK: i64 = 15
817const GAR_TINT_STOPS: i64 = 4 // MG_OUTFIT_MASK + 1: two genome bits, four stops
818const GAR_SLOT_SH: i64 = 8 // outfit word = upper id << GAR_SLOT_SH | lower id
819const GAR_ID_MASK: i64 = 255
820const HSL_DEG_FULL: i64 = 360
821const HSL_SECTOR_DEG: i64 = 60
822const MG_BEACH_SH: i64 = 18 // the beachwear genome bits the MIXED beach breeds (P_OUTFIT)
823const MG_BEACH_MASK: i64 = 3
824const MOB_POSE_SLEEP: i64 = 2 // mob_pose's published sleep id (the pose door's contract)
825const B_WATER: i64 = 4 // the water block (wshade2's shimmer branch, the shore ramp)
826const WC_SPECN: i64 = 79 // spec words the engine owns: 69 -> 79 for the GE13b wardrobe
837const P_OCEAN: i64 = 66
848const P_WPIPE: i64 = 67
859const P_WPSCALE: i64 = 68
860const P_SURF: i64 = 69 // GE53 SURFACE SOURCE: 0 = the cell grid (all voxel, byte-identical to
867const WC_SURF_STEP_Q8: i64 = 64
868const WC_GAIT_BOB_Q8: i64 = 7 // thorax oscillation AMPLITUDE (~2.7cm, 5.5cm p2p --
877const WC_BREATH_TICKS: i64 = 257
888const WC_BREATH_Q8: i64 = 1
893const WC_BREATH_CUT_Q8: i64 = 24
894const WC_STEP_EASE_UP: i64 = 48 // mob Y climb rate Q8/tick (a 1-block rise ~ 5 ticks)
895const WC_NIGHT_X8: i64 = 5 // night begins at this eighth of the day (5/8)
897const EYE: i64 = 435 // eye height Q8 (~1.7 blocks)
898const SPEED: i64 = 40 // walk Q8 per tick
903const WC_PH_PER_TICK: i64 = 5 // the free-running advance MC_PH still uses for WANDER
904const WC_PH_ANG: i64 = 214 // angle-units per phase unit (the incumbent's drive scaling)
905const WC_NEED_GAIT: i64 = 3 // the needs row's spare slot, named now that it carries a value
914const WC_DDEG_HALFTURN: i64 = 1800 // decidegrees in IT_PI (a half turn): the ddeg -> it-unit scale
921const WC_STRIDE_Q8: i64 = 374
927const WC_PELVIS_ROT_DDEG: i64 = 52
936const WC_THORAX_ROT_DDEG: i64 = 146
940const WC_ELBOW_ROM_DDEG: i64 = 297
951const WC_TURN_PER_STRIDE: i64 = IT_PI/2
952const TURN: i64 = 140 // yaw it-units per tick (keyboard turn / legacy dir path)
953const PITCHV: i64 = 90 // pitch it-units per tick (R/F keyboard look)
954const PITCH_MAX: i64 = 5000
955const LOOKS: i64 = 6 // mouselook: it-units per accumulated look count
956const JUMPV: i64 = 66 // jump takeoff velocity Q8/tick
957const GRAV: i64 = 9 // gravity Q8/tick^2
958const VTERM: i64 = 120 // terminal fall velocity Q8/tick -- ONE ruler for the player AND every mob
966const WC_IMP_SCALE: i64 = SD_Q8/4
967const MAXSTEPS: i64 = 110 // DDA cells per ray (view distance)
968const REACH_STEPS: i64 = 20 // crosshair edit reach in DDA cells
1149const WC_ER_Q: i64 = 256 // fixed point the pass runs in. World heights are
1153const WC_ER_STABLE_Q: i64 = WC_ER_Q / 4 // DERIVED, not tasted: an explicit 4-neighbour
1157const WC_ER_RATE_Q: i64 = WC_ER_STABLE_Q / 2 // WRITTEN AS THE ARITHMETIC: half the stability
1162const WC_ER_MAXK: i64 = 3 // STRUCTURAL, not a clamp: three unrolled levels
1167const WC_ER_FLAT: i64 = 0 - 1 // P_ERTAL sentinel: measured, and there is no relief
1432const WC_REVIEW_ARC: i64 = IT_PI/2
1741const BLDG_SITE: i64 = 40 // site-cell stride, blocks
1742const IG_SCAN0: i64 = 10 // W3 solve: first candidate anchor offset inside the site cell
1743const IG_SCANSTEP: i64 = 10 // candidate grid step: 3x3 covers offsets 10/20/30; footprint
1747const IG_MAXSLOPE: i64 = 2 // pre-declared accept rule: corners may deviate <=2 blocks from
1751const IG_FOUND: i64 = 3 // foundation skirt courses below the floor (IG_MAXSLOPE + 1)
3008const MOB_R_Q8: i64 = 90

functions

970func wst(base: i64) -> *i64 { return (base + O_ST) as *i64 }
971func wsp(base: i64) -> *i64 { return (base + O_SPEC) as *i64 }
972func wgp(base: i64) -> *i64 { return (base + O_GENP) as *i64 }
973func mobp(base: i64) -> *i64 { return (base + O_MOBS) as *i64 }
974func wfb(base: i64) -> *i64 { return (base + O_FB) as *i64 }
975func wvx(base: i64) -> *u8 { return (base + O_VOX) as *u8 }
976func winp(base: i64) -> *i64 { return (base + O_INPUT) as *i64 }
977func wpack(r: i64, g: i64, b: i64) -> i64 { return r | (g << 8) | (b << 16) }
978func wclamp(v: i64, lo: i64, hi: i64) -> i64 { if v < lo { return lo } if v > hi { return hi } return v }
980func vin(x: i64, y: i64, z: i64) -> i64
986func vget(base: i64, x: i64, y: i64, z: i64) -> i64
991func vset(base: i64, x: i64, y: i64, z: i64, b: i64) -> i64
1004func ejp(base: i64) -> *i64 { return (base + O_EJRN) as *i64 }
1005func ej_key(ax: i64, ay: i64, az: i64) -> i64
1008func ej_put(base: i64, ax: i64, ay: i64, az: i64, b: i64) -> i64
1023func ej_get(base: i64, ax: i64, ay: i64, az: i64) -> i64
1038func ej_overlay(base: i64, lx0: i64, lx1: i64, lz0: i64, lz1: i64) -> i64
1061func wc_edit(base: i64, x: i64, y: i64, z: i64, b: i64) -> i64
1070func vsolid(base: i64, x: i64, y: i64, z: i64) -> i64
1079func whash(x: i64, z: i64, sd: i64) -> i64
1087func wnoise(x: i64, z: i64, sc: i64, sd: i64) -> i64
1103func wheight_raw(base: i64, x: i64, z: i64, sd: i64) -> i64
1178func wheight_q(base: i64, x: i64, z: i64, sd: i64) -> i64
1189func wc_er_flux(d: i64, t: i64) -> i64
1199func wc_er_talus(base: i64, sd: i64) -> i64
1229func wc_er_arm(base: i64, sd: i64) -> i64
1239func wc_er1(base: i64, x: i64, z: i64, sd: i64, t: i64) -> i64
1248func wc_er2(base: i64, x: i64, z: i64, sd: i64, t: i64) -> i64
1257func wc_er3(base: i64, x: i64, z: i64, sd: i64, t: i64) -> i64
1270func wheight(base: i64, x: i64, z: i64, sd: i64) -> i64
1285func wheight_qe(base: i64, x: i64, z: i64, sd: i64) -> i64
1300func wsp_beach_ocean_q(sp: *i64, ax: i64, az: i64, hq: i64) -> i64
1313func hq_get(base: i64, x: i64, z: i64) -> i64
1321func hq_set(base: i64, x: i64, z: i64, v: i64) -> i64
1326func hq_off() -> i64 { return O_HQ }
1330func wc_surface_source(base: i64, pxq: i64, pzq: i64) -> i64
1347func wterrain(b: i64) -> i64
1359func wnoise3(x: i64, y: i64, z: i64, sc: i64, sd: i64) -> i64
1383func wc_wmax(base: i64) -> i64
1405func wsp_ocean_d(sp: *i64, ax: i64, az: i64) -> i64
1420func wsp_sea_yaw(sp: *i64) -> i64
1439func wsp_beach_ocean(sp: *i64, ax: i64, az: i64, h: i64) -> i64
1453func gencol(base: i64, x: i64, z: i64, ax: i64, az: i64, sd: i64) -> i64
1490func vset_box(base: i64, x: i64, y: i64, z: i64, b: i64, lx0: i64, lx1: i64, lz0: i64, lz1: i64) -> i64
1512func wsp_palm_shape(base: i64, sp: *i64, tx: i64, tz: i64, h2: i64, th9: i64, cr9: i64,
1569func gentrees(base: i64, lx0: i64, lx1: i64, lz0: i64, lz1: i64, sd: i64) -> i64
1755func igfloor(a: i64, b: i64) -> i64
1760func ig_rotx(r: i64, x: i64, z: i64) -> i64
1766func ig_rotz(r: i64, x: i64, z: i64) -> i64
1772func genbuildings(base: i64, lx0: i64, lx1: i64, lz0: i64, lz1: i64, sd: i64) -> i64
1911func genworld(base: i64, sd: i64) -> i64
1932func wc_shift(base: i64, dx: i64, dz: i64) -> i64
2036func wray_surf(base: i64, dx: i64, dy: i64, dz: i64, maxsteps: i64, out: *i64) -> i64
2111func wray2(base: i64, dx: i64, dy: i64, dz: i64, maxsteps: i64, out: *i64, skipw: i64) -> i64
2138func wray3(base: i64, dx: i64, dy: i64, dz: i64, maxsteps: i64, out: *i64, skipw: i64, skipt: i64) -> i64
2224func wray(base: i64, dx: i64, dy: i64, dz: i64, maxsteps: i64, out: *i64) -> i64
2229func wcol(base: i64, b: i64) -> i64
2237func sel_block(sel: i64) -> i64
2247func wface_l(face: i64) -> i64
2255func wsky(base: i64, syy: i64) -> i64
2279func wcloud(camx: i64, camy: i64, camz: i64, dx: i64, dy: i64, dz: i64, t: i64) -> i64
2293func wsky2(base: i64, syy: i64, px: i64, py: i64, sunx: i64, suny: i64, sunon: i64) -> i64
2318func wao(base: i64, cx2: i64, cy2b: i64, cz2: i64, face: i64, u: i64, v: i64) -> i64
2374func wshade2(base: i64, b0: i64, face: i64, steps: i64, syy: i64, hpx: i64, hpy: i64, hpz: i64, t2: i64, clx: i64, cly: i64, clz: i64) -> i64
2469func wc_spec(base: i64, v: i64) -> i64
2722func genmobs(base: i64, sd: i64) -> i64
2764func wc_spawn_bush(base: i64, forward: i64, lateral: i64, radius: i64, height: i64, material: i64) -> i64
2815func init_impl_v(base: i64, v: i64, seed: i64) -> i64
2919func init_impl(base: i64, seed: i64) -> i64 { return init_impl_v(base, 0, seed) }
2922func wc_respawn(base: i64) -> i64
2933func wground(base: i64, x: i64, z: i64) -> i64
2943func wc_contact_floor_q(base: i64, xq: i64, zq: i64, top: i64) -> i64
2967func wstand(base: i64, nxq: i64, nzq: i64, cyq: i64) -> i64
2983func wstand_here(base: i64, xq: i64, zq: i64) -> i64
3009func mob_solid2(base: i64, x: i64, g: i64, z: i64) -> i64
3014func mob_clear_x(base: i64, nx: i64, nz: i64, g: i64) -> i64
3023func mob_clear_z(base: i64, nx: i64, nz: i64, g: i64) -> i64
3032func mob_fits(base: i64, x: i64, g: i64, z: i64) -> i64
3038func mob_ground(base: i64, x: i64, ytop: i64, z: i64) -> i64
3058func mob_step_gait(vyp: *i64, k: i64, cy0: i64, ng: i64) -> i64
3081func npc_pick(base: i64, fx: i64, fy: i64, fz: i64) -> i64
3112func cal_dayt(base: i64) -> i64
3118func cal_day(base: i64) -> i64
3124func cal_season(base: i64) -> i64
3130func cal_night(base: i64) -> i64
3136func cal_sunel(base: i64) -> i64
3145func cal_rain(base: i64) -> i64
3160func wc_weather_tick(base: i64) -> i64
3180func dg_bst(dg: i64, b: i64) -> i64 { return dg - ((dg >> 3) & 7)*8 + b*8 }
3187func wc_grow_set(base: i64, lx: i64, ly: i64, lz: i64, b: i64) -> i64
3196func wc_wet_near(base: i64, lx: i64, ly: i64, lz: i64) -> i64
3209func wc_farm_tick(base: i64) -> i64
3268func wc_soft_seat_all(base: i64) -> i64
3280func passp(base: i64) -> *i64 { return (base + O_PASS) as *i64 }
3281func wc_pass_ck(p: *i64) -> i64
3284func wc_party_count(base: i64) -> i64
3297func wc_pass_sync(base: i64) -> i64
3353func wc_pass_apply(base: i64) -> i64
3396func pass_level_of(base: i64) -> i64
3404func party_of(base: i64) -> i64
3433func mob_pose(base: i64, k: i64) -> i64
3441func mobpose(k: i64) -> i64 { return mob_pose(0, k) }
3458func wc_mob_in_water(base: i64, k: i64) -> i64
3464func wc_outfit(base: i64, k: i64) -> i64
3498func mob_outfit(base: i64, k: i64) -> i64
3504func mob_outfit_v1(base: i64, k: i64) -> i64
3518func wc_need_seed(base: i64) -> i64
3534func mindp(base: i64) -> *i64 { return (base + O_MIND) as *i64 }
3535func wc_mind_zero(base: i64) -> i64
3542func th_add(base: i64, k: i64, id: i64, mag: i64, ttl: i64) -> i64
3565func th_mood(base: i64, k: i64) -> i64
3580func go_add(base: i64, k: i64, subj: i64, pred: i64, conf: i64) -> i64
3603func go_newest(base: i64, k: i64) -> i64
3621func wc_ddeg(d: i64) -> i64 { return d*IT_PI/WC_DDEG_HALFTURN }
3624func wc_amp_ddeg(range_ddeg: i64) -> i64 { return wc_ddeg(range_ddeg)/2 }
3643func wc_stride_ang(g_q8: i64) -> i64 { return g_q8*2*IT_PI/WC_STRIDE_Q8 }
3645func wc_angwrap(d: i64) -> i64
3668func wc_hdg_step(hdg: i64, dx: i64, dz: i64) -> i64
3724func wc_hdg_of(base: i64, k: i64) -> i64 { let hp: *i64 = (base + O_MOBHDG) as *i64; return hp[k] }
3726func wc_mob_sph(base: i64, k: i64) -> i64
3738func wc_gp_pelvis(sph: i64) -> i64 { return wc_amp_ddeg(WC_PELVIS_ROT_DDEG)*it_sin4096(sph % (2*IT_PI))/WATER_MAGIC_4096 }
3739func wc_gp_thorax(sph: i64) -> i64 { return wc_amp_ddeg(WC_THORAX_ROT_DDEG)*it_sin4096(sph % (2*IT_PI))/WATER_MAGIC_4096 }
3740func wc_gp_leg(sph: i64) -> i64 { return it_sin4096(sph % (2*IT_PI))*(IT_PI/6)/WATER_MAGIC_4096 }
3741func wc_gp_arm(sph: i64) -> i64 { return it_sin4096(sph % (2*IT_PI))*(IT_PI/12)/WATER_MAGIC_4096 }
3744func wc_gp_elbow(sph: i64) -> i64 { return wc_ddeg(WC_ELBOW_ROM_DDEG)*(WATER_MAGIC_4096 - it_cos4096(sph % (2*IT_PI)))/(2*WATER_MAGIC_4096) }
3748func mob_tick(base: i64) -> i64
4303func apply2_impl(base: i64, fwd: i64, strafe: i64, turn: i64,
4481func wc_cycle(base: i64) -> i64
4490func wc_framems(base: i64, ms: i64) -> i64
4542func wc_save_ck(base: i64) -> i64
4554func wc_save_ck_v5(base: i64) -> i64
4564func wc_save_build(base: i64) -> i64
4597func wc_save_apply(base: i64) -> i64
4645func apply_impl(base: i64, fwd: i64, turn: i64, pit: i64, brk: i64, plc: i64) -> i64
4650func tick_impl(base: i64, d: i64) -> i64
4669func step_impl(base: i64) -> i64