Help! Twister melted my mind!

Never fear! The user guide is here to help. Here, you can learn exactly what Twister does, and how to do it!
There are several difficult to understand features of Twister, so reading through this guide should help you along the way toward ultimate power!

(Any ultimate power you may gain from Twister is provided "as is", and is not guaranteed for all users. Recent polls show that only 12% of Twister users gain any sort of power from using Twister regularly. [margin of error: 15%])


So, what exactly does Twister do?

What doesn't it do! (okay, it doesn't do a lot of things)
Okay, okay, here's what it can do, the rest is up to your imagination!

Twister can generate:
Twisted walls, curves, curved ramps, noise displacements, circles, cones, domes, spheres, heightmaps generated from images, random heightmaps, displacements from a formula, and it can also convert displacements into brushwork.

It also has the following features:
Automatic update checker, 3D preview, support for goldsource, options to output brushwork or displacements, and more!


Woah, go a bit slower, will you?

Don't worry, the following bits of exciting text will blow you away at their level of detail. (If they don't, just read it as many times as it takes to bore you to tears.)


The very basics

So, what do I do first?

You can start by downloading Twister if you haven't already! I suppose if you hadn't, you wouldn't be reading this guide, but anyway...
Start up Twister. If you haven't got the .NET framework version 2.0, you will need to get a copy of it from Windows Update or the Microsoft download site. If you have got it, congratulations! Twister should have started. Now you can start learning how to use it.


Okay, so Twister loaded. You still haven't told me how to use it.

Patience! Bah, people these days.

Okay. What Twister does is output a VMF file containing a displacement or displacements, depending on what method you use. Once you have a VMF, you can open it in Valve Hammer Editor, or your alternative of choice, and copy/paste the generated displacement(s) into your map. (This is exactly the same for brushwork, and for Goldsource, too.)


What do all these numbers and buttons mean?

Arrgh! Those numbers are scary! Before you run away, read this interesting explanation on them, and maybe you'll grow to like them.

Firstly, we have the "standard" panel. It looks something like this:

Standard!
Amazing!

What does it all mean!? It's all explained, exclusively, right here!

Power - Power is the power of the displacement. For those unfamiliar with displacements (how dare you!), the following image may prove to be useful.

2,3,4 - the magic numbers!
Never before have three consecutive numbers been so interesting!

Power of 2 means that there are 4 partitions to each side, 3 means 8 partitions, 4 is 16 partitions. That's 2 to the power of the power field. Hence its name, power. Do you have the power?

File Type - This is pretty easy to understand. Displacement mode will output a Source displacement VMF, brushwork will output a source brushwork VMF, and Goldsource will output a MAP file so you can use it in Hammer 3.5 and below.

Stats - These are some advanced stats for advanced users, so they can do advanced things in an advanced way. No, really, it's no big deal, it was a requested feature from some Goldsource mappers who need to keep an eye on the ever-important r_speeds. Ignore this if it scares you.

Go! - makes Twister go! Did you really need to ask? Clicking here will generate your displacment.


What's this preview button hiding at the bottom?

You found it! Or maybe I found it. Or you found it because I pointed it out to you. Or you haven't found it. If so, go find it!

Click it. Go on. Do it.

ARRGH WHAT IS THAT?!

Don't worry, you just have to install a 3D library so you can use the preview feature. You only have to do it once, and it's only a 20kb download (the dialog in Twister is slightly wrong, it says 400kb). Once you get it, Twister will restart. Then click Preview again. HOLY COW IT'S A 3D PREVIEW.

The 3D is burning my eyes! With AWESOME.
This is a really fun (and useful!) feature to mess with.

I've had enough. Tell me how to use it NOW!

Yes, sir! The following is a guide to all the features of Twister, and how to use each one.


What's the deal with this "Twisted Hallway"?

I'm glad you asked! And by "you", I mean "me", because I'm writing the guide. But you (meaning "you") may have asked this question too, so if you did, you're in luck!

The "Twisted Hallway", as seen below, is a replication of a similar hallway from The Legend of Zelda: Ocarina of Time for Nintendo 64. You can make one yourself, using Twister! So, I'll introduce you to the Twist feature.

Twist!
How very twisted of you!

The Twist feature

Twisty twist! This is the very first, original feature of Twister. The whole purpose of Twister was originally for this feature. Seen below is what you see when viewing the twist feature panel in Twister.

Twist again!
The confusion begins?

You don't have to say anything. I can feel your awe using the power of the internet! Or maybe that's the after effects of sticking my finger in the network socket. Either way, now I have really bad heartburn. Thanks a lot.


Doing the Twist

Let's get along with making a twist, shall we?

The first things you will see on the Twist tab are the following fields:
Width - The width of the displacement. If you're in hallway mode, this will be the width/height of your hallway.
Length - The length of the displacement.
Mode - Hallway mode is for hallways, smooth mode is for...I really don't know. But trigonometry is fun, so I added smooth mode.
Start Angle - Smooth mode only. Sets the angle that the twist starts at.
Finish Angle - Smooth mode only. Sets the angle that the twist ends at.

This is all pretty standard stuff, but it must be noted that Twister does not generate the complete hallway when in hallway mode. It only makes one wall. Here's how to complete the hallway:

     1. Create a twist in "Hallway mode"
     2. Open it in Hammer
     3. Copy it
     4. Right click > Paste special
         -Number of copies to paste: 3
         -Rotation: 270
         -Everything else 0
     5. Arrange the 3 new displacements so that they form a hallway with the corners just touching in the x/z (bottom right) view. It should look like this:

Now that's a hallway!
Now we're getting somewhere!

And there you go! A nice twisted hallway for you to use. I expect to see at least 5 of these in every map of yours from now on!


What is a curve and where do I get one?

A curve is a...curved displacement. In fact, it's one of my favourite features of Twister! The original version of Twister only had Twist and Curve functions, so you know curve must be awesome.

Curve!
The curve panel.

Creating a curve

So, how do you make a curve?

This is what you'll see on the Curve tab:
Width - The width of the curve.
Length - The length of the curve. This is generated automatically for the best looking texturing, but you can override it if you want to sew it with other displacements.
Height - This is only valid when making a curved ramp. To take advantage of this, simply check "curved ramp". This height is the maximum height of the ramp, it will start at 0 and gradually increase to the end.
Radius - This specifies the distance from the center of the imaginary circle that the curve forms and the start of the curve itself.
Angle - You can enter how curvey your curve is. It's measured in degrees, so 360 degrees is a complete revolution. Note that you are limited here by the power of the displacement. For powers 2, 3, and 4, the limits are 90, 180, and 360 degrees respectively.

Curvey!
Curvacious.

And here is what you get if you want a curved ramp:

Rampey!
Rampacious.

What's around the corner?

A corner is a vertical curve. It can be used to make corners and the like. Yes, I know this is possible using subdivide, but here you can specify the angle you want! Yay!

Corner!
The corner panel.

Lea(r)ning into a Corner

Making a corner should be pretty straight forward.

This is what you'll see on the Corner tab:
Length - The length of the corner. This is generated automatically for the best looking texturing, but you can override it if you want to sew it with other displacements.
Height - This is the height of the "wall" the corner is for.
Radius - This specifies the distance from the center of the imaginary circle that the corner forms.
Angle - You can enter how curvey your corner is. It's measured in degrees, so 360 degrees is a complete revolution.
Make outer corner - Check this box to change the way that the corner is facing.

Cornery!
The C stands for cool.

Circular logic

This section will cover Circles, Cones, Domes, and Spheres. Why all in the same section? Because they're all very similar. Also, I'm lazy.


How to do various things

If you've ever ridden a bike before, you'll soon see that making a circle-based displacement in Twister is nothing at all like it.

This is what you'll see on the various tabs:
Height - (Cone only) This is the height of the Cone, from the base to the tip.
Radius - This specifies the distance from the center of the circle (or circular object) to the edge. In the case of Cones, this applies to the base only.
Make outer "something" - Check this box to change the way that the displacement is facing.

:O !
Super hax 4-in-1 preview.

INTERESTING NOTE: Sphere is not available outside of displacement mode because of how it generates the co-ordinates. It would make illegal brushes.
If you really want a brushwork sphere, either join two domes in hammer, or subdivide a cube of displacements and then use the "Convert" function of Twister.


Making a lot of Noise

Noise is useless, as far as I know it's either the same or worse than the Hammer noise function. I plan to make it suck less later.

...maybe.


Soaring to new height(map)s

WE'RE FINALLY HERE!

Heightmaps are one of my very favourite features of Twister. Which is odd, because there are already several tools that do it (and probably do it better).

Anyway, let's get started. Firstly, the heightmap itself.

A heightmap is a black and white (although Twister supports coloured images, it treats them as if you made them black and white) image representing some sort of terrain.
In a regular heightmap, black is low and white is high, with shades of grey representing the in-between bits. Twister is no different.

Heightmap!
The heightmap panel.

Getting a Heightmap

You have two options with heightmaps in Twister:
1. Use your own image
This is easy enough - click the "Load Heightmap" button and find your image. Supported formats are: BMP, JPG, PNG, GIF. Other image formats may or may not be supported (all signs point to NO).

2. Generate a random heightmap
This is much more fun (it is!). You can use the "Random Heightmap" controls to make a random image using a randomisation used often for terrain called "Perlin Noise".

Here is a rundown of what each control does (the default settings are pretty good for a nice smooth heightmap):
Frequency controls the number of high areas in the heightmap.
Persistance controls how "smooth" the hills are.
Octaves represent how sharp the image is.
Amplitude is how quick parts of the image go from black to white.
Coverage changes the ratio of white to black areas.
Density changes the distance between high areas in the heightmap.

Play around with it if you want, it's a nice feature (in my completely unbiased opinion).


Using your Heightmap

Now for the easy part!

This is what you'll see on the heightmap panel:
Width - The width of the generated displacement heightmap.
Length - The length of the generated displacement heightmap.
Height - The maximum height of the generated displacement heightmap. A pure white spot in the image will cause a point of the displacement heightmap to be this height.
Displacement Resolution - The number of displacements to use on each side. For example, set this to 5, and 5 displacements will be used for each side of the displacement heightmap (for a total of 5x5=25 displacements). WARNING: Setting this high will make Twister take a very long time!

Low Res!
A random heightmap with displacement resolution set to 2.
High Res!
A random heightmap with displacement resolution set to 10.

Convert to the dark side

Convert is an interesting feature. Put in a VMF and all displacements will be converted to brushwork (in VMF or MAP format).


Things to know before you convert

If Twister is in Goldsource mode, it will output a MAP file, if it is in Brushwork mode, it will be a VMF file.
Entity data will NOT convert entity data, it will NOT keep your visgroups, and there is no guarantee that all brushes will be valid.
The best way to use convert is to paste the displacements you want to convert into a VMF file, convert that, then paste the new brushwork into your map.


Formula of success

If you have no idea what maths is (and why it stole your first-born), this feature probably isn't for you. Hell, even if you do know, this feature is, in all likelihood, useless for regular mapping.
Of course, something that trivial isn't going to stop me from matching GenSurf, which had a similar feature, but it relied on Microsoft Excel, which not everybody has, and which current versions broke GenSurf anyway.

Formula!
The formula panel.

Having fun with maths

This is a difficult mode to figure out, but basically you enter in a 2-dimensional mathematical expression and it is evaluated and the results are used as the height of certain points of the displacement generated.

This is what you'll see on the heightmap panel:
Width - The width of the generated displacement.
Length - The length of the generated displacement.
Formula - Enter the formula here.
Displacement Resolution - The number of displacements to use on each side. For example, set this to 5, and 5 displacements will be used for each side of the displacement heightmap (for a total of 5x5=25 displacements). WARNING: Setting this high (above 5 or so) will make Twister take an EXTREMELY long time!

Note the following when typing the formula:
Valid formulas use - [minus], + [plus], / [divide], * [multiply], ^ [power of], ! [factorial], as well as sin(), cos(), sqrt(), and some other regular maths functions.
Be careful of divide by zero errors or trying to take the sqrt of a negative. These will stop your displacement from being generated. (Remember that radius is 0 at some point, if you want to divide by radius you can use the hidden variable "nzradius" which will equal 1 when radius equals zero. "nz" stands for "no zero")
All variables you can use are shown in the "Formula Variables" panel on the Formula tab of Twister.


Some examples (may need tweaking)

Formula 1!
200 * cos(((xval-(res/2))/3)*((yval-(res/2))/3))
Formula 2!
400*cos(((xval-(res/2))/2)) * sin(((yval-(res/2))/2))
Formula 3!
5000-(radius/16+256*sin(radius/256))