Roguelite Scroller
Context and inspiration
I always wanted to create a game with mechanics similar to The Binding of Isaac, a roguelite where numerous items and systems create synergies between them. Though, as it was impossible for me to create such a game by myself, I was inspired by Nitrome’s Redungeon and scaled down the idea and decided trying to make an endless scroller with monsters and traps but also items. The idea of implementing a lot of different objects seemed fun to program!

The ever-nearing void applies great pressure

Is an item in the chest worth enough the risk?

A very helpful in-game menu with debug tools
The experience of also focusing on design
For the first time, I decided to make extra efforts to the art and feel of my game. I chose to stick to a great color palette, and took the time to create some pixel art animations and polish my UI. Moreover, I used Unity’s Universal Render Pipeline to work with 2D lights and shadows. I realized how much art could have impact on the development side: apart from the obvious performance concerns, for example, making walls cast shadows constrained me to redesign most of my colliders. Finally, I enjoyed crafting a cohesive bestiary, and noticed that by making the enemies – or even the traps and items – complementary of each other allowed me to need a smaller one and not always feel stuck on the same aspect of the game.
All in all, it was a way to learn by practice why it is so hard to tackle all the aspects of making a game by oneself!

Three complementary ennemies

The shop GUI

Lights above and shadow below
Development insight: items
This was not the first time I used an inventory system, but this time, I coupled it with a command pattern for the item effects. Plus, it was a nice way to practice data driven content and Unity’s ScriptableObjects for the effects, so that each one could be reused several time and make it easy for the items to stack several of them. For example, If I wanted to make some golden boots that could both increase the speed of the player, I could use the StatModifier and PullItems ItemEffects I already created for previous items, and still have the code well decoupled!
public abstract class ItemEffect : ScriptableObject { public virtual void OnPickup(GameObject gameObject) { } public virtual void OnUpdate(GameObject gameObject) { } public virtual void OnUse(GameObject gameObject) { } public virtual void OnUnequip(GameObject gameObject) { } }
