Perhaps it's because I'd just like to do more hobby programming. Perhaps it's because a friend of mine (slayemin) has just published a game of his for early access on Steam. Perhaps my girlfriend keeps super-productive on the weekends and want something other than playing video games to do with that time myself. Perhaps work just doesn't scratch the same engineering itch it once did. I'm not really sure but I'm pretty I need something more than just a text log at home ('cause that obviously hasn't been working). Working with Unreal 3 is definitely partly to blame (more on that later).
So, after looking over slayemin's journal I decided to start one myself on the theory that I'd be a little more motivated if other people were judging me for not posting for a while. Guilt is a powerful tool :wink: I don't really expect anyone to call me out on that sort of thing but it's at least possible. And if someone reading this wants to make it their mission to keep me honest, well so much the better for both of us. That's my motivation for this journal, to try another tool to advance my hobby. I hope this also gets me to be more involved in the community. I've lurked here on and off since at least college (2000ish) even though my profile join date is 2010.
My quicky resume: By day I'm a Senior Systems Engineer at Firaxis Games in Baltimore. I've only been here a little while but helped ship XCom 2 (at least as of this writing). Before that I worked at Volition in Champaign, Illinois. While there I helped make Saint's Row. You may ask, "But there have been 4 of them. Which one?" and I would answer, "Yes" because I worked on them all. Not really my kind of games but fun to work on. And lastly, before that, I attended DigiPen. All in all that 5 titles in 12ish years. Not too bad. Technically I have a credit on one more, Red Faction: Armageddon, because I was in a shared technology group but I don't really count that since nothing I was did actually applied to that title.
Which I guess brings me to my goals with my hobby programming. Unlike a lot of other hobbyists, I'm not particularly concerned with a large scale release of a game. Would it be nice? Sure. Would it be cool? Sure. But I'm not an artist and I'm not a designer and I very much understand the impact of both of those professions on a quality title. That means I don't have to be looking around for engines or frameworks to reduce my time to a product I can shop around. Plus I use an engine (heavily modified Unreal 3) every day so my hobby programming is meant as a way to explore or experiment in ways that I can't at work. It also gives me the control to do whatever I want, where ever in the code I want (like converting over to new language features). Engines are great, but at some level there's just a limit to what you can rip out, rewrite, or re-engineer. Like I said, I already have that at work. I don't need it at home.
Now, I wouldn't call what I currently have an engine. Not exactly. It's more like a loose collection of libraries I've written (C++) and attempted to keep in a reasonably organized way to be able to share between projects that I start. I've written almost all of it because of that OCD-like control I talked about wanting above and I don't really want my hobby programming to be spent gluing together 3rd party bits and pieces. I want to (mostly) build, not assemble if that makes sense. The only a few places that I've really outsourced any code are:
- DirectX because that's the graphics pipeline I've used since high school and I don't care enough to jump, and D3D9 (no seriously that's what my code still uses! :lol: ) is super easy
- a JSON parser because writing parsers in annoying, time consuming and error prone
- WxWidgets, but only for UI for Windows based programs
And I won't mind including more libraries in the future because a library has limited scope and impact in a way that an engine doesn't. In fact, given my experience on Saint's Row, I'll probably integrate Lua as a scripting language. Or Python since I used that too. Plus libraries are easy to hide behind custom abstractions, in my case D3D is hidden away completely, the JSON less so.
Part of my problem might be the number of projects I have "in progress". I won't go into much detail about them here, perhaps a followup journal entry, but to summarize there's 3 programming solutions and 2 design documents. However the design documents are mostly historical and I haven't made additions to them in a while. One of the programs is a campaign tracker for Descent: Journey into Darkness by Fantasy Flight Games, which is of less use since moving to Baltimore meant leaving the friends that actually owned the game that I would play with. I'd still like to finish it but upgrading Visual Studio threw a wrench in its use of pre-built WxWidgets binaries.
To close I thought I'd list a few of the pieces of tech that I have in my libraries. I don't claim any of this as revolutionary or special other than to myself since I wrote it all. Consider it a snapshot of the systems I have in place as of today. There won't be much detail here but if anyone wants to pipe up in the comments about a specific system I'd be happy to do a more detailed write-up. So here we go:
- Static Initialization time C++ reflection information (using a combination of macros and templates)
- Component based object system (with type-safe dynamic casts that doesn't use RTTI)
- Flexible delegate structure (based on the impossibly fast C++ delegates, but not using that code directly)
- General event manger
- math library with vector/matrix/orientation types and all sorts of utility functions
- Collection of assert macros (based loosely on what I worked with at Volition)
- A finite state machine
- A priority queue using an internal heap/tree structure
- File Cache data structure (with an asynchronous loading API even though it's not asynchronous under the hood quite yet)
- Hexagonal gameboard with various utilities for working with hexes. Basically a height-map with a height for each hex tile. Some pathfinding support as well.
Two biggest todos: