This wiki was in read-only mode for many years, but can now be edited again. A lot of information will need to be updated.
User:KingofCamelot
Google Summer of Code Application
This is my proposal for enhancing the current BZFlag server listing.
Abstract
In it's current implementation, the BZFlag server listing provides a basic listing of playable servers, with a basic server name search feature. However, it is lacking many of the more powerful sorting and filtering features that most modern games include in their server browsers. The C++ code for the server listing is also lacking any real comments, making it hard to decipher, and is designed at the moment to be rather singularly functional, written for the current listing, without much room for expansion without some serious re-writing. As the number of BZFlag servers continues to grow, a user-friendly server listing, with sorting and filtering options, is quickly becoming a necessity. While BZFlag doesn't need the end all of server listings, the current server listing is pretty bare bones, and makes it difficult for players to find specific servers which match their tastes.
I propose revising the current server listing, using the current menu system. This revised server listing will include several new features, built upon a well commented code base, making future additions and renovations to the server listing quick and easy. The revised code will also be designed with future improvements in mind (such as a buddy list) and as such will be coded broadly, to allow for easy integration of add ons, instead of coded narrowly, like the current server listing, which is so specific to it's current form that it is hard to add onto without much re-writing. The new features I propose to implement will include: sorting options, filter options, a players on server list, and a recently played server view. The current server listing view will also be re-arranged and expanded upon in order to accommodate the new information. This new server listing view will best be discussed amongst the developers and the community, although I provide a mock-up of one possible solution (see appendix). The server sorting options will include: sort by domain name (alphabetically), sort by server name (alphabetically), sort by players (numerically), sort by map name (alphabetically), and sort by client to server ping (numerically). The filter options will allow server filtering by various server-specific settings, by server capacity status (show full servers, show empty servers), and will include a server name filter (including wild cards). If desirable, a domain name filter may also be implemented. The players on server list is fairly self-explanatory, displaying the name and team of players on the currently highlight server. The recently played server view will be an alternative server list, along with a favorites list. The user will be able to switch between the normal server list, the recent list, and the favorites list, and may set different filter and sorting options for each.
One major 'concern' that must be addressed during all of this re-configuring of the server listing is to not make it overly complex, since one requirement is that the entire menu be keyboard accessible. This is a unique challenge since most server browsers in mainstream games use many mouse activated features. However, I feel with clever design a user-friendly, keyboard accessible menu can be designed. My mock-up gives a basic keyboard interface, and my detailed explanation will expand on this further. In the end, the user should always know how to use the menu, without being overloaded in a sea of explanations.
This will all be implemented by expanding the current server listing code (and re-writing as necessary). As such it will be written in C++, and will work off of the current dependencies. All of the information needed for the enhanced server listing is already provided in the current code, it just needs to be tapped into. As mentioned earlier, the entire server listing code will also get generous commenting (but not too much), to ensure that in the future it is easily modified as new needs arise. I will also provide wiki documentation for the code, allowing me to be descriptive without overloading comments in the actual C++ code. The code will be written with re-usability in mind, and will be made as dynamic as possible, so that in the future it can be expanded upon, instead of re-written. Obviously no one can predict all future needs of specific code, but due to the fairly narrow scope of a server listing, I feel that most features can be written in a way that will lend themselves to future modifications.
Detailed Proposal
About Me
My name is David Sanders, and I'm a first-year Computer Science major at the University of California at Santa Barbara. My nickname in the BZFlag IRC channel is KingofCamelot, and I have been idling in there the past few days, talking to several of the BZFlag devs (including JeffM, blast007, Manu, and DTRemenak). I have experience working in BASIC, VisualBasic, C, C++, Java, Python, and HTML/CSS. I have worked the most extensively with Python and Java, although I am proficient in C/C++, as my patch submission should demonstrate. I have no formal training in either C or C++, so some I'm somewhat rusty in certain areas, but I am constantly expanding my knowledge through online resources when problems arise, and I am definitely a competent programmer in both.
I have not worked on any open source projects before, but I do have quite a bit of experience in video game modding. I've modded Civilization III, Battlefield 1942, Battlefield Vietnam, and Battlefield 2. Most of this modding was just exploration for my own curiosity, but after Battlefield 2 came out, I joined the Project Reality mod team, and spent almost two years as an active developer. I'm proud to say that in that two year time span the mod won 2nd place in ModDB's Mod of the Year contest twice (2006, 2007). Although video game modding and open source projects are obviously not the same thing, I feel that they have quite a few similarities, and that the modding community has been especially influenced by the open source community in recent years. During my time on the Project Reality mod we used SVN extensively for all of our coding and changes, so I am more than comfortable and familiar with the system. The modding project was also very collaborative with much discussion between developers, community, etc. After spending some time on the BZFlag IRC channel, it seems to me that the BZFlag team is very much the same way. I like to think that my experience with Project Reality has made me quite good at communicating and collaborating with other developers, and has made me comfortable with the critiquing, debating, and discussion that goes into making strong releases. With Project Reality's team extending from the United Kingdom to Germany to Brazil, etc, I feel I have improved my people skills quite a bit. Project Reality, like BZFlag, is very community oriented, and we took a TON of input from the community, asked for input on potential changes, etc, so I am more than used to including and respecting the community during development, as well as interacting with them.
I hope that wasn't too much description, I just wanted to make it clear that I have quite a bit of experience in a similar field to open source. One thing that always frustrated me about modding for Battlefield 2 was the lack of source code. As such, I am more than excited to work on a project that gives me full access to the code and the freedom to be innovative and creative. In fact, the night I got MSVC 2005 set-up and got BZFlag compiling I was so excited to begin working with the code that I stayed up until 7:30 AM before I realized I should sleep. Now that I've begun modifying BZFlag I can tell that I'm probably going to get sucked in, whether or not my application is accepted. The developers I've talked to in the IRC channel seem like great guys, and have been really helpful. The reason I stopped being an active developer on Project Reality (although I still maintain a presence in the community) was that after entering college I did not have nearly as much time as I had in the past to work on it. I will have to get some kind of job over the summer one way or another, so I am really hoping that my application gets accepted, allowing me to focus my attention on BZFlag and my proposal. As mentioned before, with Project Reality the lack of full control through source code was also becoming increasingly frustrating as we tried to push the game engine's limits further. I see working on BZFlag as the next logical step in my own progression of video game coding, from video game modding to open source coding. With the summer coming up I can't wait to focus my attention on BZFlag, and I hope to become a long-term developer for the BZFlag community, like I became with Project Reality.
Appendix
Patch Submission
Full Resolution Mock-up
Resized Mock-up
Bastardized Full Resolution Mock-up
Resized Bastardized Mock-up
Battlefield 2 Server Browser
Quake 4 Server Browser
Counter Strike: Source Server Browser
Tom Clancy's Rainbow Six: Vegas Server Browser