A project aimed at recreating the 5th generation Armored Core servers.
- SVFWRequestMessage: Working
- Login Server: Working
- Auth Server: Working
- FSDP Protocol: In Progress
- Game Server: Dependent on FSDP
The server code can probably use some work.
This is my first time writing a server application.
This is one of the few times I've written async code so far as well.
To start testing the server:
First setup RPCS3 for Armored Core Verdict Day;
This will override the server IP in the game.
- Get RPCS3
- Obtain a copy of Armored Core Verdict Day for RPCS3 to use
- Make an RPCN account for RPCS3
- In RPCS3, create a Custom Configuration for Armored Core Verdict Day
- Open Armored Core Verdict Day's Custom Configuration in RPCS3
- Go to the Network tab
- Set Network Status to Connected
- Set PSN Status to RPCN
- Set IP/Hosts switches to acvd-ps3-ww.fromsoftware.jp=127.0.0.1
- Save the Custom Configuration
Next replace the RSA keypair used by Armored Core Verdict Day;
This will allow the server to communicate with the game.
You will need to either modify the main archive, or modify the files in an unbound copy of the game;
The main archive is kept under "RPCS3_FOLDER/dev_hdd0/game/REGION_CODE/USRDIR/bind" for digital copies and the game install.
It is kept under "GAME_FOLDER/PS3_GAME/USRDIR/bind" for disc copies.
It comes in two parts: "dvdbnd5_layer0.bhd" and "dvdbnd_layer0.bdt"
To create an in-place unbound copy use ACVLooseLoader (Recommended)
To unpack and repack the main archive use DVDUnbinder
- Go to the game files folder;
- In an unbound copy this is under "GAME_FOLDER/PS3_GAME/USRDIR/";
- In an unpacked copy this is directly under the unpack folder
- Go to the system folder;
- Replace publickey.pem with one generated by running AcOpenServer
If unpacking and repacking, use DVDUnbinder to now repack the main archive.
If you see no change, make sure the installed game archive under "RPCS3_FOLDER/dev_hdd0/game/BLUS31194/USRDIR/bind" is replaced.
BLUS31194 is the region code for PS3 US Armored Core Verdict Day on disc, replace as necessary.
The server makes keys under the "Saved/SERVER_NAME" folder,
SERVER_NAME being the name of the server instance.
Default is a server made by default.
If you are running on RPCN servers other than the official one and ticket signature verification is on;
- Make sure the RPCN server is configured to sign tickets and the digest type is the same type for RPCN and AcOpenServer's config.
- The digest type string will be different for RPCN and AcOpenServer due to the differences in their codebase.
- If using SHA224 as a digest for example:
- RPCN's config is set to SHA224
- AcOpenServer's config is set to SHA-224withECDSA
- Follow the RPCN readme's steps to generate a ticket signing key if you do not know how.
- Copy the newly generated ticket_public.pem from the RPCN folder into the AcOpenServer server's folder.
The official RPCN server's key is currently built into AcOpenServer but is untested at this time.
You may also turn off ticket verification or ticket signature verification only in the config.
Turning off ticket verification will also ignore ticket signature verification at this time.
Currently only building on windows is directly supported.
However adding other platforms may be doable.
Make sure the project is not under strange folders.
Try to have no folders with spaces, -, or # in the path.
Ideally try to have no folders with symbols in the path.
This is because the native projects use CMake and it may not like odd paths.
First build the native libraries:
- Go to the native/tools folder
- Run native_generate_vs2022.bat
- Go back to the native folder
- Go to native/generated/vs2022 and open native.sln
- Build in Visual Studio 2022
In the native folder a bin folder will be generated, managed wrapper projects point at binaries built in here.
Finally build the AcOpenServer.sln in VS 2022.
Massive thanks to ds3os, it's research website timleonard.uk, and related authors;
Much of the code is based on concepts presented by ds3os, and the native libraries around cryptography are mostly directly borrowed from it.
Thanks to openssl-net for the C# openssl wrapper this project modifies and uses.