nx_arousal_body.nx
buildroot/runtime/nx_arousal_body.nx
about
nx_arousal_body.nx -- arousal progression ON THE BODY, not on a chart.
Sphere-traces the sovereign SDF humanoid (nx_sdfrender's 18-ellipsoid form, feminine morph from
nx_body_figure) as an orthographic FRONT view, maps every surface hit to an anatomical site by its
world position, and shades it with the real Beer-Lambert skin optics at that site's perfusion.
Emits a FILMSTRIP: the same body at N times, so flush PROPAGATION is visible as it spreads.
Bands and ticks are an abstraction of the physiology. This is the physiology on a body.
★Front is -z in this rig (breasts and face both sit at -z), so the camera looks along +z.
★SITE MAP is by world (x,y) against the rig's own part centres: head/neck y>980, arms |x|>380,
legs y<-150, breast y>700, sub-mammary y>560, torso y>200, else pelvic/genital.
usage: nx_arousal_body <out.png> <sex0m1f> <drive_permil> <melanin_permil> [propensity] [track]
license_tier: ORIGINAL expect_exit: 0
dependencies 5 imports · 0 importers
imports: nx_arousal_skin_lib.nxnx_body_figure.nxnx_jpeg_decoder.nxnx_doc_layout.nxnx_png_write.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 22 | const AB_FRAMES: i64 = 6 |
| 23 | const AB_FW: i64 = 190 |
| 24 | const AB_FH: i64 = 330 |
| 25 | const AB_HEAD: i64 = 30 |
| 26 | const AB_FOOT: i64 = 22 |
| 27 | const AB_SPAN_MS: i64 = 900000 |
| 28 | const AB_TAU_NIP: i64 = 6000 |
| 29 | const AB_MAXPT: i64 = 512 |
| 30 | const AB_W: i64 = 1140 |
functions
| 32 | func ab_abs(v: i64) -> i64 { if v < 0 { return 0 - v } return v } |
| 33 | func ab_px(img: *u8, x: i64, y: i64, r: i64, g: i64, b: i64) -> i64 |
| 42 | func ab_char(img: *u8, tbl: *u8, x: i64, y: i64, ch: i64, cr: i64, cg: i64, cb: i64) -> i64 |
| 56 | func ab_text(img: *u8, tbl: *u8, x: i64, y: i64, s: *u8, cr: i64, cg: i64, cb: i64) -> i64 |
| 61 | func ab_num(img: *u8, tbl: *u8, x: i64, y: i64, v: i64, cr: i64, cg: i64, cb: i64) -> i64 |
| 80 | func ab_isqrt(v: i64) -> i64 { if v <= 0 { return 0 } var x: i64 = v; var y: i64 = (x + 1) / 2; while y < x { x = y; y = (x + v / x) / 2 } return x } called by 1: main |
| 83 | func ab_hash(x: i64, y: i64, z: i64) -> i64 called by 1: main |
| 92 | func ab_wrap(ndl: i64, wrapw: i64) -> i64 called by 1: main |
| 100 | func ab_spec(ndh: i64, ndv: i64, shin: i64) -> i64 called by 1: main |
| 114 | func ab_ao(base: i64, px: i64, py: i64, pz: i64, nx1: i64, ny1: i64, nz1: i64) -> i64 |
| 147 | func ab_tex(tex: *u8, tw: i64, th: i64, wx: i64, wy: i64, ch: i64) -> i64 called by 1: main |
| 159 | func ab_site(wx: i64, wy: i64) -> i64 |
| 170 | func main(argc: i64, argv: *i64) -> i64 |