code wiki / (root) / nx_outfit_sexiness.nx

nx_outfit_sexiness.nx source

↩ module page · 82 lines · 3597 B

1// nx_outfit_sexiness.nx -- outfit sexiness ladder INDEPENDENT of explicit visibility. 2// 3// Distinct from nx_eroticism_ladder (which is about pose + nudity + 4// penetration). An outfit can be SEXY without being explicit: a tight 5// cocktail dress with deep V is sexy but not nude; a sheer bodysuit 6// shows skin without being penetrative; a thong + sports bra is 7// revealing but neutral pose. 8// 9// 6-rank sealed ladder: 10// MODEST_COVERED turtleneck / long sleeves / loose 11// CASUAL jeans + tee / standard daywear 12// STYLISH fitted / accessorized / curated 13// SEDUCTIVE lingerie / sheer / low-cut / bodycon 14// PROVOCATIVE micro outfit / minimal coverage 15// EXPLICIT no fabric where it would normally cover 16 17// nx_safety_envelope: 18// intended_use: AUTO_APPLIED -- primitive-specific tuning queued 19// sil_target: SIL1 20// evidence: [bulk_applied_2026-05-16, see-file-comment-for-detail] 21// verdict: NOT_YET_EVALUATED 22 23import "nx_syscalls.nx" 24 25const NX_SEXY_MODEST_COVERED: i64 = 1 26const NX_SEXY_CASUAL: i64 = 2 27const NX_SEXY_STYLISH: i64 = 3 28const NX_SEXY_SEDUCTIVE: i64 = 4 29const NX_SEXY_PROVOCATIVE: i64 = 5 30const NX_SEXY_EXPLICIT: i64 = 6 31 32const NX_SEXY_RES_MEASURED: i64 = 0 33const NX_SEXY_RES_DECLARED: i64 = 1 34const NX_SEXY_RES_DELTA: i64 = 2 35const NX_SEXY_RES_VERDICT: i64 = 3 36const NX_SEXY_RES_FIELDS: i64 = 4 37 38const NX_SEXY_V_SEVERE_UNDER: i64 = 0 39const NX_SEXY_V_UNDERSHOOT: i64 = 1 40const NX_SEXY_V_MATCH: i64 = 2 41const NX_SEXY_V_OVERSHOOT: i64 = 3 42const NX_SEXY_V_SEVERE_OVER: i64 = 4 43 44// Classify measured sexiness from typed outfit attributes. 45// coverage_pct 0..100 — how much skin is covered by fabric 46// fit_tightness_q10 0..1024 — loose..bodycon-skintight 47// sheer_pct 0..100 — fabric transparency where present 48// cut_drama_q10 0..1024 — neckline depth / slit height / cut-out total 49func nx_sexy_classify_measured(coverage_pct: i64, fit_q10: i64, 50 sheer_pct: i64, cut_drama_q10: i64) -> i64 { 51 // Score = (100 - coverage_pct) + fit/4 + sheer + cut/4 — proxy for sexiness intensity. 52 let intensity: i64 = (100 - coverage_pct) + fit_q10 / 4 + sheer_pct + cut_drama_q10 / 4 53 54 if intensity < 30 { return NX_SEXY_MODEST_COVERED } 55 if intensity < 80 { return NX_SEXY_CASUAL } 56 if intensity < 160 { return NX_SEXY_STYLISH } 57 if intensity < 260 { return NX_SEXY_SEDUCTIVE } 58 if intensity < 380 { return NX_SEXY_PROVOCATIVE } 59 return NX_SEXY_EXPLICIT 60} 61 62// Validate measured vs declared sexiness target. 63func nx_outfit_sexiness_validate(declared_kind: i64, coverage_pct: i64, 64 fit_q10: i64, sheer_pct: i64, 65 cut_drama_q10: i64, result: *i64) -> i64 { 66 var i: i64 = 0 67 while i < NX_SEXY_RES_FIELDS { result[i] = 0; i = i + 1 } 68 69 let measured: i64 = nx_sexy_classify_measured(coverage_pct, fit_q10, sheer_pct, cut_drama_q10) 70 let delta: i64 = measured - declared_kind 71 result[NX_SEXY_RES_MEASURED] = measured 72 result[NX_SEXY_RES_DECLARED] = declared_kind 73 result[NX_SEXY_RES_DELTA] = delta 74 75 var verdict: i64 = NX_SEXY_V_MATCH 76 if delta <= -2 { verdict = NX_SEXY_V_SEVERE_UNDER } 77 if delta == -1 { verdict = NX_SEXY_V_UNDERSHOOT } 78 if delta == 1 { verdict = NX_SEXY_V_OVERSHOOT } 79 if delta >= 2 { verdict = NX_SEXY_V_SEVERE_OVER } 80 result[NX_SEXY_RES_VERDICT] = verdict 81 return 0 82}