Guns topdown design

Reference: Guns

Not an exhaustive list:


 * meta.guns-game.com
 * front end:
 * login/register
 * invalidate client/server pubkey
 * generate token for server pubkey upload
 * back end:
 * query client/server pubkey
 * badges for clients can be assigned from meta, making them global
 * query registered servers
 * guns.py/exe
 * meta: login
 * graceful degradation: if meta isn't responding but pubkey already uploaded, allow login anyway
 * public/private key generation (server also needs this)
 * meta: public key upload
 * graceful degradation: not possible. If meta is down, pubkey cannot be uploaded.
 * network: Guns Protocol
 * meta: query server's public key
 * graceful degradation: if meta is down, continue unauthenticated if server allows us
 * screens
 * login screen
 * main menu
 * options screen
 * build a tank (see also Guns tank thoughts)
 * Tank display
 * layer display
 * critical items checking
 * statistics
 * find a game (via meta)/direct connect
 * lobby screen
 * status screen (e.g. connecting, authenticating, downloading, blah)
 * battle screen
 * tank display (also for BAT)
 * input handling
 * network: tank shape transmission (two-directional)
 * badges -- sent by server, displayed next to client names
 * guns-server.py/exe
 * public/private key generation (client also needs this)
 * command line
 * server token input for public key upload
 * kick/ban by username/ip
 * player list
 * network: Guns Protocol
 * meta: query client's public key
 * badges can be received as part of the pubkey query; they can also be assigned by the server (in which case, they are unique to the server)
 * keycache: use If-Modified-Since and be prepared to receive HTTP/1.x 304 Not Modified
 * graceful degradation: optional via config: call it unsafe or insecure mode -- if meta is down and unsafe mode is on, allow unknown client; known clients are always checked against last known pubkey
 * lobby mode: chat, tank upload, readiness handling
 * battle mode: input handling, physics calculations, status transmission
 * network: tank shape transmission (two-directional)

Badges?
Badges are three-element tuples of name, (optional) description, and (optional) image URL. Example badges include: ('Developer', 'This is a Guns developer', 'http://guns-game.com/devbadge.png'), ('High Roller', 'This person has donated over $10,000 to Guns', 'http://guns-game.com/highroller.png'), ('Week 12 Top Killer', 'This is azeety, who was top killer on our server in the week of June 9th-15th, 2013', 'http://randomgunnery.servegame.org/topkiller.jpg').

Badges can be assigned by meta, or by a local server. A server can also hide meta badges (servers are the ultimate authority for badges, due to how they are transmitted). Badges assigned by a server can only be given to and seen by players who are on that server.