Files
2026-06-03 15:17:02 +03:00

122 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 (VS5), lust & pulse (VS2), 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 VS3) — 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()` 🔶 (VS5).
## Attributes: embarrassment / arousal (✅ embarrassment; 🔶 lust/pulse)
- `ReachEmbarrassment(threshold)` / `SustainEmbarrassment(threshold, duration)` ✅ — **`UReachEmbarrassmentObjective`** *(implemented; a hold duration turns Reach into Sustain)*.
- `ReachLust(threshold)` / `EdgeWithoutResolving(duration)` 🔶 (VS2).
- `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, VS5) · `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 VS5 (NPC types), VS2 (lust/pulse), toys, restraints, and Phase 8
(photo/livestream/followers) land.