nx_cine_sexy_test.nx source
↩ module page · 82 lines · 4086 B
1import "nx_syscalls.nx"
2import "nx_cinematographer.nx"
3import "nx_outfit_sexiness.nx"
4
5func main() -> i64 {
6 let result: *i64 = (sys_mmap(NX_CINE_RES_FIELDS * 8 + 16)) as *i64
7
8 // ==========================================================
9 // CINEMATOGRAPHER
10 // ==========================================================
11
12 // T1: AWARD_WORTHY editorial — 85mm + f/2.8 + centered.
13 nx_cinematographer(NX_CINE_TARGET_EDITORIAL, NX_LENS_PORTRAIT_85MM,
14 NX_APERTURE_F28, NX_COMP_CENTERED, result)
15 let v1: i64 = result[NX_CINE_RES_VERDICT]
16 if v1 != NX_CINE_V_AWARD_WORTHY { return 1 }
17
18 // T2: Documentary with wrong lens (85mm in candid) -> AMATEUR or PROFESSIONAL.
19 nx_cinematographer(NX_CINE_TARGET_DOCUMENTARY, NX_LENS_PORTRAIT_85MM,
20 NX_APERTURE_F4, NX_COMP_RULE_OF_THIRDS, result)
21 let v2: i64 = result[NX_CINE_RES_VERDICT]
22 // Doc + 85mm = 614 lens; doc + f/4 = 1024 ap; doc + thirds = 1024 comp.
23 // composite = 614*35 + 1024*30 + 1024*35 / 100 = 877. AWARD_WORTHY.
24 // Hmm, lens-score 614 is good enough since other axes compensate.
25 if v2 < NX_CINE_V_PROFESSIONAL { return 10 }
26
27 // T3: Mismatched fashion (wide lens + f/8 + off-balance) -> AMATEUR.
28 nx_cinematographer(NX_CINE_TARGET_FASHION, NX_LENS_WIDE_24MM,
29 NX_APERTURE_F8, NX_COMP_OFF_BALANCE, result)
30 let v3: i64 = result[NX_CINE_RES_VERDICT]
31 // fashion + wide = 768. fashion + f/8 = 410. fashion + off_balance = 410.
32 // composite = 768*35 + 410*30 + 410*35 / 100 = 535 -> AMATEUR.
33 if v3 != NX_CINE_V_AMATEUR { return 20 }
34 let fa3: i64 = result[NX_CINE_RES_FAIL_AXIS]
35 if fa3 == NX_CINE_AXIS_LENS { return 21 } // lens isn't lowest
36
37 // T4: Cinematic glamour shot — 85mm + f/1.4 + leading lines + cinematic target.
38 nx_cinematographer(NX_CINE_TARGET_CINEMATIC, NX_LENS_PORTRAIT_85MM,
39 NX_APERTURE_F14, NX_COMP_LEADING_LINES, result)
40 let v4: i64 = result[NX_CINE_RES_VERDICT]
41 if v4 != NX_CINE_V_AWARD_WORTHY { return 30 }
42
43 // ==========================================================
44 // OUTFIT SEXINESS
45 // ==========================================================
46
47 let sresult: *i64 = (sys_mmap(NX_SEXY_RES_FIELDS * 8 + 16)) as *i64
48
49 // T5: Declared SEDUCTIVE, measured SEDUCTIVE (low-cut bodycon).
50 // coverage 60% + fit 900 + sheer 0 + cut 600 = 60->40 + 225 + 0 + 150 = 415
51 // Actually intensity = (100-60) + 900/4 + 0 + 600/4 = 40 + 225 + 0 + 150 = 415
52 // 415 > 380 -> EXPLICIT (rank 6)
53 // Adjust: coverage 75 + fit 800 + sheer 0 + cut 400 = 25 + 200 + 0 + 100 = 325 -> PROVOCATIVE (rank 5)
54 // Need SEDUCTIVE (rank 4): intensity 160-259.
55 // coverage 85, fit 700, sheer 0, cut 200 = 15 + 175 + 0 + 50 = 240 -> SEDUCTIVE.
56 nx_outfit_sexiness_validate(NX_SEXY_SEDUCTIVE, 85, 700, 0, 200, sresult)
57 let sv1: i64 = sresult[NX_SEXY_RES_VERDICT]
58 let sm1: i64 = sresult[NX_SEXY_RES_MEASURED]
59 if sm1 != NX_SEXY_SEDUCTIVE { return 40 }
60 if sv1 != NX_SEXY_V_MATCH { return 41 }
61
62 // T6: Declared MODEST, measured PROVOCATIVE -> SEVERE_OVER.
63 nx_outfit_sexiness_validate(NX_SEXY_MODEST_COVERED, 50, 800, 30, 500, sresult)
64 let sv2: i64 = sresult[NX_SEXY_RES_VERDICT]
65 if sv2 != NX_SEXY_V_SEVERE_OVER { return 50 }
66
67 // T7: Declared SEDUCTIVE, measured CASUAL -> SEVERE_UNDER.
68 nx_outfit_sexiness_validate(NX_SEXY_SEDUCTIVE, 95, 300, 0, 50, sresult)
69 let sv3: i64 = sresult[NX_SEXY_RES_VERDICT]
70 if sv3 == NX_SEXY_V_MATCH { return 60 }
71 if sv3 == NX_SEXY_V_OVERSHOOT { return 61 }
72
73 // T8: MODEST_COVERED — fully covered loose.
74 // coverage 100% + fit 200 + sheer 0 + cut 0 = 0 + 50 + 0 + 0 = 50 -> CASUAL (rank 2)
75 // Need rank 1 MODEST: intensity < 30.
76 // coverage 100 + fit 100 + sheer 0 + cut 0 = 0 + 25 = 25 -> MODEST.
77 nx_outfit_sexiness_validate(NX_SEXY_MODEST_COVERED, 100, 100, 0, 0, sresult)
78 let sm4: i64 = sresult[NX_SEXY_RES_MEASURED]
79 if sm4 != NX_SEXY_MODEST_COVERED { return 70 }
80
81 return 0
82}