Files / folder structure added
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# Protocol
|
||||
|
||||
This folder documents the planned network protocol for Fallout 4 Together.
|
||||
|
||||
The first protocol should be simple and focused on player transform sync.
|
||||
|
||||
## First Packet Types
|
||||
|
||||
- Welcome packet
|
||||
- Transform packet
|
||||
- Disconnect packet
|
||||
|
||||
## Future Packet Types
|
||||
|
||||
- Animation state packet
|
||||
- Fire weapon packet
|
||||
- Health packet
|
||||
- Chat packet
|
||||
- Cell change packet
|
||||
|
||||
## Design Goals
|
||||
|
||||
The protocol should be:
|
||||
|
||||
- Simple
|
||||
- Easy to debug
|
||||
- Versioned
|
||||
- Safe to extend
|
||||
- Clear enough to test outside Fallout 4
|
||||
|
||||
## Early Testing
|
||||
|
||||
The protocol should be testable using fake clients before being connected to Fallout 4.
|
||||
@@ -0,0 +1,43 @@
|
||||
# Message Types
|
||||
|
||||
This file tracks planned message type names for the Fallout 4 Together protocol.
|
||||
|
||||
## Core Messages
|
||||
|
||||
```text
|
||||
welcome
|
||||
transform
|
||||
disconnect
|
||||
ping
|
||||
pong
|
||||
```
|
||||
|
||||
## Planned Gameplay Messages
|
||||
|
||||
```text
|
||||
animation_state
|
||||
weapon_fire
|
||||
weapon_reload
|
||||
health_update
|
||||
chat_message
|
||||
cell_change
|
||||
actor_spawn
|
||||
actor_remove
|
||||
```
|
||||
|
||||
## Debug Messages
|
||||
|
||||
```text
|
||||
debug_log
|
||||
debug_marker
|
||||
debug_error
|
||||
```
|
||||
|
||||
## Naming Rules
|
||||
|
||||
Message types should be:
|
||||
|
||||
- Lowercase
|
||||
- Snake case
|
||||
- Short but clear
|
||||
- Stable once used in test builds
|
||||
@@ -0,0 +1,64 @@
|
||||
# Packet Types
|
||||
|
||||
This document describes planned packet types for the multiplayer prototype.
|
||||
|
||||
## Welcome Packet
|
||||
|
||||
Sent from server to client after connection.
|
||||
|
||||
Fields:
|
||||
|
||||
```text
|
||||
type
|
||||
playerId
|
||||
serverTime
|
||||
```
|
||||
|
||||
## Transform Packet
|
||||
|
||||
Sent from client to server and broadcast to other clients.
|
||||
|
||||
Fields:
|
||||
|
||||
```text
|
||||
type
|
||||
playerId
|
||||
cellId
|
||||
worldspaceId
|
||||
x
|
||||
y
|
||||
z
|
||||
pitch
|
||||
yaw
|
||||
roll
|
||||
timestamp
|
||||
```
|
||||
|
||||
## Animation State Packet
|
||||
|
||||
Planned later.
|
||||
|
||||
Fields:
|
||||
|
||||
```text
|
||||
type
|
||||
playerId
|
||||
movementState
|
||||
weaponDrawn
|
||||
isCrouching
|
||||
isSprinting
|
||||
isAiming
|
||||
isFiring
|
||||
```
|
||||
|
||||
## Disconnect Packet
|
||||
|
||||
Sent when a player leaves.
|
||||
|
||||
Fields:
|
||||
|
||||
```text
|
||||
type
|
||||
playerId
|
||||
reason
|
||||
```
|
||||
@@ -0,0 +1,51 @@
|
||||
# Player Sync
|
||||
|
||||
Player synchronization is the first major technical goal for Fallout 4 Together.
|
||||
|
||||
## First Goal
|
||||
|
||||
The first goal is to represent remote players as placeholder actors in a controlled test cell.
|
||||
|
||||
The first version only needs to sync:
|
||||
|
||||
- Position
|
||||
- Rotation
|
||||
- Cell ID
|
||||
- Basic connection state
|
||||
|
||||
## Not Required at First
|
||||
|
||||
The first version does not need:
|
||||
|
||||
- Full animation graph sync
|
||||
- Combat sync
|
||||
- Inventory sync
|
||||
- Quest sync
|
||||
- Dialogue sync
|
||||
- Accurate physics sync
|
||||
|
||||
## Transform Sync
|
||||
|
||||
Each client should send its local player transform to the server.
|
||||
|
||||
The server should broadcast that transform to other clients.
|
||||
|
||||
Remote clients should move placeholder actors based on the received transform.
|
||||
|
||||
## Smoothing
|
||||
|
||||
Remote players should not snap instantly to every received transform.
|
||||
|
||||
Instead, remote actors should interpolate toward the latest received position.
|
||||
|
||||
Basic idea:
|
||||
|
||||
```text
|
||||
current actor position + latest network position = smoothed visual position
|
||||
```
|
||||
|
||||
## Same-Cell Restriction
|
||||
|
||||
Early prototypes should require all players to remain in the same test cell.
|
||||
|
||||
Cell transitions should not be supported until basic player sync is stable.
|
||||
@@ -0,0 +1,42 @@
|
||||
# World Sync
|
||||
|
||||
World synchronization is a long-term problem and is not part of the first prototype.
|
||||
|
||||
Fallout 4 assumes a single player owns the world state. Multiplayer requires deciding which client or server controls each piece of world state.
|
||||
|
||||
## World State Examples
|
||||
|
||||
World state can include:
|
||||
|
||||
- Doors
|
||||
- Containers
|
||||
- Pickups
|
||||
- NPC deaths
|
||||
- Physics objects
|
||||
- Quest stages
|
||||
- Workshop objects
|
||||
- Terminal states
|
||||
- Dialogue state
|
||||
|
||||
## Early Approach
|
||||
|
||||
The first prototype should avoid world sync as much as possible.
|
||||
|
||||
Recommended early restrictions:
|
||||
|
||||
- Use a custom test cell
|
||||
- Avoid lootable containers
|
||||
- Avoid quests
|
||||
- Avoid doors
|
||||
- Avoid terminals
|
||||
- Avoid persistent world changes
|
||||
|
||||
## Later Ideas
|
||||
|
||||
Possible future approaches:
|
||||
|
||||
- Host-controlled world state
|
||||
- Server-authoritative world state
|
||||
- Cell-specific state tracking
|
||||
- Limited interaction whitelist
|
||||
- Resettable test environments
|
||||
Reference in New Issue
Block a user