S-CAB, Planar Arcade Game Exploration on Snap Spectacles

Time to ride your S-CAB!

Last month, we inaugurated our pinch-joystick input method with Snak, available for the Snap Spectacles. With our new game, S-CAB,  we wanted to explore how it felt for a planar game, so voilà, a car game was born.

Relative Pinch Joystick

Initially, we went with relative driving, like the good old top down car games where left meant turning the car's steering wheel to the left.

But, since our joystick is virtual, it contains no information about the user and we had to define a reference vector (as opposed to a physical joystick where left is defined by the hardware implicit position in the user’s hand).

We initially used the orientation of the Spectacles themselves, but the user's hand can be anywhere around the elbow, and the left-right movement may end up being aligned with the Spectacles' orientation making their orientation unusable for determining left/right.

So we then used the wrist to 'pinch position at start of input' as reference, and that works great in any hand position.

We thought we had it! Then actual players showed up, and we realized how much players struggle with relative controls… in the end, we threw all that out and switched back to absolute direction input as we had in Snak. You win some, you lose some.

Particles

We used particles for the first time for the tire tracks to enhance the cab drift but also for the arena border and drop off location.

Generally, they're already quite capable! Lens studio VFX/shader graph is a very good foundation. It's a combination of VFX and shader graphs where every module code is viewable.

These were the sorest points:

  1. The viewport is lacking as it doesn't have effects. You have to look at the effects in the preview, which is hard to navigate. It feels like doing surgery with a drone.

  2. Every small parameter change in the lens involves saving and waiting for the preview to update - a killjoy when you make and view hundreds of little visual parameter changes.

  3. The VFX/ Shader graph should really allow multiple particle emitters and outputs per graph.

  4. Having a trail renderer would be nice.

Code

This second Spectacles project was entirely in Typescript, which felt much better with full autocompletion and other benefits discussed in the previous post.

Our biggest issues still were cache folder issues.

Status of our wish list:

  • Fixed update, or maybe fixed delta time, to be able to do frame-independent logic

  • Nested prefabs

  • Physics component having kinematic and constraint position/rotation options

  • Scriptable object asset to store values in (game settings, dialogues ,etc.)

  • Way to save/load editor layout

  • Dragging a component in the inspector field to assign it (instead of SceneObject)

Some nitpicky but essential QOL stuff

  • Shortcuts for enabling and disabling SceneObjects

  • Unpinning the inspector should display the scene object that is currently selected in the inspector

  • Pressing highlight should clear the asset browser filter and show the asset

Design

Thanks to Drift Demon by hi rohun, and Crazy Taxi for inspiration.

Initially, the arena had a floor, but a large occluding flat surface did not feel good. So, we tried without: a nice learning is that if you have enough elements that define a surface by being on it you don't actually need to show the surface.

We started with Pinch-length controlling acceleration. However, depending on how you tune it, that either invites players to large gestures or makes the input too sensitive to hand movement. We then agreed that we should instead empower minimal movement for comfort and ability to play during a meeting without revealing yourself, therefore the auto perma acceleration.

Which then brought the nice secondary mechanic of having to drift to brake, putting even more emphasis on the drift.

Our initial two word pitch was: Car Sumo, some of it made it to the game with the enemies bumping you off platform. If there's any regret, it is not having given the cab a way to fight back. Especially since the 'carrying passenger' gives a nice on/off state that could be used for alternating chased and chasing. We even tried rear bumping as a skill move to knock off enemies by sliding into them rear first. But it was hard to tune, and the one month that we gave ourselves meant that this idea will have to hitch another game.

Finally, while the game gets more plays here than Snak, with a more addictive 'one more run' replay vibe, alas, it's clear that gameplay captures aren't nearly as interesting with planar games. And so for our next game, we'll go back to volumic scenes.

One S-CAB tip: learn to unpinch. When the car is going in the right direction, stop pinching, focus instead of planning your next drift. Learn to let go to go further. S-CAB poetry for you. And now on to a new lens game!

Previous
Previous

Three Studios, Thirty Days, One Sweaty Challenge

Next
Next

Diving into Spatial Gaming with Snak on Snap Spectacles