I posted these spells in their own thread last year, but that thread is now totally buried. Given how useful they are as macros, I thought I'd repost them here. Credit for Locator's Scalpel goes to [object Object], not myself, though I changed the macro pattern to a new one that better fits the theme of the other two.
Robo's Scalpel list, num, list → list
Works just like Surgeon's Exaltation, but replaces the given index in the first list with the flattened content of the second list. Mainly intended for modifying spells, but you can probably find some other interesting uses. Patterns
#define Robo's Scalpel (EAST wwded) = list, num, list -> list
{
Rotation Gambit II
Dioscuri Gambit
Numerical Reflection: 1
Additive Distillation
Prospector's Gambit
Abacus Purification
Selection Exaltation
Rotation Gambit II
Numerical Reflection: 0
Jester's Gambit
Selection Exaltation
Rotation Gambit II
Combination Distillation
Combination Distillation
}
Advanced Scalpel list, num, num, list → list
A more powerful version of the above spell. Replaces all the items in the first list between the two provided indices (lower bound inclusive, upper bound exclusive) with the flattened content of the second list. Patterns
Locator's Scalpel list, pattern, list → list
Modified version of Robo's Scalpel that takes a pattern instead of an index, and replaces the first index of that pattern in the first list with the contents of the second list. (As with the original, does not fail gracefully.) Patterns
Steve's Prism Counter integer, vector → vector
Quite an old spell of mine, finally got around to writing it up in the modern style.
Takes an index and a vector describing a rectangular prism, and returns a vector inside the prism. Incrementing the index by one always returns a point adjacent to the previous, making the spell ideal for walking a sentinel over a volume.
For an example of the spell, with the input vector (2,2,2), see: https://imgur.com/a/3ES0Fov
The typical use case is to take the macro's output, multiply it by some scaling factor, and add to a root position, to return a coordinate in the world. I use this for all my quarries and similar.
The math driving it may be found here: https://www.desmos.com/calculator/etyirquwga
NB the macro clobbers the ravenmind, so save it to the stack before using if required Patterns
#define Theta Distillation (NORTH_WEST awddeeeeeqa) = vec, vec -> num
// u, v -> angle
// Returns the unsigned angle (in radians) between two vectors.
{
// u * v
Dioscuri Gambit
Multiplicative Distillation
// |u| * |v|
Rotation Gambit II
Length Purification
Jester's Gambit
Length Purification
Multiplicative Distillation
// arccos((u * v) / (|u| * |v|))
Division Distillation
Inverse Cosine Purification
}
Theta Exaltation vec1, vec2, normal → angle
Returns the signed angle (in radians) between two vectors, given the plane normal as a unit vector.
Required macros: Inverse Tangent Distillation Patterns
#define Theta Exaltation (NORTH_EAST dwaaqqqqqed) = vec, vec, vec -> num
// u, v, n -> angle
// Returns the signed angle (in radians) between two vectors, given the plane normal as a unit vector.
{
// u x v
Rotation Gambit II
Dioscuri Gambit
Division Distillation
// u * v
Rotation Gambit II
Multiplicative Distillation
// (u x v) * n
Rotation Gambit II
Multiplicative Distillation
// atan2((u x v) * n, u * v)
Jester's Gambit
Inverse Tangent Distillation
}
I have come to notice just how useful Robo's Hex surgical tools are so I decided to take one of his scalpels to make a special variant of it
Shiv's Bonesaw Num (index with a list), Num, Num, List → List
Functions identically to how Advanced Scalpel works but is altered to take an index of a stack instead to allow for a list deep in a stack to be edited.
The index parameter uses a +5 internal offset to allow for it to function as if it were Fisherman's Distillation (putting 0 in the parameter gets the element right below it at that position in a stack with all parameters in place).
Because of how it's structured it can be altered to have it edit a list nested inside of a list but only to a list inside of a list.
Patterns
Note: Some of the patterns are intentionally drawn at a different angle for the sake of being able to easily spot a difference between patterns with similar shapes