Jump to content
Sign in to follow this  
  • entries
    12
  • comments
    10
  • views
    10476

Introduction & Motivation

Sign in to follow this  
MagForceSeven

1080 views

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:


  1. 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
  2. a JSON parser because writing parsers in annoying, time consuming and error prone
  3. 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:


    • A Redscreen system (to display issues that aren't quite asserts but should be attended to)
    • A Console (usually accessible in PC games from the '~' key)

      HexWar1.png

      HexWar2.png

Sign in to follow this  


4 Comments


Recommended Comments

Welcome back to the site. Hopefully your stay will be an enjoyable session of shaming and bullying you into completing those small projects of yours.

Share this comment


Link to comment

Lol, I remember sitting next to you back in game programming classes in high school. I remember I worked on my first game, "star fighter" using DirectDraw for a good chunk of summer vacation, brought it to school, and then you coded a copy of it in like a week or two and did it a lot better. I didn't know anything about trig back then, so getting my space ships to fly around in circles was really tough, and I also knew nothing about pointers so players could only shoot one bullet at a time. lol, I was so bad.

Anyways, you should totally have fun with these weekend projects. I'd totally get into it and do pet projects where I try to implement skip lists (or some other data structures) or try out something weird with AI, or do something interesting with fractals, or try to procedurally generate realistic pine trees...

Share this comment


Link to comment

Anyways, you should totally have fun with these weekend projects. I'd totally get into it and do pet projects where I try to implement skip lists (or some other data structures) or try out something weird with AI, or do something interesting with fractals, or try to procedurally generate realistic pine trees...

 

This seems like a fun way to learn new things. 

Share this comment


Link to comment

 

Anyways, you should totally have fun with these weekend projects. I'd totally get into it and do pet projects where I try to implement skip lists (or some other data structures) or try out something weird with AI, or do something interesting with fractals, or try to procedurally generate realistic pine trees...

 

This seems like a fun way to learn new things. 

 

 

That's definitely the idea for me as well.  Just with a different kind of pet projects given my interest in systems level stuff like resource management, object construction & lifetimes.  One of the reasons I'm working on my own component system.

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!