Dev-Diary: 104

Hey folks! Sorry for being a tad late, I was caught up with a few things. ^^”

The second half of December and early January was mostly me taking some time to breathe; the final few months of 2023 were incredibly non-stop for me as I jumped from expo prep to managing our business, all while getting as much dev-work done as possible! While it did delay part of my project schedule (predominantly the marketing side), it was a much needed pause as was I rapidly running close to quite a large burn-out, which has thankfully been pulled back quite a bit.

The bulk of January has seen a lot of productivity keeping the development for roll on-track! As we have previously crossed the Alpha bridge, our main focus right now is divided in two categories; to patch and optimise our current progress (especially from player feedback!), and to hit a minimum-viable product that we can then fully expand upon later if possible. Fortunately these past few weeks have seen major strides in both as we jump head-first back into development!

  • Player Character:
    • Physics: We did it! The final physics rework for the player-orb character! I know last time I said it was the last time but this is the last time, and I have 2 very good reasons as to why we did one final rework! Foremost, we wanted to address the new player feedback; there were still concerns about the reaction-time of the movement and recovery time after an impact. These can mostly be traced to how much velocity is applied by a player’s input, and as such we’ve adjusted the calculation to provide a faster response to both change in direction and general acceleration. This provides a stronger sense of control and handling, without fully sacrificing the original “physics ball” feeling. The second reason is to overhaul the “Player’s Stats”, which ties into a new feature. Essentially though, we needed to tweak the values to work to a more standardised set that can be better manipulated through upgrades. We’ve gone through countless tests and minor tweaks to find what we believe is the sweet-spot for exploration and handling at both minimum and maximum capacity (I’ll explain further on~). We’ve additionally made some tiny changes to the physics materials in the game to better accommodate all these updates.
    • Controls: I mentioned in the previous post that one of the up-coming additions was going to be new control-schemes. We had always intended to include multiple control options to address both accessibility and play-style, and this was solidified during testing when watching multiple players attempt to flick the ball instead of utilise the joystick. So that’s what we added! In actuality, while they are two different control-schemes, the new ‘Swipe’ option is essentially the standard scheme with a split-second check at the start of input. During the first fraction of a second of input, the joystick maps the most recent directional vector of the input movement. If the player stops inputting in that window, it is regarded as a swipe and maintains that input, decaying at an XY ratio of the stored directional vector. What this means is that if the player was inputting right but then flicked up at the end of the stroke, the input will decay at a rate that maintains the upward stroke and slightly curving the orb’s added velocity. Initial tests are looking good and we’re excited to see how this is received when we push this update! We also intend to add two more control schemes still; one that is an auto-hold variant of the initial joystick to help reduce how much a player needs to touch their device, and a gyroscope option for when you want to revisit the classic nostalgia of the rolling-ball maze games~
  • Upgrades: Okay, so remember how I talked about upgrading the player character’s stats? Well, I also did that! A long planned update that is currently just dubbed the ‘Shop’, a player can now spend those well-earned shards and improve their character’s speed, handling, and the effectiveness of their power-ups! But I’ve gone about this a different way to the norm; instead of simply purchasing an upgrade, a player can instead invest in the upgrade! Let’s say an upgrade costs 100 shards, but you only have 75? Well, you can still invest those 75 shards into the upgrade to get a fractional bonus! Coming back later with the remaining 25 shards (which should be easier now with the small upgrade!) allows you to fully unlock the upgrade and its power! This is to ensure players feel that even a short run can still contribute to their progress! In addition to using shards, various collectibles also provide permanent stat boosts to the player character, so even just exploring around can make you stronger! This all comes together with some super-fancy visuals where the player grows and draws symbols at each-stage of an upgrade, and some amazing glows as the player watches their shards sparkle into power! Here is a short animation of the player unlocking the first Speed upgrade!
Animated image showing the visual effects of investing collected shards into the Speed stat.
  • Power-Ups: Because we set-up the shop, we also had to ensure all the power-up abilities were finalised! Similarly to how the player character’s stats were restructured, we’ve reworked a lot of the power-up stats to work in standardised sets, and tested their functionality at their minimum and maximum values. Additionally, we’ve completely re-done the visual representation of the power-ups, and personally I think they look pretty amazing~ We now have our same symbol found in the shop iterate through unique visual stages depending on which power-ups are active (each power-up represents a different state of mindfulness; Inwards, Outwards, and Balanced) alongside a visual timer to shop the remaining time of that power-up. We also sprinkled in some glorious particle effects for good measure, and you can get a small taste of that here~
Animated image showing the visual effects of collecting a power-up.
  • Game Modes: For the longest time, we’ve planned to have two main ‘game modes’. The first was the standard endless-runner mode where the player would navigate the world while racing away from the pursuing shadow, and the second was a peaceful mode without the shadow, allowing the player to explore freely. In testing, while we found people equally enjoyed both modes, a question that popped up a few times was, “if this is a meditation game, why is the chasing-mode the default?” They were absolutely correct! The answer was because during per-production the game was first conceived as an endless-runner, but thematically became a meditation game. When development started, even though I knew this would be a meditation game, the challenge of the endless runner stuck. Where the game is now though, as well as what we hope the game to be for the players, we can see that the peaceful mode (titled ‘Zen Mode’) should be a lot more obvious, and indicated to the player immediately. We’ve made the two modes much more distinct from one-another when on the main menu, but more importantly we’ve also added a query to the end of the tutorial that asks the player which experience they would prefer, allowing players to select their preferred gameplay before any proper runs but after they have an idea of what they’re getting into. In addition we’ve patched up pretty much all the Zen Mode specific bugs, especially those to do with world generation (read on!).
  • Fixes and Optimisations: So. Many. Fixes. From tiny small ones like removing depreciated variables and functions, to optimisations such as cleaning-up looping routines and calculations, to curing some game-breaking bugs! Many thanks to the people that tested the game and provided the feedback, especially at SXSW Sydney (it helped that I was there to see the players find the bugs in real-time hahaha)! I won’t go into the intense details here, but I will talk about one of the big (but also small?) fixes to world generation. I’ve mentioned world-gen many times now in these posts, how the world writes to a grid ahead of time to help performance on mobile, and that there are unique IDs that call to load specific “special” tiles. I did have some functions in place to check for previously written special tiles to prevent overlap, but it wasn’t enough, especially when the game was drawing-up the biomes. I’ve reworked a chunk of the generation functions in two ways; the first is to ensure there is a priority of planning (biomes go first, then unique/secret singular tiles in a specific order). This is to better accommodate the second part which is a proper scanner that tries to place all the remaining special tiles in available coordinates as-close as possible to their desired target. The function loops around the origin point scanning the grid, and when it finds an area of appropriate size it writes the tile to that spot. It’s essentially a better version of the simple scanner I had originally written, and it also works well in the middle run for secret areas that render at coordinates determined by the player’s in-game actions and not just the seed value. Overall, the world-gen is not only smoother and safer, but also a bit faster after the patch and clean-up.

Don’t forget you can always check-out the Alpha release of roll over at our page!

Anyways, that’s it from me for today. Been a busy time, and we’ve got a lot more coming-up this year! We’re excited to share the fruits of our labour with you all, as well as introduce you to all the exciting ideas we have coming up! I hope you are all doing truly amazingly, being kind to one-another. Till next time, all the best~