Level Design, Scripting
Genre: Infinite Runner
Engine: Unity 5
Production Time: 3 weeks
Role: Level Design, Scripting, VFX
Production Team Size: 5 People
Infinite Hellclimber is an infinite runner prototype developed for Android phones. The player takes on the role of one of the denizens of hell, bent on escaping their eternal torment and reaching the surface. The goal of the game is to avoid obstacles and climb as far as possible while collecting lost souls that will further increase your score.
The game was created as part of a course held by Futuregames and took 3 weeks to develop.
Design Goal and Game Pillars
- Fast and short rounds
- Escalating Difficulty
- Addictive Gameplay
- Randomly Generated Level
Hellclimber was designed to be easy to pick up. Players should be able to play it using a single hand, so the level scrolls vertically and the character is controlled by tapping anywhere on the screen. The level is randomly generated from 10 different pre-defined segments and scrolls faster as time goes by, constantly increasing the difficulty. If the player falls out of the screen or runs into an obstacle, the round is over and their final score is calculated based on distance climbed and souls collected.
Rounds were designed to be short and players are further motivated to beat their current score by leaving markers in the game where the top 10 players died.
To prevent the start of the game from becoming stale, souls were added in various positions within the level segments. New players are given the chance to familiarize themselves with the game during the early segments while experienced players who want to push their score, must put more effort into gathering as many souls as possible before the game becomes too fast. Collecting 20 souls overcharges the player, making them suck souls towards them for a short time and further motivating the them to take risks and gather more souls.
I was mainly responsible for creating the level segments as well as writing the level generator.
Design Process and Level Segments
Each level segment is split into 3 lanes and the player is able to run on the left or right side of each lane, granted there is a wall there to climb. Some lanes are blocked or contain obstacles that the player must avoid by jumping or double-jumping to the adjacent wall. Each segment was initially drawn and iterated on in Photoshop before being built using temporary assets in Unity. Once each segment felt balanced in-game, I decorated them using assets created by our 2D-artists.
The level segments are saved as prefabs and contain the Vector3 variables pathsIn and pathsOut where each value represents a lane (X = Lane 1, Y = Lane 2, Z = Lane 3). A value of 0 represents a closed lane entrance/exit that cannot be accessed while a value of 1 represents an open lane where the player is free to roam. These values are manually set for each segment.
When the game boots, the generator creates an Array titled blocklist containing all the level segments (LevelBlocks) in the game. As the player approaches the edge of the current level segment, the generator randomly picks a new segment from blocklist and compares the open lanes out (pathsOut) of the current segment with the open lanes (pathsIn) leading into the next segment. If the lanes match, the generator will spawn the next segment into the game world, otherwise it will pick a new random segment and compare it with the old one until it finds a matching pair. This system was designed to prevent the generator from accidentally generating dead ends and make sure that all segments fit together seamlessly.
Level Generator C# Code