Thursday, July 30, 2020

Fixing Git after Moving a File Type to LFS

We ran into a problem a while back where we had a Git repo that had been in use for a while and then we decided one of the common file types should be in the LFS.  The obvious way to do this was to update the filters in the .gitattributes file in the root:

*.ext filter=lfs diff=lfs merge=lfs

However, after doing this, the various Git clients (command line, Source Tree, etc.) didn't actually move all the *.ext files into the LFS.  Any new commits we made that touched those files would automatically move them, but there were plenty of files that didn't get updated.  We noticed this because Git would notice some of these other files (even though they hadn't been modified) and give us the dreaded "Encountered X file(s) that should have been pointers, but weren't" error whenever doing Git operations.

A little Goolging led us to this method of getting the rest of the files into the LFS:

git lfs migrate import --no-rewrite path/to/file.ext

This seemed pretty straightforward.  We wrote a Python script that did an os.walk() across our project and compared it against the results of git lfs ls-files to see which of the new files had yet to be added to the LFS.  This came up with a couple hundred files for us.  We had the script also run the import command above and with that we had the remaining files where they needed to be.  Push to remote, and we're set.

We were not set.

When we attempted to view the Git repo in Source Tree and also Git Fork, the program either crashed or hung spinning on a load.  Somehow we had broken the Git repo.  We reviewed the logs in the command line client and noticed that the timestamps on all the import commands were December 31st, 1969.  Effectively a zero value in the date/time field for the commit, which seemed to confuse the graphical Git clients.  Back to Googling.

This StackOverflow answer from Ortomala Lokni provided a potential solution.  We needed to modify the process a bit for the Windows machines we were on.  Basically, the date setting needed to be two commands: set the committer date as an environment variable once:

set GIT_COMMITTER_DATE="2020-07-19T00:00:00"

Then we could proceed with the individual commit updates during the rebase:

git commit --amend --date="2020-07-19T00:00:00"

Of course, a major inconvenience here is that we still have the .gitattributes filter set to *.ext files should be in the LFS.  And when we do the rebase process, it takes the files out of the LFS which goes against the filter specification, and thus we can't amend the commit because of the filter error.  Luckily, Git has the ability to override the .gitattributes list temporarily by placing a file called "attributes" (no extension) in the ".git/info" folder in the project.  In that file we place the override entry:

*.ext !filter !diff !merge

This effectively makes Git ignore that file's LFS filter so the rebase can proceed without errors.  However, once the rebase was complete, we had to remove that override file again before resuming normal operations.

Friday, July 17, 2020


Forager is a fun and colorful open world exploration, farming and crafting game!  We worked with HopFrog and Humble to update Forager on both Switch and PS4, bringing all the new content over the last several months to existing console players.  Plus, we brought the game to Xbox One, where it's now available via Xbox Game Pass!

If you're a fan of Zelda-style exploration, or enjoy building up your farm in Stardew Valley, you should give Forager a look.  If you prefer your PC, it's also available on Steam!

Thursday, May 7, 2020

Wintermoor Tactics Club!

Now available on Steam!  Inspired by Final Fantasy Tactics, Wintermoor features a fun story and great turn-based tactical battles with interesting character abilities that really make you think.  We worked with the folks at EVC and Versus Evil to help with UI work and platform support, and you'll find the game on consoles in a few weeks.

Meanwhile, if you prefer PC, snag it on Steam here!

Friday, May 1, 2020


Neversong is a beautiful and atmospheric platformer that explores themes of loss and life.  Help Peet find his way out of a nightmare dream world!  Discover what led to its creation!  Fight bird monsters with a baseball bat!  It's published by Serenity Forge, and we helped bring it to Apple Arcade platforms.  Available now!

Neversong, the narrative-driven adventure game set in a stylish nightmare, launches on Apple Arcade

If you're an Apple Arcade subscriber, you can get Neversong for your iOS or macOS device via the app store, via these convenient links!

Saturday, March 21, 2020

Free Controller Prompts

I spent the weekend making a full set of button prompts for all the current console controllers, and figured I'd release this for free for anyone who's got a use for them.  These should be fully compliant for certification if you're shipping a console game, based on our experience there.  They're high contrast and sharp looking and should fit in with any kind of modern or minimalist game-feel.

These should give you everything you need for Switch, PS4, Xbox One, Xbox 360, and PS1/2/3 prompting.  There's also a couple blanks for style-matching keyboard icons if you need them.

The package includes vector and high-res raster artwork (both as a power-of-two sheet and as a set of individual 128x128 images).  There's a preview at the OpenGameArt listing if you're interested, or get the zip file directly here.

EDIT April 5th: Now includes the full keyboard, as well.

Thursday, March 19, 2020

Congrats to the Mutazione and What the Golf teams!

We helped bring What the Golf to Apple Arcade, and Mutazione to Apple Arcade and PS4.  In the last few days, What the Golf has won Best Mobile Title at the 2020 Game Developers Choice Awards, and Mutazione has taken home the Excellence in Audio award from the IGF Awards!

Well done to both teams!