Cargo Features

[dependencies]
monolithium = { version = "1.2.0", default-features = false, features = ["grad-lookup", "fast-area", "most-octaves", "skip-rejection", "skip-table", "only-hill", "filter-fracts", "depth-fracts", "scaled-deviation", "candidates", "fast"] }

----------------------------------------------------------------------------

default = fast-area, grad-lookup

These default features are set whenever monolithium is added without default-features = false somewhere in the dependency tree.

grad-lookup default

Accurate optimizations

Use a lookup table for utils::grad()

fast-area default

------------------------------------
Lossy optimizations

Step by 4 blocks when calculating areas, as each noise coordinate is the world position divided by 4. This causes a small error in area calculation due to interpolation, but the average of over/under-shoots gives at most 1% error

most-octaves fast?

Ignores the last few octaves in noises, as they contribute very little. Causes minor errors in the hill noise, as values for monoliths are relatively tight

skip-rejection fast?

Assumes JavaRNG::next_i32_bound() never rejects values, skipping three math operations check per call (low error for perlin values) • Monte Carlo says 0.03474% error rates for minecraft values

skip-table fast?

Use a Skip Table for fast LCG stepping, same loss as skip-rejection

only-hill candidates?

Behavioral changes

About 40% of all blocks have valid |depth| > 8000 for monoliths, which makes the hill noise almost always (~85% Monte Carlo) an accurate source of truth for such. This change removes the 'depth' calculations, only yielding seed candidates (all results are "mostly wrong" with ~34% greater areas).

A second pass searching the largest monoliths for the best candidates inbounds is highly recommended with the 'find --step 512 --seed <seed>'. Many records were found this way in the middle ages of monolith hunting, as the hill noise repeats every 524288 blocks giving multiple chances of lucky depth values.

filter-fracts candidates?

Filter out seeds in which the fractional part of perlin noises offsets aren't close to a half in the 'search' command (see graphs in world.rs). Such seeds generally generates larger monoliths overall. By default, only the hill noise coefficients are checked, you can enable 'depth-fracts' to include depth.

Reason being the lattices of perlin noises are zero-valued, with the highest values often found at halfway points between grid coordinates.

Such cutoffs can be tweaked with the QUALITY=x compile time variable.

depth-fracts

With the 'filter-fracts' feature, include the depth noise deviations.

scaled-deviation candidates?

Scale seed probing deviations with their octave.

candidates = filter-fracts, only-hill, scaled-deviation

------------------------------------
Groups

fast = most-octaves, skip-rejection, skip-table

Features from optional dependencies

----------------------------------------------------------------------------