Stormfall banner

Stormfall

37 devlogs
145h 51m 17s

Stormfall is a 2D metroidvania action-platformer set in a fallen kingdom. This project was inspired by Hollow Knight, Silksong, and the Ori games. This is a small but highly polished vertical slice of the full planned game.

Updated Project: I…

Stormfall is a 2D metroidvania action-platformer set in a fallen kingdom. This project was inspired by Hollow Knight, Silksong, and the Ori games. This is a small but highly polished vertical slice of the full planned game.

Updated Project: I started this project in October 2025 as a personal project to learn Unity. I’ve been working on it continuously since then during my spare time. Before Flavortown started, all I had finished was the basic player movement and animations. Most of the project, including level design, art, rendering code, UI, and VFX were done during Flavortown.

This project uses AI

I used Chatgpt for research purposes only, specifically for researching how to use the Unity 6 URP Render Graph API. No code, documentation, or assets of any kind are AI generated.

Demo Repository

Loading README...

myth0

Set up the NPC dialogue system! I used coroutines to write out the text letter by letter over a few seconds for a nice effect. I also added the ability to skip to the end of the displayed text by right clicking. Multiple blocks of text can also be chained together for a longer dialogue. The text is also easy to set up and edit, because it is defined from a serialized list in the editor.

Attachment
0
myth0

The last few hours, I experimented a bit with optimization. I created a sprite atlas for all my player sprites (there’s a lot of them because of the layered animation system), and another one for all my static background sprites. I also experimented with the unity quality settings and disabled a bunch of stuff that I don’t need for my game, like mipmaps, anisotropic textures, LOD, and some more. I also lowered the lighting quality. I have tons of lights set up, so they were very heavy on performance, and I don’t really notice a visual difference after lowering the quality. Overall, the game should be a bit more optimized now! I also started working on an NPC. I still need to make the dialogue system, but the animations and art for the NPC are mostly done.

Attachment
0
myth0

Pretty much finished the arena room logic! So now, it plays cool visual effects before spawning enemies (shaking, dust particles, etc). The arena gates also open when all enemies are defeated. This was hard to set up because I had to figure out a way to efficiently track each currently active enemy and trigger the end of the fight when all enemies are killed. I also started working on a new enemy type, a “corrupted” version of my other enemy. I tried to make it speed up when it is facing the player, just to make it slightly more dangerous, but I have had no luck so far due to some bugs I still need to figure out with my raycasting logic.

0
myth0

I completely finished the arena room’s art pass. I also added logic for spawning enemies during the fight. To do this, I wrote a script that allows me to easily configure the different waves of enemies from the editor by specifying the number of waves, enemies in each wave, and the enemies’ spawn coordinates. I also added logic for making gates close behind the player when they enter the room.

0
myth0

Started implementing feedback I received during voting! I optimized the reflection system by limiting its culling mask to all but the nessecary layers and slightly lowering the reflection resolution. I also fixed the UI so now it will be properly anchored to the screen and scale correctly to non-standard screen sizes. I also continued work on the next room of the game. I edited an old unused shader to look like a black “shadow” barrier that prevents the player from leaving the arena fight.

Attachment
1

Comments

Shuflentity
Shuflentity 7 days ago

yayayayayay

myth0

I shipped my demo, but it’s still pending so I started working on the next thing in the meantime! I started making an arena fight sequence right after the player obtains the sword. So far, I built an intro hallway room that teaches the player to use the sword by forcing them to break a sequence of breakable walls. I also started on the actual arena room. Now I need to make some more enemies for the player to fight.

0
myth0

Shipped this project!

Hours: 129.73
Cookies: 🍪 3588
Multiplier: 27.66 cookies/hr

I built a polished vertical slice of Stormfall, a 2D metroidvania set in a fallen kingdom. What I built showcases the game’s movement, art style, level design, and combat. The game is built from scratch in Unity, and all art is hand drawn by me in Krita!

Some of the main features I created include:

  • A custom render feature and render graph. I injected my own rendering code into Unity’s universal render pipeline to create a 2D depth of field effect that gives the game a blurred foreground and background.
  • I wrote many different shader effects, including a gaussian blur effect, grass and vines that move when the player walks through them, an effect that makes sprites slowly move back and forth, glowing aura effects, a smoke effect on the title screen, and a scrolling fog effect.
  • A real time 2d reflection system! This system utilized cameras, render textures, and shaders to get the reflections to look like actual water.
  • Layer based animation for the player. Several different sprites are animated independently and layered onto the scene to form the full player sprite.
  • Custom particle effects, including sparks, water splashes, and explosions of light.
  • A tight combat system. (Note: combat requires the sword ability. Play to the end of the demo to test it out!)
  • Save and load system. Data about enemies, ability pickups, and the player’s location in the game world are all saved and loaded at runtime.
  • A damage system and enemies that can kill the player if you’re not careful.

Even though I’m shipping a polished vertical slice now, the full game is far from finished. However, now that most of my architecture is in place, it will be relatively fast and easy for me to iterate and add more content in the future. I plan to keep working on this in the future, and add more areas and enemies, and also some bosses, npcs, and unique platforming mechanics!

I hope you enjoy the project!

myth0

Just made some final changes before shipping! I fixed a couple bugs like a weird thing where it prevented the player from entering input during the ability obtained popup screen. The internal game title and company were still set to Unity’s defaults, so I updated that to have the proper information. I also added a loading screen animation and updated the game’s logo. I also added experimental builds for Mac and Linux. (Windows is the main supported platform). I tried building to webGL initially but it ran at like 5fps, probably because it couldn’t handle my post processing effects. Anyways, everything is up on itch.io now, I’ll be shipping soon!

0
myth0

Sound fx took wayyy longer than expected. I thought it would be like a 1-2 hour job but it ended up taking literally all evening yesterday. Anyways, I added sound effects for player damage, enemy damage, player footsteps (this one took by far the longest because I had to find a clip that didn’t sound annoying to hear constantly on repeat), waterfall sounds, splashes, and ui sounds. The demo is mostly finished now, hoping to ship soon!

Attachment
2

Comments

Michelle
Michelle 17 days ago

the game looks awsome can i play!

myth0
myth0 17 days ago

hey thanks! I’m gonna put up the demo asap but I’m going away for a few days so it wont be up for a bit!

Rowan

Tagged your project as well cooked!

🔥 Rowan marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)

myth0

Added some background music! I wanted to compose it myself rather than just downloading a free track, so I had to learn how to use Cakewalk which took a while (as shown in the screenshot, it is suuuper complicated). I also had to figure out how to use sound fx in Unity to get it to actually play in game. I also wrote a short script that fades the music in when the player transitions from the title screen to the game and vice versa. Overall I’m definitely happy with the end result!

Attachment
0
myth0

Added a proper title screen! I also added some polish to the file select screen. Now there’s a button to go back to the new title screen, and empty save slots now say “New Game” instead of the default “Save 1, 2, 3, etc”. I also wrote a simple script that fades out the selected UI elements, which I used to create a really clean transition between the title screen and the file select screen.

Attachment
Attachment
0
myth0

Added some UI stuff, like a screen that appears when you obtain the sword, and buttons on the file select screen for deleting save files. This required me to build a small system that integrated the UI with the save/load system. I also made it so your cursor disappears when inside the game.

Attachment
Attachment
0
myth0

Completely finished polishing things like level design, art, and enemy placement. Also found and fixed yet another bug with my slope logic causing the player to slide down super slowly over time. All that’s left to do is add sound effects, music, and finish the title/start screen!

Attachment
Attachment
Attachment
0
myth0

Started wrapping up and polishing my level and room design. The art is almost finished for the last couple rooms that will be part of my shipped demo. All that’s left now is to add sound effects, music, and maybe an NPC if I have extra time!

Attachment
0
myth0

While working on finishing the art for my demo, I found a bug with my slope logic. The slopes only worked when the slope was facing up towards the left. I hadn’t noticed this issue before because I only had slopes facing that direction in my game so far. This was happening because of a problem in the way the slope angle was calculated, and I fixed it by creating slightly different logic that runs when the player goes up a slope from the other direction.

Attachment
0
myth0

Somehow, the seams returned… so I rewrote my fog shader. For context I kept having a problem with visible seams between rooms a while back, and I thought that I had fixed it… apparently not. They were just less visible than before. Now, my fog sprites snap to the editor grid, and the new shader tiles their texture UVs based on the world position. This prevents them from ever being off from each other, even by a pixel. And the world based UV lets them blend nicely with the fog textures from other scenes, preventing tiny seams from appearing between rooms.

Attachment
0
myth0

Continued polishing the visuals of certain in-game events, like when the player dies or obtains the sword ability. I refactored a bunch of my classes into singletons with static instances for ease of use across Unity scenes. I also updated my camera impulse system to be able to make the camera continuously shake for a specified period of time.

0
myth0

Took some time to polish some of my visuals. I added a splash particle effect that plays when the player goes into water. I also added some vine sprites that can move when the player contacts them.

Attachment
0
myth0

My new rendering system is finally bug-free and optimized! With my new render system, the game runs on average 1.5-2x faster than it did with my old system. It turns out the issues I was having with texture bleeding and weird visual artifacts were happening because I had internally set the renderer asset of the hidden cameras to the index of the renderer asset that had the render feature attached. This caused the hidden cameras to render the render feature again, which created more hidden cameras, which rendered it again… and so on… creating an infinite cycle of recursive rendering.

Attachment
0
myth0

Still fixing bugs with my updated rendering system. It was very poorly optimized because it had a hidden camera taking multiple captures per frame, when only one is needed. I think that’s fixed now, and it only captures once per frame as intended, but there are now weird visual artifacts that appear when multiple of these render features exist in the scene. I think that this is most likely happening because each feature submits a render request at the exact same time, causing them to confuse the render pipeline and write the hidden camera’s data to the wrong render texture. Hopefully I’ll be back soon with the fix!

Attachment
0
myth0

Went a bit over 10 hours because I didn’t have anything to show for my work until now. I rewrote my rendering system which produces a 2D depth of field effect by blurring out the foreground and background layers. I had it working well enough previously, but I wanted to rewrite it to optimize performance and ease of use. Previously, 3 scene cameras were required, creating a heavy load with poor performance. In my updated version, only 1 scene camera is required and everything is handled internally, no complicated camera setups needed. I originally tried to achieve the effect using URP renderer lists, but this didn’t work very well because it rendered on top of the lighting pass, effectively causing everything to render without lighting. In the end, I opted to create a hidden internal camera which renders the color of the specific layers to blur, then blits the captured layers below and on top of the main scene with a blur shader, resulting in a blurred foreground and background.

Attachment
0
myth0

Added slopes! Also added proper ability unlocking logic so the player no longer starts with every ability. Then I built this room where the player unlocks the first item in the game: the sword.

Attachment
0
myth0

Fixed probably 10+ various bugs (I lost count). Most of them were weird edge cases with the animation system and how it interacts with the new combat system. Here are some of the main ones:

  • Two swords were visible on the screen at once. (Was just an animation timing issue)
  • The sword randomly disappeared and the player was no longer able to attack. (Queued attacks weren’t deleted when the player dashed, causing weird logic problems)
  • Occasionally the entire screen froze up during combat requiring the player to completely reload the game. (Had to do with having multiple hitstop coroutines running at once, causing neither of them to update, which resulted in the game getting frozen indefinitely)
Attachment
0
myth0

Now that my art style and graphics are finalized, I started working on the combat system. I added new, better animations and started working on a combo-based combat approach. Eventually, the player will be able to execute a high damage attack after chaining a few moves together. For now, the player can do a simple 2-move combo where he swings the sword back and forth. I also added a cool spark particle effect when the player hits certain enemies.

0
myth0

Completely updated the game’s main post processing profile. Now the graphics are much more “bloomy”, and have some color adjustments like slightly increased saturation. Check out the before and after photos of the new look!

Attachment
Attachment
0
myth0

Fixed a problem where when the player spammed dash in midair, the input still executed after the player hit the ground, which resulted in unintended input in some cases. I also mostly finished the game’s 4th room. I finally learned about the Unity sprite renderer’s tile mode, which fixed all of my previous problems with seams between rooms, specifically with the background fog sprite. (Attachment is a screenshot of the world map so far)

Attachment
1

Comments

nintendo.ash.r
nintendo.ash.r about 2 months ago

looks great!

myth0

Added a bunch of prefabs for different background art configurations. Now I can just drag and drop prefabs into the scene to form the background, rather than copying and pasting different sprites manually, which was how I had been doing it previously.

Attachment
0
myth0

Mostly finished the room 3 art pass.

Attachment
0
myth0

Started filling in some of the level design for my 3rd room.

Attachment
0
myth0

Added a few new rooms to the world. I also spent a long time fixing bugs with camera transitions, scene loading, and one enemy that kept despawning for some reason.

Attachment
0
myth0

Added another room to the game. Also worked a bit on the room 3 art pass.

Attachment
0
myth0

Started the art pass for room 3 and polished the room 2-3 transition.

Attachment
0
myth0

Fixed a camera transition bug. For some reason I had the room 1 camera set to priority 10, so it automatically swapped to this camera whenever the room was loaded in (not the intentional behavior). It took me wayyyy too long to figure out why this was happening…

Attachment
0
myth0

Fixed a weird visual seam between the first 2 rooms. Also finished polishing the visuals of the 2nd room.

Attachment
1

Comments

iris
iris 2 months ago

the lighting and ambience looks so good!

myth0

sooooooo… I kinda forgot to devlog for the past 17 hours. Basically, I made a dynamic water reflection shader, as well as doing a greybox collision pass and an art pass of the first few real (non-test) rooms of the game. Getting the art to look good took by far the longest out of all this. I drew all sprites in krita, and then post processed in the Unity editor itself to achieve things like blur/depth-of-field effects, bloom, etc. Attached is a screenshot showing off the water reflection shader and a screenshot of the entire world so far. And I will make sure to devlog more often from now on!!!

Attachment
Attachment
1

Comments

iris
iris 2 months ago

woaa!!! its looking so cool !!

myth0

Added some polish to combat, including hitstop, flashing, camera shake, and particles. Also made a glow shader to go around save points.

0
myth0

Save/load system now generates and saves data for each scene for things like breakable objects, collectables, etc.

Attachment
0
myth0

Finally got around to doing a devlog. So far, my game has player movement and basic abilities, a couple basic rooms, and a save/load system. The last few days I’ve mostly been working on the title/file select screen.

Attachment
0