Javelin, I've now managed to sort the scales for the gauges using your explanation.

The only issue I see is for the vertical speed indicator. The needle stops rotating when the needle hits +30m/s as expected (or 180 degrees of rotation).

But for negative values, it goes way beyond 180, to something like 210 degrees. The value is bound, so I'm not sure what's happening.

This is the code

Code
	{
		float
			vertical_speed,
			angle;

		vertical_speed = (metres_per_minute (current_flight_dynamics->world_velocity_y.value) / 60); //convert to metres per second

		vertical_speed = bound (vertical_speed, -30.0, 30.0);

		//
		// non-linear scale
		//

//		up to 10 m/s, move 80 deg
//
//		10 - 20 m/s, move 60 deg
//
//		20 - 30 m/s, move 40 deg

		if (vertical_speed < 10.0)
			angle = rad((90 + vertical_speed/10.0) * 80.0);
		else if (vertical_speed < 20.0)
			angle = rad(80.0 + (vertical_speed - 10.0) * 60.0/10.0);
		else
			angle = rad(140.0 + (vertical_speed - 20.0) * 40.0/10.0);

		search.result_sub_object->relative_roll = -angle;
	}