 - Explosions
 - Improve graphics
 - More guns
 - More powerups
 - Improved ship file format
 - Preset characters so players don't have to enter their details every time
 - Preset games so players can play campaign mode
 - Fix track.ai loader
 - Gravity wells
 - Movable map objects
 - Fix bugs in square collisions
 - Fix bugs in player/game creation
 - Allow ships to set bullet speeds/lives
 - Decent AI
 - Maps smaller than screen
 - Line collisions
 - Different sized ships
 - Different shaped ships (???)
 - Exhaust from ships
 - Nicer GUI images
 - Video mode switcher
 - Configuration
 - Fix buffer overflows in net code
 - Fix message box (centre text, wrap text, etc.)
 - Make GUI feel nice
 - Output l33t debugging information
 - Fix all the TODO: bits
 - Add comments
 - Allow clients to be kicked and games to be cancelled
 - Kick people off server if a packet is received unexpectedly or at wrong time
 - Use sfxr for sound effects
 - Finish packet 4 (add spawn point) to stop them spawning all on the same point
 - Remove collision_table and old map stuff
 - Chat
 - Greyscale ships so that the tint always works
 - Master server
 - Sparks off collisions
 - Radar
 - Particle system
 - Notice when someone has won
 
 Network protocol:
 [Packet type][Data]
 
 Data:
 Integers:
 [int]
 Strings:
 [int length][string]
 Floats:
 [float]
 
 Thoughts on networking:
 Check that int is 4 bytes and float is 4 bytes, if not set flag to convert everything
 All thinking done on client-side
 Server acts like cube server
 Server has option to inspect data to prevent cheating (e.g. people moving too fast, shooting too often, etc.)
 Make a function to convert ints and floats to and from 4 bytes, so that wierd people can haz network
 Use TCP
 Maps stored on server, option to download if different MD5 sum
 Master server is a PHP script which receives GET's, and sends plain text
 Master server can send messages to all servers
 
 Upon connection:
 Client sends version number
 Server sends version number
 Either end may refuse to work with the other (but should attempt to co-operate)
 If both sides stay open, server waits for disconnection or packet id 01
 
 Packet types:
 Before game:
 00 - *-* - Version
      [string version]
 01 - C-S - Ready to start networking, server should send game details or ask for new game and send packet 04's
    - [string player_name]
 02 - *-* - Game details
      [string map_name][int max_players]
 03 - S-C - Make a new game
 04 - S-C - New player, clients should add to player_list
      [string name][int spawn_point][int id]
 05 - *-* - Start game, clients should enter game mode and periodically send game information, server should check all are ready
 C-S  [string ship][int r][int g][int b]
 06 - S-C - Initial player details
      [string ship][int r][int g][int b][int id]
 07 - S-C - Your fd/id
      [int id]
      
 During game:
 08 - *-* - Player details, includes player number and stats about health, energy, ammo, co-ordinate, movement vector, etc.
      [int id][float x][float y][float xs][float ys][float angle][float ammo][float power][float shield]
 09 - *-* - New bullet, includes position, movement vector, damage, ttl
      [int owner][float x][float y][float xs][float ys][int life][float damage]
 10 - *-* - Power up taken, includes all necessary to identify which one it was
 11 - S-C - End of game, includes information specific to end of current game type (e.g. winning player, stats, etc.), mode now switches to before-game
 
 Any time:
 12 - *-* - Chat, server should forward to other players, clients should display on screen
 C-S  [string message]
 S-C  [string message][int id]
 13 - S-C - Player left
      [int id]
 14 - S-C - You're not wanted
      [string whynot]
      
 Thoughts on particles:
 Arbitrary particle struct for explosion, spark, etc.
 Replace bullets with particles (?)
 Additive blending on some types
 Optional damage
 Fade to black
 When completely black, delete
