Google Summer of Code

From BZFlagWiki
Revision as of 16:08, 19 March 2007 by Learner (Talk | contribs) (bzflag launcher)

Jump to: navigation, search

BZFlag has been accepted to participate in the 2007 Google Summer of Code. We are currently accepting applications and proposals to work on BZFlag; please apply through Google. While there are lots of Ideas floating around of varying utility to the game, the ideas listed below are specific areas that we are interested in seeing worked on as part of the GSoC. These tasks are selected according to the overall impact that they can make to the game, feasibility of implementation within two or three months, and overall interest in having such modifications made to BZFlag. While there's no guarantee that work on any code will be integrated, this is very much the desire and intention -- it is expected that students will interact on the #bzflag IRC channel on the Freenode network, abide by the DEVINFO rules, and focus on providing a clean maintainable implementation.

Preparing an Application

There is no specific format to applications, but you should be detailed in your approach and background information about yourself. Please state specifically what you indend to deliver and any implementation details you feel relevant such as what language you intend to use. C/C++ proposals are preferred though others will be considered. Please do not just submit the summaries contained below as they are high-level ideas. Your proposal should be detailed and more specific. Submit your application to Google here.

Proposal Ideas

Please note that you are also welcome to apply with your own original ideas. You may wish to run them by one of the developers beforehand, as there are some ideas which will not be accepted regardless of the quality of the application and applicant, due to desire to preserve the scope and focus of the project.

Graphics Engine Integration

One of the long-standing desires for BZFlag is to improve the graphics capabilities in the game by integrating with an existing rendering engine. This task would be to integrate BZFlag with a graphics engine like OGRE, Crystal Space, OpenSceneGraph, or Irrlicht.

Dead Reckoning Networking Enhancements

The basic idea is to improve BZFlag's networking by performing dead reckoning on the server along with context-sensitive packet delivery culling. Much work has gone into the game towards moving more and more of the game state to the server, but there is additional migration and protocol changes required. Similarly, network utilization can be optimized by not relaying certain packets (like miniscule position updates to distant players) based on the current game state. Some useful background reading for this task include "Fairness in Dead-Reckoning based Distributed Multi-Player Games (pdf)" and "Accuracy in Dead-Reckoning Based Distributed Multi-Player Games (pdf)".

Headless Artificial Intelligence Agent

This task involves creating a clean stand-alone version of the game client that is headless (i.e. requires no GUI to run), programmable, and scriptable. Ideally, a programming interface that is compatible with an existing framework such as the Robocode API should be made available for controlling AI tank players so that collaboration with other AI efforts can be leveraged. A scripting interface (perhaps using SWIG) should be provided on top of that API to allow dynamic control of the AI agents from a scripting language like Python, Ruby, Lua, Tcl, or Perl.

Global Authentication Daemon

Building upon the existing global login infrastructure, the goal of this project would be to provide global account management from within the game client. Working with the other developers, this effort involves writing an authentication daemon in C++ that the client and game servers talk to for account and group management information. The daemon in turn should talk to an LDAP server for persistent storage on the backend, and allow chaining across multiple daemons for data replication and failover service. The daemon will need to provide a well structured communications API that the game client and game servers can securely talk to to register, authenticate against for login, obtain group membership information, and statistics information.

Network Testing and Simulation Environment

This task should provide a controlled testing environment for simulating network behavioral characteristics, including the ability to change virtual network parameters to induce different network conditions of lag and packet loss. This environment should provide a viewer capability to observe interactions of BZFlag clients being tested from the perspective of the player, the server, and third-party observers. This simulation framework should work with the client and server directly so that testing of actual changes may be performed in a stand-alone environment.

World file layout and editing application

This task should produce an application for the creation/modification/arrangement of BZW map files and objects in a visual manner. The application should be designed in a cross platform compatible manner (ether some existing cross platform framework, or a built in platform system). The application should be able to manage all the existing structures in a BZW world file. Ideally, the application should also be able to import 3d meshes from other design applications. It would not be required to be able to dynamically edit meshes in the application.

IRC communications backend

There are plans to integrate BZFlag servers onto an IRC network such that all servers will have a shared server-to-server global communications backend as well as access from IRC. The servers would effectively act as a filtered proxy for all clients, receiving and relying messages from/throughout the network. The game clients themselves would not connect to IRC in order to avoid configuration issues (e.g. firewalls) and abuse. Each BZFlag server would, however, join an IRC network (Freenode) and act as a relay for select messages; allow for server control and message relay from within IRC; and provide server-specific channels as well as join a unified channel for all servers. This implementation should use an existing IRC networking interface like libIRC instead of being home-grown.

In-game IRC client

The basic idea is to provide a means for players to connect to BZFlag IRC channels on Freenode from within the BZFlag client. Similar to other games that provide this functionality, the interface is separate from the game itself usually as pre-configured menu options whereby players could join an IRC channel instead of joining a game server to communicate/collaborate. There should be measures in place to reduce IRC abuse such as channel limiting (either outright to a predetermined set of channels or via some naming convention like #bz_hepcat), flow and flood limits, and optional language/spam filtering. Use of existing IRC libraries or clients such as libIRC, irssi, mIRC, or others would be strongly preferred (with attention towards ease of integration and maintainability).

BZFlag Launcher

This task would involve implementing a BZFlag "launcher" that allows for configuration of certain game aspects prior to starting up the full client environment. A configuration splash screen of sorts that allows selection of full-screen or windowed, video modes, performs any useful setup, perhaps server selection, or more (there are loads of options possible, see -help list). The interface should be as extensively cross-platform (as much as existing client), easy to integrate with (no introduction of complex dependencies like qt or gtk), and easy to maintain -- ideally using existing BZFlag GUI routines or some small/lightweight GUI library like CEGUI.

New Flag(s)

At the core of BZFlag is the idea of game flags that enhance or modify the behavior of the game. They can be good or bad flags with fairly arbitrary behavioral changes. This task would involve picking one or more of the approved Flag Ideas and implementing it cleanly through to completion.


BZFlag is always open to new development ideas and is under constant improvement. If you are familiar with BZFlag's current capabilities and would like to propose some new enhancement, we'd be happy to hear about. Please discuss any new ideas with the existing core developers (on our IRC channel), if only to make sure the ideas are in-line with the spirit and constraints of the game.

Promotion Flyers

BZGSoC2007 small.gif

Feel free to use the below flyer to help spread the word about our involvement with the Google Summer of Code. We'd love to hear about where all our flyer has been posted at through our IRC channel. Flyers have been translated to other languages that we have mentors for, though please submit your application in English. While many developers can converse (fluently) in other languages, we do ask that developer discussions be held in English where possible.

Mentors and Credits

Thanks to the following BZFlag developers for their participation as mentors:

  • Julio Borreguero (aka jujibo aka Manu)
  • Sean Morrison (aka learner aka brlcad)
    • interested in AI and authentication list server services
  • Jeffrey Myers (aka JeffM2501)
    • interested in game editor
  • Daniel Remenak (aka DTRemenak aka Erroneous)
  • Mark Thomas (aka menotume)
  • David Trowbridge (aka purple_cow)
  • Alfredo Tupone (aka c3po)
    • interested in Crystal Space integration

Additionally, special thanks to others in #bzflag that have provided support and feedback including:

  • a_meteorite and DTRemenak
    • for proofreading and copy editing the GSoC submission
  • JeffM2501 and DTRemenak
    • for proof editing the promotional flyer
  • Saturos
    • for translating the promotional flyer to German
  • quantumdot and Manu
    • for translating the promotional flyer to Spanish
  • others...

Thanks for your interest and we look forward to seeing students apply!