BLACK FOREST CAFE

Self-guided passion project. Black Forest Cafe is a Roguelite Restaurant adventure with procedurally generated dungeons and fast-paced combat created with Unity. All aspects of game creation, including pixel art, programming in C#, and design were taught and done solely by myself. Everything present was created and learned in two months.
Github Google Drive Devlogs

My goal was ambitious but unrealistic: I wanted it to be the perfect procedurally-generated coop adventure you could play with your sibling on a Friday night, yet lacked even the basics of game development. I had no experience in C#, Unity, or game design, yet this did not deter my efforts. Over the next two months, I slogged through numerous hours of YouTube tutorials, documentation-reading, and Chat-GPT prompting.

Despite its challenges, the learning process was addicting, providing a little victory every time a new feature was implemented, such as an inventory system, enemy pathfinding, and depth-based procedural generation. As I persevered, my understanding of Unity exponentially improved, constantly rewriting and restructuring my code more efficiently. My success has motivated me to expand my self-taught skills in a perpetual pursuit of knowledge.

THE FIRST DAY

Despite having no experience in C#, my knowledge of C++ applied to its base concepts, allowing me to learn its syntax quickly and create a lot of scripts. Additionally, my work in general was extremely fast, solely driven by my passion for game development. My assets were created through Photoshop, while my code was learned through YouTube tutorials and logic. Within the first day of working on the project, I created the following:

Player sprite
Animated walking sprites
Tilesets
Entity shadow system
Sprite atlas

THE SECOND DAY

I was fully committed to creating the game. This was my progress for the following day:

Animated idle, running, dash
Created tree sprites
Finished shadow code
Created slime enemy sprite and ai
Created health system
Fixed arrow aiming and projectile shadow offset correctly
Created tree prefab for hiding behind player correctly
Created program which makes tree transparent
Created player taking damage
Created player shooting animation

PROCEDURAL GENERATION

The entire third day was dedicated to learning how to procedurally generate a dungeon and implementing it into the game. I used a mix of random walk generation, scriptable objects for room presets, and a rudimentary form of a binary tree to record dungeon depth while also guaranteeing a fair layout.
The left image is the earliest form of the dungeon. The right image is the polished version.
View the procedural generation script here:

ITEMS AND ENEMIES

The next week consisted of implementing the following features:

Item generator script
Sprites of necklaces, barrels, and treasure chests
Interactable treasure chest
Different floor tiles generator
'Nearest' script that checks for nearest tagged objects to origin position
Auto attack
Included barrels into auto attack

INVENTORY SYSTEM

I began working on the inventory system over the next week after I compeleted my randomized drop script. However, I underestimated how difficult it would be. An overlooked pointer issue caused significant issues for me, triggering a frustrating memory leak and all items to be added in the same place.
I was finally able to fix it because my more experienced friend noticed I wasn't creating a new instance of item, an apparently common problem among his peers. I was really relieved with his help since I felt like I checked everything in my scripts and still couldn't solve the issue. It still set me back more time than I would've liked.

COMBAT TWEAKS

I added a new enemy and a distinction between the two types: ranged and melee. I also added a damage flash upon the enemy getting hit. This feature was also surprisingly frustrating to implement, because the default colour "White" in Unity just renders the sprite in its original colour. I had to develop my own materials and shaders in order to solve the problem.
The new enemy was a purple bat. I reused a bit of the other projectile code but had to change the aggro system since the animations always played in sync. The main way I solved this was creating group aggro, where I would assign each entity a number when generated and reference the number from the list to trigger the aggro. Unfortunately, I didn't develop the animation stagger in the video.

GAME DESIGN DOCUMENT

This game design document is the culmination of two months of dedicated work and design. It contains the basic concept, key features, procedural generation algorithms, and art direction document. Additionally, you can view the Devlogs linked below. It contains all the recorded progress and problems I ran into during production.