# Commission objective backlog Idea catalog + build status for the commission system (`Source/NakedDesire/Commissions/`). Pairs with GDD ยง13 (the design source of truth) and `PLAN.md` (live status). When an idea is implemented, mark it and record the class name. **Feasibility legend** - โœ… buildable now โ€” the signals it needs already exist. - ๐Ÿ”ถ needs a planned-but-partial system โ€” NPC types (VSโ€‘5), lust & pulse (VSโ€‘2), photo/livestream & followers (Phase 8), toys, restraints. - ๐Ÿ”ญ needs an unbuilt system โ€” theft (ยง6.3.4), rip & tear (ยง6.3.5), recognition/wanted (ยง7.6). **Path flavor:** Exhibitionist = be *seen* ยท Slut = be *lewd* ยท Slave = be *used / controlled*. --- ## Structural features (content multipliers โ€” build these first) These aren't objectives; they make every objective compose, so a handful of conditions yields a large content space. - **Constraints / modifiers** โ€” a constraint decorates an objective; the step only counts while all its constraints also hold (the base ANDs them into the satisfaction check). "Do X **while** Y" with no new objective code. - `WhileObservedBy(count)` โœ… โ€” **`UObservedConstraint`** *(implemented)* - `DuringPhase(Day/Night)` โœ… โ€” **`UDayPhaseConstraint`** *(implemented)* - `WhileWearing(slot)` / `WhileNotWearing(slot)` โœ… โ€” **`UWearingSlotConstraint`** *(implemented)* - `WhileAtLocation(tag)` โœ… โ€” **`ULocationConstraint`** *(implemented)* โ€” backed by `ULocationSubsystem`. - `WhileMoving` / `WhileRunning` โœ…* โ€” needs a gait-changed signal or a cheap poll. - **Sequential steps** โ€” `bSequentialObjectives` on a commission: objectives activate one at a time in order ("strip at A โ†’ walk naked to B โ†’ masturbate at C"). *(implemented)* - **Optional bonus objective** โ€” a non-required step that bumps the reward (risk/reward texture). *(idea)* - **Time limit** โ€” a per-commission deadline is a *failure* condition, not a "while" gate; it belongs with `failurePenalty` / day-end expiry, not the constraint set. --- ## Exposure / coverage (mostly โœ… โ€” same signals the dial already uses) - **`BeFullyNaked(duration)`** โœ… โ€” **`UBeFullyNakedObjective`** *(implemented)* - **`ExposeBodyPart(part, duration)`** โœ… โ€” **`UExposeBodyPartObjective`** *(implemented)* - **`BeFullyNakedNearNPCs(count, duration)`** โœ… โ€” **`UBeFullyNakedNearNPCsObjective`** *(implemented)* - `WearOnlyUnderwear(duration)` โœ… โ€” **`UWearOnlyUnderwearObjective`** *(implemented)*. Exhibitionist. - `BeToplessOnly` / `BeBottomlessOnly(duration)` โœ… โ€” **`UBareRegionObjective`** *(implemented; `EBareRegion` data value picks the bare half)*. One region bare, the other covered. - `StayBelowCoverage(threshold, duration)` โœ… โ€” **`UStayBelowCoverageObjective`** *(implemented; names its own threshold)*. Every region under X (revealing, not nude). - `ExposeWhileWalking(part, meters)` โœ… โ€” **`UExposeWhileWalkingObjective`** *(implemented)*. Keep a part revealing across N meters (per-part walk). - `UseExposeAction(part, count)` โœ… (after VSโ€‘3) โ€” trigger the ยง6.3.6 flash action N times. ## Observation / NPC reactions (โœ… count-based; ๐Ÿ”ถ type-based) - `GatherCrowd(count)` โœ… โ€” **`UGatherCrowdObjective`** *(implemented)*. N NPCs observing simultaneously. - `BeObservedWhileExposed(count, duration)` โœ… โ€” **`UBeObservedWhileExposedObjective`** *(implemented)*. N observers while any region is revealing (partial exposure counts). - `StayUnseenWhileNaked(duration)` โœ… โ€” **`UStayUnseenWhileNakedObjective`** *(implemented)*. Fully naked with **zero** observers (stealth exhibitionism / risk). - `BeObservedByNPCType(type, count|duration)` ๐Ÿ”ถ (in ยง13.4) โ€” Walker / Stalker / Blogger / etc. - `BePhotographedByBlogger(count)` ๐Ÿ”ถ ยท `EndureStalker(duration)` ๐Ÿ”ถ ยท `EscapeAfterSnitch()` ๐Ÿ”ถ (VSโ€‘5). ## Attributes: embarrassment / arousal (โœ… embarrassment; ๐Ÿ”ถ lust/pulse) - `ReachEmbarrassment(threshold)` / `SustainEmbarrassment(threshold, duration)` โœ… โ€” **`UReachEmbarrassmentObjective`** *(implemented; a hold duration turns Reach into Sustain)*. - `ReachLust(threshold)` / `EdgeWithoutResolving(duration)` ๐Ÿ”ถ (VSโ€‘2). - `MasturbateNearNPCs(count)` / `MasturbateAtLocation(tag)` ๐Ÿ”ถ โ€” `PerformAction`, Slut-gated (ยง23 #26). - `KeepPulseElevated(threshold, duration)` ๐Ÿ”ถ. ## Location / travel (โœ… โ€” `ULocationSubsystem` now provides enter/leave + tag queries) - `EnterLocationNaked(tag)` โœ… ยท `TourLocationsNaked(tagset)` โœ… ยท `LingerExposed(tag, duration)` โœ… (the last two = `BeFullyNaked` + a `ULocationConstraint`). - `ReachLocationAwayFromClothing(tag, meters)` โœ… *(no new class)* โ€” `MoveDistanceFromClothing` + a `ULocationConstraint`: arrive at the location having left clothes โ‰ฅN m behind. - `ReturnHomeNaked()` โœ…-ish โ€” end the session at the apartment with no clothing (loop-closer). ## Movement / endurance (โœ…) - `WalkNakedDistance(meters)` โœ… (in ยง13.4) โ€” **`UWalkNakedDistanceObjective`** *(implemented)*. Naked travel at any gait. ยท `MoveDistanceFromClothing(meters)` โœ… (in ยง13.4) โ€” **`UMoveDistanceFromClothingObjective`** *(implemented; polls `UDroppedClothingSubsystem` for the nearest dropped garment)*. - `RunNakedDistance(meters)` โœ… โ€” **`URunNakedDistanceObjective`** *(implemented)*. Distance accrues only while running + naked. - `WalkNakedWhileObserved(meters, minObservers)` โœ… โ€” **`UWalkNakedWhileObservedObjective`** *(implemented)*. > All four distance objectives share **`UTravelObjectiveBase`** (`UCoverageObjectiveBase` subclass) โ€” it owns the > clamped distance-sampling timer; subclasses only override `DoesSampleCount()` (e.g. naked+run, part revealing, > naked+observed). New "travel while X" objectives are a one-method subclass. ## Clothing / outfits / restraints - `WearOutfit(tag, duration)` โœ… โ€” go out in a specific authored set (needs an outfit id/tag on items). - `GoOutInBodysuitOnly(duration)` โœ…. - `WearRestraintInPublic(slot, duration)` ๐Ÿ”ถ (restraints ยง6.3.7) โ€” Slave flavor. - `WearVibratingToy(duration)` / `ActivateToyNearNPCs(count)` ๐Ÿ”ถ (toy vibration audible to NPCs). - `DegradeConditionTo(x)` / `RipClothing` ๐Ÿ”ญ (rip & tear) ยท `LetItemBeStolen()` ๐Ÿ”ญ (theft). ## Photo / livestream / followers (๐Ÿ”ถ Phase 8) - `TakePhotoAtLocation(tag)` ๐Ÿ”ถ (in ยง13.4) ยท `PostPhotoExposing(part)` ๐Ÿ”ถ ยท `PhotoExposureScoreAbove(x)` ๐Ÿ”ถ. - `SelfieAtLandmark(tag)` ๐Ÿ”ถ ยท `LivestreamForMinutes(n)` ๐Ÿ”ถ ยท `LivestreamWhileWalkingNaked(meters)` ๐Ÿ”ถ. - `GainFollowers(count)` ๐Ÿ”ถ ยท `CompleteTipRequests(count)` ๐Ÿ”ถ. ## Items / economy (โœ… / ๐Ÿ”ถ) - `DeliverItemTo(target)` โœ… (in ยง13.4) ยท `DeliverWhileNaked(target)` โœ… โ€” deliver fully naked (ยง15.1). - `DropClothingAtLocation(tag)` โœ… โ€” a "dead drop" leaving a garment behind. - `SellWornUnderwearAtDropoff()` ๐Ÿ”ถ โ€” risk-based drop-off (ยง15.1). ## Risk / loss (๐Ÿ”ถ / ๐Ÿ”ญ) - `SurviveSessionNaked()` โœ…-ish โ€” complete a session never wearing clothing. - `GetCaughtAndEscape()` ๐Ÿ”ถ (police, VSโ€‘5) ยท `WantedWhileExposed()` ๐Ÿ”ถ (recognition, ยง7.6). --- ## Suggested build order 1. **Structural** โ€” constraints framework + sequential steps. *(done)* 2. **All-โœ… objectives** โ€” done: `StayUnseenWhileNaked`, `GatherCrowd`, `BeObservedWhileExposed`, `WearOnlyUnderwear`, `ReachEmbarrassment`/`SustainEmbarrassment`, the `UTravelObjectiveBase` distance family (`RunNakedDistance`, `WalkNakedDistance`, `ExposeWhileWalking`, `WalkNakedWhileObserved`), and the coverage pair `BareRegion` (topless/bottomless) + `StayBelowCoverage`. Location objectives (`EnterLocationNaked`, `LingerExposed`, โ€ฆ) need no new class โ€” author them as `BeFullyNaked` / `ExposeBodyPart` + a `ULocationConstraint`. `MoveDistanceFromClothing` (+ its `ReachLocationAwayFromClothing` compose) now landed on `UDroppedClothingSubsystem`. Remaining all-โœ… gap: `WearOutfit` needs an outfit tag/id on items. 3. **Location system** โ€” done: `ULocationSubsystem` + `ULocationConstraint`; the whole Location/travel group and `WhileAtLocation` are unblocked. (Build the location *objectives* with the โœ… batch.) 4. **Per-system batches** as VSโ€‘5 (NPC types), VSโ€‘2 (lust/pulse), toys, restraints, and Phase 8 (photo/livestream/followers) land. --- ## Concrete commissions (all โœ… โ€” pure data, no new C++) Authorable today in a `UCommissionBoardConfig`: each is a recipe of shipped objectives + the four constraints (`UObservedConstraint`, `UDayPhaseConstraint`, `UWearingSlotConstraint`, `ULocationConstraint`), `RequiredHoldSeconds`, and `bSequentialObjectives`. Numbers are starting values, not balance. **Authoring ceiling:** live location tags are only `Location.Apartment`, `Location.City`, `Location.City.Beach` โ€” more `Location.City.*` sub-areas would multiply every location-gated row below. ### Exhibitionist (be *seen*) - **Morning Walk of Shame** โ€” *Daily.* `WalkNakedDistance(300m)` + `DayPhase(Day)`. - **Beach Body, No Suit** โ€” *Daily.* `BeFullyNaked(60s)` + `Location(City.Beach)` + `DayPhase(Day)`. - **Topless Stroll** โ€” *Daily.* `ExposeWhileWalking(Boobs, 150m)` + `WearingSlot(Bottom, worn)`. - **Draw a Crowd** โ€” *Weekly, sequential.* `GatherCrowd(5)` โ†’ `BeObservedWhileExposed(5, 30s)`. - **Night Flasher** โ€” *Daily.* `ExposeBodyPart(Genitals, 5s)` + `DayPhase(Night)` + `Observed(1)`. ### Slut (be *lewd*) - **Underdressed Errand** โ€” *Daily.* `WearOnlyUnderwear(120s)` + `Location(City)`. - **Barely Decent** โ€” *Weekly.* `StayBelowCoverage(0.4, 180s)` + `Observed(2)`. - **Red-Faced in Public** โ€” *Daily.* `SustainEmbarrassment(0.8, 20s)` + `Observed(3)`. - **Bottomless Beach Run** โ€” *Weekly.* `ExposeWhileWalking(Genitals, 200m)` + `BareRegion(Bottom)` + `Location(City.Beach)`. ### Slave / risk (controlled, stealth, loss) - **Leave It Behind** โ€” *Daily.* `MoveDistanceFromClothing(80m)`. - **Dead Drop Dash** โ€” *Weekly, sequential.* `MoveDistanceFromClothing(100m)` โ†’ `ReachEmbarrassment(0.7)` โ†’ `WalkNakedDistance(150m)`. - **Unseen and Bare** โ€” *Weekly.* `StayUnseenWhileNaked(90s)` + `Location(City)`. - **Run, Don't Hide** โ€” *Daily.* `RunNakedDistance(200m)` + `DayPhase(Night)`. ### Multi-step showcase - **From Closet to Crowd** โ€” *Weekly, sequential.* `WearOnlyUnderwear` @ `Location(Apartment)` โ†’ `WalkNakedWhileObserved(150m, 1)` โ†’ `GatherCrowd(4)` @ `Location(City)`.