Life of a newbie Game Developer


Better late than never
Posted by Sorian at 11:56 PM

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.

Best pathfinding ever

Posted by Sorian at 12:17 PM

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.

End of week 2

Posted by Sorian at 9:11 PM

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.

How I got my start

Posted by Sorian at 7:44 PM

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.

Getting the hang of this
Posted by Sorian at 9:03 PM

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.

What a week

Posted by Sorian at 7:49 PM

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.

Can I get a can of bug spray here?

Posted by Sorian at 9:52 PM

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.

Most awesome day…so far

Posted by Sorian at 8:50 PM

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.

Hard to keep quiet

Posted by Sorian at 6:19 PM

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.

Another “simple” task

Posted by Sorian at 11:01 PM

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.

What a way to end the week

Posted by Sorian at 11:00 AM

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.

We really do listen

Posted by Sorian at 10:01 PM

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.

Our effects guys rock

Posted by Sorian at 10:50 PM

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.



Essential websites
Posted by Sorian at 10:40 PM

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 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.

Posted by Sorian at 12:16 AM

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.

Birth of a Demigod, part 1
Posted by Sorian at 1:03 AM

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.

Changing the game - one piece of code at a time
Posted by Sorian at 8:41 PM

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.