Dev Blog

BrackenSack: a Dashkin™ Game

Month: April 2017

Professional Development on an Indie Budget

Posted on April 19, 2017  in Tech Updates

One of the biggest challenges associated with development is figuring out how you actually get work done.  This becomes much, much more complex when you have people not only in different time zones but also halfway around the world.

Version Control

Version control systems store your game assets and code securely so that everyone can work on the project at the same time.  We’ve gone through quite a saga with zeroing in on the correct solution.  First we started out with git hosted on github.  This worked just fine until we needed to store large assets (like uassets in unreal 4).  We tried throwing git-lfs (git large file storage) at this problem, but found that none of the toolsets supported it.  This became a gigantic headache as I had to debug git commandline issues with Adam over voice chat.  If you can imagine fighting a tiger with a blindfold on while googling how to compile ubuntu.. it was something like that.  We then switched to the tried-and-true perforce.  We were using hosted perforce on assembla, but when they raised their prices to over $200 a month for our services, we needed to pull the plug.  We are now hosting perforce on our own t2.micro on aws and its been working out fantastically.  We pay <$5 a month for this and it works great even though I’m in the US and Adam is in Aus.

All told we’ve migrated source control systems 4 times!

Automated Builds

I don’t know how many indie studios have nightly builds, but we sure do.  We’ve got a build machine setup under my other desk running Jenkins which builds all versions of the game nightly.  It’s hooked up with its own gmail account and wakes me up at midnight if the build is busted (its always my fault).  Having a build system which automatically builds our systems has caught so many boneheaded errors that I *HIGHLY* recommend any dev setup a build system even if you don’t think you really need it.  All the software for Jenkins is free, so if you’ve got a spare machine sitting around you can set it all up for free in a snap.

Sharing Files

Version control is good at storing source code and big assets, but what about temporary work or files that don’t work well with source control (I’m looking at you ToonBoom Harmony!)?  We tried various solutions such as dropbox, share drives over VPN, and others.. but nothing has come close to the speed and just plain ‘works’ as Resilio Sync.  Its a torrent-based file transfer system which syncs file systems asychronously.  We just leave the build machine always on as a peer with automated nightly archives onto our NAS and we’ve got versioned backups as well as always-available secure peers for fast file transfers.

Tools and Scripts

Creating easy-to-use development tools can be very tricky even as a small team.  Telling someone to go run ‘GenerateProjectFiles.bat’, sync down the latest on p4, run the sync tools for unreal dependencies, build the editor in ‘development’ mode, run the code generator, and run the newly built editor is a huge pain.  In order to simplify our workflow we’ve created a master helper batch file which we both use.  If one of us creates a new tool we just add it as an option and check it in.  No more ‘oh yeah.. sorry Adam.. I totally broke all your stuff.. so.. here’s a 12 step process … Adam?  Are you there?   …..

C++ Debugging

Debugging crashdumps from C++ applications can be a gigantic headache.  To solve this we host a symbol server on our shared NAS which our build server updates.  We use srcsrv & symstore so when we get a crashdump all we have to do is double-click the files and it syncs down the files from p4, grabs the symbols from the Z: and we’re fixing bugs before we realize it.

*a quick hint for those troubled by p4 srcsrv requiring identical hostnames and not playing well with proxies, just edit so it doesn’t include the host.. then tell developers to make sure p4v is open on the right server and it’ll automatically grab your correct files

In Short

Tools and scripts : Java / Python / Batch scripts

Version control : Perforce self-hosted on AWS (free for <5 users)

File share : Resilio Sync Pro (secure folders ftw!)

Debugging : Srcsrv & Symstore


Total cost per month : $25


If you’ve got any questions you can hit me up on twitter @ambientenergy_0


Month: April 2017

Dashkin states

Posted on April 14, 2017  in Art Updates

The past few weeks have seen steady progress in both technical and art sides of the project.

Completed tasks

In preparation for the prototype, I’ve been making rough assets, including fatsack and Bitey animation. Not only is a lot of animation layer/node organisation required, but designing that organisation – that is, deciding how best to lay things out so it’s readable/usable – took half a day and still evolves with use. In the image below, there are two main sections. Leftstates that happen on the spotRight: states that happen at speed. The red areas below those contain finished states, the states in progress are in the centre.

state nodes

Except for the top two, each red block contains several individual animation states. Each state consists of a 5 main nodes. At the top of each is the animation itself – a grouped hierarchy of embedded layers, including separate head, eyes, arms, deformer curves and collision rigging. Underneath that main group are two composite nodes and two display nodes. These are for working and exporting, respectively. In this screenshot, there are almost 50 states. I would estimate there’s at least another 50 to do. It’s also worth noting that this is only Bitey’s animation. This will need do be done for every creature and character in the game.

Current tasks

As anyone who watched my Twitch streams would know, I initially found it frustrating to rig fatsack and Bitey, struggling along slowly adding collision shapes to each state. Additionally, due to the frame-by-frame nature of this game, many animated states require splitting into various sub-states.

For example, the jump animation consists of 5 sub-states: spring, rise, hang, fall, land (see below). Having these all separate on their own layers (instead of all together in one sequence) makes it difficult for me to see the animation working as a whole action. It’s something I can get used to over time and I’ve developed a workflow but it hasn’t come easily. That said, this is the first character (the main player character no less) and once these initial teething problems iron themselves out and things will move more smoothly for the other creatures.

Upcoming tasks

Rough animation is a very fast process for me and most of what you see above was animated in a couple of days. There’s plenty more to come yet so if you’re interested in seeing it take shape, you can find me working live most weekends on my Twitch channel. Once Bitey is done, I’ll be creating some very rough collision and terrain assets and looking further ahead, more creature animation.

, ,