Terra Project and Reed Update
Terra is a new project I have been working on for the past few days. It forms the core basis of a nation simulation game idea I have in my head. Nations need land to claim, and land is found on a planet. In order to facilitate all things geographical in this simulation, the Terra library for NodeJS was born.
Terra generates simple planetary terrain with a single method call. It takes a bunch of different configuration options to control the generation of the terrain. Everything from islands to a supercontinent is possible. I started researching terrain generation and stumbled upon Perlin noise first. While a useful technique, I didn't have enough time to wrap my head around using Perlin noise to generate natural-looking terrain.
Eventually, I stumbled on a blog post that detailed the journey of the creation of the world generation algorithm for the 1990s Mac game Strategic Conquest. Terra uses a modified version of the three phase algorithm presented on that site. The modification to the algorithm allows Terra to:
- Add islands alongside larger continents.
- Extra mountain ranges that spread out from the middle of landmasses.
- Variable ice caps at the north and south edges of the map.
- Edge "masking" (until I can implement connecting the edges for real).
Terra is under development at the moment, though it is available in a semi- stable state on GitHub. There is no documentation yet, but that will be rectified in a day or two. Once I have cleaned up the code some more, I will release it.
Reed is undergoing a rewrite for the 1.0 release. Right now it is in testing. It more or less works, but some of the unit tests are failing and I need to fix those before pushing the update to NPM. You can download the latest unstable version at the GitHub repo if you want to test it.
The 1.0.0 changelog for reed is as follows (currently):
- Ground up rewrite for node 0.8. Code is now much more maintainable, readable, and organized.
- New architecture: reed -> APIs -> redis connector/filesystem helper/file processor.
- No more blocking code in the library (not necessarily dependencies).
- Articles no longer need to have dashes in the filename.
- Reed will now watch files that end in ".markdown" as well as ".md".
- Reed now properly detects file additions, updates, and removals that happened while it was not running.
- reed.index and reed.refresh methods deprecated. They can still be called but will only emit a warning. They will be removed in the next version.
- reed.removeAll method is now atomic (Redis MULTI).
- Method blocking is now much more efficient by using a queue instead of what amounted to fancy spinlock.
- add, update, and remove events for reed pages.