April 7, 2013

Category: News

Author: Charles

Developer Diary - 3D

Work on improving the camera control in Concealed Intent is largely complete. At least until testers make new suggestions. It is now much easier to navigate around the 3D playing space in a scenario. Replacing scale with zoom is one of the changes, now with added tweening between zoom states. Another big change is the addition of a map mode – as shown below.

Above the green player’s ship is being pursued by 6 red enemy ships near an Earth-like planet and its moon. It should hopefully be clear where the ships are relative to each other due to the scale and height markers. A player can can easily access the map mode, or return to the close-up view with a single key press (the “space” key at the moment).

Many of the camera control changes originated in remembrances about old space games. For instance, the height markers in the map above are inspired by the original Elite game (nearly 30 years old!). Camera roll has also been removed. There are 3 ways to rotate an object: pitch; yaw; and, roll. Roll seems to lead to confusion. People seem to better understand where they are if the “up” direction stays constant. I also learnt the hard way about gimbal lock. So pitch beyond 85 degrees (up or down) is disallowed to prevent the system breaking. I bought the FPS Camera Kit from the Unity Asset Store (well worth it). It’s code couldn’t be used out of the box, as Concealed Intent is clearly not a first-person shooter. However, many of the cool ideas it uses to make camera movement smoother are now in Concealed Intent. Mouse input is now averaged over a number of frames to make it less jerky. Also movement is accelerated – if movement is continuous then over time the camera moves or rotates by larger amounts.

The next task is a quick cleanup of some dodgy code added while experimenting with various control techniques. Then comes the big job of cleaning up the HUD. Then better enemy AI and game balance with the aim that the next alpha release is fun to play!