Volo – The Story So Far

In this post I’ll detail the work I’ve done on the game so far.

When I started building this game about 8 months ago I had a couple of years of programming experience, but no extensive knowledge of physics or specific game-related technologies. Thus so far the development process has mostly consisted of learning a whole lot by study, and trial and error.

This is where I am right now:

It features separate rigid bodies for each limb, linked with motorised joints. I’m planning to add knee and elbow joints soon. This will allow greater fidelity in your movement, giving you more fine-tuned control over your flight and enabling aerobatics. Ironically, in real-world flight you get the best performance by keeping your limbs straight and stiff as a board. But not having the option of twisting and turning them currently makes the game feel a little artificial. All the body parts are affected by custom drag algorithms. I needed to do this because Unity’s physics engine does not have any concept of airflow in it, which is quite crucial for any flight simulation.

The wings are still just single sections and completely rigid. In an actual wingsuit the wings consist of a number of flexible ram-air cells (like modern parachutes), and their performance changes continuously as they are twisted and skewed during flight. I’d like to model this eventually, but it is not currently a priority. The wings are linked to the body parts with various anchor points, and apply their generated force to all connected rigid bodies. I’ve built a tool with which I can quickly define a wing’s aerodynamic characteristics, regardless of physical correctness. This allows for very quick prototyping, but leaves the level of realism entirely in the designer’s hands. That will most likely change as the simulations becomes more detailed. 😉

The joints are driven by a controller script that translates pitch, roll and yaw input from a gamepad to joint rotations that are appropriate for any given context. This means that your input is interpreted differently depending on the way you are oriented in relation to the airflow. Think about it like this: flying on your back requires very different movements compared to flying on your belly. But you still want to be able to use the gamepad in a consistent manner: Pressing forward on the stick means you want to pitch your nose down, no matter what your current situation is.

I also have a module that handles artificial stability. We humans are just not made for flight, no matter how fancy we dress ourselves up. Planes like the Cessna 172 are built to be very stable, so if you release the controls it will automatically slip into a stable trajectory. Wingsuits have no such properties, they’re more like a Eurofighter in terms of handling. You have to constantly make very tiny adjustments to your posture to keep flying the same heading; If you don’t, you tumble down uncontrollably! Those tiny corrections are practically impossible to perform using a gamepad or joystick, so you need a fly-by-wire system to do it automatically.

So that’s what I’ve got after eight months of tinkering. I’ve kept a backlog of code and videos of earlier version, and I’m posting the latter here for all to see. I shrug heavily while watching some of them; they seem so utterly inept. Nevertheless, they each represent crucial steps in the development process, and you can clearly see the progression made. I plan to keep this trend going. It serves as a personal reminder that you cannot do big things in single steps. Instead you make small steps and just keep at it, and eventually you get where you want to be. Now, without further ado:

This is the result of several weeks of learning to do some vector manipulation to get my first lift equation to work. It’s basically just a single, solid wing. You literally pushed on the sides of it to make it go anywhere, kind of like a surfboard. At this point I got in contact with Jarno Cordia, an experienced wingsuit flyer and 3D animator. He kindly offered to advise me on the mechanics of flying with a suit, and to join the team as a modeller/animator.

For this prototype I separated the suit into three wings which could be rotated independently. The body was still modelled as a single rigid body.

After some tweaking we felt it was time to show the game to some people and get some responses. I sent some footage to Jarno, and he produced this very slick trailer. He didn’t just stop at showing the current state of the game (which would have lessened the impact significantly), but instead made it clear what we want the game to feel like when it is finished.

After that the goal was to introduce multiple deformable body parts, which is ultimately what separates a wingsuit from a normal aircraft. The first prototype was of course completely uncontrollable and felt very artificial, but it was a start.

After about a week of tweaking and building more intricate control scripts it became somewhat steerable, though it required rsi-inducing practice. It wasn’t just the control mechanisms that were lacking, the simple aerodynamics I had used so far revealed far too many irregularities to stay practical.

This last prototype eventually lead to the one at the top of this post, which is quite playable.

Right now I’m working on the following things:

  • A new and robust model for drag calculation.
  • Splitting the limbs up into upper and lower sections, also linked by controllable joints.
  • Linking up the physics system to an animation system. I’m planning for a lot of the animation to come straight from the physics.
  • A basic fluid solver that is scalable by a level-of-detail system. High detail flow around the player, low detail flow in remote areas.
  • Linking the physics system up to a prototype version of Singularity for synthesising the airflow sounds in real-time.
  • Getting to a level of playability suitable for alpha-testing.

So there, eight months well spent? I certainly hope so. If you have any cool ideas for game play or features: Let me know! I’m always on the lookout for interesting input.

Thanks for reading, and stay tuned for more info!

  • Murcuseo

    Its very interesting to see the progress you’ve made since the first demo video, I have to say you’re mind seems to be like a sponge if you can manage to soak up all that information in 8 months. You and Jarno must be working hard at this 😉

    Is the control system going to be based aroud a gamepad or will there be a keyboard+mouse setup aswell?

    • As a general rule for myself: I try to keep my brain as spongy as possible. And yes, it’s quite a bit of work, but that’s not a problem when there’s passion involved. 🙂

      The current prototype is unplayable by keyboard and really requires a gamepad to give you enough fidelity. As I get the physics more robust and the assist systems and stabilisers worked out though, keyboard and mouse support will be back in the picture. Not everyone has a gamepad handy, so keyboard and mouse should be properly supported.

  • Murcuseo

    Excellent, I’m not entirely sure if a gamepad or keyboard+mouse would be better for something like this but I have both so if you open alpha/beta test it with both supported I’ll be sure to give them a try.

    I have a feeling that a gamepad would certainly give you more control over pitch, roll and yaw but you can define more control options on a keyboard+mouse set up… suppose it depends on how complicated you’re going to make the controls.

    Have you thought about difficulty levels yet, maybe having 3 or 4 different levels from Easy through to Extreme. Having the stabilizer settings and assist decrease with the higher value would be an excellent feature and would give the game longevity in its playability… the more seasoned player would be able to test their skills in a more intricate way!

  • Exactly, turning on an off assists is how I want to handle difficulty. I don’t even want to hide those settings under “easy, medium, hard, realistic” settings, instead I’ll just present options for each assist individually so you can influence how much they are involved. This is what Forza 3 (racing sim) does for example, and I think it is very elegant.

  • Murcuseo

    Having that kind of customization throughout the game would be an amazing thing, the only problem is that would create a huge workload for you and with the amount of other things you seem to have going on at the moment that might create unnecessary pressure.

    I am thinking off far into the future though so I guess its an idea worth exploring, maybe once you have time you can post in more detail about your plans for the control system.

  • Magiguy101

    You sir, are a boss. I love the idea of wingsuit skydiving and this is just awesome… Keep up the good work and good luck! 🙂