Vacation time


I got my new system last Friday. It has improved my productivity a lot. Went from a Core 2 Duo with 2gb ram to a Core i7 with 6gb ram. It is so much faster that I haven't had time to play any of my facebook games since.




I am still in bug fix and polish mode. It is really nice to see all the new info coming out about the game and to see all he stuff being put together for more updates. I especially like Chris' unit videos. It gives people a way to see each unit in detail. I can't wait until he shows off some of the more unique units.

I am oficially on vacation until 2010, so there probably won't be another new post for a while. Until then, Merry Christmas and happy New Year!

Milestone 14 is behind us, mostly

Well, the stress and chaos of milestone 14 is behind us, for the most part. There are still a few things Square wants done before milestone 14 is officially given their blessing. Now we are on to bug triage and squashing. From now until release (or I get assigned to our other project) my job will be going through any bugs assigned to me and fixing them.

I know it sounds monotonous, but I really like it. Every bug I squash makes the game better and more playable. Also, some of the bugs I have worked on this week are more like feature requests. A couple of them are just things to add to the overall immersion of the game. I really like that kind of stuff. I really can't wait for this game to be released so I can talk in more detail about some of the work I was involved in.

I have spent so much time coding in C++ over the past month and now I am having to do a lot more lua work to fix bugs, it is weird. My lua code is starting to look off. I am so used to putting semicolons at the end of lines that I have to stop myself from doing it in lua. I can't tell you the number of times I have forgotten to write "then" this week (C++ does not use "then"). I thought going back and forth between projects was hard, going back and forth between languages after such a long break between them is harder.

Our company Christmas party is tomorrow afternoon, so I imagine there wont be a whole lot of work going on after it starts. I will probably try to get a playtest in tomorrow morning sometime. I am betting the AI thrashes me, but we will see.

I saw some balance changes for Occulus go in either yesterday or the day before and a build got fired off. Hopefully this means a patch for Demigod is going through Stardock QA.

Still plugging away

So far I have not gotten a response from Square Enix, so I am taking that as a no for the time being. We'll see what happens.

Things have been very busy lately. Hence, my lack of a recent post. I am currently typing this up while waiting on compiles. To say things have been hectic would be a huge understatement. Every bug is a huge deal because at this point every bug is probably blocking someone else in some way.

Great example would be yesterday afternoon. I probably lost an hour (maybe more) when I was trying to get AI platoons to use a particular ability. It turns out the task that handles this ability was not working properly so it screwed up my testing. I had to go in and fix the task so it would work right. I lost another hour yesterday when I was trying to make a group of units break from a platoon. It turns out I was putting the units in the wrong squad. It should not have caused the game to crash, so it was not immediately obvious that that was the problem.

Despite the setbacks, things have been progressing nicely on the the AI. I just got told I was going back to fixing gameplay bugs for the remainder of the week. I just have to finish this last AI feature. Fixing gameplay bugs is not as fun as AI programming, but it is still fun and Gordon could definitely use a hand. After this week I will be going back and forth between fixing gameplay bugs, balancing the AI, and fixing AI related bugs.

In Demigod news, we sent Stardock a new build almost 2 weeks ago, so hopefully they should be releasing a patch sometime in the future. Not sure when, or even if they will.

Tools of the trade

I have officially passed the three month mark. Looking back it seems silly to think how nervous I was when I got the phone call telling me I got the job. I had no real C++ experience and no experience programming as part of a team. I had no idea what kind of tools or programs they used. I was actually quite nervous that I would fall flat on my face. That obviously didn't happen.

As it turns out, programming here is not much different than modding. I still use Notepad++ to edit Lua files, though most everyone else either uses Visual Studio or Ultra Edit (which I used for a short time, but didn't like as well). I have had to get used to using Visual Studio for C++ files, but that hasn't been hard.

I still use Araxis Merge as my file diffing tool of choice. I tried to get used to using Beyond Compare, but it just wasn't the same. Luckily, I was using Google code for my AI mod for Forged Alliance, so getting used to using the Perforce repository was easy.

The thing I didn't have to deal with until I started working here was resolving files before submitting them to the repository. I also didn't have to deal with the possibility of breaking the build by submitting a bad file or forgetting to submit a new one (done that last one a few times). It really sucks when a message pops up saying that the build broke and for breakers it lists your name, then you start getting the instant messages.

All in all, sitting down to program at work is not much different than sitting down to mod at home. At work I just have more workstations and more people to answer to if I screw things up. I also get the opportunity to do more than I ever did modding.

Milestone 14

Well, milestone 14 is fast approaching. Even faster because of the holiday four day weekend. Although, there are some people that are going to be in the office Friday, and possibly Saturday and Sunday. Luckily, I do not have as much on my plate as some, so I can take the holiday.

While talking to Servo on Wednesday I found out that at least half of the SC2 team has been staying late for at least the past week and a half. It is definitely crunch time. We only have about 2 weeks left until the end of this milestone (December 11th), and it is a big one. I am amazed at the amount of progress that has been made on this game in such a short amount of time.

Progress continues to be made on the AI. I had quite a few large check-ins this week and last week. I think a lot of the core stuff for the AI is there, I am down to coding support for specific unit stuff, mostly. Hopefully most of the specific case stuff will be in early next week. After that it will be balancing the AI. Dru and I have been balancing the AI bit by bit as we go, but the balance has kept changing. We should have it pretty solid here soon.

I still haven't been able to wrap my head around Dru's work. He said he would go over it with me next week, so I am really looking forward to that. With this project getting nearer to completion I am also looking forward to the next project, whatever that may be. It will be my first project that I participate in where I was there from the start. It should give me new insight into how projects are started and where the ideas for some of the crazy things that go into a game come from. I am truly looking forward to that. I will also have to find a way to blog about it without being able to even hint at the genre. Should be an interesting experience.

Publisher/Developer relationship

I am constantly having to re-evaluate what I know to be true about the game industry. Most of what I knew was gleaned from web forums or found off of various websites. Now that I am a part of the industry all of that knowledge has gone out the window and I am having to forget what I knew to learn what things are really like (sounded almost yodaish in my head).  The relationship between a publisher and developer is a shining example of that.

When a game developer (like GPG) has a game they want to make they need money to do it, unless they are lucky enough to be able to self-publish their games. In order to acquire this money they find a publisher willing to invest in the project and fund some or all of it. Depending on who the publisher is it can have a huge impact on the game or none at all. It's like borrowing money from a family member. If they give you the loan they will either do it and keep quiet or they will lend you the money and take the opportunity to throw in some free advice to go along with it. Publishers are the same way, they will either lend the money and let the developer make the game or they will want changes made.

It actually makes sense to a point. I mean, these publishers are making a very large investment and they want a return on that. If they decide changes need to be made to see that return they will say so. Whether those changes are a good idea or not is definitely up to debate.

The publisher is also a determining factor for post launch support as well, because that requires money as well. No matter how much the fans want a patch or how badly the developer wants to release a patch, the publisher is the one that ultimately determines what gets patched and when, especially if the publisher owns the IP to the game. The publisher is also the one that influences, or outright determines, the milestone, beta, and release schedule.

This is why self-publishing is such a nice bonus. The developer gets to make the game they want, on the time line they want, and gets to provide post launch support how they want. Unfortunately, it also very expensive and very risky.

Very busy week

I got a flat tire on the way in to work today, so I had to spend my lunch break getting it fixed. While I was waiting on that I had written a nice long blog entry on my iPhone, but couldn't get it posted. Oh well. Things have been so hectic this week that this little tire problem was the first significant downtime I have had all week. I have put in 44 hours so far this week and the milestone draws ever closer.

Patch 1.2 for Demigod was released today, finally. I hope those of you who have access to the new Demigods are enjoying them. Demon Assassin is still my favorite. There is just something about Warp Area. Some people have said that Torch Bearer's ability to attack while moving in Fire form is not fixed. I will be talking with Brian (someone who knows quite a bit more about the animation system than I do) tomorrow about this issue. Code-wise, TB should work fine, but I have a feeling there is something in the animation that is not allowing him to move. If this is the case than only a new animation will fix it and that will be up to Stardock.

I have been truly enjoying my work on the Supreme Commander 2 AI. It is quite different being on this side of things. I have the ability to all debug tools into the game that allow me to see exactly what the AI is doing at any time. I can see where its expansion bases are, what the status of them is, and where it wants to expand to next. It makes altering the AIs behavior a lot easier.

I have been working on a lot more of the core AI stuff than I think anyone had anticipated. Originally I was supposed to basically be the one who blanaced out the AI and worked more on the data driven side of things. Lately my work has been more on the core side of things. I have been programming things like how the AI decides where to expand, how it reacts to intel, and how it controls it platoons. This has given Dru a lot more time to do other cool stuff for the AI.

All in all I am still loving my job. Maybe I should ask for a raise :)

Patch 1.2 delayed

Ended up doing more demigod work Thursday and Friday. On Wednesday Stardock wanted us to make it so players that did not have the new Demigods would not be able to play with them in single player, but the AIs could still play as them. Unfortunately, there was still a bug that only appeared if someone was assigned to random that had access to all the DLC (which I did not during my tests). So, I had to fix that Thursday.

By now you know Stardock has delayed the 1.2 patch until next week. Since it is delayed I got approval to add one more feature. Patrick had come up with a good point that the only way the AI could be assigned one of the new Demigods was at random, and that kinda sucked. So, I got approval to change it so you could assign an AI to play as one of the new DLC Demigods, even if you did not have access to play them yourself. I was also able to fix the Demon Assassin sliding issue that showed up in Frogboy's video.

I am getting a chance to work deeper in the AI than I had expected. I have even got a chance to add new functions to the Platoon and AiBrain classes that I would have loved to have had in Forged Alliance. The work, however, seems never ending at this point and the milestone is getting closer. We have a huge whiteboard in our office with a list of things that need to get worked on and every time we get to erase something another item gets put on the whiteboard. Actually, I think the whiteboard was fuller Friday than it was the Friday before.

The good thing about there being so much AI work is I get to work on some really fun and interesting stuff, rather than just doing the data side stuff. The more code side stuff I can do the more cool core stuff Dru will have a chance to get to.

I also got a chance to playtest with Eric this week. We had an epic battle on a nice small 4 player map. I played heavy land and it was awesome. He definitely dominated the map, but I put up a good fight.

Demigod...again

Got assigned to work on the Demigod patch yet again today. Hopefully it will be the last time for a while. This back and forth stuff gets a little frustrating. I was put back on Demigod to make some changes regarding Demigod DLC that was not in the first batch of changes that Stardock sent us. The latest build should have gone back to them this evening, so barring any more last minute change requests by Stardock, 1.2 should be ready to go as soon as Stardock QA approves it.

At least something good came of the last minute additions, I was able to sneak a few more fixes in. I was asked to give an estimate on the amount of time it would take me to get the new changes in and I replied that it would take a half to full day. Luckily, I was ahead of schedule when I had completed the tasks, so I figured I would use that time to add some more fixes.

Patrick had spent some time trying to fix the endless connectivity screen/desync bug but had run out of time to do any more testing (he is working on 2 projects at the moment). I volunteered to test it and after several test games where 1 of the participants lost connection I did not get a single desync or endless connectivity screen. Hopefully this means it is fixed.

We did not get a chance to create a new animation for Torch Bearer, so I went ahead and made a modification to have Torch Bearer use his fire attack animation as his attack move animation. Since he is floating anyway it should look fine. It will be far better than before. I also got a chance to fix his Ring of Fire so that casting a second ring and then having the first ring expire will not cause both rings to disappear.

After all that, it was back to the Supreme Commander 2 AI. Patrick says the AI is finally giving him a run for his money now. I am sure Dru can still beat it fairly easily. I haven't tried yet. I am finally digging into the core of the AI more rather than just balancing things. Dru and I have a long list of things we want to get done, just hope we have time for all the really cool stuff.

Deja vu

I had the strangest sense of deja vu today. I spent most of the day essentially doing what I have been doing in my spare time for the past 2 1/2 years; tweak AI, watch AI play, tweak AI some more, rinse, repeat. It was surreal.

Dru has been awesome to work with. I was worried that he might be protective of his AI code (no real reason to think that, really, but I did). It has been the complete opposite. He has been completely open to any suggestions I have had and I have gotten the opportunity to fix some of the major things that bugged me with the Forged Alliance AI.

The AI isn't much at the moment, but I can see where Dru is taking it and I like where it is going. One thing about this new economy is it should make things easier for the AI. Either the AI can afford to buy something or it can't, there isn't any guesswork or complicated economy balancing act. I managed to get a good balancing pass in today, but it will still need a lot more work. I am really looking forward to seeing what we can pull off.

For anyone interested, Dru is being interviewed by AiGameDev.com Sunday, November 8th.

From AiGameDev.com: This interview with Dru Staltman, Gameplay Engineer at Gas Powered Games, will look into the iterative development process that went in to creating Demigod's innovative AI, as described in this article. How was the system originally conceived, what where the major challenges, which were the biggest problems in the end, and how could the AI be extended and improved further?

The announcement is tagged as Premium, so if you happen to have a Premium membership to AiGameDev.com and are interested in AI it might be a good read. If you do get a chance to read it, let me know how it is.

AI, here I come

Note: Apparently Square Enix did not like my last blog entry. I am still not sure why, but I like my job and my kids enjoy eating on occasion, so I wont be posting any more play testing recaps. Sorry.

I got to start working on AI stuff today. Well, I didn't finish my last task until late in the day, so all I really got to do was be brought up to speed on the state of the AI and code a quick function before I left for the day. Looking forward to tomorrow when I will get to dig into the AI a bit more. I will be on the data side of things mostly and Dru will be the one doing the function and core side of things. This should be a lot of fun and I am really looking forward to it.

It has been a nice change of pace to only be on one project. Going back and forth on projects gets rough. Most of my work lately has been bug fixes, which is actually kind of nice because it gets me looking at all the different parts of the engine which makes things easier to find for future tasks.

I have now officially been working for Gas Powered Games for 2 months and I am still loving it. I am like a kid in a candy store. In the past I have always found it hard to get up to go to work in the morning. At this job getting there isn't an issue, it is leaving that I have a problem with. Many times I have found myself in the "one more build" mode where I keep telling myself I will try one more build before I leave. An hour later I remember I was supposed to be leaving. The funny thing is, even when I stay really late very rarely am I the last one to leave. Apparently I am not the only one that has a problem leaving.

My second play test

I had my second play test today, and it was a LOT more fun. It was the same four of us as last time except that I was paired with Aaron versus Matt and Gordon. Aaron came by my desk before the match started to remind me to do research during the game. I definitely remembered this time.

We played our match on the map I used for the screen shot I posted. It is a fairly large map, so I decided to go full on air and played as UEF. I started out by building a mass extractor, power generator, and an air factory. I then built on the other 2 mass spots in my base, another air factory and then sent an engineer out to build on 2 more mass spots near my base. I built a few fighters and started scouting around to see what was up. I built a few bombers and went after one of Gordon's mass extractors. Unfortunately he had it protected with mobile AA and a couple AA defense so I backed off. I built a third air factory and a radar station.

I put my air factories on repeat build building 1 fighter and 2 gunships and start to mass up a group to do some hunting. I also put some defenses in my main base and a bit around my outlying mass extractors. Once I have about 14 or so gunships and about 8 fighters I go after the mass spot I backed off from before. I blow up his mass extractor and pull my gunships out as his fighters head in. He did not chase me. He rebuilt the mass extractor so I grabbed some more gunships and fighters, bound the groups to keys, and went after mass extractor again.

I sent in my gunships first and started wreaking havoc, taking out the mass extractor first. He brought in his fighter again, but my fighters intercepted them first. He took out a chunk of my fighting group, but I came out on top. I grabbed some more units, formed them up, and went after another mass extractor. This time I didn't meet any resistance.

Since I didn't meet any resistance I decided to move in on his main base. I kept my fighters out of AA range and only sent them in to take out the fighters that Matt was sending in to help defend Gordon. I sent my gunships after his mass extractors first, then his power generators, and then went after his factories. I was mopping up the rest of his units when he decided to control-k his ACU in an attempt to take out my gunships to save Matt from the same fate. Unfortunately, the game desynced at that point (still alpha, so it happens). Total game time: about 18 minutes.

I have said it a few times, but I will reiterate it here; the new economy does not affect the gameplay at all. It is just as fast paced as Forged Alliance, if not more. The match we had was incredibly fun now that I have research down. Can't wait to play again next Friday.

I'll never use that in real life

I know I am not the only one that said "I'll never use that in real life" in my math class. Boy was I wrong. I got the opportunity to work on another really cool feature for Supreme Commander 2 today, but it required some math that I have never had to use before. It makes me wish I had focused more on math in high school. I've had to learn about vectors, quaternions, and matrices, and a heap of other stuff.

The most recent example of this was doing Oculus' Ball Lightning. Up until Wednesday Oculus' Ball Lightning would appear below him when summoned. This just looked sloppy and quite stupid. So, Wednesday morning I went in and changed it so that the Ball Lightning spawns in front of him, no matter what direction he is facing. This part wasn't difficult. What took some doing was making it so that the Ball Lightning (trying really hard not to type Balls, btw) would spawn in a row instead of all on top of each other. There was no function available to lua to do that, so I had to create a function in code callable from lua to get a vector cross product. Works great.

The 1.2 patch for Demigod was completed Wednesday. Stardock just needs to update impulse to support DLC before they can release the patch. Apparently, they also want to run a beta before releasing 1.2 to the general public. The delay is a good thing because it gives Patrick a chance to track down the desync on player disconnect issue before 1.2 is released. I have the utmost confidence that he will be able to track it down.

There has been some work recently on more screen shots of the game, so hopefully those make it out to the public soon. There has been a lot of work lately on the naval side of things and I am sure the fans will be quite pleased. I just wish I could post more details about it. My most recent SupCom 2 project was a blast. I had damn near every member of the team come by to check out my work today, including Chris Taylor. I can't wait for the supporting effects to go in, it will look awesome.

Cautiously optimistic

As promised I took some time out today to talk to Patrick, our multiplayer engineer, about the frozen connectivity screen. Unfortunately he didn't have the time to put more effort into trying to repro the issue(he had put in a lot already, but we don't have a testing team so it is hard to test), so I had him tell me where I should look in the code. After a while of stepping over code in my head I found an oddity. After going over it with Patrick we think we have found the source of the issue and, as a bonus, it may be related to the desync problem.

A while back Stardock had us make a couple significant changes. One, we removed the in-game kick voting system and replaced it with an automatic kick handler. Two, we removed the desync window and added the Invalid Game State system the ends the game if a desync is detected. I think when these two items were added something was missed and now if a player DCs (loses connectivity to one or more players) they get kicked, but the kick handler doesn't get called. This causes the game to freeze until the game has a reason to try and activate the kick handler again (like someone else leaving the game).

The desync is another matter, but is related. Our working theory is that Impulse is either closing the socket and/or sending the game garbage data for a player. Currently, this should cause another endless connectivity screen, but it may cause a state where some players have the DCd player as a human and some have them as an AI, which would cause a desync.

We are going to try to set up some tests tomorrow, but it isn't something easily tested without a dedicated testing team, so no guarantees that this works. We are pretty confident we have the endless connectivity screen issue figured out, but not sure about the desync issue.

Now, for some SupCom 2 news.

Disclaimer: The following statements are in no way a set of system requirements for Supreme Commander 2 and should not be taken as such.

Lots of people have been asking about the requirements for SupCom2, so I decided to run a quick test (needed to test pathfinding anyway). I spawned in 500 bots (with Fog of War on) and told them to move, all at once, to a place where they would have to go around some rocks and up a few ramps. I was able to maintain between 25 and 30 fps (zoomed in) and a sim speed of +9 without and issue. This is on a Core 2 Duo 6600 and 2 gigs of ram. This was on a release build and there still some optimizations to be done. Not sure how Forged Alliance would handle that. Again, the disclaimer above applies.

Birth of a Demigod, part 3

This is the third and final part of a multi-part series that I am writing to give people an idea of what actually goes into the creation of a demigod.

Once the animations are finalized and in-game (and just before effects go in) another pass needs to be done to make sure each demigod's abilities are timed to the animations. This involves scaling the animation to to fit the ability. For example, for Demon Assassins Spine Attack the animation had to be scaled so that Demon Assassin's tail was in the right position just as the cast time finished and the actual ability function started. The ability function also had to be changed so that the projectile was spawned into the game world at the tip of Demon Assassin's tail. This kind of scaling and adjusting has to be done for each ability to make sure everything looks right.

Next on the list is icons. We need icons for each unique ability the demigod possesses, an icon for the game lobby, an icon for the demigod chooser screen, and an icon for the in-game scoreboard. Each of these icons needs to be created, have alpha layers applied,and be converted to the proper format. After they are in the right location they need to be referenced in each demigod's blueprint so the game knows where to find them.

Once all the icons are in place and they are tested to be working we need to add each demigod's lobby movie. Each movie is essentially a scene rendering in either Maya or 3D Studio (not sure which was used) that has a transparent background. This rendering is then converted to a .bik file which is referenced in each demigod's blueprint. Each demigod also needs a victory movie.

Once that is all done, or mostly done, we book time with a voice actor to do the voice overs for each demigod. The sound studio is on the other side of the building, so I not sure how that process works exactly. I imagine the voice actor is given a script of phrases to speak into a microphone and an idea of what kind of voice we are going for. I'll see if I can get more info from our sound guy.

Lastly, we have a hefty amount of play testing to make sure the demigods play like they are supposed to. We have to insure that the abilities work right, that they are balanced, that their animations and effects work properly, and that sounds and such are firing off properly. We also have to get someone to translate all of the new strings so that we can localize them for foreign languages.

This is it for part 3 and the Birth of a Demigod series. I hope this gives you some insight into the amount of work that goes into making a demigod.

The game is actually fun

I got my first play test in today and I have to say the game is fun. It was me and Matt versus Gordon and Aaron. I didn't end up doing all that well for 2 reasons. 1) I started out playing like it was Forged Alliance and I built too many factories and 2) I neglected my research.

I didn't really notice a difference playing with the new economy. Queuing was a bit of a hassle if I didn't have the resources, but I hope that gets changed a bit. Creating hordes of units was just as easy with the new economy as it was with the old. You queue up the units you want built and turn on repeat build, not hard. The factories build quite a bit faster than in Forged Alliance so the games pace is really nice.

I got assigned to Demigod again today to add in the Demigod lobby movies and add a few new features for the next patch. I hope to set aside some more time Monday to see if I can repro that desync bug. If I can't repro it I'll just have to hope Spooky and his friends can.

Supreme Commander 2 development is in high gear. We have another milestone deadline approaching and there is still a lot of work to get done. There has been a lot of performance optimizations going in lately so the game is running really smooth now. The game I played today was on a release build (not as optimized as a retail build) and there were only a few hiccups.

Some of the new features going in make me wish I could go add them to Forged Alliance. Overall, I think a lot of the people whining and moaning about the game are going to be in for a nice surprise, if they even bother to take a look at the game. The team has been hard at work fixing a lot of the things the fans have been clamoring for. Don;t get me wrong, there is still a lot of work to be done and fans will have to get used to the new economy system (not that hard, seriously), get used to research (again, not that hard), but with the new features going in and the engine optimizations I think the fans will be in for a seriously fun game.

I have been getting question about the missing screen shot. Well, I was given permission to post the screen shot a little too early it seems. Apparently Square Enix saw the screen shot posted on the Gas Powered Games forums and followed it back here, although I am not sure how. So, I got asked to take the screen shot down. No big deal, at least you guys got to see it before it was taken down.

If anyone is curious what are office looks like there is an intel video up with brief glimpses of our work area. You can see some of the team, including me. It is more of an advertisement for intel, but there is some gameplay footage as well. Might be worth a look: http://cariplus.co.cc/2009/10/intel-ssd-gas-powered-games/

Birth of a Demigod, part 2

This is the second of a multi-part series that I am writing to give people an idea of what actually goes into the creation of a demigod.

At this point, most of the work is in Shana's capable hands. She is responsible for editing the abilities so they are balanced and to make sure they function as advertised. She also makes sure that the abilities in work for that demigod. If any problems arise in functionality or if she wants an ability to work differently she lets me know so I can code in the necessary fixes or changes. She also re-organizes up the skill tree for each demigod.

During this process work has been getting done on each demigod's model and animations. After the models were completed, along with a few of the animations, it was my job to set up the animation state machine. The state machine tells the game what animation to play when the demigod performs certain actions like running, attacking, casting, and any special abilities the demigod possesses. The state machine also tells the game what sounds to play during those animations and at what point. It also houses information about model scale and meshes. Since we don't have sounds or meshes yet I comment that stuff out for now.

One the initial state machine is set up for each demigod and the animations check out my work on the new demigods is done for a little while, unless some ability bug crops up or something. Our modelers, animators, and artists continue to work on getting the animations finished an in the state machine and getting meshes done and in-game. Once an ability's animation is in-game the ability blueprint also has to be changed to reference that animation.

At this point sounds also start making it into the game. Sounds for things like getting hit and attacking. Also, some placeholders for VOs and such can also be added in. There also needs to be sounds for casting and sounds for each special ability.

After my short break once I had the state machines in place it was time to go back and add in the achievements for each of the new demigods. The achievement information for each demigod is stored in a file that tells the game the name of the achievement, which demigod's achievement it is, and the conditions for the achievement. I also had to alter some of the other demigod's achievements that required you to do something to every demigod in the game so that they referenced the new demigods as well. I also had to change the tracking system a bit so that it tracked things needed for the new achievements.

Once all of the animations are in place and the abilities are solid it is time for the effects guys to do their magic. We had two guys, Matt and Gordon, working on the effects for the two new Demigods. They made a competition out of it. They each took a demigod and did the best job they could with the effects and played against each other to show them off. Unfortunately, there was a problem with Demon Assassin's Warp Area ability, which I detailed in an earlier post, that caused the match to be a little one-sided. The good news is the effects turned out quite nice.

This is it for part 2. Part 3 to come soon.

Another Demigod bug bites the dust

Well, I am fairly certain I was able to fix the problem with using an ability against an enemy and then having your hero stop to attack the nearest thing. Monday I will try to take a look at why some abilities cancel abilities in progress and some don't. Hopefully I can get the time to track that down, but no guarantees. I still have a lot of tasks on my plate for SupCom 2.

Looks like I am going to start assisting on the AI here in the next week or so. I am going to start play testing to get a feel for it before I start working on the AI. Not sure yet what I am going to be doing exactly, but I like working on AI so I am sure I will enjoy whatever AI work comes my way.

I am excited to get a chance to play the game. There is so much work to be done that to stop and play the game just feels wrong. I guess that is a feeling I am going to have to get over. Playing the game is part of my job and I just have to adjust my mindset to accept that fact; it isn't playing, it is work. It just happens to be fun work.

I have to say, this is the first job I have had where I actually look forward to working. Don't get me wrong, all things equal, I would rather be home with the family. But, if I have to have a job to go to, this is it. I think a lot of the people that work at GPG have the same mindset, and it shows.

Some really interesting features went in this week to make the game even less micro intensive and to make the end game battles more epic. The main focus of this project has been making things more about battles, less about micro, and I think it works. I will get a better idea in the next week or so during play tests and give you my opinion.

Changing the game - one piece of code at a time

One thing I really love about this job is I get to go into the code a fix some of the things that really bugged me about Forged Alliance. Hopefully during this milestone I will get an opportunity to improve even more things.

The effects for the new demigods are finally in and they look awesome. The ability icons also made it in today. One of our artists got them together this morning and I got the lovely task of going through them all and setting up alpha channels, making them look more button-like, exporting them as .dds files, and then fixing the blueprint and ability files to point to the new icons. It was actually kind of fun getting to do something completely different.

I also got a chance to tweak a few more things. I unintentionally made Demon Assassins Warp Area way overpowered yesterday. If you used it with only one target in range that target would get hit for every warp. Now there is a maximum number of times a singe target can be hit. I also put the finishing touches on Occulus' Blast Off ability. I definitely think Demon Assassin is more fun to play, but I'm not a General person. If you like Generals, Occulus will be more your style.

I have been trying to hunt down every bug I can for 1.2, but a some of the ones that have been reported recently I just can't repro. The main one I tried to hunt down today was the report of a desync that was "99.9% reproducible" by having one team control the map. I had the game running and creating a desync log every tick so that I could track down exactly what was desyncing, but I could not reproduce that bug. If I get time tomorrow I think I am going to take a look at the weapon targeting code and see what I can do about the demigods auto attacking nearby stuff when you want them to attack something else.

Now, for the news you have been waiting for. My screen shot got approved today. Keep in mind, the game is still in alpha stage, so what you see here can (and probably will) change. Enjoy.

Image removed at the request of
Square Enix

Birth of a Demigod, part 1

This is the first of a multi-part series that I am writing to give people an idea of what actually goes into the creation of a demigod.

My first task after being hired by Gas Powered Games was to set up the new demigods. This is definitely a lot more work than I expected and over a far greater time than I had anticipated. The normal starting point would be creating the concept for each demigod. The concepts for Demon Assassin and Occulus were already done before I got there, so I can't comment on that phase.

The first thing I had to do was create the blueprint for each new demigod. Basically, I just copied over Regulus' blueprint as template and edited it from there. The main focus for the first pass was making sure the categories were correct and that the weapon was set up properly. No detail at this point, just the basics. I also had to use Regulus' model in-game as a stand in for Demon Assassin since no model existed for him at this point. For Occulus, there was a very basic model. It basically looked like a golden Buddha statue.

Next, I had to code all of the abilities. For an active ability there is a blueprint for each level of the ability that lists things like how much damage the ability does, what the ability can target, cool down, cast time, etc. Inside that blueprint we can add ability specific stuff like how many target Oculus' chain lightning can hit. Each one of those blueprints use a single function to actually perform the ability. The function handles setting up emitters, beam effects, impact effects, and dealing damage. Also, there needs to be a buff blueprint for any buffs that are applied, any kicker abilities there may be, and any debuffs that are applied. Coding and testing abilities was probably the longest part of the demigod creation process for me.

To actually get the abilities in game I had to create a skill tree for both demigods. This tells the game what abilities are available for the demigod and at what level. It also tells the game how to display the skill tree in-game. I also had to list the skills in the demigod's blueprint. The skills listed in the blueprint tell the game what the pre-requisites are for each skill and what each skill enables and and disables.

Occulus required a little more work because he is a general. So, I had to create the blueprints for his summonable minions as well. All of the work so far has been using temporary models, temporary effects (if any at all), and temporary values for abilities. The balance person is the one that will go back and put in the actual values for abilities. But, it is fun playing around with an uberly over powered demigod for a while.

One thing I forgot to mention, when wiring up abilities you also have to make sure you do it in such a way that makes them easy to modify. For example, all the values needed to modify chain lightning, from the damage, the number of targets it hits, to the delay between chains, is modifiable in the blueprint. So, if Shana, who is the one that did the balance work on the new demigods, wants to make a modification to chain lightning, she doesn't have to mess with the code. She just has to change a value in the blueprint. This means she doesn't have to track me down to get something changed every time she wants the ability changed a little bit. This makes her job and my job easier.

This is it for part one. Hopefully, I will continue with part 2 next week.

Well, I managed to survive the week. I wont hear whether or not Square Enix approved it until Monday, but I don't think there will be an issue. The game is pretty solid. We had some downtime Friday since we had to lock down the code so we could compile a build for SE. Most people got in some play tome to test the build. A few guys got together and had an hour long slug fest (they turtled a lot).

During the downtime I got some polish work done on Demigod. I think I finally got Occulus' Chain Lightning ability working well. These new demigods are awesome. Demon Assassin is still my favorite, but Occulus is definitely fun. Being able to zap a big group of grunts with lightning is very fun, especially now that it works right. Before, there was a high probably of hitting one or two before the chain stopped.

Looking forward to next week. Should be a bit milder pace and I have made it through all of my priority 1 and 2 bugs.

Essential websites

While working there are some essential websites I have open. I have the basics like gmail and twitter as well as the GPG forums, Demigod forums, Uber Entertainment forums, and my blog page. While coding in c++ there is a lot of downtime. Whenever I make a change I have to rebuild the game so I can test my changes. Building can take 5 or 10 minutes, sometimes longer if I change a header file or if I have to sync with the repository first. During the downtime I take a look at some of the sites to read posts, check email, and view comments.

We also have a web accessible internal bug tracker that I have open. It lists all of the known bugs on all projects. This is where we post any bugs that we find and those bugs get assigned to someone to fix.

The other site that I have found very useful is pandora.com. Most people in the office wear headphones while they work (myself included, now) and listen to some form of music. A lot of people bring in music on iPods or iPhones and either load it onto their machines or listen directly from the player. The music helps me focus. I seem to get more done.

This week has definitely been hectic, but the game is looking more polished by the day. I have gotten a chance to work on some really fun stuff lately. Tomorrow I will spend the morning working on Demigod again. I have to polish a couple skills a bit more now that their effects are in. I think Shana also had a couple more requests for me.

The effects for the new demigods are going in. They are really starting to look nice. Still no idea when they are going to be completely done, but progress is being made.

Our effects guys rock

Coding something and seeing it become part of the game is a whole different experience than coding for a mod. I used to get an incredible sense of gratification when I would finish adding a new feature to the AI or the Lobby Enhancement Mod. Now, not only do I get an even bigger sense, but my co-workers can share in the enthusiasm.

I finished adding a new Cybran ACU weapon upgrade today that I have been waiting to do for a while. Code-wise it was pretty cool. Nothing too complicated, but I have a vision of what it will look in-game, and my vision looks awesome. Now, the thing I like about our effects guys is they get just as excited about doing a really cool effect as I do imagining it.

So, I told the guy that was going to be doing the effect for this new weapon upgrade what I imagined it should look like. I got to see a rough version of the effect before I left work today and it was looking really nice. I can't wait to see the finished product.

Overall the game is looking a lot nicer. It is amazing how much effects can change the feel of the game. Stuff that seemed kind of overlooked in SupCom is getting the royal treatment for SupCom 2.

We really do listen

If you haven't noticed, I updated the site this past weekend. The old site scheme was really bland. I like this one a whole lot better and I hope you do too.

The team working on SupCom 2 is a truly dedicated group of people. I would estimate a quarter to third of the team working on SupCom2 put at least one days of overtime in per week, often more. Now, for those of you who do not know, game developers don't get paid overtime and Gas Powered Games does not normally require overtime. This means when a game developer at GPG works overtime it is because they want to, not because they have too or because they are trying to make some extra money.

The team also listens to fan requests. Today was a great example. I had just finished coding in some more research system support when or lead effects guy (who also does a lot of content engineer work) brought up adding a new feature using the new stuff I had just coded in. The reasoning behind the idea was that it has been a feature requested by the fans since vanilla SupCom that was never implemented. He figured since we have the system set up as part of the new research support, we might as well look into adding this new feature as well. Hopefully it gets the green light tomorrow.

What a way to end the week

We had a company outing to the movies to watch Zombieland. That movie was hilarious. Things have been so hectic this week it was nice to have some down time and laugh.

Next week is the last week of milestone 13. For those of you who do not know, milestones are simply points in the project where certain features are supposed to be in the game and working. At the end of each milestone we create a build of the project and send it to the publisher for approval. The publisher expects the features that are supposed to be included in the milestone to be working. That is why it can get hectic towards the end of a milestone. These last few milestones have been especially hectic because they were really short.

Once the publisher approves a milestone we can breathe a small sigh of relief and continue working on the next milestone. Luckily milestone 14 is about twice as long as 13. Hopefully, for the next project I will get a better understanding of how milestone dates are chosen and such. I came into SupCom 2 too late to get an understanding of how that is determined.

In the midst of all the chaos, I was still able to finish my Demigod work Thursday. Patch 1.2 is really starting to shape up. I can't wait to see the new Demigods after all of their effects are in place. Should be really nice. Demon Assassin is still my favorite.

I expect next week to be just as hectic, if not more so. I also expect some more tasks to be transferred to me from other people's backlogs, since mine is so short at the moment. It is only short because the bulk of the work I have left for milestone 13 is bug hunting. Hopefully, I inherit some more cool projects.

Another "simple" task

Looks like I will be back on Demigod again tomorrow. I have to finish up the achievements. Apparently, the achievements were already decided for both demigods and they were available in a spreadsheet. Would have been nice to know beforehand. I am going to have to add some custom stats tracking as well, which will make this task take quite a while longer. I also have some final animation state machine work to do and some last minute blueprint stuff. Hopefully I will be done with Demigod for a while after this week. Not that I don't like it, I just have a lot of SupCom 2 stuff to do.

I also repaired some more of the bugs that were listed in the consolidated list thread on Stardock's site. The engine stuff is handled by someone else, but he is aware of the thread, so hopefully he can take a look at some of the engine related issues.

Had my first big project for SupCom 2. Another one of those seemingly simple tasks that are not so simple. I started coding for it this morning and hope to have it finished tomorrow morning. I know, one day is not that big of a project, but it is the biggest c++ coding project I have been assigned so far. Going from completing several tasks a day to spending all day on one project is quite a change. I don't get the constant sense of accomplishment as I complete tasks. Hopefully that will come tomorrow as I complete this one large task.

The shader work still has not been done on the UEF ships yet. We have a very close milestone approaching. I think there was only a month between the last milestone and this upcoming one, which is not much time, so I think the shader work has been pushed back a bit. I will try and see if I can use a different factions ships that are done. Hopefully there is at least one factions ships that are picture worthy.

Hard to keep quiet

It is very hard to read the posts on the forums and not put in some sort of reply. People are complaining the GPG is dumbing down SupCom 2 because of the changed economy and various other reasons that I honestly don't know where they are getting their info from.

One of the guys I share an office with has a standing daily game that he plays with our balance designer. In watching them play I can honestly say this game is shaping up to be more fun than Forged Alliance. It is faster paced, with the action being centered around combat, not some intricate economy system. The entire games pace and feel are being changed daily based on playtime feedback, so anything you saw at GamesCom or PAX has completely changed now.

So, when you read the doomsayers' posts about how this game is going to suck because of the "dumbed down" economy or because it is not going to have [insert feature here] just remember, there are probably quite a few things going into the game that has not been announced yet. It is what is going into the game that is going to make it succeed, not what isn't going in.

Most awesome day...so far

There are only two words that can describe the day I had today. Kick ass!

I was tasked with adding two new weapon systems to the Cybranasaurus Rex. One weapon was a no frills cut and paste job. The other weapon, however, had no design idea behind it. All it had was a very vague requirement. Oh really?

I had a really cool idea for this weapon, so I got together with an effects guy and asked if my idea was feasable and what he thought of it. He said it sounded cool, but if I could find the video of the real world weapon system I derived my idea from, it would help. After seeing the video he was really enthusiastic. So, after balance gave it the thumbs up I got to work.

It didn't take long before I had a first pass done. A little while later I had it all rigged up. Even with placeholder effects and projectiles it still looks awesome. Now, I am going to have a weapon system in the game that was mine, from concept to code.

I also got some time in for Demigod today. I got all the new achievements and stat tracking set up. I also managed to get the minimap working in replays as an observer thanks to some new textures courtesy of Servo. Now, everything shows up as neutral in observer mode.

I know most of you are probably subscribing to this blog to get info on SupCom 2, which is fine. But, I hope I can try a help some of you out there realize what goes into games. A simple sounding request like making the minimap work as an observer is not as simple as it sounds. Most people act like it is just flipping a switch, which was not the case. It took 3 new textures, modifying 2 lua files, and modifying 3 source code files to make it work. I had to plug in values for to tell the minimap how to display neutral citidels, structures, demigods, etc. I had to set up the minimap source code to sort entities into neutral categories. I also had to tell the game to treat entites as neutral to observers. All for one seemingly simple change.

Can I get a can of bug spray here?

Stayed late tonight to put in some fixes for Demigod patch 1.2. The UI should be solid in replays now. I also managed to get in some fixes that have been on my personal bug list for quite a while now, including some that have not been caught by the community and have been there since release. Now, I just have to wait and see whether I am going to be able to get my new textures so I can update the minimap or if I am going to have to create them myself at home.

The new Demigods are still coming along nicely. I have to create the achievements for them this week. They still need effects work, localization, VOs, etc. so there is still a way to go.

There is supposed to be an 8-player match of SupCom 2 tomorrow. I am going to have to see if there is still room. I still haven't been able to take the time to actually play a round yet. I have been too busy trying to get content finished. Milestone 13 is approaching and I still have a lot of work on my plate.

Went through all of the SupCom 2 units to update them to use some new sound functions that should help performance quite a bit. I also got to finish up the polish work I wanted to do to the unit cannon. That thing is awesome now. I may have spotted a minor issue while watching a couple co-workers play earlier today, so I may have to take another look at the unit cannon tomorrow to see if I have reproduce the bug.

The shader work has not been done on the UEF naval units yet, so the screenshot is still on hold. It will be worth the wait to actually see the UEF units in all their glory.

What a week

Got assigned to Demigod some more today. The new demigods are looking really nice. Amazing what some texturing, shaders, and specular highlights can do. I think the effects team gets to work on them next week and I can't wait to see that.

I guess Demigod patch 1.19 goes live Tuesday. Having replay support is going to be awesome for the community. Patch 1.19 will be my first code contribution that goes into a retail game. It is a really cool feeling.

I did a lot of work on the UEF unit cannon today. That thing is really cool now, and it is going to be even cooler next week. Me and a co-worker got some stuff planned out today to really polish the unit cannon up nice.

Good news for anyone that follows this blog. It looks like Gas Powered Games is going to let me post an exclusive screen shot. I tried to get it done today, but the UEF ships need some shader and specular work. Hopefully that work gets done early next week and then I can create the shot again and give you guys a nice look at some naval units and the new water effects. This is by no means a guarantee, but it looks likely.

Do stay tuned.

Getting the hang of this

I think I am starting to get a handle on things. One of my co-workers was kind enough to give me a run-down on the moho engine's structure and how everything interconnects. It has made finding things a lot easier.

I got assigned to Demigod again Tuesday (and again today) to fix some more bugs that Stardock found. It was mostly minor things that were quick to fix. What took a while was working on the new demigods some more. There is still a lot of work to be done on that front, but it seems to be moving right along. I think I will have the final pass of the abilities done tomorrow (they will still need to be balanced). Then it will be finishing up animation integration, mesh integrations, and some final cleanup passes, and that is just my part in it.

Thanks to the nice moho structure lesson my work on SupCom 2 has been getting faster. I fixed a bug today that has been bugging me since last Friday. I have also gotten a lot more comfortable in C++. I have been doing so much work in C++ lately that I have started interjecting C++ code into lua.

How I got my start

I have been getting this question a lot, so I thought I would just make a blog entry that I could link to.

I have been interested in computers ever since my parents bought their Apple IIgs. My parents let me mess with it so long as I could set things back the way they were. There were some close calls, but I always got it working again.

I took computer programming classes my sophomore and junior years of high school. The one I took sophomore year taught QBasic and the one I took junior year taught Visual Basic (sort of, I was kind of left to my own that year). My QBasic class is where I created my first mod. QBasic came with a game called Gorillas. The game required 2 players to play. I modded it by removing all of the sound (so we could play during class) and also added a single player option. I had the computer player tuned so that it would usually beat you within 3 rounds.

Everything from then on has been self-taught. I learned how to build webpages using HTML, then later using PHP. I learned how to write some basic Lua by fixing my WoW addons when they broke and were no longer supported (or I was impatient for a fix from the author). I learned Lua more in-depth while modding for Supreme Commander and Forged Alliance. I am currently learning C++ by reading through the Demigod and Supreme Commander 2 source code and bug fixing it.

I have recently been reading some nice programming guides that were recommended to me that, I think, have improved my programming skills greatly. Not in the functionality department, but in the readability and structure department. My recent code just seems to look and read better.

End of week 2

One month ago today I was standing in front of Chris Taylor's (CEO - Gas Powered Games) office being introduced by Bartosz Kijanka (VP of Engineering - Gas Powered Games). During the conversation Chris said that the game industry is like a sausage factory. You may love sausage, but you really don't want to know the details about how it gets made. I think I am starting to get a sense of where he is coming from.

Don't get me wrong, I still love my job, but this week was hectic. Today was a milestone day for Supreme Commander 2, so there was a lot of rushing to finish up a lot of features and squash as many bugs as possible before building it and sending it to Square Enix. In the midst of that I was assigned back to the Demigod patch yesterday. It was fun being busy, though. Got through a lot of bugs and got to do stuff I've never done as a modder before, like unit wiring.

Yesterday I was working on fixing the bugs that Stardock sent back about Demigod and found one that had me stumped for a while. After figuring out the issue, conveniently after my partner who codes in C++ regularly had left for the day, I found that the only solution was to create a new C++ function. Took me way longer than it should have because I have very little C++ experience and I am not familiar with the Demigod source code. This morning I got it all figured out and got to submit my first C++ change into the repository.

Now, to enjoy a nice relaxing weekend.

Best pathfinding ever

Just for kicks I loaded up a map to really put the new pathfinding system to the test. I spawned 600 (not a typo) UEF Assault Bots and gave them all a move order. To my surprise, they quickly grouped up into a nice square and started heading towards their destination. After reaching their destination, I gave them another move order to the left. The quickly reformed their group and started moving.

As a real test I spawned a Fatboy and made the 600 units and the Fatboy move towards each other. The Fatboy went right through the platoon without a problem and the units regrouped on the other side and continued moving.

Was amazing to see. Try that in FA.

Better late than never

I probably should have started this last week, but oh well. I will give a synopsis of last week and then start fresh.

I started at Gas Powered Games last Monday and was immediately thrown in to the small group working on the next Demigod patch since I was already familiar with the code. My first task was to code all the abilities and supporting code for the two new Demigods. Next, was bug fixing both Demigod and SC2. Quite a different experience coding for the game for release than it is to mod a game.

Week 2 started Tuesday (Monday was a holiday). Fixed another couple of Demigod bugs (not as many as I wanted to fix, but it still adds up to a lot). Added a new campaign AI behavior for SC2. Most of my time was spent going through all of the units to make a log of everything that still needs to be done. Went through Cybran and UEF, will finish Illuminate tomorrow and then start fixes.

Not too impressed with the look of the Fatboy, but it certainly has some firepower. When I saw the UEFs major land experimental I totally forgave the look of the Fatboy. The major experimental is totally fucking awesome.