Assuming you’ve decided to build a 2d engine for a non side-scroller you quickly come face to face with one of the biggest decisions you’ve had to make so far. How are you going to represent the game world? Basically there’s two choices each with their own benefits and issues. There’s the ‘Walls are a block’ approach where everything is a block and the ‘Walls are an attribute’ approach where walls are things that are part of a tile and appear on the edge of a tile. Here’s a little Pro/Con info that I jotted down while deciding on which way to go for BSDDoD.
Walls are a block.
Example: minecraft, zelda This is probably the most obvious approach to building a 2d world. Everything about the world construction is handled in a simple array of blocks letting you quickly build a map.
It’s essentially a lardge 2d array that contains the structure of the world. With each location in the world represented by a number. For pathfinding you can easily implement floodfill tests and even weighting the passability of tiles is pretty trivial.
They’re easy to implement and fairly lightweight, make a whole bunch of visibility / raycasting real easy and fast.
Aesthetically they’re not as nice/real looking as what can be achieved with thin walls. Destructible walls are more unrealistic and the wall type is determined by the block that is the wall. So if you want blocks with different wall textures you have to create and track many more entities. Windows are pretty much out of the question and doors tend to look a bit odd.
Walls are an attribute
Example: X-com, project Zomboid, old Gold box D&D games, the Sims
Every game tile has 4 flags associated with it used for indicating if there’s a wall. This means that there’s a bit of extra overhead but it comes at some interesting benefits.
Aesthetically having walls look like walls is a big bonus. Also the ability to do things like have windows, half height walls, one way doors and portals is nice too. Also the ability to have different textures for a wall regardless of whats in the neighboring tile is nice (but there’s workarounds for tile based maps for this as well).
Complexity. Pathfinding, line of sight and collision detection all become significantly more involved, not necessarily slower, just more complicated.
What did I choose?
Well since I’ve got a bunch of the art assets already created for a straight on view, I eventually settled on the Block based walls with the Straight on view (right side of the image above). Really that was the deciding factor. The straight on Blocks as an Attribute would just wind up looking odd and I have no need for windows or doors since it’s essentially an arena based shooter.
For the next project I’m leaning toward an isometric Block based map, however with blocks being smaller than the characters, so that will give thinner walls and hopefully a more enjoyable dungeon building experience… but that’s still way off in the distance, percolating on the back burner.