It's time for my third annual look at the past year.
Looking at my work log, the biggest part of my year was spent getting systems that kind of worked into final working condition, adding features, fixing corner cases, bugfixing, polishing and improving performance (I did a lot of work on loading and rendering performance.) While I thought I was mostly done with rendering last year, I still put a lot more effort into making the game pretty this year. I added more normal mapping, distance fog, smoke to damaged units, dust to moving units, a sandstorm effect, two factions worth of buildings (21 of them,) 23 rocks, fields of flowers, the sky, distant terrain rendering, a rusty container-ship setpiece, color correction and heat refraction post-effects and at long last: rubber-band rendering for the mouse. Adding Object culling was the biggest rendering performance win.
Getting the patcher built was a huge job, but it made asset streaming for my giant terrain super-easy. I also worked on the trailer, added an audio sequencer, set up account creation, finished the minimap, added achievements, started on factions, recreated the server process manager I made for Medal of Honor Heroes, and made parents in the US happy by adding support for COPPA.
[My daughter's favourite screenshot - The Wonky Navmesh.]
Work on collision detection and pathfinding started in April and was a big, ongoing project throughout the year. I have had pathfinding for a long time in one form or another, but it didn't do all it needed to. Collisions and pathfinding on small maps are pretty straightforward and well-understood, but make the map really big and it gets incredibly challenging. Pathfinding is working now, I watched the pathfinder trace out a 17KM path a couple months ago. Along with the new pathfinding came a big update to unit movement replication so that the internet can take a five second nap and everyone's tanks will still keep moving correctly. The really difficult part though has been figuring out collisions. There is a big balancing act between implementation complexity, performance and accuracy which I've really struggled with. A couple more days and I should have that finished as well. Then I can decide what to do about group movement.
[Neatly aligned tanks.]
My blog piece A Day in the Life of a Game Programmer
got the most interest of anything I wrote, although Three Normal Mapping Techniques Explained For the Mathematically Uninclined
also did well.
The high point of the year was putting out two screenshots and starting to do PR
for Miranda. Having other people be excited by the game is really energizing. It's been a long time since I've done an interview
and it was really nice not to be misquoted. I even got my first Troll comment on the game (no I'm not posting a link.) The really shocking thing from my first foray into PR was discovering that nearly half of the publications on a two-year-old list of PR contacts had closed.
Last Year's Resolutions
- I will network and generally get out of the home office more. I attended Full Indie almost every month this year. I made a few new friends, some useful contacts, and met three other lone MMO developers. The Full Indie Summit was also fantastic.
- I will do programming projects unrelated to my game. I think this is going to have to wait for the game to be done.
- Other people will play my game. So close, but nope. At least other people saw my game.
Resolutions for 2014
There can be only one.
2013 By The Numbers
196,592 Lines of C++ Code
3,543 Lines in largest file scene.cpp
944 C++ files
611 C++ Classes
459 Items in the "what did I do this week" log.
231 UI Files
73 Checkins to Mercurial
33 Blog Posts
15 G+ Posts
14 Facebook Likes
12 Custom Tool programs
6 Server programs
Favourite log comment: Improved Abort build speed of mmo1 from 371,462ms to 54,188ms an 85% reduction!
Happy New Year, and don't forget to Like me on Facebook