In Part 2, I discussed what led to me abandoning my Histories and Heroes project.
Whenever I work on creative projects, I tend to do two things: 1) overestimate the amount of work I can do, and 2) underestimate the amount of work something will take. Thus, my ideas always tend to outpace my productivity; but I’m sure anyone with creative ambitions can say that.
In the months after I abandoned Histories and Heroes, I had a bunch of writing and programming projects that I was working on, and only a few of them ever really made it further than the “jot down a few ideas” stage.
One such project was the basis of a turn-based RPG whose gameplay was driven by what I called a “narrative-based combat engine.” In short, every member of the battle operated independently based on how you’d trained them thus far, and the results would be presented to you as a story. It’s not hard to draw a line between Histories and Heroes and this idea: the notion that a computer would compose and display something to you was pretty similar to the philosophy that inspired the former.
Part way through my development of the “proof of concept” of this untitled RPG project, I decided I wanted to have the program generate random names for both the enemies my characters battled and the weapons that my characters wielded. I remembered the linguistics-based language and naming tool from Histories and Heroes (as described in Part 1 of this series).
A New Spark
I was in the middle of copy-pasting over the code from that linguistics project when a breakthrough idea hit me: A world generator like Histories and Heroes isn’t particularly useful on its own, but as a tool for the development of other projects, it could be really intriguing.
I pulled out a notepad and told myself if I could quickly come up with ten game ideas I might someday design that would benefit from having a procedural world generator, then I was probably on to something. It didn’t take me long to convince myself that this was a good evolution for the “Histories and Heroes” project.
Inspired, I started designing and coding a new procedural world generator from scratch. I always had my old Histories and Heroes code open in one window for reference, but this new project really was a total reboot. I wanted to address every issue that I’d run into with the old tool. Here were some of my guiding principles:
- As much raw data as possible should be pulled from external files, not hard-coded
- Code should be well-documented and streamlined into an API that can be used by other programs
- Depth, not breadth; focus on slowly building in-depth features, not rapidly building simplistic features
- Start foundational; development should focus on building engaging worlds before populating them with people or history
With this, I started working on the new tool. I built the underlying map grid, then a basic continent generator, then logic for breaking continents into regions, then the linguistic module for naming continents, then the biomes module for giving terrain to the land. I built a flexible engine for shaping boundaries to make the shapes of things as unpredictable and interesting as possible.
Slow and Steady
Unlike my development of Histories and Heroes, which was a feverish burst of programming over just a few months, this has been a project that I’ve been slowly working on-and-off for over a year. Part of the slow pace has been the lack of novelty making ongoing motivation difficult (building something the first time is more fun than building it the second time); part of it has been intentional, to avoid burnout; and part of it has been that I just haven’t had the time or inclination to spend hours of my free time programming.
Regardless, I’m starting to get excited about how it’s shaping up. Though it’s missing tons of content from Histories and Heroes, everything so far has been deliberately designed and looks very promising.
Late last year, I finally came up with a name for the new project that I liked: LoreGen. I like that it’s short and catchy and brandable, but fairly communicative about the goal of generating a full “lore” for universe: a world and the things that populate that world.
I don’t yet have a version of LoreGen to share, but I’m getting close. I expect by the end of next month, I’ll be able to post the first version of LoreGen, along with an interface that uses it. It’s been a long and educational road to get to where I am, and I’m sure the journey will continue to have starts and stops and sharp turns, but I’m looking forward to not only expanding the LoreGen API, but using it as a tool in developing other games.
The next post is the first in a series going over the basic components of LoreGen’s world generation engine.
Looking good! I’m looking forward to how it turns out.