Relatively Simple

I am very honored to be hired by Carnegie Mellon University to worked as a Research Assistant and app developer during this summer. Relatively Simple is a free educational mobile app on IOS and Android devices to help students to learn physics theory like Relatively theory.

When I took over this project, the game project had already obtained several game prototypes. What I need to do is to iterate the original prototypes and introduce new features for a serious game.

During this summer, I focus on developing a educational game for this app. The game was telling players to operate their phones to help a ship to flying in the universe. Player can tilting the phone to move the ship. They can also accelerate the ship’s speed and shrink the ship’s size by walking with their phone. This game feature was designed on the Relatively theory (If you moving fast, your size will be affected).

As a programmer, my job was to add new features and polish current features of the game. After several rapid prototyping, I polish some existing features like writing new Tutorial Manager scripts to contain more information and stories, adding new UI element to show the age of characters, adding new background image for the game.

What makes me excited is the new feature that I introduced to the game. During several iterations with the UX designer, we want a graduated process for players. I added a shield and the asteroids from the level 2 so that to stimulate player actively use the relatively theory to avoid the danger. At the level 3, we give the ability of shooting missiles to the ship so the the experience will be more competitive.

From the programming side, I did lots of work to supply the best experience.

For example, to avoid a large consume of time to instantiating and destroying object, I used object pool to store the used bullet in level 3. So when the bullet hit the enemy, the bullet’s game object isn’t destroyed. Instead, it was stored into a pool. When we need to generate bullet again, the game object will be pull out of the pool.

The place of pool in game scene (Up right corner).
Set up object pool and use it
Add object to pool when hit enemy

The other I did is to improve the play experience. Since there is no speed sensor in the phone. We need to use from accelerate value to calculate a estimate value to represent the velocity of device. So we need to read values from gyroscope to accelerate the ship. In the mean time, we also collect the accelerate value from accelerate sensor to move the ship. Sometimes, even if players don’t want to speed up their ship, the speed up function can be triggered. This is because the gyroscope can read value as well when the device is tilting to move the ship.

To get the perfect solution, we need to analyze behavior models of tilting the phone and horizontally moving the phone. However, there is way to cheat in game since both function cannot be triggered at the same time. We could add a lock on gyroscope. When the ship is not moving, we unlock the gyroscope to allow player to speed up the ship. When is not, we lock the gyroscope.

Lock on gyroscope.

Beyond those, I also programed a lot of feature. Such as the Alien enemy’s AI, the shield’s behaviors, interaction between the ship and rocks and wormhole and soon.

Working with a Physics team is a extremely valuable experience for me. Sometime my previous game development experience isn’t suitable to develop educational games. There are many of Physics detail to follow. For example, when the ship finished accelerate process, it’s nature for an entertainment game to slow down the speed. However, professor noticed that there’s no friction in space so that the speed needs to be held on…The collision between entertainment and educational goal is extremely interesting! It reminds me to respect and keep tune on the detail.