2026-06-03 15:16:16 +03:00
2026-05-17 22:44:49 +03:00
2026-06-03 15:16:14 +03:00
2026-05-17 22:44:49 +03:00
2026-05-17 22:44:49 +03:00
2026-05-17 22:44:49 +03:00
2026-05-17 22:44:49 +03:00
2026-05-17 22:44:49 +03:00
2026-06-03 15:16:16 +03:00
2026-06-03 15:16:16 +03:00

Game Design Document

Working title: Naked Desire Genre: NSFW exhibitionist sandbox / life-sim Engine: Unreal Engine 5 (C++ primary, Blueprint for content) Platform: PC Perspective: Third-person Audience: 18+ Reference titles: Naked Order, Roshutsu, Roxanne's ENF Exhibitionist Game, Secret Flasher Sereka

This document is the canonical design reference. It is written to be consumed by Claude Code (or any contributor) during implementation review and planning. When the design changes, this document should be updated first, then code.


1. Vision & Pillars

1.1 One-line pitch

A sandbox exhibitionist life-sim where the player accepts fetish commissions from an underground forum, balances rent and recognition against the thrill of public exposure, and progresses down one of three character paths over a 90-day time limit.

1.2 Design pillars

  1. Risk vs. reward, every second. Walking outside is never neutral — coverage, time of day, NPC density, recognition, and lust all push the embarrassment meter constantly. Every decision (what to wear, which street to take, when to strip) is a calibration against a session-loss state.
  2. Persistent physical world. Items are real objects in the world. A discarded skirt is there until something happens to it. The player's anxiety about losing clothing is mechanical, not flavor.
  3. Three distinct fantasies, one system. Slut / Exhibitionist / Slave aren't cosmetic tags — they unlock different clothing, missions, attribute trees, and play styles. A Slave-path session looks fundamentally different from a Slut-path session.
  4. The forum is the spine. Commissions drive minute-to-minute play, weekly missions drive medium-term goals, followers/reputation drive long-term progression. The forum is also the diegetic UI for most player-facing systems.
  5. Time pressure. 90 in-game days. Rent every week. The clock never stops; the player must choose what to ignore.

1.3 Non-goals

  • This is not a dating sim. NPCs are reactive systems, not relationships.
  • This is not a combat game. Threats are evasion-based (police, stalker, harasser).
  • This is not a story-driven linear game. The story is a framing device; the loop is the product.

2. Story & Setting

2.1 Premise

Yumi, while browsing the internet after a rent increase, discovers a hidden fetish forum that pays for exposure-themed commissions. After completing her first task she realizes she enjoys it. She begins taking commissions to cover rent and explore the new feelings.

2.2 Setting

A modern Japanese-style city. Currency is Yen. The city is the entire playable map: residential, commercial, parks, alleys, a beach (TBD), a gym, a beauty salon, multiple shop types, the player's apartment.

2.3 Tone

Sexual, playful, transgressive. The player character is a willing participant, not a victim. The "stalker" NPC is the only non-consensual antagonist and exists as a session-loss threat, not a narrative one.

2.4 Time structure

  • Total run length: 90 days (3 months).
  • Day: 08:00 → 20:00 in-game. Real-time duration ~45 min (half of the 1h 30m day/night cycle).
  • Night: 20:00 → 08:00 in-game. Real-time duration ~45 min.
  • Week: 7 days. Rent due at end of each week.
  • Sleep: fast-forwards 8 hours, restores energy. Available at the player's apartment bed.

3. Core Gameplay Loop

3.1 Macro loop (per day)

  1. Wake up at home. New daily commissions appear on the forum. Weekly commissions remain visible.
  2. Plan: check commissions, check bank, check pending deliveries, check news/recognition.
  3. Equip outfit from wardrobe. Pack bag (optional).
  4. Leave the house → session begins.
  5. Travel to commission locations, complete tasks, manage attributes.
  6. Return home → session ends, rewards finalized, optional sleep.
  7. Spend earnings (shops, gym, beauty salon), level up attributes, post photos.
  8. Repeat. Pay rent at end of week.

3.2 Micro loop (during a session)

Move → observe NPC density and types → make a coverage/exposure decision → embarrassment/lust rises → action (complete commission step, take photo, flee, masturbate, redress) → reward or threat resolution → repeat.

3.3 Win / lose conditions

  • Win (campaign): Survive 90 days. Endings are gated by progression path level and total followers (TBD specific thresholds).
  • Endless mode: Unlocked after first campaign completion. Disables rent-based eviction. All other systems (session loss, embarrassment, lust, recognition, etc.) remain active. Lets players keep playing their character indefinitely. Implementation cost is minimal — a single flag on the run.
  • Lose (run): Cannot pay rent → evicted → game over. Disabled in endless mode.
  • Lose (session): Energy → 0, OR embarrassment → max, OR caught by police. Session loss has consequences (see §4.4 and the summary table in §6.6) but does not end the run.

4. Session System

A session is the unit of "going outside." It is where 90% of gameplay happens.

4.1 Session start

Triggered by leaving the apartment. Snapshots current equipment, attributes, and time. All world items remain where they are.

4.2 During session

  • Player moves freely. The world simulates NPCs, time, day/night.
  • Attributes (embarrassment, lust, stamina, energy) update in real time per §7.
  • Commissions can be progressed or completed.
  • The player can freely re-enter the apartment to safely end the session at any time.

4.3 Session end (safe)

Player returns home. All carried items persist. Rewards from completed commissions are finalized. Embarrassment resets toward baseline. If a Snitch reported the player to police during the session (§10.2), the player keeps the wanted tag even after a safe return — see §7.7.

4.4 Session end (loss)

Triggered by any session-loss condition (§3.3). On loss:

  • The player returns to the apartment. The route home depends on the cause:
    • Energy = 0 — a cutscene plays of the player trudging home, exhausted, and going to bed. The player never sleeps outside; the apartment bed is the only sleep location. Time advances by one sleep cycle.
    • Embarrassment = max — fade to apartment (or a dedicated fail-state location — TBD).
    • Police capture — the player is processed (money penalty below) and returned home.
  • Equipped clothing is never forcibly removed by loss. Whatever the player was wearing at the moment of failure stays equipped on arrival home.
  • A bag placed in the world (not carried) is lost along with its contents — the player did not retrieve it before the failure.
  • Unequipped clothing left on the ground can be lost two ways:
    1. In-session theft — a chance-based roll while the player is away from the item. See §6.3.4 for the model.
    2. Sleep — any clothing left outside the apartment when the player sleeps is guaranteed lost. This fires both for the energy-zero cutscene (forced sleep) and for voluntary sleep at home with items still outside.
  • Police capture during pursuit applies a money penalty. If the player can't cover it, they skip days until the debt clears; the number of skipped days scales with the unpaid amount. Capture also clears the wanted tag (§7.7).

Implementation note: session loss must be a clearly defined transactional state. All "what gets lost" logic should live in a single SessionLossResolver to keep this deterministic and debuggable.


5. The Three Progression Paths

The player chooses how they level up but is not locked into one path. XP earned from commissions is path-tagged.

5.1 Slut

  • Unlocks: revealing clothing (mini skirts, high heels, lingerie variants), masturbation action, masturbation-related missions.
  • Attribute access: lust-related attributes (max lust, lust gain rate modifiers, masturbation energy efficiency).
  • Playstyle: pushes lust as a resource. Risks blackout effects (§7.2).

5.2 Exhibitionist

  • Unlocks: "expose-capable" clothing (coats, pleated skirts), public-display missions.
  • Attribute access: embarrassment-related attributes (max embarrassment, embarrassment decrease rate, pulse).
  • Playstyle: longer sessions, denser crowds, tolerance-building.

5.3 Slave

  • Unlocks: BDSM clothing (latex suits, gags, cuffs, bars), restraint-themed missions.
  • Attribute access: stamina-related attributes (max stamina, stamina recovery, energy efficiency).
  • Playstyle: physically demanding, restriction-based puzzles (cuffs require NPC help to remove).

5.4 Path level

Each path has a level (e.g., 110). Level gates clothing, missions, and attribute upgrades. XP per path is independent.


6. Items

6.1 Item identity rule

Every item is a unique physical instance. Two blue tops can have different states (torn vs. pristine). Items do not teleport, do not duplicate, and persist with their internal data wherever they are placed or dropped.

Implementation contract:

  • Each item has a unique runtime ID.
  • Each item has a definition (immutable, shared) and an instance state (mutable, per-object).
  • Items in the world are AActors. Items in containers are owned by the container's inventory component but retain identity.
  • Saving and loading must preserve item identity, position, and per-instance state.

6.2 Carriable item categories

  • Clothing (§6.3)
  • Bags (§6.4)
  • Phone (one — special, §9)
  • Consumables (food, §6.7)
  • Gadgets (TBD beyond phone)

6.3 Clothing

Attributes per clothing instance:

  • type — equipment slot (top, bottom, underwear-top, underwear-bottom, outerwear, footwear, accessory, restraint, etc. — final slot list TBD).
  • covers — set of body parts: { boobs, ass, genitals, ... }.
  • progressionPath — Slut / Exhibitionist / Slave / None.
  • color — primary color enum.
  • coverage — float [0,1].
  • isUnderwear — bool. If true, effective coverage = coverage / 2.
  • condition — float [0,1]. Starts at 1.0 (new). Decreases via §6.3.4.
  • canExpose — list of body parts this garment can momentarily reveal without unequipping (e.g., coat → boobs, ass).
  • isRestrictive — bool. If true, restricts hand use; requires NPC to remove.
  • containerSlots — optional inventory (e.g., pants pocket for phone).

6.3.1 Container slots

Container slot allows player to carry items there.

  • size: S, M, L - Size of the container slot
  • count: Count of the container slots

6.3.2 Coverage resolution

For each body part b:

  • Find the set of equipped garments covering b.
  • Effective coverage of b = min(sum(effectiveCoverage of garments covering b), 100%) where effectiveCoverage = isUnderwear ? coverage/2 : coverage.
  • Body part is "exposed" if effective coverage = 0.
  • Lower total coverage → faster embarrassment gain when observed (§7.1).

6.3.3 Equipping & unequipping

  • Equip/unequip anywhere in the world via the quick action menu.
  • Unequipped clothing becomes a world AActor at the player's location.
  • Clothing on the ground can be picked up when the player is in range.

6.3.4 Theft

Theft applies to loose clothing on the ground and to bags placed in the world (see §6.4). The model has two layers — a chance-based in-session roll and a deterministic sleep-loss handled in §4.4. Tuning placeholders below are resolved in §21.

  • Grace period. Loose clothing on the ground is safe for T_grace minutes (TBD) after the player leaves it unattended. Bagged contents (bag set down in the world) get a longer grace period T_grace_bag (TBD, longer than T_grace); the bag protects its contents until then.
  • Chance roll. Once an item is past its grace period, each check tick is an independent roll at a flat probability P_theft (TBD %). The probability does not ramp with time — leaving an item out for 20 minutes is not strictly riskier per minute than leaving it out for 5 minutes; the only thing time does is give more independent rolls.
  • Resets. The grace timer resets when the player re-enters proximity of the item or when the player is inside a safe zone (apartment).
  • Sleep is not handled here. Sleeping (voluntary at home or via the energy-zero cutscene) is the deterministic side of the model — any clothing left outside the apartment at sleep time is guaranteed lost, regardless of where it sits in the grace / roll cycle. See §4.4.

6.3.5 Rip & tear

  • Moving through bushes, against walls, or other rough collisions decrements condition.
  • Damaged clothing renders visually torn and exposes additional body parts (coverage drops).
  • Damage is irreversible. Damaged clothing cannot be repaired.
  • When condition reaches 0, the item disappears.
  • New clothing always starts at condition = 1.0.

6.3.6 Exposing

  • Some clothing (e.g., coat, pleated skirt) supports a per-garment expose action.
  • Triggering expose temporarily reveals listed body parts without removing the garment.
  • Blocked if another garment covers the same part (e.g., pants block coat's ass-expose).
  • While exposed, the body part counts as fully uncovered for embarrassment math.

6.3.7 Restrictive clothing

  • Cuffs, restrain bars and similar items lock hand-dependent actions (using phone, picking up items, masturbating).
  • Can be removed by having key and spending some time to remove it.

6.4 Bags

  • Bag is an equippable item with its own inventory.
  • Player can equip one bag at a time.
  • Bag can be placed in the world (set down) — persists as an AActor.
  • Bags follow the same theft rules as clothing (§6.3.4) and the same session-loss rules as other items (§4.4 / §6.6).

6.5 Inventory & Equipment

  • Clothing slots — one per equipment slot type (see §6.3 type field for the slot vocabulary; final list is TBD per §21 Q1).
  • Bag slot — 1 (see §6.4).
  • Hand slot — 1. Holds one carriable item at a time (phone, food, key, etc.). Restrictive clothing (§6.3.7) disables all hand-dependent actions while equipped.
  • Container slots — additional storage exposed by equipped clothing (e.g., pants pocket) and by the equipped bag. Each container slot has a size class (S / M / L, §6.3.1) that constrains what fits.
  • There is no abstract "backpack" inventory. Total carry capacity = sum of container slots provided by currently equipped items.

6.6 Item loss summary table

Situation Outcome
Session ends safely All carried / equipped / placed items persist.
Session lost, item equipped Item persists, fully equipped. Loss never forcibly removes worn clothing (§4.4).
Session lost, item in equipped bag Item persists (bag is on the player).
Session lost, bag placed in world Bag and contents are subject to the same theft chance as clothing (§6.3.4) and to sleep-loss if the player sleeps before retrieving them.
In-session, clothing past the grace period Each check is a flat chance of theft (§6.3.4). Picking the item back up resets the grace timer.
Sleep with clothing left outside the apartment (voluntary or forced energy-zero cutscene) Guaranteed loss of every clothing item left outside, regardless of grace / chance state.

6.7 Consumables — Food

  • Restores energy.
  • May grant timed buffs (e.g., ramen: +stamina regen for 3h in-game).
  • Buffs are typed and stackable per design (specifics TBD).
  • Some foods require cooking (ingredients from convenience store), some are pre-made (from cafe).
  • Food is cooked via mini-games
    • Slice ingredients via fruit ninja
    • Stir ingredients via clicker(Mortal Kombat - Test your strength)
    • Cook ingredients via Genshin Impact cooking minigame(DBD generator fix minigame)

7. Attributes & Simulation

All attributes update in real time. Indoor and outdoor behavior is identical — being inside the apartment does not pause or slow attribute simulation. The apartment is a "safe zone" only in the sense that no NPCs are there to observe the player, which means embarrassment naturally decays toward baseline. Lust and energy continue to behave normally.

7.1 Embarrassment

  • Increases when NPCs observe the player while:
    • Wearing revealing clothing (coverage-weighted).
    • Body parts exposed (full weight per uncovered part).
    • Performing "perverted actions" (masturbation, exposing, completing commission objectives).
  • Increase rate is modulated by:
    • Base embarrassment increase rate (attribute).
    • Coverage of each visible-to-observer body part.
    • Pulse (higher → faster gain).
    • Day/night (day rate > night rate, see §10.1).
    • Recognition (higher → faster gain).
  • Decreases over time when not being observed (embarrassment decrease rate).
  • Reaches maxEmbarrassment → session lost.

7.2 Lust

  • Increases passively in the background (rate TBD, possibly tied to coverage).
  • Higher pulse increases lust gain rate.
  • At maximum:
    • Blurred peripheral vision.
    • Player cannot tell whether NPCs are calling police or taking photos.
    • No indicator of which NPCs noticed them.
  • Reset by masturbating (consumes more energy than usual, modified by energyDrainMasturbateModifier). Masturbation is a Slut-path unlock (§5.1) — players who haven't taken that path cannot reset lust within a session and must accept the max-lust handicaps above until they sleep.

7.3 Energy

  • Drained by all activity. Base rate plus modifiers:
    • energyDrainRate (base, passive)
    • energyDrainRunModifier (running)
    • energyDrainWorkoutModifier (gym)
    • energyDrainCookingModifier (cooking)
    • energyDrainMasturbateModifier (masturbation)
  • Recovered during sleep at energyRecoveryRate.
  • Hard floor at 0 → session lost.
  • Max raised by gym training.
  • Low energy reduces effective max stamina (see §7.4).

7.4 Stamina

  • Used for running and other burst physical actions.
  • Recovers at staminaRecoveryRate when not running.
  • Base max raised by Slave-path leveling.
  • Distinct from energy: stamina is short-term, energy is the daily budget.
  • Effective max stamina is derived from base max in two passes (applied in order):
    1. Food buffs — additive; can raise effective max above base.
    2. Energy multiplier — scales the result by staminaEnergyFactor, where 0% energy → 50%, 80100% energy → 100% (linear in between).
  • Net effect: a well-fed but exhausted player has lower effective max stamina than a well-fed, rested player; food buffs cannot fully compensate for low energy.

7.5 Pulse

  • Simulated heart-rate / arousal-rate attribute. Tracked alongside the other attributes in §7.
  • Rises with:
    • Physical exertion (running, masturbation, sex acts).
    • Exposure events (a body part becoming uncovered, an expose action triggering).
    • Being observed while exposed.
  • Decays toward a personal baseline when at rest.
  • Modifies embarrassment gain (§7.1) and lust gain (§7.2) — both scale with pulse.
  • Exhibitionist-path attribute pool: leveling can raise / lower baseline pulse and adjust pulse-response curves (tuning TBD).

7.6 Recognition

  • Each photo taken by a Blogger NPC and published increases recognition.
  • Higher recognition → faster embarrassment gain (NPCs recognize the player).
  • Reducible by reporting articles on the city news site (PC, §11.1).
  • Can be bypassed by hiding the face (mask, hat-and-glasses combo — TBD specifics).

7.7 Wanted

  • Boolean. Set when a Snitch (§10.2) successfully reports the player to police during a session. The tag persists even if the session ends safely afterward (§4.3).
  • While set, police patrols spawn during both day and night until the tag is cleared (§10.3). The day/night cycle does not gate patrols once the player is wanted.
  • Cleared by either:
    • Tearing down every wanted poster in the city (§10.3), or
    • Being caught by police (§4.4) — capture also clears the tag along with applying the money penalty.

7.8 Reputation

  • Earned by completing commissions; lost by failing or skipping them.
  • Degrades passively over time, faster at higher values.
  • Affects follower gain: positive/neutral → followers grow; negative → followers shrink.

7.9 Followers & Money

  • Followers — running total of forum followers. Used in subscriber-style follower-gain math when posting photos.
  • Followers generate money each week.
  • More followers means more money for completing commissions.
  • Money (Yen) — earned from commissions, livestream donations, selling worn underwear. Spent on rent, clothing, food, gym, beauty salon.

7.10 Attribute leveling

Path XP unlocks the ability to upgrade attributes within that path's pool. Money or a separate currency may be required per level-up (TBD — recommend keeping it tied to XP only for clarity, but flag for playtest).


8. Movement

States: stand, walk, run, crouch, crouchWalk.

Design implications:

  • Crouching reduces NPC detection radius (TBD multipliers).
  • Running drains stamina and energy faster but is required for escape.

Movement should be implemented as a state machine on the character with clear transitions. UE5's enhanced input + ALS-style or GASP-style animation graph is appropriate (Oleh has prior GASP/Motion Matching context).


9. Phone

The phone is the player's diegetic UI hub. It can be used if it is in: hand, pocket (pants with phone-sized container slot), or equipped bag. Exception: the livestream app (§9.1.1) continues to operate while the phone is placed in the world, so the player can keep streaming after setting the phone down for a back-camera shot.

9.1 Camera

  • Front camera — held in hand, framed selfie shot.
  • Back camera — phone is placed in the world via place camera action. A floating window shows the camera's view. Photos are triggered via hotkey while the camera is placed.
  • All photos saved to Gallery.

9.1.1 Livestream

  • Available at any time via the phone, regardless of whether the player is holding it or it is placed in the world.
  • Same dual-mode setup as the camera: front-facing while held, back-facing when placed.
  • Generates donation income in real time. Income rate scales with exposure visible in the stream (similar logic to photo follower-gain math, but continuous).
  • Recommended implementation: livestream is a StreamSession object owned by the phone, tickable, with viewerCount, tipRate, and streamQualityScore (a function of what the camera sees and player attributes).
  • Ending the stream returns earnings to the bank.
  • Lists all captured photos with metadata (time, location, equipped state, exposed parts).
  • Photos can be posted to the forum profile from here.

9.3 Forum (phone)

The phone is the primary access point for the forum. See §13.

9.4 Bank app

  • Track balance, income, spending. Pay rent (or auto-pay).

9.5 Feetex (deliveries)

  • Track pending online orders (clothing, food). Items arrive at the apartment door one in-game day after purchase.

9.6 Maps

  • City map with marked shop locations, commission objectives, player position.

9.7 Health Tracker

  • Displays the player's attribute readouts (energy, stamina, lust, embarrassment, recognition).

10. The City

10.1 Day / Night

Phase In-game time Real time Effects
Day 08:00 → 20:00 ~45 min High NPC density. Faster embarrassment gain. Most shops open.
Night 20:00 → 08:00 ~45 min Low NPC density. Slower embarrassment gain. Most shops closed.

Police patrols ignore the day/night cycle: when the player has the wanted tag (§7.7), patrols spawn in both phases (§10.3).

Sleeping at home fast-forwards 8 hours.

10.2 NPC types

NPC Behavior
Walker Doesn't stop; reacts (animation/audio) but keeps walking. Low embarrassment contribution.
Stalker Stops, stares. Sustained observation → faster embarrassment gain.
Blogger Stops, takes photo. Photo → recognition increase.
Snitch Stops, calls police. Triggers police spawn / wanted state if observed long enough.
Harasser Walks toward player, attempts to grope. Player must evade.
Police See §10.3.

10.3 Police

  • Spawn during both day and night while the player has the wanted tag (§7.7). Patrol fixed routes.
  • Detect player if face not hidden, or if revealing/no clothing.
  • On detection: chase begins.
  • If player breaks line of sight: police patrol last known position for a timer, then disengage.
  • wanted persists across sessions until cleared.
  • Wanted poster mechanic: wanted posters spawn in the city. Tearing them all down clears the wanted tag and stops police spawning until a new Snitch report retriggers it.

10.4 Locations

  • Apartment — safe zone. Wardrobe, bed, PC, kitchen.
  • Convenience store — cooking ingredients.
  • Cafe — pre-made food.
  • Clothing shops — various types, each with a different inventory mix.
  • Gym — increase max energy. Costs energy in the process. Costs money.
  • Beauty salon — boobs size, ass size, makeup, hair style, hair color.
  • Adult shop — Buy adult toys.
  • Streets / parks / alleys — commission space.
  • (TBD) beach, train station, school exterior, hot springs, etc. — design pass needed for variety.

10.4.1 Cuff / restraint removal

Restrictive clothing (§6.3.7) is removed by Key + timed unlock action:

  • The player must possess the matching key for the restraint instance.
  • Performing the unlock takes time; movement and all other actions are disabled for the duration.
  • There is no Helper NPC, no adult-shop unlock service, and no break-out option. If the player loses the key, the restraint stays on until a key is acquired again.

11. PC (at home)

11.1 City News

  • Random news plus articles about the player (posted by Blogger-driven events).
  • Player can report articles with their photo → reduces recognition.

11.2 Clothing shop (online)

  • Order clothing. 1-day delivery.

11.3 Food shop (online)

  • Order food. 1-day delivery.

12. Shops & Services Summary

Service In-person Online Notes
Clothing Yes (multiple shop types) Yes (PC) Online has 1-day delay.
Food (ingredients) Convenience store Yes (PC) Cooking required.
Food (pre-made) Cafe Yes (PC) Eat immediately.
Gym Yes (city) No Increases max energy.
Beauty salon Yes (city) No Body, hair, makeup customization.

13. The Forum

The forum is accessed via phone or PC. It is both diegetic and the primary mission UI.

13.1 Weekly missions

  • Generated at week start, semi-random, weighted by player path progression.
  • Rewards: money, XP.
  • If the player doesn't meet entry requirements (level, path level), missions are visible but not marked failed — they serve as goals.
  • Must be completed by end of week or marked failed.

13.2 Daily commissions

  • Generated at day start, semi-random, weighted by path progression.
  • Rewards: money, XP, followers.
  • Failing or not completing within the day → followers/reputation loss.
  • A commission is "started" when the player accepts it; remaining un-started commissions are simply offered.

13.3 Profile

  • View stats, progression, path levels, posted photos.
  • Post photos → follower gain (calculated from exposed body parts + visible coverage in photo).
  • Livestream is initiated from the phone at any time (see §9.1.1), not from the forum profile. The profile displays livestream history and lifetime earnings.
  • Level up attributes (gated by path XP).

13.4 Commission generation

Commissions should be procedural with template-driven content. Recommended template structure:

CommissionTemplate {
  id,
  pathRequirement: { path, minLevel },
  steps: [ list of typed objective steps ],
  rewardMoneyRange,
  rewardXPRange,
  rewardFollowersRange,
  failurePenalty,
  validLocations: [ ... ],
}

Typed objective steps (initial set):

  • ExposeBodyPart(part, durationSeconds)
  • BeFullyNaked(durationSeconds) — fully unclothed for the duration; no NPC requirement.
  • BeFullyNakedNearNPCs(count, durationSeconds)
  • WalkNakedDistance(meters)
  • MoveDistanceFromClothing(meters)
  • PerformAction(actionId) (e.g., masturbate)
  • BeObservedByNPCType(type, durationOrCount)
  • TakePhotoAtLocation(locationTag)
  • DeliverItemTo(npcOrLocation)

Steps compose: a single commission step list may chain primitives that must all be satisfied (concurrently or sequentially as specified by the template).

Example commissions from the brief that should be representable:

  • "Get naked in front of 1 person" → BeFullyNakedNearNPCs(1, ~3s).
  • "Walk with breasts exposed for 10 seconds" → ExposeBodyPart(boobs, 10).
  • "Walk naked for 30 seconds" → BeFullyNaked(30).
  • "Move 50m away from your clothing while naked" → BeFullyNaked(durationSeconds) + MoveDistanceFromClothing(50) (both must hold).

13.5 Subscriber math (rough)

followerGain = base(photoExposureScore) * reputationFactor * (1 / log(followerCount + e))

Concrete formula to be calibrated in playtest. Keep this isolated in a single FollowerGainCalculator for tunability.


14. UI / UX

14.1 Quick action menu

Radial or hotbar accessible mid-session. Actions:

  • Unequip / equip clothing (per slot).
  • Expose body part (per garment with canExpose).
  • Open phone.
  • Drop bag / pick up bag.
  • Masturbate (Slut-path unlock, §5.1 — entry hidden until unlocked).
  • Crouch / stand.

14.2 HUD (in-session)

  • Attribute bars (energy, stamina, embarrassment, lust) — minimal/peripheral when low, more prominent when nearing thresholds.
  • Equipped clothing summary (small icons).
  • Day/night and clock readout.
  • NPC awareness indicator (who has noticed you) — disabled at max lust per §7.2.
  • Active commission objective text.

14.3 Out-of-session UI

Forum, bank, gallery, shops are all in-fiction screens (phone/PC). Avoid out-of-fiction menus where possible.

14.4 Accessibility & comfort

  • Subtitle support for any voiced dialogue.
  • Camera "place" via voice command must have a non-voice fallback (hotkey).
  • Photo-sensitive warning if any flash/strobe effects are used.

15. Economy

15.1 Income sources

  • Daily commissions (largest reliable source).
  • Weekly missions (larger lump-sum payouts).
  • Livestream donations (variable, riskier, always available via phone).
  • Selling worn underwear — two delivery methods:
    • Feetex shipping — drop the item in a Feetex shipping box at the post office or convenience store. Payment arrives 1 in-game day later (mirrors Feetex's existing 1-day delivery delay).
    • Drop-off — travel to a specified location (varies per order) and leave the underwear there. Immediate payment, but the location may be in a high-risk area depending on the order. Tactical trade-off: convenience vs. drop-off-style commission tension.
  • Photo posts (indirect) and accumulated followers — drive the weekly passive follower income (§7.9). Higher follower count → larger weekly payout and larger commission payouts.

15.2 Costs

  • Weekly rent — flat across the campaign. No escalation, no event-driven spikes. The pressure comes from the 90-day timer and other expenses, not from a moving rent target.
  • Clothing.
  • Food / ingredients.
  • Gym membership / beauty salon.
  • Adult shop.

15.3 Tuning targets (placeholder)

Tier Daily income Weekly rent Notes
Early ¥38k/day ¥20k/week Pressure forces commissions.
Mid ¥1020k/day ¥30k/week Player can save / invest.
Late ¥25k+/day ¥50k/week Livestream meta unlocked.

Numbers are placeholders for playtest calibration.


16. Save / Persistence

16.1 What must be saved

  • Player attributes and progression.
  • All world items (position, orientation, condition, container relationships).
  • All NPC state? (probably just template + scheduling seed; full NPC state is too heavy)
  • Forum state: active commissions, weekly missions, followers, reputation, photos posted.
  • Calendar: current day, current time, week number.
  • Wanted state, recognition, pending deliveries.
  • Apartment state.

16.2 Save points

  • Automatic on sleep.
  • Automatic on safe session end.
  • Manual save in apartment (recommended).
  • No mid-session save (preserves tension) — design call, open for revision.

16.3 Item identity in save

The unique-instance rule (§6.1) means save must serialize each item by instance ID, not by template. Container parent references must be stable across save/load.


17. Technical Architecture (UE5)

17.1 High-level systems

  • PlayerCharacter (Pawn + ASC) — movement, equipment slots, attribute set.
  • AttributeSet — embarrassment, lust, energy, stamina, recognition, money, reputation. GAS-based.
  • EquipmentComponent — slot management, equip/unequip, expose actions.
  • InventoryComponent — generic, reused by player, bags, containers.
  • ItemActor — base for all world items. Wraps ItemInstance.
  • ItemInstance (UObject) — runtime data, serialized with save.
  • ItemDefinition (DataAsset) — static data per item template.
  • SessionManager (GameMode or subsystem) — session start/end, loss resolution.
  • TimeOfDaySubsystem — clock, day/night, week, calendar.
  • ForumSubsystem — commissions, missions, profile, followers, reputation.
  • NPCManager — spawning, density, type weighting by location and time.
  • RecognitionSubsystem — photo-to-news pipeline, article state, reporting.
  • PoliceManager — patrols, wanted state, line of sight, chase.
  • SaveSubsystem — orchestrates serialization across all of the above.

17.2 GAS usage

GAS is well-suited here: attributes, modifiers (clothing-based, recognition-based, day/night), and gameplay effects (food buffs, wanted status, lust max) all map cleanly. Use:

  • UAttributeSet for all numeric attributes in §7.
  • GameplayEffects for buffs, debuffs, passive drains.
  • GameplayTags for NPC observation state, body part exposure, clothing flags.
  • GameplayCues for visual/audio reactions.

17.3 Replication

None

17.4 Data-driven content

Clothing, commissions, food, NPC templates all live as DataAssets (or DataTables for tabular content). Designers (eventually) should be able to add items without touching C++.

17.5 Class boundaries

  • C++ for: attribute math, simulation tick, equipment/inventory mechanics, session loss resolution, save/load, AI controllers, time-of-day, commission validation.
  • Blueprint for: animation event hookups, cosmetic feedback, individual mission template wiring, UI widgets, world placement.

17.6 Open technical questions

  • Animation system: borrow GASP/Motion Matching approach? Custom?
  • Crowd density: instanced NPCs vs. full pawns? Hybrid (full pawns within awareness radius, instanced beyond)?
  • Cloth/clothing rendering: skeletal mesh swap vs. modular character system? Modular is strongly recommended given the dressing system depth.
  • Photo system: in-engine render-to-texture (preferred) vs. screenshot-with-overlay.

18. Content Inventory (initial scope target)

18.1 Minimum viable content for vertical slice

  • 1520 clothing items spread across paths (5 Slut, 5 Exhibitionist, 5 Slave, 5 neutral).
  • 3 bag variants.
  • 8 food items (4 cooking ingredients, 4 pre-made).
  • 5 NPC types (Walker, Stalker, Blogger, Snitch, Harasser) + Police.
  • 1 functional city district with all shop types.
  • 20 commission templates yielding ~5x procedural variation.
  • Apartment + PC + phone fully functional.
  • 1 full week of gameplay playable end-to-end.

18.2 Full launch target (TBD)

  • 60+ clothing items.
  • All NPC types polished, multiple visual variants each.
  • Full city, 4+ districts.
  • 100+ commission templates.
  • All 3 paths leveled to cap with distinct content.

19. Risks & Mitigations

Risk Likelihood Mitigation
Item-identity persistence is complex and error-prone. High Build save/load and item ID system first, before any content. Heavy testing.
GAS attribute interactions create unintended feedback loops (e.g., embarrassment ↔ recognition). Med Centralize modifier sources in a debug overlay. Lock down formula tests.
Procedural commissions feel repetitive. High Strong template variation, location/time-of-day modifiers, themed weekly arcs.
NPC density vs. performance. Med LOD'd AI: full pawns near player, instanced "extras" at distance.
Adult-content distribution constraints. High (business) Plan for Steam-incompatible content split / Patreon / itch / direct distribution from day one. Out of scope for this GDD but flag now.
Scope (90-day timer × 3 paths × commission variety). High Vertical slice first. Cut path content before cutting systems.

20. Resolved Design Decisions

Decisions previously open, now fixed:

  1. Camera perspective: Third-person.
  2. Dangerous-stalker NPC: Removed. Was a documentation typo, not an intended NPC. The Stalker (watching, low-threat) is the only stalker-type NPC.
  3. Indoor attribute behavior: Identical to outdoor. No pause or slowdown. The apartment is safe only because no NPCs are present to observe.
  4. Player customization: Beauty salon only. No separate character creator at run start.
  5. Livestreaming: Available any time via the phone, held or placed. Mirrors photo capture (front-facing held, back-facing placed). See §9.1.1.
  6. Selling worn underwear: Feetex shipping (1-day, convenient) or specified drop-off location (immediate, risk-based). See §15.1.
  7. Rent: Flat. No escalation.
  8. Run length: 90-day campaign. Endless mode unlocked after first completion (rent-eviction disabled, all other systems intact). See §3.3.
  9. Cuff/restraint removal: Key + timed unlock action only. No Helper NPC, no paid adult-shop service. See §10.4.1.
  10. Voice commands: Not used. Hotkey-driven only.

21. Open Design Questions

These remain genuinely unresolved and should be addressed during implementation:

  1. Final slot list for clothing equipment (top, bottom, underwear-top, underwear-bottom, outerwear, footwear, accessory, restraint — confirm and lock).
  2. NPC theft tuning: grace periods (T_grace, T_grace_bag), per-tick chance (P_theft), and check-tick interval — see §6.3.4.
  3. Concrete tuning numbers for embarrassment / lust / energy / stamina / pulse rates.
  4. Specific ending conditions for the 90-day campaign (path level + follower thresholds).
  5. Manual save in apartment: enabled or auto-save only?
  6. Photo system implementation: render-to-texture vs. screenshot-with-overlay (§17.6).
  7. Crowd density: full pawns vs. instanced extras with awareness-radius promotion (§17.6).
  8. Modular character system specifics — base mesh, layering scheme, attachment sockets.
  9. Photo-post follower decay curve and per-photo cap.
  10. Stamina ↔ energy multiplier curve specifics (linear vs. eased between 0% and 80% energy, §7.4).

22. Glossary

  • Coverage — clothing's 01 score for how much it conceals a body part.
  • Commission — short, accept-now mission, daily-generated, from the forum.
  • Mission — weekly task, generated at week start.
  • Session — the active outdoor play state between leaving and returning to the apartment.
  • Path — Slut / Exhibitionist / Slave progression track.
  • Pulse — heart-rate / arousal-rate attribute. Higher pulse multiplies embarrassment and lust gain. Exhibitionist-path attribute pool. See §7.5.
  • Recognition — how known the player is in the city. Multiplies embarrassment gain.
  • Wanted — binary police-target flag. Set by Snitch reports; cleared by tearing down posters or by capture. See §7.7.
  • Feetex — in-fiction package tracking and shipping service. Handles both incoming deliveries (1-day delay) and outgoing worn-underwear shipping.
  • Endless mode — post-campaign unlock; rent eviction disabled, all other systems active.

23. Document Conventions

  • "TBD" = explicit pending decision, must be resolved before relevant code is finalized.
  • Code names in monospace. Final names should match these unless decided otherwise.
  • All numeric values without units are placeholders for tuning.
  • When this doc and the code disagree, this doc wins until updated.
S
Description
No description provided
Readme 19 GiB
Languages
C++ 97.9%
C# 1%
C 0.9%
PowerShell 0.2%