Marble Explorer was a 20 person collaborative project taken place over a span of 7 weeks at the end of my second year at university. It's been published to itch.io and judged by industry professionals and ranked #2 out of all the other university projects for that year.
As a junior programmer, my responsibilities varied from implementation of gameplay mechanics such as pickups to full-blown systems. There were only two people on the programming team, myself included.
Cannon Launchers
Turning Point Launchers
Moving Platforms
Bounce Pads
Speed Boosters
Spikes
Random Pillars
Level Display Camera (Menu background orbit cam)
Coins
Turbo Jump Pickup
Speed Boost Pickup
Shrink Pickup
Sound Manager
Pickup pseudo-inventory system
Settings Screen Backend
Respawn/Reset Ball (after falling off map)
The cannons "capture" the ball, rotate to the direction of fire, and then fire the ball after a delay.
Turning point launchers capture the ball, and then fire it upon user input.
These simply move back and forth from point A to point B, applying a horizontal force to the ball to keep it from rolling off the platform in the meantime.
The shrink pickup simply changes the ball's actor scale, and reverts it after a set time.
This is a simple pickup that applies an upwards force on the ball when used.
Similar to the jump pickup, but it applies the force in the direction of travel.
The sound manager keeps track of all sounds playing (SFX & Music) so that the volume may be altered. It also changes the song for each particular level.
This system keeps track of all pickups acquired and the order of acquisition.
The settings backend with various options. These change things from resolution and texture quality to camera FOV and sensitivity
Though this mechanic seems simple, an unexpected problem arose making things more challenging - the ball would roll off the platform when in motion.
To battle this, I had to apply a horizontal force that matched the speed and direction of the moving platform. However, as the platform uses a timeline for it's movement, it's velocity variable was more difficult to access.
Here's how I solved the issue:
This is a real time calculation that:
Acquires the platform's total distance of travel from it's start and target locations.
Gets the time the platform is to take to travel between the two points.
Calculates the speed of the platform from the two values.
Applies a horizontal force to the ball matching the platform's current speed.
The following is a simplistic, high-level overview of the pseudo-inventory system.
And the "ConsumePickup" function:
Part 1 of 2:
Part 2 of 2:
Every sound being played at, any given point, in the game is referenced in the Sound Manager System within a sound actor array. This is an approach that allows every sound being played to be referenced, and actions carried out based on that data. An example of this is the live volume updates from the settings menu that are possible due to this system.
You can contact me at alannah.morrison7@gmail.com, I'll get back to you as soon as possible. Alternatively, I can also be found on the following platforms: