Super jumper is a game that combines both the action of jumping and running of a crash bandicoot game and the art style of an 80’s music video. Jump on boxes to collect points, health, or checkpoint and change the color of your character to interact with or evade boxes and obstacles.
This game was created in the game engine that was custom-built for the graphics programming course at my school, together with this tool to create levels for the game.

This game was featured on the Digital Arts & Entertainment website.

Try out the game (Download)

Features:

  • Physics system and character controller created with C++ and PhysX.
  • Boxes and obstacles for the player to interact with.
  • Rounded world, sky box reflections, bloom box animation shader for HLSL.

Physics

The physics in this game are created using PhysX. The player is created with a character controller and almost all objects are static meshes that are never curved (even though the world looks like it’s curved).
Even though the physics of the game seem rather simple, the engine already had some implementations that prevented me from creating the physics system I wanted. When changing colors, the player also changes physics layers, but this wasn’t updated until the player jumped and when standing on a platform that moves, the player also remained where it was while the platform moved from under them.
By reading a lot of the PhysX documentation, I was able to determine that an extra physics update had to be called and some flags had to be updated when the player was still standing on a transparent block.
The player not moving with the platform was an easier problem to solve, the solution was to change the platform behavior in the character controller to PxControllerBehaviorFlag::eCCT_CAN_RIDE_ON_OBJECT, which made the player stay on the platform, this still took a lot of time to find though as it was rather hidden in the documentation.

Shaders

Curved world

The curved world shader is based on the curved world shader from animal crossing, in this shader, the vertices are moved downward based on the camera distance, the further the camera is away, the more the vertex is moved down. By making the move distance quadratically bigger the greater the distance, it feels like its curved instead of it just being a downwards slope.

Skybox reflections

The reflections in the game were made by creating a cubemap in photoshop and using the reflection vector to look up the required pixel. The roughness of the reflection was changed by changing the mipmap level used.

Bloom

The bloom effect consists of multiple steps (brightness cut off, blurring and combining with original render), but the render pipeline didn’t allow for post processing effects with multiple steps, so I had to change the render pipeline to allow for this to work.

Boxes

The boxes moving outward is also a shader, when the player jumps on the box, the top vertices are moved down just a little bit. The box itself is subdivided into vertical strips, when the player jumps on the box, they are moved outwards farther, the closer the vertex is to the middle of the box.