 Okay, so I'm going to talk to you about Battle Force North, which is a turn-based strategy game that has been developed by a large community of users and contributors and developers. It's a hex-based game in a traditional war game format, but it has some differences. It's simplified, so it doesn't take hours and hours to play. You can play a pretty decent game of it in an hour or two. It has a lot of role-playing style elements. It borrowed a lot from the sort of tripple runs on a greatest part. We're hoping that once Apple releases their SDK, we might get it working on the iPhone and iPod Touch. It's also very customizable. It's very moddable. We've worked very hard on making the basic game engine, which was originally developed just for one specific storyline and one specific concept, but we've worked very hard on extending it to work with a lot of different game concepts that stretch far beyond the original vision of that. So what's so special about it? We have a very large developer and player community, at least relative to other typical games. We have thousands and thousands of users. WebNOS has been downloaded more than a million times. It's also been distributed many times with different magazines. It has distributions for many Linux distributions, such as Debian and Ubuntu and Gen2. It's a very mature project. It's already reached a stage where it can run very stably. It has a lot of features. It's got a very rich feature set so that it's not just a very basic simple game, but it has network multiplayer, it has the interview replays, it has a very large wide tool set that many contributors have developed for it. It's also got very high quality artwork relative to other games. It has very good graphics, very good music. We have a sub-community of artists who work hard to improve their own artistic skills and to contribute to WebNOS. It's also very well balanced out. We have another sub-community who is very interested in making sure that WebNOS has a very balanced gameplay, and they work continuously to tweak every element of the game. We use a variety of technologies in WebNOS to make everything work. The main game engine is programmed in C++. We use an affiliate advanced C++ style. We use the STL, so vectors and maps and the standard STL algorithms. We use a little boost has been creeping in, which if anyone doesn't know, boost is an advanced C++ library which is designed to experiment with more advanced C++ features that might be candidates for future standardization efforts in C++. We do all of our graphics and sounds using the simple direct media layer, or STL. That's a basic library which allows one to give access to a simple frame-buffer and events interface, and it comes with a host of other libraries which we use such as STLNet, which we use for networking, STLTTF, which gives us true type font support, and STLImage, which allows us to load images in a variety of formats, such as PNG is the main image format we use. These libraries give us the same interface across all the platforms that we run on. That credit should be given to the STL for allowing us to run on Windows, Mac, Linux, and many other platforms. We've noticed it's internationalizable, you can get text, and that's enabled it to be translated into 40 different languages. We also use Python just a little bit to allow for AIs to be scriptable in Python. This wasn't originally planned, but it was out of later, and our use of Python is fairly limited, but we use it here. We also use both Python and Perl to produce many scripts and tools, which we used to facilitate development. We do tend to avoid too many dependencies. Most web-noth technology is fairly homegrown. We don't even use, for instance, XML. We've developed our own format for sharing data, and this has been controversial how much technology we've homegrown, a lot of contributors complain that we reinvent the wheel too much, but on the other hand, we've had a lot of problems even with the dependencies that we do use, and so we're generally very resistant to adding new dependencies because we feel it increases the number of bugs that we could introduce, which we don't have close control of. Web-noth has a very large and vibrant community. Probably the biggest area the community is in a web forum we have, and that's where users tend to communicate, users tend to get help with bugs and so forth. This is a little different to traditional open-source projects in that we don't use a mailing list. However, we've found that it makes it very accessible to users. We use a PHPBB-based forum, which unfortunately is a reasonable forum, but we've found it has a lot of maintenance effort associated with it, and we've gone through several different developers who have been responsible for maintaining the forum and keeping up-to-date with security patches and have all gotten frustrated and left one up to the other. So if anyone wants to maintain a PHPBB forum, please let me know. Then the main place probably that developers communicate is on IRC. We find that IRC is very useful because often if someone posts on a mailing list or a forum, people find the person mildly interesting but aren't interested enough to respond, and responses only occur if someone usually strongly disagrees with something in the email or forum post. Well, an IRC channel has the disadvantage that one of time zones, that one may have a question and other people aren't there, but it has the advantage that people feel it's a lot more casual. They can communicate in real time and so forth. So most of that development takes place on WebNOS Dev on IRC.frino.net and some of the other WebNOS channels I was here. We also do have a developer mailing list, and this is sometimes used for more serious or perhaps even controversial discussions and for big announcements and so forth. And we also have a bug tracking system which we use quite extensively, which we point somewhere to if they have a bug to file. So what's so hard about making a free game? There's several things we found which do make it hard to make a free game. There are actually, unfortunately, very few really good quality free games out there, especially compared to commercial game development. So I've listed a few points here that I think make it very hard to make a free game. For instance, with most open source projects, it's often at least reasonably clear which direction the project should go in. But with a game project, one can take it in almost any direction. And we constantly get users or contributors who want to take WebNOS in a completely different direction and who think that it should go in a, it should become something different. And we even sometimes get some very good contributors who might contribute some very good art or some very good code. But in part of their contribution, they want to take WebNOS in a very different direction to where it is now. And sometimes we find that we have to be kind of resistant to that. Sometimes we have to discuss things in great ways to decide where to take the game. Also, with a game project, there's no real ending. A game can be improved indefinitely. It can be improved forever. There's no, it's difficult to ever say that a certain feature is complete. And it's always very subjective. To one person, some gameplay might be completing great and to another person it might be horrible. A very big example of this is WebNOS uses random numbers quite heavily to resolve combat. And some people love this because they think it gives them a chance to analyze all the different probabilities. Well, some people hate it and think that WebNOS should become a lot more deterministic. And also, to make a game, you have to master many different areas. You have to have people who can be technically excellent. And I think many people underestimate how difficult it is to program a game. And you also have to have excellent artists who can draw good graphics to make your game look appealing, although some games do try to go without that, like Nethack. And you also have to have good game design. It's very possible to develop excellent graphics and even to have a very good engine and have very poor game design. And of course, you have to have play testing. You have to spend a lot of time tweaking the game and doing a lot of argue this work there. So how do all the games? So in 2003, I was at a very boring job and I wanted to do some programming on the side that I would find more interesting. And the reason I learned to program in the first place was actually when I was about 14, I really wanted to make a game. And I tried to make a game and all my attempts were pretty much miserable failures. But I did actually at least decide I liked programming and ended up going to university and studying there. And then, so finally many years later, I was 23. And I decided that why don't I go back and develop a game? And I had noticed that all my previous game projects, I had tried to look at commercial games at the time and say, I'm gonna make a game like that. And I realized that that was really unfeasible, especially by 2003. The many millions of dollars that were poured into a typical commercial game would be very difficult for a single developer. And at this stage, I wasn't counting on any help with the project at all. To match. So I decided that what I would do would be to go and find some old games that I enjoyed when I was much younger and try to make a game that used some of the same concepts. But it definitely wouldn't be a clone of the game, it would be something new. And I figured that if people could make on Genesis and Super Nintendo systems could write in assembly and cram into a couple of megabits a game, I should be able to do something the same or better using C++, using many megabytes of memory and so forth. So I remember a few Genesis games I had enjoyed when I was younger. One was War Song, the other one was Master of Monsters. And I played them a little and I used some of the game concepts to make a very simple Hex War game. And I released it as Battle for Weasel North 0.1. And I didn't really think that much would come of it. But then things got going when just a few weeks after I released it. Francisco Munoz, who's a Spanish developer, he saw it and he liked it. And he sent me some improved artwork for it. And I'm a horrible artist, so the initial version of the game was looked terrible, but and his improvements were a relatively small iteration, but they at least gave me the confidence to release further versions. So I worked with Francisco for a couple of months and then eventually we were getting more interest from other people who sent us emails and said that they liked the game. So we decided to set up a web-based forum and from there a community began forming. It actually took us probably six months before we actually started the CVS repository instead of just shoving tables around, but we did eventually do that. So the Weasel North engine now contained about 90,000 non-blank lines of C++, so it's a medium-sized project. And like I said earlier, it uses a very modern style of C++ and we use a common C++ technique called resource acquisition is initialization, or RAII, which to anyone who doesn't know basically means that instead of, say we wanted to allocate some memory and then we wanted to operate on the memory and then we wanted to free the memory. Instead of doing that straight in code, we would manage the memory with an object that would delete it in its, in its destructor and the C++ language guarantees that behavior. So because of that, there's generally been very few memory leaks in Weasel North over its history. And like I said, we have very few dependencies. We try to program as many things as possible and the engine includes an AI. It includes a parser for our WML language. It contains a random map generator. It contains, we haven't used any third-party theme or widget engine. So we have buttons. We have list objects. We have dialogue objects, all those things we've programmed ourselves. And of course, it has support for all the game objects. So there have been a few problems with Weasel North's design that we've found over the years. One of the problems is that we use SDL, which is probably our only real option for developing a portable game along with perhaps OpenGL. And we have looked at replacing large parts of SDL with OpenGL. However, the problem with OpenGL is that many open platforms still do not have good OpenGL drivers. Also, Weasel North runs on many lower-end machines and many of our users rely heavily on it, running on lower-end machines and are very thankful that it's a quality game that will run even, I think there are some people who have told me they use it on a 486. So if we used OpenGL, all those users would go away. The problems with SDL are that it has a very basic API and there's very little further development on it. I think the lead developer now works for Blizzard and seems pretty vivid in his main job on World of Warcraft or whatever. So there's not that much support for it and worse, it doesn't have very many features. For instance, in SDL, it's difficult to even flip an image in real time. So when we want to store images that must be displayed either left or right-facing, such as a unit image, we will generally have to store both the left-facing and the right-facing version in memory, which blows up our memory footprint pretty heavily. And also, for instance, in this image we see here, we'll see that we have a unit and is trying to move somewhere and the areas that it can't move are displayed with every other line is displayed in black. Now, originally this was coded differently so that the area that the unit can't move to would be displayed in gray. And in my opinion, that looked significantly better, but the problem is that grayscaling an image in real time with SDL wasn't really feedable, so instead we would have to cache a grayscale version of the image as well as a color version and that of course blew up the memory footprint again. So eventually we replaced it with this display, which I think looks a lot worse. Also, the other SDL library, such as SDL-TTF and SDL-NET, we feel even like, SDL is reasonable, but SDL-NET especially, we really don't think is production quality and we'll probably look at replacing it eventually. SDL-TTF, we found a very serious memory leak at one point and it was making Wesnils constantly run out of memory on most machines, so we had to pull in the whole of SDL-TTF into our code base and fix the bug and then ship it with our code until the bug, until the fix to SDL-TTF was widely distributed. And so because of these problems, the major outcome is that Wesnils is sometimes slow, it's also sometimes slow simply because high speed hasn't really been a design consideration. We consider either views, we consider it being very, very flexible and mottable to be a higher priority than it being efficient and usable in memory. Okay, so Wesnils also runs over a network. You can play against another player, you can play a team game, you can play like a cooperative game against the AI, you can play a combination, you can also observe games and so forth. It wasn't originally designed to be networked. When I first developed it, I figured it would always just run on a local machine because I was just developing a very primitive game that I intended only to be playing as to the AI. And also originally saves could only take place at the end of the scenario. So the beginning of networking was when people started complaining to me that you could only save the game at the end of a scenario. I originally thought that was a good feature because it made the game more challenging, you couldn't just save and then you didn't like your combat results so you reload the game, but people still complained about it. So I decided that I would implement saves as the start of scenarios save plus the deltas to record every move you had made and that would be the save. And this also allowed for a replay of a game to be stored because you could use all the deltas to show a replay. And likewise, it also allowed you to just send the deltas of the network to implement network multiplayer. So if it's my turn, I would play and then the move I make would be sent to the other players and then those would be played out on the other machine display. And the implication of this and largely because Blaznos wasn't originally designed to be networked, we have you generally play through a server. But the server is very thin and dumb. It basically does very little except forward data from one player to another. It doesn't inspect the data, it doesn't understand anything about whether it's logic or game engine or anything like that. This has the advantage of also allowing a very efficient server. You can have hundreds of people connected to a single server and playing games and so we don't need a meta server or anything like that. However, people playing against each other must have the same version and the same version of the data. If they modify their version of the game so that their Elvish fighter has 50 hit points instead of 30, then your version won't, we'll expect their Elvish fighter to be dead and their version won't and then the game will report the game that out of sync as others call it. And we generally, the server will make a check to see that you're using the same version as everyone else on the server. So we generally minimize problems by just saying that everyone using say version 1.3.2 has to be on this server. And this means that for anyone who can modify the source code, cheating is very easy because you can cheat to, if there's anything that you're not meant to know about, if you're playing with, say, fog of war, that's where you can't see the area of outside of a certain range of your units, you could cheat by just modifying the source so that you could see that. You could cheat to make the random number generator, generate numbers that are very favorable to you and hope that your opponent doesn't notice. Fortunately, we found that most people who want to cheat aren't really capable enough of modifying the source code. So, so far at least this hasn't been a problem. The most common form of cheating is people who think that modifying it so that their Elvish fighter has 100 hit points will go unnoticed and that the game will very quickly run out. So, since we developed networking, so originally the focus of Wethnoth was on campaigns on the single player mode, then we developed networking, but we didn't originally put too much effort into multiplayer. But eventually a community has sprung up of people who much more interested in multiplayer than myself and the first few developers were. And many of these people were originally just players who played for countless hours and enjoyed it, but found that the game was unbalanced for one reason or another because the game originally was designed for a specific campaign where you're the player who controls humans and elves and you fight against orcs and evil humans and undead and so forth. And because of that, it was, balancing it out didn't matter very much. All that really mattered was that each scenario was fun. It didn't really matter if some evil orcish assassin could always kill the dwarves because if you were the player you didn't just use dwarves against them or whatever. But when people started playing multiplayer, they noticed that for instance, hey, if I'm dwarves and the other player is Drakes, I have no chance of winning on this map. So that's, you know, so it's not very fun. So these players started submitting patches to try to improve the balance. And they've now gotten to a stage where it is actually very finely tuned and we now have six different sides or factions that you can choose when you're playing. And we have about, I think a dozen maps that are all finely tuned so that pretty much any combination of factions and any combination of any of our official maps you'll find is a very balanced game. And we often get new players who pop up especially on the forums and say, you know, if I play dwarves, I can never beat Drakes on this map, it's so unfair. And then we usually refer them to one of our best players who will usually very convincingly beat them with dwarves as the Drakes. Um, so, like I've mentioned, Weznoth uses, Weznoth markup language for all of its configuration. We try to put as much and make the game as configurable as possible. So all everything, like unit settings, to themes, to all campaigns, everything is stored in Weznoth markup language. So it's a simple XML language. It was originally just meant to be a very basic flat config file that just had headings in square brackets and then name value pairs. But it evolved to support child nodes and then to support a lot of many farmer complex features. It also has internationalization support built in so that in WML you just have to proceed something with an underscore and then that string will automatically become a translatable string. And WML is also used as a save game format and the network protocol format. We also have a binary version of it so that we can use that for the network and if people want smaller and faster saves. And that's an example of XML. The XML doesn't really have a good binary standard. It also has a pre-processor to make things easier. And that's very similar to the C pre-processor. So you can hash to find something with some arguments and then make it equal to a block of text. And that saves you, it reduces the velocity really. And yeah, it's evolved greatly over time. It still evolves and it's very flexible in it. If someone requests a new feature and this is very common for like if a campaign designer comes and says I want my, this AI unit in this particular map to follow, like I want him to go for this village because that village is the village that has the princess in it, according to the storyline. Then we can add very easily a new WML attribute which says go for village or something and add it to the unit. Wetnose also has a map editor. And the map editor reuses much of Wetnose code. It reuses all the hex rendering code and so forth. And so it allows very easy and advanced creation of maps. You have a lot of typical features you might expect in a paint type program. So you can have different size brushes. You can use it to generate a random map with certain settings to give you a starting point and it allows flipping of areas and so forth. It's just a map editor. It doesn't support any scenarios. So you can't put units on it in the map editor. You can't control how the AI moves or anything like that. Generally what you do is you take the output of your map and then you put that in a scenario. And you can use that from there. Wetnose is also a very complex problem for an AI. It has a huge state space. Just as an example, if you have just four units that are in range of four enemy units, the number of possible ways to attack, like you could get all four of your units to attack one of the enemy units and then all the different directions from which you can attack. And then there's possible considerations like what if I send this guy to attack and he hits with all his attacks versus what if he misses with all his attacks versus what if he gets half killed by the enemy so now he hardly having any hit points. Can I protect him and so forth? So there's many millions and millions of possible outcomes in any situation which makes it very difficult for an AI. So the default C++ AI has been a lot of work has gone into it to make it as good as possible but even then it's very difficult to make an AI that's competitive of the best players. Still the C++ AI very heavily concentrates on trying to come up with the best possible outcome on the current turn. So for instance, if you put one of your units in a situation where the AI might be able to kill it if it used five of its units against it and your unit was a valuable unit the AI is very good at calculating yeah I have a 90% chance of killing that unit. And originally I actually programmed the AI to do probabilistic outcomes based on a it would run a simulation of a battle 30 times and say 70% of the time this is what happened when I ran a simulation. But then a developer, Rusty Russell who's a fairly well-known Linux kernel developer he joined the West North team and he programmed a much more sophisticated algorithm which actually mathematically analyzes the probabilities and surprisingly quickly comes up with all the possible results of the battle how much damage will be done on average and what's your chance to kill the enemy. And okay, next one. Yeah, is this working? Okay, so there's also support that's been made to write AI's in Python and a Python AI will have full access to all of the game state in West Northern and then we'll make decisions about how the AI is. And there have been several attempts to write AI's in Python and some of them are quite good. It's also good for scenario designer if they want specific behavior in a certain scenario they can add that to the AI. We also try to make the default AI very configurable so that you can use WML to make it say more aggressive or less aggressive or other behavior. So one thing I got to get a lot of questions about is why does West North have such good art? Because while it doesn't have really fancy three graphics considering the design of 2D sprites it does actually really have very good artwork. And especially since it actually began with no artists at all. I'm not an artist and I didn't know anyone who was an artist. So what I did was I tried to make adding art as easy as possible. I made it simply a directory with a whole lot of PNG files and you could just go and edit WML and say this is with unit image, it's this PNG file and that would be used. And then when we add a support for animations and so forth we continue to try to make it as simple and dumb as possible. And I also maintained a policy early on if of many features we wanted such as animations I said to people if you do animations I promise you they'll be in the game next release. And this was very encouraging for a lot of artists because especially many of them told me that they had contributed to other games and it would take many months for their art to actually end up in the game or the game would fall completely or whatever. So artists being able to contribute art and then seeing their art used within a week was very encouraging for artists. It's also interesting that many of West North's current artists actually taught themselves art during West North's development. In fact, our lead artist, Jet Reel, when he first wanted to start doing art for West North he sent me an image that he wanted to contribute and I looked at it and I was like oh my goodness that's terrible. And I think I told him that and he ended up, I said well maybe you should post it on the forums and see what people there think of it. And so he posted it on the forum and people they also told him it was terrible. And I thought that that would be the end of it but he's actually worked incredibly hard to improve his art skills and he's studied the history of art and everything and now he's our lead artist and he's done probably the most artwork of the year in the game of anyone. So over several years he's greatly improved his art skills and the same can be said for many of our other artists and Jet Reel's actually done an excellent job of, for instance, if he draws a character with a sword then we need that character animated and that's probably many friends of animation. So he'll be very good about letting people who probably aren't quite as talented or haven't spent as much time in art as he has in helping them develop the animation so he doesn't have to develop every single animation. So we have a very good system of distributing the artwork according to people's ability. So Jet Reel or some of our other top artists do the very hardest work but we distribute some of the other work to other people. We've also had problems with artists who don't like or misunderstand the GPL and free software concepts. For instance, we had one artist who contributed some excellent art that everyone loved but then one of our senior artists sent him, said maybe you could modify this art just in this minor way and they actually drew, sent him an email with his image and drew some arrows on it to show what they meant and he was incredibly offended that someone would modify his image. So he immediately left the project and refused to continue contributing. Wetmouth is also very internationalized. It's in over 40 languages with varying degree of quality and this is especially surprising considering when I first wrote it in internationalizing it was the last thing on my mind. I didn't even consider it. Originally when people mentioned to me the possibility of internationalizing it, I tried to develop my own system for it. Thankfully, some people talking out of that and into using Get Text Instead. And so like I mentioned before, we, WML has internationalization support where anything with an underscore will be exposed to Get Text and there's a very, very large community of translators who have translated into many different languages. Probably translations such as Polish, German and French are the strongest and I'll probably get in trouble with some translators later for not mentioning their translation. And we also have some languages like Latin and Esperanto. So Wetnose also has several other cool features. Since we have a large community, people, especially since Wetnose has developed in C++, there are often people who wanna contribute but they don't know C++ because C++ is a very complex language and they might know Python or Perl or something and they still wanna contribute. So we have, for instance, Rusty Russell made something called stats.wetnose.org where in the game, you can opt in to a service where every time you finish a campaign, finish a scenario in a campaign, it will send your statistics to a centralized server and then you can later go and look at your statistics at how you did, what your average goal was at the end of the scenario and compare it to how other players did. This is also useful because campaign developers can get a feeling, it'll show this scenario, 80% of people beat it on their first try, this scenario, 70% of people did, this scenario, 2% of people beat it on their first try and most people took eight tries to beat it or something like that. So they can tweak the difficulty. We also have things like units.wetnose.org which is just a site which contains all of our units extracted from WML and the server can directly hook into the SVN so you can see the latest changes to the units, it'll show them and all their statistics so you can see the latest statistics in the game. We've also made some extensions to PHPBB, for instance, we've made it so that you can use a tag in PHPBB and post a Weznoth map and the Weznoth map format is plain text and then it'll actually generate HTML to actually show that map embedded in your post. So that's very nice, if you make a map and you wanna show it off to people, you can just post on the forums and people will see your map immediately, they won't have to download it. We also, Eric Raymond has also contributed some features to Weznoth and for instance, WMLWint which is a Wint program for WML, so it detects a very wide range of errors in campaigns and problems with them and this has greatly helped us increase quality. We have, I think we actually have more WML than we have C++ so they are often WML bugs and this corrects it. We also have an add-on server which can serve up campaigns so if you can make your own campaign and we get a lot of people who wanna have their campaign added to the game but that's not always feedable because there's like 30 or 40 campaigns that different people have made and they're very varying in quality and we don't wanna add every single one and then we don't wanna add some campaign that might not be that high quality and then expect our translators to translate it and so forth so we set up a server that allows people to add their content to the server and it also doesn't just allow campaigns, it allows for instance multiplayer eras so if you wanna make a new multiplayer era where everyone gets super powerful units or something, you can upload that and then in the game there's a simple add-on button, get add-ons which you click and it'll take you to and show you all the contents of the add-ons server and you can easily download and install anything you want. So people often ask me how they can get involved in web-noth development. Probably the best way is to just participate in the web-noth forums, find yourself a way there to participate in the web-noth IRC channel. You can find an area of interest, you can find images that need animating, you can find a bug that needs fixing a feature that you think would be good and then we're usually very pretty easy about giving SVN access. Usually if people contribute two or three useful patches, we think yeah, we can trust you enough and we can grant SVN access. Also, Google Summall Code Project, I should probably mention that I work for Google, so whatever. Anyway, it's a great way to get involved in open-source projects and several games have been used in Summall Code earlier before so we would be happy to sponsor someone for Summall Code. So that's pretty much it for my presentation. Does anyone have any questions? Yes, ma'am? My developers were meant to sit and ask me questions about why is web-noth so awesome or something like that. Okay, well thank you everyone for coming.