“I wanted to prove to myself that I could be a competent programmer by coding all of Moon Jump‘s mechanics from scratch, and I’m proud to say I succeeded.”
My Role(s): Design, Programming, Art
Team Size: 1
Duration: 30 Days
Moon Jump is a 2D Puzzle Platformer developed in Unity. This page is information on the challenge I gave myself to program the game from the ground up on my own since I was not responsible for the coding of the original game. This was done to have a better understanding of how it worked in the event I ever wanted to continue work on the game as a solo project, as well as to improve certain aspects of the game.
This page only contains information on how I achieved the recreation of the original Moon Jump’s mechanics through code, as well as some notes on improvements made to certain mechanics. To see information on the original game and its conception, design, and development, CLICK HERE.
Coming off the success of Moon Jump, I was hungry to continue development on the game. I thought there was a lot of potential in the concept. At the time of the development, however, I had very limited understanding of C# and programming in general. Since programming is the backbone to all game development, I took it upon myself to learn it the best I could. I wanted to prove to myself that I could be a competent programmer by coding all of Moon Jump‘s mechanics from scratch, and I’m proud to say I succeeded. In addition, there were several improvements I wanted to make in order to have the strongest possible foundation if I wanted to build upon the game in the future.
The character movement was achieved by combining code that was inspired from different tutorials found online. The original Moon Jump had a fairly rigid jump with no adjustable jump height or quality of life features like coyote time, and I wanted to make sure to implement those. The next was the launch, which proved very challenging, as I used Unity’s physics system, which isn’t as precise as I would like a pixel-based platformer to be. During launch, the character would often ricochet off screen because he hit his head on a corner, or would get stuck on an edge. Playing around with colliders and parameters alleviated these issues. Flipping to the moon was as simple as keeping a bool tracked that flipped the Y values of the movement when the onMoon was true. To play to the strengths of my development at the time, as I was a fairly new programmer, I tried to use Unity’s interface for as much of the development as possible. For example, I used the Animator to keep track of a lot of bools and ints in order to keep the flow represented as visually as possible. Today, I am a much stronger programmer, and would just use standard code.
The sticky goo was just a matter of changing the jump height to miniscule when touching it and added a “goo stick” animation. The meteor obstacles were just colliders with a kill trigger, as were the scissor spikes.
The real star of the Moon Jump remake was the camera. I wanted to eliminate any disorientation the player might experience when transitioning between moon and Earth, as well as give a more visceral gameplay feel. To achieve this, I used Cinemachine and created an animator for it. I then told it to follow the player when it was in between the Earth and moon, which gave the effect of the player flying through space. Once the moon or Earth was reached, the player would enter a collider, which would trigger the camera to remain locked to that location. This retains the focused single screen design approach of the original game, but adds a more interesting aesthetic layer, and makes the transition a lot less jarring. One thing I did not implement that I had planned to was pausing whatever was on the location that the player was not. For example, pausing or resetting meteor obstacles when the player launches away. This would prevent cheap deaths when the player was in flight, which wouldn’t be an issue in the original game due to scenes being reloaded. I would likely achieve this by either pausing, deactivating, or destroying/recreating objects based on which bool was set (Earth or moon).