Around The World, Part 12: 2D or not 2D
So far, I’ve been talking about generating a world at a very large scale for the game. But the aim of the game is exploration, so the player will rarely, if ever, get to see the entire planet at once. Which raises the question: what will the player see?
The game jam prototype that started it all looked like this:
Its visuals were designed to mimic the EGA era, with low resolution and a limited colour palette. A top-down two-dimensional view perfectly fit into that. Of course, it’s also easier to build, which made it the obvious choice for a 48-hour game jam.
However, this prototype took place on a rectangular map that wraps around at the left and right edges – essentially a cylinder. This made it possible to represent it as a grid of square tiles. The full game that I’m working on now will take place on an actual sphere, where such a thing is not possible.
Making it 2D?
I’ve thought long and hard if I could use some kind of hack to use an entirely flat 2D view in the new game as well. Then I could use pixel art, which is relatively quick to produce. If the player only sees a small part of the world at the same time, surely it’s possible to flatten that to a plane without too much distortion?
And yes, this is possible. But it’s not enough. Even if we have zero distortion at the player’s location, distortion inevitably increases towards the edges of the view. That’s still fine, except that the player can move towards these edges, and far beyond them. As the player moves further away from their starting point, distortion would inevitably increase. What should happen then?
One option is to reproject when the distortion becomes too large. At that moment, the center of the projection would again snap to the player’s position. This would lead to jarring jumps, where the entire world suddenly appears to change around the player. That’s clearly not awesome, and we want this game to be awesome, right?
I could try to hide those jumps in some artificial way, e.g. by showing a fullscreen end-of-day summary at the end of every in-game day. But I’m worried that this would interrupt the flow of the game.
To entirely get rid of these sudden jumps, we could instead reproject continuously. The location of the player is always used as the center of the projection, so it has zero distortion, and the edges of the view are never distorted too much. So now we have a system that, in real time, transforms a 3D scene into a 2D image. Does that sound familiar? At this point, we have essentially reinvented a 3D rendering engine.
Making it 3D?
After this realization, I wondered if I should go all-in and make the game fully 3D. After all, wouldn’t it be awesome if you viewed the world from a first-person perspective, standing on the deck of your ship and seeing a strip of long-awaited land appearing from the haze on the horizon? This would make the game much more immersive.
I have even been tinkering with this in another early prototype:
The prospect is extremely tempting even now, but I have to be realistic: I’m just one guy doing game design, coding and artwork, and I have neither the time nor the skills to model 3D objects to the detail needed to make this work.
Also, from a gameplay perspective, it might make the game very difficult: this third-person camera makes it very hard to match the shape of a coastline to what you see on a map. Of course navigators needed to deal with this in real life too, but they used a sextant to take painstaking measurements. Also, they could draw on years of experience and even then sometimes got it wrong. Not something I’d want to inflict on my players!
Middle ground
So we have to use 3D, but we don’t want a first or third person perspective. The sensible remaining option is to use a top-down perspective, but rendered using 3D meshes and models.
I was initially worried that this would look very bland and boring. You would just see the deck of the ship, with some narrow lines across it representing the beams and sails. Trees would look like circles, buildings would look like squares. Even 2D games from the previous century would rarely do this; rather, they would have some oblique perspective baked into their sprites:
SimCity Classic (1994)
Oddly, it wasn’t until I bought the newly released Pioneers of Pagonia, a real-time strategy game by the makers of the old Settlers games, that I saw the extremely obvious solution:
Pioneers of Pagonia, screenshot by the developers
The camera used in modern RTS games like this could work for me as well: a mostly top-down view, but with the camera tilted slightly from the vertical. This would show objects slightly from the side, giving a better sense of their shape, while still letting me get away with low-detail, low-poly 3D models because the camera never gets too close.
Also, it saves me from having to procedurally generate and render good-looking skies and clouds, which would be a rabbit hole that I would absolutely love to go down, but would keep me busy for months.
As a bonus, the circle of viewable area is squashed into a wide ellipse, better fitting the aspect ratio of a PC screen.
So, that’s what we’re working with. In the next post, let’s see what our generated worlds might look like from this perspective!