Files / folder structure added
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
|||||||
|
# Build outputs
|
||||||
|
build/
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
out/
|
||||||
|
dist/
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.pdb
|
||||||
|
*.lib
|
||||||
|
*.exp
|
||||||
|
*.ilk
|
||||||
|
|
||||||
|
# Visual Studio
|
||||||
|
.vs/
|
||||||
|
*.sln.docstates
|
||||||
|
*.user
|
||||||
|
*.vcxproj.user
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
CMakeFiles/
|
||||||
|
CMakeCache.txt
|
||||||
|
cmake_install.cmake
|
||||||
|
|
||||||
|
# XMake
|
||||||
|
.xmake/
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
|
||||||
|
# Fallout 4 files
|
||||||
|
Fallout4.exe
|
||||||
|
Fallout4Launcher.exe
|
||||||
|
*.ba2
|
||||||
|
*.bsa
|
||||||
|
*.esm
|
||||||
|
|
||||||
|
# Mod manager files
|
||||||
|
modlist.txt
|
||||||
|
loadorder.txt
|
||||||
|
plugins.txt
|
||||||
|
|
||||||
|
# Creation Kit temporary files
|
||||||
|
*.tes
|
||||||
|
*.bak
|
||||||
|
|
||||||
|
# Releases
|
||||||
|
releases/
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Fallout 4 Together is currently in the research and prototype stage.
|
||||||
|
|
||||||
|
At this stage, contributions should focus on documentation, research, setup notes, tooling experiments, and small isolated prototypes.
|
||||||
|
|
||||||
|
## Current Contribution Areas
|
||||||
|
|
||||||
|
Useful contributions include:
|
||||||
|
|
||||||
|
- F4SE setup notes
|
||||||
|
- CommonLibF4 setup notes
|
||||||
|
- Creation Kit test cell documentation
|
||||||
|
- Fallout 4 actor sync research
|
||||||
|
- Network packet design
|
||||||
|
- Server architecture experiments
|
||||||
|
- Safe testing workflows
|
||||||
|
- Crash reports from controlled test builds
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
Please keep contributions focused on the first prototype goal:
|
||||||
|
|
||||||
|
> Two Fallout 4 clients in a controlled test environment, with each player visible as a synced remote actor.
|
||||||
|
|
||||||
|
Avoid adding large systems before the core prototype works.
|
||||||
|
|
||||||
|
Out of scope for early development:
|
||||||
|
|
||||||
|
- Full campaign co-op
|
||||||
|
- Quest sync
|
||||||
|
- Settlement sync
|
||||||
|
- Public matchmaking
|
||||||
|
- Anti-cheat
|
||||||
|
- Large modlist support
|
||||||
|
- MMO-style gameplay
|
||||||
|
|
||||||
|
## Legal Requirements
|
||||||
|
|
||||||
|
Do not contribute:
|
||||||
|
|
||||||
|
- Fallout 4 executable files
|
||||||
|
- Bethesda game assets
|
||||||
|
- Bethesda archives
|
||||||
|
- DLC files
|
||||||
|
- F4SE binaries
|
||||||
|
- Proprietary game code
|
||||||
|
- Decompiled Bethesda scripts
|
||||||
|
- Other mods' files without permission
|
||||||
|
|
||||||
|
Only contribute files that you have the right to share.
|
||||||
|
|
||||||
|
## Recommended Workflow
|
||||||
|
|
||||||
|
1. Open an issue describing the problem or idea.
|
||||||
|
2. Keep changes small and focused.
|
||||||
|
3. Document what was tested.
|
||||||
|
4. Use a clean Fallout 4 test profile when testing.
|
||||||
|
5. Avoid testing with large modlists.
|
||||||
|
|
||||||
|
## Commit Style
|
||||||
|
|
||||||
|
Suggested commit prefixes:
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs: update setup notes
|
||||||
|
research: add actor sync notes
|
||||||
|
plugin: add basic plugin skeleton
|
||||||
|
server: add connection prototype
|
||||||
|
ck: document test cell plan
|
||||||
|
protocol: define transform packet
|
||||||
|
```
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Disclaimer
|
||||||
|
|
||||||
|
Fallout 4 Together is an unofficial fan research project.
|
||||||
|
|
||||||
|
This project is not affiliated with, endorsed by, or supported by Bethesda Game Studios, Bethesda Softworks, Microsoft, or the F4SE team.
|
||||||
|
|
||||||
|
This repository does not contain:
|
||||||
|
|
||||||
|
- Fallout 4 executable files
|
||||||
|
- Fallout 4 game assets
|
||||||
|
- Bethesda archives
|
||||||
|
- DLC files
|
||||||
|
- F4SE binaries
|
||||||
|
- Proprietary game code
|
||||||
|
|
||||||
|
Users must own a legal copy of Fallout 4 and install any required tools themselves.
|
||||||
|
|
||||||
|
This project is experimental and may cause crashes, broken saves, or unstable gameplay. Use a dedicated test profile and test save.
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
To be decided.
|
||||||
|
|
||||||
|
This project currently has no formal open-source license.
|
||||||
|
Do not reuse, redistribute, or publish this code/assets until a license is selected.
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
# Fallout 4 Together
|
||||||
|
|
||||||
|
Fallout 4 Together is an experimental research project exploring the possibility of adding basic multiplayer-style networking to Fallout 4.
|
||||||
|
|
||||||
|
The goal is not to create a full co-op campaign mod immediately. The first goal is much smaller:
|
||||||
|
|
||||||
|
> Two Fallout 4 clients in a controlled test environment, with each player visible as a synced remote actor.
|
||||||
|
|
||||||
|
This project is currently in the research and prototype stage.
|
||||||
|
|
||||||
|
## Project Goals
|
||||||
|
|
||||||
|
### First Prototype
|
||||||
|
|
||||||
|
- Load a native Fallout 4 plugin through F4SE
|
||||||
|
- Connect to a local test server
|
||||||
|
- Send local player position data
|
||||||
|
- Receive remote player transform data
|
||||||
|
- Represent another connected player using a placeholder actor
|
||||||
|
- Restrict all testing to a custom test cell
|
||||||
|
|
||||||
|
### Long-Term Ideas
|
||||||
|
|
||||||
|
- Basic LAN multiplayer test mode
|
||||||
|
- Remote player movement sync
|
||||||
|
- Basic animation state sync
|
||||||
|
- Basic chat or debug messages
|
||||||
|
- Host-controlled test cell
|
||||||
|
- Simple co-op combat arena
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
This project is not currently trying to support:
|
||||||
|
|
||||||
|
- Full Fallout 4 campaign co-op
|
||||||
|
- Quest synchronization
|
||||||
|
- Settlement synchronization
|
||||||
|
- Full NPC/world state synchronization
|
||||||
|
- VATS synchronization
|
||||||
|
- Public server/MMO gameplay
|
||||||
|
- Compatibility with large modlists
|
||||||
|
|
||||||
|
Those systems are extremely complex and are outside the scope of the first prototype.
|
||||||
|
|
||||||
|
## Repository Layout
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/ Project documentation and research notes
|
||||||
|
plugin/ Native F4SE/CommonLibF4 plugin work
|
||||||
|
creation-kit/ Creation Kit plugin files, Papyrus scripts, and test cell notes
|
||||||
|
server/ External multiplayer test server
|
||||||
|
protocol/ Network packet design and sync documentation
|
||||||
|
tools/ Helper scripts and utilities
|
||||||
|
test-data/ Example packets and test data
|
||||||
|
screenshots/ Development screenshots
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
This project is expected to require:
|
||||||
|
|
||||||
|
- Fallout 4 on PC
|
||||||
|
- Fallout 4 Script Extender, F4SE
|
||||||
|
- Fallout 4 Creation Kit
|
||||||
|
- Visual Studio 2022 or newer
|
||||||
|
- CMake or another supported C++ build system
|
||||||
|
- A CommonLibF4-based plugin template
|
||||||
|
- Git
|
||||||
|
- A clean Fallout 4 test profile
|
||||||
|
|
||||||
|
## Recommended Development Setup
|
||||||
|
|
||||||
|
Use a separate Fallout 4 installation or a dedicated modding profile for testing.
|
||||||
|
|
||||||
|
Recommended setup:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fallout 4
|
||||||
|
F4SE
|
||||||
|
Creation Kit
|
||||||
|
Mod Organizer 2 or Vortex
|
||||||
|
Visual Studio
|
||||||
|
Git
|
||||||
|
```
|
||||||
|
|
||||||
|
Use a clean test save and avoid testing with a full personal modlist.
|
||||||
|
|
||||||
|
## Legal Notice
|
||||||
|
|
||||||
|
This repository does not include Fallout 4 game files, Bethesda assets, F4SE binaries, or any proprietary game code.
|
||||||
|
|
||||||
|
Users are responsible for owning Fallout 4 and installing required external tools themselves.
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Current status:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Research phase
|
||||||
|
Repository structure setup
|
||||||
|
Protocol planning
|
||||||
|
No playable multiplayer build yet
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
To be decided.
|
||||||
+65
@@ -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
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# Creation Kit Files
|
||||||
|
|
||||||
|
This folder is for Creation Kit-side work for Fallout 4 Together.
|
||||||
|
|
||||||
|
The Creation Kit plugin should provide controlled test content for multiplayer experiments.
|
||||||
|
|
||||||
|
## Planned Contents
|
||||||
|
|
||||||
|
- Test cell
|
||||||
|
- Placeholder remote player actor
|
||||||
|
- Debug markers
|
||||||
|
- Optional Papyrus helper scripts
|
||||||
|
- Optional startup quest for testing
|
||||||
|
|
||||||
|
## Plugin Format
|
||||||
|
|
||||||
|
Early development can use an ESP.
|
||||||
|
|
||||||
|
Possible file name:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fallout4Together_Test.esp
|
||||||
|
```
|
||||||
|
|
||||||
|
## Important
|
||||||
|
|
||||||
|
Do not commit Bethesda master files or game assets.
|
||||||
|
|
||||||
|
Only commit original plugin files and original scripts created for this project.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# ESP Files
|
||||||
|
|
||||||
|
This folder is for original Fallout 4 Together Creation Kit plugin files.
|
||||||
|
|
||||||
|
Possible early plugin file:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fallout4Together_Test.esp
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not place Bethesda master files or other mods' plugin files here.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Compiled Papyrus Scripts
|
||||||
|
|
||||||
|
This folder is for compiled Papyrus `.pex` scripts if they are part of a test release.
|
||||||
|
|
||||||
|
Keep source scripts in:
|
||||||
|
|
||||||
|
```text
|
||||||
|
creation-kit/scripts/source/
|
||||||
|
```
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Papyrus Source Scripts
|
||||||
|
|
||||||
|
This folder is for original Papyrus source scripts created for Fallout 4 Together.
|
||||||
|
|
||||||
|
Possible uses:
|
||||||
|
|
||||||
|
- Debug startup quest
|
||||||
|
- Test cell helper scripts
|
||||||
|
- Actor spawn helpers
|
||||||
|
- On-screen debug messages
|
||||||
|
|
||||||
|
Networking should not be handled directly in Papyrus.
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Test Cells
|
||||||
|
|
||||||
|
The first multiplayer test should happen in a small controlled cell.
|
||||||
|
|
||||||
|
## First Test Cell Requirements
|
||||||
|
|
||||||
|
- Flat open area
|
||||||
|
- Good lighting
|
||||||
|
- No hostile NPCs
|
||||||
|
- No quests
|
||||||
|
- No doors to other cells
|
||||||
|
- A few visual markers for movement testing
|
||||||
|
- Spawn marker for local player
|
||||||
|
- Placeholder marker for remote players
|
||||||
|
|
||||||
|
## Suggested Cell Name
|
||||||
|
|
||||||
|
```text
|
||||||
|
F4TTestCell01
|
||||||
|
```
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This cell exists to test:
|
||||||
|
|
||||||
|
- Remote actor spawning
|
||||||
|
- Position synchronization
|
||||||
|
- Rotation synchronization
|
||||||
|
- Movement smoothing
|
||||||
|
- Disconnect cleanup
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
## Main Components
|
||||||
|
|
||||||
|
### F4SE Plugin
|
||||||
|
|
||||||
|
The native plugin is responsible for:
|
||||||
|
|
||||||
|
- Loading into Fallout 4
|
||||||
|
- Reading local player state
|
||||||
|
- Sending local player data to the server
|
||||||
|
- Receiving remote player data
|
||||||
|
- Applying remote player updates safely
|
||||||
|
|
||||||
|
### External Server
|
||||||
|
|
||||||
|
The server is responsible for:
|
||||||
|
|
||||||
|
- Accepting client connections
|
||||||
|
- Assigning player IDs
|
||||||
|
- Receiving player state
|
||||||
|
- Broadcasting player state
|
||||||
|
- Tracking disconnects
|
||||||
|
|
||||||
|
### Creation Kit Plugin
|
||||||
|
|
||||||
|
The Creation Kit side is responsible for:
|
||||||
|
|
||||||
|
- Test cells
|
||||||
|
- Placeholder actors
|
||||||
|
- Optional Papyrus helper scripts
|
||||||
|
- Debug objects
|
||||||
|
- Controlled test environments
|
||||||
|
|
||||||
|
## Threading Model
|
||||||
|
|
||||||
|
Networking should run separately from game update logic.
|
||||||
|
|
||||||
|
Recommended approach:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Networking thread receives packets
|
||||||
|
Networking thread stores remote player state
|
||||||
|
Game update reads remote player state
|
||||||
|
Game update applies actor movement
|
||||||
|
```
|
||||||
|
|
||||||
|
The networking thread should avoid directly modifying Fallout 4 game objects unless the operation is known to be safe.
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# Creation Kit Notes
|
||||||
|
|
||||||
|
The Creation Kit side of Fallout 4 Together should provide controlled test content for multiplayer development.
|
||||||
|
|
||||||
|
## First Creation Kit Goals
|
||||||
|
|
||||||
|
- Create a small test cell
|
||||||
|
- Add player start markers
|
||||||
|
- Add remote player placeholder markers
|
||||||
|
- Add simple lighting
|
||||||
|
- Avoid quests, doors, hostile NPCs, and complex world state
|
||||||
|
|
||||||
|
## Suggested Test Cell
|
||||||
|
|
||||||
|
```text
|
||||||
|
F4TTestCell01
|
||||||
|
```
|
||||||
|
|
||||||
|
## Suggested Test Plugin
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fallout4Together_Test.esp
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test Cell Requirements
|
||||||
|
|
||||||
|
The first test cell should include:
|
||||||
|
|
||||||
|
- Flat ground
|
||||||
|
- Clear lighting
|
||||||
|
- No enemies
|
||||||
|
- No quest dependencies
|
||||||
|
- No doors to other cells
|
||||||
|
- A few visual markers to judge movement
|
||||||
|
- Enough space for movement syncing tests
|
||||||
|
|
||||||
|
## Papyrus Scripts
|
||||||
|
|
||||||
|
Papyrus may eventually be useful for helper systems, but networking should not be handled in Papyrus.
|
||||||
|
|
||||||
|
Possible Papyrus uses:
|
||||||
|
|
||||||
|
- Debug startup quest
|
||||||
|
- Spawning helper actors
|
||||||
|
- Showing messages
|
||||||
|
- Triggering test events
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# F4SE Notes
|
||||||
|
|
||||||
|
F4SE is expected to be the main entry point for the native plugin side of Fallout 4 Together.
|
||||||
|
|
||||||
|
## Plugin Goals
|
||||||
|
|
||||||
|
The first plugin goals are:
|
||||||
|
|
||||||
|
- Confirm the plugin loads
|
||||||
|
- Create a log file
|
||||||
|
- Detect the game version
|
||||||
|
- Read the local player reference
|
||||||
|
- Read the local player position
|
||||||
|
- Send basic data to a local server
|
||||||
|
|
||||||
|
## Expected Plugin Output
|
||||||
|
|
||||||
|
Eventually, the compiled plugin should output something like:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Data/F4SE/Plugins/Fallout4Together.dll
|
||||||
|
```
|
||||||
|
|
||||||
|
## Important Notes
|
||||||
|
|
||||||
|
Do not commit F4SE binaries to this repository.
|
||||||
|
|
||||||
|
Do not commit Fallout 4 executable files or game assets.
|
||||||
|
|
||||||
|
Use a CommonLibF4 template to reduce setup friction.
|
||||||
|
|
||||||
|
## Plugin Safety
|
||||||
|
|
||||||
|
Avoid modifying Fallout 4 game objects directly from a networking thread.
|
||||||
|
|
||||||
|
Recommended flow:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Networking thread receives packets
|
||||||
|
Networking thread stores packet data
|
||||||
|
Main/game update applies safe changes
|
||||||
|
```
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Limitations
|
||||||
|
|
||||||
|
Fallout 4 was designed as a single-player game. Fallout 4 Together is therefore expected to have serious technical limitations, especially during early development.
|
||||||
|
|
||||||
|
## Early Prototype Limitations
|
||||||
|
|
||||||
|
The first prototype will likely require:
|
||||||
|
|
||||||
|
- All players to remain in the same test cell
|
||||||
|
- A clean Fallout 4 test profile
|
||||||
|
- A dedicated test save
|
||||||
|
- No large gameplay mods
|
||||||
|
- No quest synchronization
|
||||||
|
- No settlement synchronization
|
||||||
|
- No VATS synchronization
|
||||||
|
- No dialogue synchronization
|
||||||
|
|
||||||
|
## Systems Not Supported Early
|
||||||
|
|
||||||
|
### Quests
|
||||||
|
|
||||||
|
Quest state is complex and deeply tied to the single-player game world. Quest synchronization is not part of the first prototype.
|
||||||
|
|
||||||
|
### Settlements
|
||||||
|
|
||||||
|
Settlements involve workshop data, placed objects, NPC ownership, resources, attacks, and persistent state. Settlement sync is not part of the first prototype.
|
||||||
|
|
||||||
|
### VATS
|
||||||
|
|
||||||
|
VATS depends on single-player time behavior and targeting logic. VATS should be disabled or ignored during early tests.
|
||||||
|
|
||||||
|
### Saves
|
||||||
|
|
||||||
|
Multiplayer state may desync or damage saves if handled incorrectly. Use a dedicated test save only.
|
||||||
|
|
||||||
|
### Mod Compatibility
|
||||||
|
|
||||||
|
The first prototype should be tested with a clean setup. Compatibility with large modlists is not an early goal.
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# Project Overview
|
||||||
|
|
||||||
|
Fallout 4 Together is a prototype multiplayer framework experiment for Fallout 4.
|
||||||
|
|
||||||
|
The first target is not full co-op. The first target is a controlled test where two clients can connect to a local server and see each other as synced actors in a custom test cell.
|
||||||
|
|
||||||
|
## Core Idea
|
||||||
|
|
||||||
|
Fallout 4 remains the client application. A native F4SE plugin reads local player state and communicates with an external server.
|
||||||
|
|
||||||
|
The server tracks connected players and broadcasts relevant state to other clients.
|
||||||
|
|
||||||
|
A Creation Kit plugin provides test cells, placeholder actors, scripts, and controlled test content.
|
||||||
|
|
||||||
|
## Basic Flow
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fallout 4 Client A
|
||||||
|
|
|
||||||
|
| local player transform
|
||||||
|
v
|
||||||
|
External Server
|
||||||
|
|
|
||||||
|
| remote player transform
|
||||||
|
v
|
||||||
|
Fallout 4 Client B
|
||||||
|
```
|
||||||
|
|
||||||
|
## Early Limitations
|
||||||
|
|
||||||
|
The first prototype should assume:
|
||||||
|
|
||||||
|
- All players are in the same cell
|
||||||
|
- No quest synchronization
|
||||||
|
- No settlement synchronization
|
||||||
|
- No VATS
|
||||||
|
- No dialogue sync
|
||||||
|
- No full inventory sync
|
||||||
|
- No support for large modlists
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Protocol Overview
|
||||||
|
|
||||||
|
The Fallout 4 Together protocol defines the messages sent between Fallout 4 clients and the external server.
|
||||||
|
|
||||||
|
Early versions should stay simple and easy to debug.
|
||||||
|
|
||||||
|
## Early Design
|
||||||
|
|
||||||
|
The first version can use human-readable packets during testing.
|
||||||
|
|
||||||
|
Long-term versions may move to a binary protocol if performance becomes a problem.
|
||||||
|
|
||||||
|
## First Required Messages
|
||||||
|
|
||||||
|
- `welcome`
|
||||||
|
- `transform`
|
||||||
|
- `disconnect`
|
||||||
|
- `ping`
|
||||||
|
- `pong`
|
||||||
|
|
||||||
|
## Main Rule
|
||||||
|
|
||||||
|
The protocol should be testable outside Fallout 4 before it is used inside the F4SE plugin.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Bethesda Engine Notes
|
||||||
|
|
||||||
|
This file is for general research notes about Fallout 4 and the Creation Engine.
|
||||||
|
|
||||||
|
## Topics to Research
|
||||||
|
|
||||||
|
- Actor references
|
||||||
|
- Player reference behavior
|
||||||
|
- Cell loading
|
||||||
|
- Worldspace loading
|
||||||
|
- AI packages
|
||||||
|
- Animation state
|
||||||
|
- Actor values
|
||||||
|
- Save game persistence
|
||||||
|
- Papyrus limitations
|
||||||
|
- F4SE plugin safety
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
Add technical findings here as research develops.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Existing Projects Research
|
||||||
|
|
||||||
|
This file is for notes on existing Bethesda multiplayer projects and experiments.
|
||||||
|
|
||||||
|
## Research Targets
|
||||||
|
|
||||||
|
- Skyrim Together
|
||||||
|
- NV:MP
|
||||||
|
- VaultMP
|
||||||
|
- F4MP attempts
|
||||||
|
- Other Fallout 4 multiplayer experiments
|
||||||
|
|
||||||
|
## Research Questions
|
||||||
|
|
||||||
|
- How did they handle remote player actors?
|
||||||
|
- How did they handle cell changes?
|
||||||
|
- How did they handle quest state?
|
||||||
|
- What systems were impossible or unstable?
|
||||||
|
- What parts are useful references for Fallout 4 Together?
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
Add findings here as research develops.
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Multiplayer Sync Notes
|
||||||
|
|
||||||
|
This file is for notes on synchronizing multiplayer state.
|
||||||
|
|
||||||
|
## Initial Sync Targets
|
||||||
|
|
||||||
|
- Position
|
||||||
|
- Rotation
|
||||||
|
- Cell ID
|
||||||
|
- Worldspace ID
|
||||||
|
- Basic animation state
|
||||||
|
- Disconnect cleanup
|
||||||
|
|
||||||
|
## Later Sync Targets
|
||||||
|
|
||||||
|
- Weapon state
|
||||||
|
- Health
|
||||||
|
- Basic combat events
|
||||||
|
- Cell transitions
|
||||||
|
- Limited world interactions
|
||||||
|
|
||||||
|
## Known Hard Problems
|
||||||
|
|
||||||
|
- Quest state
|
||||||
|
- Settlement state
|
||||||
|
- Dialogue state
|
||||||
|
- Save files
|
||||||
|
- Physics objects
|
||||||
|
- NPC ownership
|
||||||
|
- Time dilation
|
||||||
|
- VATS
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# Development Setup
|
||||||
|
|
||||||
|
## Required Tools
|
||||||
|
|
||||||
|
- Fallout 4 on PC
|
||||||
|
- Fallout 4 Script Extender, F4SE
|
||||||
|
- Fallout 4 Creation Kit
|
||||||
|
- Visual Studio 2022 or newer
|
||||||
|
- Git
|
||||||
|
- CMake or another build system required by the selected plugin template
|
||||||
|
- Mod Organizer 2 or Vortex
|
||||||
|
|
||||||
|
## Recommended Fallout 4 Setup
|
||||||
|
|
||||||
|
Use a clean test profile.
|
||||||
|
|
||||||
|
Recommended:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fallout 4
|
||||||
|
F4SE
|
||||||
|
Fallout 4 Together test plugin
|
||||||
|
No other gameplay mods
|
||||||
|
Dedicated test save
|
||||||
|
```
|
||||||
|
|
||||||
|
Avoid testing with a full modlist while developing the core systems.
|
||||||
|
|
||||||
|
## Version Tracking
|
||||||
|
|
||||||
|
Record the exact versions used:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fallout 4 version:
|
||||||
|
F4SE version:
|
||||||
|
Creation Kit version:
|
||||||
|
CommonLibF4 template:
|
||||||
|
Windows version:
|
||||||
|
Compiler version:
|
||||||
|
```
|
||||||
|
|
||||||
|
## Folder Notes
|
||||||
|
|
||||||
|
Do not copy Fallout 4 game files into this repository.
|
||||||
|
|
||||||
|
Do not copy F4SE binaries into this repository.
|
||||||
|
|
||||||
|
Use the `plugin/external/README.md` file to document where external dependencies should be installed.
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Native Plugin
|
||||||
|
|
||||||
|
This folder is for the native Fallout 4 Together plugin.
|
||||||
|
|
||||||
|
The plugin is expected to be built using F4SE and CommonLibF4.
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
The plugin should eventually:
|
||||||
|
|
||||||
|
- Load through F4SE
|
||||||
|
- Create log output
|
||||||
|
- Detect the local player
|
||||||
|
- Read player transform data
|
||||||
|
- Connect to the external server
|
||||||
|
- Send local player state
|
||||||
|
- Receive remote player state
|
||||||
|
- Apply remote actor updates
|
||||||
|
|
||||||
|
## External Dependencies
|
||||||
|
|
||||||
|
Do not commit F4SE or CommonLibF4 binaries directly into this repository.
|
||||||
|
|
||||||
|
Document dependency setup in:
|
||||||
|
|
||||||
|
```text
|
||||||
|
plugin/external/README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build Output
|
||||||
|
|
||||||
|
Compiled plugin files should not be committed unless part of an official release.
|
||||||
|
|
||||||
|
Expected output eventually:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Data/F4SE/Plugins/Fallout4Together.dll
|
||||||
|
```
|
||||||
Vendored
+29
@@ -0,0 +1,29 @@
|
|||||||
|
# External Plugin Dependencies
|
||||||
|
|
||||||
|
This folder documents external dependencies.
|
||||||
|
|
||||||
|
Do not commit downloaded dependency binaries here unless their license allows it and the project intentionally vendors them.
|
||||||
|
|
||||||
|
Expected dependencies:
|
||||||
|
|
||||||
|
- Fallout 4 Script Extender, F4SE
|
||||||
|
- CommonLibF4 or CommonLibF4 NG
|
||||||
|
- CMake or XMake, depending on the selected template
|
||||||
|
- Visual Studio C++ toolchain
|
||||||
|
|
||||||
|
## F4SE
|
||||||
|
|
||||||
|
Install F4SE into the Fallout 4 game folder according to the official instructions.
|
||||||
|
|
||||||
|
## CommonLibF4
|
||||||
|
|
||||||
|
Use a CommonLibF4 template as the starting point for the native plugin project.
|
||||||
|
|
||||||
|
Record the selected template here:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Selected template:
|
||||||
|
Template URL:
|
||||||
|
Commit/tag used:
|
||||||
|
Date added:
|
||||||
|
```
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Include
|
||||||
|
|
||||||
|
This folder is for shared native plugin header files.
|
||||||
|
|
||||||
|
Possible future headers:
|
||||||
|
|
||||||
|
- protocol types
|
||||||
|
- player state types
|
||||||
|
- network client declarations
|
||||||
|
- logging declarations
|
||||||
|
- configuration types
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Source
|
||||||
|
|
||||||
|
This folder is for Fallout 4 Together native plugin source files.
|
||||||
|
|
||||||
|
Initial planned source areas:
|
||||||
|
|
||||||
|
- Plugin entry point
|
||||||
|
- Logging
|
||||||
|
- F4SE/CommonLibF4 integration
|
||||||
|
- Player state reading
|
||||||
|
- Networking client
|
||||||
|
- Remote player state storage
|
||||||
|
- Safe game update application
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Screenshots
|
||||||
|
|
||||||
|
This folder is for development screenshots.
|
||||||
|
|
||||||
|
Useful screenshots may include:
|
||||||
|
|
||||||
|
- Test cell layout
|
||||||
|
- Debug UI
|
||||||
|
- Remote player sync tests
|
||||||
|
- Server console output
|
||||||
|
- Plugin log output
|
||||||
|
|
||||||
|
Avoid uploading screenshots that show private account information or unrelated personal files.
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Server
|
||||||
|
|
||||||
|
This folder is for the external multiplayer test server.
|
||||||
|
|
||||||
|
The server is responsible for managing connected clients and broadcasting player state.
|
||||||
|
|
||||||
|
## First Server Goals
|
||||||
|
|
||||||
|
- Start local server
|
||||||
|
- Accept client connections
|
||||||
|
- Assign player IDs
|
||||||
|
- Receive transform packets
|
||||||
|
- Broadcast transform packets
|
||||||
|
- Handle disconnects
|
||||||
|
|
||||||
|
## Not Planned Yet
|
||||||
|
|
||||||
|
- Authentication
|
||||||
|
- Public matchmaking
|
||||||
|
- Anti-cheat
|
||||||
|
- Persistence
|
||||||
|
- Quest state
|
||||||
|
- Settlement state
|
||||||
|
- Large-scale world simulation
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Server Config
|
||||||
|
|
||||||
|
This folder is for server configuration templates.
|
||||||
|
|
||||||
|
Possible future config values:
|
||||||
|
|
||||||
|
```text
|
||||||
|
host=127.0.0.1
|
||||||
|
port=7777
|
||||||
|
max_players=2
|
||||||
|
tick_rate=20
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not commit private IPs, tokens, or secrets.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Server Source
|
||||||
|
|
||||||
|
This folder is for external server source code.
|
||||||
|
|
||||||
|
The first server only needs to:
|
||||||
|
|
||||||
|
- Start locally
|
||||||
|
- Accept clients
|
||||||
|
- Assign player IDs
|
||||||
|
- Receive transform packets
|
||||||
|
- Broadcast packets
|
||||||
|
- Handle disconnects
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Test Data
|
||||||
|
|
||||||
|
This folder is for safe test data used during development.
|
||||||
|
|
||||||
|
Allowed test data:
|
||||||
|
|
||||||
|
- Example packet files
|
||||||
|
- Fake player data
|
||||||
|
- Debug logs with no personal information
|
||||||
|
- Small manually written test cases
|
||||||
|
|
||||||
|
Do not include:
|
||||||
|
|
||||||
|
- Fallout 4 save files
|
||||||
|
- Game assets
|
||||||
|
- Bethesda archives
|
||||||
|
- Personal account data
|
||||||
|
- Private server information
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Sample Packets
|
||||||
|
|
||||||
|
This folder is for example packet data used during protocol testing.
|
||||||
|
|
||||||
|
Possible files later:
|
||||||
|
|
||||||
|
```text
|
||||||
|
welcome.json
|
||||||
|
transform.json
|
||||||
|
disconnect.json
|
||||||
|
animation_state.json
|
||||||
|
```
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Tools
|
||||||
|
|
||||||
|
This folder is for helper tools and development scripts.
|
||||||
|
|
||||||
|
Possible future tools:
|
||||||
|
|
||||||
|
- Build scripts
|
||||||
|
- Packaging scripts
|
||||||
|
- Log parsers
|
||||||
|
- Packet replay tools
|
||||||
|
- Test client scripts
|
||||||
|
- Development environment helpers
|
||||||
|
|
||||||
|
Do not place Fallout 4 game files or proprietary tools in this folder.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Scripts
|
||||||
|
|
||||||
|
This folder is for small helper scripts.
|
||||||
|
|
||||||
|
Possible future scripts:
|
||||||
|
|
||||||
|
- Create folder structure
|
||||||
|
- Package test release
|
||||||
|
- Clean build outputs
|
||||||
|
- Validate protocol examples
|
||||||
|
- Parse plugin logs
|
||||||
Reference in New Issue
Block a user