Hi. I'm John.

Sometimes I make games. Sometimes I make websites. This is my blog.

Category Archives: Videogames

Leap Motion 2

UploadVR posted an article this evening about the newest Leap Motion prototype. This paragraph caught my attention:

According to Leap, its goal for the new module is not to package and sell it in Best Buy as the “Leap Motion 2.” Instead, the group wants to work with VR headset manufacturers themselves to integrate the hand-tracking sensor directly.

As much as I love the Oculus Touch and HTC Vive Controllers, accurate hand-tracking in VR is definitely the future. I’m excited not only because of the technology involved, but also because when manufacturers include this in their future headsets, it means that everyone will have it moving forward. We won’t run into another Sega CD / 32X add-on nightmare scenario where our userbase is fragmented between those who have it and those who don’t.

I got a chance to try out the original Leap Motion when we got one at the lab. It was just a few days after they released their major Orion upgrade, and I came away entirely impressed.

How To Fix Unity3d Transparent Shader Not Respecting Z-Index

Before and After: Unity3d Transparent Shaders Respecting Z-Index

Before and after. Bright colours used to demonstrate effect of fix.

The fact that, by default, the transparent shaders in Unity3d do not work well behind or in front of objects has been a problem for years. Here’s an easy fix that might solve it for you.


  1. Make a duplicate of the transparent shader in question. For me, this was Unlit – Transparent Tint. I found it by searching my Project window in the Unity3d editor for “Unlit”.
  2. Edit the new shader in a text editor (default: MonoDevelop).
  3. On line 1, change the name of your shader to something you’ll remember. This is where it will be in your shader selection dropdown in the editor.
  4. Under the SubShader section, add +1 to the item in the “Queue” section. For me, this became “Queue” = “Transparent+1”.
  5. Save your shader.
  6. Apply it to your game object.

That’s it! With any luck, the object with your transparent shader should now appear in front of other game objects which also use a transparent shader.

Sometimes you get what you ask for

On my gaming blog, Gameblaster64, in September of 2012 I wrote an article complaining about the lack of risk-taking by Nintendo with regards to games on the Wii U. At that time, the console’s game library was almost entirely movie licenses and Just Dance clones. I gave two examples that came to my head as the type of games I’d love to play but thought Nintendo wouldn’t have the balls to make. Here’s my second idea (the first being a worldwide Animal Crossing game):

Platformer U
Think of the music sequencer from Mario Paint except you build a platformer instead of a song. Hundreds of assets are included (and some sold in DLC packs on the Wii U store) including the ability to place classic Mario characters and items in your levels. Share said levels with your friends and everyone online.

I thought Nintendo would never allow the public to use Nintendo assets for their own games, even in a limited fashion, as it would require them to give up control. Imagine my surprise when I read this article about Super Mario Maker on Wikipedia today:

The game was first announced at Electronic Entertainment Expo 2014 with the name Mario Maker. The game was originally conceived as a tool by Nintendo’s internal development team, to be used only within the company. The team, however, quickly realized the tool’s potential as a game and pitched the idea to senior game designer Takashi Tezuka. Meanwhile, Tezuka had been wanting to make a Wii U followup to Mario Paint that utilizes the Wii U GamePad.

Sometimes, you get what you ask for.

Minecraft Resource Pack Fave of the Month

The first resource pack, Faithful 32×32, a 32 pixel by 32 pixel improvement stays true to the original 16 pixel by 16 pixel art style of Minecraft, has lasted longer than a month, but recently I’ve combined it with the Default-3d Minecraft Texture Pack to give it an extra 3d kick. It looks great and gives some new life to Minecraft. You can, of course, simply run the Default-3d Minecraft Texture Pack with the default 16x textures, but they don’t pop nearly as well as they do when paired with the solid Faithful 32×32.

Take a look.


Using Unity3d 4.x In a Team

I’m working in a team for the 2015 NASA Space Apps Challenge and this year, like last year, we’ve run into a billion and a half problems working with Unity3d and git with more than one person. After some searching I found an awesome website that included a gitignore file that seems to do the trick. I’m not trying to rip them off, but I’m incuding the gitignore file here for my own future sanity (and just in case their site goes down).

# =============== #
# Unity generated #
# =============== #
# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
# ============ #
# OS generated #
# ============ #

Hellblade Mobs / Xandorus Minecraft Server Warps


As most of our players have noticed, since Minecraft Release 1.8.x, xWarp has been broken. It’s been a mixed blessing: it’s fun to play true, legit survival, but it’s a pain if you want to visit a friend’s build without giving up the ability to warp back home. Until xWarp is fixed (I may have to do it myself), I’ve taken the time to export the warps from their cage in the SQLite database to JSON format. It’s not the easiest to read, but here’s how you can find the X, Y, and Z co-ordinates of your warps:

  1. Open Hellblade Mobs / Xandorus Minecraft Warps in your web browser
  2. Search for the warp name you are looking for (not one at a time, use the Search feature)
  3. Get the X, Y, and Z co-ordinates
  4. Type /tp <player-name> <X> <Y> <Z> in-game to teleport to your warp

Have fun!

Disable Oculus Rift Health Warning (Windows)

Oculus Rift Health Warning

I understand the need for a warning when loading an app for the first time off of the Oculus Share store, etc. but as a developer it’s insanely annoying to have to go through this thing every single time you run your game. So, if you’re working on an Oculus Rift app and you want to get rid of it while you work on it, here’s how to do it in Windows.

1. Create a text file called “oculus3d.reg” with these contents and run it.

Windows Registry Editor Version 5.00


2. Open the Oculus VR Config Tool and click on the “Advanced” button underneath the player height field.

3. Check the box confirming you don’t want to see the warning any more.

4. Develop your game faster by being able to save 10 seconds every time you test your game.

5 Types of Bad Gamification

For the past few weeks I’ve been on a personal mission to go through each of the games in my Steam library, one by one, and complete all of the achievements in them. This is known on Steam as a “perfect game.” and is listed in your profile page as such. So far, I’ve got one perfect game, but many others are very close. This award is binary, giving the impression that I’ve only played one game out of my list. This means if I have 99/100 achievements, it will not give me a “perfect game.” I have hundreds of games to play so it’s unlikely I’ll ever actually finish this. Still, it’s something fun to do.

My Achievements

If you’re not familiar with the concept of Achievements, think of Scouts badges: you get badges for completing certain actions in a game up and above the basic gameplay. An example might be completing the entire game without dying or finding all of the hidden gems in a level. They don’t directly affect gameplay but provide an interesting meta-game which encourages players to come back (known as replayability) and also gives a sense of completion when you’ve achieved them all.

There is also a listing, on Steam, which shows, per game, what percentage of players have gotten each achievement. For example, here is the achievement listing for a game called Race The Sun, which is a bit like a racing game where you also have to dodge obstacles.

All this is well and good, but who decides what these achievements will be? The game developers themselves. This is where we get into a sort of gray area where, if the achievements are garbage, they actually serve to disicentivize continuing to play the game. Below, I’ll provide a few examples of these “Anti-chievements.”

1. The “Play for X Number of Hours” Anti-chievement

Hey! You’ve already completed the game but to get this last achievement, you have to rack up some insane amount of hours just to say you did. Let’s say 50 hours? Excellent! This is fun!

Clickr: Play 50 hours!

You’ll note that only 1.2% of players have gotten this anti-chievement. I wonder why!

2. The “Do a Mundane, Repetitive Task X Times” Anti-chievement

There is a game in my Steam library that gives you an achievement once you click your mouse 500,000 times. Let that sink in for a minute.

Clickr: Click 500,000 times.

Clickr: Click 500,000 times.

3. The “Order of Magnitude Score” Anti-chievement

This one sometimes appears alongside #2 but instead of jumping right to 500,000 clicks, you get achievements at 1000, 10000, 100000, then 500000 clicks. Count ’em: that’s FOUR achievements you get. Just for clicking! Aren’t you happy?

4. The “Play it all again” Anti-chievement

Wizorb is the most notable for this transgression. Part of the game has you rebuild a village over time using the coins you collect during game play. But, after you’ve beaten a large portion of the game, you may realize that there is an achievement for beating the game without rebuilding the town. If you didn’t notice this before you started playing, you would have gotten hours and hours into it, only to have to restart and replay the game again without doing this one thing at the very beginning.

5. The “Rely Completely On Luck” Anti-chievement

Faerie Solitaire was a fantastic game. The achievements were pretty good, overall, and would appear naturally as you progressed through the game. Still, there were two that most people never got and it’s not because they were bad at the game. They never got them because receiving the achievements were based entirely on random luck.

Essentially, during game play, there is a small chance that an item will drop. That item gives you the two achievements. The only way to get this item is to keep playing the game, even after you’ve long gotten every other achievement and beaten it many times in the hope that maybe you’ll win the lottery.

6. (Bonus) The Multiplayer Anti-chievement

If you are an indie game developer, please do not make multiplayer achievements for your game until you’ve got a large and thriving online multiplayer community in your game. Many games, even from small developers, will include some sort of “play against other people online” component. The trouble is that indie games tend to not have enough people on during the day for players to actually compete. So, in this case, it’s impossible to get achievements based around the multiplayer component of the game.

Xbox Live Beta Tester 2002

Let me set the scene: It’s 2001, pre-9/11, high school.

Having finally accepted the Dreamcast’s fate and being a major anti-PS2, Dreamcast fanboy (cut me some slack, I was 18 and lived in my parents’ basement), I became enamoured with Microsoft’s first foray into console gaming: The Xbox. I bought one on day one, fervently posted on all of the major forums, racked up hundreds of hours in local multiplayer Halo…

Then, to my happy surprise, I was to be part of the Xbox Live beta test. I was a bit of an online PC gamer at the time (Tribes 2 ftw) and had played quite a few hours of online console games on the Dreamcast.

Fast forward 12 years, and here we are.

I have been re-organizing my office since a number of people have given me boxes of their old videogame collections. In one of my chests, I found my Xbox Live beta tester box, which I received from Microsoft in September of 2002. Here are some snaps!

Original Xbox Live beta box

Original box – names removed to protect the innocent :)

Xbox Live Beta Test Discs

This is before consoles tracked how many hours you’ve played each game, but I bet “hundreds” for MotoGP and Re-Volt, each.

Xbox Live Beta Test Discs

Welcome to the future of gaming!

Xbox Live beta end of life

Set your clocks: 11.15.02.

By 2004 I had moved almost exclusively to the PC. I bought an Xbox 360 but sold it to a friend shortly thereafter, unimpressed. I was also very disappointed that they gave away my Xbox Live GamerTag, which was supposed to be ours for life.

C’est la vie.

Detecting Jackwagons in Online Games


Reddit Syndrome, The Eternal September, et al.

Counter Strike Global Offensive (CS:GO), a game I have been playing often since summer of last year (2013), is currently facing a dilemma that all online multiplayer games (and many social networks) face: as it grows in popularity, which is required to grow the monetary kick-back for developing and running the service as well as pushing the service’s features forward, the average level of player maturity decreases in proportion, to the point where older players who are used to playing with a more mature player-base will flee the game for some other outlet until this process takes over that one, and so on. It’s important to note that I’m not speaking about the skill of CS:GO players, since that is handled quite well by their Elo ranking system, but instead the maturity level, which means things like the level of racist voice and text chat, lack of statesmanship, etc.

Paul Graham’s Hacker News experiment is an attempt to solve this problem on the social news side of things. He writes about several of his reasons behind the choices he has made while running the site.

I wonder…

Is there a way to programmatically ensure that higher-maturity players do not intersect with lower-maturity players while not specifically removing the lower-maturity players from the player-base, since those lower-maturity players are required to keep the service growing?

My idea is that the service would have two or more pools of players, which would be kept secret from the player-base. My supposition is that lower-maturity players are “high-churn” in that they will likely not stick with the game for a great length of time and will instead switch their attention to some new game that arrives 3-6 months later. This “high-churn” player-base would essentially subsidize the higher-maturity players and game without the higher-maturity players ever having to intersect in game-play with them.

How do you detect an asshole, in code?

My guess is that this will have to be done in a similar way to detecting email spaminess: users will have a value between 1 and 100 for assholery. Being an asshole in online forums such as games is not binary (being either true or false) nor can any one action or decider change your state to true or false. So, it will have to be a collection of actions, over a given space of time, which will increase or decrease your assholery value.

Counter Strike Global Offensive offers a way for players to report users for griefing which offers one opportunity, though I’m not sure how much weight to put on it since it could be easily gamed directly by the assholes we’re trying to prevent.

A manual process is, at first glance, out of the question, since it’s not scalable. Thousands of games are on at any given point in a day. How could you possibly oversee them to identify assholes? Here, Counter Strike Global Offensive offers us a unique idea: Overwatch. As a developer, this solution smells bad because it feels like something we should be able to automate.

Perhaps a combination of encouraging users to not act this way combined with an Overwatch-for-Assholes system would reduce it.

I don’t have an answer

This problem is not going away and will only get worse as the gaming population grows.

Discuss on Hacker News.

How I WAS GOING to use git as a backup scheme for a popular Minecraft server

Update #1: Boo-urns. Github doesn’t support uploading repositories that are > 1GB in size.

It appears that, as much as I want it to be, git is just not the right tool for this job. Instead, I’ve picked up a “100GB” account at Google Drive and will share them there. It’s almost as good and offers the ability to download old revisions as well. I’ve released the world files under the Creative Commons Attribution-NonCommercial 4.0 International License.

Update #2: Put.io

Ask and ye shall receive. I’m still going to keep my files on Google Drive because I’ve already invested the time to put them there. But the next time I need to do this kind of thing, I’ll be looking at Put.io.

Here is the original post for history’s sake:

Hellblade Mobs Minecraft Server

Hellblade Mobs, my Minecraft server, has been in operation since November 2010. For the first 7 months, it was just me and a few friends, white-listed. One world, no hMod, no Bukkit, no plugins.

One May 24, 2011, that all changed: we went public.

Since then, thousands of players have come and gone, and the server still maintains a healthy buzz. We’ve got hundreds (if not thousands) of memories invested in these blocks, spread across eight worlds. It would be horrendous (and likely fatal for the server) if something happened and we lost it all.

Being a developer with a very crummy Internet connection (10Mbps down, 1Mbps up), I’ve always been nervous about this situation. The world files are GB in size and downloading them takes forever, not to mention the act of uploading them to a backup service like Dropbox. Every 6 months or so, I get so nervous that I begin the laborious task of FTPing my files down to my external drive and making a copy of them on an old PC in the hopes that I never have to use it. Halfway through the life of the server, we switched hosts to the fabulous Nuclear Fallout service (referral link!) and it took forever to do.

There has to be a better way!

A recent event with griefers has brought to light once again of making the server files public, which is something I’ve always wanted to do. I thought of the logistics: if only there were some service that I could upload new copies of the worlds over time, uploading just the diffs, and the files could be made for public download whether one wanted an old copy of just a tarball of the newest one… Instantly I thought: why can’t I just put the worlds on Github?

Turns out: I can. Git supposedly is not designed to handle repositories GB in size, but it seems the only effect this has is to slow things down a bit. Compared to the previous situation, I’ll take a 15-minute “add” command with no complaints, thank you very much.

If you’re into Minecraft, you’re more than welcome to come play with us! Connect to minecraft.xandorus.com.

My Counter Strike: Global Offensive Autoexec.cfg Settings

Don’t always listen to advice

When showing someone your start-up/product/service, it’s easy to let them guide your thinking unconsciously. It feels like there’s an inverse proportion of weight given to feedback to sample size, especially if it’s the first time taking the cover off.

Here’s a really great example of why one should always take every bit of advice as advice and not gospel:





Ludum Dare 26 Here I Come

I know it seems I’m like 15 hours late to the party, but really I’m not. I’ve been trying to come up with a good idea for my game this Ludum Dare. In the mean-time I’ve been playing other people’s games and chit chatting/lurking on their IRC channel.

Now that I’ve finally got my idea, I’m ready to get down to work.

Game projects up on github

I’m taking a few hours tonight to go through the archives and put up some of my finished/unreleased/unfinished game jam projects onto github. Ludum Dare 26 is next weekend and I want to have a simple URL to send people to to try out my stuff.


Atari Jaguar Dev Journal 002

I took a bit of time recently to take apart two of my Atari Jaguar joypads. The rubber/plastic screwhole covers, over time, had disintegrated and melted into a gooey, sticky mess on the backs and front of the joypads. It was gross.

If you’ve got old videogame equipment (10+ years) and you’ve noticed the rubber/plastic screwhole covers on the backs of the units or controllers getting soft, I recommend taking them off and avoiding the cleanup you’ll be facing in the next couple years. Otherwise, you’ll have to do what I did and use Goo Gone. The good news is that Goo Gone is amazing and it’s fairly cheap.

Melted screwhole cover gunk

One of the screwhole covers.

Joypad gunked up

Joypad gunked up. Note the cat hair that got picked up along the way. Gross!

Type 1 and Type 2, respectively.

Type 1 and Type 2, respectively.

Type 2 (left) and Type 1 (right)

Type 2 (left) and Type 1 (right)

My Oculus Rift Arrives (Hopefully) April 11

So excited for this.

I’ve been planning out my first game. I’m going to call it Barf. Simply, it will change your view in whacky, unexpected ways whenever you move the headset (and sometimes even if you don’t). Online leaderboards (probably powered by Google App Engine or something of the like [is that thing free still?]) keep track of who has gone the longest before ralphing.

Atari Jaguar Dev Journal 001

I’m up and running with BJL, Linux, and a sample “Hello World” app. Special shout out and thanks goes to JagChris for the handy dandy BJL cable.

Next step: add some animation to the screen to get a handle on how that sort of thing works.

DodgeBots Launches!


I’m very happy to announce that the wait is now over and DodgeBots has officially launched :)

You can play now, for free, compete in tournaments, or pay-to-play and win actual cash and prizes at https://willpwn4food.com.

This is a huge milestone for me professionally as I’m now able to say “Yes, I’ve been part of a team that has released a game for sale to the public.” It’s also a huge win for me personally: a game developer is something I’ve always wanted to become and now I’m officially here.

Download old 3.5 version of Unity3D

Unity 4 was released three days ago, on the 12th of November. I installed it as soon as I saw that it was available. Unfortunately, it overwrites any previous version of Unity you have installed, so I lost my install of Unity 3. To make matters worse, I could not find any download link on the Unity3d website.

Thankfully, the official @unity3d twitter account pointed me toward the installer for Unity3D 3.5. Here it is.

For PC: http://download.unity3d.com/download_unity/UnitySetup_update-3.5.6.exe
For Mac: http://download.unity3d.com/download_unity/unity-3.5.6.dmg