Upload files to "Planning"
This commit is contained in:
@@ -0,0 +1,231 @@
|
||||
# Corporate Ladder Game — Big Picture Brainstorm
|
||||
|
||||
This document captures the full vision for the game: everything on the table, from
|
||||
the near-term prototype through the long-term dream version. Not everything here
|
||||
gets built at once — this is the idea space the architecture needs to be able to
|
||||
grow into.
|
||||
|
||||
## Core Concept
|
||||
|
||||
A browser-based career simulation game. The player starts at the bottom of an
|
||||
organization (e.g. the mailroom in a modern corporate setting) and plays through
|
||||
turns (a day or a week each), making choices that shape their career, finances,
|
||||
relationships, and reputation.
|
||||
|
||||
It is **not** a pure narrative experience — there is real scoring, real numeric
|
||||
state, and real progress to track. It is also not a spreadsheet optimization
|
||||
game — the numbers exist to give the story stakes and a scoreboard, not to reward
|
||||
min-maxing. The target feel is **light and fun**, with enough rigor underneath
|
||||
that choices matter.
|
||||
|
||||
## Gameplay Pillars
|
||||
|
||||
### 1. Choose-Your-Own-Adventure + Simulation Hybrid
|
||||
|
||||
- Early version: scripted choices. Each turn presents a small, fixed set of
|
||||
options (e.g. 2–3 actions).
|
||||
- Later version: free-text player input. The player types what they want to do
|
||||
in their own words, and an AI layer interprets that into a game action (e.g.
|
||||
"I stay late and grind it out" → *hard work* action; "I look for a way to
|
||||
duck out early" → *shortcut* action). The AI can also generate more colorful,
|
||||
varied dialogue and flavor text around the outcome.
|
||||
- Underneath both modes, the same numeric engine runs: money, stats,
|
||||
relationships, skills.
|
||||
|
||||
### 2. Multidimensional Success
|
||||
|
||||
- Title/promotion is one axis of success, not the only one.
|
||||
- Other axes: skills learned, relationships built, reputation, personal
|
||||
satisfaction.
|
||||
- Strategic depth: a player might deliberately stay at a lower level longer to
|
||||
build skills or relationships before pushing for a promotion, rather than
|
||||
always rushing upward. Rushing every promotion should be able to create real
|
||||
downstream problems (skill gaps, thin relationships) — but this should
|
||||
emerge from the choices available, not from punishing math.
|
||||
|
||||
### 3. Skills as Gates, Not Just Flavor
|
||||
|
||||
- Skills (e.g. negotiation, technical ability) are tracked stats.
|
||||
- Low skill in an area can lock out certain choices entirely, or make them
|
||||
much riskier.
|
||||
- Skills grow **organically**, as a side effect of taking related actions and
|
||||
events — not through a dedicated "go train" menu. The goal is to avoid a
|
||||
grindy, click-here-click-there feel. Growth should feel like something that
|
||||
happens to you as a consequence of living the story, not a chore you manage.
|
||||
|
||||
### 4. Characters with Real Weight
|
||||
|
||||
- Every character has flavor description text (appearance, personality quirks
|
||||
— tall, charismatic, particularly attractive, gruff, etc.) purely for color.
|
||||
- Underneath, characters carry real relationship stats toward the player:
|
||||
- How much they **like** you
|
||||
- How much they **fear** you
|
||||
- How much they're willing to **help** you
|
||||
- A darker mechanic: leverage/pressure material — not necessarily
|
||||
"blackmail" in the extreme sense, but things a character wouldn't want to
|
||||
come out, which the player can use as a lever to influence behavior. This
|
||||
gives the player a second currency beyond money: information and
|
||||
reputation as power.
|
||||
- Influence is central to gameplay — persuading a boss to let you leave
|
||||
early, or a coworker to cover your shift, might work because you've been
|
||||
kind to them (they like you) or because you've been intimidating (they fear
|
||||
you). Different relationship paths should lead to similar outcomes through
|
||||
different means.
|
||||
- Characters should have extensive, distinct backstories, so that even when
|
||||
the underlying stat skeleton is the same across playthroughs, individual
|
||||
characters feel different and memorable each time.
|
||||
|
||||
### 5. Random Events, Built to Scale
|
||||
|
||||
- The initial version should have a small, tightly scoped set of random
|
||||
events.
|
||||
- Critically, the underlying data structures for events (and everything else)
|
||||
should be built so that adding new events later is just adding new data —
|
||||
never a rewrite of game logic. Events and choices should be treated as data
|
||||
the engine reads generically, not hardcoded logic scattered through the
|
||||
codebase.
|
||||
|
||||
### 6. Soft Failure, Not Game Over
|
||||
|
||||
- No hard "you lose" state.
|
||||
- Failure is a spiral of **suffering and reduced options**, not a dead end:
|
||||
- Bankruptcy might force taking out a loan.
|
||||
- A demoted or struggling player might have to do menial work for, or take
|
||||
orders from, someone they used to outrank.
|
||||
- The player can always keep pushing to climb back out, at a cost.
|
||||
- A player can choose to walk away because it's "too painful," but the game
|
||||
itself doesn't force an ending on them.
|
||||
- This keeps players engaged in the story even at rock bottom, and it opens up
|
||||
strong narrative beats — being humbled by a character you were dismissive of
|
||||
earlier should hit differently than being humbled by a stranger.
|
||||
|
||||
### 7. Open-Ended Pacing with a Natural Ceiling
|
||||
|
||||
- No fixed turn count or forced ending.
|
||||
- The game naturally self-limits: once a player becomes, say, company
|
||||
president with influence over everyone, there's nowhere higher to climb —
|
||||
the sandbox is exhausted, not because a clock ran out.
|
||||
- The "ending," whenever a player stops, is the same regardless of how far
|
||||
they got: a **career retrospective** — what you did, what you didn't do,
|
||||
key relationships, notable moments (and eventually notable
|
||||
images/videos), presented uniformly whether the player "won" or "lost."
|
||||
|
||||
### 8. Single Player Only
|
||||
|
||||
- No multiplayer, no competitive syncing across players. This simplifies a
|
||||
large amount of design and technical complexity and keeps the focus on the
|
||||
player's individual story.
|
||||
|
||||
### 9. Infinite Themes via Data-Driven Design
|
||||
|
||||
This is one of the most important architectural commitments:
|
||||
|
||||
- The game engine, mechanics, and code should **never need to change** to
|
||||
support a new setting or theme.
|
||||
- Theme is purely a data layer: character archetypes, job titles, event
|
||||
flavor text, tone, and even the *boundaries of allowed content* are all
|
||||
swappable data/content packs.
|
||||
- Example themes: modern corporate (primary/default), auto manufacturing,
|
||||
high-tech startup, Wild West, medieval guild, sci-fi/Star Trek-style,
|
||||
textile mill, or even a kid-friendly "lemonade stand" version for younger
|
||||
players.
|
||||
- Content packs also control maturity level: a kid-friendly theme keeps
|
||||
everything light, while a more adult theme could unlock sharper-edged
|
||||
mechanics (like real blackmail-style pressure points) — the mechanics
|
||||
underneath stay identical; only the data changes what's permissible and how
|
||||
it's flavored.
|
||||
- Replayability also comes from randomized competitive density — e.g. one
|
||||
playthrough might have five rivals competing for the same mailroom
|
||||
promotion, another might have just one. Same mechanics, very different felt
|
||||
experience.
|
||||
|
||||
### 10. AI Integration (Long-Term)
|
||||
|
||||
- **Dialogue and interpretation**: free-text player input gets interpreted by
|
||||
an AI into structured game actions, and the AI generates more natural,
|
||||
varied dialogue for NPCs and outcomes.
|
||||
- **Stateless inference architecture**: this is an important technical
|
||||
decision. The inference engine itself (e.g. a local Llama-class model) is
|
||||
stateless — it's a pure function that takes an assembled prompt and returns
|
||||
a response. It does not maintain any memory or state of its own.
|
||||
- All state — player situation, history, current stats, active theme/genre,
|
||||
scene context — lives at the **application/game engine layer**.
|
||||
- The game engine is responsible for assembling the right context and
|
||||
building the prompt fresh on every call.
|
||||
- This keeps the game portable across different inference backends and
|
||||
keeps behavior predictable and debuggable.
|
||||
- **Configurable inference endpoint**: rather than the game hosting or
|
||||
depending on a specific AI service, the configuration should include a
|
||||
pointer to an inference engine (e.g. a local Llama-equivalent server) that
|
||||
the user points at themselves. The core game should never require Jesse to
|
||||
run or pay for a hosted inference service.
|
||||
- **Generated media (further out)**: AI-generated images or short video
|
||||
vignettes for big narrative payoff moments — e.g. an award ceremony
|
||||
producing a generated image of the player receiving a medal, or a short
|
||||
video vignette for a major win. This is explicitly a "big picture" /
|
||||
aspirational feature, well downstream of the prototype.
|
||||
|
||||
### 11. Logging & Feedback, Built In From Day One
|
||||
|
||||
This should exist even before any AI is involved, starting with the very first
|
||||
scripted-only prototype:
|
||||
|
||||
- **Full instrumentation**: every player action and its resulting effect
|
||||
should be captured/logged from turn one. This serves two purposes:
|
||||
1. Playtesting research — understanding what players actually do and want.
|
||||
2. Future AI tuning — once AI-driven dialogue/interpretation exists, having
|
||||
a baseline of real scripted interactions to compare against.
|
||||
- **In-game feedback widget**: a persistent "feedback to game designer"
|
||||
element on the turn screen (can be optionally hidden later once trust in
|
||||
the game is established, but visible by default early on):
|
||||
- Thumbs up / thumbs down / neutral rating per turn.
|
||||
- Optional free-text comment field.
|
||||
- If the player doesn't interact with it, nothing happens — it's fully
|
||||
passive/optional.
|
||||
- This is also the natural place to capture "I wanted to do something that
|
||||
wasn't an available option" feedback, which is gold for identifying where
|
||||
the scripted choice set is too narrow.
|
||||
- **Separate export stream**: feedback/logging data is captured as its own
|
||||
independent export, distinct from the game save file. It's meant for
|
||||
Jesse's review and analysis, not for reloading into a playthrough.
|
||||
|
||||
## Technical Direction (Big Picture)
|
||||
|
||||
- **Browser-based, client-heavy**: strong preference for a simple tech stack
|
||||
that runs entirely client-side (HTML/CSS/JavaScript), with no heavy backend
|
||||
services required. Ideally the only server-side requirement (if any) is
|
||||
serving the static page.
|
||||
- **Saves**: browser local storage as the default/primary save mechanism, with
|
||||
an explicit export/import (save-to-file) option so an accidental cache
|
||||
clear or browser crash doesn't destroy a career in progress.
|
||||
- **Data schema**: characters and events should carry tags/flags (e.g.
|
||||
department, role type like rival/mentor/peer for characters; stage/level
|
||||
and which stats are affected for events) so the engine can query and filter
|
||||
generically, instead of hardcoding per-entity logic.
|
||||
- **Extensibility as a first-class constraint**: every system (events,
|
||||
characters, themes) should be structured as data the engine reads, so that
|
||||
adding new content later doesn't require reworking the engine.
|
||||
|
||||
## Relationship to Jesse's Other Project
|
||||
|
||||
Jesse is separately building an **interactive story** project that is purely
|
||||
narrative-focused, with no game mechanics or scoring layer. This corporate
|
||||
ladder game is explicitly the opposite emphasis: it must have real scoring and
|
||||
measurable progress, not just storytelling. There may be shared code or
|
||||
techniques between the two (especially around AI-driven dialogue/story
|
||||
generation), but they are distinct projects with distinct goals.
|
||||
|
||||
## Open Questions / Things to Revisit Later
|
||||
|
||||
- What's the full list of core character fields beyond name, role/title,
|
||||
relationship stats (like/fear/help), and flavor description? (Tags for
|
||||
department and role-type like rival/mentor/peer were agreed as a good
|
||||
addition.)
|
||||
- What's the full list of core event fields beyond description and effects?
|
||||
(Tags for stage/level and affected stats were agreed as a good addition.)
|
||||
- How exactly does a player move between tiers/levels once promotion is
|
||||
introduced (post-MVP)?
|
||||
- What does the "career retrospective" screen actually look like/contain in
|
||||
detail?
|
||||
- How should the feedback widget's visibility toggle work, and when should it
|
||||
default to hidden vs. shown?
|
||||
@@ -0,0 +1,151 @@
|
||||
# Corporate Ladder Game — Minimum Viable Prototype (MVP) Spec
|
||||
|
||||
This is the scope for the **first playable version**. It intentionally leaves
|
||||
out AI, promotion, multiple themes, and generated media — but it must be built
|
||||
on data structures that support all of that later without a rewrite.
|
||||
|
||||
## Goal of This Version
|
||||
|
||||
Prove out the core turn loop: scripted choices → stat/relationship/money
|
||||
changes → open-ended replayable play → an ending retrospective whenever the
|
||||
player chooses to stop. Validate that the loop is fun in its simplest possible
|
||||
form before adding complexity.
|
||||
|
||||
## Scope: What's IN
|
||||
|
||||
- **Single setting/theme**: modern corporate office, mailroom level only.
|
||||
- **Single tier**: no promotion mechanic yet. The player stays in the mailroom
|
||||
and can keep playing indefinitely.
|
||||
- **Turns**: each turn represents a day or a week (pick one for the
|
||||
prototype — day is likely simpler to reason about first).
|
||||
- **Two characters**:
|
||||
- One boss (authority figure — approves/denies requests, can make life
|
||||
easier or harder).
|
||||
- One coworker rival (peer-level, competing for the same eventual
|
||||
promotion, can help or hinder).
|
||||
- Both have: name, flavor description (personality/appearance color text),
|
||||
and the three relationship stats (likes-you, fears-you, wants-to-help-you)
|
||||
toward the player.
|
||||
- Both have tags for role type (e.g. `boss`, `rival`) so later additions of
|
||||
more characters (mentor, peer, etc.) slot into the same schema.
|
||||
- **Player stats**:
|
||||
- Money (with basic income and basic recurring costs).
|
||||
- At least one skill (e.g. negotiation) that can grow organically from
|
||||
relevant choices and can gate at least one choice option.
|
||||
- The three relationship-facing stats as tracked per-character (not global).
|
||||
- **Choices per turn**: a small, fixed set (2–3 scripted options), each with
|
||||
a clear immediate effect on stats/relationships/money. No free-text input
|
||||
yet — that's a later phase.
|
||||
- **Random events**: a very small number (a handful) of simple scripted
|
||||
events that can occasionally fire instead of, or alongside, a normal turn's
|
||||
choice set. Kept minimal, but implemented through the same generic
|
||||
event-data structure the full game will use later (not a special-cased
|
||||
hack).
|
||||
- **Soft failure state**: at least one basic version of the "soft failure"
|
||||
loop — e.g. if money goes negative, the player is offered a demeaning
|
||||
option (take a loan, do a favor for the rival) rather than the game ending.
|
||||
- **Open-ended play**: no turn cap. The player can keep taking mailroom turns
|
||||
for as long as they want.
|
||||
- **Ending / retrospective**: a simple end-of-session summary screen the
|
||||
player can trigger (e.g. a "wrap up my career" action, or reaching it when
|
||||
they close out), showing: final money, final relationship stats per
|
||||
character, and a short list of notable moments/events that occurred. This
|
||||
screen should look the same in structure whether the player did "well" or
|
||||
"poorly" — it's a summary, not a win/lose screen.
|
||||
- **Save system**:
|
||||
- Browser local storage as the live/default save.
|
||||
- Explicit export-to-file and import-from-file so progress survives a
|
||||
cleared cache or browser crash.
|
||||
- **Feedback & logging system** (present from turn one, even without AI):
|
||||
- A persistent, always-visible-by-default feedback widget on the turn
|
||||
screen: thumbs up / thumbs down / neutral, plus an optional free-text
|
||||
comment box. No action required — ignoring it does nothing.
|
||||
- Every player action and its resulting effects are logged.
|
||||
- Feedback and logs are captured in their own **separate export**, distinct
|
||||
from the game save file.
|
||||
- **Data-driven structure for everything above**: characters, events, and
|
||||
choices should all be represented as data (e.g. JSON-like structures) that
|
||||
a generic engine reads and processes — not hardcoded if/else logic per
|
||||
character or event. This is the seed of the "themes are just data" and
|
||||
"events are just data" architecture from the big-picture vision.
|
||||
|
||||
## Scope: What's explicitly OUT (for now)
|
||||
|
||||
- No promotion or second tier.
|
||||
- No free-text/AI-driven input or dialogue.
|
||||
- No AI-generated images or video.
|
||||
- No multiple themes/settings (mailroom/corporate only).
|
||||
- No multiplayer (never planned — out of scope permanently, not just for
|
||||
MVP).
|
||||
- No complex leverage/blackmail system yet — at most a placeholder field on
|
||||
characters that isn't deeply used yet.
|
||||
- No account system — local storage + file export/import only.
|
||||
- No dedicated "training" or skill-grinding menu — skill growth stays
|
||||
incidental to choices.
|
||||
|
||||
## Tech Stack for MVP
|
||||
|
||||
- Fully client-side: HTML, CSS, and JavaScript, runnable directly in a
|
||||
browser with no required backend.
|
||||
- If any server component exists at all, it should be limited to serving
|
||||
static files — no game logic server-side.
|
||||
- No external dependencies beyond what's needed to keep the app simple and
|
||||
self-contained (avoid heavy frameworks unless there's a clear reason).
|
||||
- Game state, character data, and event data should be structured as plain
|
||||
data objects/files so they can later be swapped or extended (new themes,
|
||||
more events, more characters) without touching engine code.
|
||||
|
||||
## Suggested Data Shape (Starting Point)
|
||||
|
||||
This isn't final, but gives a concrete starting schema for the MVP:
|
||||
|
||||
**Character**
|
||||
- `id`
|
||||
- `name`
|
||||
- `role_type` (tag, e.g. `boss`, `rival`)
|
||||
- `description` (flavor text)
|
||||
- `likes_you` (number)
|
||||
- `fears_you` (number)
|
||||
- `wants_to_help_you` (number)
|
||||
|
||||
**Event / Turn Choice**
|
||||
- `id`
|
||||
- `stage_tag` (e.g. `mailroom`) — for future filtering by level
|
||||
- `description` (flavor text shown to player)
|
||||
- `options[]`, each with:
|
||||
- `label`
|
||||
- `effects` (changes to money, skill, relationship stats)
|
||||
- `requires` (optional skill/stat gate)
|
||||
|
||||
**Player State**
|
||||
- `money`
|
||||
- `skills` (map of skill name → value)
|
||||
- `relationships` (map of character id → stat object)
|
||||
- `history` (log of turns taken, for the retrospective screen)
|
||||
|
||||
**Feedback Log Entry** (separate export, not part of save)
|
||||
- `turn_id`
|
||||
- `action_taken`
|
||||
- `rating` (up / down / neutral / none)
|
||||
- `comment` (optional text)
|
||||
- `desired_but_unavailable_action` (optional text, if the player wanted
|
||||
something not offered)
|
||||
|
||||
## Definition of Done for MVP
|
||||
|
||||
The prototype is "done" when a player can:
|
||||
|
||||
1. Start a new game in the mailroom.
|
||||
2. Take repeated turns, choosing from a small set of scripted options each
|
||||
time, watching money, skill, and relationship stats change.
|
||||
3. Occasionally encounter one of the small set of random events.
|
||||
4. Hit a soft-failure scenario (e.g. run out of money) and be offered a
|
||||
demeaning-but-survivable option instead of a game over.
|
||||
5. Leave optional feedback (thumbs up/down/neutral + comment) on any turn.
|
||||
6. Save and reload their game via local storage, and export/import via file.
|
||||
7. Trigger an end-of-session retrospective screen summarizing their run.
|
||||
8. Keep playing indefinitely if they choose to, with no forced ending.
|
||||
|
||||
All of this should be built on data structures (for characters, events, and
|
||||
choices) that will support adding new events, new characters, a promotion
|
||||
tier, and eventually new themes — without needing to rewrite the core engine.
|
||||
@@ -0,0 +1,171 @@
|
||||
# Claude Code Build Prompt — Corporate Ladder Game MVP
|
||||
|
||||
Copy everything below the line into Claude Code as your starting prompt.
|
||||
|
||||
---
|
||||
|
||||
I want to build a browser-based career simulation game called (working title)
|
||||
"Corporate Ladder." This is a **minimum viable prototype** — please treat this
|
||||
as the first phase of a larger project, and follow a research/plan-first
|
||||
approach before writing code: propose a file/folder structure and data schema
|
||||
first, surface any open questions, and get my explicit go-ahead before you
|
||||
start implementing.
|
||||
|
||||
## Core Concept
|
||||
|
||||
A turn-based career sim. The player starts in the mailroom of a modern
|
||||
corporate office. Each turn (treat a turn as one day), the player is shown a
|
||||
short scripted scenario and picks from 2–3 choices. Choices affect the
|
||||
player's money, a skill stat, and relationship stats with two NPCs (a boss and
|
||||
a coworker rival). The game has no fixed length — the player can keep taking
|
||||
turns indefinitely — and at any point can trigger a "wrap up my career"
|
||||
retrospective screen summarizing what happened.
|
||||
|
||||
This is explicitly a **prototype/foundation**, not the full game. The most
|
||||
important requirement is that everything be **data-driven**: characters,
|
||||
events, and choices should live in data structures (JSON or equivalent) that
|
||||
a generic engine reads and processes. Do not hardcode character-specific or
|
||||
event-specific logic in the engine — the engine should not need to change to
|
||||
add a new character or event, and eventually should not need to change to
|
||||
support an entirely different theme/setting (e.g. Wild West instead of
|
||||
corporate office). Please design the schema with that future flexibility in
|
||||
mind, even though this build only needs to ship the corporate/mailroom
|
||||
content.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- Fully client-side: plain HTML, CSS, and JavaScript. No required backend —
|
||||
it should be able to run by opening a static HTML file (or via a trivial
|
||||
static file server for local dev).
|
||||
- Keep dependencies minimal. Avoid heavy frameworks unless you think there's
|
||||
a strong reason — I'd rather this stay simple and easy to reason about.
|
||||
- No database, no accounts. State lives client-side.
|
||||
|
||||
## Required Features for This Build
|
||||
|
||||
### 1. Core Turn Loop
|
||||
- Player starts a new game in the mailroom with starting values for money,
|
||||
one skill (e.g. "negotiation"), and neutral relationship stats with the two
|
||||
NPCs.
|
||||
- Each turn presents a short text scenario and 2–3 choices.
|
||||
- Choices apply effects to money / skill / relationship stats.
|
||||
- Some choices may require a minimum skill level to be available (a simple
|
||||
gating mechanism).
|
||||
- No fixed number of turns — the player can keep playing.
|
||||
|
||||
### 2. Two NPCs
|
||||
- A boss and a coworker rival.
|
||||
- Each has: name, a short flavor description (personality/appearance text,
|
||||
purely for color), a role-type tag (`boss` / `rival`), and three numeric
|
||||
relationship stats toward the player: `likes_you`, `fears_you`,
|
||||
`wants_to_help_you`.
|
||||
- Design the character schema so additional role types (e.g. `mentor`,
|
||||
`peer`) could be added later without changing engine code.
|
||||
|
||||
### 3. Random Events
|
||||
- Implement a small handful (4–6) of simple random events using the *same*
|
||||
data structure as regular scripted turns — i.e. an event is just another
|
||||
entry in the event/turn data with a tag marking it as a random event and
|
||||
some trigger condition (e.g. a probability or a stat threshold). Do not
|
||||
special-case these in the engine logic.
|
||||
|
||||
### 4. Soft Failure State
|
||||
- If money drops below zero (or some defined threshold), don't end the game.
|
||||
Instead, surface a distinct "hard times" branch of choices — e.g. take out
|
||||
a loan (debt that must be paid down over time) or do a demeaning favor for
|
||||
the rival (which affects relationship stats and possibly unlocks money).
|
||||
The player should be able to work their way back out.
|
||||
|
||||
### 5. Retrospective / Ending Screen
|
||||
- A "wrap up my career" action the player can take at any time.
|
||||
- Shows: final money, final relationship stats with each NPC, and a short
|
||||
list of notable moments/events from their playthrough (pull from a simple
|
||||
history log kept during play).
|
||||
- This screen's structure should be the same regardless of how the
|
||||
playthrough went — it's a summary, not a win/lose screen.
|
||||
|
||||
### 6. Save System
|
||||
- Auto-save to browser local storage as the player progresses.
|
||||
- An explicit "Export Save" button that downloads the current game state as a
|
||||
JSON file, and an "Import Save" option to load one back in.
|
||||
|
||||
### 7. Feedback & Logging System
|
||||
- On every turn screen, include a small, always-visible (for now) feedback
|
||||
widget: thumbs up / thumbs down / neutral buttons, plus an optional
|
||||
free-text comment box. The player is never required to interact with it.
|
||||
- Also include an optional field where the player can note "something I
|
||||
wanted to do that wasn't an option here."
|
||||
- Log every turn's chosen action and its effects, along with any feedback
|
||||
given, to a **separate log** that is exportable independently from the game
|
||||
save (a separate "Export Feedback Log" button/JSON file). This should not
|
||||
be mixed into the save-game file.
|
||||
|
||||
## Data Schema (Starting Point — feel free to refine, but keep me in the
|
||||
loop on changes)
|
||||
|
||||
```
|
||||
Character:
|
||||
id: string
|
||||
name: string
|
||||
role_type: string // e.g. "boss", "rival"
|
||||
description: string // flavor text
|
||||
likes_you: number
|
||||
fears_you: number
|
||||
wants_to_help_you: number
|
||||
|
||||
TurnEvent:
|
||||
id: string
|
||||
stage_tag: string // e.g. "mailroom" (for future level filtering)
|
||||
is_random_event: boolean
|
||||
description: string
|
||||
options: [
|
||||
{
|
||||
label: string
|
||||
effects: { money?: number, skills?: { [name]: number },
|
||||
relationships?: { [character_id]: { likes_you?: number,
|
||||
fears_you?: number, wants_to_help_you?: number } } }
|
||||
requires?: { skill: string, min: number }
|
||||
}
|
||||
]
|
||||
|
||||
PlayerState:
|
||||
money: number
|
||||
skills: { [name]: number }
|
||||
relationships: { [character_id]: { likes_you, fears_you,
|
||||
wants_to_help_you } }
|
||||
history: [ { turn_id, event_id, choice_label, timestamp } ]
|
||||
|
||||
FeedbackLogEntry:
|
||||
turn_id: string
|
||||
action_taken: string
|
||||
rating: "up" | "down" | "neutral" | null
|
||||
comment?: string
|
||||
desired_but_unavailable_action?: string
|
||||
```
|
||||
|
||||
## What NOT to Build Yet
|
||||
|
||||
- No promotion mechanic or second tier/level — mailroom only for this build.
|
||||
- No AI/LLM integration of any kind yet — this build is fully scripted.
|
||||
- No AI-generated images or video.
|
||||
- No multiple themes/settings — corporate/mailroom only, but keep the schema
|
||||
theme-agnostic in spirit (i.e. don't bake "mailroom" assumptions into the
|
||||
engine logic itself, keep it in the data).
|
||||
- No multiplayer — this is a permanent design decision, not just an MVP gap.
|
||||
- No account system or server-side persistence.
|
||||
|
||||
## Process
|
||||
|
||||
Please:
|
||||
1. Propose a project structure and confirm the data schema with me before
|
||||
writing implementation code.
|
||||
2. Flag any open questions (e.g. exact starting stat values, exact effect
|
||||
magnitudes) rather than guessing silently — reasonable defaults are fine
|
||||
but call them out.
|
||||
3. Build incrementally, and let's check in after the core turn loop works
|
||||
before layering on the feedback system, save/export, and random events.
|
||||
4. Keep commits small and incremental rather than one giant commit at the
|
||||
end.
|
||||
|
||||
Let me know once you've reviewed this and have a proposed structure, or if
|
||||
you have clarifying questions before we start.
|
||||
Reference in New Issue
Block a user