Latest Blog Post: DreamHowl - 7 day challenge that I semi-failed: How, why and what I've learned at Sat Sep 19 2026
A Gay Man flag piece for the corner A Gay Man flag piece for the corner

Lupus Crystal

DreamHowl - 7 day challenge that I semi-failed: How, why and what I've learned

Hello there, fellow tech nerds!

This blog post is about how I tried to make a game in 7 days. Let’s roll!


Table of Contents


Day 1

On a wonderful Wednesday night of September 9th, I’ve decided to challenge myself…

I was not quite sure of what I wanted to make, so I just took some random things out of my head and put them on paper:

Now, I really like games like Celeste for their specific non-slippery movement. And I really wanted to try doing something in pixel art style, even if I’m not good at drawing myself.

When I thought of Celeste, the dash ability came into my mind. It’s the core of Celeste.

It might not sound complex to replicate, but Celeste movement is specifically designed and engineered to be highly precise, which is not easy to replicate (Especially if you don’t know what you are doing like me).

Now it was deep into night-time when I came up with this idea, so I created a new Bevy Engine project using cargo, added some basic dependencies, setup the project skeleton and went to sleep.

Concept and Scope

When I woke up I started thinking of the scope. Many of my prototypes were killed by scope creep, and I didn’t want to fall into the same trap again.

I decided that for the base game I need this:

  • Basic movement
  • Dash ability
  • Charge ability
  • Dream block (Will explain soon)
  • 4 levels
  • Simple soundtrack
  • Main/About Menu

A couple of other things came into my mind when thinking of what I could add… But even basic save/load systems would highly overload my scope due to my physical limitations.

My Physical Limits

Speaking of my limits - I have a lot of them. I don’t remember mentioning it before, but I’m actually heavily autistic. Normally that would not be an issue, but I’ve been through a lot of heavy chronical stress, which had been amplified lately.

Even though I go to sleep at around 10 PM (Except for the first night when I got the idea for this game), my sleep is shattered in quality. This is a major issue #1. There are 2 other issues as well…

I don’t eat much - my hyper-reactivity to sensory input gives me a sensory overload each time I eat. This is a problem #2.

And the last problem - I don’t really go outside that much, meaning no physical activity.

If you know anything about being productive, you know that having those issues will be a major factor in decline of productivity… Now in my case, all of them are fixable. I’m working on that, but it’s not ready yet.

Dash Ability

Now for the dash ability… I had implemented it before, including double/triple dash. Bevy ECS comes in super handy with this.

I took my old code as a reference and wrote some better code.

Now I usually do my character controllers using physics, but I’ve decided to try a different approach this time.


The physics engine of my choice has always been Rapier. It has a great Bevy Engine integration and I’m satisfied enough with it’s performance. I’ve used built-in RigidBody::KinematicPositionBased component to set the player’s Rigid Body to Kinimatic Position Based. This way - we have maximum control over the player movement.

Now when I initially started on Day 2 - I was still using physics based character controller, which I didn’t find satisfying for a 2D side-scroller platformer game. Moving to a Kinematic Position Based one was a big improvement in terms of feel.


I’ve separated the dash ability into 3 different files:

  • player.rs - Handles the dash physics side logic.
  • dash.rs - Has the dash processing logic and dash structure definition.
  • dash_trail.rs - A plugin that adds a trail to the player when dashing (As shown on the screenshot bellow). A screenshot from a video-game where a wolf dashes through the air. The art is pixel based. The wolf has a trail behind it. The colors are mostly cold (blue/purple).

Snow Particles

I’ve decided to mess around and create snow particles by using ECS without any particle system…

It was pretty fun to mess around with, the particles were fully physics based too!

8-bit snow particles fallign into the void. A lot of snow falling onto the wolf and jumping off it's collider. Wolf sitting on the roof with snow around it.

Level Design

For the first level I pulled up a list of paper and drew some connected rooms together: A picture taken of paper. There is a simple diagram drawn on paper via a pencil. In the exact shot we can see 3 rooms. Room #1 has spikes in "holes" in the floor, room number 2 has floating platforms and spikes under them and room number 3 has a long corridor with a special ability in it (And some longer (In terms of width) spikes in the end).

That seemed good enough for me. The scope should be small, and I’m pretty bad at level design - that’s why I like to give the players creative freedom to build in games like WolfBorn (Devlog on it coming up as well!)…

For this project I’ve used the bevy_ecs_tiled crate to create maps. It uses the Tiled editor to edit maps, and then it spawns them inside of Bevy using bevy_ecs_tilemap crate.

Death / Checkpoints

This section is straightforward. Initially I had used hand-made calculation to find if the player position is anywhere inside of the death areas (spikes/voids/etc). This turned out to be a terrible solution, so I switched to something Rapier offered: Sensor colliders. After rewriting my code in only 2 places - it was working perfectly!

When the player dies, they respawn at the latest checkpoint. It is marked using an CurrentlyActiveCheckpoint component in the ECS. Simple? Yes. Efficient? Also yes.

And yes, the death sound is terrifying. You’ll see…

Soundtrack

For the soundtrack, I initially wanted to use a piano, but I’ve changed my mind. When it comes to piano - I usually compose something calm.

Play audio: 'I can not see you go'

Now, I know what you are going to say:

! Why does this sound exactly like Minecraft soundtrack?!

Honestly, I have no idea. As you can see (And hopefully hear), this isn’t really suitable for a high speed platformer.

For anybody who cares, my first piano tracks were made with Sonatina Piano VST.

But I know an instrument that is really suitable for a high speed riff… It’s an acoustic guitar. I’m using Ample Guitar M 2 Lite. It’s free, and sounds good.


There is a slight problem with it’s strummer.

Q: What’s a strummer?

A: A strummer is a piece of software that allows to quickly sketch up a melody.

The strummer for this specific guitar is really good. But I have issues with Drag & Drop functionality really often, since I’m using Ardour + Yabridge to use a Windows VST on Linux. There is also another big issue: The strummer has limited notes per strum-board amount. There is only 16 columns per pattern… That is an issue.

What do programmers do when they are unhappy with something? That’s right! They rewrite it in Rust!

Now you might say:

That’s out of scope completely…

Yes. Yes it is. And I spent a day working on this strummer. It seemed like a simple enough task, but it really wasn’t… I had decided to use the egui crate for the GUI. The GUI was the simple part… But connecting this to JACK was a bit of a hassle.

What’s JACK?

It’s a sound server for MIDI and Audio. I needed it to connect my strummer back to Ardour and therefore to the guitar.

The end result of the strummer looked nice: A screenshot of the strummer. Contains a grid where notes can be placed. On the bottom there is a chord select, while on the left there is a note 'try' table.

I’m pretty happy with how it came out. It does not have limits other than you computer’s memory in terms of pattern length/width.

The problem is - this custom strummer took a day to make. I didn’t have more time to work on it, and it’s out of scope. I had to resort to using the built-in strummer instead for this soundtrack.


I needed a specific strum pattern to play and fade in/out when changing checkpoints. That’s where bevy_kira_audio crate comes in useful. Honestly it did everything it had to - manage my soundtrack. I wrote a single system to assist me with that based on messages. Super simple.


A bit later I decided to redesign a big portion of the soundtrack to be more simple in terms of layout. Each room starts with an “intro” strum pattern + drum intro pattern, and then loops for 3 different strum patterns.

A screenshot of Ardour DAW. We can see 3 windows: A guitar VST plugin, a drum sync VST plugin and Ardour itself. There are 2 main tracks populated with MIDI regions.

I drew an explanation to myself on how to do this on paper: A visualization of how to do into to pattern type of soundtrack.

GamePad Support

It’s a platformer. Of course it should support gamepad input, in fact - that’s most likely the preferred way of playing platformers for most people!

So I’ve added gamepad support. There was a bug where the player’s gravity was applied twice as much, but it was an easy fix.

Parallax Backgrounds

I did not want to write my own parallax background system… It was a bit too boring for me, since I’ve done it countless times before already.

I decided to look up what crates are available for this exact purpose, and I’ve found…

The bevy_parallaxium crate! There was an issue: It’s outdated and is not compatible with my version of the Bevy Engine (I’ve used 0.19.1, the latest one at the moment)…

So I cloned the repo, adjusted some code and it was ready to go for Bevy Engine 0.19.1! I’ve even done a pull request to get my changes merged as well.

It still needed a few things to setup in my own code, but I’ve left that for later since I had some trouble with Z-ordering and general positioning of the backgrounds…

Challenge Failed

There is a lot of things I needed to finish, I was simply not in physical shape to handle all of it in 7 days.

In those 7 days I managed to:

  • Create a prototype in a genre that I never touched before.
  • Rewrite the dash ability to a side scroller.
  • Make basic OST and created a semi-complex strummer from scratch.
  • Learned how to handle some features of the Tiled editor with Bevy Engine integration.
  • Used a Kinematic Position Base Character Controller instead of a Physics one for the first time.
  • Created silly snow particles that can interact with the player via physics.
  • Implemented and improved performance of the checkpoint/respawn system.
  • Implemented ECS-based ability system that spans across multiple files (For both dash and charge abilities).
  • Implemented gamepad support with rumble.
  • Had a lot of fun to distract myself from my struggles!
  • Created a basic level in the Tiled editor.

The game missed a lot of things, mostly because I did not take the challange too seriously. I’ve set my goal to mostly have fun and learn things while having a “time limit”.

I wanted to add this additionally:

  • More polish for physics.
  • Perhaps enemies?
  • Perhaps a simple story?
  • Parallax backgrounds.
  • Just general polish.

I got close to the scope… I could not manage the dream blocks and additional levels in time.


So I failed to do the challenge, but that does not mean that I’m leaving this game as-is.

I’m going to finish this game, polish it a bit, and publish it on itch.io. As of writing of this devlog, I’ve already added a bunch of new things.

For example: Platform that crumble under the player if they stand on it for way too long.

I’ve also added a “charge” ability, but it’s pretty much just an overpowered dash… I’m unsure if I should keep it in the game.

Dream Blocks

And now for the dream-blocks. Dream blocks are like regular tiles, but the player can dash through them from one side to another in a given direction.

I think it would be a nice addition, so we will see how it goes.

Enemies?

A person on Mastodon with nickname Raster had mentioned that my game looks similar to Wolfling on NES:

Raster said: '@lupuscrystal Dejavu with Wolfling for C64/NES. 😁'

I looked up the game, and it seems like it is somewhat similar to mine. But Wolfling actually had enemies! I thought that it might be a good idea to add them to my game as well, we’ll see how it will turn out.

Story

A wolf had separated from it’s pack and fell into an undeground dungeon. Now it’s trying to get back to his pack. Simple? Yes. Keeps up with the scope? Yes. Easily expandable by crative tools? Absolutely.

What I’ve Learned

I’ve learned that even with a small scope - it is easy to get distracted. If I’m ever going to do something like that again - I should form a TODO list from day 1 and follow it.

Aside from all of the new knowledge about sensors in Rapier physics engine, a bunch of parallax things, how JACK works, and how to work with kinematic position based character controllers…

What’s Next?

As I already said - I’m going to finish the game and publish it on itch.io for free.

Currently I need to:

  • Finish 3 more levels.
  • Perhaps add enemies.
  • Add more obsticles (This is a platformer after all).
  • Polish the soundtrack.
  • Try to add parallax backgrounds once again.
  • Implement dream block.
  • Add more particles.

That’s going to be it for this devlog/blog-post! Tell me what you think on Mastodon - I’m open to feedback and ideas!

Back to all posts

Lupus Crystal

The Call To Code

Used Content

My RSS Feed

Mastodon