This project has been completely rewritten from the ground-up in C#, but it started its life as a fork, and was based on the fantastic work of multiversuskoth and thethiny. The original (TypeScript-based) repository is located here.
OpenVersus is a replacement server-side infrastructure backend for MultiVersus: HTTP, websocket, matchmaking,
match-flow, rollback netcode, and related services which the game client talks to, written in C# (.NET 10) as one solution
of independent services, plus the admin tool ovsctl. The original TypeScript fork it grew out of is kept as a reference
under legacy/reference/ts_server/; it is kept strictly for reference, and is no longer run, maintained, or supported.
The only relevant, live code in this repo belongs to the from-scratch C# reimplementation.
Where things are:
src/holds the services (one project each: http, access, social, lobbies, web, realtime, edge, matchmaking, matchflow, arenas, steam) and the sharedOpenVersus.Server.Core;tests/their test projects;test.shruns them against local throwaway stores.Dockerfilebuilds every service's image from one build of the solution (build-images.shbuilds them all).deploy/is the example production layout: Docker Compose projects for the stores and the services, the HAProxy router, example env files, andbuild.sh/ovs.shto pack a release and run it on a host. Start withdeploy/README.md.docs/describes the protocol work (routes, realtime, SSC, Arenas, Rifts, seasons, bans);tools/holds the generators and diff harnesses used during reimplementation.- The UDP rollback netcode relay and the players' P2P nodes live in their own repository
(ovs-rollback-server);
deploy/build.shbuilds its image alongside the rest of the images native to this repo.
What follows is relevant text from the DMCA concerning reverse engineering and works based upon it, along with the README document from the original repo.
17 U.S. Code § 1201 (f)
(f) Reverse Engineering—
-
Notwithstanding the provisions of subsection (a)(1)(A), a person who has lawfully obtained the right to use a copy of a computer program may circumvent a technological measure that effectively controls access to a particular portion of that program for the sole purpose of identifying and analyzing those elements of the program that are necessary to achieve interoperability of an independently created computer program with other programs, and that have not previously been readily available to the person engaging in the circumvention, to the extent any such acts of identification and analysis do not constitute infringement under this title.
-
Notwithstanding the provisions of subsections (a)(2) and (b), a person may develop and employ technological means to circumvent a technological measure, or to circumvent protection afforded by a technological measure, in order to enable the identification and analysis under paragraph (1), or for the purpose of enabling interoperability of an independently created computer program with other programs, if such means are necessary to achieve such interoperability, to the extent that doing so does not constitute infringement under this title.
-
The information acquired through the acts permitted under paragraph (1), and the means permitted under paragraph (2), may be made available to others if the person referred to in paragraph (1) or (2), as the case may be, provides such information or means solely for the purpose of enabling interoperability of an independently created computer program with other programs, and to the extent that doing so does not constitute infringement under this title or violate applicable law other than this section.
-
For purposes of this subsection, the term “interoperability” means the ability of computer programs to exchange information, and of such programs mutually to use the information which has been exchanged.
Express server with a mongoDB backend
Everything is typescript including using typegoose.
Routes are auto generated all routes from a postmancollection.json from mvs-dump. router.ts should be edited since its auto generated
Request/Response/Query interfaces are also auto generated and inside the interfaces folder. These are auto added inside the router.ts file and should also be used in the handlers req, res interfaces to get body and response auto completion
All handlers are inside the handlers folder. To implement a handler copy the handler name and signature from the router.ts and create a new file inside the handlers folder. Make sure to add your file to the handlers/index.ts file so it can be picked up by the auto generated router.ts file
The hydra middleware decodes/encodes x-ag-binary responses and adds them to the req body. Response will be encoded back to hydra.
Common hydra headers are also appended to all requests
Databse schema are contained inside the database folder and use typegoose models
OpenVersus is not affiliated with, nor endorsed by, WB, PFG, its developers, or any other related entity.
OpenVersus is not affiliated with, nor endorsed by, any other modding project or effort, the developers of those projects, or any other related entity.
This software is provided on an as-is, sans-warranty basis as detailed in the LICENSE file. Use at your own risk and discretion.