WOaH - WispOS at Home (Modular Wisp System)
Posted: Sat Sep 30, 2023 6:09 pm
This hex is designed to provide you the benefits of several permanent wisps while only taking up one wisp's execution and upkeep cost. It can cast just about anything a normal wisp can, though it's no good for keeping data between iterations without using external storage, and you need to be considerate of meta-eval usage.
To give it modules, place focal ports around it (you can also use item frames by just swapping out the embedded iota, but focal ports are less fragile and look nicer IMO) and insert foci containing a list formatted as [[patterns], num]. The number is how many ticks the wisp will wait between execution of that focus. It does not use the Delay Wisp pattern, so no need to worry about interfering with other executions with it.
You can have a module designate something to be executed after every other module executes by sticking a pattern list in the ravenmind.
You should always make sure to test your modules before giving them to the main wisp, because as with normal wisps, any mishap will kill it, likely wasting significant accumulated media.
The code for the main wisp:
A simple slipway eater module so that the wisp can actually stay around indefinitely(optimal delay for this is around 295 ticks, and it will produce a little over two dust per second):
A life support module that will apply ten seconds of regen 6 to you whenever it detects your health dropping below 21 (designed with Botania's Ring of Odin in mind, you can just change the numerical reflection 21 to something else if you like):
To give it modules, place focal ports around it (you can also use item frames by just swapping out the embedded iota, but focal ports are less fragile and look nicer IMO) and insert foci containing a list formatted as [[patterns], num]. The number is how many ticks the wisp will wait between execution of that focus. It does not use the Delay Wisp pattern, so no need to worry about interfering with other executions with it.
You can have a module designate something to be executed after every other module executes by sticking a pattern list in the ravenmind.
You should always make sure to test your modules before giving them to the main wisp, because as with normal wisps, any mishap will kill it, likely wasting significant accumulated media.
The code for the main wisp:
Code: Select all
//wisp hex
{
Flock's Reflection
Flock's Gambit
Bookkeeper's Gambit: v
Vacant Reflection
Huginn's Gambit
//fetch list of focal ports
{
<Focal Port entitytype>
}
Flock's Disintegration
Identity Reflection
Compass' Purification
Numerical Reflection: 2 //you may want to use a large number here if you anticipate using many modules
Zone Exaltation: Type
//thoth list
{
//check if focal port contains a readable item - assume all foci in ports are properly formatted ([[patterns], num])
Gemini Decomposition
Auditor's Purification
{
//to be extracted
Bookkeeper's Gambit: -
//add wisp reference to stack underneath pattern list
Identity Reflection
Jester's Gambit
//check if the hex may be executed this tick
Chronicler's Purification
Flock's Disintegration
Timekeeper's Reflection
Jester's Gambit
Modulus Distillation
Numerical Reflection: 0
Equality Distillation
{
Hermes' Gambit
Bookkeeper's Gambit: -
}
Flock's Disintegration
Augur's Exaltation
Hermes' Gambit
}
Speaker's Decomposition
Augur's Exaltation
Hermes' Gambit
Flock's Reflection
Flock's Gambit
Bookkeeper's Gambit: v
}
Jester's Gambit
Thoth's Gambit
Bookkeeper's Gambit: v
//execute anything the modules said to execute last
Muninn's Reflection
Hermes' Gambit
}
Mind's Reflection
Compass' Purification II
Floor Purification
Numerical Reflection: 0.5
Additive Distillation
Vector Reflection -Y
Additive Distillation
Numerical Reflection: 100
Summon Cyclic Wisp
Code: Select all
#define Repeat N (SOUTH_WEST ewdqdweadaddadda) = Any, Num > [Many]
{
<Wandering Wisp entitytype>
}
Flock's Disintegration
Jester's Gambit
Compass' Purification
Numerical Reflection: 3
Zone Exaltation: Type
Gemini Decomposition
Abacus Purification
//list to unroll
{
Speaker's Decomposition
Consume Wisp
}
Jester's Gambit
Gemini Decomposition
Numerical Reflection: 0
Maximus Distillation
{
Bookkeeper's Gambit: v
//you *should* be able to use any loop unrolling macro here, as long as it does [patterns], num -> [patterns num times over], and ideally leaves the ravenmind in the same state it was before
Repeat N
Hermes' Gambit
}
Speaker's Decomposition
Augur's Exaltation
Hermes' Gambit
Code: Select all
Mind's Reflection
Nurse's Purification
Numerical Reflection: 21
Minimus Distillation
{
Bookkeeper's Gambit: -
Mind's Reflection
Numerical Reflection: 10
Numerical Reflection: 0
White Sun's Zenith
Mind's Reflection
Numerical Reflection: 1
Numerical Reflection: 20
Division Distillation
Numerical Reflection: 6
White Sun's Zenith
}
Speaker's Decomposition
Augur's Exaltation
Hermes' Gambit