This wiki is archived and useful information is being migrated to the main bzflag.org website

Editing Google Summer of Code/2009

Jump to: navigation, search

Warning: The database has been locked for maintenance, so you will not be able to save your edits right now. You may wish to copy and paste your text into a text file and save it for later.

The administrator who locked it offered this explanation: Archived wiki

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
The 2009 Google Summer of Code was announced in February, 2009.  BZFlag is once again participating as a mentoring organization.  Given our enormously successful participation in the program in 2007 and 2008, we are very excited to be participating again.  We accepted 4 student project proposals for 2009.
+
The 2009 Google Summer of Code was announced in February, 2009.  BZFlag will again be applying as a mentoring organization.  Given our enormously successful participation in the program in 2007 and 2008, we're very excited to be participating again and we're very happy to see the applications that were submittedBZFlag will be accepting student project proposals from March 23 until April 3.  Hints and tips on  [[Google_Summer_of_Code|getting started, preparing a submission, and the application process]] were available.
 +
 
 +
= Promotion Flyers =
 +
 
 +
We're now soliciting designs for our 2009 GSoC promotional flyer. If you are interested in providing a design, please contact us!
  
 
= Proposal Ideas =
 
= Proposal Ideas =
Line 13: Line 17:
 
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.
 
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.
  
'''Difficulty''': variable
+
Difficulty: variable
  
  
=== Lots o' Bug fixing ===
+
=== Cheat preventions ===
'''''It is often very complicated, difficult, and sometimes not very glamorous but this is our top-priority for 2009.'''''
+
This task involves making BZFlag more robust towards preventing various cheats from working in the game.  This task implicitly requires adding protections on the server, moving game logic from the client to the server, and/or adding heuristics and other measures for detecting and dealing with cheat clients. The student should have a strong grasp of the variety of BZFlag cheats that are available.  Please go into detail about which cheats you're interested in preventing and how you intend to employ those preventive measures. For information on known cheats, check out the [[Known Cheats]] wiki page.
  
Basically, this project idea is right up in line with helping new developers become familiarized with the BZFlag code and to help us improve our code quality for an upcoming major release.  Propose fixing bugs.  You can propose fixing a lot of them or just a few, but you should be detailed and methodical in your approach.  Refactoring work related to fixing a bug is great.  A progressive/agile/iterative approach to identifying which bugs you intend to look into and fix would also be fantastic.
+
Difficulty: medium
  
There is an extensive list of bugs that need to be addressed at https://sourceforge.net/tracker2/?group_id=3248&atid=103248 and http://bzflag.svn.sourceforge.net/svnroot/bzflag/trunk/bzflag/BUGS at your disposal.
 
  
'''Requirements''':
+
=== Modularization of game logic ===
*Familiarity with C/C++
+
Much of the game logic is presently mixed in with BZFlag's graphics code. This lack of organization make it difficult to find code when necessary, and does not allow bzfs, bzrobots, or other tools to utilize the game logic. The game code should be modularized into [[DevelopmentGoals#libGame|libgame]] so that all that is left in the client code is the graphics subsystem. This will also ease the possible future integration of a 3D graphics engine.
*Good problem solving and diagnostic skills
+
*(optional) Proficient with a debugger (you will be by the end)
+
  
'''Difficulty''': variable
+
Difficulty: low
  
  
=== Cheat preventions ===
+
=== Modularization of OpenGL logic===
This task involves making BZFlag more robust towards preventing various cheats from working in the gameThis task implicitly requires adding protections on the server, moving game logic from the client to the server, and/or adding heuristics and other measures for detecting and dealing with cheat clients.  The student should have a strong grasp of the variety of BZFlag cheats that are availablePlease go into detail about which cheats you're interested in preventing and how you intend to employ those preventive measures. For information on known cheats, check out the [[Known Cheats]] wiki page''This is a high-priority idea.''
+
BZFlag's graphics code is (unfortunately) spread throughout the codebase with OpenGL calls being made in thousands of placesThe goal of this project would be to encapsulate *all* of the OpenGL calls into one place as a first step towards encapsulating all of the graphics code so that we can adopt a 3D rendering engineThis project should not be to integrate with an engine, though, as there's too much that needs to happen beforehandStep one is getting all of the graphics code contained.
  
'''Requirements''':
+
Difficulty: low
*Strong familiarity with C/C++
+
*Basic familiarity with client/server networking applications
+
  
'''Difficulty''': medium
 
  
 +
=== 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.
  
=== Modularization of game logic ===
+
Difficulty: low
Much of the game logic is presently mixed in with BZFlag's graphics code. This lack of organization make it difficult to find code when necessary, and does not allow bzfs, bzrobots, or other tools to utilize the game logic. The game code should be modularized into [[DevelopmentGoals#libGame|libgame]] so that all that is left in the client code is the graphics subsystem. This will also ease the possible future integration of a 3D graphics engine.  ''This is a high-priority topic.''
+
  
'''Requirements''':
 
*Familiarity with C/C++
 
  
'''Difficulty''': low
+
=== Lots o' Bug hunting ===
 +
Basically, this project idea is right up in line with helping new developers become familiarized with the BZFlag code and to help us improve our code quality for an upcoming major release.  Propose fixing bugs.  You can propose fixing a lot of them or just a few, but you should be detailed and methodical in your approach.  Refactoring to fix a bug is fantastic.  A progressive/agile/iterative approach to identifying which bugs you intend to look into and fix would also be great.
  
 +
There is an extensive list of bugs that need to be addressed at https://sourceforge.net/tracker2/?group_id=3248&atid=103248 and http://bzflag.svn.sourceforge.net/svnroot/bzflag/trunk/bzflag/BUGS at your disposal.
  
=== Modularization of OpenGL logic===
+
Difficulty: variable
BZFlag's graphics code is (unfortunately) spread throughout the codebase with OpenGL calls being made in thousands of places.  The goal of this project would be to encapsulate *all* of the OpenGL calls into one place as a first step towards encapsulating all of the graphics code so that we can adopt a 3D rendering engine.  This project should not be to integrate with an engine, though, as there's too much that needs to happen beforehand.  Step one is getting all of the graphics code contained. ''This is a high-priority topic.''
+
 
+
'''Requirements''':
+
*Familiarity with C/C++
+
*Basic familiarity with OpenGL
+
 
+
'''Difficulty''': low
+
 
+
 
+
=== 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.  ''This is a high-priority topic.''
+
 
+
'''Requirements''':
+
*Familiarity with C/C++
+
*Strong familiarity with networking applications and implications
+
  
'''Difficulty''': medium
 
  
 
==Additional Project Ideas ==
 
==Additional Project Ideas ==
Line 75: Line 58:
  
 
=== BZWorkBench world editor enhancement ===
 
=== BZWorkBench world editor enhancement ===
''This project is a continuation of a previous GSoC project.  Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.''
 
 
 
As a participant in last year's program, Jude Nelson started work on BZWorkBench.  It is a world file editor with a very solid foundation but much work still remains to be done, including a cross-platform GUI, mesh support, and other editor features.  Ideally, two students would work on this.  For example, one student could focus on improving the GUI's workflow and ease-of-use, and another could focus on finishing the back-end object manipulation.
 
As a participant in last year's program, Jude Nelson started work on BZWorkBench.  It is a world file editor with a very solid foundation but much work still remains to be done, including a cross-platform GUI, mesh support, and other editor features.  Ideally, two students would work on this.  For example, one student could focus on improving the GUI's workflow and ease-of-use, and another could focus on finishing the back-end object manipulation.
 
 
The current GUI does not conform to a specific HIG, nor does its usability resemble many other 3D editors; this should change.  The back-end still lacks support for many of the objects added in BZFlag 2.0, such as Meshes, texture matrices, dynamic colors, etc.
 
The current GUI does not conform to a specific HIG, nor does its usability resemble many other 3D editors; this should change.  The back-end still lacks support for many of the objects added in BZFlag 2.0, such as Meshes, texture matrices, dynamic colors, etc.
  
'''Requirements''':
+
Difficulty: high
*Familiarity with C/C++
+
*Ability to read through other people's code
+
*Basic GUI, interaction, and usability design
+
*Acceptance testing
+
 
+
'''Difficulty''': high
+
  
  
 
=== Global authentication daemon ===
 
=== Global authentication daemon ===
''This project is a continuation of a previous GSoC project.  Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.''
 
 
 
The goal of this project would be to provide global account management system daemon that the client and servers would communicate with for account, group membership, and profile information.  This effort preferably be written in C++, would need to 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 would need to provide a well structured simple communications API that the game client and game servers can securely talk to.
 
The goal of this project would be to provide global account management system daemon that the client and servers would communicate with for account, group membership, and profile information.  This effort preferably be written in C++, would need to 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 would need to provide a well structured simple communications API that the game client and game servers can securely talk to.
  
'''Requirements''':
+
Difficulty: medium
*Familiarity with C/C++
+
*Familiarity with LDAP
+
*Familiarity with client/server networking applications
+
 
+
'''Difficulty''': medium
+
  
  
 
=== Enhanced server listing ===
 
=== Enhanced server listing ===
''This project is a continuation of a previous GSoC project.  Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.''
 
 
 
The game client includes a simplistic listing of publicly available servers.  This task would involve significantly enhancing the listing section in BZFlag to allow for various sortings (e.g. ping time, country, name, etc), favorites, recently used, specific additional information on specific servers, and all existing information.  The task would involve coming up with a user-friendly design that is fully keyboard-accessible.  It could leverage external gui toolkits, use BZFlag's existing gui library, and/or extend the existing capabilities.  The focus would be on creating an intuitive and informative listing enhancement within the constraints of the gaming interface.
 
The game client includes a simplistic listing of publicly available servers.  This task would involve significantly enhancing the listing section in BZFlag to allow for various sortings (e.g. ping time, country, name, etc), favorites, recently used, specific additional information on specific servers, and all existing information.  The task would involve coming up with a user-friendly design that is fully keyboard-accessible.  It could leverage external gui toolkits, use BZFlag's existing gui library, and/or extend the existing capabilities.  The focus would be on creating an intuitive and informative listing enhancement within the constraints of the gaming interface.
  
'''Requirements''':
+
Difficulty: low
*Familiarity with C/C++
+
*GUI, usability, and interaction design
+
*Acceptance testing
+
  
'''Difficulty''': low
 
 
 
=== BZRobots ===
 
''This project is a continuation of a previous GSoC project.  Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.''
 
 
BZFlag now has a programmable game client that can be used to implement artificially intelligent (AI) computer players.  More work is needeed, though, to clean up the code and deliver bzrobots as a new easy-to-use feature to users.  More work is needed.  BZRobots conforms to the Robocode API with a few minor (yet necessary) deviations, yet there are a few protocol actions that still need to be implemented.  There is also lots of code quality and refactoring issues that need to be addressed.  Presently, the code is a copy of the entire client code with user input removed so when a change or bug fix happens to the client, it has to also be manually changed in the bzrobots copy of the code.  The code needs to be refactored into common logic shared by both game clients. 
 
 
See [[BZRobots]] for more information on the current status as well as src/bzrobots in a source checkout.
 
 
'''Requirements''':
 
*Familiarity with C/C++
 
*Ability to read through an existing code base and refactor appropriately
 
 
'''Difficulty''': low
 
 
 
=== Finish server-side players ===
 
BZFlag includes players that can be run and managed from the server through a server-side plug-in.  Unlike the client-side BZRobots project, server-side robots have entirely different issues that they have to account for and information that they have access to.  This project would entail taking the work that has already been started to completion.  As this is a continuation, please do contact the developers before proposing this idea to determine the current status and work required.
 
 
'''Requirements''':
 
*Familiarity with C/C++
 
*Ability to pick up a work-in-progress
 
 
'''Difficulty''': medium
 
  
 
=== Dead Reckoning and other Networking Enhancements ===
 
=== Dead Reckoning and other 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 "[http://www.research.ibm.com/netgames2005/papers/aggarwal.pdf Fairness in Dead-Reckoning based Distributed Multi-Player Games (pdf)]" and "[http://www.sigcomm.org/sigcomm2004/workshop_papers/net610-aggarwal.pdf Accuracy in Dead-Reckoning Based Distributed Multi-Player Games (pdf)]".
 
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 "[http://www.research.ibm.com/netgames2005/papers/aggarwal.pdf Fairness in Dead-Reckoning based Distributed Multi-Player Games (pdf)]" and "[http://www.sigcomm.org/sigcomm2004/workshop_papers/net610-aggarwal.pdf Accuracy in Dead-Reckoning Based Distributed Multi-Player Games (pdf)]".
  
'''Requirements''':
+
Difficulty: high
*Strong familiarity with C/C++
+
*Strong familiarity with networking applications
+
 
+
'''Difficulty''': high
+
 
+
 
+
=== Two-player tanks ===
+
This always gets some folks excited, but you will have to have already done a lot of research and make a good proposal before this idea will be considered.  That said, the topic of having two-player tanks where only one player drives and the other player only shoots has come up many times over the years.  BZFlag doesn't allow turret control specifically as a game design feature.  An initial two-player tank arrangement would probably not deviate from that requirement initially.  Lots of testing, interaction, and feedback are required for this feature to make it to release given how much it potentially would affect gameplay.
+
 
+
'''Requirements''':
+
*Familiarity with C/C++
+
*Strong ability to read through existing code
+
*Acceptance testing
+
 
+
'''Difficulty''': high
+
(the implementation itself is not hard at all, the acceptance testing will be)
+
 
+
 
+
=== Multiple display support===
+
Add the ability to effectively manage multiple display environments from within the game allowing for the detection, alignment/orientation specification, and resolution parameters for each display via menu options as well as proper full-screen and/or windowed support. An additional feature could involve allowing the user to dedicate a display to the various primary GUI elements (the 3-D environment, the radar, and the chat console). BZFlag's current context management is mostly handled by SDL or other platform-specific modules, so this could be taken into consideration. There's also the possibility of our move to an integrated graphics engine would similarly impact how multidisplay contexts are created and managed.
+
 
+
'''Requirements''':
+
*Familiarity with C/C++
+
*Familiarity with SDL
+
 
+
'''Difficulty''': low
+
 
+
=== Cross-server communications system ===
+
''This project is a continuation of a previous GSoC project.  Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.''
+
 
+
This task would be the design and implementation of a server spanning chat system. It would allow players from one server to send chat messages to players on other servers. It should also be able to be used to allow players to know where there friends or "buddies" are playing if they are online. The system should tie into the central user name registration system. Added benefits would be the use of existing protocols or applications, such as Jabber or IRC, if they can be integrated cleanly. Support for using off-line apps for chat and friends list access as well as server management would be a plus.
+
 
+
'''Requirements''':
+
*Familiarity with C/C++
+
*Familiarity with networking applications
+
*Acceptance testing
+
 
+
'''Difficulty''': low
+
 
+
 
+
===In-game profile management===
+
BZFlag allows players to specify a callsign and team in addition to other player characteristics and preferences. This enhancement would focus on allowing the user to specify and manage multiple profiles from within the game. Profiles could be linked together and should be presented in an intuitive manner (proposal should highlight how you'd go about achieving that). The profiles would need to associate with global account information as well.
+
 
+
'''Requirements''':
+
*Familiarity with C/C++
+
*Familiarity with GUI, interaction, and usability design
+
*Acceptance testing
+
 
+
'''Difficulty''': low
+
 
+
 
+
=== Integrated BZFS web interface (aka BZ's WebAdmin plugin) ===
+
''This project is a continuation of a previous GSoC project.  Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.''
+
 
+
The BZFlag game server, BZFS, could benefit from having a browser-accessible http/https interface for viewing server statistics, setting various parameters, and otherwise controlling the server daemon while it is running. Similar to how your network router has a web interface for changing configuration parameters, this idea is simply to create this interface in a maintainable and portable manner. There was a previous GSoC project that worked on a server-side plugin that provides this feature, but it needs a lot more work both on the interface and in the logic.  Be sure to discuss this with the developers before suggesting it.
+
  
'''Requirements''':
 
*Familiarity with C/C++
 
*Familiarity with GUI, interaction, and usability design
 
*Acceptance testing
 
  
'''Difficulty''': low
 
  
 
= Mentors =
 
= Mentors =
Line 216: Line 93:
 
* Scott Wichser (Blast/Blast007)
 
* Scott Wichser (Blast/Blast007)
 
* David Wollner (JB diGriz)
 
* David Wollner (JB diGriz)
* Joe VanOverberghe (joevano/Donny_Baker)
+
* Joe VanOverberghe (Donny_Baker)
 
* James Lawrence (spldart)
 
* James Lawrence (spldart)
* Bernt Hansen (Thumper_)
 
* Jeff Makey (BulletCatcher)
 
* Jørgen Pedersen Tjernø (jorgenpt)
 
* Joshua Bodine (Constitution)
 
  
 
[[Category: Development]]
 
[[Category: Development]]

Please note that all contributions to BZFlagWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see BZFlagWiki:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel | Editing help (opens in new window)