Open Rising Thunder open server implementation
This should get you going:
- Install the latest version of Python 2.x
- Install the following dependecies: tornado, grpc, protobuf. I prefer to use pip (i.e.
pip install tornado, grpc, protobuf
), but whatever floats your boat. - Run the server via
python rtd.py
Here's a brief overview of the source to get you started:
- protos - Contains the source to the protocol buffers which describe the Rising Thunder server RPC system. We've included all of the protobufs used for Rising Thunder, including some which are used in portions of the game not currently implemented by this server (e.g. the account creation bits on our website).
- scripts - Some helper scripts useful for working with the server. See the comments in each individual script for more details.
- server - The server implementation. Uses the Tornado python web framework and code generated from the protos to implement a very, very basic Rising Thunder server
- tbadmin, tbui, etc. - These files implement a python interface to the data structures described in the protos. They're automatically generated by the scripts/generate_protos.cmd script tests - Some automated tests, using the pytest framework.
- tb - The prefix we used to namespace Rising Thunder code during development. Everywhere you see "tb" you can think "rt" and be pretty safe (e.g. tbrpc describes the RT RPC layer). What tb stands for remains a mystery.
- rpc - Most of the non-game functionality of the server is implemented with an RPC layer over HTTP built using Google Protocol Buffers. Whenever the code refers to RPCs, it's talking about that.
- portal - Most of the game-dependant functionality of the server. The portal is a UDP server which facilates game creation, spectating, detecting disconnected players, and implements the state machine required to implement RT's 2/3 games per-match flow. Its implementation is greatly complicated by the fact that UDP is a lossy protocol. Much of the state machine should probably have been implemented with RPCs, but c'est la' vie.