• +1 (613) 793-4672
  • jobs@stemworldeducationalservices.com
  • Nepean, Ontario, Canada

This webpage was created by an ESL mechanical engineering student. Proceed at your own risk.

Our game

Description:

Rocky Blast Off is a zero-g flight simulator. Players have to succesfully control their spacecraft to accomplish various objectives. Because there is no air, so no friction, in space, the spacecraft keeps moving until the player adds a force that counteracts the spacecraft’s movement.

My role in the project

Physics

Spaceship movement physics

I wrote most of the code that controls the movement of the spacecraft. Using Unity’s physics engine, my code simulates the pulses of real RCS thrusters to move and rotate the spacecraft. I also implemented the user input processing needed to allow the player to actually use all the movement code I created. I tuned the force of the thrusters to give the best gameplay experience possible while staying somewhat realistic.

I also implemented a feature that stops the spacecraft’s movement using almost exclusively the movement physics I created. It simulates user inputs to slow the spacecraft as much as possible before overwriting the velocity to stop it completely. It was the best I could accomplish in a limited timeframe, but it is still more realistic than stopping instantly. It also allowed me to take into account the fuel usage of such a maneuver.

Fuel consumption and mass

I added, to the best of my abilities, all the calculations needed to simulate the consumption of fuel and it’s effect on the spacecraft as realisticaly as possible. The consumption of fuel depends on the force applied on the spacecraft by its thrusters. This means big and small thruster pulses consume an appropriate amount of fuel.

The spacecraft has a realistic mass for it’s size. It carries a realistic volume of fuel, and this fuel has a realistic mass for hydrolox-fueled engines. This fuel is used at a mostly realistic rate by the engines, although an isp of 450s is high for a RCS thruster.

Collision physics

I implemented the collision damage feature using Unity’s physics engine. When hitting objects, the spacecraft takes damage according to the force of the impact. This scales the damage according to the impact velocity, the mass of the spacecraft, and the angle of the collision.

Programming

Sensitivity controls

I programmed a way to change the sensitivity of the controls while playing the game. I re-wrote the behavior of an UI button to control this. Each type of movement (translation and rotation) has it’s own sensitivity steps list, controls, and pointer.

My sensitivity control code allows for easy expansion of sensitivity options. UI elements scale automatically to provide visual feedback of active sensitivity steps, regardless of their number. The code automatically loops through every sensitivity step, dynamically adjusting to changes in the number of steps. Each sensitivity step can also be quickly changed.

All of this allows for extreme flexibility in setting available sensitivity levels for an optimaly precise, but also quick, control of the spacecraft by the player.

Level unlocking

I worked on a system that locks levels until the previous level is successfully completed. I added an overlay and an icon over locked levels. The game also saves which level have already been unlocked between play sessions.

HUD

I programmed a couple of the UI elements, either partially or completely.

The UI markers were completely me. I had the idea, made them, fixed all the issues they had, tweaked them, fixed them again… But now they work beautifully.

I also worked on the stop button (mostly on the physics behind it) and on the various position indicators, tweaking and modifying them to make them more accurate and useful.

Look at this beautiful masterpiece

Game design

UI design

I designed the theme of the game UI. I chose the colors, the fonts, and the look of the buttons for the entire UI. I also designed the layout of the HUD.

I chose the color of each HUD element for maximum consistency. Green elements relate to the velocity and angular velocity of the spacecraft, and the green marker shows its current velocity. Purple is used for position and angular position, the purple marker (the wave in the middle of the screen) showing the angular position of the craft. Blue, as it is the main color used throughout the various game menus, is used for non-informational elements. The objective marker is yellow because it looks nice.

I searched for and found a suitably licensed font for our purpose on the Internet.

Level design

I designed about half of the level basic ideas.

Game mechanics

A good portion of the game mechanics were my idea.

“Art”

UI graphics

I made most of the icons we used for our user interface.

I learned how to use the vector graphics software Inkscape, my first introduction to the matter, to create them.

Roll buttons icon, in Inkscape

Spaceship models

I made the spaceship models we used throughout the entire game.

I modelled and textured them entirely by myself.

I learned how to bake the textures I created in a way that would allow them to be exported sucessfully to Unity.

It was my first time using a mesh editor (Blender), and they do not work like the CAD software I am used to. It took a while to learn how to use it.

Spaceship model in Blender

Big hydrogen tank normal map. This image tells Unity how light should bouce off the surface, creating the illusion of bumps and ridges without having to add a ton of geometry.

Gantt chart