northstar-dedicated
Docker image for the Northstar dedicated server. Not ready yet (it'll probably be another day or two).
Versioning
Tentative.
Stable
These tags will be used for stable versions from the master branch. The major version will be incremented when a breaking change is made.
{major-version}.{YYMMDD}.git{short-hash}-tf{titanfall-ver}-ns{northstar-ver}
(unique tag){major-version}-tf{titanfall-ver}-ns{northstar-ver}
(recommended if you're using custom config){major-version}-tf{titanfall-ver}
(recommended if you're only using the documented env vars)
Note: There isn't a latest
tag since the Titanfall 2 version may need to be updated manually.
Development
These tags will be used for the dev branch and for all CI builds.
dev.{YYMMDD}.git{short-hash}
(unique tag)dev
(only for the main dev branch)
Titanfall 2
To use this docker container, you will need a copy of the Titanfall 2 game files to mount as a volume. You can reduce the size to around 5 gigabytes with the instructions in the next section.
Reducing the size
To slim down a Titanfall 2 install, delete the files as specified below.
- delete
vpk/client_sp_* englishclient_sp_*
- delete
r2/maps/sp_*
- delete
r2/paks/
except for{common,common_mp,highlight,particle_scripts}{,\(*}.rpak ui{,\(*}.dll
- delete
r2/sound
- delete
r2/media
- delete
r2/screenshots
- on wine without origin installed:
- delete
Core
- delete
Support
- delete
__Installer
- delete
System requirements
TODO
Running with wine
This is not relevant if you are here for the Docker container. If you want to try running this without Docker, my stubs, or my custom Wine build, I've successfully used the following configurations. Note that you will need a full X server running (Xvfb won't do).
Common | |
---|---|
|
|
Either: | |
|
Note: DXVK will always use your physical adapter instead of lavapipe if you have one present unless you patch this check. |
Tracing
While working on the stubs, I needed to trace which DirectX calls Titanfall uses. You can do this by running it under WineD3D (with llvmpipe so it isn't polluted or made inconsistent by the hardware) and WINEDEBUG=trace+d3d11,trace+dxgi
. Beware that this may have more than what is directly called by Titanfall due to internal implementation details of WineD3D.
TODO
Most of my progress and notes can be found on my repos and gists if anyone's interested. Some of it is also discussed on the NS discord. I've also been adding the most relevant bits to this README as I finalize them.
Note that I'm not currently accepting contributions (at least until I finish the directx stubbing and the initial version).
Wine
- Figure out how to run it natively.
- Figure out how to run it with wined3d + llvmpipe.
- Figure out how to run it with dxvk + lavapipe.
- Build minimal version.
- Figure out how to run it without an X server.
- Build minimal version.
- Get it working on ARM64 with Box64 / Hangover / qemu-user.
Northstar
- Create additional patches for optimization where necessary.
- Fix console creation so it re-uses the original one.
- Expose prometheus metrics?
Titanfall 2
- Figure out which files are unnecessary.
- Create stubs for
GFSDK_{SSAO,TXAA}.win64.dll
so d3d9 isn't required (thanks p0358). - Maybe: remove textures from vpks.
dxvk
- Initial research and API traces.
- Remove the win32 surface so it can run on xvfb.
- Neutralize the render loop / presenter.
- Finish removing vulkan from dxvk fork by incrementally stubbing / re-implementing APIs.
- Neutralize texture loading and shader compilation, but still return valid buffers where needed.
- Remove leftover cruft.
- Slim down the build system.
docker
- Create initial docker image based on Fedora.
- Design versioning scheme.
- Create a slimmer docker image from scratch or based on Alpine with custom packages.
- Figure out a way to be able to mount TF2 read-only without copying it.
- Provide config via a custom entrypoint which supports env vars.
- Fix Northstar logging.
- GitHub actions.
- Windows support? (this depends on whether my hook will work on it)
- Publish image.
misc
- Webpage.
- Docs.