Waypoint Marker
A downloadable game for Windows
What started as a simple "Rogue Squadron spaceship controller" project evolved into a fast paced arcade vehicle action game.

This was developed as a prototype first, so there's a pretty inconsistent level of quality across this super short game. After a quick proof of concept on the jet controls, this turned into a (successful!) graphics experiment to create a lit smoke shader that I've been trying to recreate on and off for years.
Controls
THIS GAME DOES NOT CURRENTLY WORK WITH MOUSE AND KEYBOARD
One of the biggest challenges with this has been to come up with three different control schemes for three totally different kinds of vehicles and somehow making it coherent. The approach I ended up using was trying to unify around 3 anchors:
- Left stick -> Translational movement
- Right stick -> Rotational movement
- Triggers - Weapons
How this manifests in each of the three vehicle types still ends up being more divergent than I'd have liked, but something has to give somewhere when you're talking about such fundamentally different modes of transport.
The other approach I had considered was to heavily optimize the controls for each vehicle type, and tossing any semblance of commonality. This felt most appropriate for the jet, probably because of Ace Combat established muscle memory, but given that a core mechanic of this game is switching between vehicles quickly and often, I'm not confident in how well that would have worked out.
Vehicles
I've made examples of each of the vehicles in this project separately, but never all in a single project and playable within the same game. This game is meant to be very simple to play, so none of the vehicles has much depth to them, and honestly would probably struggle to carry a game on their own. The conceit here though is that you never play a vehicle long enough to get bored with it. Security in numbers, or something like that.
Tank

I've written many tanks over the years, but this is definitely my favorite. If going with a physics based solution, they are surprisingly hard to get right because of the requirement of being able so turn smoothly at speed, and at a standstill. It doesn't get easier with more realism either, because even real life tanks are awkward to turn in place as well.
The solution I went with this time was the typical Unity wheels on the road wheels approach (with lessons learned from Vehicle Sandbox), and then for turning, it's all handled through a magic torque applied based on acceleration rather than force. Acceleration was more reliable and consistent to work with, and since the wheels are kind of slippery anyway, it works out well. To prevent turning in the air, or other weird rotations, the acceleration is modulated by the percentage of wheels that are grounded.
This is also the first tank with working tracks I've ever made. It's done through the tried and true method of the tracks being a skinned mesh with bones, and a scrolling texture. I had to learn how to weight paint and it's a nightmare. I have even more respect now for 3D artist skilled at rigging

As of patch 1.1, the tank's speed and handling has been greatly increased and is facing the inevitable Warthoginization of basically every ground vehicle I've ever worked on.
Helicopter

I've written helicopters differently basically every time I've made one. When it comes to arcade helicopters, this is also my favorite iteration I've ever written. Physics-wise it's a simple zero gravity ball that you move with forces. The physics frame automatically aligns to the horizon to keep itself upright and stable. This is the simplest helicopter you could possibly write, but it looks way more physically correct than it is purely through animation.
Essentially, there's a set of hover animations that react to what the left stick does, and then a set of animations that define how the helicopter animates when at "cruise" speed. The animations then blend based on how fast the helicopter is going.

"Cruise" is the secret sauce to this helicopter though. The problem with the the zero G physics ball approach is that when turning at high speeds, you end up sliding a lot. It looks weird because helicopters don't fly like that. The Falcon from Reach actually has this problem too. You can try to counter it with helicopter forces, but then it causes the helicopter to lean into turns in an equally strange way.
The solution: A wing. It's always wings. Using an even more simplified version of SimpleWings, the helicopter has a vertical wing that balances the forces such that when the helicopter is flying at speeds, it will maintain its speed and adjust its velocity vector smoothly when you turn. This is very intuitive, and creates a fun dichotomy between how the helicopter handles at low speed vs high speed.
I'm also really happy with how SFX are handled. It functions on three channels:
- Hover: A baseline choper sound when hovering
- Cruise: The engine sound when the helicopter is flying at its max speed
- Turning: A very "choppy" sound when the helicopter animation is turning
The hover and cruise channels blend between each other based on how fast the helicopter is moving. The turning channel gets added on top when the helicopter banks and pitches, while also slightly ducking the hover/cruise channels. I got this idea from Battlefield 3/4, which has really satisfying sound that communicate the state of the helicopter.
Fighter Jet

There's actually nothing special about this one. Side stick pitches and yaws in that direction, while an auto-leveling force keeps it upright at all times. That's all there is to it. This is the vestigial "Rogue Squadron controls" that this project started out with. There is some extra roll added to the visual model that's just animation for juice.
The velocity vector is maintained with standard drag, which also means enormous forces are required to make it fly forwards, and speed has to be controlled somewhat artificially to prevent the plane from accelerating or decelerating unnaturally quick.
The fighter jet is the most contentious part in this for me, because how it controls feels very different from the other two vehicles, where the right stick is used to "aim" but that's not something that really works here. For the demo at least, I adapted the Rogue Squadron-ish controller to a control scheme inspired by the Sabre from Halo Reach, but I'm not totally satisfied with this.
Lit Smoke

A bit embarasssing to admit, but this might actually probably my favorite feature of this whole game. For a long time I've been trying to recreate the kind of smoke you see in Battlefield 3 and 4, specifically the way that they react to light. For example, if a tank is covered in smoke incoming fire and movement, when it fires its cannon the entire cloud gets lit up by the cannon fire.
Getting this to work was like pulling teeth. I had a lot of help from friends who have done similar things before. (Thanks Apoc and BigGuy!) Doing custom lighting with a main light is easy, but Shader Graph doesn't provide data for additional lights, and it gets even more complicated if you're using the Forward+ renderer which needs obscure runes to function. This is what the graph looks like for the smoke shader, but keep in mind that AdditionalLight Custom Function node is doing a lot of lifting.

As I was primarily aiming for the Steam Deck, I had to tone down the use of this effect quite a bit from the initial tests. The Steam Deck chokes on the smoke when it covers too much of the screen. Still, even with what's in the game you can still see the effect. It's really awesome, and I'll probably use this smoke in everything going forwards.
Custom Lighting

Over time I've become more cognizant of the fact that I tend to be working around and against physically based lighting rather than working with it. To create bright light over a wide area, I tend to have to make lights that blow out when something gets near them. It might be physically correct, but it's often not the effect I'm going for.
It turns out, changing the light falloff curve is actually pretty easy to do, though it does have two annoying downsides:
- You copy the URP package into your project's package folder, which means if you change Unity versions for your project you will have to resolve this.
Whenever I finish playing in the Editor, the Editor will focus on some random file in the URP package files. Over time, this started to really drive me crazy because I had to constantly re-select something I was working on.Turns out this was a bugged layout and was fixed by resetting my Editor layout!
Still, it is really awesome getting more control over the light falloff and brightness. I changed it so that you set the radius, and the intensity is how bright the light is within that area. It's not at all "correct" but it gives me the lights I was trying to make.
Patch 1.1

Based on feedback from the demo, I wanted to put together a patch to hit the biggest pain points I could in as short a time as possible to smooth out the whole experience. It's pretty substantial despite being mostly just tweaks, and even added a new weapon: the TOW Missile Launcher. See the dev log for the full changes and changelog.
Special Thanks
Thanks to MichiVGC for releasing a really cool album CC0 that I used for this game. I wish I could have used it better, but with the limited tools and time I had it'll have to do.
Download
Development log
- 1.1 Patch42 days ago







Comments
Log in with itch.io to leave a comment.
This is great, I'd love to play a bigger game like this. It actually controls pretty okay with a mouse and keyboard if you just get past the mouse not being locked to the game window.
Looks cool but i can't use a gamepad due to medical reasons. I hope you figure a way out to implement a mouse+keyboard input solution someday. :)
why are you ok
No. This is a cry for help.
i reply with a cry for the damn cursor to lock in the window
this explains the mental state i suppose