Nib started off as an extension of #Inktober. I like to participate each year, and Ludum Dare was happening in October too. I decided to make a game for Ludum Dare using only art from Inktober. I planned out the project before hand and got some of the fundamentals in place. I wanted a simple game that I could make using much of what Unity already had to offer and wanted to use some pretty tried and true mechanics that I would be able to produce art for quickly and effectively. I went with a side-scroller action game set in a kind of post-apocalyptic setting because that allowed me a space to create whatever assets I'd like and it to fit theme. My enemies are also inspired from the type of work I do. Much of my art is about weird creepy monsters, but confining oneself to a theme can be tedious. With a post-apocalyptic setting I knew I'd be able to draw whatever fit my fancy and find use for it.
Ink had to be a primary part of the theme for the project. At this point I was even calling the game InkJam. You can even track a lot of my development on the project with the hashtag #InkJam on Twitter. Later on the name changed. I also had some music from a previous project where you are working in a laundromat in the 70s. With all of this, I decided to use an enlarged pen nib as the main characters sword, and I wanted to give the main character a bit of a 70s feel. So I gave it a long sleeve black turtle neck and what I always imagined were brown pants. To help emphasize the connection to pen and ink, I gave the main character a hat that is based off of the shape of a eye dropper from a ink jar.
Nib has a bit of a rogue-like element to it. The game is short due mainly to it’s development cycle. So, early on, I decided I preferred a single long level instead of multiple levels. I didn’t want transitions. I wanted a game where you are into the action and participating in the game right away. This also fit thematically, as I didn’t want to commit to creating different types of terrain and locations. A decision also made due to limited development time. So, taking a note from games like Super Meat Boy, I decided to have a short game that has the time that it takes to complete it increased through challenge over top of sheer content. One death, I delete the save file and force the player to start over. But, if you are going to do that, the player needs to be able to re-engage right away since losing is one of my biggest Exit Points.
Being a platformer, the game has a lot of location where the player can fall to their death. The game is pretty zoomed in, and involves a lot of verticle motion. This leave a player in many situations where they have to take a “leap of faith.” In a game where death means starting from the beginning, this is a bad situation to put your player in. Falling to your death because the game didn’t properly inform you that that pit was a to your death when you were required to hop down a pit just a moment before, can be very frustrating and is a big Exit Point for the game. To help communicate to players which pits are deadly and which are safe I created a collection of animated objects with parts of them blowing in the wind. I have a collection of pinions on poles, a plastic bag, a kite fluttering, streamers on a broken spear. All of these items indicate that the area where they are at is windy, edges of cliffs are windy because they have no obstructions, the place where that object is must be at a deadly fall. All deadly falls in the game have one of these animated background objects next to them as a pointer to this cliff as being deadly.
There are also some jumps next to cliffs, which themselves aren’t deadly. Yet, if you perform the jump incorrectly, you could end up falling into a pit that is deadly. These pits are clear from the top of the jump, but to further communicate to players that they are near a risky jump I include a battered and bent warning sign background item right next to where the jump is taking place.
The game is hard, but not unfair. If you learn how combat works and it’s timing, you should have success. The game would be very frustrating though if it were a one hit and you start from the beginning type of scenario. Your player has health, and so do all of the enemies. You can take five hits before dying and different enemies can take different amounts of damage depending on the type of enemy. I believe the Golf Knight is the highest with five hits. For both player and enemies, I adjust the tinting of the character to be more and more black. You’ll know you or your enemy is near death if they are totally black. I use it both on the player and the enemies for consistency, and there are many more opportunities to teach this shading mechanic to the player. It also fits along with the theme of the game. You are inking out your opponent or are being inked out yourself. To help sell that, I also employ a ink spray particle effect I created that the player or an enemy will emit when taking damage.
2D Animation Package: I have experience using Anima2D from a previous project called Squirrel Scramble, and I knew that Unity had bought that company and integrated their tools. With Nib, I used Unity's new Animation Tools to do all of the animations for the game. This was the big secret to much of the animation from the game. I was able to use bones and mesh transforms to animate the enemies and get a better result then I might from using more classic animation from Unity. If you look at the example of the Rocket Monster, you can see the original drawing was a static drawing, and all of the animation was made possible by the use of bones.
Sprite Shape: I knew that I didn’t have the time to draw custom backgrounds for the entirety of the game. So, I used brought in Sprite Shape as an easy means of building all of my ground objects in the game. I drew some fill textures and edges and defined them to a prefab with an edge collider and I reused this prefab to create all of my terrain. This made for a quick and easy means of generating a lot of content quickly. I could bring in the prefab and click on the edit to be able to reshape the newly added prefab to a huge variety of shapes. Mark them as part of the ground layer and I had terrain. I added variety to the ground with hand drawn custom elements that I peppered through the environment. Some of these were other Sprite Shape objects themselves. I created pipes and rock strata that I could layer over the ground assets.
Particle System: All of the particle systems used in Nib are custom made using Unity’s particle system. All assets were hand drawn, and some of them are animation sheets to allow for variety in the look of the particles. There are flowers that raind down from flowering plants. Bubbles that emit from some of the background items. Ink that splashes out of enemies and players.
Custom Enemy Spawner: The whole game takes place in one very large level. I didn’t want to have enemies just setting around and tracking them and processing them. So, I created a custom enemy spawner. This simple tool is a 2d collider along with a collection of empty game objects. When the player enters the spawner, the tool spawns an amount of a set type of enemy at the spawn locations inside of a randomly named game object inside of an empty object in the scene called enemies. This way, all of the enemies are all inside of an object that the spawner can track, and all of my enemies are also found inside of one general object. When the enemy’s container is empty of enemies, it destroys their container and then destroys itself. Each enemy also has a destroy method when they have fallen too far down on the screen or if they are too far away from the player.
Save Game: I have a basic save system that I wrote for saving the games progress. I didn’t want to employ anything overly complicated or large, and a simple solution to my problem occurred to me. At all times, when the game is not saving and there are no enemies in the enemies object, then the game saves. On death, the save file is destroyed. The only thing I am saving are the x and y coordinates of the player’s position and the players current hit points. The result of this is that if you turn the game off, when you turn it back on, you are in the same spot you were in when you were last playing. I didn’t want it to load with the player in the middle of combat or it to be something that you could use to skip a fight by closing the game mid fight and reloading, so it doesn’t save during fights. I can assume that when I load a game that all spawners that the player has passed by have been completed. So when the game loads, it goes through all of the spawners that are before the players start location and destroys them.
Burst and Collections: After launching on Itch, I had several reports of frame rate issues with the game. I did some research and discovered that the Unity 2D Animation tool has performance issues when you have too many bones being tracked on the screen at once. Almost everything in the game uses this Animation tool for handling animations. To address this, Unity advised setting up bursting and Collections and enabling them on all of your animated objects. After implementing, the games frame rate went up dramatically.