Add the real 211-tile / 5-stat game content

shared/tile-inventory.json + shared/roll-tables.json + shared/GAME-REVIEW.md
+ shared/BRANCHING-TEMPLATE.md were parsed from the design doc in a separate
session and were already sitting untracked in this repo. This is the real,
authoritative game content — 211 tiles across 12 segments, 5 player stats
(cash/love/education/wealth/age), 48 placeholder roll tables — far more
complete than the hand-sketch-inspired board built earlier.

Adds shared/tileInventory.js and shared/rollTables.js: mechanical
`export default {...}` wrappers around the same JSON (kept as-is alongside
them as the raw source reference), so the content is importable both by the
server and by the browser fetching shared/*.js with zero bundler — the same
pattern every other file in shared/ already uses. Avoids relying on JSON
module import-attribute syntax, whose support is uncertain on node:20-alpine
(the Dockerfile's base image).

Also includes assets/colors.json and assets/tile_types.json (an apparently
separate, incomplete transcription of the hand sketch) — not wired into
anything yet, just brought into version control.

Appends integration-gap TODOs to GAME-REVIEW.md: 85 inline_table tiles have
a die size but no table content anywhere in the parsed files; payday/
cash_bonus amounts are undefined everywhere; multi-table roll_table_ref
tiles (2-3 tables at once, 22 of them) have no documented combination rule.
This commit is contained in:
2026-07-28 10:05:55 -07:00
parent 70eeb78eaf
commit 220f70d342
8 changed files with 12336 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
{
"deep pine green": "#163a30",
"warm paper": "#f6edd8",
"marigold": "#e8a12a",
"tomato": "#d6553b",
"muted green": "#3f8f5f",
"slate blue": "#3f6ea5"
}
+26
View File
@@ -0,0 +1,26 @@
[
{
"id": "0",
"name": "Start",
"color": "#f6edd8",
"zone": "start"
},
{
"id": "1",
"name": "High School Dropout",
"color": "#d6553b",
"zone": "start"
},
{
"id": "2",
"name": "@",
"color": "#e8a12a",
"zone": "start"
},
{
"id": "3",
"name": "High School Graduate",
"color": "#3f8f5f",
"zone": "start"
}
]
+75
View File
@@ -0,0 +1,75 @@
# Life Journey — Branching / Adjacency Template
The design doc lists tiles **in order within each segment**, but it does not say
how the twelve segments connect, or where the forks and merges are. That wiring
is what turns a pile of tile-lists into a playable board graph. Fill this in and
I'll turn it into a connection map the game can walk.
## The twelve segments (as parsed, in doc order)
| # | Segment id | Tiles | First tile → Last tile |
|---|---|---|---|
| 1 | `starting_strip` | 7 | Graduation party → STOP |
| 2 | `career` | 22 | Pay Day → STOP |
| 3 | `investment` | 20 | Pay Day → Dice Space |
| 4 | `investment_bottom` | 23 | Pay Day → Dice Space |
| 5 | `high_risk` | 11 | Dice Space → Dice Space |
| 6 | `gap_year` | 17 | Pay Day → STOP |
| 7 | `education` | 12 | Pay Day → Graduation Gift |
| 8 | `relationship_top` | 20 | Pay Day → Aging Parents |
| 9 | `relationship_bottom` | 26 | Pay Day → … |
| 10 | `retirement_top` | 11 | Pay Day → Hobby |
| 11 | `retirement_middle` | 22 | ½ Life Crisis → … |
| 12 | `retirement_bottom` | 20 | Pay Day → … |
The `(top)/(bottom)/(middle)` names strongly suggest parallel lanes on the
physical board — that's exactly the geometry only your layout knows.
## What I need — two things
### 1. The STOP forks
There are **3 STOP tiles** (end of `starting_strip`, `career`, `gap_year`). Each
says "roll D8 to age, then pick your new path." Tell me the choices at each:
```
STOP after starting_strip → player may choose: [ career | education | gap_year ] ← confirm/edit
STOP after career → player may choose: [ ? | ? | ? ]
STOP after gap_year → player may choose: [ ? | ? | ? ]
```
(Do investment / high_risk / relationship / retirement also branch off a STOP,
or are they entered some other way? Note it.)
### 2. Segment connections (the graph)
For **each segment**, tell me what its **entry** connects from and what its
**exit** connects to. Easiest format — just fill the arrows, referencing segment
ids and tile numbers (0-indexed within the segment):
```
career: enters from STOP#1 → exits to STOP#2
investment: enters from ?? → exits to ??
investment_bottom: enters from ?? → exits to ??
high_risk: enters from ?? → exits to ??
...
```
If a segment has a **mid-path fork or merge** (e.g. tile 8 of `career` splits to
`investment` tile 0 AND continues to tile 9), write it like:
```
career tile 8 → forks to: career tile 9 OR investment tile 0
relationship_top tile 19 → merges into retirement_top tile 0
```
Don't worry about being formal — bullet points in plain English are fine. Photos
or a rough hand-drawn arrow diagram of the board work too; I'll translate.
## What happens after you send this
I convert it into a `board-graph.json` — every tile gets a `next` (or list of
`next` for forks) so the game can move tokens along real paths. **Only then** do
coordinates get authored (against the real artwork), because a token's screen
position and its graph position are two different things and both need the final
layout to exist first.
+324
View File
@@ -0,0 +1,324 @@
# Life Journey — Game Content Review
A readable summary of everything parsed from the design doc, for checking and filling in. The game tracks five things per player: **cash ($), Love, Education, Wealth, Age.**
**211 tiles** across **12 segments**, referencing **48 roll tables** that still need real content.
## Board segments and tiles
### Starting Strip (7 tiles)
0. **Graduation party**_event_
1. **Action space** — _action_space_ · D100 · ⤷ roll table
2. **First Paycheck**_choice_
3. **Dice roll** — _dice_space_ · ⤷ roll table
4. **Underground poker**_choice_ · D20
5. **New job** — _roll_table_ref_ · ⤷ roll table
6. **STOP**_stop_ · D8
### Career Path (22 tiles)
0. **PAY DAY**_payday_
1. **RECRUITER CALLS**_choice_
2. **PERFORMANCE REVIEW** — _roll_table_ref_ · ⤷ roll table
3. **NEW HIRE** — _roll_table_ref_ · D100 · ⤷ roll table
4. **START A BUSINESS** — _roll_table_ref_ · ⤷ roll table
5. **OFFICE BAR TRIVIA** — _roll_table_ref_ · ⤷ roll table
6. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
7. **COMPANY PERKS** — _roll_table_ref_ · D100 · ⤷ roll table
8. **THE NEWS**_event_ · D20
9. **NEW JOB** — _roll_table_ref_ · ⤷ roll table
10. **COMPANY RACE DAY** — _inline_table_ · D10
11. **OPPORTUNITY KNOCKS** — _roll_table_ref_ · ⤷ roll table
12. **CLIENT DINNER** — _roll_table_ref_ · ⤷ roll table
13. **SHENANIGANS** — _roll_table_ref_ · ⤷ roll table
14. **OFFICE CHRISTMAS PARTY** — _roll_table_ref_ · ⤷ roll table
15. **MENTORSHIP**_choice_
16. **BIG CAREER MOMENT**_event_
17. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
18. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
19. **PERFORMANCE REVIEW** — _roll_table_ref_ · ⤷ roll table
20. **START A BUSINESS** — _roll_table_ref_ · ⤷ roll table
21. **STOP**_stop_ · D8
### Investment Path (20 tiles)
0. **PAY DAY**_payday_
1. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
2. **SIDE INVESTMENT** — _inline_table_ · D20
3. **BUY A HOUSE** — _roll_table_ref_ · D100 · ⤷ roll table
4. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
5. **ESTATE AUCTION** — _roll_table_ref_ · ⤷ roll table
6. **MARKET CRASH** — _inline_table_ · D20
7. **FORCED PARTNERSHIP**_choice_
8. **401k** — _cash_bonus_ · D20
9. **SEMINAR** — _inline_table_ · D20
10. **ANGEL INVESTOR** — _inline_table_ · D20
11. **BUY A HOUSE** — _roll_table_ref_ · D100 · ⤷ roll table
12. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
13. **BLIND INVESTMENT** — _inline_table_ · D6
14. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
15. **BANKRUPTCY** — _inline_table_ · D20
16. **MARKET MAYHEM**_choice_
17. **FINANCIAL ADVISOR** — _inline_table_ · D20
18. **PAY DAY**_payday_
19. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
### Investment Path (Bottom) (23 tiles)
0. **PAY DAY**_payday_
1. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
2. **SIDE INVESTMENT** — _inline_table_ · D20
3. **BUY A HOUSE** — _roll_table_ref_ · D100 · ⤷ roll table
4. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
5. **START A BUSINESS** — _roll_table_ref_ · ⤷ roll table
6. **MARKET CRASH** — _inline_table_ · D20
7. **ESTATE AUCTION** — _roll_table_ref_ · ⤷ roll table
8. **401k** — _cash_bonus_ · D20
9. **BUY A HOUSE** — _roll_table_ref_ · D100 · ⤷ roll table
10. **ANGEL INVESTOR** — _inline_table_ · D20
11. **FORCED PARTNERSHIP**_choice_
12. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
13. **BANKRUPTCY** — _inline_table_ · D20
14. **BLIND INVESTMENT** — _inline_table_ · D6
15. **PAY DAY**_payday_
16. **BET AGAINST ANOTHER PLAYER**_choice_
17. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
18. **MARKET MAYHEM**_event_
19. **FORCE SALE** — _inline_table_ · D20
20. **START A BUSINESS** — _roll_table_ref_ · ⤷ roll table
21. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
22. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
### High Risk Path (11 tiles)
0. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
1. **BUY A HOUSE** — _roll_table_ref_ · D100 · ⤷ roll table
2. **BET AGAINST ANOTHER PLAYER**_choice_
3. **PAY DAY**_payday_
4. **LEVERAGED BUYOUT** — _inline_table_ · D20
5. **100K** — _cash_bonus_
6. **INVESTEGATION** — _inline_table_ · D20
7. **BLIND INVESTMENT** — _inline_table_ · D6
8. **ROUGE TRADER** — _inline_table_ · D20
9. **10K** — _cash_bonus_
10. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
### Gap Year Path (17 tiles)
0. **PAY DAY**_payday_
1. **SHENANIGANS** — _roll_table_ref_ · ⤷ roll table
2. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
3. **TREASURE HUNT (NEED TO MAKE TREASURE MAP)** — _roll_table_ref_ · ⤷ roll table
4. **LOST IN TRANSLATION**_event_
5. **MEXICO** — _roll_table_ref_ · ⤷ roll table
6. **AIRPORT SECURITY** — _inline_table_ · D20
7. **AUSTRALIA** — _roll_table_ref_ · ⤷ roll table
8. **PAY DAY**_payday_
9. **JAPAN** — _roll_table_ref_ · ⤷ roll table
10. **ACCENT ROULETTE**_event_
11. **IRELAND** — _roll_table_ref_ · ⤷ roll table
12. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
13. **GERMANY** — _roll_table_ref_ · ⤷ roll table
14. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
15. **ITALY** — _roll_table_ref_ · ⤷ roll table
16. **STOP**_stop_ · D8
### Education Path (12 tiles)
0. **PAY DAY**_payday_
1. **SCHOLARSHIP** — _inline_table_ · D20
2. **4 YEAR DAGREE**_event_
3. **COMMUNITY COLLAGE**_event_
4. **APPRENTICESHIP** — _inline_table_ · D20
5. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
6. **STUDY ABROD** — _inline_table_ · D20
7. **POP QUIZ**_event_
8. **EXTRACURRICULAR** — _roll_table_ref_ · D20 · ⤷ roll table
9. **ONLINE COURSE** — _inline_table_ · D20
10. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
11. **GRADUATION GIFT** — _inline_table_ · D20
### Relationship/Family (Top) (20 tiles)
0. **PAY DAY**_payday_
1. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
2. **ADOPT A PET** — _roll_table_ref_ · D100 · ⤷ roll table
3. **UNCLES CONDO** — _inline_table_ · D20
4. **NEW CITY** — _roll_table_ref_ · D100 · ⤷ roll table
5. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
6. **HAVE A BABY** — _inline_table_ · D2
7. **DINNER PARTY** — _inline_table_ · D20
8. **MARRIGE**_choice_
9. **WHITE ELEPHANT** — _inline_table_ · D6
10. **FRIENDS WEDDING** — _inline_table_ · D20
11. **NEW JOB** — _roll_table_ref_ · ⤷ roll table
12. **PODCAST** — _inline_table_ · D20
13. **HOBBY** — _roll_table_ref_ · D100 · ⤷ roll table
14. **PERFECT IMPRESSION** — _inline_table_ · D20
15. **BUY A HOUSE** — _roll_table_ref_ · D100 · ⤷ roll table
16. **FAMILY REUNION** — _inline_table_ · D20
17. **HAVE A BABY** — _inline_table_ · D2
18. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
19. **AGING PARENTS** — _inline_table_ · D20
### Relationship/Family (Bottom) (26 tiles)
0. **PAY DAY**_payday_
1. **UNCLES CONDO** — _inline_table_ · D20
2. **ADOPT A PET** — _roll_table_ref_ · D100 · ⤷ roll table
3. **RISKY MOVE** — _inline_table_ · D20
4. **NEW CITY** — _roll_table_ref_ · D100 · ⤷ roll table
5. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
6. **HAVE A BABY** — _inline_table_ · D2
7. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
8. **SIBLINGS WEDDING** — _inline_table_ · D20
9. **NEIGHBORS PET** — _inline_table_ · D20
10. **SIDE HUSTLE** — _roll_table_ref_ · D100 · ⤷ roll table
11. **BUY A HOUSE** — _roll_table_ref_ · D100 · ⤷ roll table
12. **HOBBY** — _roll_table_ref_ · D100 · ⤷ roll table
13. **HAVE A BABY** — _inline_table_ · D2
14. **PODCAST** — _inline_table_ · D20
15. **MARRIGE**_choice_
16. **PAY DAY**_payday_
17. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
18. **FAMILY VACATION** — _inline_table_ · D20
19. **ADOPT A PET** — _roll_table_ref_ · D100 · ⤷ roll table
20. **FAMILY REUNION** — _inline_table_ · D20
21. **NEW JOB** — _roll_table_ref_ · ⤷ roll table
22. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
23. **HOUSE MAINTENANCE** — _inline_table_ · D20
24. **HAVE A BABY** — _inline_table_ · D2
25. **AGING PARENTS** — _inline_table_ · D20
### Retirement Path (Top) (11 tiles)
0. **PAY DAY**_payday_
1. **INVESTMENT PAID OFF** — _inline_table_ · D20
2. **START A BAND** — _inline_table_ · D20
3. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
4. **JURY DUTY** — _inline_table_ · D20
5. **HOBBY** — _roll_table_ref_ · D100 · ⤷ roll table
6. **THE RACES** — _inline_table_ · D10
7. **NEW JOB** — _roll_table_ref_ · ⤷ roll table
8. **BUCKET LIST TRIP** — _inline_table_ · D20
9. **HOME RENOVATIONS** — _inline_table_ · D20
10. **HOSTED THANKSGIVING** — _inline_table_ · D20
### Retirement Path (Middle) (22 tiles)
0. **½ LIFE CRISIS** — _inline_table_ · D20
1. **HORRIBLE HANGOVER** — _inline_table_ · D20
2. **40TH BIRTHDAY** — _inline_table_ · D20
3. **MYSTERY TATTOO** — _roll_table_ref_ · D100 · ⤷ roll table
4. **UNEXPECTED JOY** — _inline_table_ · D20
5. **PAY DAY**_payday_
6. **HOBBY** — _roll_table_ref_ · D100 · ⤷ roll table
7. **HOST CHRISTMAS** — _inline_table_ · D20
8. **BUCKET LIST** — _inline_table_ · D20
9. **RETIREMENT PARTY** — _inline_table_ · D20
10. **SELL HOUSE** — _roll_table_ref_ · ⤷ roll table
11. **DID YOU HEAR?** — _inline_table_ · D20
12. **LOTTERY** — _inline_table_ · D20
13. **FANTASY FOOTBALL** — _inline_table_ · D20
14. **HIGH SCHOOL REUNION** — _inline_table_ · D20
15. **POKER NIGHT** — _inline_table_ · D20
16. **PICKEL BALL** — _inline_table_ · D20
17. **BOWLING NIGHT** — _inline_table_ · D20
18. **INVESTMENT PAID OFF** — _inline_table_ · D20
19. **DICE SPACE** — _dice_space_ · D100 · ⤷ roll table
20. **PAY DAY**_payday_
21. **RETIREMENT PARTY** — _inline_table_ · D20
### Retirement Path (Bottom) (20 tiles)
0. **PAY DAY**_payday_
1. **HOBBY** — _roll_table_ref_ · D100 · ⤷ roll table
2. **FANTASY FOOTBALL** — _inline_table_ · D20
3. **HOSTED THANKSGIVING** — _inline_table_ · D20
4. **HIGH SCHOOL REUNION** — _inline_table_ · D20
5. **SPEEDING TICKET** — _inline_table_ · D20
6. **BOWLING NIGHT** — _inline_table_ · D20
7. **JURY DUTY** — _inline_table_ · D20
8. **PICKEL BALL** — _inline_table_ · D20
9. **THE RACES** — _inline_table_ · D10
10. **NEW JOB** — _roll_table_ref_ · ⤷ roll table
11. **POKER NIGHT** — _inline_table_ · D20
12. **HOME RENOVATIONS** — _inline_table_ · D20
13. **BUCKET LIST TRIP** — _inline_table_ · D20
14. **JOINED FACEBOOK** — _inline_table_ · D20
15. **GOLF TRIP** — _inline_table_ · D20
16. **DENTAL WORK** — _inline_table_ · D20
17. **ACTION SPACE** — _action_space_ · D100 · ⤷ roll table
18. **START A BAND** — _inline_table_ · D20
19. **INVESTMENT PAID OFF** — _inline_table_ · D20
## Roll tables needed (all PLACEHOLDER)
Sorted by how many tiles use them. Each has banded stand-in entries so the game is playable now.
| Table | Die | Used by # tiles |
|---|---|---|
| DICE SPACE TABLE | D100 | 18 |
| ACTION SPACE TABLE | D100 | 15 |
| your current property | D100 | 8 |
| property table | D100 | 7 |
| JOBS TABLE | D100 | 6 |
| hobby | D100 | 5 |
| D100 BUSINESS TABLE | D100 | 4 |
| Profited Or lost | D100 | 4 |
| sell your | | | business | D100 | 4 |
| Pet Table | D100 | 3 |
| Bring the data | D100 | 2 |
| Charm the boss | D100 | 2 |
| item being auctioned | D100 | 2 |
| new city | D100 | 2 |
| shenanigan | D20 | 2 |
| Throw a someone under the bus | D100 | 2 |
| Accept a local recommendation | D100 | 1 |
| Accept a local recommendation | D100 | 1 |
| Accept a local recommendation | D100 | 1 |
| Accept a local recommendation | D100 | 1 |
| Accept a local recommendation | D100 | 1 |
| Accept a local recommendation | D100 | 1 |
| applicant\'s | D100 | 1 |
| company perk | D100 | 1 |
| Explore the city | D100 | 1 |
| Explore the city | D100 | 1 |
| Explore the city | D100 | 1 |
| Explore the city | D100 | 1 |
| Explore the city | D100 | 1 |
| Explore the city | D100 | 1 |
| gift exchange! | D100 | 1 |
| Go into nature | D100 | 1 |
| Go into nature | D100 | 1 |
| Go into nature | D100 | 1 |
| Go into nature | D100 | 1 |
| Go into nature | D100 | 1 |
| Go into nature | D100 | 1 |
| Karaoke bar | D100 | 1 |
| Mystery Tattoo Table | D100 | 1 |
| Play it safe | D100 | 1 |
| Roll D20. | D100 | 1 |
| Roll D20. | D100 | 1 |
| Side Hustle Table | D100 | 1 |
| Sporting event | D100 | 1 |
| Take the risk | D100 | 1 |
| treasure | D100 | 1 |
| trivia question | D100 | 1 |
| Upscale steakhouse | D100 | 1 |
## Open questions for you / your sister
- **Win condition** isn't stated in the doc — how does the game end and who wins? (Most Wealth? A blend of cash + Love + Wealth at retirement?)
- **Age** — the D8 at each STOP adds years; is there a maximum age that ends the game?
- **Stat meaning** — is *Wealth* a separate point score from *cash ($)*? Treated that way here.
- **Country sub-tables** (Explore city / Nature / Local rec) are **separate per country** (Mexico, Australia, Japan, Ireland, Germany, Italy) — 18 small tables in total.
- Several tables are all-players mini-games (trivia, White Elephant, races) — these need special handling in an async game; worth flagging for Phase 3.
## Additional gaps found while integrating this into the game engine
- **`inline_table` tiles have no table content anywhere.** 85 of the 211 tiles (40% of the board) are type `inline_table` — they carry a die size (e.g. `COMPANY RACE DAY`, D10) but reference zero external tables, and none of the 48 tables in roll-tables.json are inline (all 48 have a `source_doc_id`). Whatever content was inline in the original design doc next to these tiles wasn't captured during parsing. Currently these resolve against a generic synthesized placeholder table (same banded shape as the real 48, one per die size, obviously fake numbers) — real content for all 85 is still needed.
- **`payday`/`cash_bonus` amounts are undefined.** PAY DAY (16 tiles), 100K, 10K, and 401k have no amount specified anywhere in tile-inventory.json or roll-tables.json. Currently using invented placeholder amounts ($2,000 payday; $100,000/$10,000 for the named bonuses; 401k falls into the synthesized-table bucket above) — these are 100% guesses, not derived from anything in the doc.
- **Multi-table `roll_table_ref` tiles have no documented combination rule.** 22 tiles reference 23 tables at once (e.g. `PERFORMANCE REVIEW` references 3), and nothing in the parsed content says how they combine. Currently implemented as "roll and apply every referenced table's effect, summed" — a reasonable guess, but unconfirmed against the actual design doc.
- The tile-type vocabulary actually has **9 types**, not 7 — `inline_table` and `cash_bonus` exist alongside payday/action_space/dice_space/roll_table_ref/choice/event/stop.
File diff suppressed because it is too large Load Diff
+3557
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff