Axolemma
A tool for procedurally generating Ranvier areas.
--
How to Install
npm install --save axolemma
How to Use
Axolemma is usable as a CLI tool and can also be used as a library.
To use it as a CLI tool, navigate to the working directory where you would like Axolemma to generate the map files, and type axolemma
.
Axolemma will ask a series of questions and, as a result, generate an area for you.
Here is a recipe for using Axolemma programmatically:
const Axolemma = require('axolemma')
const {manifest, graphic, rooms, yaml} = Axolemma.generate({
type: 'Digger'
writeToFile: true
})
console.log(graphic)
console.log(yaml)
console.log(manifest)
const newRooms = rooms.map(
roomDef => new Room(roomDef)
);
Configuration
When using Axolemma programmatically, you can customize the default options using either a .axolemmaconfig
file or by adding an "axolemma" field in your package.json.
Your .axolemmaconfig
can be either a JavaScript module or a JSON file. Axolemma will crawl up the directory tree to find the file so it can be in the root directory of your Ranvier bundle, the root of your fork of Ranvier, or even in your user home directory. It will use the 'nearest' config it finds, so you can have multiple configurations at different nesting levels.
Configuration precedence goes as follows:
- Options passed in programmatically
.axolemmaconfig
options- Options from
"axolemma"
field in package.json - Axolemma's built-in defaults.
Axolemma accepts the following options:
Also, check out the ROT-js documentation for the mapper 'type' that you are using, for additional options.
Room Templates & Weighted Tables
As of version 0.5.0, it is possible to use Axolemma to procedurally generate an area with multiple kinds of rooms. See examples/template-areas/json
for the full example, but it works like this:
module.exports = {
type: 'Digger',
areaTitle: 'Abandoned Mines',
weightedRoomsTable: require('./rooms-table')
}
const COMMON = 5
const UNCOMMON = 3
const RARE = 1
module.exports = {
mineshaft: {
weight: UNCOMMON,
title: 'Abandoned Mineshaft',
description: 'A dark pit looms below you, boarded over by loose planks. The walls around you bear the marks of generations worth of pickaxes.'
},
minefloor: {
weight: COMMON,
},
oredeposit: {
weight: RARE,
}
};
Based on this example, Axolemma will output an area with rooms featuring the properties specified in room-table.js. While it is pseudo-random, approximately 1 out of every 9 rooms will be an ore deposit, 3 out of 9 will be mineshafts, and 5 out of 9 will be a boring floor with rocks on it.
Future goals for this include adding arbitrary properties to the room templates, so that one could specify which NPCs are in a room, which scripts, and more.
Misc.
Axolemma is currently in an early alpha stage. Use at your own risk.
The areas it generates are fairly generic in this iteration so much hand-editing is still required.
If you're using this in your Ranvier server to dynamically generate large amounts content on the fly, consider using a Cluster or similar to avoid blocking the main process with Axolemma.
In testing on a machine with 8GB RAM, Axolemma can generate a 20x20 area in a matter of milliseconds.
See the examples
directory for code snippets that can be used to make Axolemma play nice with Ranvier, and additional how-tos.