Rewrite ROADMAP.md and add archived initial roadmap
Replace the phase-based ROADMAP.md with a vertical-slice focused "Commonwealth Online Roadmap" that documents current status (Working Internal Vertical Slice) and the new playable slices (Same-Cell Foundation, Multiplayer Menu, Player State/Animation MVP, World-State Sync, Internal Playtest Package, Small Session, Gameplay Experiments, and later items). The previous Phase 0-6 plan is preserved verbatim in docs/ROADMAP_2026_06_Initial.md for archival reference. The change pivots tracking from low-level bootstrap tasks to playable vertical slices and highlights completed internal milestones and remaining tests.
This commit is contained in:
+244
-51
@@ -1,65 +1,258 @@
|
|||||||
# Roadmap
|
# Commonwealth Online Roadmap
|
||||||
|
|
||||||
## Phase 0: Research and Setup
|
## Current Status: Working Internal Vertical Slice
|
||||||
|
|
||||||
- [ ] Create repository structure
|
Commonwealth Online currently supports real Fallout 4 clients connecting through an external relay server, synchronizing player transforms, representing remote players with proxy actors, using the multiplayer browser UI, discovering LAN servers, saving recent servers, and syncing basic world state such as time and weather.
|
||||||
- [ ] Document project scope
|
|
||||||
- [ ] Document legal boundaries
|
|
||||||
- [ ] Set up Fallout 4 test profile
|
|
||||||
- [ ] Install F4SE
|
|
||||||
- [ ] Install Creation Kit
|
|
||||||
- [ ] Choose CommonLibF4 template
|
|
||||||
- [ ] Create test cell plan
|
|
||||||
|
|
||||||
## Phase 1: F4SE Plugin Bootstrap
|
The roadmap now tracks playable vertical slices rather than early technical bootstrap milestones.
|
||||||
|
|
||||||
- [ ] Create basic F4SE plugin project
|
---
|
||||||
- [ ] Confirm plugin loads in Fallout 4
|
|
||||||
- [ ] Create plugin log output
|
|
||||||
- [ ] Detect game version
|
|
||||||
- [ ] Read local player reference
|
|
||||||
- [ ] Read local player position
|
|
||||||
- [ ] Write position to log
|
|
||||||
|
|
||||||
## Phase 2: External Server Prototype
|
## Slice 1: Same-Cell Multiplayer Foundation
|
||||||
|
|
||||||
- [ ] Create basic local server
|
### Goal
|
||||||
- [ ] Define packet format
|
|
||||||
- [ ] Support client connect/disconnect
|
|
||||||
- [ ] Assign player IDs
|
|
||||||
- [ ] Receive transform packets
|
|
||||||
- [ ] Broadcast transform packets to other clients
|
|
||||||
|
|
||||||
## Phase 3: Fallout 4 Network Connection
|
Two or more players can join the same controlled test cell and see each other moving reliably.
|
||||||
|
|
||||||
- [ ] Connect F4SE plugin to local server
|
### Includes
|
||||||
- [ ] Send test packets from Fallout 4
|
|
||||||
- [ ] Send real player transform packets
|
|
||||||
- [ ] Receive remote transform packets
|
|
||||||
- [ ] Store remote player state safely
|
|
||||||
|
|
||||||
## Phase 4: Remote Player Representation
|
- Server relay
|
||||||
|
- Player IDs
|
||||||
|
- Transform sync
|
||||||
|
- Remote proxy actors
|
||||||
|
- Movement smoothing
|
||||||
|
- Disconnect cleanup
|
||||||
|
- Fake client testing tools
|
||||||
|
- Dev server GUI
|
||||||
|
|
||||||
- [ ] Create test cell in Creation Kit
|
### Internal Milestones
|
||||||
- [ ] Create placeholder remote player actor
|
|
||||||
- [ ] Spawn or place remote actor
|
|
||||||
- [ ] Move remote actor using received transform data
|
|
||||||
- [ ] Smooth remote actor movement
|
|
||||||
- [ ] Clean up actor on disconnect
|
|
||||||
|
|
||||||
## Phase 5: Basic Gameplay Sync
|
- [x] Plugin connects to server
|
||||||
|
- [x] Server assigns player IDs
|
||||||
|
- [x] Transform packets relay between clients
|
||||||
|
- [x] Remote player state is stored safely
|
||||||
|
- [x] Proxy actors represent remote players
|
||||||
|
- [x] Movement smoothing works
|
||||||
|
- [x] Disconnect removes or holds remote representation correctly
|
||||||
|
- [x] Fake clients can simulate remote players
|
||||||
|
- [x] Dev server GUI can start/stop server and manage fake clients
|
||||||
|
|
||||||
- [ ] Sync crouch state
|
### Done When
|
||||||
- [ ] Sync sprint/walk state
|
|
||||||
- [ ] Sync weapon drawn state
|
|
||||||
- [ ] Sync basic fire event
|
|
||||||
- [ ] Sync simple health state
|
|
||||||
- [ ] Add debug UI or console commands
|
|
||||||
|
|
||||||
## Phase 6: Controlled Multiplayer Test
|
A two-client test in `F4TTestCell01` works repeatedly without manual recovery.
|
||||||
|
|
||||||
- [ ] Two clients in same test cell
|
---
|
||||||
- [ ] Both players visible
|
|
||||||
- [ ] Movement sync working
|
## Slice 2: Multiplayer Menu and Join Flow
|
||||||
- [ ] Basic animation sync working
|
|
||||||
- [ ] Basic LAN test documented
|
### Goal
|
||||||
|
|
||||||
|
Players can access Commonwealth Online from Fallout 4’s main menu using a native-feeling multiplayer browser.
|
||||||
|
|
||||||
|
### Includes
|
||||||
|
|
||||||
|
- Main menu Multiplayer button
|
||||||
|
- PrismaUI / Ultralight browser
|
||||||
|
- Direct Connect
|
||||||
|
- Local servers tab
|
||||||
|
- LAN discovery
|
||||||
|
- Recent servers
|
||||||
|
- Controller navigation
|
||||||
|
- Mouse/controller cursor handling
|
||||||
|
- UI scaling for different resolutions
|
||||||
|
|
||||||
|
### Internal Milestones
|
||||||
|
|
||||||
|
- [x] Multiplayer menu opens from main menu
|
||||||
|
- [x] Direct Connect works
|
||||||
|
- [x] Local tab scans LAN servers
|
||||||
|
- [x] Recent servers persist
|
||||||
|
- [x] Controller can navigate browser
|
||||||
|
- [x] Mouse/controller mode switching works
|
||||||
|
- [x] UI scales correctly at 1080p, 1440p, and 4K
|
||||||
|
|
||||||
|
### Done When
|
||||||
|
|
||||||
|
A player can launch Fallout 4, open Multiplayer, find or enter a server, connect, disconnect, and reconnect without console commands.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Slice 3: Player State and Animation MVP
|
||||||
|
|
||||||
|
### Goal
|
||||||
|
|
||||||
|
Remote players feel more like players rather than sliding markers.
|
||||||
|
|
||||||
|
### Includes
|
||||||
|
|
||||||
|
- Movement state sync
|
||||||
|
- Walk/run/sprint state
|
||||||
|
- Sneak state
|
||||||
|
- Jump state
|
||||||
|
- Weapon drawn state
|
||||||
|
- Proxy animation or animation-adjacent visual behavior
|
||||||
|
- Fake-client animation test scripts
|
||||||
|
|
||||||
|
### Internal Milestones
|
||||||
|
|
||||||
|
- [x] Movement state fields are sent
|
||||||
|
- [x] Fake clients can walk, circle, jump, sneak, teleport, leave cell, and return
|
||||||
|
- [x] Proxy actors respond to synced movement state
|
||||||
|
- [x] Animation graph and AI behavior experiments are documented
|
||||||
|
- [x] Working in-game behavior is confirmed
|
||||||
|
|
||||||
|
### Done When
|
||||||
|
|
||||||
|
A remote player can move around the test cell and visually communicate their main state clearly enough for internal playtesting.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Slice 4: World-State Sync MVP
|
||||||
|
|
||||||
|
### Goal
|
||||||
|
|
||||||
|
Connected players share basic world conditions so the session feels consistent.
|
||||||
|
|
||||||
|
### Includes
|
||||||
|
|
||||||
|
- Host-authoritative world state
|
||||||
|
- Time sync
|
||||||
|
- Weather sync
|
||||||
|
- Host reassignment
|
||||||
|
- Fake-client world-state visibility
|
||||||
|
- Protocol documentation
|
||||||
|
|
||||||
|
### Internal Milestones
|
||||||
|
|
||||||
|
- [x] First client becomes world-state host
|
||||||
|
- [x] Host sends time/weather state
|
||||||
|
- [x] Server validates host-only world-state packets
|
||||||
|
- [x] Non-host clients apply world state
|
||||||
|
- [x] Host disconnect promotes next lowest player ID
|
||||||
|
- [x] Promoted host seeds state from local synced values
|
||||||
|
|
||||||
|
### Done When
|
||||||
|
|
||||||
|
Three clients can connect, share time/weather, lose the host, promote a new host, and continue without a visible world-state jump.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Slice 5: Internal Playtest Package
|
||||||
|
|
||||||
|
### Goal
|
||||||
|
|
||||||
|
The project can be packaged, deployed, and tested by someone other than the developer.
|
||||||
|
|
||||||
|
### Includes
|
||||||
|
|
||||||
|
- Build scripts
|
||||||
|
- Deploy scripts
|
||||||
|
- Proper Fallout 4 `Data` layout
|
||||||
|
- ESP staging
|
||||||
|
- Mesh/material/texture staging
|
||||||
|
- PrismaUI staging
|
||||||
|
- Setup documentation
|
||||||
|
- Troubleshooting documentation
|
||||||
|
- Known-good test profile
|
||||||
|
|
||||||
|
### Internal Milestones
|
||||||
|
|
||||||
|
- [x] Build output stages to `build/Fallout 4/Data`
|
||||||
|
- [x] ESPs are included
|
||||||
|
- [x] Assets are included
|
||||||
|
- [x] PrismaUI and Ultralight files are included
|
||||||
|
- [x] Fallout 4 path resolver works
|
||||||
|
- [ ] Clean install test
|
||||||
|
- [ ] Mod Organizer 2 install test
|
||||||
|
- [ ] Second-machine install test
|
||||||
|
- [ ] Steam Deck or LAN client test package
|
||||||
|
|
||||||
|
### Done When
|
||||||
|
|
||||||
|
A fresh machine can install the package, start the server, join from Fallout 4, and complete the test-cell playtest checklist.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Slice 6: Small Multiplayer Session
|
||||||
|
|
||||||
|
### Goal
|
||||||
|
|
||||||
|
Commonwealth Online supports a small structured session with several players in a controlled area.
|
||||||
|
|
||||||
|
### Includes
|
||||||
|
|
||||||
|
- 2 to 4 real clients
|
||||||
|
- Stable proxy assignment
|
||||||
|
- Join/rejoin handling
|
||||||
|
- Disconnect handling
|
||||||
|
- LAN and direct connect support
|
||||||
|
- World-state sync
|
||||||
|
- Basic session rules
|
||||||
|
- Debug logging for failures
|
||||||
|
|
||||||
|
### Internal Milestones
|
||||||
|
|
||||||
|
- [ ] 2 real clients stable for 15 minutes
|
||||||
|
- [ ] 3 real clients stable for 15 minutes
|
||||||
|
- [ ] 4 real clients stable for 15 minutes
|
||||||
|
- [ ] Host disconnect test
|
||||||
|
- [ ] Client reconnect test
|
||||||
|
- [ ] Cell leave/return test
|
||||||
|
- [ ] Server restart recovery behavior documented
|
||||||
|
|
||||||
|
### Done When
|
||||||
|
|
||||||
|
A small group can complete a repeatable test session without developer intervention.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Slice 7: Gameplay Sync Experiments
|
||||||
|
|
||||||
|
### Goal
|
||||||
|
|
||||||
|
Start testing actual gameplay interactions after the multiplayer foundation is stable.
|
||||||
|
|
||||||
|
### Candidate Systems
|
||||||
|
|
||||||
|
- Basic health sync
|
||||||
|
- Basic damage events
|
||||||
|
- Weapon fire events
|
||||||
|
- Simple interaction events
|
||||||
|
- Power armor enter/exit
|
||||||
|
- Settlement placement experiments
|
||||||
|
- Chat or player identity
|
||||||
|
- Enemy sync research
|
||||||
|
|
||||||
|
### Rules
|
||||||
|
|
||||||
|
These are not added until the earlier vertical slices are stable. Each gameplay system must be tested as an isolated experiment before becoming part of the main branch.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Later Slices
|
||||||
|
|
||||||
|
### Wider World Support
|
||||||
|
|
||||||
|
- Exterior worldspace testing
|
||||||
|
- Interior/exterior transitions
|
||||||
|
- Multiple cells
|
||||||
|
- Fast travel policy
|
||||||
|
- Reconnect position handling
|
||||||
|
|
||||||
|
### Session UX
|
||||||
|
|
||||||
|
- Player names
|
||||||
|
- Server metadata
|
||||||
|
- Favorites
|
||||||
|
- Passwords or private sessions
|
||||||
|
- Server browser polish
|
||||||
|
- Error messages
|
||||||
|
|
||||||
|
### Gameplay Layer
|
||||||
|
|
||||||
|
- Combat
|
||||||
|
- Damage
|
||||||
|
- Inventory policy
|
||||||
|
- Quest policy
|
||||||
|
- Settlement sync
|
||||||
|
- NPC/enemy strategy
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
# Roadmap
|
||||||
|
|
||||||
|
## Phase 0: Research and Setup
|
||||||
|
|
||||||
|
- [ ] Create repository structure
|
||||||
|
- [ ] Document project scope
|
||||||
|
- [ ] Document legal boundaries
|
||||||
|
- [ ] Set up Fallout 4 test profile
|
||||||
|
- [ ] Install F4SE
|
||||||
|
- [ ] Install Creation Kit
|
||||||
|
- [ ] Choose CommonLibF4 template
|
||||||
|
- [ ] Create test cell plan
|
||||||
|
|
||||||
|
## Phase 1: F4SE Plugin Bootstrap
|
||||||
|
|
||||||
|
- [ ] Create basic F4SE plugin project
|
||||||
|
- [ ] Confirm plugin loads in Fallout 4
|
||||||
|
- [ ] Create plugin log output
|
||||||
|
- [ ] Detect game version
|
||||||
|
- [ ] Read local player reference
|
||||||
|
- [ ] Read local player position
|
||||||
|
- [ ] Write position to log
|
||||||
|
|
||||||
|
## Phase 2: External Server Prototype
|
||||||
|
|
||||||
|
- [ ] Create basic local server
|
||||||
|
- [ ] Define packet format
|
||||||
|
- [ ] Support client connect/disconnect
|
||||||
|
- [ ] Assign player IDs
|
||||||
|
- [ ] Receive transform packets
|
||||||
|
- [ ] Broadcast transform packets to other clients
|
||||||
|
|
||||||
|
## Phase 3: Fallout 4 Network Connection
|
||||||
|
|
||||||
|
- [ ] Connect F4SE plugin to local server
|
||||||
|
- [ ] Send test packets from Fallout 4
|
||||||
|
- [ ] Send real player transform packets
|
||||||
|
- [ ] Receive remote transform packets
|
||||||
|
- [ ] Store remote player state safely
|
||||||
|
|
||||||
|
## Phase 4: Remote Player Representation
|
||||||
|
|
||||||
|
- [ ] Create test cell in Creation Kit
|
||||||
|
- [ ] Create placeholder remote player actor
|
||||||
|
- [ ] Spawn or place remote actor
|
||||||
|
- [ ] Move remote actor using received transform data
|
||||||
|
- [ ] Smooth remote actor movement
|
||||||
|
- [ ] Clean up actor on disconnect
|
||||||
|
|
||||||
|
## Phase 5: Basic Gameplay Sync
|
||||||
|
|
||||||
|
- [ ] Sync crouch state
|
||||||
|
- [ ] Sync sprint/walk state
|
||||||
|
- [ ] Sync weapon drawn state
|
||||||
|
- [ ] Sync basic fire event
|
||||||
|
- [ ] Sync simple health state
|
||||||
|
- [ ] Add debug UI or console commands
|
||||||
|
|
||||||
|
## Phase 6: Controlled Multiplayer Test
|
||||||
|
|
||||||
|
- [ ] Two clients in same test cell
|
||||||
|
- [ ] Both players visible
|
||||||
|
- [ ] Movement sync working
|
||||||
|
- [ ] Basic animation sync working
|
||||||
|
- [ ] Basic LAN test documented
|
||||||
Reference in New Issue
Block a user