Friday, March 27, 2009

Introducing: Archipelago


Experimenting with randomly generating a game world is much easier when the framework upon which it is built is simple, especially for a lone developer. In the past I have built much more complex efforts than this one, with more elaborate graphical styles and more complex graphics and asset pipelines. It's easy for a project to get lost in the complexity. So, with that in mind, I introduce Archipelago (working title). Set amidst a randomly generated cluster of islands, Archipelago is a game of pirate-treasure-seeking, monster slaying, cave-looting hack and slash fun. Built in a somewhat old-school top-down tile based fashion, Archipelago harkens back to the days I spent as a kid playing such golden nuggets as Dragon Warrior and the original Zelda and Final Fantasy games on the old 8-bit Nintendo system.

This image is a preliminary first shot of the framework as it currently stands. (Ignore the red arrow; it is a placeholder avatar.) The map generation scheme in this shot is placeholder, just a random scattering of terrain elements without any regard to layout or structure. The interesting thing to note, however, is that each terrain element is itself randomly generated, rather than drawn by hand using image editing software. Each element combines aspects of color-map generation (random speckle maps of color for dirt/sand/grass/water, to height-variegated elevation color maps for the mountains) and shading/bump-mapping, performed at application start-up, with additional processing to generate the tile sheets that form the border or transition areas where one type of terrain fades out into another. Eventually, I will solidify the assets and merely load from file, as the processing time for generating a whole terrain set can result in a pretty decent pause. However, there is something neat (to me) about the idea of a game that procedurally generates everything. I know that at this time it's not completely practical; but still, it's cool.

The framework is based upon a codebase I have been building over the last several years, that integrates various means of random number generation and procedural noise, color-mapping, Lua-script embedding and encapsulation, scrolling map structures, etc... I call it the Accidental Engine, though I use the term engine loosely, as it is in no way a comprehensive, all-inclusive game framework. Merely a large set of utilities.

As it stands, the game incorporates smooth-scrolling of a randomly generated tiled world, with animated sprites, basic lighting and a fluctuating day/night cycle. I'll keep things updated as I progress.

No comments: