Skip to content
Greenmote
reference

greenmote.toml

Where Greenmote keeps its settings, every key under [convert] and [unclip] with its default, and how the command line overrides each one.

greenmote.toml holds the settings convert and unclip use on every run, and what the GUI’s Settings tab edits. The command line overrides it for one run and never writes to it.

Where it is#

Next to your user openmw.cfg: the folder of the last openmw.cfg in the chain OpenMW reads, such as ~/.config/openmw/greenmote.toml on Linux. --config PATH uses another file:

greenmote --config ~/grass/strict.toml unclip --plugin Rem_AI.esp

--config, like --openmw-cfg, goes before the subcommand.

The first convert that is not a dry run creates the file with every default written out, and so does opening the GUI. Unclip reads it but never creates it; without it, unclip uses the defaults.

A file that is not valid TOML stops the command line with the parser’s error. The GUI offers to move it aside, as greenmote.toml.bak (or .bak.1, .bak.2 when that exists), and write a fresh one.

The file as generated#

[convert]
grass_ids = [
    "grass",
    "kelp",
    "lilypad",
    "fern",
    "thirrlily",
    "spartium",
    "in_cave_plant",
    "reedgroup",
    "t_mw_floratv_treezifa",
    "t_mw_florash_bush",
    "t_mw_floraow_varga",
    "t_cyr_floragc_shrub",
    "t_cyr_floragc_bush_02",
    "t_glb_flora_cattails",
    "t_cyr_florastr_shrub",
    "flora_bm_shrub",
]
exclude = [
    "refernce",
    "infernace",
    "planter",
    "_furn_",
    "_skelp",
    "t_glb_var_skeleton",
    "cliffgrass",
    "terr",
    "grassplane",
    "flora_s_m_10_grass",
    "cave_mud_rocks_fern",
    "ab_in_cavemold",
    "rp_mh_rock",
    "ex_cave_grass00",
    "secret_fern",
    "flora_grass_entrance",
    "^ash_flora_bc_fern_[0-9]+s$",
]
ignored_plugins = []
debug = false
auto_enable = false

[unclip]
actions = [
    "terrain-z",
    "water-delete",
    "road-delete",
    "static-delete",
    "static-move",
    "orient",
]
float_tolerance = 1.0
max_sink = 24.0
max_sink_fraction = 0.75
sink = 4.0
relocation_step = 32.0
relocation_steps = 8
orientation_epsilon = 1.0
max_tilt = 45.0
include_grass_ids = []
exclude_grass_ids = []
include_occluder_ids = []
exclude_occluder_ids = [
    "flora_(tree|ashtree|treestump|treedead|root)_.*",
    "flora_(ash_)?log_.*",
    "flora_bm_(treebranch|treestump|snowbranch|snowstump|(snow_)?log)_.*",
    "flora_bc_(tree|knee|log)_.*",
    "ex_t_(bigroot|root).*",
    "t_.*flora.*(tree|branch|root|stump|log|palm).*",
    "t_cyr_flora(gc|str)_bush_.*",
]
road_texture_paths = [
    ".*(road|mainroad|dirtroad|gravelroad|beatenpath).*",
    ".*(cobble|cobblestone).*",
    ".*(street|whiteroad).*",
    ".*t_.*_terrroad.*",
    ".*t_imp_highway_txroad.*",
    ".*t_hr_.*road.*",
    ".*t_ham_.*road.*",
    ".*tx_sky.*road.*",
    ".*tr_alm_street.*",
    ".*nec_whiteroad.*",
]

Every key is optional. A list that is left out means the built-in list; an empty list, [], means no patterns at all. Patterns are regular expressions in Rust’s syntax, always case-insensitive. In TOML, a backslash in a double-quoted string is written \\.

[convert]#

KeyDefaultMeaning
grass_idsThe list aboveA static or activator whose ID matches any of these is grass. Matches anywhere in the ID
excludeThe list aboveAn ID that matches any of these is not, whatever grass_ids says. Matches anywhere in the ID
ignored_plugins[]Content files whose file name matches any of these are not read. Matches anywhere in the name
debugfalsePrint the plan to standard error during a real run
auto_enablefalseAdd the output to openmw.cfg. See enabling the output

Unknown keys under [convert], and keys outside both tables, are ignored without a word. The output folder is not a setting: it is data-local, or --output for one run.

Command lineAgainst the file
--ignore REGEX[,REGEX...]Added to ignored_plugins for this run
--debug, --auto-enableTurn the setting on for this run. They cannot turn it off
--output DIRReplaces the output folder for this run
--dry-run, --validate-configFor this run only; never saved

[unclip]#

KeyDefaultMeaning
pluginnoneThe plugin to check when --plugin is not given
actionsall sixWhich of terrain-z, water-delete, road-delete, static-delete, static-move and orient to plan. write_actions is read as the same key
float_tolerance1.0Units the mesh base may float above the terrain
max_sink24.0Units the mesh base may be buried
max_sink_fraction0.75The same, as a fraction of the mesh’s height, 0 to 1. The larger limit applies
sink4.0Units below the surface a fixed mesh base is placed. At most max_sink
orientation_epsilon1.0Degrees a tilt may differ from the slope’s before it is changed
max_tilt45.0Steepest ground, in degrees, grass is tilted to. Above 0, at most 90
relocation_step32.0Units between the rings static-move searches. Above 0
relocation_steps8How many rings it searches, 1 to 256
include_grass_ids[]Only references whose ID matches one of these are checked. Empty means all
exclude_grass_ids[]References whose ID matches one of these are not checked. Beats an inclusion
include_occluder_ids[]Only statics whose ID matches one of these block grass. Empty means all
exclude_occluder_idsTree-like statics, aboveStatics whose ID matches one of these never block grass
road_texture_pathsRoad textures, aboveTerrain texture paths road-delete deletes on

The ID and texture patterns under [unclip] must match the whole ID or path, unlike the patterns under [convert]: flora_grass_.* matches flora_grass_01, grass alone does not. Texture paths are the LTEX file name in lowercase with forward slashes, such as tx_ai_dirtroad_01.tga.

Every number must be finite and not negative. A value out of range, or a pattern that is not a valid regular expression, stops the run and names the key. Unknown keys under [unclip], such as settings from older versions, are reported and ignored:

warning: ignoring unknown [unclip] keys in /home/you/.config/openmw/greenmote.toml: dry_run, origin_epsilon

The GUI drops them the next time it saves.

Command lineAgainst the file
--plugin, and each numberReplace the setting for this run
--actionsReplaces actions for this run
--include-grass-id, --exclude-grass-id, --include-occluder-idReplace that list for this run. Repeat the option for several
--exclude-occluder-id, --road-texture-pathAdded to that list for this run
--no-default-occluder-excludes, --no-default-road-texturesStart that list empty for this run, without the file’s patterns or the built-in ones; the options above still add to it
--write, --output-plugin, --verbose, --structuredFor this run only; there is no setting for them