Phazor is a physics puzzle game where players use magnetism to progress through levels. Players indirectly control a ship by placing either positive or negative megnetic anomalies, which will either repel or attract their charged ship such that it reaches their goal.
Derek Rooco and I sought to create a game that could be played on any system - computer, phone, or tablet, but that would also provide a full-featured user experience. We wished to create a game that, unlike most, could actually reach market and captivate audiences.
In Phazor, each level is broken into two stages. In the first stage, players may examine the level and place magnetic anomalies, each with either positive (red) or negative (blue) polarity. Then, the player launches his ship to begin the second round.
In the second phase, players no longer place nodes. Instead, their ship travels through the level and is pulled or pushed by the nodes they placed earler, so that they do not crash into any obstacles. At any time, the player may swap the polarity of their ship, which inverts the effects of all nodes.
Players win a level by reaching a goal with their ship. Players who successfully reach the end are given a score based on the number of magnetic anomalies they had to place in order to win. They may then proceed onto the next level.
The game begins with a tutorial, which teaches players how to place magnetic nodes and how they affect the environment. As they progress through the game, they must cross progressively more difficult obstacles, including moving platforms and spinning wheels.
Technologies and Algorithms
Phazor is developed written in C# and developed in Unity 5, a popular videogame developent engine. Because Unity doesn't have support for magnetic attraction (or gravitational attraction in a non-uniform direction), we implemented our own engine for that purpose.
In addition to its built-in levels, Phazor also provides full custom level support. Users can create their own levels of the same quality and with the same game elements as ours. We feel that this is an essential tool missing from many modern games, and we are happy to support it.
Users specify their custom levels in XML, and can customize a very large number of attributes for each game element. Furthermore, unlike many level editors, there is no grid system or limited set of structures that can be built; users can place any interactive game structure with any precision.
Here's an example of the XML used to create a custom level. Each tag represents a particular game element, and each of the attributes is some configurable property of that element. A screenshot of the level this produces is available in the image gallery, as the last image.
<?xml version="1.0" encoding="Windows-1252"?> <CustomLevel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SerializedObject> <SerializedObjects xsi:type="PlayerSerialized" xpos="-9" ypos="8" xvel="0" yvel="-150" /> <SerializedObjects xsi:type="GoalTargetSerialized" xpos="10" ypos="-6" size="1" zrot="70" /> <SerializedObjects xsi:type="WallSerialized" xpos="2" ypos="-6" zrot="-30" yscale="4" /> <SerializedObjects xsi:type="SpinnerSerialized" xpos="-9" ypos="-3" zrot="0" rotspeed="40" sticksize="4" beamwidth="6" /> <SerializedObjects xsi:type="SpinnerSerialized" xpos="9" ypos="3" zrot="0" rotspeed="-40" sticksize="3" beamwidth="8" /> </SerializedObject> </CustomLevel>