
Halo Wars
Analysing & Reverse Engineering in unity
Intent
Goal
Software
Improving: Ability to analyse & reverse engineer games.
A few prototypes reconstructing elements of the game 'Halo Wars'.
Skills Improved
- Analyse design & construction of games through playing
- Technical prototyping of mechanics/UI
- Reproducing a game's elements in a different engine
- AI flow field pathfinding
- Programming: Basic RTS mechanics, camera controllers, Basic RTS AI.
- Writing visual debug tools
Analysing - A vital skill
Being able to analyse a game (and take out what was done right) can be a big boost to your own designs. This isn't just limited in a technical way, as gameplay design or user experience are also major factors to analyse. The top successful games are often built from what succeeded on other games.
This project was to learn the skill to analyse a game while playing, and reverse engineer some key elements in Unity. Analysing 'Halo Wars', I chose to keep it to technical prototypes to gain technical insight and use them to answer some user-experience related questions.
Prototype: Radial Menu UI
How does a radial menu work? How can it be set-up to work with a controller? How does it improve user experience? Questions I asked myself while playing Halo Wars, so naturally I wanted to give it a go with a prototype.
To reproduce, I noticed a link between a controller joystick and a circle: Radians. Making use of Unity's Atan2 function, I was able to calculate the joystick angle position. The rest was a UI quick-fix.
"Does it improve user experience?" Yes. It navigates faster, feels more natural, and seems more immersive when using a controller.
Prototype: Land Vehicle AI
How does an RTS AI work? How does it find its path? How do AI unit groups move without glitching each other? Prototype incoming!
This one was more technical. Research was a must, and I came to testing a 'Flow field': A value-based NavGrid where each 'tile' would be given a value depending on terrain roughness, or 0 if it wasn't accessible. I had an AI car follow simple pathfinding on this flow field (fastest path = smallest sum of tile values).
I had a working single-unit prototype. I didn't get to work out a multi-unit system, as time unfortunately ran out.
Prototype: RTS Camera
A good camera is very important to the feel of a game. I decided to prototype to find out what exactly made Halo Wars' camera feel smooth. Creating a camera controller is easy, the hard part was finetuning it to make it feel as smooth as the Halo Wars camera.
What I learned was that the camera needed to smooth its movement begin, yet be instantly responsive to joystick input. The zoom was a spherical zoom. The most important was the camera's 'unit-magnetism', a feature that smoothly attracted the camera to the unit when the crosshair was close. This generates a feel of 'stability'.
Combining the prototypes
With a bit of time left on the last prototype, I decided to combine the prototypes to check if it resembled the analysed game. With a bit of imagination, the prototypes did come close, and it gave me a bit of insight: A good RTS AI-unit will give the player the feel of controlling something lively; having the unit interact with the environment with visible physics is a good way to create this liveliness.