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.

Steps

  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.

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 #
# =============== #
Temp/
Library/
# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj
# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Hellblade Mobs / Xandorus Minecraft Server Warps

lilfirecracker

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oculus VR, LLC\LibOVR]
"HSWToggleEnabled"="1"

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.

My thoughts on my Oculus Rift DK1

Oculus Rift DK1
Oculus Rift DK1 (photo from Wikipedia)

I’ve had my Oculus Rift Developer Kit Version 1 (DK1) for just under a year, after receiving my kit on April 11, 2013. In that year, I’ve built a few apps and played with a ton of other people’s apps from Oculus Share. My experience with the DK1 is that, while it’s good, it’s not great. It’s funny, because, while the low resolution and heavy screen-door effect were the two initial problems I had with the unit, over time, they took a back seat to another, more basic problem:

The Oculus Rift DK1 wire is fucking annoying. Not just annoying, but a lot of the time it ruins the experience of immersing yourself in the virtual environment. The new term that people are using for this is “presence.” When I’m wearing it, I can’t turn around fully without feeling the wire tickle my neck or hear the breakout box slide across my desk, which makes me worry that it’ll fall off and I’ll break it, so I take the headset off to make sure it’s safe. The wire undoes exactly what the rest of the kit is trying so hard (and succeeding, mostly) to do: immerse me in the experience. All the time that I use the unit, I fear of fully moving in any direction because the wire is there.

That wire has got to go.

I know that Oculus is working its hardest to reduce the latency between the time that you move and the time it shows the movement on the screen in the headset. I know that going wireless will increase that latency. But, hot damn, at this point, I’m almost willing to take a slightly more delayed response if I can do without the wire.

Detecting Jackwagons in Online Games

griefing

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.

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:

advice

 

 

 

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.

https://github.com/rocky1138/FocusOnFun

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.

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.

Android + UNITY + Ouya + Eclipse

My go-to IDE for everything for the past 5 years has been Netbeans, so to switch to Eclipse is something new for me. But, Eclipse is insanely popular, so there’s got to be a good reason for it.

Google seems to love it, too, and it’s always great to be in tune with them. I used to develop stuff for the Google App Engine and it was the same thing as it is with Android this go-around: if you didn’t use Eclipse, it was a bugger to get going. Relying on a third-party plugin from Kenai to access a closed system was just too much of a reach-around and I got out of there.

So, Eclipse. Excited.

Why Android? Well, this recent hullabaloo about Ouya has got me excited. I’ve been toying with game development now for years and after completing a few games in the past few Ludum Dare/7dfps/Guelph Game Jams, I can safely say that the idea of getting my games up on the TV screen with a controller turns my crank.

It was the same thing the first time I played BastardBlaster (my html5/javascript shmup) on the Wii, using the Wii browser and Wiimote. I loved it and wanted to have more.

Playing games on a PC/laptop is just not the same as on a console. Don’t get me wrong, I’ve got hundreds of PC games and love them dearly. But, there’s something special about a controller in your hands and a big TV screen in front.

I’m looking now through the Youtubes and Googles for Android development stories, tips, tricks, hints, tutorials, cautions, etc. If you’ve got experience in this area and would like to share your story, I’d love to read it.

Eee PC 701 as a Dedicated Gaming “Console” via Emulation

I took a few hours recently to set my Eee PC 701 2G Surf up as a dedicated emulator machine. I picked up a dirt-cheap 16GB Sandisk Cruzer USB stick for $9 and downloaded an ISO of Mandriva Linux 2011.0.

This thing is pretty sweet! It runs SNES, NES, Game Boy, Game Boy Color, Game Boy Advance, Nintendo DS, Genesis, MAME, and Sega Master System emulators. Pretty much anything 2D it can handle easily.

Even better, I had a bunch of space left over on the USB stick for mp3s and oggs, so I can listen to some decent music while I’m driving in my car thanks to the audio input jack on my car stereo.