|
|
Line 1: |
Line 1: |
| Hi, I'm TOGoS! I'm mostly trying to open up the terrain generation so that it can be hacked on (by staff or modders) without having to embed oneself in the C++ guts of factorio for several weeks. | | Hi, I'm TOGoS! I'm mostly trying to open up the terrain generation so that it can be hacked on (by staff or modders) without having to embed oneself in the C++ guts of factorio for several weeks. |
|
| |
| = Types/NoiseExpression =
| |
|
| |
| == Basics ==
| |
|
| |
| A fragment of a functional program used to generate coherent noise, probably for purposes related to terrain generation.
| |
|
| |
| == Mandatory properties ==
| |
|
| |
| === type ===
| |
|
| |
| '''Type''': [[Types/string]]
| |
|
| |
| Name of the type of this expression.
| |
| Which other properties apply depend on the expression type.
| |
|
| |
| == Expression types ==
| |
|
| |
| === variable ===
| |
|
| |
| Reference to a pre-defined variable, constant, or a named noise expression.
| |
|
| |
| Predefined variables include "x", "y", and "distance".
| |
|
| |
| Properties:
| |
|
| |
| * '''variable_name''': a [[Types/string]]
| |
|
| |
| === function-application ===
| |
|
| |
| Apply a function to a list or associative array of arguments.
| |
| Some functions expect arguments to be named and some expect them not to be.
| |
|
| |
| Function calls are their own class of expression
| |
| (as opposed to every function just being its own expression type)
| |
| because function calls all have similar properties --
| |
| arguments are themselves expressions,
| |
| a call to any pure function (i.e. most functions other than <code>random()</code>)
| |
| is [https://en.wikipedia.org/wiki/Referential_transparency referentially transparent]
| |
| and can be constant-folded if all of its arguments are constant, etc.
| |
|
| |
| Properties:
| |
|
| |
| * '''function_name''' (a string; see functions, below)
| |
| * '''arguments''' (a list or associative array of argument expressions)
| |
|
| |
| === literal-number ===
| |
|
| |
| Evaluates to the same number every time, given by the '''literal_value''' property.
| |
|
| |
| === literal-string ===
| |
|
| |
| Evaluates to the same stringevery time, given by the '''literal_value''' property.
| |
|
| |
| Since the noise generation runtime has no notion of strings or use for them,
| |
| this is useful only in constant contexts.
| |
|
| |
| === literal-object ===
| |
|
| |
| Evaluates to the same object every time, given by the '''literal_value''' property.
| |
|
| |
| e.g.
| |
|
| |
| <pre>
| |
| {
| |
| type = "literal-object",
| |
| literal_value = {
| |
| name = "Bob Hope",
| |
| birth_date = {
| |
| year = 1903,
| |
| month = 5,
| |
| day_of_month = 29
| |
| }
| |
| }
| |
| }
| |
| </pre>
| |
|
| |
| Since the noise generation runtime has no notion of objects or use for them,
| |
| this is useful only in constant contexts, such as the '''points''' argument
| |
| of the '''distance-from-nearest-point''' function.
| |
|
| |
| == Functions ==
| |
|
| |
| === add ===
| |
|
| |
| '''Arguments (positional)''': term, other term
| |
|
| |
| Takes 2 positional arguments and adds them.
| |
|
| |
| === subtract ===
| |
|
| |
| '''Arguments (positional)''': minuend, subtrahend
| |
|
| |
| Takes 2 positional arguments and subtracts the second from the first.
| |
|
| |
| === multiply ===
| |
|
| |
| '''Arguments (positional)''': factor, other factor
| |
|
| |
| Takes 2 positional arguments and multiplies them.
| |
|
| |
| === divide ===
| |
|
| |
| '''Arguments (positional)''': dividend, divisor
| |
|
| |
| Takes 2 positional arguments and divides the first by the second.
| |
|
| |
| === exponentiate ===
| |
|
| |
| '''Arguments (positional)''': base, exponent
| |
|
| |
| Takes 2 positional arguments, and raises the first to the second power.
| |
|
| |
| === absolute-value ===
| |
|
| |
| '''Arguments (positional)''': value to be absoluted
| |
|
| |
| Takes a single positional argument and returns its absolute value. i.e. If the argument is negative, it is inverted.
| |
|
| |
| === clamp ===
| |
|
| |
| '''Arguments (positional)''': value to be clamped, lower limit, upper limit
| |
|
| |
| First argument is clamped between the second and third. The second is treated as a lower limit and the third the upper limit.
| |
|
| |
| === ridge ===
| |
|
| |
| '''Arguments (positional)''': value to be ridged, lower limit, upper limit
| |
|
| |
| Similar to clamp but the input value is folded back across the upper and lower limits
| |
| until it lies between them.
| |
|
| |
| === factorio-basis-noise ===
| |
| === factorio-multioctave-noise ===
| |
Hi, I'm TOGoS! I'm mostly trying to open up the terrain generation so that it can be hacked on (by staff or modders) without having to embed oneself in the C++ guts of factorio for several weeks.