Side Project: Cards

It’s been a while since the last update. Like many developers I sometimes get caught up in the idea that something I’m working on needs to be perfect before showing or talking about it. But of course no project reaches perfection so why not share something now.

I’ve got a handful of personal game projects that I work on at home, all in unreal so far. I work on them in a rotation based on whichever project I’m feeling most excited about at the time. It’s a system that, so far, I like more than dislike, because although it is annoying to have lots of “unfinished” work, it does mean I’m only ever working on something I’m excited to work on, which is more than can often be said of our jobs.

VR Card Table

The first I’ll post about is my VR Card Table. The original inspiration for this was a trip to Vegas a few years back. Usually when a Vegas trip is looming a month or so away, I get really interested in probability and gambling strategies. Then, I go to Vegas, break even if I’m lucky, and then the enthusiasm fades to wait for the next casino trip.

Always of particular interest, just from a skill perspective, is blackjack and its various card counting systems. I had the idea that one could create a fairly comprehensive blackjack trainer in VR using completely in-world UI to assist in things like teaching strategy and highlighting high and low cards for counting. So, I started this project.

Current state of the blackjack game. The standard game rules are fully implemented. Currently only operated by the keyboard.
Run-through of the basic blackjack counting exercise. The goal here is to count high and low cards and hopefully have a total of 0 at the end. Cards are advanced via the keyboard.

The first thing you’ll notice is that neither of these videos is in VR. Didn’t I just say it was a VR card table? Indeed I did, however I often find it fastest to develop by spending as little time in VR as possible for things that don’t need it for development. In the current generation, getting into and out of VR is annoying, requiring you to always pop the headset on and off of your face to see what’s going on. This really slows down iteration time, so I prefer to develop entirely on my monitors wherever possible. As you work in VR you get a sense for what does and doesn’t need to be looked at a lot in VR to make work. I do make sure to spot-check things every now and then just to make sure the scale is right.

There’s no on-screen UI. Again, since this meant for VR there can’t be any traditional 2D UI. This is a little bit painful right now because while there is a rich history of 2D UI design and frameworks, there’s very little out there right now for building fully 3D in-world user interfaces. It’s mostly ad-hoc and slower to develop, and the design landscape is basically the wild west right now.

Thoughts So Far

Animating cards in 3D is a trickier challenge than I first thought. In 2D, because of the orthographic view, you can essentially have stacks of infinite depth. Any amount of cards can be hidden behind a top card without it looking unnatural – you just slide one card underneath the other and it disappears. In 3D this is not so – every single card needs to be in a location that makes physical sense. I now have an extra appreciation for the work that went into Hand of Fate (which you should definitely play if you like procedural-ish dungeon crawlers). You’ll notice in the counting video that the right stack starts full, and as the cards move left the stacks change height. In the blackjack game, the individual cards themselves have to be stacked on top of one another to prevent the top surfaces from depth fighting. This is an interesting new problem with VR, where some of the conveniences of using a digital medium have to be sacrificed when trying to create skeuomorphic interfaces. There’s a whole world out there of non-skeuomorphic ways of doing things that the industry as a whole has just barely started to explore.

Scope creep is starting to come in. What started as purely a counting trainer is now transforming into a general-purpose card game engine. I’ve created a generic graph-based way to represent card games that I think should be able to represent most commonly played card games. I’ve taken a break from blackjack to start on a solitaire implementation using this system, which is working well so far. I do still need to make sure I stay fairly focused so I don’t end up wandering down lots of different paths, never finishing anything.

The next thing I finish on this project will probably be the solitaire game. I’m working on a ui using actual tracked controllers. No idea when that will be though, because I may put Cards down soon and switch to one of my other projects for a while.