In show #234, Richard Campbell and I talked with Frank Savage about his work in gaming software in general, and the XNA Game Studio in particular.

Carl Franklin: All right Richard, let’s bring on Frank Savage. Frank started in the game development business at Origin Systems in 1991. His first game was Strike Commander, then he was the lead on Wing Commander III. He left Origin and went to work for FASA Interactive, or FASA, in Chicago, and did the first MechCommander game. FASA was acquired by Microsoft in 1999, and Frank finished MechCommander 2 at Microsoft in June 2001. At that point he left and went to work for Xbox just before the first Xbox launch. He worked for the Advanced Technology Group which helped game developers get the most out of the Xbox console. While working there, he began the first discussions around XNA and he was the third member of the dedicated XNA team as the development manager. And they’ve shipped their first release and are currently readying the second release for shipment even as we speak. Will you please welcome Frank Savage, superstar! How are you doing Frank?

Frank Savage: Good, how are you guys?

Carl Franklin: You probably realize how many fans you have, but you probably try to keep a low profile, don’t you?

Frank Savage: Yeah, I hear every now and then, in the forums, someone says, “Oh it’s that Frank Savage!” and then points out that I worked on Wing Commander III, or Strike Commander or one of the MechCommander games. They remember me from having worked in ATG. I worked with a lot of game development companies. While in the advanced technology group, on Xbox, helping them get their games up to speed, finding performance issues, doing all that kind of work to really help them get the most that they could out of a console and really get the performance that the console was capable of in the last generation. Didn’t really do that a lot with the current generation, but I was pretty deeply involved in the hardware design for the current generation, which was fun as well.

Carl Franklin: I got to imagine that being you must be like trying to swat flies all day long. “Hey, Frank, tell me how to get the cheat code in Wing Commander2.” “Hey Frank,…” You must be at conferences or whatever and you probably have swarms of geeks that just, want to know. Is that accurate?

Frank Savage: Yeah, that and my parents keep calling me for tech support and all that as well too, which didn’t help either.

Richard Campbell: We are all up against that.

Frank Savage: Yeah, everybody.

Carl Franklin: Does your mother play Wing Commander?

Frank Savage: My mom is a huge gamer actually, which is surprising I think, both to her and me. She started out very much on PlayStation 1 and played a lot of games on PlayStation 1, Xbox came out, she got an Xbox, was a very early adopter of that, in fact would, well, even before that when Wing Commander III shipped, my mom would go the CompUSAs and stores like that and say that’s my son and show that thing. So, they would give her all of the posters and all of the marketing stuff that we would send them. So, my mom at one point had a shrine to me in the bedroom, with all this Wing Commander III, MechCommander, and Strike Commander stuff that she had accumulated and my Origin Most Valuable Employee plaque was in the shrine, and the whole nine yards. So, it’s a little bit harder now. Well it was a little bit harder until the XNA stuff started to really kick in, and because in the events technology group, we were helping a lot of games but I wasn’t showing up in the credits for a lot of games and I couldn’t tell her what games were coming out that were really cool, [and I] didn’t really have that kind of exposure that I used to have.

Carl Franklin: So, have you come to terms with the moral implications of your job, which is that you are reducing the gene pool of geeks everywhere by keeping them glued to their computers, instead of going out to meet girls.

Frank Savage: Yeah, we are pretty active at that. But the cool part of this is that I am actually actively training my kids to be geeks, and they are making a lot of progress. My daughter is three-and-a-half, runs around doing Star Wars quotes and playing with her little Star Wars action figures and my son, who’s just turned seven years old, has a couple of level 20 and level 30 characters in World of Warcraft already.

Richard Campbell: Oh, man!

Frank Savage: He’s very nearly finished commanding Conquer 3, so he is pretty hardcore for a seven-year-old. He has his own laptop with the high-end video card in it, because he kept playing with mine and I can’t get any work done at home. So, they are probably going to be where the Savage line ends because they are never going to get away from the computer.

Carl Franklin: That’s what I’m thinking.

Frank Savage: But I have done at least what I could for this generation.

Carl Franklin: Good, good, good. Now, when you think of gaming, you don’t usually think right after that, .NET?

Frank Savage: No, in general we found that, that wasn’t the case but about two years ago, this started to change a little bit. When I was in the Advanced Technology Group, actually three years ago now, one of the things we found game developers starting to do, was we had just finished a thing called Managed DirectX and Managed DirectX was done by a single developer called Tom Miller, who actually now works on the XNA team.

Richard Campbell: Wow, one guy did Managed DirectX?

Frank Savage: Yes, one guy did Managed DirectX.

Carl Franklin: Now that man has no life.

Frank Savage: We made sure that he had no life for the first release of our product as well, which he is eternally thankful to me for, but the idea was with Managed DirectX, you could actually go and write some really cool, very fast duration Windows Tools, to do your game developments. You couldn’t run .NET on Xbox or Xbox 360, but you could run it on Windows and you could build your tools for your game using Managed DirectX and using Windows Forms and things like that. You can get tools up and running very, very quickly. So, we began to evangelize this to game developers, and today, it’s hard to find unmanaged tools in game development houses. Very nearly everything that we encounter is very .NET-y in terms of how they built the Windows interfaces and the tools and date editors and level editors and things like that for their game applications. It is very, very C#, .NET-oriented today.

Richard Campbell: Maybe we need to paint a better picture for folks who’ve never worked in the game industry about how game development has really been done up ‘til now.

Frank Savage: Sure.

Richard Campbell: Sort of in-house, build-your-own-tools, everybody-is-a-C++-programmer kind of mentality.

Frank Savage: Exactly, so back in the day, it’s hard to believe that I am saying that these days, but it’s been 16 years since I started doing this. And 16 years ago, we were DOS with 16-bit Borland compilers. Games were extremely difficult to debug because you had different segments and offsets that are showing the same addresses is very easy to have. Uninitialized pointers that randomly pointed to a different area in memory. Things were harder by a large margin than they are today, and the tools were incredibly primitive. So, at that time, even though we starting to do 3D based applications like Strike Commander and Wing Commander III, the tools for these were very much at that point CAD-based programs and they were designed to do very high polygon, very detailed, computer-aided design drawings, rather than very, very low polygon, barely textured 3D meshes that could be rendered in the technology at that time, because there were no 3D accelerators at that time. So, just getting those tools out with something that the game could use was nearly impossible and we wrote a lot of those tools ourselves. We had a 3D editor called EOR that we wrote for Strike Commander and for Wing Commander III and that tool required a very different mindset than the 3D modeler has today.

And because it was designed by programmers for programmers to make 3D art and not a 3D artist to make 3D art, it became very difficult to really understand what those guys needed because they themselves were so new to the business. It was hard to even figure out what would help them and what wouldn’t. As we moved on the MechCommander style games, the tools got better and better and more and more of the 3D packages began to understand that these people needed low polygon models. Okay, great now, I have got the low polygon model, I still now have to build my terrain, I have to place all the buildings or I have to lay out all the corridors. I have to put the traps in the place. I have to the put the monsters down. I have got put some AI around the monsters. The doors have to open when I push the switch. The race cars all have to stay glued to the track. I have got to get real physics on to the tires. I got to put all the car data in; all the aerodynamic data; the track characteristics; what were the track characteristics when they’re wet…

There is an enormous amount of data associated with games and the data entry for that used to be very “crack open Notepad and start typing.” As time went on, the tools got more and more sophisticated to the point now where there are games that actively [have] SQL back ends to store all the data.

I have even heard that there are games that have actual SQL embedded in them, in order to be able to just create the database themselves and get the data out, because it’s so big and so hard to figure out these days. So, games have gotten quite a bit bigger over time as well, when we started in the business.

Carl Franklin: In that process, in their earliest days, where you not only tech guys, but were you coming up with the stories and all the art work and all that stuff too? Or has it always been a collaboration between the creative people and the developers?

Frank Savage: When I first started in the business it was just starting to differentiate. The programmers used to do everything and in fact games, older games, had what was called-what’s still called today-programmer art in them, and you’d look at them and go, wow, a programmer did that, because it was not so good. And the design of the game was very much a programmer-centric thing as well. Again, the programmers tended to be gamers so we knew what we liked to play in a game, but sometimes it was hard to map that to a very large audience. And so a game that had a very strong appeal to the programming staff that worked on it may not necessarily be a game that had a very strong appeal to a wide audience. As time went on, the roles began to differentiate somewhat, and there was a programming staff that was responsible for the implementation of the code. They became a design staff and the design staff was very much in charge of everything from the lowest level data entry, all the way up through the high level game design features like how the AI should behave, what the story was going to be, what did we want the player to feel at this point in the game, what was the flow of the story, does this happen, then this happened, how linear was it, how non-linear was it, where could they go off into the weeds and explore for a bit and then come back to the main plot and stuff like that. So all of that kind of stuff, it took a while for that to evolve into the design side.

And [then the next year there were] a whole bunch of dedicated artists and the dedicated artists started out as very 2D artists because the games were still very two dimensional even for the scripted portions. Like when we were telling the story in Strike Commander, it was all 2D art that was developed by 2D artists but then 3D artists became necessary as the games moved into polygonal models that were texture mapped and 3D hardware began to become more prevalent. The game got more and more art intensive on both the 2D and the 3D side. So, today, a typical game house has a couple of hundred artists working on a game, anywhere from 5-25 programmers working on it, and a design staff that is directly proportional to the amount of content that can actually be in the game. That can range anywhere from a dozen to again a couple of hundreds like the artists, so you are talking about something near the scale of like the World of Warcraft.

Carl Franklin: Now wasn’t Wing Commander an Electronic Arts game at one time?

Frank Savage: Yes. Origin Systems was originally an independent game publishing company and they were acquired by Electronic Arts in 1992.

Carl Franklin: Okay. So when did FASA come into that?

Frank Savage: So, when I finished Wing Commander III, I was actively looking for something else to do, Chris Roberts’s contract with Origin Systems was going to end in about a year with EA and he was going to go off and do his own thing. He wanted me to come with him and I was like, well, I have just finished this Wing Commander thing and kind of want to work on games more and you kind of want to go off and do Hollywood things and I am not sure that I want to do that. So I left Origin and went to FASA Interactive Technologies up in Chicago, and I was the eighth employee there. I was also the first technical employee, so I [had] one leg in the networking and e-mails and Windows servers and things like that, which was a very different role than making games.

Carl Franklin: What confused me was MechCommander and Wing Commander, even though they have “commander” in the name, there is no relationship there company-wise, right?

Frank Savage: Correct. Yes, apparently I am doomed to work on commander titles for the rest of my career. So, one of the reasons that I got out the game business, was I [felt that I had said everything] in the Commander genre and I really wanted to kind of move on to something else and…

Carl Franklin: Oh, that’s funny. You’ve made your peace.

Frank Savage: That’s right you know, and I guess, I said what I needed to say.

Carl Franklin: I love it.

Frank Savage: I have explored it.

Carl Franklin: All right let’s fast forward to XNA. How did that all come about and how does it relate to .NET?

Frank Savage: So, when we started in XNA at Microsoft, now this was back in 2004, when Jay first announced it at Game Developer’s Conference…

Carl Franklin: Jay?

Frank Savage: Jay Allard, who was head of the Xbox division actually. He had this vision for making game development easy, or easier at the very least. And what could we do to help core game developers, people like EA, Activision, UbiSoft, people like that, to get their games faster, easier onto the platforms that we had, and we realized that while you can make the hardware as easy to work with as you possibly can, it’s all about the software. It’s all about the tools and the compilers and being able to connect and debug and get profiling information and that kind of stuff readily from the console. Otherwise it’s extremely difficult to get any kind of good game done on it. So, initially our task was trying to figure out how to help these guys and what technologies did Microsoft have to bring to bear to be able to do that. As we began investigating that, we actually did a bunch of work on build systems and we did our first kind of hobbyist and enthusiast thing and that we actually bundled up MechCommander 2 all the source, all the content, and posted it as a shared source release and you can still download that from Microsoft today. It’s about a gigabyte in size, not small by any stretch of the imagination, but it is the entire game and you can compile the entire game with Visual Studio 2005, using the 8.0 version of C++ compilers.

Carl Franklin: This is MechCommander you said, right?

Frank Savage: Right, this is MechCommander 2 that we did here at Microsoft. So, when we released that we found that there was this enormous hobbyist and enthusiast community that was very excited about being able to get their hands on a game, but the number one piece of feedback we got from them was [that getting the game was] cool but real big. They just wanted to do something kind of small…you’ve given me the Titanic and I need a robot. So we heard that loud and clear from the customer base. [Meanwhile] the .NET Compact Framework Team, who at that time was being lead by Mike Zintel, came to us and said, "Hey, wouldn’t it be great if the .NET Compact Framework ran on Xbox 360?" And we said, "Yeah, that would be really nice. Why are you asking us that?" And they said they’d like to divert some resources to doing that. [They wanted a] way to get some alpha kits or whatever, and I said, “You know what? I will drive them to your building.” So, that was in August, 2005. By November 2005, they actually had it working on the Xbox 360 alpha kits, and basically…

Carl Franklin: When you say "it" ....

Frank Savage: So, they had .NET Framework-a subset of the .NET Framework though Managed DirectX-ported to work on both, on the .NET Compact Framework and the Desktop CLR, running on Windows, a Pocket PC, and the Xbox 360, with almost exactly the same code.

Carl Franklin: Wow.

Richard Campbell: It’s pretty exciting.

Frank Savage: This excited a lot of people over here as well, and we went, “Huh. Maybe we are going the wrong way on this. Maybe there is something to this whole hobbyist, enthusiast, community thing and maybe we really can’t crack it open.” Because the biggest hurdle we had, which was the technology, seems to be well on its way to being solved. So, we went back and did a prototype on the actual release, Xbox 360 hardware and that was significantly more challenging than the alpha kits because the release hardware had a very tight security model. On a console we don’t people going in and hacking and stealing games and running their own stuff without going through our certification process. So we had to make sure that in putting the .NET Compact Framework on it that we didn’t inadvertently, make the Xbox really easy to hack and you can run anything you want on it.

Carl Franklin: Yeah, that was a first concern, right? [You don’t want] people to stop buying PC’s and start buying the low cost Xbox 360s.

Frank Savage: Exactly, so we made sure that the security model was such that the interface to the Xbox title libraries, or what the Xbox hardware can actually do, was very, very, tightly controlled by us and by the .NET Compact Framework team. So, for example today, you can’t actually get to the networking at all. There is no multiplayer connectivity right now. That’s coming actually in the Fall, but there isn’t any right now.

So we did that on purpose because we wanted to make sure that we open it up in a way that supports the [Xbox] LIVE business model, you know, meets all he business and political and socio criteria that exist here. Technically it’s not hard to do-it’s just making sure that we don’t ruin people’s business models.

Richard Campbell: Doing it in a way that doesn’t actually break live or introduce a new class of virus or all kinds of things that go terribly wrong with that.

Frank Savage: Yup, exactly. So, they have the user mode Sandbox pretty much up and running so that that CPU that’s in the Xbox 360-there are actually three CPU’s-there’s three power PC cores-each one is running at three gigahertz. There are two hardware threads on each core. All of those can run in a couple of different modes. The mode that the game runs in is essentially kernel mode-it’s the boss-it can do anything it wants. We keep the games from doing anything malicious to other games or to LIVE or anything else by going through our certification process. It’s a large part of what that does, but again, if we are opening it, it’s up to the community. If a bunch of community people can go and create games using the .NET Framework, we want to make sure they can’t inadvertently or advertently do anything malicious to people. So, we created the user mode Sandbox that we had a very clearly defined way of getting out of. Part of the charter was also to find a way to make an API that isn’t Managed DirectX, which was actually, at the end of the day, a pretty thin wrapper over the existing DirectX functionality in managed code. But let’s make an API that’s really cross-platform. We had a goal of being 95% compatible between Windows and Xbox, so there was a very high probability that your game would recompile and just run on Xbox 360 after you’d gotten it working on Windows or vice versa.

So, we started off down that line. We also decided, "Look, let's make a framework that’s extremely .NET-oriented. One that smells and feels like the rest of the .NET Frameworks do. And let's make sure that we target it for the right audience and the right audience for the first release is the very serious, hobbyist and enthusiast and also the academics and students." So, we’ve actually had a fair amount of adoption from universities. I’d like to talk about that a little bit later on, but there is a ton of universities already using this stuff. In fact, they were using our beta bits-that’s how eager they were to get their hands on it. So the framework component was being built while we were actually finishing out the .NET components and-this is the thing to keep in mind-[there was a] Herculean effort that went on with an incredibly small number of people. That shows you what you can do when you stand on the shoulders of giants. Literally. In March of last year, we had the prototypes up and running and that was it, and we went back and not from scratch but standing on all of this technology that we had lying around, we were able to go from March to December and ship a working version for both Windows and Xbox 360 that allows you to run games on your retail Xbox 360. You don’t need any special hardware. You can go to the store and buy one today and connect it to your PC. Your PC can upload your games to your Xbox 360. It can play them. You can debug them on your PC using C# Express. All of that is fully functional and available, and it’s been available since December.

Carl Franklin: Now is that the XNA Game Studio Express, or is that something else?

Frank Savage: Yes. So, that’s the Game Studio Express piece and to run that you need to C# Express first and then we install into C# Express and extend it.

Carl Franklin: So, now why only C#? Just curious.

Frank Savage: C# was the most obvious choice for our customer base. We were talking about game developer hobbyist and enthusiasts, which were typically shallow C++ users. So it seemed to map to the C# universe more easily than things like Visual Basic or any of the other .NET languages that exist today.

Carl Franklin: So, but it’s Visual Studio. Aren’t we talking about API’s? Aren’t we talking about a framework or are you talking about a boat load of source code?

Frank Savage: So, there was actually-Visual Basic actually isn’t quite, as .NET-y as it should be. For example, it requires other DLLs to be present from the old VBRun days.

Carl Franklin: Like what?

Frank Savage: There is no Visual Basic support on the .NET Compact Framework, for example.

Carl Franklin: Wait a minute now. So what exactly do you mean by that? I can write programs in VB.NET for the .NET Compact Framework.

Richard Campbell: I can do that.

Frank Savage: But the .NET Compact Framework itself doesn’t support Visual Basic as it exists today in the 2.0 iteration.

Carl Franklin: Are you talking about like writing code on my PDA?

Frank Savage: Yeah!

Carl Franklin: Oh, well who would want to do that? I mean, I want to write code for the PDA but I don’t want to write code on my PDA.

Frank Savage: Well, that’s the problem, right? We want to run the code on the Xbox 360 and that required DLLs that just weren’t present.

Carl Franklin: Do you mean, you want to run Visual Studio on the Xbox 360?

Frank Savage: No. The VBRun OCX, DLL, and stuff like that has to be present on the operating system and they are on the PDAs but they are not on the Xbox 360 and we didn’t have anyone to port those to power PC …

Carl Franklin: I understand.

Frank Savage: ... to make that go. So, Visual Basic got less interesting from that perspective as well and that there was a lot more technical work to do and again we were under a very constrained timeline. We wanted to ship last December if at all possible and we had the tech for C# pretty much done. And again it mapped to the customer a little bit better as well.

Richard Campbell: Now, it’s pretty impressive to think this is all Express. So if you want to develop on your Xbox, you don’t need to buy anything except an Xbox.

Frank Savage: That’s correct. And the subscription.

Carl Franklin: So, what kind of stuff can you do and what kind of stuff can’t you do with Game Studio Express?

Frank Savage: So with Game Studio Express today, the limitations are basically mostly around the networking code. We have APIs that do all the graphic stuff. The graphics APIs are identical between Windows and Xbox. We have input APIs that are identical between Windows and Xbox. You can plug in an Xbox 360 controller’s USB into your Windows PC. It will recognize and download the driver and that controller will behave and act exactly like it does when it’s plugged in the Xbox 360.

Carl Franklin: So basically you can take a C# DirectX program and port it to the Xbox. Is that what you are telling me?

Frank Savage: No. Right now if you use the XNA frameworks that are in the Game Studio Express, they will simply recompile and run on the Xbox.

Carl Franklin: Okay, so the XNA Game Studio Express APIs are kind of like using the DirectX APIs. Is this what you telling me? They are sort of similar.

Frank Savage: They are sort of similar but they have been somewhat simplified for our target audience and we’ve removed or at least hidden away somewhat the functionality that is confusing or hard for people to really wrap their heads around. For example, creating a device in Windows is actually a fairly long and drawn out process today. We’ll have to get at the 3D hardware and its magic in our universe. It simply creates the device and maps it to the current resolution of your screen and sets everything up and you are ready to go and you can just start calling update and render.

Carl Franklin: So you took it up a level basically-a couple levels.

Frank Savage: Exactly. Yup. We wanted people to not have to worry about it. And again, one of the biggest problems on the Windows side is that there are scads and scads of different kinds of hardware configurations. We’ve abstracted away a lot of that as well. So there again you don’t really need to worry about the hardware configuration. The only thing you really need to worry about today is the shader model implementation on the video cards. We only support 3D cards and we only support 3D cards that have at least Shader Model 1.1 on them.

The conversation continues online at http://www.dotnetrocks.com/default.aspx?showNum=0234