For the last few months, we’ve been building our new randomization system for the placement of objects within our levels. Since The Very Organized Thief’s core mechanic is finding randomly placed items, this system is an important and major part of The Very Organized Thief.
And now, after a bunch of work, Alex is going to talk about it!
WARNING: A programmer is going to talk about… …things!
In the original game the randomization was very simple. Each object that could be stolen contained a list of locations it could be found at, meaning each of those locations was unique for that object. Because of that each item location had to be meticulously placed to avoid overlapping other objects, random or stationary, that it may be placed near.
It was really crude, but it worked.
The major downside to this was once an item of a particular size could take up the location, nothing else could be placed there. Limiting that location to either having one item placed there, or left completely empty. This meant a lot of wasted locations in the level that other items could of been taking up.
While studying I spent my extra free time to doing a little research and documentation, looking at various ways to fix the above problem, and then some. I ended up reading a bunch about procedural generation and watching stuff on YouTube to help come up with some ideas.
I like doing documentation, so I spent a fair amount of time writing up how I thought it might work and applying a few of the ideas that we tried with The Maze – KOD to how it worked. We decided to call it the Game Object Randomized Placement System, or GoRPS for short. We know it’s lame, but it helped when writing the documentation.
So how does the new system work?
GoRPS works pretty much the same as the old system, except it is way more flexible. Rather then placing just a single point, you place a Box of a particular size.
These boxes can then be made to accept objects which fit inside it. It also has some additional rules attached to it which allow it to control the types of objects which can be placed there. Such has allowing only Antique objects, or a very specific object. Plus a variety of other randomization options.
This way we can see how much space the biggest object is going to take up without an object actually being there. Though you to have to use your imagination when working with it sometimes.
Something I adapted from The Maze was the customization feature which allowed us to control how and where maze unique cells would be determined. It’s essentially the heart of the whole system and controls how random the objects will be placed, as well lets us add things to objects in different modes.
One of the most recent things I added was Templated Layouts. The idea is that an artist or designer can come in and place a set of props in a nice arrangement, and then convert it into a Templated Layout. You could then place that template around, and then GoRPS will randomly fill them at runtime with the appropriate objects which would also be randomized. The affect of this is that the template itself could be also random, filling all the locations, or only some of the locations.
I got the Template Layout idea from watching the Dungeon of the Endless Rendering and Procedural Content talk by Sébastien Dubois of Amplitute Studios at Unite this year. So big shout out and thank you to those guys for sharing, and a recommended watch for game developers into procedural games. Our system is nowhere near as cool as theirs but it is still pretty early days for GoRPS LoL.
It’s also pretty fast. I spent a little bit of extra time optimizing it so we could do something pretty cool with it. Which I hope everyone will like.
Though it wasn’t always.
It still needs some more work considering it is in a bare bones basic state compared to what we’re hoping to do with it in The Very Organized Thief. Such as creating some additional tools to simplify working with it. But in all it’s a good start to making very organized thieves feel a little less secure with their own memory. Also the possibilities of what we can do with it in the future are pretty exciting.
We hope you enjoyed that little behind the scenes. Until next developer diary!
– Alex and Elise : )