Rename project to Commonwealth Online
Replace occurrences of "Fallout 4 Together" with "Commonwealth Online" across docs and testing guidance. Add Interface assets and tooling: MainMenu/Pipboy SWFs, translation/fonts, exported scripts (Interface/exported/scripts/MainMenu.as) and a PATCH_MainMenu_Multiplayer.md describing how to add a Multiplayer menu entry that calls root.f4se.plugins.commonwealthOnline.openManager(). Also add build/run batch scripts and apply assorted updates to README, plugin, server and protocol documentation/source to align with the rename and UI changes.
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
---
|
||||
description: Fallout 4 Together project architecture and goals
|
||||
description: Commonwealth Online project architecture and goals
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Project Overview
|
||||
|
||||
Fallout 4 Together is an experimental Fallout 4 multiplayer mod. It uses a C++ F4SE plugin, a Python relay server, fake clients for protocol testing, and project documentation in `docs/`.
|
||||
Commonwealth Online is an experimental Fallout 4 multiplayer mod. It uses a C++ F4SE plugin, a Python relay server, fake clients for protocol testing, and project documentation in `docs/`.
|
||||
|
||||
The goal is to sync players across separate Fallout 4 instances by sending player transform and state data through a server, then representing remote players in-game with proxy actors.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: Practical manual testing guidance for Fallout 4 Together changes
|
||||
description: Practical manual testing guidance for Commonwealth Online changes
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
@@ -12,7 +12,7 @@ Useful project tests include:
|
||||
- Connecting one Fallout 4 instance.
|
||||
- Connecting two Fallout 4 instances.
|
||||
- Running `server/fake_client.py`.
|
||||
- Checking `Fallout4Together.log`.
|
||||
- Checking `CommonwealthOnline.log`.
|
||||
- Verifying transform packets are sent.
|
||||
- Verifying remote player state is received.
|
||||
- Verifying proxy actor movement in `F4TTestCell01`.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Contributing
|
||||
|
||||
Fallout 4 Together is currently in the research and prototype stage.
|
||||
Commonwealth Online 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.
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Disclaimer
|
||||
|
||||
Fallout 4 Together is an unofficial fan research project.
|
||||
Commonwealth Online 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.
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,110 @@
|
||||
# MainMenu.swf — Multiplayer button patch guide
|
||||
|
||||
Reference export: [`scripts/MainMenu.as`](scripts/MainMenu.as)
|
||||
Edit the script **inside FFDec** on the SWF (or paste changes back into FFDec after editing the export). Saving only the `.as` file does not update `MainMenu.swf`.
|
||||
|
||||
## Why texts/sprites only showed CONTINUE
|
||||
|
||||
The main menu is a **dynamic list** (`MainPanel_mc.List_mc`). Items like `$NEW`, `$LOAD`, `$SETTINGS` are pushed in **`InitList()`**, not stored as static text tags.
|
||||
|
||||
## Three edits in `MainMenu` class
|
||||
|
||||
### 1. Add index constant (~line 214)
|
||||
|
||||
After `INSTALLED_CONTENT_INDEX`:
|
||||
|
||||
```actionscript
|
||||
private const MULTIPLAYER_INDEX:Number = 15;
|
||||
```
|
||||
|
||||
Index `15` is unused in vanilla (highest defined is `INSTALLED_CONTENT_INDEX = 14`).
|
||||
|
||||
### 2. Add list entry in `InitList()` (~line 589)
|
||||
|
||||
Insert **after** the `$LOAD` push and **before** the PS5 transfer / DLC block — only on the title screen (`!PauseMode`):
|
||||
|
||||
```actionscript
|
||||
this.MainPanel_mc.List_mc.entryList.push({
|
||||
"text":"$LOAD",
|
||||
"disabled":!this.HasRecentSave || !param6,
|
||||
"index":this.LOAD_INDEX
|
||||
});
|
||||
// --- ADD BELOW ---
|
||||
if(!this.PauseMode)
|
||||
{
|
||||
this.MainPanel_mc.List_mc.entryList.push({
|
||||
"text":"Multiplayer",
|
||||
"index":this.MULTIPLAYER_INDEX
|
||||
});
|
||||
}
|
||||
// --- ADD ABOVE ---
|
||||
if(param8 == true)
|
||||
```
|
||||
|
||||
Using literal `"MULTIPLAYER"` avoids needing a `.strings` entry for the PoC. Later switch to `"$COSYNC_MULTIPLAYER"` + `Interface/Translate_en.txt` if you want localization.
|
||||
|
||||
**Label text:** For the PoC use a **literal** label (no `$` prefix):
|
||||
|
||||
```actionscript
|
||||
"text":"Multiplayer",
|
||||
```
|
||||
|
||||
Strings starting with `$` are looked up in `Interface/Translate_en.txt` (from `Fallout4 - Interface.ba2`). A lone `Interface/Translations/MainMenu_en.txt` is **not** how vanilla resolves main-menu keys, so `$MULTIPLAYER` shows as-is until you merge the key into `Translate_en.txt` (extract from BA2, append `$MULTIPLAYER Multiplayer`, redeploy loose file).
|
||||
|
||||
Regenerate optional translation stub: `python tools/write_mainmenu_translation.py` (for future i18n / Translate_en merge only).
|
||||
|
||||
### Fallout 4 must load loose Interface files
|
||||
|
||||
Loose `Data/Interface/*.swf` overrides are **ignored** unless archive invalidation is on. Add to `%USERPROFILE%/Documents/My Games/Fallout4/Fallout4Custom.ini`:
|
||||
|
||||
```ini
|
||||
[Archive]
|
||||
bInvalidateOlderFiles=1
|
||||
```
|
||||
|
||||
(MO2 enables this automatically; manual `Data/` copies need it.)
|
||||
|
||||
Without invalidation, the game keeps using `Fallout4 - Interface.ba2` — your patched SWF never loads even though the file is on disk.
|
||||
|
||||
Suggested placement: between **Load** and **Add-ons** so it reads naturally on the main menu.
|
||||
|
||||
### 3. Handle selection in `onMainListItemPress()` switch (~line 864)
|
||||
|
||||
Add **before** `case this.HELP_INDEX:` (or anywhere in the switch):
|
||||
|
||||
```actionscript
|
||||
case this.MULTIPLAYER_INDEX:
|
||||
this.BGSCodeObj.PlayOKSound();
|
||||
if(root.f4se != null && root.f4se.plugins != null && root.f4se.plugins.commonwealthOnline != null)
|
||||
{
|
||||
root.f4se.plugins.commonwealthOnline.openManager();
|
||||
}
|
||||
break;
|
||||
```
|
||||
|
||||
Requires the C++ plugin to register `commonwealthOnline.openManager()` via F4SE Scaleform (not done yet). Until then, the button will play the OK sound and do nothing else — safe for SWF-only testing.
|
||||
|
||||
## FFDec workflow
|
||||
|
||||
1. Open `Interface/MainMenu.swf` in FFDec.
|
||||
2. **scripts → MainMenu** → right-click → **Replace / Edit** (or open script, paste from [`scripts/MainMenu.as`](scripts/MainMenu.as)).
|
||||
3. **File → Save** (overwrites SWF).
|
||||
4. Deploy to `Fallout 4/Data/Interface/MainMenu.swf` or your mod folder.
|
||||
5. Launch via F4SE and test.
|
||||
|
||||
**Re-import from edited export:** In FFDec, select the **MainMenu** script under **scripts**, use **Edit ActionScript** and paste the full contents of `Interface/exported/scripts/MainMenu.as`, then save the SWF. FFDec may also offer **Import script** / **Replace script** from file depending on version.
|
||||
|
||||
Keep `MainMenu.swf.vanilla.bak` unchanged.
|
||||
|
||||
## Related functions (no edit needed for PoC)
|
||||
|
||||
| Function | Role |
|
||||
|----------|------|
|
||||
| `InitList()` | Builds `entryList` with `$CONTINUE`, `$NEW`, `$LOAD`, … |
|
||||
| `onMainListItemPress()` | `switch` on `selectedEntry.index` |
|
||||
| `onListItemPress()` | Routes list press events to `onMainListItemPress()` |
|
||||
| Index constants (~184–212) | `CONTINUE_INDEX` … `INSTALLED_CONTENT_INDEX` |
|
||||
|
||||
## Next step (code)
|
||||
|
||||
Implement `commonwealthOnline.openManager()` in `CommonwealthOnline.dll` and `CoSyncServerBrowser.swf` per [docs/custom-swf-ui.md](../../docs/custom-swf-ui.md).
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
# Fallout 4 Together
|
||||
# Commonwealth Online
|
||||
|
||||
Fallout 4 Together is an experimental research project exploring the possibility of adding basic multiplayer-style networking to Fallout 4.
|
||||
Commonwealth Online 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:
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions
|
||||
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
set "PLUGIN_DIR=%SCRIPT_DIR%plugin"
|
||||
|
||||
cd /d "%PLUGIN_DIR%"
|
||||
if errorlevel 1 (
|
||||
echo Failed to change to plugin directory:
|
||||
echo "%PLUGIN_DIR%"
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
where xmake >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo xmake was not found on PATH.
|
||||
echo Install XMake and add it to PATH: https://xmake.io
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Configuring Commonwealth Online plugin...
|
||||
xmake
|
||||
if errorlevel 1 (
|
||||
echo xmake configuration failed.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Building Commonwealth Online plugin...
|
||||
xmake build
|
||||
if errorlevel 1 (
|
||||
echo Build failed.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo Build succeeded.
|
||||
echo Look for CommonwealthOnline.dll in the plugin build output folder.
|
||||
endlocal
|
||||
exit /b 0
|
||||
@@ -1,6 +1,6 @@
|
||||
# Creation Kit Files
|
||||
|
||||
This folder is for Creation Kit-side work for Fallout 4 Together.
|
||||
This folder is for Creation Kit-side work for Commonwealth Online.
|
||||
|
||||
The Creation Kit plugin should provide controlled test content for multiplayer experiments.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# ESP Files
|
||||
|
||||
This folder is for original Fallout 4 Together Creation Kit plugin files.
|
||||
This folder is for original Commonwealth Online Creation Kit plugin files.
|
||||
|
||||
Possible early plugin file:
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Papyrus Source Scripts
|
||||
|
||||
This folder is for original Papyrus source scripts created for Fallout 4 Together.
|
||||
This folder is for original Papyrus source scripts created for Commonwealth Online.
|
||||
|
||||
Possible uses:
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
## Overview
|
||||
|
||||
Successfully aligned Fallout 4 Together with TiltedEvolution's proven multiplayer animation synchronization architecture. Implemented complete stack from network protocol through animation descriptor system to action replay infrastructure.
|
||||
Successfully aligned Commonwealth Online with TiltedEvolution's proven multiplayer animation synchronization architecture. Implemented complete stack from network protocol through animation descriptor system to action replay infrastructure.
|
||||
|
||||
**Key Achievement:** Proxy actors can now theoretically display working animations by:
|
||||
1. Dynamically spawning proxies
|
||||
@@ -376,7 +376,7 @@ Ready for in-game validation
|
||||
|
||||
## Conclusion
|
||||
|
||||
Phases 1-5 successfully implement a complete, TiltedEvolution-aligned animation synchronization architecture for Fallout 4 Together. All foundational systems are in place:
|
||||
Phases 1-5 successfully implement a complete, TiltedEvolution-aligned animation synchronization architecture for Commonwealth Online. All foundational systems are in place:
|
||||
|
||||
- ✅ Descriptor-based efficient variable sync
|
||||
- ✅ Dynamic proxy spawning with reuse
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Executive Summary
|
||||
|
||||
This document maps TiltedEvolution's proven multiplayer animation and state synchronization architecture onto Fallout 4 Together's codebase. It identifies which concepts are applicable to FO4, what needs adaptation, and FO4-specific constraints.
|
||||
This document maps TiltedEvolution's proven multiplayer animation and state synchronization architecture onto Commonwealth Online's codebase. It identifies which concepts are applicable to FO4, what needs adaptation, and FO4-specific constraints.
|
||||
|
||||
**Key Finding:** TiltedEvolution's architecture is fundamentally compatible with FO4, but FO4 has stricter constraints around AI, velocity, and action replay mechanics.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Animation Sync Analysis: Fallout 4 Together vs TiltedEvolution
|
||||
# Animation Sync Analysis: Commonwealth Online vs TiltedEvolution
|
||||
|
||||
> **Resolution update (2026-06-05):** The "variable names may be wrong" hypothesis below is
|
||||
> now confirmed and fixed. The real FO4 humanoid graph variable names + types were extracted
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
## Problem Statement
|
||||
|
||||
Your Fallout 4 Together animations aren't working on proxy actors. You have animation sync code in `F4TProxyAnimationSync.cpp` attempting to set graph variables by name (`Speed`, `IsSprinting`, etc.), but the variables aren't being applied or synced correctly.
|
||||
Your Commonwealth Online animations aren't working on proxy actors. You have animation sync code in `F4TProxyAnimationSync.cpp` attempting to set graph variables by name (`Speed`, `IsSprinting`, etc.), but the variables aren't being applied or synced correctly.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Creation Kit Notes
|
||||
|
||||
The Creation Kit side of Fallout 4 Together should provide controlled test content for multiplayer development.
|
||||
The Creation Kit side of Commonwealth Online should provide controlled test content for multiplayer development.
|
||||
|
||||
## First Creation Kit Goals
|
||||
|
||||
|
||||
+51
-52
@@ -1,6 +1,6 @@
|
||||
# Development Log
|
||||
|
||||
This file tracks development progress for Fallout 4 Together.
|
||||
This file tracks development progress for Commonwealth Online.
|
||||
|
||||
Use this log to record setup decisions, tool versions, technical discoveries,
|
||||
failed experiments, successful tests, and next steps.
|
||||
@@ -99,7 +99,7 @@ proxies only showed walk/run (no slow-walk/jog), and ground jumps never exited t
|
||||
|
||||
### Summary
|
||||
After grounding the graph variable names (see entry below), an in-game log
|
||||
(`Fallout4Together.log`) showed locomotion variables were now correct
|
||||
(`CommonwealthOnline.log`) showed locomotion variables were now correct
|
||||
(`graphSpeedReadBack=true(373.0)` while running), but proxies still never showed walk/run
|
||||
animation. Root cause: the local player was reporting `isJumping=true` almost continuously
|
||||
while merely running, so proxies were perpetually forced into the jump state, which masks
|
||||
@@ -191,7 +191,7 @@ types extracted from the real humanoid movement behavior graph
|
||||
`MTBehavior`, and needs its own research pass.
|
||||
|
||||
### Next Steps
|
||||
- Verify in-game and capture a fresh `Fallout4Together.log` diagnostic.
|
||||
- Verify in-game and capture a fresh `CommonwealthOnline.log` diagnostic.
|
||||
- Cross-check the transition event names against the behavior graph `eventNames` arrays.
|
||||
- If sneak works, investigate the weapon wrapping behavior for the weapon-drawn variable.
|
||||
|
||||
@@ -241,7 +241,7 @@ types extracted from the real humanoid movement behavior graph
|
||||
|
||||
✅ **Build: SUCCESS** - No warnings
|
||||
✅ **Jump animation**: Now transitions properly when landing
|
||||
✅ **Plugin compiled**: `Fallout4Together.dll`
|
||||
✅ **Plugin compiled**: `CommonwealthOnline.dll`
|
||||
|
||||
### How Jump Works Now
|
||||
|
||||
@@ -356,7 +356,7 @@ Build: SUCCESS
|
||||
### Build Status
|
||||
|
||||
✅ **Build: SUCCESS** - No new errors
|
||||
✅ **Plugin compiled**: `Fallout4Together.dll`
|
||||
✅ **Plugin compiled**: `CommonwealthOnline.dll`
|
||||
✅ **Crouch detection**: Working in real player
|
||||
✅ **Crouch animation events**: Now firing via animation graph transitions
|
||||
|
||||
@@ -461,7 +461,7 @@ Build: SUCCESS
|
||||
|
||||
### What Changed
|
||||
|
||||
- Created the Fallout 4 Together repository.
|
||||
- Created the Commonwealth Online repository.
|
||||
- Added the initial repository folder structure.
|
||||
- Added starter Markdown documentation files.
|
||||
- Added project roadmap, disclaimer, setup notes, protocol notes, and plugin planning documents.
|
||||
@@ -480,13 +480,13 @@ The immediate priority is to make sure the project has:
|
||||
|
||||
### Decisions Made
|
||||
|
||||
- Project name: Fallout 4 Together
|
||||
- Project name: Commonwealth Online
|
||||
- Internal prefix: F4T
|
||||
- Primary target platform: Steam Fallout 4
|
||||
- First prototype goal: two clients in a controlled test cell, with each player visible as a synced remote actor
|
||||
- Early test cell name: F4TTestCell01
|
||||
- Early test ESP name: Fallout4Together_Test.esp
|
||||
- Early plugin DLL name: Fallout4Together.dll
|
||||
- Early plugin DLL name: CommonwealthOnline.dll
|
||||
|
||||
### Current Status
|
||||
|
||||
@@ -517,7 +517,7 @@ No Creation Kit test cell yet
|
||||
|
||||
### What Changed
|
||||
|
||||
- Built the initial Fallout 4 Together DLL.
|
||||
- Built the initial Commonwealth Online DLL.
|
||||
- Installed the DLL into `Data/F4SE/Plugins/`.
|
||||
- Launched Fallout 4 through F4SE.
|
||||
|
||||
@@ -534,15 +534,15 @@ No Creation Kit test cell yet
|
||||
### Notes
|
||||
|
||||
- The current log file is named `commonlibf4-template.log`.
|
||||
- The next step is to rename the plugin identity and log output to `Fallout4Together`.
|
||||
- The next step is to rename the plugin identity and log output to `CommonwealthOnline`.
|
||||
|
||||
### Next Steps
|
||||
|
||||
- Replace template name references with `Fallout4Together`.
|
||||
- Replace `Hello World!` with a Fallout 4 Together startup message.
|
||||
- Replace template name references with `CommonwealthOnline`.
|
||||
- Replace `Hello World!` with a Commonwealth Online startup message.
|
||||
- Rebuild the DLL.
|
||||
- Launch through F4SE again.
|
||||
- Confirm `Fallout4Together.log` is created.
|
||||
- Confirm `CommonwealthOnline.log` is created.
|
||||
|
||||
---
|
||||
|
||||
@@ -550,13 +550,13 @@ No Creation Kit test cell yet
|
||||
|
||||
### What Changed
|
||||
|
||||
- Renamed the plugin/log identity from the CommonLibF4 template to Fallout4Together.
|
||||
- Rebuilt and installed `Fallout4Together.dll`.
|
||||
- Renamed the plugin/log identity from the CommonLibF4 template to CommonwealthOnline.
|
||||
- Rebuilt and installed `CommonwealthOnline.dll`.
|
||||
- Launched Fallout 4 through F4SE.
|
||||
|
||||
### What Worked
|
||||
|
||||
- `Fallout4Together.log` was created.
|
||||
- `CommonwealthOnline.log` was created.
|
||||
- The plugin loaded successfully.
|
||||
- The plugin startup code executed.
|
||||
|
||||
@@ -567,13 +567,13 @@ No Creation Kit test cell yet
|
||||
### Notes
|
||||
|
||||
- The log still contains the template message `Hello World!`.
|
||||
- Next step is to replace this message with a Fallout 4 Together startup message.
|
||||
- Next step is to replace this message with a Commonwealth Online startup message.
|
||||
|
||||
### Next Steps
|
||||
|
||||
- Replace `Hello World!` with a proper plugin startup log message.
|
||||
- Rebuild and reinstall the DLL.
|
||||
- Confirm the updated message appears in `Fallout4Together.log`.
|
||||
- Confirm the updated message appears in `CommonwealthOnline.log`.
|
||||
- Begin testing local player position readout.
|
||||
|
||||
---
|
||||
@@ -582,15 +582,15 @@ No Creation Kit test cell yet
|
||||
|
||||
### What Changed
|
||||
|
||||
- Updated the Fallout 4 Together plugin startup message.
|
||||
- Updated the Commonwealth Online plugin startup message.
|
||||
- Added local player position readout.
|
||||
- Logged the player's X, Y, Z position and Z rotation angle.
|
||||
|
||||
### What Worked
|
||||
|
||||
- `Fallout4Together.dll` built successfully.
|
||||
- `CommonwealthOnline.dll` built successfully.
|
||||
- Fallout 4 launched through F4SE.
|
||||
- `Fallout4Together.log` was created.
|
||||
- `CommonwealthOnline.log` was created.
|
||||
- The plugin loaded successfully.
|
||||
- The plugin safely read and logged the local player position.
|
||||
|
||||
@@ -614,12 +614,12 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
|
||||
- Updated player position logging so it only writes when the player position changes.
|
||||
- Added throttling so movement updates do not flood the log.
|
||||
- Rebuilt and tested `Fallout4Together.dll`.
|
||||
- Rebuilt and tested `CommonwealthOnline.dll`.
|
||||
|
||||
### What Worked
|
||||
|
||||
- Fallout 4 launched through F4SE.
|
||||
- `Fallout4Together.log` was created.
|
||||
- `CommonwealthOnline.log` was created.
|
||||
- The plugin logged the player position while moving.
|
||||
- Position logging now updates at a readable pace instead of many times per second.
|
||||
|
||||
@@ -645,7 +645,7 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
### What Changed
|
||||
|
||||
- Added a local Python test server.
|
||||
- Added basic networking from the Fallout 4 Together plugin to the local server.
|
||||
- Added basic networking from the Commonwealth Online plugin to the local server.
|
||||
- Sent player transform data from Fallout 4 to the server.
|
||||
- Server now prints received transform packets.
|
||||
|
||||
@@ -763,7 +763,7 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
|
||||
- Tested the full server broadcast flow.
|
||||
- Connected a fake Python client to the local server.
|
||||
- Connected the Fallout 4 Together plugin as a second client.
|
||||
- Connected the Commonwealth Online plugin as a second client.
|
||||
- Confirmed that transform packets from the Fallout 4 plugin are broadcast to the fake client.
|
||||
|
||||
### What Worked
|
||||
@@ -956,7 +956,7 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
### Notes
|
||||
|
||||
- The receive loop runs on a background networking thread.
|
||||
- Remote transform logging is throttled so `Fallout4Together.log` remains readable.
|
||||
- Remote transform logging is throttled so `CommonwealthOnline.log` remains readable.
|
||||
- Actor spawning, actor movement, animation sync, combat sync, inventory sync, quest sync, and settlement sync remain planned later.
|
||||
|
||||
### Next Steps
|
||||
@@ -972,7 +972,7 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
|
||||
- Added a shared local-player log prefix helper for plugin networking logs.
|
||||
- Prefixed important startup, connection, welcome, transform send, remote update, disconnect, and networking warning logs with `[LocalPlayerId=unassigned]` or `[LocalPlayerId=N]`.
|
||||
- Kept the existing `Fallout4Together.log` file name and avoided per-instance log files for this milestone.
|
||||
- Kept the existing `CommonwealthOnline.log` file name and avoided per-instance log files for this milestone.
|
||||
|
||||
### What Worked
|
||||
|
||||
@@ -1018,7 +1018,7 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
|
||||
### Notes
|
||||
|
||||
- This is the first successful visible actor-control test for Fallout 4 Together.
|
||||
- This is the first successful visible actor-control test for Commonwealth Online.
|
||||
- The proxy is still driven by local player position plus offset, not remote player state.
|
||||
- Dynamic spawning is still not implemented.
|
||||
- Remote actor syncing has not started yet.
|
||||
@@ -1150,8 +1150,7 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
|
||||
- `server/server.py` and `server/fake_client.py` were intentionally left
|
||||
unchanged because the transform packet protocol did not need to change.
|
||||
- This is the first smooth visible multiplayer prototype for Fallout 4
|
||||
Together.
|
||||
- This is the first smooth visible multiplayer prototype for Commonwealth Online.
|
||||
- The proxy actor still lacks synced animations.
|
||||
- Only one proxy actor is supported.
|
||||
- Dynamic spawning is not implemented.
|
||||
@@ -1283,7 +1282,7 @@ Player position: X=2048.00, Y=2048.00, Z=0.00, AngleZ=0.00
|
||||
### Next Steps
|
||||
|
||||
- Test crouch/sneak in-game and compare `apiSneaking`, `actorStateSneaking`,
|
||||
`actorStateForceSneak`, and `finalIsSneaking` in `Fallout4Together.log`.
|
||||
`actorStateForceSneak`, and `finalIsSneaking` in `CommonwealthOnline.log`.
|
||||
|
||||
---
|
||||
|
||||
@@ -1665,7 +1664,7 @@ plugin-local form ID on the existing game-thread proxy controller path.
|
||||
- Ran `xmake build` from `plugin`; it succeeded.
|
||||
- Pending: launch Fallout 4 through F4SE, load `Fallout4Together_Test.esp`, and
|
||||
`coc F4TTestCell01`.
|
||||
- Pending: confirm `Fallout4Together.log` reports the test ESP load status and
|
||||
- Pending: confirm `CommonwealthOnline.log` reports the test ESP load status and
|
||||
`F4T_RemotePlayerProxy` lookup result.
|
||||
- Pending: confirm the existing placed proxy fallback still represents one fake
|
||||
client and still holds/restores correctly.
|
||||
@@ -1729,7 +1728,7 @@ remote player representation.
|
||||
- Ran `xmake build` from `plugin`; it succeeded.
|
||||
- Pending: launch Fallout 4 through F4SE, load `Fallout4Together_Test.esp`, and
|
||||
`coc F4TTestCell01`.
|
||||
- Pending: confirm `Fallout4Together.log` shows actor-base resolution, one
|
||||
- Pending: confirm `CommonwealthOnline.log` shows actor-base resolution, one
|
||||
runtime spawn attempt, and either spawn success details or a clear failure
|
||||
reason.
|
||||
- Pending: confirm the new runtime proxy actor appears near the player if spawn
|
||||
@@ -1995,7 +1994,7 @@ handle-validation, near-player hold, and repeated visibility diagnostic path.
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded.
|
||||
- Pending: launch Fallout 4 through F4SE, enter `F4TTestCell01`, and confirm
|
||||
`Fallout4Together.log` reports whether the Stage 3.3 vanilla diagnostic is
|
||||
`CommonwealthOnline.log` reports whether the Stage 3.3 vanilla diagnostic is
|
||||
active or fell back to `F4T_RemotePlayerProxy`.
|
||||
- Pending: inspect the hold diagnostics and final PASS/PARTIAL/FAIL result to
|
||||
determine whether the vanilla actor base appears visually through the same
|
||||
@@ -2065,7 +2064,7 @@ separate visibility control.
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded.
|
||||
- Pending: launch Fallout 4 through F4SE, enter `F4TTestCell01`, and confirm
|
||||
`Fallout4Together.log` shows absolute lookup diagnostics for `000179FF` and
|
||||
`CommonwealthOnline.log` shows absolute lookup diagnostics for `000179FF` and
|
||||
`0001CA7D`.
|
||||
- Pending: confirm that a resolved Codsworth base is used for the vanilla
|
||||
runtime-spawn diagnostic, or that the custom proxy fallback is logged clearly.
|
||||
@@ -2137,7 +2136,7 @@ runtime spawn path.
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded.
|
||||
- Pending: launch Fallout 4 through F4SE, enter `F4TTestCell01`, and confirm
|
||||
`Fallout4Together.log` shows the Stage 3.5 console command execution.
|
||||
`CommonwealthOnline.log` shows the Stage 3.5 console command execution.
|
||||
- Pending: confirm the diagnostic resolves a spawned Codsworth actor near the
|
||||
local player and reports a Stage 3.5 PASS/PARTIAL/FAIL conclusion.
|
||||
|
||||
@@ -2396,7 +2395,7 @@ proxy cap forever.
|
||||
- `xmake build` from the repository root prompts because there is no root
|
||||
`xmake.lua`.
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: launch Fallout 4 through F4SE, load
|
||||
`Fallout4Together_Test.esp`, `coc F4TTestCell01`, start the Dev Server GUI,
|
||||
add fake clients up to the cap, disconnect clients, wait for the reuse delay,
|
||||
@@ -2454,7 +2453,7 @@ client connected.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: start server, add fake client, connect Fallout 4,
|
||||
and confirm runtime proxy spawn/settle no longer crashes.
|
||||
- Pending manual validation: re-test multiple clients, movement, held/reusable
|
||||
@@ -2511,7 +2510,7 @@ driven by `RemotePlayerState`.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: attack a runtime proxy and confirm walk-away
|
||||
animation intent is gone or reduced.
|
||||
- Pending manual validation: bump a runtime proxy and confirm no persistent
|
||||
@@ -2573,7 +2572,7 @@ of entering persistent NPC combat or pursuit behavior.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: attack a runtime proxy and confirm it does not chase
|
||||
or attack the local player.
|
||||
- Pending manual validation: bump a runtime proxy and confirm no persistent AI
|
||||
@@ -2633,7 +2632,7 @@ positioning path.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: repeat the GUI fake-client disconnect test that
|
||||
previously caused held proxies to visually reappear.
|
||||
|
||||
@@ -2685,7 +2684,7 @@ starting near the local player before snapping away.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: add a GUI fake client and confirm its proxy no
|
||||
longer briefly appears near the local player before moving to the fake client's
|
||||
remote transform.
|
||||
@@ -2742,7 +2741,7 @@ each remote `playerId` without visually applying animation.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: launch through F4SE, start the server, add fake
|
||||
clients in `F4TTestCell01`, and confirm per-player initial and transition
|
||||
animation state logs without visual animation changes.
|
||||
@@ -2804,7 +2803,7 @@ mutating actors by default.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: use the Dev Server GUI to add fake clients, toggle
|
||||
sneak on/off, and confirm existing animation debug logs plus one-time disabled
|
||||
visual sneak diagnostics without any visual crouch by default.
|
||||
@@ -2866,7 +2865,7 @@ remote player's `isSneaking` state changes.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Manual test placeholder: start the Dev Server GUI, launch Fallout 4 through
|
||||
F4SE, `coc F4TTestCell01`, add fake clients, and toggle sneak on/off.
|
||||
- Expected manual result: only the assigned runtime proxy for the toggled fake
|
||||
@@ -2923,7 +2922,7 @@ Next investigation should focus on read-only animation graph variable discovery
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: fake-client sneak toggles in `F4TTestCell01`
|
||||
should still produce animation debug `isSneaking` transition logs without
|
||||
applying visual sneak mutation by default.
|
||||
@@ -2982,7 +2981,7 @@ movement, sneak, jump, and weapon state signals.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and linked
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Manual Fallout 4 / F4SE testing is still pending:
|
||||
- Launch through F4SE.
|
||||
- `coc F4TTestCell01`.
|
||||
@@ -2990,7 +2989,7 @@ movement, sneak, jump, and weapon state signals.
|
||||
- Move/stop and sprint if safe.
|
||||
- Jump.
|
||||
- Draw/holster weapon if safe.
|
||||
- Check `Fallout4Together.log` for `Local animation graph debug` lines.
|
||||
- Check `CommonwealthOnline.log` for `Local animation graph debug` lines.
|
||||
- Optionally add one fake client to confirm runtime proxies still spawn and
|
||||
move while proxy graph diagnostics remain disabled.
|
||||
|
||||
@@ -3063,7 +3062,7 @@ uses CommonLibF4 read-only virtual getter overloads to probe cache IDs from
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and linked
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Linter diagnostics for `plugin/src/F4TLocalAnimationGraphDebug.cpp` reported
|
||||
no errors.
|
||||
- Manual Fallout 4 / F4SE testing is still pending:
|
||||
@@ -3105,7 +3104,7 @@ uses CommonLibF4 read-only virtual getter overloads to probe cache IDs from
|
||||
|
||||
- Run the manual F4SE test sequence and record cache size, readable ID counts,
|
||||
and any candidate sneak/movement/weapon/jump/sprint IDs from
|
||||
`Fallout4Together.log`.
|
||||
`CommonwealthOnline.log`.
|
||||
|
||||
---
|
||||
|
||||
@@ -3197,7 +3196,7 @@ unchanged.
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; build succeeded and linked
|
||||
`Fallout4Together.dll`.
|
||||
`CommonwealthOnline.dll`.
|
||||
- Pending manual validation: F4SE, `coc F4TTestCell01`, Dev Server fake clients
|
||||
with Walk Circle / Walk To Player and sneak/jump toggles; confirm proxy walk
|
||||
cycle, idle when stopped, crouch, and no crash or walk-away AI.
|
||||
@@ -3250,7 +3249,7 @@ but `SetPosition(..., true)` likely reset the character controller each frame.
|
||||
|
||||
- Ran `xmake build` from `plugin`; build succeeded.
|
||||
- Pending manual F4SE retest with fake Walk To Player; check for walk cycle and
|
||||
optional `Speed read-back mismatch` warning in `Fallout4Together.log`.
|
||||
optional `Speed read-back mismatch` warning in `CommonwealthOnline.log`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# F4SE Notes
|
||||
|
||||
F4SE is expected to be the main entry point for the native plugin side of Fallout 4 Together.
|
||||
F4SE is expected to be the main entry point for the native plugin side of Commonwealth Online.
|
||||
|
||||
## Plugin Goals
|
||||
|
||||
@@ -18,7 +18,7 @@ The first plugin goals are:
|
||||
Eventually, the compiled plugin should output something like:
|
||||
|
||||
```text
|
||||
Data/F4SE/Plugins/Fallout4Together.dll
|
||||
Data/F4SE/Plugins/CommonwealthOnline.dll
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# 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.
|
||||
Fallout 4 was designed as a single-player game. Commonwealth Online is therefore expected to have serious technical limitations, especially during early development.
|
||||
|
||||
## Early Prototype Limitations
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Project Overview
|
||||
|
||||
Fallout 4 Together is a prototype multiplayer framework experiment for Fallout 4.
|
||||
Commonwealth Online 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.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Successfully completed Phase 1-3 of the Fallout 4 Together → TiltedEvolution alignment initiative. Established comprehensive architectural foundation, protocol extensions, and animation descriptor infrastructure to enable working proxy actor animations.
|
||||
Successfully completed Phase 1-3 of the Commonwealth Online → TiltedEvolution alignment initiative. Established comprehensive architectural foundation, protocol extensions, and animation descriptor infrastructure to enable working proxy actor animations.
|
||||
|
||||
**Status:** Ready to proceed with Phase 4 (Dynamic Spawn).
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@ After recompiling, run fake client and watch log:
|
||||
|
||||
```bash
|
||||
# Terminal: Watch logs in real-time
|
||||
Get-Content "c:\Users\User\Documents\My Games\Fallout4\F4SE\Fallout4Together.log" -Wait -Tail 50 | Select-String "Phase2-DEBUG"
|
||||
Get-Content "c:\Users\User\Documents\My Games\Fallout4\F4SE\CommonwealthOnline.log" -Wait -Tail 50 | Select-String "Phase2-DEBUG"
|
||||
```
|
||||
|
||||
**Expected pattern (good interpolation):**
|
||||
|
||||
@@ -80,7 +80,7 @@ Create a simple test script (`test_interpolation.py`):
|
||||
### Setup Step 1: Start Relay Server
|
||||
|
||||
```bash
|
||||
cd f:\Repos\Fallout-4-Together\server
|
||||
cd f:\Repos\Commonwealth-Online\server
|
||||
python server.py
|
||||
```
|
||||
|
||||
@@ -95,7 +95,7 @@ Waiting for connections...
|
||||
In a new terminal:
|
||||
|
||||
```bash
|
||||
cd f:\Repos\Fallout-4-Together\server
|
||||
cd f:\Repos\Commonwealth-Online\server
|
||||
python fake_client.py
|
||||
```
|
||||
|
||||
@@ -341,11 +341,11 @@ This should still appear alongside interpolation.
|
||||
|
||||
```bash
|
||||
# Terminal 1: Start relay server
|
||||
cd f:\Repos\Fallout-4-Together\server
|
||||
cd f:\Repos\Commonwealth-Online\server
|
||||
python server.py
|
||||
|
||||
# Terminal 2: Start fake client (single remote player)
|
||||
cd f:\Repos\Fallout-4-Together\server
|
||||
cd f:\Repos\Commonwealth-Online\server
|
||||
python fake_client.py
|
||||
|
||||
# In-game: Launch F4T and observe proxy movement
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Protocol Overview
|
||||
|
||||
The Fallout 4 Together protocol defines the messages sent between Fallout 4 clients and the external server.
|
||||
The Commonwealth Online protocol defines the messages sent between Fallout 4 clients and the external server.
|
||||
|
||||
Early versions should stay simple and easy to debug.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ This file is for notes on existing Bethesda multiplayer projects and experiments
|
||||
- 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?
|
||||
- What parts are useful references for Commonwealth Online?
|
||||
|
||||
## Notes
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ Recommended:
|
||||
```text
|
||||
Fallout 4
|
||||
F4SE
|
||||
Fallout 4 Together test plugin
|
||||
Commonwealth Online test plugin
|
||||
No other gameplay mods
|
||||
Dedicated test save
|
||||
```
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Version Targets
|
||||
|
||||
Fallout 4 Together is version-sensitive because it depends on Fallout 4, F4SE, and native plugin development.
|
||||
Commonwealth Online is version-sensitive because it depends on Fallout 4, F4SE, and native plugin development.
|
||||
|
||||
## Primary Target
|
||||
|
||||
@@ -20,8 +20,8 @@ All multiplayer testing should use the same:
|
||||
|
||||
* Fallout 4 version
|
||||
* F4SE version
|
||||
* Fallout 4 Together plugin version
|
||||
* Fallout 4 Together test ESP version
|
||||
* Commonwealth Online plugin version
|
||||
* Commonwealth Online test ESP version
|
||||
* Load order
|
||||
* Test save
|
||||
|
||||
@@ -39,12 +39,12 @@ F4SE supports the latest Fallout 4 versions available on Steam and GOG, but Stea
|
||||
|
||||
## Current Development Decision
|
||||
|
||||
Fallout 4 Together will use the Steam build of Fallout 4 as the primary development target.
|
||||
Commonwealth Online will use the Steam build of Fallout 4 as the primary development target.
|
||||
|
||||
GOG support may be investigated later once the plugin loads successfully and the basic transform-sync prototype is working.
|
||||
|
||||
## Compatibility Warning
|
||||
|
||||
Fallout 4 Together may not work across different Fallout 4 executable versions.
|
||||
Commonwealth Online may not work across different Fallout 4 executable versions.
|
||||
|
||||
During testing, every connected player should use the same game version, F4SE version, plugin version, ESP version, and load order.
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# Fallout4Together Plugin
|
||||
# Commonwealth Online Plugin
|
||||
|
||||
This is the native Fallout4Together plugin using CommonLibF4.
|
||||
This is the native Commonwealth Online F4SE plugin using CommonLibF4.
|
||||
|
||||
### Requirements
|
||||
* [XMake](https://xmake.io) [3.0.0+]
|
||||
|
||||
+9
-9
@@ -1,6 +1,6 @@
|
||||
# Plugin Setup
|
||||
|
||||
The Fallout 4 Together native plugin is based on `Fallout4Together`.
|
||||
The Commonwealth Online native plugin is based on `Fallout4Together`.
|
||||
|
||||
## Selected Template
|
||||
|
||||
@@ -14,9 +14,9 @@ Forked: No
|
||||
## Build Target
|
||||
|
||||
```text
|
||||
Project Name: Fallout4Together
|
||||
Output DLL: Fallout4Together.dll
|
||||
Expected Install Path: Data/F4SE/Plugins/Fallout4Together.dll
|
||||
Project Name: CommonwealthOnline
|
||||
Output DLL: CommonwealthOnline.dll
|
||||
Expected Install Path: Data/F4SE/Plugins/CommonwealthOnline.dll
|
||||
```
|
||||
|
||||
## Current Goal
|
||||
@@ -27,10 +27,10 @@ verify the local networking prototype against `server/server.py`.
|
||||
This means the plugin should be able to:
|
||||
|
||||
* Build successfully
|
||||
* Output `Fallout4Together.dll`
|
||||
* Output `CommonwealthOnline.dll`
|
||||
* Be copied into `Data/F4SE/Plugins/`
|
||||
* Load when Fallout 4 is launched through F4SE
|
||||
* Create or write to a `Fallout4Together.log` file
|
||||
* Create or write to a `CommonwealthOnline.log` file
|
||||
* Prefix multiplayer/networking log lines with `[LocalPlayerId=unassigned]` before the server welcome packet and `[LocalPlayerId=N]` after assignment
|
||||
* Connect to the local server on `127.0.0.1:7777`
|
||||
* Send local transform packets
|
||||
@@ -93,7 +93,7 @@ If the build succeeds, look for the compiled DLL in the output folder created by
|
||||
For manual testing, the compiled plugin DLL should eventually be copied to:
|
||||
|
||||
```text
|
||||
Fallout 4/Data/F4SE/Plugins/Fallout4Together.dll
|
||||
Fallout 4/Data/F4SE/Plugins/CommonwealthOnline.dll
|
||||
```
|
||||
|
||||
If the `F4SE/Plugins/` folder does not exist inside `Data/`, create it manually.
|
||||
@@ -104,8 +104,8 @@ Use this checklist for the first plugin test:
|
||||
|
||||
* [ ] Fallout 4 launches normally without the plugin
|
||||
* [ ] Fallout 4 launches through F4SE without the plugin
|
||||
* [ ] `Fallout4Together.dll` builds successfully
|
||||
* [ ] `Fallout4Together.dll` is copied to `Data/F4SE/Plugins/`
|
||||
* [ ] `CommonwealthOnline.dll` builds successfully
|
||||
* [ ] `CommonwealthOnline.dll` is copied to `Data/F4SE/Plugins/`
|
||||
* [ ] Fallout 4 launches through F4SE with the plugin installed
|
||||
* [ ] Game reaches the main menu without crashing
|
||||
* [ ] Plugin log file is created
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace
|
||||
WSADATA winsockData{};
|
||||
const auto startupResult = WSAStartup(MAKEWORD(2, 2), std::addressof(winsockData));
|
||||
if (startupResult != 0) {
|
||||
LogWarningWithLocalPlayerPrefix("Could not initialize Winsock for Fallout 4 Together local networking.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not initialize Winsock for Commonwealth Online local networking.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -540,7 +540,7 @@ namespace
|
||||
}
|
||||
|
||||
if (bytesReceived == 0) {
|
||||
LogWarningWithLocalPlayerPrefix("Fallout 4 Together local server closed the connection.");
|
||||
LogWarningWithLocalPlayerPrefix("Commonwealth Online local server closed the connection.");
|
||||
CloseSocket();
|
||||
break;
|
||||
}
|
||||
@@ -552,7 +552,7 @@ namespace
|
||||
}
|
||||
|
||||
if (g_receiveThreadRunning.load()) {
|
||||
LogWarningWithLocalPlayerPrefix("Lost connection to Fallout 4 Together local server while receiving.");
|
||||
LogWarningWithLocalPlayerPrefix("Lost connection to Commonwealth Online local server while receiving.");
|
||||
}
|
||||
CloseSocket();
|
||||
break;
|
||||
@@ -614,14 +614,14 @@ namespace F4T::Networking
|
||||
// packet path without exposing any gameplay state to a remote server.
|
||||
const auto localSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (localSocket == INVALID_SOCKET) {
|
||||
LogWarningWithLocalPlayerPrefix("Could not create socket for Fallout 4 Together local server connection.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not create socket for Commonwealth Online local server connection.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!SetNonBlocking(localSocket)) {
|
||||
closesocket(localSocket);
|
||||
LogWarningWithLocalPlayerPrefix(
|
||||
"Could not configure non-blocking socket for Fallout 4 Together local server connection.");
|
||||
"Could not configure non-blocking socket for Commonwealth Online local server connection.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -630,7 +630,7 @@ namespace F4T::Networking
|
||||
serverAddress.sin_port = htons(kLocalServerPort);
|
||||
if (inet_pton(AF_INET, kLocalServerHost, std::addressof(serverAddress.sin_addr)) != 1) {
|
||||
closesocket(localSocket);
|
||||
LogWarningWithLocalPlayerPrefix("Could not parse Fallout 4 Together local server address.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not parse Commonwealth Online local server address.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -644,7 +644,7 @@ namespace F4T::Networking
|
||||
// The server is a developer tool, not a runtime requirement. A failed
|
||||
// connection should leave Fallout 4 running and simply disable packet sends.
|
||||
LogWarningWithLocalPlayerPrefix(std::format(
|
||||
"Could not connect to Fallout 4 Together local server at {}:{}",
|
||||
"Could not connect to Commonwealth Online local server at {}:{}",
|
||||
kLocalServerHost,
|
||||
kLocalServerPort));
|
||||
return false;
|
||||
@@ -662,7 +662,7 @@ namespace F4T::Networking
|
||||
StartReceiveThread();
|
||||
|
||||
LogInfoWithLocalPlayerPrefix(
|
||||
std::format("Connected to Fallout 4 Together local server at {}:{}.", kLocalServerHost, kLocalServerPort));
|
||||
std::format("Connected to Commonwealth Online local server at {}:{}.", kLocalServerHost, kLocalServerPort));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -745,7 +745,7 @@ namespace F4T::Networking
|
||||
}
|
||||
|
||||
if (packetSize <= 0 || static_cast<std::size_t>(packetSize) >= packet.size()) {
|
||||
LogWarningWithLocalPlayerPrefix("Could not format Fallout 4 Together transform packet.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not format Commonwealth Online transform packet.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -758,7 +758,7 @@ namespace F4T::Networking
|
||||
a_cellId);
|
||||
|
||||
if (appended <= 0 || static_cast<std::size_t>(appended) >= remaining) {
|
||||
LogWarningWithLocalPlayerPrefix("Could not format Fallout 4 Together transform packet cell ID.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not format Commonwealth Online transform packet cell ID.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -774,7 +774,7 @@ namespace F4T::Networking
|
||||
a_worldspaceId);
|
||||
|
||||
if (appended <= 0 || static_cast<std::size_t>(appended) >= remaining) {
|
||||
LogWarningWithLocalPlayerPrefix("Could not format Fallout 4 Together transform packet worldspace ID.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not format Commonwealth Online transform packet worldspace ID.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -784,7 +784,7 @@ namespace F4T::Networking
|
||||
const auto remaining = packet.size() - static_cast<std::size_t>(packetSize);
|
||||
const auto appended = std::snprintf(packet.data() + packetSize, remaining, "}\n");
|
||||
if (appended <= 0 || static_cast<std::size_t>(appended) >= remaining) {
|
||||
LogWarningWithLocalPlayerPrefix("Could not finish Fallout 4 Together transform packet.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not finish Commonwealth Online transform packet.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -803,7 +803,7 @@ namespace F4T::Networking
|
||||
if (bytesSent == SOCKET_ERROR) {
|
||||
const auto error = WSAGetLastError();
|
||||
if (error != WSAEWOULDBLOCK) {
|
||||
LogWarningWithLocalPlayerPrefix("Lost connection to Fallout 4 Together local server.");
|
||||
LogWarningWithLocalPlayerPrefix("Lost connection to Commonwealth Online local server.");
|
||||
CloseSocket();
|
||||
}
|
||||
|
||||
@@ -811,7 +811,7 @@ namespace F4T::Networking
|
||||
}
|
||||
|
||||
if (bytesSent != packetSize) {
|
||||
LogWarningWithLocalPlayerPrefix("Could not send full Fallout 4 Together transform packet.");
|
||||
LogWarningWithLocalPlayerPrefix("Could not send full Commonwealth Online transform packet.");
|
||||
CloseSocket();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace
|
||||
constexpr float kRunGraphSpeedThreshold = 280.0F;
|
||||
|
||||
// Graph Speed range confirmed from local-player read-by-name debug in
|
||||
// Fallout4Together.log: walk starts ~47, full run ~373. FO4's graph "Speed" is in the
|
||||
// CommonwealthOnline.log: walk starts ~47, full run ~373. FO4's graph "Speed" is in the
|
||||
// same world-units/sec scale as our network movementSpeed, so the mapping is ~1:1.
|
||||
// (The earlier 0-105 calibration was wrong and compressed run speed, causing foot slide.)
|
||||
constexpr float kGraphSpeedMin = 0.0F;
|
||||
@@ -635,7 +635,7 @@ namespace F4T::ProxyAnimationSync
|
||||
}
|
||||
|
||||
// FO4 graph "Speed" is in the same world-units/sec scale as our derived
|
||||
// movementSpeed (confirmed in Fallout4Together.log: run movementSpeed ~306 lines up
|
||||
// movementSpeed (confirmed in CommonwealthOnline.log: run movementSpeed ~306 lines up
|
||||
// with graph Speed ~296-373). Map ~1:1 so the walk/run foot cadence matches the
|
||||
// proxy's actual ground translation and does not slide.
|
||||
float graphSpeed = a_movementSpeed;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Source
|
||||
|
||||
This folder is for Fallout 4 Together native plugin source files.
|
||||
This folder is for Commonwealth Online native plugin source files.
|
||||
|
||||
Initial planned source areas:
|
||||
|
||||
|
||||
+2
-2
@@ -308,7 +308,7 @@ namespace
|
||||
// vertical-speed heuristic (a_verticalSpeed >= kJumpVerticalSpeedThreshold) produced
|
||||
// constant false positives: (z - prevZ)/dt spikes to thousands of units/sec on flat
|
||||
// ground due to tiny dt and z micro-jitter, so proxies were stuck in a perpetual jump
|
||||
// state that masked the run/walk locomotion animation (see Fallout4Together.log).
|
||||
// state that masked the run/walk locomotion animation (see CommonwealthOnline.log).
|
||||
const auto apiJumping = a_player.IsJumping();
|
||||
if (apiJumping) {
|
||||
jumpHoldUntil = a_currentTime + kJumpStateHoldDuration;
|
||||
@@ -649,7 +649,7 @@ F4SE_PLUGIN_LOAD(const F4SE::LoadInterface* a_f4se)
|
||||
{
|
||||
F4SE::Init(a_f4se);
|
||||
|
||||
LogInfoWithLocalPlayerPrefix("Fallout 4 Together plugin loaded successfully.");
|
||||
LogInfoWithLocalPlayerPrefix("Commonwealth Online plugin loaded successfully.");
|
||||
// TODO: Consider separate per-instance log files once launcher/profile support exists.
|
||||
|
||||
// Networking is intentionally localhost-only for the first milestone. If the
|
||||
|
||||
+5
-5
@@ -2,7 +2,7 @@
|
||||
includes("lib/commonlibf4")
|
||||
|
||||
-- set project constants
|
||||
set_project("Fallout4Together")
|
||||
set_project("CommonwealthOnline")
|
||||
set_version("0.0.0")
|
||||
set_license("GPL-3.0")
|
||||
set_languages("c++23")
|
||||
@@ -14,11 +14,11 @@ add_rules("plugin.vsxmake.autoupdate")
|
||||
add_requires("nlohmann_json")
|
||||
|
||||
-- define targets
|
||||
target("Fallout4Together")
|
||||
target("CommonwealthOnline")
|
||||
add_rules("commonlibf4.plugin", {
|
||||
name = "Fallout4Together",
|
||||
author = "Fallout4Together",
|
||||
description = "Fallout4Together F4SE plugin using CommonLibF4"
|
||||
name = "CommonwealthOnline",
|
||||
author = "Commonwealth Online",
|
||||
description = "Commonwealth Online F4SE plugin using CommonLibF4"
|
||||
})
|
||||
|
||||
-- add src files
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Protocol
|
||||
|
||||
This folder documents the planned network protocol for Fallout 4 Together.
|
||||
This folder documents the planned network protocol for Commonwealth Online.
|
||||
|
||||
The first protocol should be simple and focused on player transform sync.
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Message Types
|
||||
|
||||
This file tracks current and planned message type names for the Fallout 4
|
||||
Together local networking prototype.
|
||||
This file tracks current and planned message type names for the Commonwealth Online local networking prototype.
|
||||
|
||||
## Implemented
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
# Packet Types
|
||||
|
||||
This document describes the currently implemented local prototype packet types
|
||||
for Fallout 4 Together.
|
||||
for Commonwealth Online.
|
||||
|
||||
The current protocol is newline-separated JSON over a local TCP connection to
|
||||
`127.0.0.1:7777`.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Player Sync
|
||||
|
||||
Player synchronization is the first major technical goal for Fallout 4 Together.
|
||||
Player synchronization is the first major technical goal for Commonwealth Online.
|
||||
The current implementation is still a local networking prototype.
|
||||
|
||||
## Current Implemented Flow
|
||||
@@ -110,7 +110,7 @@ Normal local movement currently uses three separate rates:
|
||||
- Sends are skipped until position changes by about 3 game units or rotation
|
||||
changes by about 0.02 radians.
|
||||
- Local movement logs stay much slower, around once per second, so
|
||||
`Fallout4Together.log` remains readable.
|
||||
`CommonwealthOnline.log` remains readable.
|
||||
|
||||
`cell_change`, `worldspace_change`, and `teleport` movement types bypass the
|
||||
normal send interval and are sent immediately. The receiving plugin still stores
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions
|
||||
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
set "SERVER_DIR=%SCRIPT_DIR%server"
|
||||
|
||||
cd /d "%SERVER_DIR%"
|
||||
if errorlevel 1 (
|
||||
echo Failed to change to server directory:
|
||||
echo "%SERVER_DIR%"
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
where python >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo python was not found on PATH.
|
||||
echo Install Python 3 and add it to PATH.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
python -c "import PySide6" >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo Installing server GUI dependencies...
|
||||
python -m pip install -r requirements.txt
|
||||
if errorlevel 1 (
|
||||
echo Failed to install requirements.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
|
||||
echo Starting Commonwealth Online Dev Server GUI...
|
||||
python dev_server_app.py
|
||||
set "EXIT_CODE=%ERRORLEVEL%"
|
||||
|
||||
if not "%EXIT_CODE%"=="0" (
|
||||
echo Dev server GUI exited with error code %EXIT_CODE%.
|
||||
pause
|
||||
exit /b %EXIT_CODE%
|
||||
)
|
||||
|
||||
endlocal
|
||||
exit /b 0
|
||||
@@ -52,7 +52,7 @@ class DevServerWindow(QMainWindow):
|
||||
self.stat_labels: dict[str, QLabel] = {}
|
||||
self.selected_fake_client_key: int | None = None
|
||||
|
||||
self.setWindowTitle("Fallout 4 Together Dev Server")
|
||||
self.setWindowTitle("Commonwealth Online Dev Server")
|
||||
self.resize(1100, 760)
|
||||
self.setCentralWidget(self._create_tabs())
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@ def main() -> None:
|
||||
# This fake client lets us verify server broadcast behavior before trying to
|
||||
# run and coordinate a second Fallout 4/F4SE instance.
|
||||
with socket.create_connection((HOST, PORT)) as connection:
|
||||
log(f"Connected to Fallout 4 Together server at {HOST}:{PORT}")
|
||||
log(f"Connected to Commonwealth Online server at {HOST}:{PORT}")
|
||||
|
||||
buffer = ""
|
||||
while True:
|
||||
@@ -226,7 +226,7 @@ if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
except ConnectionRefusedError:
|
||||
log(f"Could not connect to Fallout 4 Together server at {HOST}:{PORT}. Is server.py running?")
|
||||
log(f"Could not connect to Commonwealth Online server at {HOST}:{PORT}. Is server.py running?")
|
||||
except KeyboardInterrupt:
|
||||
log("\nFake client stopped.")
|
||||
except OSError as error:
|
||||
|
||||
@@ -137,7 +137,7 @@ class FalloutTogetherServer:
|
||||
self._running = True
|
||||
self._started_at = time.time()
|
||||
|
||||
self._log(f"Fallout 4 Together local test server listening on {self.host}:{self.port}")
|
||||
self._log(f"Commonwealth Online local test server listening on {self.host}:{self.port}")
|
||||
self._log("Waiting for newline-separated JSON transform packets...")
|
||||
|
||||
def _accept_loop(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user