Hey y’all~ February was intensely busy wow!
The side project Silver Ambience is still behind, but Lattitude has sent me some new music to start uploading (plus we have some extra content I’m keen to put up later!) so when I’ve got some spare time that’ll be my focus~ My work with Radioactive Magic is as busy as ever with PokéStudy; after we wrapped up the 3-part study on ‘Villains’ I’ve been madly editing an utterly huge episode, so you’ll have that to look forward to hopefully sometime over the next few weeks!
My work with roll has been constant, I’ve been really putting an incredible amount of time and effort into this lately! While I continue to strive to get the game to that stand-alone demo stage, February’s updates can be generally catergorised into 2 main groups:
- Seed Customisation: Those of you who have read previous Dev-Diaries (specifically Dev-Diary 88) would have heard me mention how roll uses Seed mechanics, a staple in many procedural-generation games. These can be seen very briefly in some of the game footage in both my 2022 Showreel and the teaser I posted to Twitter. Seeds and the world-generation have not changed, but how the player interacts with Seeds very much has! I still won’t be going into the mechanics of my custom Seed functions today (that’d be an entire essay on it’s own!), but I will talk about why they’re so important for my game specifically!
- What is a Seed? (this part is a little technical, so you’re welcome to skip it~)
Before we talk about why Seeds are important in this game, let’s talk about what they are. Conceptually, a Seed is a value (usually a line of numbers and/or letters) that predetermines random results. Let’s say you’re going to flip a coin 10 times; the probability of getting any specific outcome is ¹⁄₁₀₂₄ (about 0.0977%). Now let’s say that the result of each of the 10 coin flips will be determined by reading a Seed; you flip the coin those 10 times and get a result (let’s say THHHHTHHHT). If you were to repeat this process and flip the coin 10 times again using the same Seed, you will get that same result again, while repeating the process again with a new Seed will very likely result in a different outcome.
This is a process known as ‘pseudorandom number generation’, and it’s one of the common ways a computer handles simple random number functions; a Seed is put in, and a line of numbers is popped out. Let’s look at those coin-flips again, how did we get that consistent result? We’ll pretend we wrote a coin-flip program that asks for a random numerical digit (0 to 9) which determines the result of a flipped coin (0 to 4 is Tails, 5 to 9 is Heads). When we run the test and flip 10 coins, the computer has to ask for 10 numbers:
[4 9 6 5 5 0 6 6 5 1]which results in
[T H H H H T H H H T]
But how did we get this line of numbers? While there are so many ways to produce random numbers (most far more efficient than the way I’m about to describe), let’s use this simple one for now~ In this case, we asked for some text, and converted it into it’s ASCII value:
"1A2B3"gets converted into
[49 65 50 66 51]
That initial text, “1A2B3”? That’s the Seed! A value that was input into the function to produce a series of numbers from which random values can be drawn. Every time you ask this function to produce random numbers from this Seed, it will always produce the same set.
- Why are Seeds important in ‘roll’?
Like in many games that use procedural generation, the world of roll is randomly built from an assigned Seed. At the start of a run, a Seed will be generated, and all the random functions that build the world will look to the result of that Seed to determine how everything is put together. This means that if a player were to reload the same Seed, they could replay the world that was built from that Seed! As a game riddled with secrets and collectibles, being able to revisit familiar layouts or consistently find rare regions becomes an important element of slowly piecing together all the stories. Would this mean that players could discover a Seed that generates a world that places many of the secrets close together and easy to find? We’ve been working to ensure that everything is usually quite spread-out and distributed, but yes it does! This game has always been about going at your own pace however, so if players wanted that to be their experience, I won’t stop them~
Okay but what does this have to do with the work of this past month? While Seeds and world-generation have long been in the game, we have recently added the capacity to allow players to set their own custom Seeds (represented as a 12 symbol pattern). Because the demo aims to demonstrate many of the initial core features of the game, being able to determine the worlds you explore is an important part of that. Players can check their recently explored Seeds, as well as write-out Seeds from scratch, allowing people to share Seeds they found exciting, or that revealed interesting secrets. This feature won’t be important to every player, and definitely caters more to the audience that sees this game as a journey or a puzzle, but it has long been one I believe is an integral part of this game. Plus there are Special Seeds!
- Special Seeds?
If you’ve been a gamer as long as I am, you’ve probably heard of, and maybe even used, ‘cheat codes’ before; you either type a pattern or press a series of buttons and it changes something about the game! Now, roll won’t feature cheats; you won’t be able to type out something and suddenly become invincible (plus there’s already a planned gamemode where you are invincible for players who just want to casually explore!), but there will be plenty of secret worlds~ Part of the update this past month has been to begin factoring in these Special Seeds, including a menu where discovered Special Seeds will always be stored so you can easily look them up to replay them. Special Seeds affect the world in countless ways; some will only generate certain region types, some will have specific or erratic weather, others will just add a comical audio or visual gag to your gameplay. While these secret worlds will restrict what collectibles can be unlocked while in them, they will contain their own separate scoring systems so that players may challenge themselves in unique environments. At the end of the day, Special Seeds are an extra layer of entertainment and possibility for the player, while also providing something more than can be uncovered and shared within a community~
- What is a Seed? (this part is a little technical, so you’re welcome to skip it~)
The other major category of updates this past month is Optimisation. I feel like all of my Dev-Diary talks about optimising code or performance (as it should be~!), but there is definitely a bit of “above and beyond” this time. I won’t go into a technical rant as I did above, but here are just a few of the aspects that have been improved:
- World Tiles:
The game still featured many old tiles than either no-longer fit with how the world meshes tiles together, that were cool on paper but failed in practice, or just didn’t work well with how the game changed over it’s lifetime. These have been removed and replaced with some new ones that work much nicer~
- World Objects:
Talking about the world generation, a while back I started cleaning-up a lot of the visual shapes and collision data for world objects. This is something I continued this month and have now almost entirely completed. As before, this essentially boils down to redrawing the shapes to match the new style set, and then setting the collision data by hand. I had previously relied on Unity to automate collision polys, but found it utterly unreliable as well as intensely excessive. I had already replaced many of the simple objects with basic collisions (circles and rectangles), but I’ve now manually set the many of the more complex poly-collisions, and done my best to adhere them to a consistent layout so that different shapes with similar parts have similar collision data. Tedious work, but not only does it make gameplay smoother (simpler polys means less calculations~), but it also means objects behave more consistently as the player interacts with them.
- Tutorial Extras:
I’ve mentioned before how much work I’ve put into the tutorial for this game. Despite how simple the game is, I want the players to feel as if they are naturally flowing into the gameplay, instead of either struggling to figure it out, or just be hand-held through each step. Two major things to consider here; do not flood the player with information, and the player never stops learning. While there will definitely be improvements to make about iterating the tutorial and hints more progressively throughout the game, steps have been taken to make the initial tutorial more seamless, as well as hints added throughout other parts of the game to provide additional guides to the features and functions. In the future I plan to break-up many of these guides and features into stages so that players are slowly taught about the more complex extras (such as Seeds) the further into the game they get, but for now it does a good job of generally covering what is on offer.
- Micro Features:
These are basically just small, arguably unnecessary features that have been added or updated in the game. Stuff like finally setting a visual animation to the joystick, tweaking how the End moves in the world to balance out the player’s experience exploring, and updating the custom swiping functions in the UI to make them smoother. Essentially, ease-of-life features that gradually accumulate to an improved player experience.
- Bug Fixes:
February was the month of patching. Bug Fixes are distinguished from Micro Features in that they need to be done, otherwise the game will either not operate as intended, or just fail entirely. Things like fixing UI scaling on different resolutions, collectibles not being scored properly, text pop-ups appearing even after the player’s run has ended, UI buttons not operating as intended, and so on. A bunch of stuff got fixed~
- World Tiles:
Alrighty that was a lot of writing and I have a lot of work to get back to so I’m going to leave it there! I hope everyone is doing wonderfully and staying safe, while also being supportive and kind to one-another! Till next time, all the best~