Adrenaline Dev Log - 01

While this is technically the second update for my game, the first update was really just a GIF dump. This is also pretty much going to be a GIF dump, but with some explanations. I’ve done a lot over the last few months to the game, but have been slacking a bit too much lately. My goal is to have 5 levels by next month so I can start doing some shader programming and look and feel polish.

Shibboleth Dev Log - 01

Once again, it has been several months since I’ve posted anything. I’ve decided it would be beneficial to keep a development log of what I’m working on. So, here it goes. The two main things I have been working on are re-writing the reflection system and how I handle engine modules. My goal is that when writing modules to extend the engine, I’d like as little boilerplate code as possible when hooking up the DLLs.

Project Progress

First off, I’ve begun doing a major refactor of Shibboleth. I’ve currently replaced all of my containers in Gaff with those from EASTL. I have also begun re-writing the reflection system. Hopefully this re-write will come with better functionality and simpler implementation. I have started this work in a branch, so the original code is still about if anyone is curious to run a functional, but broken version of the engine.

Not According to Plan

As per the usual, I’ve been extremely late on posting about … anything. I also completely invalidated some of my former posts. I’ve dropped working on Contrivance (the editor). This is due to a couple factors. I hate Qt. I spent 99% of my development time fighting Qt and trying to work around it than actually implementing features. Qt’s support for dockable windows is fairly non-existent. To that end, I have been attempting to integrate Nuklear and embed the tools into the engine.

Contrivance Progress

Hello again! Another update in roughly a month and a half! This time I’m talking about some of the work I’m doing with my editor, Contrivance! I’ve shifted my focus away from Shibboleth for a bit and am focusing on getting my editor up and running. I have started accruing enough data formats that it would be nice to not have to edit JSON files by hand. I am making the editor with the ever popular Qt library.

Ported to Hugo

In the process of upgrading to WordPress 4.5, WordPress broke itself. So I took this as an opportunity to port my blog over to Hugo. The only downside is that I no longer have comments. Not that anyone reads this or comments on anything I post anyways, so no big loss there. If anyone wants to comment on anything, you can just message me on Twitter. Since the entire site is now a static website, everything should load faster.

Slow Post Rate

I’ve been very slow to actually post new content to the blog, but fear not, while I may be super slow, I do not plan on abandoning the site! Some things I plan on doing … eventually: Post more about Shibboleth’s architecture. Convert blog from WordPress to a static site using Hugo! Need to figure out what solution to use for comments. So, essentially the posts become static content and the comments are dynamic.

Shibboleth Engine Structure – Part 1

I feel like I haven’t said anything particularly useful in a while, so I’m going to go over the architectural design and flow of my work-in-progress game engine, Shibboleth. Application Layer Our journey begins at what I call the Application Layer, which is nothing more than what the executable the end-user runs actually does, which isn’t much. To start, let me explain the expected folder structure the executable assumes.

Wow … My Bad

Been way too long since I actually posted anything here. I swear I’m not dead and I’m still working on Shibboleth! I’ve been re-factoring my graphics integration for Shibboleth, so I haven’t had much to say. I’m also working on something that I’m not quite ready to share yet, but hopefully sometime soon! Just a quick post to let the one or two people who actually read this know that I’m not dead!

Back from Long Hiatus

It’s been a few months without any updates from me. Fear not, I have still been working on Shibboleth. Most of my work has been updates to supporting libraries more than actual engine work though. To name a few, I added schema validation to my JSON class, restructured my job pool system, and started adding in the actual graphics pipeline to the engine. I’m having to do a bit of a refactor on my graphics multithreading.

Things And Stuff

I really missed my one post a month target by a long shot this time. Two months late! I got my update system to run in stages. So now you can specify updates stages that all run independently of each other, but in order. The updates all operate on frame data that is saved and passed to each stage. This way one stage can continue generating the next frame while the other stages are doing work.

Getting Sidetracked

I got a little distracted these past couple months. While hashing out my camera system, I realized that I didn’t have all the support in reflection that I needed. Mainly, I didn’t support reflecting arrays. It took a hell of a long time to get it in, but I finally have it. I also got distracted from writing this post, so it’s a month later than my usual month late posts.

Memory Leaks are Fun

Well, I had a pretty uninteresting weekend on engine progress. Effectively, I haven’t made any real progress on the engine part. I mostly spent time tracking down and fixing bugs. I fixed a very egregious error in my HashMap code when removing elements. I was trying to get smart and try not to rebuild the entire HashMap when removing an element, but it was failing in certain cases. I have resorted, for now, to do the brute force HashMap rebuild methodology.

Yet Another Uninteresting Progress Update

Again, nothing interesting has been happening lately on the game engine front. I’ve spent this weekend implementing the necessary classes for doing frustum culling. For those who don’t know what that is, this will allow me to figure out which objects are actually within the camera’s frustum and only render those objects. This, however, does not take occlusion into account, so I could be looking at a wall and it will still return objects that are behind the wall.

Fixing Gleam

I’ve been silent for a little while, but I have been getting some work done! I ended up fixing a bunch of threading issues with the OpenGL version of my API. The problems were with sharing display lists and loading resources on worker threads. Shibboleth can now run with both Direct3D 11 and OpenGL 4.3 renderers. I’ve also implemented deferred versions of render device on both versions of the API. With these you can generate command lists on other threads and then play them back on the main thread.

Long Time No Post

Been a bit lazy on posting. Been in a little bit of a slump, but I have started making progress again. I’ve been having some difficulty figuring out how to further develop my reflection system. To help me figure this out, I have begun working on my editor. I’m hoping that by working out how properties will be consumed and displayed in the editor will give me some insight as to how to proceed fleshing out reflection.

Graffix!

Missed my once a month post. Been a little silent, but I have made some good progress. I finally got mesh and skeleton loading finished. Or at least functional. It took me a little while to figure out how I should structure my vertex data, but I think I’ve gotten a pretty good solution. I do have graphics actually running in my engine now! … sort of. I hacked in a couple things just to get something drawing quickly.

Moving Along

I’m slowly but surely making progress. I’ve since added an UpdateManager, which essentially manages the updating of other manager. Some engines call what I refer to as managers as systems. I have an IUpdateQuery interface that a manager can inherit from. When all the managers have loaded, the UpdateManager goes through each manager and queries for that interface, then adds their update entry to a list in the order specified in a JSON file that is passed in.

Blowing Off Steam

Missed my one post a month quota by a little bit here, but better late than never I guess. Things have been going pretty slow these last few weeks. I’ve been taking a little bit of a break from developing Shibboleth to relax and release some stress. I’ve recently just played through a couple of Daedalic Entertainment‘s point-and-click adventure games set in The Dark Eye universe. These games would be The Dark Eye: Chains of Satinav and Memoria.

Premake Conversion

A little past a month, but better late than never I guess. This month I converted all my projects over to premake, specifically premake5, which you can only get by building it yourself! I’m not expecting everyone to build premake and generate their own projects, so I pre-generate Visual Studio 2013 solutions and Linux makefiles for you! I also converted the projects for ResIL and ResILU from generating statically linked libraries to dynamically linked libraries, to comply with the LGPL license.

Late Post is Late

I missed my one month window for my post! Nuuuuuuuuu! This is just a quick post to say that I’m not dead. I’m a bit tired and it’s late to start something technical, but I have made some progress on Shibboleth. I’ve gotten some of the basic infrastructure down and started integrating Gleam and OtterUI into the engine. Although, I should point out that my “integration” is completely optional from an engine standpoint.

Message Broadcasting in Gaff/Shibboleth

Hello all! Today I’m writing another technical post about how message broadcasting is done in Gaff/Shibboleth. The high level idea isn’t very complicated: Listeners are registered as either functions, member functions, or functors. When a listener registers themselves, they are returned a “receipt”. When this receipt is released, it will automatically unregister the listener. While this adds some extra memory usage from having to store all these receipts, the end user no longer needs to remember to unregister manually!

Raw Input on Windows

An actual technical post! Whooo! To start, why am I posting about this? Well, for one thing, this is one of the most recent things I’ve implemented in Gleam. First thing to note is, when I saw “raw input”, I do not mean DirectInput. Modern versions of DirectInput are simply wrappers around Windows’ raw input API. While you can still use DirectInput, it is not recommended, as it has been deprecated for quite some time.

Game Engine Progress (I need better titles)

Man, my titles really are boring. I’ve made some pretty significant progress. I’ve actually started developing the game engine! Yay! One of my main efforts in this engine is to make everything as data driven as possible. Although, this may lead to some overkill with DLLs, or, as I’m calling them, dynamic modules, since other platforms do not use DLL as their extension. I’ve implemented a wrapper around Jansson, a JSON parser written in C.

Multi-Device/Monitor Support!

Been switching gears from Gaff to Gleam. Did a big round of bug fixes, majority on the OpenGL side. Turns out glTexStorageXD() (X being the dimension) followed by glTexSubImageXD() does not produce the same result as calling glTexImageXD(). While it compiled and glError() reported nothing, textures were not getting loaded correctly. The texture would have a random sized black block in the bottom-right corner. Switching to glTexImageXD() fixed this issue.

Nothing Much

My monthly post is a little bit late. Not much to say though. Work has been pretty busy, so I haven’t been putting a whole lot of time into my projects as I’d like. I’ve mostly been reworking the way objects that give receipts work. My plan is to basically have the receipt have a pointer to an interface that it can call release on when it needs to. This way I’ll avoid the need to make receipts template objects that need to know about the allocator used by the object that created it.

Gaff: Threading

New post in under a month! Yay! For serious though, I’ve found that I haven’t really posted anything on the internals of some of my projects. I really want to, I just don’t really know how to go about it. That and a lot of the things that I am doing, I’m learning at the same time. Take for instance, threading. I know what a thread id and I know some of the basic synchronization techniques such as mutexes, semaphores, and what-not.

Happy Thanksgiving

Hello all! I didn’t quite meet my one post every month quota this time. But I am here to wish you all a happy Thanksgiving! Not as much to talk about as I’d like, but I’ve made quite a bit of progress on Gaff and Gleam. I cleaned up the codebase a bit and added some cool new classes by using typename aliases and variadic templates. Not sure if I mentioned, but I kind of changed the scope of Gleam a little bit.

Baby Steps

A new post in less than a month!? Whaaaaaaaaaat!?!?!? Every once in a while I browse the forums on Gamedev.net and the #gamdev channel on IRC. Rarely do I actually join the conversation. Usually it’s because by the time I get to a particular conversation, someone has already answered the question and I have nothing to add, or someone has answered it and I don’t fully agree, but don’t feel the effort to explain my disagreement is really worth the effort.

New Server

Over this past week, I have migrated everything I was hosting onto my own server at home. I bought myself a Mini/Book sized PC and a 4GB stick of RAM and used my old 320GB hard drive. I installed Debian and am using Lighttpd as my webserver. Not the most powerful machine ever, but it is suiting my needs and I don’t get that much traffic anyways. I spent about three days setting it up.

Gleam Progress

No pictures or video yet, but shader support is complete and I have a working camera that you can move around the world! I have some basic shapes that I’m generating in code as test cases right now. I had to go around the code base a bit and make abstract interfaces for some of my classes, since it was possible that they could be compiled into different versions depending on whether you were compiling for Direct3D or OpenGL.

Graduated

Just checked my grades and it is now official! I have graduated from DigiPen with my bachelors in Computer Science! Or Real-Time Interactive Simulation (RTIS), if you want the useless name for it. I also have just gotten my graphics engine, Gleam, into a state where things are actually appearing on the screen. Here’s a screenshot of my first test! I just have to clean a few things up and fix/implement some things on the OpenGL side and I’ll be off to a very good start.

Motocross is Fun

And hard, and very physically demanding, it’s great. So great that I signed up for a second round of lessons. It’s a very different feeling having the bike being able to slip and slide around. Every time the rear tire lost traction my feet were trying to plant themselves into the ground. It’s a weird feeling to get used to. Anyone who happens in the Bothell area should nab a slot from Eric Waunch’s motocross school.

Happy Birthday to ‘murrica

Or something like that. I don’t have much to say, but I like keeping this “one post a month” thing I’ve got going on. Gleam has been coming along bit by bit. Most of the basic infrastructure is finished. Getting ever so close to actually drawing stuff on the screen. It’s taking me a lot longer to get this far due to making a cross-platform Direct3D 11 and OpenGL 3.x/4 renderer.

Slow Month

Huzzah for posting in one month intervals! It’s been a pretty slow month. I’m slowly working on Gleam and learning lots of cool things about Direct3D 11. I’ve been looking into learning some automotive skills. For those that know me, I’ve caught the “motorcycle bug”, which has gotten me enthusiastic about learning about internal combustion engines and how cars work. Although I am at a large loss at where to start.

Gaff, Gleam, and Reminiscing About Project Mercury

New post within a month! Lately I’ve been having a lot of fun doing some cross-platform development. I’ve got two libraries I’ve been working on. Gaff, which is my general purpose, stick whatever I feel like in it, library thing. It encompasses a lot of stuff, such as timers, personal implementations of standard data structures (i.e. vector, list), and other useful things that I make C++ wrappers for. Gleam is the other library I’ve been developing.

Network Programming is Hard

I just finished up the Advanced Networking class at DigiPen, and I just gotta say it. Network programming is hard! It’s easy to screw up, and even implementing simple features cleanly and robustly can be challenging. Take enet as an example. If you read through their feature list, it looks like pretty standard fair for a networking engine. My team and I more or less implemented this in our class. It fell quite short of enet.

Getting Lost in the Haze

There’s this KickStarter link that I saw on Twitter … or Google+, I can’t remember which one. And it came up again on one of my co-worker’s monitors earlier today. This KickStarter got me thinking a little bit. Ignoring the whole “girl power” aspect. I don’t get “girl power” when it is applied to intellectual fields. I don’t see how gender is a hindrance to the use of your brain, but whatever.

Bjarne Stroustrup’s GoingNative 2012 Keynote

I just watched Bjarne Stroustrup’s keynote from GoingNative that happened in February of last year. He had a lot of great insight on how to write better code that is easier to read, less error prone, and faster! Now, I still have concerns about the STL. It’s great to see a lot of potentially more portable code being made available via the STL, especially if you look at the concurrency domain.

The Moral of the Story

For my first content update since the blog came back online, I figured I’d share a personal story that has helped shape my future. DigiPen has what they call Company Days, where guests who work in the video game industry visit our school and give a lecture on any topic they feel is relevant. Sometime around late October or early November of 2011, Chris Taylor came and gave a talk. I was a bit surprised as I walked into the room.

Blog is Back! For Good This Time!

The blog is finally back up, after being in limbo for a long time. I’m going to avoid going into the … odd details, but the blog is no longer self hosted. I figured it’s easier to pay a small fee to have a more reliable service host it for me. Anyhow, I hope to update this with much more interesting things, now that I’m almost out of school and will be having free time!

What Does It Mean To Be An Independent Developer?

There has been a bit of rise in the popularity of indie developers recently. While the indie scene has produced a few nice things, there is this large feeling of a “stick it to ‘the man’” type mentality; the man being large developers/publishers. I definitely don’t agree with this mentality, but some feel more strongly about it than I do. I personally prefer the term independent developers to the shortened “indie” developers.

Spider-Man Noir and Kick-Ass

During my relax time over Summer break, I’ve gotten myself into reading some comics. I know I’m starting a bit late in my life, but hey, I’ve got a number of years left to see what the comic book world throws at me. Anyhow, I’ve picked up three comic book volumes: Spider-Man Noir, Spider-Man Noir: Eyes Without A Face, and Kick-Ass. For an intro into comics, this was definitely a good start and I HIGHLY recommend all three of these volumes.

Star Wars RPG: Trouble on Kashyyyk

A year back my brother and a small group of friend went out and bought some Star Wars RPG books. We had a few sessions and enjoyed it greatly. Unfortunately real life got in the way and we haven’t played in a while. This is an attempt at reviving our play times and sharing some of what I’ve written with people. Aside from here I also usually post my adventures on the official Star Wars RPG forums.

Winter Break Is Upon Us

It’s that time of year again. Finals are over and Christmas is coming up fast. It’s great having lots of free time again. I’ve been thinking of what to write for the next BFP article. Personally, I want to write about No One Lives Forever: The Operative and No One Lives Forever 2: A Spy in H.A.R.M.’s Way. Both made by my favorite developer, Monolith. I have played through NOLF2 a few years ago and am currently playing through NOLF1.

BFP: Fire Emblem

Blast from the Past Fire Emblem I have recently been playing Fire Emblem for the GBA. This is the first game in the series I have actually played, and while I heard it was good, I was never sure how good. It’s no Final Fantasy Tactics, but it holds its own quite well, and is definitely a worthy addition to any turn-based strategy lovers’ collection. Fire Emblem is split up into two parts: Talking and Fighting.

BFP: Wild ARMs

Blast from the Past Wild ARMs Wild ARMs is an RPG for the original PlayStation by Japanese developer Media.Vision. I have a lot of nostalgia for this title, as it was one of the first games I every played on the PS1. When it came out in 1997, it was considered the game to hold you over until Final Fantasy 7 came out. Wild ARMs follows the classic tale of a boy who is an outcast and cannot find his place in the world.

BFP: Overlord

Blast from the Past Overlord It’s been a while, but I am finally adding some stuff to the “Blast from the Past segment of my blog! While Overlord was released only a few years ago, it’s not exactly new, right? Anyhow, the entire premise of Overlord is that you are the recently resurrected, well, overlord. You have been dormant for several years when a band of heroes locked you away.

Story Behind the Screen Name

This post is more out of interest than anything else. I’ve heard some interesting stories about how people get their screen names ranging from naming themselves after their favorite book/game/movie characters to smashing their head against the keyboard and getting a random string of characters. Before I got the screen name I have now, I just used whatever show/game/book/etc. I was currently enjoying at the time. However, during the days of my young impressionable mind, I saw this movie called The Mighty Ducks.

BFP: Shogo – Mobile Armor Division

Blast from the Past Shogo: Mobile Armor Division I am introducing a new segment to my blog titled “Blast from the Past.” To be honest, I really couldn’t think of a better name, but it works. The name/article relation is that these segments will be talking about older games, either revered classics or games that time has left behind. Sometimes it’s good to reflect back on our gaming roots, and other times we can sit and wonder “Why don’t they make games like that anymore?

About

By day I am software engineer in the games industry. By night … I am still a software engineer. Currently a game engine enthusiast!

This blog is just a collection of thoughts and things I am currently interested in. So stick around and say hi!

If you wish, you can also e-mail me at connway@tentativename.com … whenever I get my mail server back up and running. :P

Resources

This page is a list of resources that I have found to be useful in my quest in learning the various fields I have spent time in. Some of these books I read when I was in college and others I have read in my spare time and have found useful and some I haven’t read at all, but come with decent recommendations. Majority of these books are game development related, but a few are related to other fields I’ve dabbled in (namely the Engineering section).