Updated plan

This commit is contained in:
2026-05-24 14:44:13 +03:00
parent d286b9bdb4
commit 45187450ef
2 changed files with 210 additions and 44 deletions
+148 -26
View File
@@ -37,7 +37,7 @@ A sandbox exhibitionist life-sim where the player accepts fetish commissions fro
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, a train station, a gym, a beauty salon, multiple shop types, the player's apartment. See §10.4 for the locked location list.
A modern Japanese-style city. Currency is Yen. The city is the entire playable map: residential, commercial, parks, alleys, a beach, a train station, a casino, a gym, a beauty salon, an electronics shop, multiple other shop types, the player's apartment. See §10.4 for the locked location list.
### 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.
@@ -58,8 +58,8 @@ Sexual, playful, transgressive. The player character is a willing participant, n
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.
5. Travel to commission locations, complete tasks, manage attributes. Each completion immediately wires money to the bank, credits XP, and updates followers — no return-to-home collection step.
6. Return home → **session ends**, optional sleep.
7. Spend earnings (shops, gym, beauty salon), level up attributes, post photos.
8. Repeat. Pay rent at end of week.
@@ -88,10 +88,14 @@ Triggered by leaving the apartment. Snapshots current equipment, attributes, and
- 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.
Player returns home. All carried items persist. Embarrassment resets toward baseline. Commission rewards (money, XP, followers) are *not* finalized at session end — they were already credited at the moment each commission completed (§13.1 / §13.2). 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:
Triggered by any session-loss condition (§3.3).
**Precedence — police chase wins.** If the player is being actively chased by police (between detection and the disengage timer, §10.3) at the moment another loss condition fires, the loss is **always resolved as police capture**. The cops catch them as they collapse or freeze; the chase outcome supersedes embarrassment-max and energy-zero outcomes (including the energy-zero sleep cutscene). This applies whether or not the player has the `wanted` tag in advance — being mid-chase is the trigger, not the tag.
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. No extra cost beyond the session loss itself (no time skip, no money penalty, no reputation hit).
@@ -101,7 +105,7 @@ Triggered by any session-loss condition (§3.3). On loss:
- **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).
- **Police capture** during pursuit applies a money penalty. If the player can cover it, the debt is paid and they are returned to the apartment. If they **can't cover it**, a short cutscene plays of the player in a **holding cell**, then time fast-forwards to the next in-game morning — the night served settles the penalty, no money is owed afterward. The cutscene is non-interactive; the player does not actually inhabit the cell. Capture clears the `wanted` tag (§7.7) in either case. Already-accepted commissions still expire at day end with their normal `failurePenalty` (§13.4); the cutscene does not pause that clock.
> **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.
@@ -145,7 +149,7 @@ Each path has a level (e.g., 110). Level gates clothing, missions, and attrib
### 6.2 Carriable item categories
- **Clothing** (§6.3)
- **Bags** (§6.4)
- **Phone** (one — special, §9)
- **Phone** (one active at a time, but the player may own multiple models simultaneously — §9, §9.9)
- **Consumables** (food, §6.7)
- **Toys** — sex toys for the toy slots (§6.5). Bought at the Adult Shop (§10.4).
@@ -157,11 +161,10 @@ Attributes per clothing instance:
- `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`.
- `coverage` — float [0,1]. Authored per item to reflect how much it conceals — including the psychological "this is just underwear" discount. There is no separate underwear flag; an item in `UnderwearTop` / `UnderwearBottom` is simply authored with a lower `coverage` than a similarly-sized non-underwear garment.
- `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.
- `restrictions`list of restriction entries that fire while this item is equipped (e.g., wrist cuffs block phone use and changing top clothing; ankle cuffs block running). Most items have an empty list. See §6.3.7 for the full vocabulary.
- `containerSlots` — optional inventory (e.g., pants pocket for phone).
#### 6.3.1 Container slots
@@ -171,10 +174,12 @@ Container slot allows player to carry items there.
#### 6.3.2 Coverage resolution
For each body part `b`:
- Find the set of equipped garments covering `b`.
- Effective coverage of `b` = `min(max(effectiveCoverage of garments covering b), 100%)` where `effectiveCoverage = isUnderwear ? coverage/2 : coverage`.
- Find the set of equipped garments whose `covers` set includes `b`.
- Effective coverage of `b` = `max(coverage of garments covering b)`. Only the highest-coverage garment per body part counts; layering does not stack.
- Body part is "exposed" if effective coverage = 0.
- Lower total coverage → faster embarrassment gain when observed (§7.1).
- Lower coverage → faster embarrassment gain when observed (§7.1).
Authoring guidance: underwear in `UnderwearTop` / `UnderwearBottom` should be authored with lower `coverage` than equivalently-shaped outerwear in `Top` / `Bottom`, so being seen in just underwear correctly reads as more exposed than being seen in a thin shirt of the same physical coverage. The math itself does not special-case underwear — the value in the editor is the contribution, full stop.
#### 6.3.3 Equipping & unequipping
- Equip/unequip anywhere in the world via the quick action menu.
@@ -203,9 +208,36 @@ Theft applies to lose clothing on the ground and to bags placed in the world (se
- 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.3.7 Restrictions
Each clothing item carries an optional `restrictions` list. Most items have none. Restraint-slot items (§6.5 slots 1315) declare meaningful lists; a few non-restraint items (heels, tight skirts) can declare lighter restrictions too.
Restrictions are the union of all entries on all equipped items — any restraint that declares a given flag activates it for the player, regardless of which equipped item provides it.
Vocabulary:
| Restriction | Effect while at least one equipped item declares it |
|--------------------------|------------------------------------------------------------------------------------------------------------------|
| `BlockRun` | Player cannot run. Movement capped at walk speed. |
| `BlockCrouch` | Player cannot enter the crouch state. |
| `BlockPhoneUse` | The phone (§9) is unusable — no apps, no camera, no livestream, even when in hand / pocket / bag. |
| `BlockItemPickup` | Cannot pick up world items. |
| `BlockMasturbate` | The masturbate quick action (§14.1) is disabled. A commission objective requiring masturbation cannot progress until cleared. |
| `BlockExposeAction` | The per-garment expose action (§6.3.6) is disabled. |
| `BlockSlotChange(slot)` | The named equipment slot cannot be (un)equipped while the declaring item is on. Multiple `BlockSlotChange(...)` entries on one item are allowed and stack. |
Authored examples:
- **Wrist cuffs** (`WristRestraint`): `BlockPhoneUse`, `BlockItemPickup`, `BlockMasturbate`, `BlockExposeAction`, `BlockSlotChange(Top)`, `BlockSlotChange(Outerwear)`, `BlockSlotChange(UnderwearTop)`, `BlockSlotChange(Bodysuit)`.
- **Ankle cuffs** (`AnkleRestraint`): `BlockRun`, `BlockSlotChange(Bottom)`, `BlockSlotChange(Footwear)`, `BlockSlotChange(Socks)`, `BlockSlotChange(UnderwearBottom)`.
- **Spreader bar** (`AnkleRestraint`): same as ankle cuffs, plus `BlockCrouch`.
- **High heels** (`Footwear`, non-restraint): `BlockRun` only.
- **Tight pencil skirt** (`Bottom`, non-restraint): `BlockRun`, `BlockCrouch`.
**Removal:**
- Restraint-slot items typically declare `BlockSlotChange(<their-own-slot>)`, which means the player cannot remove them via normal unequip. These require the Key + timed-unlock action in §10.4.1.
- Non-restraint restrictive items (heels, skirts) remove via normal unequip as long as no other equipped item is blocking the slot change.
**Commission interaction:** an accepted commission whose objective needs a blocked action (e.g., `PerformAction(masturbate)` with `BlockMasturbate` active) does not auto-fail; it simply cannot progress until the restriction is cleared. The commission's day / week deadline still applies normally.
### 6.4 Bags
- Bag is an equippable item with its own inventory.
@@ -265,7 +297,7 @@ Sex toys are bought from the Adult Shop (§10.4) and follow the standard item-id
#### Other equipment
- **Bag slot** — 1 (see §6.4).
- **Hand slot** — 1. Holds one carriable item at a time (phone, food, key, etc.). Any item in `WristRestraint` disables all hand-dependent actions (§6.3.7).
- **Hand slot** — 1. Holds one carriable item at a time (phone, food, key, etc.). Hand-dependent actions (phone use, item pickup, masturbate, expose action) are disabled when an equipped item declares the corresponding `Block*` restriction (§6.3.7); wrist cuffs are the canonical case.
#### Container slots
- Each equipped clothing item may expose container slots (e.g., pants pocket). The equipped bag exposes container slots as well. Each container slot has a size class (S / M / L, §6.3.1) that constrains what fits.
@@ -285,8 +317,11 @@ Sex toys are bought from the Adult Shop (§10.4) and follow the standard item-id
Food items live in the `UItemInstance` system (§6.1). They come from two sources: **ingredients** at the Convenience Store (require cooking) and **pre-made** food at the Café (eat immediately). Eating consumes the item and applies any combination of the effects below.
**Instant effects** (one-shot on consumption, no timer):
- **Energy restore** — adds a fixed amount of energy (§7.3).
**Built-in effect** (applies on any eating action, not per-food authored):
- **Effective max energy fully restored** — eating resets the hunger decay (§7.3). Effective max energy returns to the base max. This effect is universal — every food, no matter how small, fully clears hunger.
**Instant effects** (one-shot on consumption, no timer, per-food authored):
- **Energy restore** — adds a fixed amount of current energy (§7.3), clamped to the (just-restored) effective max.
- **Lust decrease** — subtracts a fixed amount of lust. Particularly relevant for non-Slut players who cannot masturbate to reset lust (§7.2).
**Timed buffs** (run for a per-item duration):
@@ -345,8 +380,15 @@ All attributes update in real time. Indoor and outdoor behavior is identical —
- `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).
- Low effective energy reduces effective max stamina (see §7.4).
**Max energy has two layers:**
- **Base max energy** — the player's underlying ceiling. Raised by gym training (the progression lever).
- **Effective max energy** — the *current* ceiling on energy. This is what the player's energy bar can actually reach. Effective max **decays over time** at a hunger rate (`maxEnergyDecayRate`, TBD per §21), down to a floor (TBD, expressed as a fraction of base max) so the player is never fully starved into a forced game-over.
- **Eating any food (§6.7) restores effective max energy fully to base max** — this restoration overrides all other buffs and is the canonical way to reset hunger. It is a built-in effect of the eating action, not a per-food authored flag; every food does it.
- Recovered energy (sleep, instant-restore foods) is always clamped to effective max — sleeping does not also reset hunger; only eating does.
Together these mean a player who never eats slowly loses their available energy headroom each day, even with full sleep. The 90-day campaign forces a steady food cadence rather than allowing pure sleep cycling.
### 7.4 Stamina
- Used for running and other burst physical actions.
@@ -419,12 +461,14 @@ The phone is battery-powered (§9.8). A dead phone is unusable until charged —
- **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**.
- Photo follower gain is multiplied by the equipped phone's **camera quality** stat (§9.9). Better phone → more followers per equivalent shot.
### 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).
- Also grows **followers** in a continuous trickle. The live `streamQualityScore` is fed into `FollowerGainCalculator` (§13.5) per tick at a tunable rate; gains accumulate over the stream. Reputation sign applies — streaming with negative reputation shrinks the audience instead of growing it.
- `streamQualityScore` is multiplied by the equipped phone's **livestream quality** stat (§9.9). Better phone → higher donation rate and faster follower trickle from an identical scene.
- 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 and finalizes the accumulated follower delta.
- **Tip requests.** During an active stream, viewers post named action requests with a fixed yen reward attached. Each request is a small commission expressed in the §13.4 typed objective vocabulary — e.g. `ExposeBodyPart(boobs, 8s)` for a small tip, `BeFullyNaked(15s)` for a medium tip, `TakePhotoAtLocation(fountain)` for a large tip. The full tip-size range is wide; occasional high-roller requests pay several times a normal commission for correspondingly demanding objectives.
@@ -453,6 +497,7 @@ The phone is the primary access point for the forum. See §13.
### 9.7 Health Tracker
- Displays the player's attribute readouts (energy, stamina, lust, embarrassment, recognition).
- Shows **effective max energy** alongside current energy so the player can read hunger state (§7.3) — the gap between base max and effective max is the "how hungry am I" signal.
### 9.8 Battery
The phone has a finite battery that drains while powered on and recharges at the apartment.
@@ -472,6 +517,31 @@ The phone has a finite battery that drains while powered on and recharges at the
- The phone can still accept a powerbank charge from the player's inventory — consuming a powerbank wakes the phone at the powerbank's restore percentage. Without a powerbank, the phone stays dead until the player reaches an apartment charger.
- **Sleep.** Sleeping at the apartment always charges the phone to 100%, whether or not the player explicitly docked it on the charger. This applies equally to voluntary sleep and to the energy-zero cutscene (§4.4) — that cutscene's sleep cycle includes the charge-to-full step.
- **Persistence.** Current battery percentage is part of the phone's `UItemInstance` state and persists across saves.
- **Capacity scales with phone tier** — total charge budget is multiplied by the equipped phone's **battery capacity** stat (§9.9). Per-app drain rates are unchanged; a Pro phone simply has more battery to spend.
### 9.9 Phone models
Three phone models exist. The starter model is owned at game start; the other two are purchased at the **Electronics Shop** (§10.4). The player may **own multiple phones simultaneously** — they are regular `UItemInstance` items (§6.1) that live in the wardrobe / inventory, and only the *equipped* phone is active per the §9 usage rules.
| Tier | Model name | Camera quality | Livestream quality | Battery capacity | Source |
|------|-----------|----------------|--------------------|------------------|-----------------------|
| 1 | Starter | 1.0× | 1.0× | 1.0× | Owned at game start |
| 2 | Mid | > 1.0× (TBD) | > 1.0× (TBD) | > 1.0× (TBD) | Electronics Shop |
| 3 | Pro | highest (TBD) | highest (TBD) | highest (TBD) | Electronics Shop |
Stat axes:
- **Camera quality** — multiplier on the `exposureScore` input to `FollowerGainCalculator` (§13.5) when posting a photo. A better camera turns the same scene into a higher-follower-gain photo.
- **Livestream quality** — multiplier on the per-tick `streamQualityScore` (§9.1.1). Better optics + mic → higher donation rate and faster follower trickle.
- **Battery capacity** — multiplier on total charge budget (§9.8). Per-app drain rates are unchanged; the better phone simply runs longer between charges.
The multipliers apply to **new** photos and stream ticks only. Buying a Pro phone never retroactively improves a tier-1 photo already posted.
**Switching phones:**
- Hot-swap at the apartment wardrobe. Equipping a different phone moves the previously-equipped phone back to the wardrobe.
- **Battery percentage is per-phone-instance.** Swapping does not transfer charge — a Pro phone left uncharged stays uncharged when you swap to it.
- **Gallery, livestream history, and account state live on the player profile**, not the phone. Swapping never loses photos, follower count, or stream stats.
Tier prices and exact stat multipliers are TBD per §21.
---
@@ -513,18 +583,53 @@ Sleeping at home fast-forwards 8 hours.
- **Gym** — increase max energy. Costs energy in the process. Costs money.
- **Beauty salon** — boobs size, ass size, makeup, hairstyle, hair color.
- **Adult shop** — Buy sex toys for the `Nipples`, `Anal`, and `Vagina` toy slots (§6.5).
- **Electronics shop** — Buy upgraded phone models. Sells the Mid and Pro tiers (§9.9). In-person only; no online variant.
- **Streets / parks / alleys** — commission space.
- **Beach** — open sand, daytime crowds, nighttime privacy. Strong fit for exhibitionist / swimwear content.
- **Train station** — platforms, concourses. Dense voyeur space; an indoor-transit setting distinct from streets.
- **Casino** — money-and-clothing gambling. Main floor + VIP room. See §10.4.2.
The location set above is **locked for launch**. School exterior and hot springs (onsen) were considered and explicitly cut.
#### 10.4.1 Cuff / restraint removal
Restrictive clothing (§6.3.7) is removed by **Key + timed unlock action**:
A restraint that blocks its own slot (i.e., declares `BlockSlotChange(<own-slot>)`, §6.3.7) cannot be removed by normal unequip and requires the **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.
- Performing the unlock takes time; movement and all other actions are disabled for the duration. The restraint always comes off when the timer completes — the only question is *how quickly*.
- **Unlock minigame.** While the unlock action runs, a DBD-style skill-check minigame plays: a rotating pointer sweeps a circular meter that includes a small target zone, and the player presses a hotkey when the pointer crosses the zone. Each **successful hit advances the removal progress faster** than the baseline tick. **Missed checks carry no penalty** — they simply fail to grant the speed bonus, and the baseline timer keeps ticking down. There is no noise alert, no key loss, no fail state. The minigame is a pure accelerator for engaged players; impatient or unskilled players can ignore the checks and wait out the baseline timer.
- Per-restraint baseline timer length, skill-check frequency, target-zone size, and per-hit speed bonus are TBD per §21.
- 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.
#### 10.4.2 Casino
The casino is a location for spending time and (potentially) earning money. It splits into a **main floor** (always open) and a **VIP room** (gated; see below). The house edge means the expected value per session is intentionally negative — variance is the appeal, not steady income.
**Games (main floor):**
- **Slots** — single-button pull, instant outcome. Small-to-medium bets per pull. Pure RNG; rapid chase loop. Time cost is the player's choice — keep pulling as long as you want.
- **Blackjack** — vs. a dealer NPC. Skill-light card game. Each hand burns a few in-game minutes (dealer + decision pacing).
- **Roulette** — multiple bet types on a single spin. Each round burns a couple of in-game minutes.
The mixed pacing is deliberate: slots are the "fast burn," tables are the "time investment." Spending an afternoon at blackjack visibly eats into the commission window.
**VIP room:**
- Access is **gated by a per-day entrance fee** paid at the reception. One payment grants access for the rest of the in-game day; access expires at the next day boundary and must be paid again. No permanent unlock, no progression-based gating — anyone with enough money in the bank can enter, but every visit-day costs.
- Higher bet limits (higher floor on losses, higher ceiling on wins).
- Lower NPC density and a permissive dress code — nudity is socially accepted inside the VIP room, so the few NPCs present contribute less embarrassment than the main floor would.
- Strip-game tables live exclusively in the VIP room.
- The entrance fee functions as a built-in negative EV floor — even a winning night at the tables has to clear the day's entry cost before it's net profit.
**Strip variants (VIP-only):**
- A separate set of blackjack and roulette tables let the player bet **clothing items** as stakes (in addition to, or instead of, money).
- Losing a hand transfers the bet garment from the player's equipped slot to the **casino lost-and-found** — a safe inventory at the casino reception. The garment retains its `UItemInstance` identity (§6.1); it is not destroyed.
- Reclaiming a lost garment: win it back at the same table, or buy it back at reception for a flat fee (TBD).
- Strip outcomes don't bypass the normal embarrassment model — being stripped at the table and then walking out through the VIP room (low NPC density) or the main floor (higher density) still ticks embarrassment per §7.1.
**Player attributes during casino play:**
- Casino games themselves do not drive embarrassment, lust, energy, or pulse. Only the normal observation-driven model applies based on what other NPCs in the room can see.
- Energy is not consumed by gambling actions; food, sleep, and run-driven drain remain the only energy levers.
**Economy hook:**
- Casino is both an income source and a money sink. Net EV per session is negative on average; spikes are possible.
- Casino income is logged in the Bank app's income breakdown (§9.4) as a distinct line item; net losses appear in the corresponding spending breakdown.
---
## 11. PC (at home)
@@ -563,12 +668,14 @@ The forum is accessed via phone or PC. It is both diegetic and the primary missi
- The player must **accept** a weekly mission from the forum before it counts as committed (same accept lifecycle as daily commissions in §13.2). Un-accepted weekly missions stay visible as goals and carry no penalty.
- An accepted weekly mission that the player fails to complete by the end of the week is marked failed and applies the template's `failurePenalty` (§13.4), which is heavier than the daily equivalent.
- A mission visible on the board that requires a path level the player hasn't reached is shown for context but cannot be accepted yet.
- **Rewards land instantly on completion** — money wires to the bank, XP credits to the shared pool (§7.10), and followers update on the profile. There is no return-to-home "collect rewards" step.
### 13.2 Daily commissions
- Generated at day start, semi-random, weighted by path progression.
- Rewards: money, XP, followers.
- The player must **accept** a daily commission from the forum to commit to it. Accepted commissions that aren't completed by day end trigger the template's `failurePenalty` (§13.4) — typically a reputation / followers loss. Un-accepted commissions sitting on the board carry no penalty; they are offers, not obligations.
- Multiple commissions can be accepted simultaneously; there is no built-in cap. The day timer is the natural limit on workload.
- **Rewards land instantly on completion** — money wires to the bank (visible in §9.4 as a commission-completion line item), XP credits to the shared pool, followers update on the profile. No return-to-home step is required.
### 13.3 Profile
- View stats, progression, path levels, posted photos.
@@ -623,7 +730,7 @@ Example commissions from the brief that should be representable:
```
followerGain = base(exposureScore) * reputationFactor * (1 / log(followerCount + e))
```
- **`exposureScore`** is the input — for a posted photo it is computed from exposed body parts + visible coverage in that photo; for a livestream tick it is the current `streamQualityScore` (§9.1.1).
- **`exposureScore`** is the input — for a posted photo it is computed from exposed body parts + visible coverage in that photo, then multiplied by the equipped phone's **camera quality** stat (§9.9); for a livestream tick it is the current `streamQualityScore`, which already includes the phone's **livestream quality** multiplier (§9.1.1).
- **`reputationFactor`** is **signed**. Positive / neutral reputation → positive `followerGain` (followers grow). Negative reputation → negative `followerGain` (followers shrink). This is the §7.8 "positive vs. negative reputation" branch expressed in one number.
- The `1 / log(followerCount + e)` term enforces diminishing returns: at `followerCount = 0` the divisor is `1.0`; growth slows as the audience grows.
@@ -671,6 +778,7 @@ Forum, bank, gallery, shops are all in-fiction screens (phone/PC). Avoid out-of-
- **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.
- **Casino winnings (§10.4.2)** — high-variance, negative-EV-on-average. Not a reliable income source; treat as gambling, not as a salary.
### 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.
@@ -678,6 +786,7 @@ Forum, bank, gallery, shops are all in-fiction screens (phone/PC). Avoid out-of-
- Food / ingredients.
- Gym membership / beauty salon.
- Adult shop.
- **Casino losses (§10.4.2)** — the dominant cost over time, by design. Strip-game losses additionally cost clothing inventory (reclaimable but not free).
### 15.3 Tuning targets (placeholder)
| Tier | Daily income | Weekly rent | Notes |
@@ -771,7 +880,7 @@ Clothing, commissions, food, NPC templates all live as `DataAssets` (or DataTabl
### 18.2 Full launch target (TBD)
- 60+ clothing items.
- All NPC types polished, multiple visual variants each.
- Full city, 4+ districts, including the **Beach** and **Train Station** locations (§10.4) added on top of the vertical-slice shop set.
- Full city, 4+ districts, including the **Beach**, **Train Station**, **Casino** (main floor + VIP room), and **Electronics Shop** locations (§10.4) added on top of the vertical-slice shop set.
- 100+ commission templates.
- All 3 paths leveled to cap with distinct content.
@@ -805,10 +914,19 @@ Decisions previously open, now fixed:
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.
11. **Equipment slot list:** 18 slots, locked. Body clothing (8): `Outerwear`, `Top`, `Bottom`, `UnderwearTop`, `UnderwearBottom`, `Bodysuit` (exclusive with the prior four), `Socks`, `Footwear`. Accessories (4): `Head`, `Face`, `Eyes`, `Neck`. Restraints (3, independent): `WristRestraint`, `AnkleRestraint`, `NeckRestraint`. Toys (3, independent): `Nipples`, `Anal`, `Vagina`. Face-cover bypass for recognition is driven by `Face` and `Eyes`. Toys do not contribute to coverage. See §6.5 for the full table.
12. **City location list:** locked for launch. Apartment, Convenience Store, Café, Clothing Shops, Gym, Beauty Salon, Adult Shop, Streets / Parks / Alleys, **Beach**, **Train Station**. School exterior and hot springs (onsen) were considered and cut. Vertical slice (§18.1) covers everything except Beach and Train Station — those are full-launch additions. See §10.4.
12. **City location list:** locked for launch. Apartment, Convenience Store, Café, Clothing Shops, Gym, Beauty Salon, Adult Shop, Electronics Shop, Streets / Parks / Alleys, **Beach**, **Train Station**, **Casino**. School exterior and hot springs (onsen) were considered and cut. Vertical slice (§18.1) covers the basic shop set; Beach, Train Station, Casino, and Electronics Shop are full-launch additions. See §10.4.
13. **Attribute level-up cost:** XP only. XP is a single shared pool (not per-path); the player chooses which path's attribute pool to spend it on, and may eventually max all three. No money, no separate currency. See §7.10.
14. **Food effect vocabulary:** locked. Two instant effects (energy restore, lust decrease) plus four timed buffs (stamina regen +, max stamina +, embarrassment-gain resistance, lust-gain resistance). Stacking: different types parallel; same type additive up to a per-type cap. No pulse buffs, no caffeine trickle. See §6.7.
15. **Carriable categories:** locked. Clothing, Bags, Phone, Consumables (food), Toys. No other gadget categories beyond the phone. See §6.2.
16. **Casino:** added to the city (§10.4, §10.4.2). Main floor (slots, blackjack, roulette — money only). VIP room — **gated by a per-day entrance fee** (no permanent unlock; pay each day you want in). Permissive dress code; strip-game blackjack and roulette tables that bet clothing. No poker. Mixed pacing: slots instant, table games take in-game minutes. Net EV negative — variance is the appeal.
17. **Police capture, can't pay:** short non-interactive holding-cell cutscene, then time fast-forwards to the next morning. The night served settles the debt; no money owed afterward. Replaces the earlier "skip days proportional to unpaid amount" rule. See §4.4.
18. **Loss precedence during a police chase:** if the player is actively being chased by police (per §10.3) and any other loss condition fires (embarrassment max, energy zero), the loss resolves as **police capture** — the chase wins. The cops catch the player as they collapse. Applies even without a prior `wanted` tag. See §4.4.
19. **Phone models:** 3 tiers (Starter / Mid / Pro). Three stat axes per tier — camera quality (photo follower-gain multiplier), livestream quality (`streamQualityScore` multiplier), and battery capacity (total charge budget multiplier). Bought in-person at the new Electronics Shop (§10.4). Player may own multiple phones simultaneously; gallery / followers live on the profile, battery is per-phone-instance. See §9.9.
20. **No `isUnderwear` flag on clothing.** Coverage math no longer special-cases underwear. Authors set `coverage` directly to reflect concealment (including the psychological "just underwear" discount); the value in the editor is the contribution to coverage math. See §6.3 / §6.3.2.
21. **Per-item restrictions list replaces `isRestrictive` boolean.** Each clothing item carries an optional `restrictions` list with granular entries: `BlockRun`, `BlockCrouch`, `BlockPhoneUse`, `BlockItemPickup`, `BlockMasturbate`, `BlockExposeAction`, and parameterized `BlockSlotChange(slot)`. Restrictions union across equipped items. Restraints typically declare `BlockSlotChange(<own-slot>)` to force the §10.4.1 Key removal flow. Non-restraint items (heels, tight skirts) can declare lighter restrictions. See §6.3.7.
22. **Restraint-removal unlock minigame.** DBD-style skill-check minigame (rotating pointer + target zone). Successful hits **speed up** the removal. Missed checks have **no penalty** — they just don't grant the speed bonus. The restraint always comes off when the baseline timer expires. No noise alerts, no key loss, no fail state. See §10.4.1.
23. **Commission rewards land on completion, not on return home.** Money wires to the bank instantly, XP credits to the shared pool, followers update on the profile. No "collect rewards" step at the apartment. See §13.1 / §13.2 / §4.3 / §3.1.
24. **Hunger via max-energy decay.** Effective max energy decays over time (a hunger rate); eating any food restores effective max to base max as a built-in universal effect (no per-food authoring). Sleep restores current energy but does NOT reset hunger — only eating does. Floors at a TBD fraction of base max so the player can't be starved into a forced game-over. See §7.3 / §6.7.
## 21. Open Design Questions
@@ -827,6 +945,10 @@ These remain genuinely unresolved and should be addressed during implementation:
11. Livestream tip-request tuning (§9.1.1): request frequency curve vs. viewer count, tip-size distribution (including high-roller frequency), countdown length on the accept popup, and the per-failure viewer-count drop magnitude.
12. Face-cover recognition resistance per slot (§7.6, §6.5): per-slot resistance magnitudes for `Face` and `Eyes` and the stacking curve.
13. Food tuning (§6.7): instant-effect amounts (energy restore, lust decrease), per-buff durations and magnitudes, per-type stacking caps, and the cooking-minigame scoring → buff-strength curve.
14. Casino tuning (§10.4.2): RTP per game (slots, blackjack, roulette), bet ranges per tier (main vs. VIP), the **VIP per-day entrance fee**, in-game-minutes burned per table-game round, and the strip-garment buy-back fee.
15. Phone-tier tuning (§9.9): exact multiplier values for Mid and Pro on each of the three stat axes (camera quality, livestream quality, battery capacity), and the Electronics Shop purchase prices for each tier.
16. Restraint unlock-minigame tuning (§10.4.1): per-restraint baseline timer length, skill-check frequency, target-zone size, and per-hit speed bonus.
17. Hunger tuning (§7.3): `maxEnergyDecayRate` (effective max energy lost per in-game hour), the effective-max floor as a fraction of base max, and any per-food bonus on top of the universal full-restore (if we ever want a "big meal heals you faster" lever).
---