1. Rhythm Quest
  2. News

Rhythm Quest News

Devlog 78 - Unified Settings, Camera Smoothing, etc.

[p]Somehow the springtime always seems to be extra busy for me, and I ended up not really making much progress on Rhythm Quest last month due to having a million other things to worry about. I'm back at it, though, at least for now...[/p][h2]Unified Settings Menu[/h2][p]I've been somewhat dissatisfied with the overall organization of the settings menus for some time now. The design of each menu itself was pretty ok (I wrote about this in an early devlog), allowing for intuitive interaction with any control scheme:[/p][p][/p][p]
[/p][p]However, as I've added countless different tweaks and options (there are over 60 in total so far, and I'm only making more as I go), separating them all into their own menus has proven to be cumbersome. I have something on the order of 20 of these different settings menus, because each menu can only hold about 4 or 5 rows worth of actual toggles (remember, buttons and text need to be readable and easily tappable even on a mobile device!). I've already had to divide these into "Settings" and "Game Mods", which itself is a distinction I've become less and less happy with:[/p][p][/p][p][/p][p]
[/p][p]Recently I tried to actually set some time aside to think of an alternative design where I could unify multiple settings menus into a single thing that you can navigate and flip through, instead of a bunch of disparate menus. If this were a desktop or console-only game I'd just have a big scrolling list, but I feel like that paradigm doesn't really work well when you use touch or mouse input. Instead I tried to have multiple horizontal "pages" that you can flip between.[/p][p]Here was my first attempt at a unified settings menu:[/p][p][/p][p]
[/p][p]Looks relatively clean, though it introduces a few new issues. One is that there's just too many pages to flip through to find what you want. There's no sort of indexing or hierarchical structure, so it can feel like you're just paging through a million different screens without a good way to find something specific.[/p][p]I didn't want to go back to having a top-level menu, and I didn't have enough screen real estate to add another tab or index. Instead I tried to at show you the titles of the adjacent pages, so that you can navigate based on the headings:[/p][p][/p][p]
[/p][p]I also show the adjacent pages with a lowered opacity, to give the impression that you're browsing through cards in a stack and give a visual indicator that there is something else to scroll to. Initially I had all of the pages wrap around in an infinite loop, but I actually decided not to do that as it felt more "anchored" to have an actual left "end" page or right "end" page to give you a reference point as to where each of the pages are individually within the list.[/p][p]With keyboard/gamepad input this all works really intuitively as it just navigates seamlessly between pages. With mouse/touch input you instead need to click on the left/right arrows directly to navigate. It's probably broken for screenreader input, but that's a battle I'll have to wage another day...[/p][p]As an added bonus, I'm taking this opportunity to make sure that I reuse as much of the same menu paging system for the in-game menu as well, instead of trying to organize that differently. There's still some adjustments that will need to be made there, but hopefully I won't need to manage two entirely different sets of menu pages...[/p][h2]Camera Smoothing[/h2][p]I've now implemented a simple algorithm for smoothing the vertical movement of the camera. Instead of directly tracking every height change in the track, it now interpolates so that height changes are anticipated slightly and are in general more "eased". Here's the before and after:[/p][p][/p][p]
[/p][p][/p][p]
[/p][p]I had to play around with this a bit before I decided that I liked it, but I'm pretty sold on it now. I was initially thinking of adding a new menu setting where you could adjust how much smoothing is applied, but I decided against that in the end -- I don't think this is the kind of thing that people need a choice for.[/p][p]Overall this is a minor change, but you can really notice it on certain track sections, and it also helps some issues that were present with the old implementation around very long airjump/flight sections.[/p][h2]Timing Indicator[/h2][p]This one has been on my to-do list for a while -- an (optional) visual timing indicator for more advanced players (or anyone looking to verify their calibration). I ended up implementing this in two ways; the first style is a fixed bar that stays in place on screen, with markers indicating how early or late you are on each successful obstacle interaction:[/p][p][/p][p]
[/p][p]I also have an alternative version that you can use that displays the timing offset for every obstacle as you pass them. Not sure if this is really more readable, but it's an option![/p][p][/p][p]
[/p][p]This is getting closer and closer to being able to have an (optional) traditional judgment system for your note timings. I want to be pretty deliberate about when or if I end up implementing this, as it could end up snowballing into a bunch of additional work (grading systems mean a more complicated result screen, adding more save data, etc.) for something that is intentionally not part of the core experience.[/p][h2]Fast Level Restart[/h2][p]Restarting a level now no longer reloads the level from scratch (if you want to do that you can still just quit the level entirely and then play it again). Instead, it keeps the level loaded and just gives you a respawn to the very beginning of the level, resetting all of the obstacles and coins. This is similar to the behavior that you get if you disable checkpoint respawns, and should help you out if you're trying to go for a high score but aren't using that toggle.[/p][p][/p][p]
[/p][h2]Song Select Tweaks[/h2][p]The song select menu has been an interesting UI hurdle since it (along with the rest of the UI in the game) needs to handle multiple different input mechanisms. I previously implemented touch swipe controls for this list, but one downside of the existing UI is that you were only allowed to click on the currently-highlighted song. Clicking on any of the other ones would simply scroll it into the middle, which worked "OK" but not ideal.[/p][p][/p][p]
[/p][p]I've reworked this so that you can simply click on any of the songs in the list to instantly ready it up. If you're using a mouse, the easiest way to navigate through the rest of the song list is to use a mouse wheel, but...of course, there's no guarantee you even have one of those (hi laptop/trackpad players?). To make sure everything is still sensible, I implemented a scrollbar on the right side of the list that you can click or drag:[/p][p][/p][p]
[/p][h2]Game Start/Menu Flow[/h2][p]After some mulling over in my head, I ended up changing my mind and "Start Game" now takes you directly to the world select menu (except for a first-time player, where it takes you directly to level 1-1), skipping the difficulty selection screen. The difficulty selection screen is now accessed through the button on the top of the level select:[/p][p][/p][p]
[/p][p]I previously thought that it was important to me to feature the difficulty selection screen before you start playing the game, but I'm backpedaling on that a bit because I feel like level 1-1 is probably going to be a fine experience for anyone regardless of skill level since you need to get introduced to the basic flow of the game anyways. The level 1-1 charts don't differ that much between easy/normal/hard anyways and after clearing that level you might have a better sense of whether you want to change up the difficulty. It's more important for me to get people into the game without getting bogged down with a bunch of menus![/p][p]Along that same vein, the audio calibration now starts up automatically instead of asking the player whether they want to do it (and recommending that they do). You can still skip it if you want, this is again just a way to eliminate one extra screen of reading and processing. The audio calibration UI itself still needs work (I've seen a lot of people fare really poorly on this screen), but that'll have to be a project for later...[/p][p][/p][p]
[/p][p]And finally, the default sliding menu transitions can be skipped through if you simply hit a button an additional time, allowing you to navigate through the menus slightly faster if you want:[/p][p][/p][p]
[/p][h2]Bugfixes and More[/h2][p]I've also been fixing a number of other random issues here and there, including the fact that I accidentally got rid of the nice pretty water effect for level 1-3 entirely (whoops). I also finally knocked out another todo item in that the water for level 1-3 now actually displays in the level select screen (it never did before):[/p][p][/p][p]
[/p][p]There was also an interesting edge case that's been on my todo list for a while: double or multi-hit enemies that span across multiple checkpoints:[/p][p][/p][p]
[/p][p]Previously this didn't work properly, as every enemy was assumed to only "belong" to one specific checkpoint. So if the last hit of a ghost enemy was just past a checkpoint, it wouldn't actually respawn correctly after you reached that checkpoint. But this now works properly and the ghost is reset to the correct state depending on where you are in the song. Works with double-hit enemies too, if they happen to cross over a checkpoint threshold![/p][h2]Issue Tracking[/h2][p]This isn't available publicly yet, but I've also started working on setting up a form for people to submit bug reports and issues via github:[/p][p][/p][p][/p][p][/p][p]Thinking about how to handle bug reports and issues has actually been on my mind for quite a few months now (right now there is just a scrappy #suggestions channel on the Rhythm Quest Discord which I'd like to eliminate). Initially I invested heavily into trying to create an in-game flow for submitting bug tickets -- I was implementing code that would automatically capture a game screenshot and then be able to upload it to a hosting site, then use the github API to create a ticket and link the attached screenshot.[/p][p]In-game bug reporting has some nice advantages in that you don't need to leave the game to report issues, and I can automatically include a bunch of information such as the build version and platform, and maybe even some relevant log output. But in the end I checked myself and felt like the effort I would need to invest to make a sensible UI for all of this didn't justify the benefits. I couldn't think of a way to really make the feature very discoverable either, so in the end I'm falling back to just using github issues to track this sort of stuff.[/p][p]You end up requiring a github account in order to file issues with this flow, but that isn't necessary a bad thing either. In the end I realized that I'm only a single person and even if I had a ton of bug reports coming it it's not like I would be able to timely address all of them anyways -- so it's to my advantage to choose a solution that's more prone to giving me a smaller number of quality issue tickets.[/p]

Devlog 77 - More and More Bonus Levels

Everyone's favorite thing to see (?) -- new levels! I had a bunch of different life things to tend to this past month (and the rest of Spring is going to be no different...) but I managed to crank out some more charts while in the midst of travelling. Here's a video of those in action:

[previewyoutube][/previewyoutube]

Scherzo of Magical Science is a whimsical song initially released as part of the Hero Hours Contract OST. At 155 BPM, it's quick, but not blazing fast.



There's a really distinctive 16th note pattern (using a whole-tone scale) at the beginning of the main musical riff. It's too fast for my tastes to chart each of those notes (at least for an official chart), so I ended up using the green attack+jump combo enemies along with flight paths to accentuate that rhythm instead.

Claustrophobia is a song off of the Nyamo's Adventure OST. It's written at 90 BPM, but charted at 180, making it the fastest chart I've made so far.



Again, there are actually some 16th note patterns in the music that you could theoretically add here, but I'm pretty committed to making sure that extremely quick double-taps are not required for any of my charts. Those become more doable when using multiple keybinds/buttons for attacking, but that's just not something I want to get into.

The Warrior Wakes in the Sunrise Dawn is a guzheng piece that I made in an hour, featured in the All in a Day's Work 5 album. This one had to be edited to get rid of the freeform solo portion in the middle, but the rhythms in the rest of the song still feel nice to play through.



The hard version of the chart features some speed zone runs that are difficult but satisfying to pull off. I've had some mixed feelings about the speed zones from time to time because their design space is a little limited, but using them sparingly for fills like this seems to work really well.

Along with the new charts, I spent some time finally pushing out a new release of the demo, which includes most of the new functionality I've been working on in the past months, such as the level browser menu, the new tutorial, and the big scene/level loading refactor. Unfortunately, between the new tutorial and the level load rework there were a big batch of bugs that I didn't catch. Turns out testing the behavior of re-used object instances requires you to actually play through more than just one level at a time, whoops!

I've also added the option to display the diamond-shaped offbeat markers (or downbeat markers, if you configure them that way) on enemies as well as winged jumps, in case that ends up being helpful. I don't think I'm a big fan of having these on everything as a default, so the initial setting is just to have it on wings that are on offbeats. As I said in a previous devlog, these are honestly primarily intended to help with level 2-1, so if they don't end up doing that job, I might end up having to come up with a different solution.



There's still some bugfixes to be ironed out here and there, but besides that I don't have any big aspirations for the next month given my busy schedule outside of Rhythm Quest. Just working on =something= is going to be enough for me to call it a success, I think, but I guess there are one or two specifics that I might try to complete...

Rhythm Quest Demo v0.36.4 Released

The Rhythm Quest Demo has been updated to version 0.36.4. This bugfix patch (along with the previous few) addresses various lingering issues present in the initial 0.36.x release.

Full changelog:


Version 0.36.4
- Fixed checkpoint scheduled sounds not playing on subsequent level loads
- Fixed inconsistent input timeline on subsequent level loads
- Fixed inconsistent obstacle coloration on subsequent level loads
- Fixed inconsistent coin count for level 1-1
- Fixed wrong keybinds showing for tutorial when using custom keybinds
- Fixed UI binds (e.g. arrow keys) not working for custom keybinds
- Hide tutorial icons when skipping level 1-1 tutorial
- Added up arrow as a default keybind for Jump
- Fix pixel artifacts for level tilesets via uv clamping
- Fixed bug when pausing game immediately on level load

Rhythm Quest Demo v0.36.0 Released

The Rhythm Quest Demo has been updated to version 0.36.0! This patch includes a number of changes and improvements all around, including a reworked tutorial sequence, offbeat markers for wings, practice mode improvements, and the addition of the level browser menu.

Full changelog:


Version 0.36.3
- Fix additional level load issues

Version 0.36.2
- Fixed WebGL level load issues
- Fixed WebGL input timing issue

Version 0.36.1
- Fixed various bugs with the 0.36.0 release
- Fixed level 1-1 tutorial for easy/hard difficulties
- Fixed autoplay interactions with level 1-1 tutorial
- Fixed input not being blocked during world 1 banner
- Fixed ui layering issues
- Fixed various level load issues when reusing obstacle instances

Version 0.36.0
- Added level browser menu with streaming previews of all songs
- Reworked level 1-1 tutorial sequence
- Add toggleable diamond markers for obstacles that are not on downbeats
(enabled by default for wings only)
- Tweaked hard chart for level 1-1
- Increased scroll speed for level 2-1
- Add shortcuts for warping to checkpoints in practice mode
- Allow increasing speed beyond 100% in practice/assist mode
- Hide input timeline in practice mode if helpers are disabled
- Fixed coins not reappearing after exiting practice mode
- Spawn (fake) enemy coins in practice mode
- Fixed ugly pixel artifacts in backdrop rendering
- Fixed audio not playing when exiting practice mode
- Slightly reduce sfx/ui volumes in comparison to music volume
- Fixed bugs involving pressing multiple jump inputs for a flight path
- Use pre-existing pitched coin sfx for different music speeds instead of modifying them
- Better updating of scheduled sounds when game settings are changed mid-game
- Update pitch of metronome when music speed is changed
- Major refactor of scene loading implementation
- Reuse obstacle instance between levels to reduce load times
- Major refactor of particle system implementation
- Resize unicode pixel font, force smoothed version at low resolutions
- Updated localizations/translations
- Decreased audio quality for WebGL builds to decrease download size

Devlog 76 - Tutorial Revamp

Last week I completely broke the tutorial setup for level 1-1 and while I was thinking about the best way to fix it up, I figured that I may as well just rework the tutorial since I've been wanting to revamp it for a while anyways...

[h2]Showing Obstacles[/h2]

Probably the biggest thing I wanted to fix about the old tutorial was the fact that it only taught you the controls of the game, without showing you how you should use them for the basic obstacles in the first level.



I knew this was a problem because I had at least one playtester reach the first enemy and say "Hm, what am I supposed to do here, jump over this?" Of course, I already attempt to convey what you should be doing by putting the red "sword" icon as a prompt for the first enemy that you get to, but it's probably better to just have that correlation established more directly, like this:



[h2]Beat Grid Markers[/h2]

The above probably also helps with the second issue I've noticed, which is that at the end of the old tutorial sequence, the "real" level graphics fade in, and you see the flashing beat markers for the first time. I had some players thinking that they were supposed to jump on every one of these. Which, I mean, you can if you want to, I've got no problem with that, but if you think that's an expectation then that's more of a signalling issue on my part.



Now the beat grids are there from the beginning, before you even make any inputs, so it should hopefully be more clear that they're not indicative of some sort of action you need to take.



[h2]Pacing[/h2]

One of the neat things about the old tutorial is that everything is synced with the music -- all of the tutorial prompts are done on downbeats, for example. Unfortunately, this also meant that there were a lot of pockets of "dead time" where nothing was really happening since the tutorial was waiting for the next measure in the music to begin. Anecdotally I've seen players hop around during these pauses, which is a fine way to get acclimated to the controls, but it also means I've lost their active engagement.

[previewyoutube][/previewyoutube]

I'm always looking for opportunities to get out of the player's way and reduce the time/button presses it takes them to "get to the actual game" from first boot, so the new tutorial tries to be more streamlined with its timing, using a different structure where it pauses the music and waits for you to make the correct input:

[previewyoutube][/previewyoutube]

I'm a fan of this because if you don't need a lot of time to process the prompt you can do the correct action and get a quick move-on, but if you need some time to find the right buttons on your gamepad or whatever, the game is clearly waiting for you and you can just progress whenever you're ready. I also added some black bars at the top and bottom of the screen to denote a "hey, read this!" moment (this is also when I disable inputs for a brief period before the tutorial prompt comes up, so that you aren't in midair or whatever when the game pauses).

[h2]Other Tweaks[/h2]

Because the blue "jump" icon is now placed in the game world itself (like it is when all of the other mechanics are introduced...) I've also removed that from the text box as it felt weird having two of them on screen at once. I also decided to do away with mentioning the mouse controls in the desktop version of the tutorial. Mouse input is of course still supported, but IMHO gets to feeling awkward once you're dealing with more complex input sequences, so I'd rather push players toward using keyboard controls as a default.



In an attempt to remove one of the menu steps for a first-time player, I've also added logic so that when you first select a difficulty, you skip the world select screen and jump straight into level selection for world 1. While the world select screen is a good way of advertising how much content there is in the game, I don't think it's super necessary to show at first, and I also don't like how it breaks the UI flow since it uses a different UI paradigm than the preceding and following screens.

This also gives me a sensible opportunity to show the "World 1" banner, which previously was never displayed anywhere (was only displayed when you first unlock a new world, but world 1 is always available from the start).



My new player experience still needs a bunch of additional work (the calibration sequence is really not working out and the difficulty selection screen is cluttered), but this is hopefully a step in the right direction. And hey, at least the tutorial is no longer broken!