Category Archives: Volo

Progress, and a Thank You

(Shame on me, and egg on my face; this blog needs a new post so very badly.)

First, it’s video time!

This is a new level I created for the Think Design Play conference, where I was showcasing my game last month. It’s an 8km square island with a large peak and some valleys. I made sure there are plenty of interesting creases and paths to explore no matter where you look. It uses some assets from the Unity Asset Store: The Nature Pack and Cloud System to be precise, both of which I haven’t explored to their full extent yet.

A user on the Unity forums asked me for some details on how I achieved this look, and if you’re interested you can find my answer here: Unity Forums: What do you guys use for realistic terrains?

Anyway, the game was very well received and I got lots of great feedback*. A crazy amount of kind comments on the video, too! Thanks everyone.

I’ve been looking into the physics and aerodynamics again. The main problem I have with it is that the current components make it almost impossible to make the wingsuit aerodynamically stable to a satisfying degree. They lack some properties that make it hard to achieve this effect. When you play for the first time this is not too much of an issue, but after a while you can notice that the amount of oscillation and illogical stalls really get in the way. I’ll stress that I don’t want to get rid of the struggle for control, as that’s one of the most interesting things about the game, but right now some of the difficulty in control is unfair and unfun.

The last couple of days I’ve been experimenting with techniques that analyze a mesh for its aerodynamic properties. For example, using a matrix of raycasts to determine profile drag in high resolution:

Using raycasts to sample a mesh for its profile area in the relative wind.

This goes some way towards the techniques X-Plane uses for its simulation. It uses an offline phase in which it analyzes aircraft geometry in painstaking detail, storing coefficients of motion that can be looked-up while the simulation is running.

I can tell that this is not the way to go for Volo. For one, a typical aircraft has a mostly static shape, whereas a wingsuit flyer’s shape continuously changes in profound ways. The aerodynamic properties of someone curled up in a ball are completely different from someone flying in normal position. Doing this kind of analysis in real-time, say on a deforming cloth mesh and animated character would be very costly in terms of performance.

My current flight model might not be the most physically accurate, but one of its major qualities in terms of play is that every microscopic limb movement has a definitely noticeable effect on play. This nuance is exactly what I want to preserve, since it is what makes playing the game so much fun. So instead I will focus on patching the largest holes in the current system.

The other issue is that my brain is too small for the fancy tricks X-Plane does, or at least lacks the necessary training in aviation to pull them off within the foreseeable future . 🙂

 

Other than Volo development I’ve been freelancing a lot, and its finally started to resemble an actual job. I also have some things underway for the Unity Asset Store! Landmass is almost ready for release, for example.

 

Thanks for sticking around, everyone! Your kind words have motivated me to get back at it, I owe you one.

 

* I have this video of a kid playing and having the most exuberant reaction when he crashed into the completely faked ocean, he felt so cheated there wasn’t any actual water! He liked the game a lot though, came back a couple of times. I must remember to upload it.

Landscaping: Importing & Streaming Tiled Terrains

Completely out of the blue, here’s something I’ve been working on for the past month or so that might interest you:

Landmass Screenshot

A test landscape for the system

The above landscape might seem like a single, solid piece of geometry, but it isn’t. Instead it consists of many smaller peaces that are seamlessly stitched together as you move through the world.

How does it work? The import tools takes chunks of heightmaps, splatmaps and any other relevant maps, and loads them into Unity. The streaming system dynamically loads and unloads these chunks around the player.

The view from up really high

What’s so cool about this? It allows games that use it to have much larger areas of play! The system only loads the parts of the level it needs, while the rest just sits on your hard disk. Now, it won’t quite give you the whole surface of the earth to explore, but you can certainly spend ages walking towards a far stretching horizon of a level.

The test level I’m working with right now uses heightmaps with a 1 pixel-per-meter resolution to form an island of about 16 square kilometers. The individual chunks have either 1 or 2 splatmaps assigned to them, with 4 channels each. Compressed on disk this results in a package of around 200MB, so a full game could have a lot more of it. Plus, a game like Volo could easily manage with a 2 pixel-per-meter resolution, doubling the potential size. I have yet to explore the idea of having different map resolution for different tiles, but such a thing would make sense for chunks of terrain that you don’t expect the player to get close to.

Both the importing and streaming system are built to be highly configurable and extensible. More on this later, but right now I’m interested to hear what other developer would want from this tool, so I can make sure everybody’s happy. If you have any suggestions: Let me know!

An early snapshot of the editor, to be overhauled later.

Note: I was originally developing these systems for Creath Carter, a fellow indie developer. He has kindly let me develop this into a tool I can use for Volo and sell on the Unity Asset Store as middleware. The terrain meshes in the above screenshot were generated by him using World Machine. The textures and engineer character are some default Unity assets.

Volo Modding

Wooh! Exciting techno-mumbo-jumbo coming up! 🙂

Unity’s game object system has a base-class called MonoBehaviour, and every script you want to use in your game scene has to derive from it. Thus, you use it for everything, it is your hook into everything that is Unity.

Mod makers for a Unity game would need to write their own MonoBehaviours and plug them into an existing game, but earlier versions of Unity did not allow the use of MonoBehaviours loaded from external libraries (those .dll things). This meant that for modding you either had to provide a system to link MonoBehaviour stubs to externally loaded behaviours, or just let go of your big ideas altogether. With Unity 3 though, it now appears that you can spawn MonoBehaviours loaded from external libraries directly into a scene! Score!

Admittedly, I only did an absolute minimum of testing. I created a subclass of MonoBehaviour like so:

Then I built this into a library, imported it in Unity, and lo’ and behold: The editor even allows you to drag and drop classes from the library straight into the Inspector! Dragging it onto a game object and running the scene results in a printed message, as expected.
I believe this means several things:
  • I can let the Volo application load user-made scripts at run-time.
  • I can let users create their mods using the Unity editor.

I can even do this without having to give modders all of the source code. Instead, I just compile all Volo code into a library of its own, so people can link to it from their Visual Studio or MonoDevelop projects.

I’m really curious to see where this goes, and whether other Unity developers will do something  like this. As far as I know nobody is doing it yet. 🙂

Drawing Plans

Long time no blog, high time for an update!

First off, here’s the trailer I made a while back, it conveys a lot about the current state of the game: Volo Trailer. (You’ll have to forgive me for not embedding the video, wordpress won’t let me for some reason.)

Yeah, that's totally Bispen!

The first proper Volo Airsport trailer! Click the image to see it.

I did an experiment with Unity’s cloth physics, of which you can get some impressions here: Cloth Physics.

Look! Wouldn't that be just the best thing since... since blocky wings?

Using cloth this way would likely result in a unified approach for modeling all ram-air surfaces in the game, in a way that its easy enough for players to design & tweak the shape of their own canopies and suits using an in-game editor. How cool would it be to try and make that Vampire3 fly faster? Mind-blowingly cool, that’s how. Unfortunately it turns out Unity won’t let you read vertices back from the deformed wing mesh, so there’s no way of analyzing a cloth wing for its aerodynamic properties. Not yet anyway, I have good hopes that this feature will become accessible at some point in the future. In the mean time I’ll have to think of something else, so back to the drawing board!

As for the grand scale of things, I’m looking into setting up my own business so I can continue work on the game. Next to working on the game I will spend considerable time doing freelance game programming to build up some funds. I will also be setting up a little online store where you can buy early access to Volo, and some Unity scripts that people have expressed interest in such as scalable input and GUI systems.

That’s it for now. 🙂

Development Tidbits!

High time for an update, methinks!

Non-Technical stuff

I have been demoing the game to more and more people, and I’ve been streamlining the feel of the game according to the feedback I’ve received so far. The design principle I’m trying to use is something you can call ‘layered complexity’. I’m making sure that the basic flight manoeuvres are easy to use; you can now perform broad banking turns using a single analogue stick, for example. Fancier stuff (for harsh turns, flips, barrel rolls) will be accessible by using the other controls, turning off assists, and using the basic controls in new ways. The crucial things is that you will have all those things available from the start, and you can explore them at your own pace.

I presented the game in playable form at Joint Venture: Check de Technique, which was an event in Amsterdam about games, audio and technology. Many people liked the basic control scheme, and noted that while it felt really solid, they also liked the sense of growing instability at high-speed manoeuvring. Jarno proposed hosting a playtest session in the AirRebels office soon, and I’m really looking forward to it. If you’re in the neighbourhood of Rotterdam, let me know!

Also, wingman (which is what we call our courageous stick-figure) now has elbows, and he has gotten a tiny bit smarter. New video soon.

Technical Stuff

I’ve been working on the framework for the game, which consists (among other things) of:

  • Networking
  • Editing, saving/loading player settings
  • Game types
  • Event system
  • Runtime assembly loading (for mods!)

Networking is coming along slowly but surely. It’s requiring a lot more study than I thought beforehand, and I’m starting to understand why networking experts get paid so handsomely. I’ll get it done though, I’m sure of it.

The other major thing I’m trying now is loading .NET assemblies into the game live, as described here: http://eej.dk/angryant/general/tipsandtricks/downloading-the-hydra/. Long story short: That trick allows you to build mods for the game using normal Unity scripts. If everything works out I think I can make the workflow such that you can build a mod using the unity editor, compile your custom code using Visual C#, and tell the game to load your compiled mod at startup. How cool would that be huh? Now, I don’t think there has been a Unity game that uses this trick so I’m unaware of any caveats, but since this is coming from one of Unity’s own developers I recon it has serious potential.

That’s it so far, cheers!

Playtests, Networking and Logo Design

I’ve been a little too quiet lately! Here’s a collection of Volo-related tidbits that have been going on.

Playtesting

Over the last couple of weeks I’ve put the game in the hands of a bunch of friends. They played a slightly more updated version of this:

In short, they loved it! This is the first version that really engaged them in a just-one-more-go kind of way. This means that the game is intuitive enough to pick up, deep enough to provide a lot of choices and room for skill development, and contains enough feedback for people to identify things they are doing right or wrong.

Feedback

Amongst all the feedback I’ve gathered several things were key:

  • While control feels smooth and fairly intuitive, precision is often either too coarse of too fine. This depends on what they wanted to do of course. When you are performance flying you want to use the full range of your input device for generating very small but very precise moves. Coarse input here means that your movements get exaggerated, which can throw you off course and make you lose altitude fast. I had added some tricks to dynamically alter your precision, but apparently I’ll need a more rigorous solution.
  • Gametypes, ranging from real-world (think proximity flight, formations) to very game-like mechanics (think James Bond action scenes). Many people would also like to see the game’s scope include normal skydiving and basejumping. I’m aiming for the game to be flexible enough to allow all kinds of game types, created either by me or by modders. By keeping my code well-organised and by paying special attention to possibilities for code reuse, hopefully you will even be able to do some hanggliding or skysurfing.
  • Multiplayer! This is by far the most requested feature. As well it should be; skydiving is hardly a solo activity, right? Since this feature is so important it has become a top priority to get some netcode fixed.
  • A replay/ghost racing system. This will get in right after the netcode is done, as it will use a great deal of its functionality.

Some of these features are also based on discussions on the community forum. Check out the Ask The Developers and Wishlist threads to see all the features that the forumites have come up with so far, they’re all very good food for thought. And while you’re there, why not drop in some of your own ideas; we can always use more!

Logo

In other news, a couple of graphic-design buddies have started brainstorming about Volo’s graphical style. The logo is their first point of interest and I’m very curious to see what they’ll come up with. Many thanks, and good luck to them!

That’s it for now. I’ve got some course-work related deadlines this week, so I’m not sure how much work I can get done, but we’ll see. 🙂

Open Development

I’ve been thinking about switching to open development for Volo. Open development, in short, means that you make the development process very transparent. There are several things you can do, including:

  • Maintain a publicly available, detailed log of all important developments.
  • Keep in close contact with the community, by all means available.
  • Make some or all of your game’s  assets (code, models, textures, etc.) available online. (Under GPL licence, and for preorderers. People still have to pay for the actual game.)

By doing this you sacrifice privacy for exposure, which is something any small-time developer can always use more of. By being so open you can maximise the chances of serendipitous events happening. You can make a lot of friends, grow a community before the game is out, and people can support the project in all kinds of ways. For example, people can create their own modifications, and fix bugs that you’ve missed.

Anyway, Wolfire (developers of Lugaru and the upcoming sequel Overgrowth) have a more detailed post about this, so I’ll let them explain it: Wolfire’s PR Tips.

The reasons I’ve started thinking about opening up Volo’s development process are numerous. Here’s some of the important ones:

  • The game needs to grow a lot if it is going to survive. And it will not do that as long as it stays within the confines of my bedroom.
  • Some prominent indie developers have succesfully used open development to make a name for themselves. Look at the Humble Bundle to see what I’m talking about.
  • I like sharing. If people can learn from my work then let them. If people can contribute to my work then let them.
  • Unity does not support an easy way to facility game modification, even though it should. This means you cannot, for example, use the Unity Basic edition to write a new multiplayer mode for the finished game using Unity script. This limits my options for allowing mods, unless I integrate my own scripting tools, or go open source.

So what do you think? I know that you like to know what’s going on in my work-shed, I know that you really want mods,, and I know that some of you would be delighted to contribute some content to the game. Also, would you consider paying for a game that’s not nearly finished for a chance to play with the source code, or just to support a smalltime developer?