Ashworld Tech: Creating an open-world part 1

So, where do you begin creating a game-type which you never created before? The correct answer is probably: research.. But since I’m more a guy who jumps in and sees where it ends up, I instead dove straight into creating code and graphics!

One prototype dies, so another might live.

The first code I wrote for Ashworld was mostly copying + cleaning of a little beat-em-up prototype I was working on, remember this?

As you can see, the character sprites are pretty much the characters from Ashworld, the movements and fighting are all the same. As fun as this prototype looked, I wasn’t really sure where to take it. The screen-space was pretty limiting, with mostly horizontal movement.. so I wanted something that did not had those limits. Enter: a big sand-box.

The big sand box

Taking the characters, and simple movement stuff, and placing it in a completely empty screen was the start of Ashworld (back then called Ragelaw). I had no clear goal of what this game would be, and I figured that was a pretty good starting point for an open-world game – at least based on how I see them.

The first weeks or months was really about me just adding stuff to the game that I figured would be fun. So we ended up with cars, buildings, sandworms, rocket-launchers and big explosions. Some beat-em-up style brawling with enemies, blood and gore, all mixed up into this sand-box with no world-boundaries or levels.

I also added buildings that you could walk into, and decided it would be fun to have those levels be side-view platform levels. The thought here was that the way the graphics were drawn, you could use the same images just as well in a top-view as you could in a side-view, so the overlap was big enough content-wise to just try this.

Empty worlds are boring

Now, let’s talk about problems with open-world games: they can be boring pretty quickly! As much as we, as game developers/designers, want an open-world game to be really open.. it will never be. From things like the missions, to just the content in general, you run into the problem of repetition. Every content in an open-world, still has to be created at some point to be unique.

The bigger your world is, the harder it becomes to keep it interesting. The smaller your world is, the smaller your game feels and the less interesting the game becomes. It’s a problem I had to figure out how to fix.

One solution was turning the buildings from a single-room into a full-fledged level. From underground layers to old skyscrapers with elevators in it. Using a combination of pre-designed levels, and procedurally-generated tricks, the buildings now feel unique and familiair at the same time.

This still means that the “over-world” needed a lot of buildings, and besides those buildings it also needs gameplay of itself. Because else you’re just running around a Super Mario style world-map, and dive into buildings to play levels (and at it’s core, that’s really what an open-world is).

Finally, part of my solution on avoiding a boring open-world, is to allow myself to create a smaller open-world. Open doesn’t mean endless after all. Once I had my mind wrapped around that concept it became a bit easier to create a fun world.

Generation tricks

So keeping the over-world interesting was the biggest part. Obviously, even on a small scale, you can’t fill a game-world with thousands of objects, unless you don’t care about framerates (and we all know, everybody cares about framerates).

I decided to split up the “scenery” from the “interactive” stuff. So the game world has a pool of objects that are just static scenery (rocks, poles, debris,etc) , and it has another pool of objects that is for interactive stuff (enemies, building-doors but not the building itself, fences, crates, etc.).

Most of the scenery items are then just generated in the top-left corner of the world, and every frame they check in which corner of the world the camera is, and then “moves” itself  to that corner instead. This way we have 4-times more scenery in the world than we have in memory or need to process every frame.

Most of the interactive stuff is always in memory, except for things like skellies, ragers, corpses with items, which can spawn all over the place at any time, so we also remove them if they are off-screen for to long.

This kept the game running smooth, but still full of entities and scenery.. it’s a live!


Bookmark the permalink.