8-Beat Dungeon Devlog


I discovered Miz Jam while browsing through upcoming jams ('cause I just finished a major requirement). I have never heard of Miz' series, Four Game Developers Jam Off the Same Art Kit, before but I thought the concept was cool. It was kinda similar to the Kenney Jam, which I also planned to join, except that the choice of assets were much more limited. I'm not good at making art and music for games. Usually, I look for free assets online from sources like Kenney.nl, OpenGameArt.org and incompetech.com. Since the assets would be provided, I could focus more on the game mechanics and level design. Plus, the 48-hour limit didn't have to be consecutive so I could maximize the time and really polish my game. So I was very excited for the jam.

DAY 1: Brainstorming

The given asset was Kenney's 1-Bit Pack. My first idea after seeing it was to make a rogue-like dungeon crawler but I thought that was too obvious and too big for me, who hasn't even made something close to a dungeon crawler. I decided to go with a rhythm side-scroller, which I've wanted to do for a long time. I've never made a rhythm game before but I thought it was going to be easy and since I could use the whole 48 hours this time, then I would have a lot of time to figure it out.

The mechanics I planned were simple: the player can perform an action by pressing keys to the beat of a music. Unlike most other rhythm games (e.g. Crypt of the Necrodancer, which has been an inspiration), these actions are not limited to movement direction but actions like attacking and blocking. I initially planned to make more actions like dodging and using spells, so that players can sort of build their own class but I thought I should keep it simple for the jam.

I imported the whole asset pack to GameMaker Studio 2 and started mixing the sprites. It didn't take me too long to finalize the character design since the pack contained sprites for armor and weapons (though I had to take the legs from the platformer characters). Next I made a mock-up of what I expected the game to look like before finally adding a functional GUI.


First concept of the playing screen

DAY 2: Decoding the Logic

My next task was perhaps the hardest, which was to write the movement logic. First, I made an object to keep track of time and also provide a visual and audible cue for the beats. I didn't have enough space on the screen for moving bars so I used the hourglass sprite to indicate the counting of the beat. For the sound, I used a simple clicking sound, kind of like a metronome.

I was unsure of how to proceed after this but thought I could figure it out once I started writing the code. That didn't quite work out as the code became too cluttered and messy. I decided to take a break from coding and actually try to plan it out on paper. I also consulted tutorials online to see the best way to approach making a rhythm game.

DAY 3: Composing music?

I started from scratch again after my failed attempt the previous day. At the end of the day, I finally made something decent. It works like this: when the timer is within a short period before and after the beat (~100 ms or 6 frames), the player can safely press keys to move. Otherwise, pressing keys will stun the player. When a key is pressed within the allowed period, there will be a short waiting time to allow for combos before the action is executed.


Movement System A

I was quite satisfied with the movement system so I started exploring my options in making music. Unfortunately, I have no experience in composing music (probably not good for someone making a rhythm game). I looked into forums and after trying some of the suggestions, I chose Bosca Ceoil since it seems easy enough for me to use. I played around and experimented with it before realizing it's not that easy to make good music. I planned to do it later or maybe just look for free music online.

DAY 4: Considering enemies

Next, I added enemies. Since the player can block and attack, I made one enemy that can only be attacked (a slime) and one that can only be blocked (a fireball). I cropped the platformer character for the slime and rotated the fire sprite to make the fireball. Then I made the enemies move to the beat. At this point, I realized that I didn't consider enemy actions when I made the movement system.

So here's the updated movement system: enemies move exactly at the beat. The player can still press keys within the allowed period around the beat. This time however, the player can keep pressing the buttons until the allowed period ends, at which point, the action is checked and resolved based on enemy action and position. Finally, the player's action is executed. I extended the waiting time so that the enemy would have already moved when checking begins. This seemed to work fine although the lag between player input and the execution of action is more noticeable.


Movement System B

DAY 5: Lost

The GameMaker Studio 2.3 update came the previous night and thankfully, it didn't break my game. However, since my project got converted to 2.3, the "Project Use Time," which I use to keep track of time, was reset. I found a way to open the original project file using the previous version and recorded the time (~19 hours).

I added an enemy to chase the character to give players an incentive to move forward (as suggested by a friend). Then I added more types of enemies like moving slimes and wisps (made from the skull and the fire sprites).

After that, I got stuck on what to do next. I realized that since I started working with the assets, I hadn't actually written my plans and milestones for the project yet (which I usually do before starting a project). So I took a break from making the game and began planning features I can still add within the remaining time.

DAY 6: Making the tutorial

I started adding the features I planned the previous day. First, I made a controls screen to allow players to change key bindings. I also chose a readable pixel font for the plain text in the menus. Then I took time to look for music in case I couldn't make one. I couldn't find one that suits the game so I returned to Bosca Ceoil and tried to make a simple beat, which I then imported to the project. I had issues with looping the sound so instead of playing it at the start then looping, I had it playing once every other beat (since the sound lasts two beats).

Finally, I made a short tutorial level to introduce the basic mechanics. My goal for the tutorial was to introduce each mechanic step by step through explicit instruction and by presenting relevant obstacles at appropriate moments. I was quite satisfied with the tutorial so I decided to export the current build of the game to let my friends test it. I had to make a menu but I didn't even have a title yet so I literally put "GAME" on the menu.


First main menu

I sent the game to friends for testing. One of the comments I received was that the delay in input and execution was awkward. I wanted to fix it but I was afraid that I could break the game if I tried to overhaul the movement system. Another thing I wanted to fix was lagging causing the timer to go offbeat. This is because timing was determined by frame rate. I knew I had to use delta_time to fix it but since I have never used it before I was quite intimidated by the task.

DAY 7: Procrastinating

Since I didn't want to do the two big tasks yet, I started completing the smaller tasks. I randomly came up with an idea for the title. My first idea was "1-Beat" plus a word like dungeon or warrior, which is a pun on 1-bit (art style) and the fact that the player can only move once per beat. But then I would have to recolor the sprites to 1-bit to fit the title. I didn't want to lose the colors so I decided to change it to "8-Beat" instead, though I didn't know what 8-beat meant. I looked it up online and found videos on how to do an 8-beat on the drums, which I recreated and used as the beat. Then I polished the main menu since I already had a title.

I added spikes to the game to add challenges where players have to pause for a beat before moving. Lastly, I added a key object to open the door so the player would have an incentive to kill the level boss (which I haven't made yet) and not just skip through them. I considered making the bosses then but since I was going to rework the movement system then I might have to rewrite their logic again. I really had to finish the two big tasks.

DAY 8: 8 Hours Remaining

I only had 8 hours left so I had to work fast. Surprisingly, compensating for lag was quite easy to fix (just one line of code). It was a simple fix but it was good enough for now. Then, I went back to pen and paper to devise a new movement system. I had two options. First, make the enemies move in between beats so I can shorten the waiting period. Having the player not in sync with the enemies looked kinda awkward so I went with the next option. This time, enemies move to the beat and actions are checked at the end of the allowed period just like in System B. This makes sure that both the enemies and the player has committed to an action before checking their actions. But just like in System A, the waiting period for key presses is short and the execution occurs immediately after so there's little lag between player input and character movement. It worked perfectly (after a few bug fixes). So that's two of the big tasks done.


Movement System D

I made some more changes to the tutorial, like adding the chasing enemy and gradually revealing GUI elements when in relevant situations.

DAY 9: Submission

One day before the deadline and I had about 5 hours left. I no longer have time to make music so instead, I decided to make each action play a note. I simulated the character's movement in Bosca Ceoil and experimented with the instruments and keys before settling on a triangle wave and the G minor key. I then made a banner and icon for the game. Finally, I worked on the bosses.

While working on the bosses, I ran into a problem which I just couldn't debug. It turned out that my project got corrupted somehow when I renamed my project file earlier that day (I still don't know why). Fortunately I made a back-up of my project before I renamed it so I restored that back-up and remade the changes I had made since. When I finished making the boss enemies, I only had about 2 hours left. I quickly made three levels but didn't have time to fine-tune them. I couldn't even beat the final boss but it is possible in theory (I've beaten it once after submission). I still had about one hour left but I was already exhausted so I made a quick victory screen then submitted the game.

DAY 10: Last-minute Updates

Next morning, I woke up about an hour before the deadline to play my game since I hadn't playtested it yet. I quickly found a bug preventing the game to proceed to the next level. Luckily, no one had downloaded the game and I knew how to fix it so I was able to fix it quickly and resubmitted the game ~15-20 minutes before the deadline. Finally, I updated the description in the game page and added screenshots of the tutorial.

FINAL THOUGHTS

This jam altered my usual work process. I usually start by setting achievable milestones, then building a quick prototype, designing some levels and finally working on the aesthetics. This time, I spent way too much time building the prototype that level design suffered a bit. Making a rhythm game was not as easy as I thought. I'm glad that I was able to make a decent one from scratch within 48 hours but there's probably a more efficient way of doing it. Nevertheless, I was satisfied with the result.

Get 8-Beat Dungeon

Leave a comment

Log in with itch.io to leave a comment.