HexCasting/doc/test/__snapshots__/test_snapshots.ambr

12204 lines
1.2 MiB
Text
Raw Normal View History

2023-06-06 15:24:18 +02:00
# serializer version: 1
# name: test_cmd
'''
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="The Hex Book, all in one place.">
<meta name="author" content="petrak@, Alwinfy">
<link rel="icon" href="icon.png">
<title>Hex Book</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.3.0/font/bootstrap-icons.css">
<style>
summary { display: list-item; }
details.spell-collapsible {
display: inline-block;
border: 1px solid #aaa;
border-radius: 4px;
padding: .5em .5em 0;
margin-bottom: .5em;
}
summary.collapse-spell {
font-weight: bold;
margin: -.5em -.5em 0;
padding: .5em;
}
details.spell-collapsible[open] {
padding: .5em;
}
details[open] summary.collapse-spell {
border-bottom: 1px solid #aaa;
margin-bottom: .5em;
}
details .collapse-spell::before {
content: "Click to show spell";
}
details[open] .collapse-spell::before {
content: "Click to hide spell";
}
blockquote.crafting-info {
font-size: inherit;
}
a.permalink {
margin-left: 0.5em;
}
a.permalink:hover {
color: lightgray;
}
p {
margin: 0.5ex 0;
}
p.fake-li {
margin: 0;
}
p.fake-li::before {
content: "\2022";
margin: 1ex;
}
.linkout::before {
content: "Link: ";
}
p.todo-note {
font-style: italic;
color: lightgray;
}
.obfuscated {
filter: blur(1em);
}
.spoilered {
filter: blur(1ex);
-moz-transition: filter 0.04s linear;
}
.spoilered:hover {
filter: blur(0.5ex);
}
.spoilered.unspoilered {
filter: blur(0);
}
canvas.spell-viz {
--dot-color: #777f;
--dot-color: #777f;
--start-dot-color: #f009;
--moving-dot-color: #0fa9;
--path-color: darkgray;
--visited-path-color: #0c8;
--dot-scale: 0.0625;
--moving-dot-scale: 0.125;
--line-scale: 0.08333;
--pausetext-scale: 0.5;
--dark-mode: 0;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #201a20;
color: #ddd;
}
.jumbotron {
background-color: #323;
}
canvas.spell-viz {
/* hack */
--dark-mode: 1;
}
}
</style>
<noscript>
<style>
/* for accessibility */
.spoilered {
filter: none !important;
}
</style>
</noscript>
<script>
"use strict";
const speeds = [0, 0.25, 0.5, 1, 2, 4];
const scrollThreshold = 100;
const rfaQueue = [];
const colorCache = new Map();
function getColorRGB(ctx, str) {
if (!colorCache.has(str)) {
ctx.fillStyle = str;
ctx.clearRect(0, 0, 1, 1);
ctx.fillRect(0, 0, 1, 1);
const imgData = ctx.getImageData(0, 0, 1, 1);
colorCache.set(str, imgData.data);
}
return colorCache.get(str);
}
function startAngle(str) {
switch (str) {
case "east": return 0;
case "north_east": return 1;
case "north_west": return 2;
case "west": return 3;
case "south_west": return 4;
case "south_east": return 5;
default: return 0;
}
}
function offsetAngle(str) {
switch (str) {
case "w": return 0;
case "q": return 1;
case "a": return 2;
case "s": return 3;
case "d": return 4;
case "e": return 5;
default: return -1;
}
}
function initializeElem(canvas) {
const str = canvas.dataset.string;
let angle = startAngle(canvas.dataset.start);
const perWorld = canvas.dataset.perWorld === "True";
// build geometry
const points = [[0, 0]];
let lastPoint = points[0];
let minPoint = lastPoint, maxPoint = lastPoint;
for (const ch of "w" + str) {
const addAngle = offsetAngle(ch);
if (addAngle < 0) continue;
angle = (angle + addAngle) % 6;
const trueAngle = Math.PI / 3 * angle;
const [lx, ly] = lastPoint;
const newPoint = [lx + Math.cos(trueAngle), ly - Math.sin(trueAngle)];
points.push(newPoint);
lastPoint = newPoint;
const [mix, miy] = minPoint;
minPoint = [Math.min(mix, newPoint[0]), Math.min(miy, newPoint[1])];
const [max, may] = maxPoint;
maxPoint = [Math.max(max, newPoint[0]), Math.max(may, newPoint[1])];
}
const size = Math.min(canvas.width, canvas.height) * 0.8;
const scale = size / Math.max(3, Math.max(maxPoint[1] - minPoint[1], maxPoint[0] - minPoint[0]));
const center = [(minPoint[0] + maxPoint[0]) * 0.5, (minPoint[1] + maxPoint[1]) * 0.5];
const truePoints = points.map(p => [canvas.width * 0.5 + scale * (p[0] - center[0]), canvas.height * 0.5 + scale * (p[1] - center[1])]);
let uniqPoints = [];
l1: for (const point of truePoints) {
for (const pt of uniqPoints) {
if (Math.abs(point[0] - pt[0]) < 0.00001 && Math.abs(point[1] - pt[1]) < 0.00001) {
continue l1;
}
}
uniqPoints.push(point);
}
// rendering code
const speed = 0.0025;
const context = canvas.getContext("2d");
const negaProgress = -3;
let progress = 0;
let scrollTimeout = 1e309;
let speedLevel = 3;
let speedIncrement = 0;
function speedScale() {
return speeds[speedLevel];
}
const style = getComputedStyle(canvas);
const getProp = n => style.getPropertyValue(n);
const tick = dt => {
scrollTimeout += dt;
if (canvas.offsetParent === null) return;
const strokeStyle = getProp("--path-color");
const strokeVisitedStyle = getProp("--visited-path-color");
const startDotStyle = getProp("--start-dot-color");
const dotStyle = getProp("--dot-color");
const movDotStyle = getProp("--moving-dot-color");
const strokeWidth = scale * +getProp("--line-scale");
const dotRadius = scale * +getProp("--dot-scale");
const movDotRadius = scale * +getProp("--moving-dot-scale");
const pauseScale = scale * +getProp("--pausetext-scale");
const bodyBg = scale * +getProp("--pausetext-scale");
const darkMode = +getProp("--dark-mode");
const bgColors = getColorRGB(context, getComputedStyle(document.body).backgroundColor);
if (!perWorld) {
progress += speed * dt * (progress > 0 ? speedScale() : Math.sqrt(speedScale()));
}
if (progress >= truePoints.length - 1) {
progress = negaProgress;
}
let ix = Math.floor(progress), frac = progress - ix, core = null, fadeColor = 0;
if (ix < 0) {
const rawFade = 2 * progress / negaProgress - 1;
fadeColor = 1 - Math.abs(rawFade);
context.strokeStyle = rawFade > 0 ? strokeVisitedStyle : strokeStyle;
ix = rawFade > 0 ? truePoints.length - 2 : 0;
frac = +(rawFade > 0);
} else {
context.strokeStyle = strokeVisitedStyle;
}
const [lx, ly] = truePoints[ix];
const [rx, ry] = truePoints[ix + 1];
core = [lx + (rx - lx) * frac, ly + (ry - ly) * frac];
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.lineWidth = strokeWidth;
context.moveTo(truePoints[0][0], truePoints[0][1]);
for (let i = 1; i < ix + 1; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.lineTo(core[0], core[1]);
context.stroke();
context.beginPath();
context.strokeStyle = strokeStyle;
context.moveTo(core[0], core[1]);
for (let i = ix + 1; i < truePoints.length; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.stroke();
for (let i = 0; i < uniqPoints.length; i++) {
context.beginPath();
context.fillStyle = (i == 0 && !perWorld) ? startDotStyle : dotStyle;
const radius = (i == 0 && !perWorld) ? movDotRadius : dotRadius;
context.arc(uniqPoints[i][0], uniqPoints[i][1], radius, 0, 2 * Math.PI);
context.fill();
}
if (!perWorld) {
context.beginPath();
context.fillStyle = movDotStyle;
context.arc(core[0], core[1], movDotRadius, 0, 2 * Math.PI);
context.fill();
}
if (fadeColor) {
context.fillStyle = `rgba(${bgColors[0]}, ${bgColors[1]}, ${bgColors[2]}, ${fadeColor})`;
context.fillRect(0, 0, canvas.width, canvas.height);
}
if (scrollTimeout <= 2000) {
context.fillStyle = `rgba(200, 200, 200, ${(2000 - scrollTimeout) / 1000})`;
context.font = `${pauseScale}px sans-serif`;
context.fillText(speedScale() ? speedScale() + "x" : "Paused", 0.2 * scale, canvas.height - 0.2 * scale);
}
};
rfaQueue.push(tick);
// scrolling input
if (!perWorld) {
canvas.addEventListener("wheel", ev => {
speedIncrement += ev.deltaY;
const oldSpeedLevel = speedLevel;
if (speedIncrement >= scrollThreshold) {
speedLevel--;
} else if (speedIncrement <= -scrollThreshold) {
speedLevel++;
}
if (oldSpeedLevel != speedLevel) {
speedIncrement = 0;
speedLevel = Math.max(0, Math.min(speeds.length - 1, speedLevel));
scrollTimeout = 0;
}
ev.preventDefault();
});
}
}
function hookLoad(elem) {
let init = false;
const canvases = elem.querySelectorAll("canvas");
elem.addEventListener("toggle", () => {
if (!init) {
canvases.forEach(initializeElem);
init = true;
}
});
}
function hookToggle(elem) {
const details = Array.from(document.querySelectorAll("details." + elem.dataset.target));
elem.addEventListener("click", () => {
if (details.some(x => x.open)) {
details.forEach(x => x.open = false);
} else {
details.forEach(x => x.open = true);
}
});
}
const params = new URLSearchParams(document.location.search);
function hookSpoiler(elem) {
if (params.get("nospoiler") !== null) {
elem.classList.add("unspoilered");
} else {
const thunk = ev => {
if (!elem.classList.contains("unspoilered")) {
ev.preventDefault();
ev.stopImmediatePropagation();
elem.classList.add("unspoilered");
}
elem.removeEventListener("click", thunk);
};
elem.addEventListener("click", thunk);
if (elem instanceof HTMLAnchorElement) {
const href = elem.getAttribute("href");
if (href.startsWith("#")) {
elem.addEventListener("click", () => document.getElementById(href.substring(1)).querySelector(".spoilered").classList.add("unspoilered"));
}
}
}
}
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('details.spell-collapsible').forEach(hookLoad);
document.querySelectorAll('a.toggle-link').forEach(hookToggle);
document.querySelectorAll('.spoilered').forEach(hookSpoiler);
function tick(prevTime, time) {
const dt = time - prevTime;
for (const q of rfaQueue) {
q(dt);
}
requestAnimationFrame(t => tick(time, t));
}
requestAnimationFrame(t => tick(t, t));
});
</script>
</head>
<body>
<div class="container" style="margin-top: 3em;">
<blockquote>
<h1>This is the online version of the Hexcasting documentation.</h1>
<p>Embedded images and patterns are included, but not crafting recipes or items. There's an in-game book for
those.</p>
<p>Additionally, this is built from the latest code on GitHub. It may describe <b>newer</b> features that you
may not necessarily have, even on the latest CurseForge version!</p>
<p><b>Entries which are blurred are spoilers</b>. Click to reveal them, but be aware that they may spoil endgame
progression. Alternatively, click <a href="?nospoiler">here</a> to get a version with all spoilers showing.
</p>
</blockquote>
</div>
2023-06-11 01:14:53 +02:00
<div class='container'><header class='jumbotron'><h1 class='book-title'>Hex Notebook</h1><p>I seem to have discovered a new method of magical arts, in which one draws patterns strange and wild onto a hexagonal grid. It fascinates me. I&#x27;ve decided to start a journal of my thoughts and findings.</p><p><a href='https://discord.gg/4xxHGYteWk'>Discord Server Link</a></p></header><nav><h2 id='table-of-contents' class='page-header'>Table of Contents<a href='javascript:void(0)' class='permalink toggle-link small' data-target='toc-category' title='Toggle all'><i class='bi bi-list-nested'></i></a><a href='#table-of-contents' class='permalink small' title='Permalink'><i class='bi bi-link-45deg'></i></a></h2><details class='toc-category'><summary><a href='#basics' class=''>Getting Started</a></summary><ul><li><a href='#basics/media' class=''>Media</a></li><li><a href='#basics/geodes' class=''>Geodes</a></li><li><a href='#basics/couldnt_cast' class='spoilered'>A Frustration</a></li><li><a href='#basics/start_to_see' class='spoilered'>WHAT DID I SEE</a></li></ul></details><details class='toc-category'><summary><a href='#casting' class=''>Hex Casting</a></summary><ul><li><a href='#casting/101' class=''>Hexing 101</a></li><li><a href='#casting/vectors' class=''>A Primer on Vectors</a></li><li><a href='#casting/mishaps' class=''>Mishaps</a></li><li><a href='#casting/stack' class=''>Stacks</a></li><li><a href='#casting/naming' class=''>Naming Actions</a></li><li><a href='#casting/influences' class=''>Influences</a></li><li><a href='#casting/mishaps2' class='spoilered'>Enlightened Mishaps</a></li></ul></details><details class='toc-category'><summary><a href='#items' class=''>Items</a></summary><ul><li><a href='#items/amethyst' class=''>Amethyst</a></li><li><a href='#items/staff' class=''>Staff</a></li><li><a href='#items/lens' class=''>Scrying Lens</a></li><li><a href='#items/focus' class=''>Focus</a></li><li><a href='#items/abacus' class=''>Abacus</a></li><li><a href='#items/spellbook' class=''>Spellbook</a></li><li><a href='#items/scroll' class=''>Scrolls</a></li><li><a href='#items/slate' class=''>Slates</a></li><li><a href='#items/hexcasting' class=''>Casting Items</a></li><li><a href='#items/phials' class=''>Phials of Media</a></li><li><a href='#items/pigments' class=''>Pigments</a></li><li><a href='#items/edified' class=''>Edified Trees</a></li><li><a href='#items/jeweler_hammer' class=''>Jeweler&#x27;s Hammer</a></li><li><a href='#items/decoration' class=''>Decorative Blocks</a></li></ul></details><details class='toc-category'><summary><a href='#greatwork' class='spoilered'>The Great Work</a></summary><ul><li><a href='#greatwork/the_work' class='spoilered'>The Work</a></li><li><a href='#greatwork/brainsweeping' class='spoilered'>On the Flaying of Minds</a></li><li><a href='#greatwork/spellcircles' class='spoilered'>Spell Circles</a></li><li><a href='#greatwork/impetus' class='spoilered'>Impetuses</a></li><li><a href='#greatwork/directrix' class='spoilered'>Directrices</a></li><li><a href='#greatwork/akashiclib' class='spoilered'>Akashic Libraries</a></li></ul></details><details class='toc-category'><summary><a href='#lore' class=''>Lore</a></summary><ul><li><a href='#lore/terabithia1' class=''>Cardamom Steles, #1</a></li><li><a href='#lore/terabithia2' class=''>Cardamom Steles, #2</a></li><li><a href='#lore/terabithia3' class=''>Cardamom Steles, #3, 1/2</a></li><li><a href='#lore/terabithia4' class=''>Cardamom Steles, #3, 2/2</a></li><li><a href='#lore/terabithia5' class=''>Cardamom Steles, #4</a></li><li><a href='#lore/experiment1' class=''>Wooleye Instance Notes</a></li><li><a href='#lore/experiment2' class=''>Wooleye Interview Logs</a></li><li><a href='#lore/inventory' class=''>Restoration Log #72</a></li></ul></details><details class='toc-category'><summary><a href='#interop' class=''>Cross-Mod Compatibility</a></summary><ul><li><a href='#interop/interop' class=''>Cross-Mod Compatibility</a></li><li><a href='#interop/gravity' class=''>Gravity Changer</a></li><li><a href='#interop/pehkui' class=''>Pehkui</a></li></ul></de
</body>
</html>
'''
# ---
# name: test_file
2023-06-06 15:24:18 +02:00
'''
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="The Hex Book, all in one place.">
<meta name="author" content="petrak@, Alwinfy">
<link rel="icon" href="icon.png">
<title>Hex Book</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.3.0/font/bootstrap-icons.css">
<style>
summary { display: list-item; }
details.spell-collapsible {
display: inline-block;
border: 1px solid #aaa;
border-radius: 4px;
padding: .5em .5em 0;
margin-bottom: .5em;
}
summary.collapse-spell {
font-weight: bold;
margin: -.5em -.5em 0;
padding: .5em;
}
details.spell-collapsible[open] {
padding: .5em;
}
details[open] summary.collapse-spell {
border-bottom: 1px solid #aaa;
margin-bottom: .5em;
}
details .collapse-spell::before {
content: "Click to show spell";
}
details[open] .collapse-spell::before {
content: "Click to hide spell";
}
blockquote.crafting-info {
font-size: inherit;
}
a.permalink {
margin-left: 0.5em;
}
a.permalink:hover {
color: lightgray;
}
p {
margin: 0.5ex 0;
}
p.fake-li {
margin: 0;
}
p.fake-li::before {
content: "\2022";
margin: 1ex;
}
.linkout::before {
content: "Link: ";
}
p.todo-note {
font-style: italic;
color: lightgray;
}
.obfuscated {
filter: blur(1em);
}
.spoilered {
filter: blur(1ex);
-moz-transition: filter 0.04s linear;
}
.spoilered:hover {
filter: blur(0.5ex);
}
.spoilered.unspoilered {
filter: blur(0);
}
canvas.spell-viz {
--dot-color: #777f;
--dot-color: #777f;
--start-dot-color: #f009;
--moving-dot-color: #0fa9;
--path-color: darkgray;
--visited-path-color: #0c8;
--dot-scale: 0.0625;
--moving-dot-scale: 0.125;
--line-scale: 0.08333;
--pausetext-scale: 0.5;
--dark-mode: 0;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #201a20;
color: #ddd;
}
.jumbotron {
background-color: #323;
}
canvas.spell-viz {
/* hack */
--dark-mode: 1;
}
}
</style>
<noscript>
<style>
/* for accessibility */
.spoilered {
filter: none !important;
}
</style>
</noscript>
<script>
"use strict";
const speeds = [0, 0.25, 0.5, 1, 2, 4];
const scrollThreshold = 100;
const rfaQueue = [];
const colorCache = new Map();
function getColorRGB(ctx, str) {
if (!colorCache.has(str)) {
ctx.fillStyle = str;
ctx.clearRect(0, 0, 1, 1);
ctx.fillRect(0, 0, 1, 1);
const imgData = ctx.getImageData(0, 0, 1, 1);
colorCache.set(str, imgData.data);
}
return colorCache.get(str);
}
function startAngle(str) {
switch (str) {
case "east": return 0;
case "north_east": return 1;
case "north_west": return 2;
case "west": return 3;
case "south_west": return 4;
case "south_east": return 5;
default: return 0;
}
}
function offsetAngle(str) {
switch (str) {
case "w": return 0;
case "q": return 1;
case "a": return 2;
case "s": return 3;
case "d": return 4;
case "e": return 5;
default: return -1;
}
}
function initializeElem(canvas) {
const str = canvas.dataset.string;
let angle = startAngle(canvas.dataset.start);
const perWorld = canvas.dataset.perWorld === "True";
// build geometry
const points = [[0, 0]];
let lastPoint = points[0];
let minPoint = lastPoint, maxPoint = lastPoint;
for (const ch of "w" + str) {
const addAngle = offsetAngle(ch);
if (addAngle < 0) continue;
angle = (angle + addAngle) % 6;
const trueAngle = Math.PI / 3 * angle;
const [lx, ly] = lastPoint;
const newPoint = [lx + Math.cos(trueAngle), ly - Math.sin(trueAngle)];
points.push(newPoint);
lastPoint = newPoint;
const [mix, miy] = minPoint;
minPoint = [Math.min(mix, newPoint[0]), Math.min(miy, newPoint[1])];
const [max, may] = maxPoint;
maxPoint = [Math.max(max, newPoint[0]), Math.max(may, newPoint[1])];
}
const size = Math.min(canvas.width, canvas.height) * 0.8;
const scale = size / Math.max(3, Math.max(maxPoint[1] - minPoint[1], maxPoint[0] - minPoint[0]));
const center = [(minPoint[0] + maxPoint[0]) * 0.5, (minPoint[1] + maxPoint[1]) * 0.5];
const truePoints = points.map(p => [canvas.width * 0.5 + scale * (p[0] - center[0]), canvas.height * 0.5 + scale * (p[1] - center[1])]);
let uniqPoints = [];
l1: for (const point of truePoints) {
for (const pt of uniqPoints) {
if (Math.abs(point[0] - pt[0]) < 0.00001 && Math.abs(point[1] - pt[1]) < 0.00001) {
continue l1;
}
}
uniqPoints.push(point);
}
// rendering code
const speed = 0.0025;
const context = canvas.getContext("2d");
const negaProgress = -3;
let progress = 0;
let scrollTimeout = 1e309;
let speedLevel = 3;
let speedIncrement = 0;
function speedScale() {
return speeds[speedLevel];
}
const style = getComputedStyle(canvas);
const getProp = n => style.getPropertyValue(n);
const tick = dt => {
scrollTimeout += dt;
if (canvas.offsetParent === null) return;
const strokeStyle = getProp("--path-color");
const strokeVisitedStyle = getProp("--visited-path-color");
const startDotStyle = getProp("--start-dot-color");
const dotStyle = getProp("--dot-color");
const movDotStyle = getProp("--moving-dot-color");
const strokeWidth = scale * +getProp("--line-scale");
const dotRadius = scale * +getProp("--dot-scale");
const movDotRadius = scale * +getProp("--moving-dot-scale");
const pauseScale = scale * +getProp("--pausetext-scale");
const bodyBg = scale * +getProp("--pausetext-scale");
const darkMode = +getProp("--dark-mode");
const bgColors = getColorRGB(context, getComputedStyle(document.body).backgroundColor);
if (!perWorld) {
progress += speed * dt * (progress > 0 ? speedScale() : Math.sqrt(speedScale()));
}
if (progress >= truePoints.length - 1) {
progress = negaProgress;
}
let ix = Math.floor(progress), frac = progress - ix, core = null, fadeColor = 0;
if (ix < 0) {
const rawFade = 2 * progress / negaProgress - 1;
fadeColor = 1 - Math.abs(rawFade);
context.strokeStyle = rawFade > 0 ? strokeVisitedStyle : strokeStyle;
ix = rawFade > 0 ? truePoints.length - 2 : 0;
frac = +(rawFade > 0);
} else {
context.strokeStyle = strokeVisitedStyle;
}
const [lx, ly] = truePoints[ix];
const [rx, ry] = truePoints[ix + 1];
core = [lx + (rx - lx) * frac, ly + (ry - ly) * frac];
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.lineWidth = strokeWidth;
context.moveTo(truePoints[0][0], truePoints[0][1]);
for (let i = 1; i < ix + 1; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.lineTo(core[0], core[1]);
context.stroke();
context.beginPath();
context.strokeStyle = strokeStyle;
context.moveTo(core[0], core[1]);
for (let i = ix + 1; i < truePoints.length; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.stroke();
for (let i = 0; i < uniqPoints.length; i++) {
context.beginPath();
context.fillStyle = (i == 0 && !perWorld) ? startDotStyle : dotStyle;
const radius = (i == 0 && !perWorld) ? movDotRadius : dotRadius;
context.arc(uniqPoints[i][0], uniqPoints[i][1], radius, 0, 2 * Math.PI);
context.fill();
}
if (!perWorld) {
context.beginPath();
context.fillStyle = movDotStyle;
context.arc(core[0], core[1], movDotRadius, 0, 2 * Math.PI);
context.fill();
}
if (fadeColor) {
context.fillStyle = `rgba(${bgColors[0]}, ${bgColors[1]}, ${bgColors[2]}, ${fadeColor})`;
context.fillRect(0, 0, canvas.width, canvas.height);
}
if (scrollTimeout <= 2000) {
context.fillStyle = `rgba(200, 200, 200, ${(2000 - scrollTimeout) / 1000})`;
context.font = `${pauseScale}px sans-serif`;
context.fillText(speedScale() ? speedScale() + "x" : "Paused", 0.2 * scale, canvas.height - 0.2 * scale);
}
};
rfaQueue.push(tick);
// scrolling input
if (!perWorld) {
canvas.addEventListener("wheel", ev => {
speedIncrement += ev.deltaY;
const oldSpeedLevel = speedLevel;
if (speedIncrement >= scrollThreshold) {
speedLevel--;
} else if (speedIncrement <= -scrollThreshold) {
speedLevel++;
}
if (oldSpeedLevel != speedLevel) {
speedIncrement = 0;
speedLevel = Math.max(0, Math.min(speeds.length - 1, speedLevel));
scrollTimeout = 0;
}
ev.preventDefault();
});
}
}
function hookLoad(elem) {
let init = false;
const canvases = elem.querySelectorAll("canvas");
elem.addEventListener("toggle", () => {
if (!init) {
canvases.forEach(initializeElem);
init = true;
}
});
}
function hookToggle(elem) {
const details = Array.from(document.querySelectorAll("details." + elem.dataset.target));
elem.addEventListener("click", () => {
if (details.some(x => x.open)) {
details.forEach(x => x.open = false);
} else {
details.forEach(x => x.open = true);
}
});
}
const params = new URLSearchParams(document.location.search);
function hookSpoiler(elem) {
if (params.get("nospoiler") !== null) {
elem.classList.add("unspoilered");
} else {
const thunk = ev => {
if (!elem.classList.contains("unspoilered")) {
ev.preventDefault();
ev.stopImmediatePropagation();
elem.classList.add("unspoilered");
}
elem.removeEventListener("click", thunk);
};
elem.addEventListener("click", thunk);
if (elem instanceof HTMLAnchorElement) {
const href = elem.getAttribute("href");
if (href.startsWith("#")) {
elem.addEventListener("click", () => document.getElementById(href.substring(1)).querySelector(".spoilered").classList.add("unspoilered"));
}
}
}
}
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('details.spell-collapsible').forEach(hookLoad);
document.querySelectorAll('a.toggle-link').forEach(hookToggle);
document.querySelectorAll('.spoilered').forEach(hookSpoiler);
function tick(prevTime, time) {
const dt = time - prevTime;
for (const q of rfaQueue) {
q(dt);
}
requestAnimationFrame(t => tick(time, t));
}
requestAnimationFrame(t => tick(t, t));
});
</script>
</head>
<body>
<div class="container" style="margin-top: 3em;">
<blockquote>
<h1>This is the online version of the Hexcasting documentation.</h1>
<p>Embedded images and patterns are included, but not crafting recipes or items. There's an in-game book for
those.</p>
<p>Additionally, this is built from the latest code on GitHub. It may describe <b>newer</b> features that you
may not necessarily have, even on the latest CurseForge version!</p>
<p><b>Entries which are blurred are spoilers</b>. Click to reveal them, but be aware that they may spoil endgame
progression. Alternatively, click <a href="?nospoiler">here</a> to get a version with all spoilers showing.
</p>
</blockquote>
</div>
2023-06-11 01:14:53 +02:00
<div class='container'><header class='jumbotron'><h1 class='book-title'>Hex Notebook</h1><p>I seem to have discovered a new method of magical arts, in which one draws patterns strange and wild onto a hexagonal grid. It fascinates me. I&#x27;ve decided to start a journal of my thoughts and findings.</p><p><a href='https://discord.gg/4xxHGYteWk'>Discord Server Link</a></p></header><nav><h2 id='table-of-contents' class='page-header'>Table of Contents<a href='javascript:void(0)' class='permalink toggle-link small' data-target='toc-category' title='Toggle all'><i class='bi bi-list-nested'></i></a><a href='#table-of-contents' class='permalink small' title='Permalink'><i class='bi bi-link-45deg'></i></a></h2><details class='toc-category'><summary><a href='#basics' class=''>Getting Started</a></summary><ul><li><a href='#basics/media' class=''>Media</a></li><li><a href='#basics/geodes' class=''>Geodes</a></li><li><a href='#basics/couldnt_cast' class='spoilered'>A Frustration</a></li><li><a href='#basics/start_to_see' class='spoilered'>WHAT DID I SEE</a></li></ul></details><details class='toc-category'><summary><a href='#casting' class=''>Hex Casting</a></summary><ul><li><a href='#casting/101' class=''>Hexing 101</a></li><li><a href='#casting/vectors' class=''>A Primer on Vectors</a></li><li><a href='#casting/mishaps' class=''>Mishaps</a></li><li><a href='#casting/stack' class=''>Stacks</a></li><li><a href='#casting/naming' class=''>Naming Actions</a></li><li><a href='#casting/influences' class=''>Influences</a></li><li><a href='#casting/mishaps2' class='spoilered'>Enlightened Mishaps</a></li></ul></details><details class='toc-category'><summary><a href='#items' class=''>Items</a></summary><ul><li><a href='#items/amethyst' class=''>Amethyst</a></li><li><a href='#items/staff' class=''>Staff</a></li><li><a href='#items/lens' class=''>Scrying Lens</a></li><li><a href='#items/focus' class=''>Focus</a></li><li><a href='#items/abacus' class=''>Abacus</a></li><li><a href='#items/spellbook' class=''>Spellbook</a></li><li><a href='#items/scroll' class=''>Scrolls</a></li><li><a href='#items/slate' class=''>Slates</a></li><li><a href='#items/hexcasting' class=''>Casting Items</a></li><li><a href='#items/phials' class=''>Phials of Media</a></li><li><a href='#items/pigments' class=''>Pigments</a></li><li><a href='#items/edified' class=''>Edified Trees</a></li><li><a href='#items/jeweler_hammer' class=''>Jeweler&#x27;s Hammer</a></li><li><a href='#items/decoration' class=''>Decorative Blocks</a></li></ul></details><details class='toc-category'><summary><a href='#greatwork' class='spoilered'>The Great Work</a></summary><ul><li><a href='#greatwork/the_work' class='spoilered'>The Work</a></li><li><a href='#greatwork/brainsweeping' class='spoilered'>On the Flaying of Minds</a></li><li><a href='#greatwork/spellcircles' class='spoilered'>Spell Circles</a></li><li><a href='#greatwork/impetus' class='spoilered'>Impetuses</a></li><li><a href='#greatwork/directrix' class='spoilered'>Directrices</a></li><li><a href='#greatwork/akashiclib' class='spoilered'>Akashic Libraries</a></li></ul></details><details class='toc-category'><summary><a href='#lore' class=''>Lore</a></summary><ul><li><a href='#lore/terabithia1' class=''>Cardamom Steles, #1</a></li><li><a href='#lore/terabithia2' class=''>Cardamom Steles, #2</a></li><li><a href='#lore/terabithia3' class=''>Cardamom Steles, #3, 1/2</a></li><li><a href='#lore/terabithia4' class=''>Cardamom Steles, #3, 2/2</a></li><li><a href='#lore/terabithia5' class=''>Cardamom Steles, #4</a></li><li><a href='#lore/experiment1' class=''>Wooleye Instance Notes</a></li><li><a href='#lore/experiment2' class=''>Wooleye Interview Logs</a></li><li><a href='#lore/inventory' class=''>Restoration Log #72</a></li></ul></details><details class='toc-category'><summary><a href='#interop' class=''>Cross-Mod Compatibility</a></summary><ul><li><a href='#interop/interop' class=''>Cross-Mod Compatibility</a></li><li><a href='#interop/gravity' class=''>Gravity Changer</a></li><li><a href='#interop/pehkui' class=''>Pehkui</a></li></ul></de
2023-06-06 15:24:18 +02:00
</body>
</html>
'''
# ---
# name: test_file_pretty
'''
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<meta content="The Hex Book, all in one place." name="description"/>
<meta content="petrak@, Alwinfy" name="author"/>
<link href="icon.png" rel="icon"/>
<title>
Hex Book
</title>
<link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" rel="stylesheet"/>
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.3.0/font/bootstrap-icons.css" rel="stylesheet"/>
<style>
summary { display: list-item; }
details.spell-collapsible {
display: inline-block;
border: 1px solid #aaa;
border-radius: 4px;
padding: .5em .5em 0;
margin-bottom: .5em;
}
summary.collapse-spell {
font-weight: bold;
margin: -.5em -.5em 0;
padding: .5em;
}
details.spell-collapsible[open] {
padding: .5em;
}
details[open] summary.collapse-spell {
border-bottom: 1px solid #aaa;
margin-bottom: .5em;
}
details .collapse-spell::before {
content: "Click to show spell";
}
details[open] .collapse-spell::before {
content: "Click to hide spell";
}
blockquote.crafting-info {
font-size: inherit;
}
a.permalink {
margin-left: 0.5em;
}
a.permalink:hover {
color: lightgray;
}
p {
margin: 0.5ex 0;
}
p.fake-li {
margin: 0;
}
p.fake-li::before {
content: "\2022";
margin: 1ex;
}
.linkout::before {
content: "Link: ";
}
p.todo-note {
font-style: italic;
color: lightgray;
}
.obfuscated {
filter: blur(1em);
}
.spoilered {
filter: blur(1ex);
-moz-transition: filter 0.04s linear;
}
.spoilered:hover {
filter: blur(0.5ex);
}
.spoilered.unspoilered {
filter: blur(0);
}
canvas.spell-viz {
--dot-color: #777f;
--dot-color: #777f;
--start-dot-color: #f009;
--moving-dot-color: #0fa9;
--path-color: darkgray;
--visited-path-color: #0c8;
--dot-scale: 0.0625;
--moving-dot-scale: 0.125;
--line-scale: 0.08333;
--pausetext-scale: 0.5;
--dark-mode: 0;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #201a20;
color: #ddd;
}
.jumbotron {
background-color: #323;
}
canvas.spell-viz {
/* hack */
--dark-mode: 1;
}
}
</style>
<noscript>
<style>
/* for accessibility */
.spoilered {
filter: none !important;
}
</style>
</noscript>
<script>
"use strict";
const speeds = [0, 0.25, 0.5, 1, 2, 4];
const scrollThreshold = 100;
const rfaQueue = [];
const colorCache = new Map();
function getColorRGB(ctx, str) {
if (!colorCache.has(str)) {
ctx.fillStyle = str;
ctx.clearRect(0, 0, 1, 1);
ctx.fillRect(0, 0, 1, 1);
const imgData = ctx.getImageData(0, 0, 1, 1);
colorCache.set(str, imgData.data);
}
return colorCache.get(str);
}
function startAngle(str) {
switch (str) {
case "east": return 0;
case "north_east": return 1;
case "north_west": return 2;
case "west": return 3;
case "south_west": return 4;
case "south_east": return 5;
default: return 0;
}
}
function offsetAngle(str) {
switch (str) {
case "w": return 0;
case "q": return 1;
case "a": return 2;
case "s": return 3;
case "d": return 4;
case "e": return 5;
default: return -1;
}
}
function initializeElem(canvas) {
const str = canvas.dataset.string;
let angle = startAngle(canvas.dataset.start);
const perWorld = canvas.dataset.perWorld === "True";
// build geometry
const points = [[0, 0]];
let lastPoint = points[0];
let minPoint = lastPoint, maxPoint = lastPoint;
for (const ch of "w" + str) {
const addAngle = offsetAngle(ch);
if (addAngle < 0) continue;
angle = (angle + addAngle) % 6;
const trueAngle = Math.PI / 3 * angle;
const [lx, ly] = lastPoint;
const newPoint = [lx + Math.cos(trueAngle), ly - Math.sin(trueAngle)];
points.push(newPoint);
lastPoint = newPoint;
const [mix, miy] = minPoint;
minPoint = [Math.min(mix, newPoint[0]), Math.min(miy, newPoint[1])];
const [max, may] = maxPoint;
maxPoint = [Math.max(max, newPoint[0]), Math.max(may, newPoint[1])];
}
const size = Math.min(canvas.width, canvas.height) * 0.8;
const scale = size / Math.max(3, Math.max(maxPoint[1] - minPoint[1], maxPoint[0] - minPoint[0]));
const center = [(minPoint[0] + maxPoint[0]) * 0.5, (minPoint[1] + maxPoint[1]) * 0.5];
const truePoints = points.map(p => [canvas.width * 0.5 + scale * (p[0] - center[0]), canvas.height * 0.5 + scale * (p[1] - center[1])]);
let uniqPoints = [];
l1: for (const point of truePoints) {
for (const pt of uniqPoints) {
if (Math.abs(point[0] - pt[0]) < 0.00001 && Math.abs(point[1] - pt[1]) < 0.00001) {
continue l1;
}
}
uniqPoints.push(point);
}
// rendering code
const speed = 0.0025;
const context = canvas.getContext("2d");
const negaProgress = -3;
let progress = 0;
let scrollTimeout = 1e309;
let speedLevel = 3;
let speedIncrement = 0;
function speedScale() {
return speeds[speedLevel];
}
const style = getComputedStyle(canvas);
const getProp = n => style.getPropertyValue(n);
const tick = dt => {
scrollTimeout += dt;
if (canvas.offsetParent === null) return;
const strokeStyle = getProp("--path-color");
const strokeVisitedStyle = getProp("--visited-path-color");
const startDotStyle = getProp("--start-dot-color");
const dotStyle = getProp("--dot-color");
const movDotStyle = getProp("--moving-dot-color");
const strokeWidth = scale * +getProp("--line-scale");
const dotRadius = scale * +getProp("--dot-scale");
const movDotRadius = scale * +getProp("--moving-dot-scale");
const pauseScale = scale * +getProp("--pausetext-scale");
const bodyBg = scale * +getProp("--pausetext-scale");
const darkMode = +getProp("--dark-mode");
const bgColors = getColorRGB(context, getComputedStyle(document.body).backgroundColor);
if (!perWorld) {
progress += speed * dt * (progress > 0 ? speedScale() : Math.sqrt(speedScale()));
}
if (progress >= truePoints.length - 1) {
progress = negaProgress;
}
let ix = Math.floor(progress), frac = progress - ix, core = null, fadeColor = 0;
if (ix < 0) {
const rawFade = 2 * progress / negaProgress - 1;
fadeColor = 1 - Math.abs(rawFade);
context.strokeStyle = rawFade > 0 ? strokeVisitedStyle : strokeStyle;
ix = rawFade > 0 ? truePoints.length - 2 : 0;
frac = +(rawFade > 0);
} else {
context.strokeStyle = strokeVisitedStyle;
}
const [lx, ly] = truePoints[ix];
const [rx, ry] = truePoints[ix + 1];
core = [lx + (rx - lx) * frac, ly + (ry - ly) * frac];
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.lineWidth = strokeWidth;
context.moveTo(truePoints[0][0], truePoints[0][1]);
for (let i = 1; i < ix + 1; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.lineTo(core[0], core[1]);
context.stroke();
context.beginPath();
context.strokeStyle = strokeStyle;
context.moveTo(core[0], core[1]);
for (let i = ix + 1; i < truePoints.length; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.stroke();
for (let i = 0; i < uniqPoints.length; i++) {
context.beginPath();
context.fillStyle = (i == 0 && !perWorld) ? startDotStyle : dotStyle;
const radius = (i == 0 && !perWorld) ? movDotRadius : dotRadius;
context.arc(uniqPoints[i][0], uniqPoints[i][1], radius, 0, 2 * Math.PI);
context.fill();
}
if (!perWorld) {
context.beginPath();
context.fillStyle = movDotStyle;
context.arc(core[0], core[1], movDotRadius, 0, 2 * Math.PI);
context.fill();
}
if (fadeColor) {
context.fillStyle = `rgba(${bgColors[0]}, ${bgColors[1]}, ${bgColors[2]}, ${fadeColor})`;
context.fillRect(0, 0, canvas.width, canvas.height);
}
if (scrollTimeout <= 2000) {
context.fillStyle = `rgba(200, 200, 200, ${(2000 - scrollTimeout) / 1000})`;
context.font = `${pauseScale}px sans-serif`;
context.fillText(speedScale() ? speedScale() + "x" : "Paused", 0.2 * scale, canvas.height - 0.2 * scale);
}
};
rfaQueue.push(tick);
// scrolling input
if (!perWorld) {
canvas.addEventListener("wheel", ev => {
speedIncrement += ev.deltaY;
const oldSpeedLevel = speedLevel;
if (speedIncrement >= scrollThreshold) {
speedLevel--;
} else if (speedIncrement <= -scrollThreshold) {
speedLevel++;
}
if (oldSpeedLevel != speedLevel) {
speedIncrement = 0;
speedLevel = Math.max(0, Math.min(speeds.length - 1, speedLevel));
scrollTimeout = 0;
}
ev.preventDefault();
});
}
}
function hookLoad(elem) {
let init = false;
const canvases = elem.querySelectorAll("canvas");
elem.addEventListener("toggle", () => {
if (!init) {
canvases.forEach(initializeElem);
init = true;
}
});
}
function hookToggle(elem) {
const details = Array.from(document.querySelectorAll("details." + elem.dataset.target));
elem.addEventListener("click", () => {
if (details.some(x => x.open)) {
details.forEach(x => x.open = false);
} else {
details.forEach(x => x.open = true);
}
});
}
const params = new URLSearchParams(document.location.search);
function hookSpoiler(elem) {
if (params.get("nospoiler") !== null) {
elem.classList.add("unspoilered");
} else {
const thunk = ev => {
if (!elem.classList.contains("unspoilered")) {
ev.preventDefault();
ev.stopImmediatePropagation();
elem.classList.add("unspoilered");
}
elem.removeEventListener("click", thunk);
};
elem.addEventListener("click", thunk);
if (elem instanceof HTMLAnchorElement) {
const href = elem.getAttribute("href");
if (href.startsWith("#")) {
elem.addEventListener("click", () => document.getElementById(href.substring(1)).querySelector(".spoilered").classList.add("unspoilered"));
}
}
}
}
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('details.spell-collapsible').forEach(hookLoad);
document.querySelectorAll('a.toggle-link').forEach(hookToggle);
document.querySelectorAll('.spoilered').forEach(hookSpoiler);
function tick(prevTime, time) {
const dt = time - prevTime;
for (const q of rfaQueue) {
q(dt);
}
requestAnimationFrame(t => tick(time, t));
}
requestAnimationFrame(t => tick(t, t));
});
</script>
</head>
<body>
<div class="container" style="margin-top: 3em;">
<blockquote>
<h1>
This is the online version of the Hexcasting documentation.
</h1>
<p>
Embedded images and patterns are included, but not crafting recipes or items. There's an in-game book for
those.
</p>
<p>
Additionally, this is built from the latest code on GitHub. It may describe
<b>
newer
</b>
features that you
may not necessarily have, even on the latest CurseForge version!
</p>
<p>
<b>
Entries which are blurred are spoilers
</b>
. Click to reveal them, but be aware that they may spoil endgame
progression. Alternatively, click
<a href="?nospoiler">
here
</a>
to get a version with all spoilers showing.
</p>
</blockquote>
</div>
<div class="container">
<header class="jumbotron">
<h1 class="book-title">
Hex Notebook
</h1>
<p>
I seem to have discovered a new method of magical arts, in which one draws patterns strange and wild onto a hexagonal grid. It fascinates me. I've decided to start a journal of my thoughts and findings.
</p>
<p>
<a href="https://discord.gg/4xxHGYteWk">
Discord Server Link
</a>
</p>
</header>
<nav>
<h2 class="page-header" id="table-of-contents">
Table of Contents
<a class="permalink toggle-link small" data-target="toc-category" href="javascript:void(0)" title="Toggle all">
<i class="bi bi-list-nested">
</i>
</a>
<a class="permalink small" href="#table-of-contents" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<details class="toc-category">
<summary>
<a class="" href="#basics">
Getting Started
</a>
</summary>
<ul>
<li>
<a class="" href="#basics/media">
Media
</a>
</li>
<li>
<a class="" href="#basics/geodes">
Geodes
</a>
</li>
<li>
<a class="spoilered" href="#basics/couldnt_cast">
A Frustration
</a>
</li>
<li>
<a class="spoilered" href="#basics/start_to_see">
WHAT DID I SEE
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="" href="#casting">
Hex Casting
</a>
</summary>
<ul>
<li>
<a class="" href="#casting/101">
Hexing 101
</a>
</li>
<li>
<a class="" href="#casting/vectors">
A Primer on Vectors
</a>
</li>
<li>
<a class="" href="#casting/mishaps">
Mishaps
</a>
</li>
<li>
<a class="" href="#casting/stack">
Stacks
</a>
</li>
<li>
<a class="" href="#casting/naming">
Naming Actions
</a>
</li>
<li>
<a class="" href="#casting/influences">
Influences
</a>
</li>
<li>
<a class="spoilered" href="#casting/mishaps2">
Enlightened Mishaps
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="" href="#items">
Items
</a>
</summary>
<ul>
<li>
<a class="" href="#items/amethyst">
Amethyst
</a>
</li>
<li>
<a class="" href="#items/staff">
Staff
</a>
</li>
<li>
<a class="" href="#items/lens">
Scrying Lens
</a>
</li>
<li>
<a class="" href="#items/focus">
Focus
</a>
</li>
<li>
<a class="" href="#items/abacus">
Abacus
</a>
</li>
<li>
<a class="" href="#items/spellbook">
Spellbook
</a>
</li>
<li>
<a class="" href="#items/scroll">
Scrolls
</a>
</li>
<li>
<a class="" href="#items/slate">
Slates
</a>
</li>
<li>
<a class="" href="#items/hexcasting">
Casting Items
</a>
</li>
<li>
<a class="" href="#items/phials">
Phials of Media
</a>
</li>
<li>
<a class="" href="#items/pigments">
Pigments
</a>
</li>
<li>
<a class="" href="#items/edified">
Edified Trees
</a>
</li>
<li>
<a class="" href="#items/jeweler_hammer">
Jeweler's Hammer
</a>
</li>
<li>
<a class="" href="#items/decoration">
Decorative Blocks
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="spoilered" href="#greatwork">
The Great Work
</a>
</summary>
<ul>
<li>
<a class="spoilered" href="#greatwork/the_work">
The Work
</a>
</li>
<li>
<a class="spoilered" href="#greatwork/brainsweeping">
On the Flaying of Minds
</a>
</li>
<li>
<a class="spoilered" href="#greatwork/spellcircles">
Spell Circles
</a>
</li>
<li>
<a class="spoilered" href="#greatwork/impetus">
Impetuses
</a>
</li>
<li>
<a class="spoilered" href="#greatwork/directrix">
Directrices
</a>
</li>
<li>
<a class="spoilered" href="#greatwork/akashiclib">
Akashic Libraries
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="" href="#lore">
Lore
</a>
</summary>
<ul>
<li>
<a class="" href="#lore/terabithia1">
Cardamom Steles, #1
</a>
</li>
<li>
<a class="" href="#lore/terabithia2">
Cardamom Steles, #2
</a>
</li>
<li>
<a class="" href="#lore/terabithia3">
Cardamom Steles, #3, 1/2
</a>
</li>
<li>
<a class="" href="#lore/terabithia4">
Cardamom Steles, #3, 2/2
</a>
</li>
<li>
<a class="" href="#lore/terabithia5">
Cardamom Steles, #4
</a>
</li>
<li>
<a class="" href="#lore/experiment1">
Wooleye Instance Notes
</a>
</li>
<li>
<a class="" href="#lore/experiment2">
Wooleye Interview Logs
</a>
</li>
<li>
<a class="" href="#lore/inventory">
Restoration Log #72
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="" href="#interop">
Cross-Mod Compatibility
</a>
</summary>
<ul>
<li>
<a class="" href="#interop/interop">
Cross-Mod Compatibility
</a>
</li>
<li>
<a class="" href="#interop/gravity">
Gravity Changer
</a>
</li>
<li>
<a class="" href="#interop/pehkui">
Pehkui
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="" href="#patterns">
Patterns
</a>
</summary>
<ul>
<li>
<a class="" href="#patterns/readers_guide">
How to Read this Section
</a>
</li>
<li>
<a class="" href="#patterns/basics">
Basic Patterns
</a>
</li>
<li>
<a class="" href="#patterns/numbers">
Number Literals
</a>
</li>
<li>
<a class="" href="#patterns/math">
Mathematics
</a>
</li>
<li>
<a class="" href="#patterns/consts">
Constants
</a>
</li>
<li>
<a class="" href="#patterns/stackmanip">
Stack Manipulation
</a>
</li>
<li>
<a class="" href="#patterns/logic">
Logical Operators
</a>
</li>
<li>
<a class="" href="#patterns/entities">
Entities
</a>
</li>
<li>
<a class="" href="#patterns/lists">
List Manipulation
</a>
</li>
<li>
<a class="" href="#patterns/patterns_as_iotas">
Patterns as Iotas
</a>
</li>
<li>
<a class="" href="#patterns/readwrite">
Reading and Writing
</a>
</li>
<li>
<a class="" href="#patterns/advanced_math">
Advanced Mathematics
</a>
</li>
<li>
<a class="" href="#patterns/sets">
Sets
</a>
</li>
<li>
<a class="" href="#patterns/meta">
Meta-evaluation
</a>
</li>
<li>
<a class="spoilered" href="#patterns/circle">
Spell Circle Patterns
</a>
</li>
<li>
<a class="spoilered" href="#patterns/akashic_patterns">
Akashic Patterns
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="" href="#patterns/spells">
Spells
</a>
</summary>
<ul>
<li>
<a class="" href="#patterns/spells/itempicking">
Working with Items
</a>
</li>
<li>
<a class="" href="#patterns/spells/basic">
Basic Spells
</a>
</li>
<li>
<a class="" href="#patterns/spells/blockworks">
Blockworks
</a>
</li>
<li>
<a class="" href="#patterns/spells/nadirs">
Nadirs
</a>
</li>
<li>
<a class="" href="#patterns/spells/hexcasting">
Crafting Casting Items
</a>
</li>
<li>
<a class="" href="#patterns/spells/sentinels">
Sentinels
</a>
</li>
<li>
<a class="" href="#patterns/spells/colorize">
Internalize Pigment
</a>
</li>
</ul>
</details>
<details class="toc-category">
<summary>
<a class="" href="#patterns/great_spells">
Great Spells
</a>
</summary>
<ul>
<li>
<a class="" href="#patterns/great_spells/create_lava">
Create Lava
</a>
</li>
<li>
<a class="" href="#patterns/great_spells/zeniths">
Zeniths
</a>
</li>
<li>
<a class="" href="#patterns/great_spells/weather_manip">
Weather Manipulation
</a>
</li>
<li>
<a class="" href="#patterns/great_spells/flight">
Flight
</a>
</li>
<li>
<a class="" href="#patterns/great_spells/teleport">
Greater Teleport
</a>
</li>
<li>
<a class="" href="#patterns/great_spells/greater_sentinel">
Summon Greater Sentinel
</a>
</li>
<li>
<a class="" href="#patterns/great_spells/make_battery">
Craft Phial
</a>
</li>
<li>
<a class="" href="#patterns/great_spells/brainsweep">
Flay Mind
</a>
</li>
</ul>
</details>
</nav>
<main class="book-body">
<section id="basics">
<h2 class="category-title page-header">
Getting Started
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#basics" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
The practitioners of this art would cast their so-called
<span style="color: #b38ef3">
Hexes
</span>
by drawing strange patterns in the air with a
<a href="#items/staff">
<span style="color: #b0b">
staff
</span>
</a>
-- or craft
<a href="#items/hexcasting">
<span style="color: #b0b">
powerful magical items
</span>
</a>
to do the casting for them. How might I do the same?
</p>
<div id="basics/media">
<h3 class="entry-title page-header">
Media
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#basics/media" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<span style="color: #74b3f2">
Media
</span>
is a form of mental energy external to a mind. All living creatures generate trace amounts of
<span style="color: #74b3f2">
media
</span>
when thinking about anything; after the thought is finished, the media is released into the environment.
</p>
<p>
The art of casting
<span style="color: #b38ef3">
Hexes
</span>
is all about manipulating
<span style="color: #74b3f2">
media
</span>
to do your bidding.
</p>
<br/>
<p>
<span style="color: #74b3f2">
Media
</span>
can exert influences on other media-- the strength and type of influence can be manipulated by drawing
<span style="color: #74b3f2">
media
</span>
out into patterns.
</p>
<p>
Scholars of the art used a concentrated blob of
<span style="color: #74b3f2">
media
</span>
on the end of a stick: by waving it in the air in precise configurations, they were able to manipulate enough
<span style="color: #74b3f2">
media
</span>
with enough precision to influence the world itself, in the form of a
<span style="color: #b38ef3">
Hex
</span>
.
</p>
<br/>
<p>
Sadly, even a fully sentient being (like myself, presumably) can only generate miniscule amounts of
<span style="color: #74b3f2">
media
</span>
. It would be quite impractical to try and use my own brainpower to cast Hexes.
</p>
<p>
But legend has it that there are underground deposits where
<span style="color: #74b3f2">
media
</span>
slowly accumulates, growing into crystalline forms.
</p>
<p>
If I could just find one of those...
</p>
<br/>
</div>
<div id="basics/geodes">
<h3 class="entry-title page-header">
Geodes
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#basics/geodes" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Aha! While mining deep underground, I found an enormous geode resonating with energy-- energy which pressed against my skull and my thoughts. And now, I hold that pressure in my hand, in solid form. That proves it. This
<i>
must
</i>
be the place spoken about in legends where
<span style="color: #74b3f2">
media
</span>
accumulates.
</p>
<p>
These
<a href="#items/amethyst">
<span style="color: #b0b">
amethyst crystals
</span>
</a>
must be a
<a href="#items/amethyst">
<span style="color: #490">
convenient, solidified form of
</span>
<span style="color: #74b3f2">
Media
</span>
</a>
.
</p>
<br/>
<p>
It appears that, in addition to the
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Shards
</span>
</a>
I have seen in the past, these crystals can also drop bits of powdered
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
, as well as these
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst Crystals
</span>
</a>
. It looks like I'll have a better chance of finding the
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst Crystals
</span>
</a>
by using a Fortune pickaxe.
</p>
<br/>
<p>
As I take the beauty of the crystal in, I can feel connections flashing wildly in my mind. It's like the
<span style="color: #74b3f2">
media
</span>
in the air is entering me, empowering me, elucidating me... It feels wonderful.
</p>
<p>
Finally, my study into the arcane is starting to make some sense!
</p>
<p>
Let me reread those old legends again, now that I know what I'm looking at.
</p>
<br/>
</div>
<div id="basics/couldnt_cast">
<div class="spoilered">
<h3 class="entry-title page-header">
A Frustration
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#basics/couldnt_cast" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Argh! Why won't it let me cast the spell?!
</p>
<p>
The scroll I found rings with authenticity. I can
<i>
feel
</i>
it humming in the scroll-- the pattern is true, or as true as it can be. The spell is
<i>
right there
</i>
.
</p>
<p>
But it feels as if it's on the other side of some thin membrane. I called it-- it tried to manifest-- yet it
<i>
COULD NOT
</i>
.
</p>
<br/>
<p>
It felt like the barrier may have weakened ever so slightly from the force that I exerted on the spell; yet despite my greatest efforts-- my deepest focus, my finest amethyst, my precisest drawings-- it
<i>
refuses
</i>
to cross the barrier. It's maddening.
</p>
<p>
<i>
This
</i>
is where my arcane studies end? Cursed by impotence, cursed to lose my rightful powers?
</p>
<p>
I should take a deep breath. I should meditate on what I have learned, even if it wasn't very much...
</p>
<br/>
<p>
...After careful reflection... I have discovered a change in myself.
</p>
<p>
It seems... in lieu of
<a href="#items/amethyst">
<span style="color: #b0b">
amethyst
</span>
</a>
, I've unlocked the ability to cast spells using my own mind and life energy-- just as I read of in the legends of old.
</p>
<p>
I'm not sure why I can now. It's just... the truth-knowledge-burden was always there, and I see it now. I know it. I bear it.
</p>
<p>
Fortunately, I feel my limits as well-- I would get approximately two
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
's worth of
<span style="color: #74b3f2">
media
</span>
out of my health at its prime.
</p>
<br/>
<p>
I shudder to even consider it-- I've kept my mind mostly intact so far, in my studies. But the fact is-- I form one side of a tenuous link.
</p>
<p>
I'm connected to some other side-- a side whose boundary has thinned from that trauma. A place where simple actions spell out eternal glory.
</p>
<p>
Is it so wrong, to want it for myself?
</p>
<br/>
</div>
</div>
<div id="basics/start_to_see">
<div class="spoilered">
<h3 class="entry-title page-header">
WHAT DID I SEE
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#basics/start_to_see" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
The texts weren't lying. Nature took its due.
</p>
<br/>
<p>
That... that was...
</p>
<p>
...that was one of the
<i>
worst
</i>
things I've
<i>
ever
</i>
experienced. I offered my plan to Nature, and got a firm smile and a tearing sensation in return-- a piece of myself breaking away, like amethyst dust in the rain.
</p>
<p>
I feel lucky to have
<i>
survived
</i>
, much less have the sagacity to write this-- I should declare the matter closed, double-check my math before I cast any more
<span style="color: #b38ef3">
Hexes
</span>
, and never make such a mistake again.
</p>
<br/>
<p>
...But.
</p>
<p>
But for the scarcest instant, that part of myself... it
<i>
saw
</i>
...
<a href="#greatwork/the_work">
<span style="color: #490">
something
</span>
</a>
. A place-- a design, perhaps? (Such distinctions didn't seem to matter in the face of... that.)
</p>
<p>
And a... a membrane-barrier-skin-border, separating myself from a realm of raw thought-flow-light-energy. I remember-- I saw-thought-recalled-felt-- the barrier fuzzing at its edges, just so slightly.
</p>
<p>
I wanted
<i>
through.
</i>
</p>
<br/>
<p>
I shouldn't. I
<i>
know
</i>
I shouldn't. It's dangerous. It's too dangerous. The force required... I'd have to bring myself within a hair's breadth of Death itself with a
<i>
single stroke
</i>
.
</p>
<p>
But I'm. So.
<i>
Close
</i>
.
</p>
<p>
<i>
This
</i>
is the culmination of my art. This is the
<span style="color: #54398a">
Enlightenment
</span>
I've been seeking.
</p>
<p>
I want more. I need to see it again. I
<i>
will
</i>
see it.
</p>
<p>
What is my mortal mind against immortal glory?
</p>
<br/>
</div>
</div>
</section>
<section id="casting">
<h2 class="category-title page-header">
Hex Casting
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
I've started to understand how the old masters cast their
<span style="color: #b38ef3">
Hexes
</span>
! It's a bit complicated, but I'm sure I can figure it out. Let's see...
</p>
<div id="casting/101">
<h3 class="entry-title page-header">
Hexing 101
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting/101" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Casting a
<span style="color: #b38ef3">
Hex
</span>
is quite difficult-- no wonder this art was lost to time! I'll have to re-read my notes carefully.
</p>
<p>
I can start a
<span style="color: #b38ef3">
Hex
</span>
by pressing Right Click with a
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
in my hand-- this will cause a hexagonal grid of dots to appear in front of me. Then I can click and drag from dot to dot to draw patterns in the
<span style="color: #74b3f2">
media
</span>
of the grid; finishing a pattern will run its corresponding action (more on that later).
</p>
<br/>
<p>
Once I've drawn enough patterns to cast a spell, the grid will disappear as the
<span style="color: #74b3f2">
media
</span>
I've stored up is released. Holding Left Shift while using my
<a href="#items/staff">
<span style="color: #b0b">
staff
</span>
</a>
will also clear the grid, if I don't mind the chance of mishap. (It seems that the more
<span style="color: #74b3f2">
media
</span>
I've built up, the more likely I'll meet misfortune.)
</p>
<p>
So how do patterns work? In short:
</p>
<p class="fake-li">
<i>
Patterns
</i>
will execute...
</p>
<p class="fake-li">
<i>
Actions
</i>
, which manipulate...
</p>
<p class="fake-li">
<a href="#casting/stack">
<i>
The Stack
</i>
</a>
, which is a list of...
</p>
<p class="fake-li">
<i>
Iotas
</i>
, which are simply units of information.
</p>
<br/>
<p>
First,
<span style="color: #490">
patterns
</span>
. These are essential-- they're what I use to manipulate the
<span style="color: #74b3f2">
media
</span>
around me. Certain patterns, when drawn, will cause
<span style="color: #490">
actions
</span>
to happen. Actions are what actually
<i>
do
</i>
the magic; all patterns influence
<span style="color: #74b3f2">
media
</span>
in particular ways, and when those influences end up doing something useful, we call it an action.
</p>
<p>
<span style="color: #74b3f2">
Media
</span>
can be fickle: if I draw an invalid pattern, I'll get some
<a href="#casting/influences">
<span style="color: #fc77be">
garbage
</span>
</a>
result somewhere on my stack (read on...)
</p>
<br/>
<h4>
An Example
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaq
</canvas>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="qaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaq
</canvas>
</details>
<p>
It's interesting to note that the
<i>
rotation
</i>
of a pattern doesn't seem to matter at all. These two patterns both perform an action called
<a href="#patterns/basics@hexcasting:get_caster">
<span style="color: #fc77be">
Mind's Reflection
</span>
</a>
, for example.
</p>
<br/>
<p>
A
<span style="color: #b38ef3">
Hex
</span>
is cast by drawing (valid) actions in sequence. Each action might do one of a few things:
</p>
<p class="fake-li">
Gather some information about the environment, leaving it on the top of the stack;
</p>
<p class="fake-li">
manipulate the info gathered (e.g. adding two numbers); or
</p>
<p class="fake-li">
perform some magical effect, like summoning lightning or an explosion. (These actions are called "spells.")
</p>
<p>
When I start casting a
<span style="color: #b38ef3">
Hex
</span>
, it creates an empty stack. Actions manipulate the top of that stack.
</p>
<br/>
<p>
For example,
<a href="#patterns/basics@hexcasting:get_caster">
<span style="color: #fc77be">
Mind's Reflection
</span>
</a>
will create an iota representing
<i>
me
</i>
, the caster, and add it to the top of the stack.
<a href="#patterns/basics@hexcasting:get_entity_pos">
<span style="color: #fc77be">
Compass Purification
</span>
</a>
will take the iota at the top the stack, if it represents an entity, and transform it into an iota representing that entity's location.
</p>
<p>
So, drawing those patterns in that order would result in an iota on the stack representing my position.
</p>
<br/>
<p>
<span style="color: #490">
Iotas
</span>
can represent things like myself or my position, but there are several other types I can manipulate with
<span style="color: #490">
Actions
</span>
. Here's a comprehensive list:
</p>
<p class="fake-li">
Numbers (which some legends called "doubles");
</p>
<p class="fake-li">
Vectors, a collection of three numbers representing a position, movement, or direction in the world;
</p>
<p class="fake-li">
Booleans or "bools" for short, representing an abstract True or False,
</p>
<br/>
<p>
</p>
<p class="fake-li">
Entities, like myself, chickens, and minecarts;
</p>
<p class="fake-li">
Influences, peculiar types of iota that seem to represent abstract ideas;
</p>
<p class="fake-li">
Patterns themselves, used for crafting magic items and truly mind-boggling feats like
<i>
spells that cast other spells
</i>
; and
</p>
<p class="fake-li">
A list of several of the above, gathered into a single iota.
</p>
<br/>
<p>
Of course, there's no such thing as a free lunch. All spells, and certain other actions, require
<span style="color: #74b3f2">
media
</span>
as payment.
</p>
<p>
The best I can figure, a
<span style="color: #b38ef3">
Hex
</span>
is a little bit like a plan of action presented to Nature-- in this analogy, the
<span style="color: #74b3f2">
media
</span>
is used to provide the arguments to back it up, so Nature will accept your plan and carry it out.
</p>
<br/>
<p>
That aside, it doesn't seem like anyone has done much research on exactly how
<i>
much
</i>
any particular piece of
<a href="#items/amethyst">
<span style="color: #b0b">
amethyst
</span>
</a>
is valued. The best I can tell, an
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Shard
</span>
</a>
is worth about five pieces of
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
, and a
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst Crystal
</span>
</a>
is worth about ten.
</p>
<p>
Strangely enough, it seems like no other form of
<a href="#items/amethyst">
<span style="color: #b0b">
amethyst
</span>
</a>
is suitable to be used in the casting of a
<span style="color: #b38ef3">
Hex
</span>
. I suspect that whole blocks or crystals are too solid to be easily unraveled into
<span style="color: #74b3f2">
media
</span>
.
</p>
<br/>
<p>
It's also worth noting that each action will consume the
<span style="color: #74b3f2">
media
</span>
it needs immediately, rather than all at once when the Hex finishes. Also, an action will always consume entire items-- an action that only requires one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
's worth of
<span style="color: #74b3f2">
media
</span>
will consume an entire
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst Crystal
</span>
</a>
, if that's all that's present in my inventory.
</p>
<p>
Thus, it might be a good idea to bring dust for spellcasting too-- waste not, want not...
</p>
<br/>
<p>
I should also be careful to make sure I actually have enough Amethyst in my inventory-- some old texts say that Nature is happy to use one's own mind as payment instead. They describe the feeling as awful but strangely euphoric, "[...] an effervescent dissolution into light and energy..." Perhaps that's why all the old practitioners of the art went mad. I can't imagine burning pieces of my mind for power is
<i>
healthy
</i>
.
</p>
<br/>
<p>
Maybe something's changed, though. In my experiments, I've never managed to do it; if I run out of
<span style="color: #74b3f2">
media
</span>
, the spell will simply fail to cast, as if some barrier is blocking it from harming me.
</p>
<p>
It would be interesting to get to the bottom of that mystery, but for now I suppose it'll keep me safe.
</p>
<br/>
<p>
I have also found an amusing tidbit on why so many practitioners of magic in general seem to go mad, which I may like as some light and flavorful reading not canonical to my world.
</p>
<p>
<i>
Content Warning: some body horror and suggestive elements.
</i>
</p>
<h4 class="linkout">
<a href="https://goblinpunch.blogspot.com/2014/05/a-digression-about-wizards.html">
Goblin Punch
</a>
</h4>
<br/>
<p>
Finally, it seems spells have a maximum range of influence, about 32 blocks from my position. Trying to affect anything outside of that will cause the spell to fail.
</p>
<p>
Despite this, if I have a player's reference, I can affect them from anywhere. This only applies to affecting them directly, though; I cannot use this to affect the world around them if they're outside of my range.
<br/>
I ought to be careful when giving out a reference like that. While friendly
<span style="color: #b38ef3">
Hexcasters
</span>
could use them to great effect and utility, I shudder to think of what someone malicious might do with this.
</p>
<br/>
</div>
<div id="casting/vectors">
<h3 class="entry-title page-header">
A Primer on Vectors
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting/vectors" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
It seems I will need to be adroit with vectors if I am to get anywhere in my studies. I have compiled some resources here on vectors if I find I do not know how to work with them.
</p>
<p>
First off, an enlightening video on the topic.
</p>
<h4 class="linkout">
<a href="https://www.youtube.com/watch?v=fNk_zzaMoSs">
3blue1brown
</a>
</h4>
<br/>
<p>
Additionally, it seems that the mages who manipulated
<span style="color: #490">
Psi energy
</span>
(the so-called "spellslingers"), despite their poor naming sense, had some quite-effective lessons on vectors to teach their acolytes. I've taken the liberty of linking to one of their texts on the next page.
</p>
<p>
They seem to have used different language for their spellcasting:
</p>
<p class="fake-li">
A "Spell Piece" was their name for an action;
</p>
<p class="fake-li">
a "Trick" was their name for a spell; and
</p>
<p class="fake-li">
an "Operator" was their name for a non-spell action.
</p>
<br/>
<p>
Link here.
</p>
<h4 class="linkout">
<a href="https://psi.vazkii.us/codex.php#vectorPrimer">
Psi Codex
</a>
</h4>
<br/>
</div>
<div id="casting/mishaps">
<h3 class="entry-title page-header">
Mishaps
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting/mishaps" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Unfortunately, I am not (yet) a perfect being. I make mistakes from time to time in my study and casting of
<span style="color: #b38ef3">
Hexes
</span>
; for example, misdrawing a pattern, or trying to an invoke an action with the wrong iotas. And Nature usually doesn't look too kindly on my mistakes-- causing what is called a
<i>
mishap
</i>
.
</p>
<br/>
<p>
A pattern that causes a mishap will glow red in my grid. Depending on the type of mistake, I can also expect a certain deleterious effect and a spray of red and colorful sparks as the mishandled
<span style="color: #74b3f2">
media
</span>
curdles into light of a given color.
</p>
<p>
I also get a helpful error message in my chat, but a nagging feeling tells that will change once the "mod updates," whatever that means. I shouldn't rely on always having it.
</p>
<br/>
<p>
Fortunately, although the bad effects of mishaps are certainly
<i>
annoying
</i>
, none of them are especially destructive in the long term. Nothing better to do than dust myself off and try again ... but I should strive for better anyways.
</p>
<p>
Following is a list of mishaps I have compiled.
</p>
<br/>
<h4>
Invalid Pattern
</h4>
<p>
The pattern drawn is not associated with any action.
</p>
<p>
Causes yellow sparks, and a
<a href="#casting/influences">
<span style="color: #fc77be">
Garbage
</span>
</a>
will be pushed to the top of my stack.
</p>
<br/>
<h4>
Not Enough Iotas
</h4>
<p>
The action required more iotas than were on the stack.
</p>
<p>
Causes light gray sparks, and as many
<a href="#casting/influences">
<span style="color: #fc77be">
Garbages
</span>
</a>
as would be required to fill up the argument count will be pushed.
</p>
<br/>
<h4>
Incorrect Iota
</h4>
<p>
The action that was executed expected an iota of a certain type for an argument, but it got something invalid. If multiple iotas are invalid, the error message will only tell me about the error deepest in the stack.
</p>
<p>
Causes dark gray sparks, and the invalid iota will be replaced with
<a href="#casting/influences">
<span style="color: #fc77be">
Garbage
</span>
</a>
.
</p>
<br/>
<h4>
Vector Out of Ambit
</h4>
<p>
The action tried to affect the world at a point that was out of my range.
</p>
<p>
Causes magenta sparks, and the items in my hands will be yanked out and flung towards the offending location.
</p>
<br/>
<h4>
Entity Out of Ambit
</h4>
<p>
The action tried to affect an entity that was out of my range.
</p>
<p>
Causes pink sparks, and the items in my hands will be yanked out and flung towards the offending entity.
</p>
<br/>
<h4>
Entity is Immune
</h4>
<p>
The action tried to affect an entity that cannot be altered by it.
</p>
<p>
Causes blue sparks, and the items in my hands will be yanked out and flung towards the offending entity.
</p>
<br/>
<h4>
Mathematical Error
</h4>
<p>
The action did something offensive to the laws of mathematics, such as dividing by zero.
</p>
<p>
Causes red sparks, pushes a
<a href="#casting/influences">
<span style="color: #fc77be">
Garbage
</span>
</a>
to my stack, and my mind will be ablated, stealing half the vigor I have remaining. It seems that Nature takes offense to such operations, and divides
<i>
me
</i>
in retaliation.
</p>
<br/>
<h4>
Incorrect Item
</h4>
<p>
The action requires some sort of item, but the item I supplied was not suitable.
</p>
<p>
Causes brown sparks. If the offending item was in my hand, it will be flung to the floor. If it was in entity form, it will be flung in the air.
</p>
<br/>
<h4>
Incorrect Block
</h4>
<p>
The action requires some sort of block at a target location, but the block supplied was not suitable.
</p>
<p>
Causes bright green sparks, and causes an ephemeral explosion at the given location. The explosion doesn't seem to harm me, the world, or anything else though; it's just startling.
</p>
<br/>
<h4>
Hasty Retrospection
</h4>
<p>
I attempted to draw
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospection
</span>
</a>
without first drawing
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
Introspection
</span>
</a>
.
</p>
<p>
Causes orange sparks, and pushes the pattern for
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospection
</span>
</a>
to the stack as a pattern iota.
</p>
<br/>
<h4>
Delve Too Deep
</h4>
<p>
Evaluated too many spells with meta-evaluation from one spell.
</p>
<p>
Causes dark blue sparks, and chokes all the air out of me.
</p>
<br/>
<h4>
Transgress Other
</h4>
<p>
I attempted to
<a href="#patterns/readwrite@hexcasting:write">
<span style="color: #fc77be">
save a reference
</span>
</a>
to another player to a permanent medium.
</p>
<p>
Causes black sparks, and robs me of my sight for approximately one minute.
</p>
<br/>
<h4>
Disallowed Action
</h4>
<p>
I tried to cast an action that has been disallowed by a server administrator.
</p>
<p>
Causes black sparks.
</p>
<br/>
<h4>
Catastrophic Failure
</h4>
<p>
A bug in the mod caused an iota of an invalid type or otherwise caused the spell to crash.
<a href="https://github.com/gamma-delta/HexMod/issues">
Please open a bug report!
</a>
</p>
<p>
Causes black sparks.
</p>
<br/>
</div>
<div id="casting/stack">
<h3 class="entry-title page-header">
Stacks
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting/stack" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
A
<span style="color: #490">
Stack
</span>
, also known as a "LIFO", is a concept borrowed from computer science. In short, it's a collection of things designed so that you can only interact with the most recently used thing.
</p>
<p>
Think of a stack of plates, where new plates are added to the top: if you want to interact with a plate halfway down the stack, you have to remove the plates above it in order to get ahold of it.
</p>
<br/>
<p>
Because a stack is so simple, there's only so many things you can do with it:
</p>
<p class="fake-li">
<i>
Adding something to it
</i>
, known formally as pushing,
</p>
<p class="fake-li">
<i>
Removing the last added element
</i>
, known as popping, or
</p>
<p class="fake-li">
<i>
Examining or modifying the last added element
</i>
, known as peeking.
<br/>
We call the last-added element the "top" of the stack, in accordance with the dinner plate analogy.
</p>
<p>
As an example, if we push 1 to a stack, then push 2, then pop, the top of the stack is now 1.
</p>
<br/>
<p>
Actions are (on the most part) restricted to interacting with the casting stack in these ways. They will pop some iotas they're interested in (known as "arguments" or "parameters"), process them, and push some number of results.
</p>
<p>
Of course, some actions (e.g.
<a href="#patterns/basics@hexcasting:get_caster">
<span style="color: #fc77be">
Mind's Reflection
</span>
</a>
) might pop no arguments, and some actions (particularly spells) might push nothing afterwards.
</p>
<br/>
<p>
Even more complicated actions can be expressed in terms of pushing, popping, and peeking. For example,
<a href="#patterns/stackmanip@hexcasting:swap">
<span style="color: #fc77be">
Jester's Gambit
</span>
</a>
swaps the top two items of the stack. This can be thought of as popping two items and pushing them in opposite order. For another,
<a href="#patterns/stackmanip@hexcasting:duplicate">
<span style="color: #fc77be">
Gemini Decomposition
</span>
</a>
duplicates the top of the stack-- in other words, it peeks the stack and pushes a copy of what it finds.
</p>
<br/>
</div>
<div id="casting/naming">
<h3 class="entry-title page-header">
Naming Actions
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting/naming" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
The names given to actions by the ancients were certainly peculiar, but I think there's a certain kind of logic to them.
</p>
<p>
There seem to be certain groups of actions with common names, named for the number of iotas they remove from and add to the stack.
</p>
<br/>
<p>
</p>
<p class="fake-li">
A
<span style="color: #490">
Reflection
</span>
pops nothing and pushes one iota.
</p>
<p class="fake-li">
A
<span style="color: #490">
Purification
</span>
pops one and pushes one.
</p>
<p class="fake-li">
A
<span style="color: #490">
Distillation
</span>
pops two and pushes one.
</p>
<p class="fake-li">
An
<span style="color: #490">
Exaltation
</span>
pops three or more and pushes one.
</p>
<p class="fake-li">
A
<span style="color: #490">
Decomposition
</span>
pops one argument and pushes two.
</p>
<p class="fake-li">
A
<span style="color: #490">
Disintegration
</span>
pops one and pushes three or more.
</p>
<p class="fake-li">
Finally, a
<span style="color: #490">
Gambit
</span>
pushes or pops some other number (or rearranges the stack in some other manner).
</p>
<br/>
<p>
Spells seem to be exempt from this nomenclature and are more or less named after what they do-- after all, why call it a
<span style="color: #fc77be">
Demoman's Gambit
</span>
when you could just say
<a href="#patterns/spells/basic@hexcasting:explode">
<span style="color: #fc77be">
Explosion
</span>
</a>
?
</p>
<br/>
</div>
<div id="casting/influences">
<h3 class="entry-title page-header">
Influences
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting/influences" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Influences are ... strange, to say the least. Whereas most iotas seem to represent something about the world, influences represent something more... abstract, or formless.
</p>
<p>
For example, one influence I've named
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
seems to represent nothing at all. It's created when there isn't a suitable answer to a question asked, such as an
<a href="#patterns/basics@hexcasting:raycast">
<span style="color: #fc77be">
Archer's Distillation
</span>
</a>
facing the sky.
</p>
<br/>
<p>
In addition, I've discovered a curious triplet of influences I've named
<a href="#patterns/patterns_as_iotas@hexcasting:escape">
<span style="color: #fc77be">
Consideration
</span>
</a>
,
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
Introspection
</span>
</a>
, and
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospection
</span>
</a>
. They seem to have properties of both patterns and other influences, yet act very differently. I can use these to add patterns to my stack as iotas, instead of matching them to actions.
<a href="#patterns/patterns_as_iotas">
My notes on the subject are here
</a>
.
</p>
<br/>
<p>
Finally, there seems to be an infinite family of influences that just seem to be a tangled mess of
<span style="color: #74b3f2">
media
</span>
. I've named them
<a href="#casting/influences">
<span style="color: #fc77be">
Garbage
</span>
</a>
, as they are completely useless. They seem to appear in my stack at various places in response to
<a href="#casting/mishaps">
<span style="color: #490">
mishaps
</span>
</a>
, and appear to my senses as a nonsense jumble.
</p>
<br/>
</div>
<div id="casting/mishaps2">
<div class="spoilered">
<h3 class="entry-title page-header">
Enlightened Mishaps
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#casting/mishaps2" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I have discovered new and horrifying modes of failure. I must not succumb to them.
</p>
<br/>
<h4>
Inert Mindflay
</h4>
<p>
Attempted to flay the mind of something that I have either already used, or of a character not suitable for the target block.
</p>
<p>
Causes dark green sparks, and kills the subject. If a villager sees that, I doubt they would look on it favorably.
</p>
<br/>
<h4>
Lack Spell Circle
</h4>
<p>
Tried to cast an action requiring a spell circle without a spell circle.
</p>
<p>
Causes light blue sparks, and upends my inventory onto the ground.
</p>
<br/>
<h4>
Lack Akashic Record
</h4>
<p>
Tried to access an
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Akashic Record
</span>
</a>
at a location where there isn't one.
</p>
<p>
Causes purple sparks, and steals away some of my experience.
</p>
<br/>
</div>
</div>
</section>
<section id="items">
<h2 class="category-title page-header">
Items
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
I devote this section to the magical and mysterious items I might encounter in my studies.
</p>
<p>
It seems like many of these items have uses when held alongside my
<a href="#items/staff">
<span style="color: #b0b">
staff
</span>
</a>
. I suppose I will have to choose what goes in my other hand carefully.
</p>
<div id="items/amethyst">
<h3 class="entry-title page-header">
Amethyst
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/amethyst" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="items/amethyst@dust">
<h4 class="spotlight-title page-header">
Amethyst Dust
</h4>
<p>
It seems that I'll find three different forms of amethyst when breaking a crystal inside a geode. The smallest denomination seems to be a small pile of shimmering dust, worth a relatively small amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<div id="items/amethyst@shard">
<h4 class="spotlight-title page-header">
Amethyst Shard
</h4>
<p>
The second is a whole shard of amethyst, of the type non-
<span style="color: #b38ef3">
Hexcasters
</span>
might be used to. This has about as much
<span style="color: #74b3f2">
media
</span>
inside as five
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="items/amethyst@charged">
<h4 class="spotlight-title page-header">
Charged Amethyst
</h4>
<p>
Finally, I'll rarely find a large crystal crackling with energy. This has about as much
<span style="color: #74b3f2">
media
</span>
inside as ten units of
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
(or two
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Shards
</span>
</a>
).
</p>
</div>
<br/>
<p>
<i>
The old man sighed and raised a hand toward the fire. He unlocked a part of his brain that held the memories of the mountains around them. He pulled the energies from those lands, as he learned to do in Terisia City with Drafna, Hurkyl, the archimandrite, and the other mages of the Ivory Towers. He concentrated, and the flames writhed as they rose from the logs, twisting upon themselves until they finally formed a soft smile.
</i>
</p>
<br/>
</div>
<div id="items/staff">
<h3 class="entry-title page-header">
Staff
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/staff" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
A
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
is my entry point into casting all
<span style="color: #b38ef3">
Hexes
</span>
, large and small. By holding it and pressing
<span style="color: #490">
Right Click
</span>
, I begin casting a
<span style="color: #b38ef3">
Hex
</span>
; then I can click and drag to draw patterns.
</p>
<p>
It's little more than a chunk of
<span style="color: #74b3f2">
media
</span>
on the end of a stick; that's all that's needed, after all.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: Several crafting recipes, for the
<code>
Oak Staff
</code>
,
<code>
Spruce Staff
</code>
,
<code>
Birch Staff
</code>
,
<code>
Jungle Staff
</code>
,
<code>
Acacia Staff
</code>
,
<code>
Dark Oak Staff
</code>
,
<code>
Crimson Staff
</code>
,
<code>
Warped Staff
</code>
,
<code>
Edified Staff
</code>
.
</blockquote>
<p>
<i>
Don't fight; flame, light; ignite; burn bright.
</i>
</p>
<br/>
</div>
<div id="items/lens">
<h3 class="entry-title page-header">
Scrying Lens
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/lens" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<span style="color: #74b3f2">
Media
</span>
can have peculiar effects on any type of information, in specific circumstances. Coating a glass in a thin film of it can lead to ... elucidating insights.
</p>
<p>
By holding a
<a href="#items/lens">
<span style="color: #b0b">
Scrying Lens
</span>
</a>
in my hand, certain blocks will display additional information when I look at them.
</p>
<br/>
<p>
For example, looking at a piece of
<span style="color: #b0b">
Redstone
</span>
will display its signal strength. I suspect I will discover other blocks with additional insight as my studies into my art progress.
</p>
<p>
In addition, holding it while casting using a
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
will shrink the spacing between dots, allowing me to draw more on my grid.
</p>
<p>
I can also wear it on my head as a strange sort of monocle. This reveals information, but won't shrink my grid. No matter. There must be a way to have both...
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Scrying Lens
</code>
.
</blockquote>
<p>
<i>
You must learn... to see what you are looking at.
</i>
</p>
<br/>
</div>
<div id="items/focus">
<h3 class="entry-title page-header">
Focus
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/focus" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
A
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
can store a single iota.
</p>
<p>
When I craft it, it holds the
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
influence by default. Using
<a href="#patterns/readwrite@hexcasting:write">
<span style="color: #fc77be">
Scribe's Gambit
</span>
</a>
while holding a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
in my other hand will remove the top of the stack and save it into the
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
. Using
<a href="#patterns/readwrite@hexcasting:read">
<span style="color: #fc77be">
Scribe's Reflection
</span>
</a>
will copy whatever iota's in the
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
and add it to the stack.
</p>
<br/>
<p>
It occurs to me that I could conceivably store a whole list of patterns in a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
, then recall them and evaluate them with
<a href="#patterns/meta@hexcasting:eval">
<span style="color: #fc77be">
Hermes' Gambit
</span>
</a>
. This way I can cast complex spells, or parts of spells, without having to draw them over and over.
</p>
<p>
I could use this like a slightly less convenient
<a href="#items/hexcasting@artifact">
<span style="color: #b0b">
Artifact
</span>
</a>
, but I think I could get much better dividends by putting common "phrases" in a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
, like the patterns for figuring out where I'm looking.
</p>
<br/>
<p>
Also, if I store an entity in a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
and try to recall it after the referenced entity has died or otherwise disappeared, the
<a href="#patterns/readwrite@hexcasting:read">
<span style="color: #fc77be">
Scribe's Reflection
</span>
</a>
will add
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
to the stack instead.
</p>
<p>
Finally, it seems if I wish to protect a
<a href="#items/focus">
<span style="color: #b0b">
focus
</span>
</a>
from accidentally being overwritten, I can seal it with wax by crafting it with a
<span style="color: #b0b">
Honeycomb
</span>
. Attempting to use
<a href="#patterns/readwrite@hexcasting:write">
<span style="color: #fc77be">
Scribe's Gambit
</span>
</a>
on a sealed focus will fail.
<a href="#patterns/spells/hexcasting@hexcasting:erase">
<span style="color: #fc77be">
Erase Item
</span>
</a>
will remove this seal along with the contents.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Focus
</code>
.
</blockquote>
<p>
<i>
Poison apples, poison worms.
</i>
</p>
<br/>
</div>
<div id="items/abacus">
<h3 class="entry-title page-header">
Abacus
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/abacus" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Although there are
<a href="#patterns/numbers">
<span style="color: #fc77be">
patterns for drawing numbers
</span>
</a>
, I find them ... cumbersome, to say the least.
</p>
<p>
Fortunately, the old masters of my craft invented an ingenious device called an
<a href="#items/abacus">
<span style="color: #b0b">
Abacus
</span>
</a>
to provide numbers to my casting. I simply set the number to what I want, then read the value using
<a href="#patterns/readwrite@hexcasting:read">
<span style="color: #fc77be">
Scribe's Reflection
</span>
</a>
, just like I would read a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
.
</p>
<br/>
<p>
To operate one, I simply hold it, sneak, and scroll. If in my main hand, the number will increment or decrement by 1, or 10 if I am also holding Control/Command. If in my off hand, the number will increment or decrement by 0.1, or 0.001 if I am also holding Control/Command.
</p>
<p>
I can shake the abacus to reset it to zero by sneak-right-clicking.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Abacus
</code>
.
</blockquote>
<p>
<i>
Mathematics? That's for eggheads!
</i>
</p>
<br/>
</div>
<div id="items/spellbook">
<h3 class="entry-title page-header">
Spellbook
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/spellbook" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
A
<a href="#items/spellbook">
<span style="color: #b0b">
Spellbook
</span>
</a>
is the culmination of my art-- it acts like an entire library of
<a href="#items/focus">
<span style="color: #b0b">
Foci
</span>
</a>
. Up to
<span style="color: #490">
sixty-four
</span>
of them, to be exact.
</p>
<p>
Each page can hold a single iota, and I can select the active page (the page that iotas are saved to and copied from) by sneak-scrolling while holding it, or simply holding it in my off-hand and scrolling while casting a
<span style="color: #b38ef3">
Hex
</span>
.
</p>
<br/>
<p>
Like a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
, there exists a simple method to prevent accidental overwriting. Crafting it with a
<span style="color: #b0b">
Honeycomb
</span>
will lacquer the current page, preventing
<a href="#patterns/readwrite@hexcasting:write">
<span style="color: #fc77be">
Scribe's Gambit
</span>
</a>
from modifying its contents. Also like a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
, using
<a href="#patterns/spells/hexcasting@hexcasting:erase">
<span style="color: #fc77be">
Erase Item
</span>
</a>
will remove the lacquer along with the page's contents.
</p>
<p>
I can also name each page individually in an anvil. Naming it will change only the name of the currently selected page, for easy browsing.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Spellbook
</code>
.
</blockquote>
<p>
<i>
Wizards love words. Most of them read a great deal, and indeed one strong sign of a potential wizard is the inability to get to sleep without reading something first.
</i>
</p>
<br/>
</div>
<div id="items/scroll">
<h3 class="entry-title page-header">
Scrolls
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/scroll" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
A
<a href="#items/scroll">
<span style="color: #b0b">
Scroll
</span>
</a>
is a convenient method of sharing a pattern with others. I can copy a pattern onto one with
<a href="#patterns/readwrite@hexcasting:write">
<span style="color: #fc77be">
Scribe's Gambit
</span>
</a>
, after which it will display in a tooltip.
</p>
<p>
I can also place them on the wall as decoration or edification, like a painting, in sizes from 1x1 to 3x3 blocks. Using
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
on such a scroll will have it display the stroke order.
</p>
<br/>
<p>
In addition, I can also find so-called
<a href="#items/scroll">
<span style="color: #b0b">
Ancient Scrolls
</span>
</a>
in the dungeons and strongholds of the world. These contain the stroke order of
<span style="color: #490">
Great Spells
</span>
, powerful magicks rumored to be too powerful for the hands and minds of mortals...
</p>
<p>
If those "mortals" couldn't cast them, I'm not sure they deserve to know them.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Small Scroll
</code>
and
<code>
Medium Scroll
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Large Scroll
</code>
.
</blockquote>
<p>
<i>
I write upon clean white parchment with a sharp quill and the blood of my students, divining their secrets.
</i>
</p>
<br/>
</div>
<div id="items/slate">
<h3 class="entry-title page-header">
Slates
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/slate" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<a href="#items/slate">
<span style="color: #b0b">
Slates
</span>
</a>
are similar to
<a href="#items/scroll">
<span style="color: #b0b">
Scrolls
</span>
</a>
; I can copy a pattern to them and place them in the world to display the pattern.
</p>
<p>
However, I have read vague tales of grand assemblies of
<a href="#items/slate">
<span style="color: #b0b">
Slates
</span>
</a>
, used to cast
<a href="#greatwork/spellcircles">
<span style="color: #490">
great rituals
</span>
</a>
more powerful than can be handled by a
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
.
</p>
<br/>
<p>
Perhaps this knowledge will be revealed to me with time. But for now, I suppose they make a quaint piece of decor.
</p>
<p>
At the least, they can be placed on any side of a block, unlike
<a href="#items/scroll">
<span style="color: #b0b">
Scrolls
</span>
</a>
.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Blank Slate
</code>
.
</blockquote>
<p>
<i>
This is the letter "a." Learn it.
</i>
</p>
<br/>
<p>
I'm also aware of other types of
<a href="#items/slate">
<span style="color: #b0b">
Slates
</span>
</a>
, slates that do not contain patterns but seem to be inlaid with other ... strange ... oddities. It hurts my brain to think about them, as if my thoughts get bent around their designs, following their pathways, bending and wefting through their labyrinthine depths, through and through and through channeled through and processed and--
</p>
<p>
... I almost lost myself. Maybe I should postpone my studies of those.
</p>
<br/>
</div>
<div id="items/hexcasting">
<h3 class="entry-title page-header">
Casting Items
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/hexcasting" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Although the flexibility of casting
<span style="color: #b38ef3">
Hexes
</span>
"on the go" with my
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
is quite helpful, it's a huge pain to have to wave it around repeatedly just to accomplish a basic task. If I could save a common spell for later reuse, it would simplify things a lot-- and allow me to share my
<span style="color: #b38ef3">
Hexes
</span>
with friends, too.
</p>
<br/>
<p>
To do this, I can craft one of three types of magic items:
<a href="#items/hexcasting">
<span style="color: #b0b">
Cyphers
</span>
</a>
,
<a href="#items/hexcasting">
<span style="color: #b0b">
Trinkets
</span>
</a>
, or
<a href="#items/hexcasting">
<span style="color: #b0b">
Artifacts
</span>
</a>
. All of them hold the patterns of a given
<span style="color: #b38ef3">
Hex
</span>
inside, along with a small battery containing
<span style="color: #74b3f2">
media
</span>
.
</p>
<p>
Simply holding one and pressing
<span style="color: #490">
Right Click
</span>
will cast the patterns inside, as if the holder had cast them out of a staff, using its internal battery.
</p>
<br/>
<p>
Each item has its own quirks:
</p>
<p>
<a href="#items/hexcasting">
<span style="color: #b0b">
Cyphers
</span>
</a>
are fragile, destroyed after their internal
<span style="color: #74b3f2">
media
</span>
reserves are gone, and
<i>
cannot
</i>
be recharged;
</p>
<p>
<a href="#items/hexcasting">
<span style="color: #b0b">
Trinkets
</span>
</a>
can be cast as much as the holder likes, as long as there's enough
<span style="color: #74b3f2">
media
</span>
left, but become useless afterwards until recharged;
</p>
<br/>
<p>
<a href="#items/hexcasting">
<span style="color: #b0b">
Artifacts
</span>
</a>
are the most powerful of all-- after their
<span style="color: #74b3f2">
media
</span>
is depleted, they can use
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst
</span>
</a>
from the holder's inventory to pay for the
<span style="color: #b38ef3">
Hex
</span>
, just as I do when casting with a
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
. Of course, this also means the spell might consume their mind if there's not enough
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst
</span>
</a>
.
</p>
<p>
Once I've made an empty magic item in a mundane crafting bench, I infuse the
<span style="color: #b38ef3">
Hex
</span>
into it using (what else but) a spell appropriate to the item.
<a href="#patterns/spells/hexcasting">
I've catalogued the patterns here.
</a>
</p>
<br/>
<p>
Each infusion spell requires an entity and a list of patterns on the stack. The entity must be a
<span style="color: #74b3f2">
media
</span>
-holding item entity (i.e.
<a href="#items/amethyst">
<span style="color: #b0b">
amethyst
</span>
</a>
crystals, dropped on the ground); the entity is consumed and forms the battery.
</p>
<p>
Usefully, it seems that the
<span style="color: #74b3f2">
media
</span>
in the battery is not consumed in chunks as it is when casting with a
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
-- rather, the
<span style="color: #74b3f2">
media
</span>
"melts down" into one continuous pool. Thus, if I store a
<span style="color: #b38ef3">
Hex
</span>
that only costs one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
's worth of media, a
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Crystal
</span>
</a>
used as the battery will allow me to cast it 10 times.
</p>
<br/>
<div id="items/hexcasting@cypher_trinket">
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Cypher
</code>
and
<code>
Trinket
</code>
.
</blockquote>
</div>
<br/>
<div id="items/hexcasting@artifact">
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Artifact
</code>
.
</blockquote>
<p>
<i>
We have a saying in our field: "Magic isn't". It doesn't "just work," it doesn't respond to your thoughts, you can't throw fireballs or create a roast dinner from thin air or turn a bunch of muggers into frogs and snails.
</i>
</p>
</div>
<br/>
</div>
<div id="items/phials">
<h3 class="entry-title page-header">
Phials of Media
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/phials" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I find it quite ... irritating, how Nature refuses to give me change for my work. If all I have on hand is
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
, even the tiniest
<a href="#patterns/basics@hexcasting:raycast">
<span style="color: #fc77be">
Archer's Purification
</span>
</a>
will consume the entire crystal, wasting the remaining
<span style="color: #74b3f2">
media
</span>
.
</p>
<p>
Fortunately, it seems I've found a way to somewhat allay this problem.
</p>
<br/>
<p>
I've found old scrolls describing a
<span style="color: #b0b">
Glass Bottle
</span>
infused with
<span style="color: #74b3f2">
media
</span>
. When casting
<span style="color: #b38ef3">
Hexes
</span>
, my spells would then draw
<span style="color: #74b3f2">
media
</span>
out of the phial. The liquid form of the
<span style="color: #74b3f2">
media
</span>
would let me take exact change, so to speak; nothing would be wasted. It's quite like the internal battery of a
<a href="#items/hexcasting">
<span style="color: #b0b">
Trinket
</span>
</a>
, or similar; I can even
<a href="#patterns/spells/hexcasting@hexcasting:recharge">
<span style="color: #fc77be">
Recharge
</span>
</a>
them in the same manner.
</p>
<br/>
<p>
Unfortunately, the art of actually
<i>
making
</i>
the things seems to have been lost to time. I've found a
<a href="#patterns/great_spells/make_battery@hexcasting:craft/battery">
<span style="color: #490">
hint at the pattern used to craft it
</span>
</a>
, but the technique is irritatingly elusive, and I can't seem to do it successfully. I suspect I will figure it out with study and practice, though. For now, I will simply deal with the wasted
<span style="color: #74b3f2">
media
</span>
...
</p>
<p>
But I won't settle for it forever.
</p>
<br/>
<h4 class="spotlight-title page-header">
Phial of Media
</h4>
<p>
<i>
Drink the milk.
</i>
</p>
<br/>
</div>
<div id="items/pigments">
<h3 class="entry-title page-header">
Pigments
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/pigments" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Although their names were lost to time, the old practitioners of my art seem to have identified themselves by a color, emblematic of them and their spells. It seems a special kind of pigment, offered to Nature in the right way, would "[...] paint one's thoughts in a manner pleasing to Nature, inducing a miraculous change in personal colour."
</p>
<br/>
<p>
I'm not certain on the specifics of how it works, but I believe I have isolated the formulae for many different colors of pigments. To use a pigment, I hold it in one hand while casting
<a href="#patterns/spells/colorize">
<span style="color: #fc77be">
Internalize Pigment
</span>
</a>
with the other, consuming the pigment and marking my mind with its color.
</p>
<p>
The pigments seem to affect the color of the sparks of media emitted out of a staff when I cast a
<span style="color: #b38ef3">
Hex
</span>
, as well as my
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: Several crafting recipes, for the
<code>
White Pigment
</code>
,
<code>
Orange Pigment
</code>
,
<code>
Magenta Pigment
</code>
,
<code>
Light Blue Pigment
</code>
,
<code>
Yellow Pigment
</code>
,
<code>
Lime Pigment
</code>
,
<code>
Pink Pigment
</code>
,
<code>
Gray Pigment
</code>
,
<code>
Light Gray Pigment
</code>
,
<code>
Cyan Pigment
</code>
,
<code>
Purple Pigment
</code>
,
<code>
Blue Pigment
</code>
,
<code>
Brown Pigment
</code>
,
<code>
Green Pigment
</code>
,
<code>
Red Pigment
</code>
.
</blockquote>
<p>
Pigments in all the colors of the rainbow.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Agender Pigment
</code>
and
<code>
Aroace Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Aromantic Pigment
</code>
and
<code>
Asexual Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Bisexual Pigment
</code>
and
<code>
Demiboy Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Demigirl Pigment
</code>
and
<code>
Gay Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Genderfluid Pigment
</code>
and
<code>
Genderqueer Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Intersex Pigment
</code>
and
<code>
Lesbian Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Non-Binary Pigment
</code>
and
<code>
Pansexual Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Plural Pigment
</code>
and
<code>
Transgender Pigment
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Soulglimmer Pigment
</code>
.
</blockquote>
<p>
And finally, a pigment with a color wholly unique to me.
</p>
<p>
<i>
And all the colors I am inside have not been invented yet.
</i>
</p>
<br/>
</div>
<div id="items/edified">
<h3 class="entry-title page-header">
Edified Trees
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/edified" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
By infusing
<span style="color: #74b3f2">
media
</span>
into a sapling via the use of
<a href="#patterns/spells/blockworks@hexcasting:edify">
<span style="color: #fc77be">
Edify Sapling
</span>
</a>
, I can create what is called an
<a href="#items/edified">
<span style="color: #490">
Edified Tree
</span>
</a>
. They tend to be tall and pointy, with ridged bark and wood that grows in a strange spiral pattern. Their leaves come in three pretty colors.
</p>
<br/>
<p>
I would assume the wood would have some properties relevant to
<span style="color: #b38ef3">
Hexcasting
</span>
. But, if it does, I cannot seem to find them. For all intents and purposes it appears to be just wood, albeit of a very strange color.
</p>
<p>
I suppose for now I will use it for decoration; the full suite of standard wood blocks can be crafted from them.
</p>
<p>
Of course, I can strip them with an axe as well.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Edified Planks
</code>
and
<code>
Edified Wood
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Edified Stairs
</code>
and
<code>
Edified Slab
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Edified Panel
</code>
and
<code>
Edified Tile
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Edified Door
</code>
and
<code>
Edified Trapdoor
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Edified Button
</code>
and
<code>
Edified Pressure Plate
</code>
.
</blockquote>
<br/>
<p>
<i>
Their smooth trunks, with white bark, gave the effect of enormous columns sustaining the weight of an immense foliage, full of shade and silence.
</i>
</p>
<br/>
</div>
<div id="items/jeweler_hammer">
<h3 class="entry-title page-header">
Jeweler's Hammer
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/jeweler_hammer" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
After being careless with the sources of my
<span style="color: #74b3f2">
media
</span>
one too many times, I have devised a tool to work around my clumsiness.
</p>
<p>
Using the delicate nature of crystallized
<span style="color: #74b3f2">
media
</span>
as a fixture for a pickaxe, I can create the
<a href="#items/jeweler_hammer">
<span style="color: #b0b">
Jeweler's Hammer
</span>
</a>
. It acts like an
<span style="color: #b0b">
Iron Pickaxe
</span>
, for the most part, but can't break anything that takes up an entire block's space.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Jeweler's Hammer
</code>
.
</blockquote>
<p>
<i>
Carefully, she cracked the half ruby, letting the spren escape.
</i>
</p>
<br/>
</div>
<div id="items/decoration">
<h3 class="entry-title page-header">
Decorative Blocks
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#items/decoration" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
In the course of my studies I have discovered some building blocks and trifles that I may find aesthetically pleasing. I've compiled the methods of making them here.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Block of Slate
</code>
and
<code>
Block of Slate
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Scroll Paper
</code>
and
<code>
Ancient Scroll Paper
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Paper Lantern
</code>
and
<code>
Ancient Paper Lantern
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Ancient Paper Lantern
</code>
.
</blockquote>
<p>
Brown dye works well enough to simulate the look of an
<a href="#items/scroll">
<span style="color: #b0b">
ancient scroll
</span>
</a>
.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Amethyst Tiles
</code>
.
</blockquote>
<p>
<a href="#items/decoration">
<span style="color: #b0b">
Amethyst Tiles
</span>
</a>
can also be made in a Stonecutter.
</p>
<p>
<a href="#items/decoration">
<span style="color: #b0b">
Blocks of Amethyst Dust
</span>
</a>
(next page) will fall like sand.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Block of Amethyst Dust
</code>
and
<code>
Amethyst Dust
</code>
.
</blockquote>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Amethyst Sconce
</code>
.
</blockquote>
<p>
<a href="#items/decoration">
<span style="color: #b0b">
Amethyst Sconces
</span>
</a>
emit light and particles, as well as a pleasing chiming sound.
</p>
<br/>
</div>
</section>
<section id="greatwork">
<div class="spoilered">
<h2 class="category-title page-header">
The Great Work
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#greatwork" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
I have seen... so much. I have... experienced... annihilation and deconstruction and reconstruction. I have seen the atoms of the world screaming as they were inverted and subverted and demoted to energy. I have seen I have seen I have s
<span class="obfuscated">
get stick bugged lmao
</span>
</p>
</div>
<div id="greatwork/the_work">
<div class="spoilered">
<h3 class="entry-title page-header">
The Work
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#greatwork/the_work" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I have seen so many things. Unspeakable things. Innumerable things. I could write three words and turn my mind inside-out and smear my brains across the shadowed walls of my skull to decay into fluff and nothing.
</p>
<br/>
<p>
I have seen staccato-needle patterns and acid-etched schematics written on the inside of my eyelids. They smolder there-- they dance, they taunt, they
<i>
ache
</i>
. I'm possessed by an intense
<i>
need
</i>
to draw them, create them. Form them. Liberate them from the gluey shackles of my mortal mind-- present them in their Glory to the world for all to see.
</p>
<p>
All shall see.
</p>
<p>
All will see.
</p>
<br/>
</div>
</div>
<div id="greatwork/brainsweeping">
<div class="spoilered">
<h3 class="entry-title page-header">
On the Flaying of Minds
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#greatwork/brainsweeping" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
A secret was revealed to me. I saw it. I cannot forget its horror. The idea skitters across my brain.
</p>
<p>
I believed-- oh, foolishly, I
<i>
believed
</i>
--that
<span style="color: #74b3f2">
Media
</span>
is the spare energy left over by thought. But now I
<i>
know
</i>
what it is: the energy
<i>
of
</i>
thought.
</p>
<br/>
<p>
It is produced by thinking sentience and allows sentience to think. It is a knot tying that braids into its own string. The Entity I naively anthromorphized as Nature is simply a grand such tangle, or perhaps the set of all tangles, or ... if I think it hurts I have so many synapses and all of them can think pain at once ALL OF THEM CAN SEE
</p>
<p>
I am not holding on. My notes. Quickly.
</p>
<br/>
<p>
The villagers of this world have enough consciousness left to be extracted. Place it into a block, warp it, change it. Intricate patterns caused by different patterns of thought, the abstract neural pathways of their jobs and lives mapped into the cold physic of solid atoms.
</p>
<p>
This is what
<a href="#patterns/great_spells/brainsweep">
<span style="color: #fc77be">
Flay Mind
</span>
</a>
does, the extraction. Target the villager entity and the destination block. Ten
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
for this perversion of will.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: A mind-flaying recipe producing the
<code>
Budding Amethyst
</code>
.
</blockquote>
<p>
And an application. For this flaying, any sort of villager will do, if it has developed enough. Other recipes require more specific types. NO MORE must I descend into the hellish earth for my
<span style="color: #74b3f2">
media
</span>
.
</p>
<br/>
</div>
</div>
<div id="greatwork/spellcircles">
<div class="spoilered">
<h3 class="entry-title page-header">
Spell Circles
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#greatwork/spellcircles" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I KNOW what the
<a href="#items/slate">
<span style="color: #b0b">
slates
</span>
</a>
are for. The grand assemblies lost to time. The patterns scribed on them can be actuated in sequence, automatically. Thought and power ricocheting through, one by one by one by one by one by through and through and THROUGH AND -- I must not I must not I should know better than to think that way.
</p>
<br/>
<p>
To start the ritual I need an
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
to create a self-sustaining wave of
<span style="color: #74b3f2">
media
</span>
. That wave travels along a track of
<a href="#items/slate">
<span style="color: #b0b">
slates
</span>
</a>
or other blocks suitable for the energies, one by one, collecting any patterns it finds. Once the wave circles back around to the
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
, all the patterns encountered are cast in order.
</p>
<p>
The direction the
<span style="color: #74b3f2">
media
</span>
exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.
</p>
<br/>
<p>
As a result, the outline of the spell "circle" may be any closed shape, concave or convex, and it may face any direction. In fact, with the application of certain other blocks it is possible to make a spell circle that spans all three dimensions. I doubt such an oddity has very much use, but I must allocate myself a bit of vapid levity to encourage my crude mind to continue my work.
</p>
<br/>
<p>
Miracle of miracles, the circle will withdraw
<span style="color: #74b3f2">
media
</span>
neither from my inventory nor my mind. Instead, crystallized shards of
<span style="color: #74b3f2">
media
</span>
must be provided to the
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
via hopper, or other such artifice.
</p>
<p>
The application of a
<a href="#items/lens">
<span style="color: #b0b">
Scrying Lens
</span>
</a>
will show how much
<span style="color: #74b3f2">
media
</span>
is inside an
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
, in units of dust.
</p>
<br/>
<p>
However, a spell cast from a circle does have one major limitation: it is unable to affect anything outside of the circle's bounds. That is, it cannot interact with anything outside of the cuboid of minimum size which encloses every block composing it (so a concave spell circle can still affect things in the concavity).
</p>
<br/>
<p>
There is also a limit on the number of blocks the wave can travel through before it disintegrates, but it is large enough I doubt I will have any trouble.
</p>
<p>
Conversely, there are some actions that can only be cast from a circle. Fortunately, none of them are spells; they all seem to deal with components of the circle itself. My notes on the subject are
<a href="#patterns/circle">
here
</a>
.
</p>
<br/>
<p>
I also found a sketch of a spell circle used by the ancients buried in my notes. Facing this page is my (admittedly poor) copy of it.
</p>
<p>
The patterns there would have been executed counter-clockwise, starting with
<a href="#patterns/basics@hexcasting:get_caster">
<span style="color: #fc77be">
Mind's Reflection
</span>
</a>
and ending with
<a href="#patterns/great_spells/teleport@hexcasting:teleport">
<span style="color: #fc77be">
Greater Teleport
</span>
</a>
.
</p>
<br/>
<h4>
Teleportation Circle
</h4>
<p class="img-wrapper">
<img src="https://raw.githubusercontent.com/gamma-delta/HexMod/main/Common/src/main/resources/assets/hexcasting/textures/gui/entries/spell_circle.png"/>
</p>
<br/>
</div>
</div>
<div id="greatwork/impetus">
<div class="spoilered">
<h3 class="entry-title page-header">
Impetuses
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#greatwork/impetus" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
The fluctuation of
<span style="color: #74b3f2">
media
</span>
required to actuate a spell circle is complex. Even the mortal with sharpest eyes and steadiest hands could not serve as an
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
and weave
<span style="color: #74b3f2">
media
</span>
into the self-sustaining oroboros required.
</p>
<p>
The problem is that the mind is too full of other useless
<i>
garbage
</i>
.
</p>
<br/>
<p>
At a ... metaphysical level-- I must be careful with these thoughts, I cannot lose myself, I have become too valuable --moving
<span style="color: #74b3f2">
media
</span>
moves the mind, and the mind must be moved for the process to work. But, the mind is simply too
<i>
heavy
</i>
with other thoughts to move nimbly enough.
</p>
<p>
It is like an artisan trying to repair a watch while wearing mittens.
</p>
<br/>
<p>
There are several solutions to this conundrum: through meditative techniques one can learn to blank the mind, although I am not certain a mind free enough to actuate a circle can concentrate hard enough to do the motions.
</p>
<p>
Certain unsavory compounds can create a similar effect, but I know nothing of them and do not plan to learn. I must not rely on the chemicals of my brain.
</p>
<br/>
<p>
The solution I aim for, then, is to specialize a mind. Remove it from the tyranny of nerves, clip all outputs but delicate splays of
<span style="color: #74b3f2">
media
</span>
-manipulating apparati, cauterize all inputs but the signal to start its work.
</p>
<p>
The process of
<a href="#greatwork/brainsweeping">
<span style="color: #fc77be">
mindflaying
</span>
</a>
I am now familiar with will do excellently; the mind of a villager is complex enough to do the work, but not so complex as to resist its reformation.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Empty Impetus
</code>
.
</blockquote>
<p>
First, the cradle. Although it does not work as an
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
, the flow of
<span style="color: #74b3f2">
media
</span>
in a circle will only exit out the side pointed to by the arrows. This allows me to change the plane in which the wave flows, for example.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: A mind-flaying recipe producing the
<code>
Toolsmith Impetus
</code>
.
</blockquote>
<p>
Then, to transpose the mind. Villagers of different professions will lend different actuation conditions to the resulting
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
. A
<a href="#greatwork/impetus">
<span style="color: #b0b">
Toolsmith Impetus
</span>
</a>
activates on a simple Right Click.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: A mind-flaying recipe producing the
<code>
Cleric Impetus
</code>
.
</blockquote>
<p>
A
<a href="#greatwork/impetus">
<span style="color: #b0b">
Cleric Impetus
</span>
</a>
must be bound to a player by using an item with a reference to that player, like a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
, on the block. Then, it activates when receiving a redstone signal.
</p>
<br/>
<p>
Peculiarly to this
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
, the bound player, as well as a small region around them, are always accessible to the spell circle. It's as if they were standing within the bounds of the circle, no matter how far away they might stand.
</p>
<p>
The bound player is shown when looking at a
<a href="#greatwork/impetus">
<span style="color: #b0b">
Cleric Impetus
</span>
</a>
through a
<a href="#items/lens">
<span style="color: #b0b">
Scrying Lens
</span>
</a>
.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: A mind-flaying recipe producing the
<code>
Fletcher Impetus
</code>
.
</blockquote>
<p>
A
<a href="#greatwork/impetus">
<span style="color: #b0b">
Fletcher Impetus
</span>
</a>
activates when looked at for a short time.
</p>
<br/>
</div>
</div>
<div id="greatwork/directrix">
<div class="spoilered">
<h3 class="entry-title page-header">
Directrices
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#greatwork/directrix" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Simpler than the task of creating a self-sustaining wave of
<span style="color: #74b3f2">
media
</span>
is the task of directing it. Ordinarily the wave disintegrates when coming upon a crossroads, but with a mind to guide it, an exit direction can be controlled.
</p>
<p>
This manipulation is not nearly so fine as the delicacy of actuating a spell circle. In fact, it might be possible to do it by hand... but the packaged minds I have access to now would be so very convenient.
</p>
<br/>
<p>
A
<a href="#greatwork/directrix">
<span style="color: #b0b">
Directrix
</span>
</a>
accepts a wave of
<span style="color: #74b3f2">
media
</span>
and determines to which of the arrows it will exit from, depending on the villager mind inside.
</p>
<p>
I am not certain if this idea was bestowed upon me, or if my mind is bent around the barrier enough to splint off its own ideas now... but if the idea came from my own mind, if I thought it, can it be said it was bestowed? The brain is a vessel for the mind and the mind is a vessel for ideas and the ideas vessel thought and thought sees all and knows all-- I MUST N O T
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Empty Directrix
</code>
.
</blockquote>
<p>
Firstly, a design for the cradle ... although, perhaps "substrate" would be more accurate a word. Without a mind guiding it, the output direction is determined by microscopic fluctuations in the
<span style="color: #74b3f2">
media
</span>
wave and surroundings, making it effectively random.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: A mind-flaying recipe producing the
<code>
Mason Directrix
</code>
.
</blockquote>
<p>
A
<a href="#greatwork/directrix">
<span style="color: #b0b">
Mason Directrix
</span>
</a>
switches output side based on a redstone signal. Without a signal, the exit is the
<span style="color: #74b3f2">
media
</span>
-color side; with a signal, the exit is the redstone-color side.
</p>
<br/>
</div>
</div>
<div id="greatwork/akashiclib">
<div class="spoilered">
<h3 class="entry-title page-header">
Akashic Libraries
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#greatwork/akashiclib" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I KNOW SO MUCH it is ONLY RIGHT to have a place to store it all. Information can be stored in books but it is oh so so so so
<i>
slow
</i>
to write by hand and read by eye. I demand BETTER. And so I shall MAKE better.
</p>
<p>
... I am getting worse ... do not know if I have time to write everything bursting through my head before expiring.
</p>
<br/>
<p>
The library. Here. My plans.
</p>
<p>
Like how patterns are associated with actions, I can associate my own patterns with iotas in any way I choose. An
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Akashic Record
</span>
</a>
controls the library, and each
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Akashic Bookshelf
</span>
</a>
stores one pattern mapped to one iota. These must all be directly connected together, touching, within 32 blocks. An
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Akashic Ligature
</span>
</a>
doesn't do anything but count as a connecting block, to extend the size of my library.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: A mind-flaying recipe producing the
<code>
Akashic Record
</code>
.
</blockquote>
<p>
Allocating and assigning patterns is simple but oh so boring. I have better things to do. I will need a mind well-used to its work for the extraction to stay sound.
</p>
<br/>
<blockquote class="crafting-info">
Depicted in the book: The crafting recipe for the
<code>
Akashic Bookshelf
</code>
and
<code>
Akashic Ligature
</code>
.
</blockquote>
<br/>
<p>
Then to operate the library is simple, the patterns are routed through the librarian and it looks them up and returns the iota to you. Two actions do the work.
<a href="#patterns/akashic_patterns">
Notes here
</a>
.
</p>
<p>
Using an empty
<a href="#items/scroll">
<span style="color: #b0b">
scroll
</span>
</a>
on a bookshelf copies the pattern there onto the
<a href="#items/scroll">
<span style="color: #b0b">
scroll
</span>
</a>
. Sneaking and using an empty hand clears the datum in the shelf.
</p>
<br/>
</div>
</div>
</section>
<section id="lore">
<h2 class="category-title page-header">
Lore
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
I have uncovered some letters and text not of direct relevance to my art. But, I think I may be able to divine some of the history of the world from these. Let me see...
</p>
<div id="lore/terabithia1">
<h3 class="entry-title page-header">
Cardamom Steles, #1
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/terabithia1" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
Full title: Letter from Cardamom Steles to Her Father, #1
</i>
</p>
<p>
Dear Papa,
<br/>
Every day it seems I have more reason to thank you for saving up to send me to the Grand Library. The amount I am learning is incredible! I feel I don't have the skill with words needed to express myself fully... it is wonderful to be here.
</p>
<br/>
<p>
I sit in the main dome as I write this. It's maintained by the Hexcasting Corps; they have some sort of peculiar mechanism at the top that captures the stray thought energy as it leaks out from the desks and desks of hard-working students, as I understand it. One of my friends in the dormitory, Amanita, is studying the subject, and oh how she loves to explain it to me at length, although I confess I do not understand it very well.
</p>
<br/>
<p>
The way I understand it, our processes of thought--the intangible mechanisms by which I move my pen and by which you read this letter--are not completely efficient. A small amount of that energy is released into the environment, like how a wagon's axle is hot to the touch after it has been turning for a while. This spare energy is called "media." One person's spare media is trifiling, but the hundreds of thinking people in the main dome have a sort of multiplicative effect, and combined with some sort of ingenious mechanism, it can be solidified into a sort of purple crystal.
</p>
<br/>
<p>
But that's enough about her studies. I returned from my first expedition with the Geology Corps today! My apologies for not sending a letter before I left; the date crept up on me. We ventured into a crack in the earth to the east of the Grand and spent the night camping under the rock and soil. We kept to well-lit and well-traveled areas of the cave, of course, and in all honesty it was likely safer in there than the night surface, but oh how I was scared!
</p>
<br/>
<p>
Fortunately the night passed without mishap, and we proceeded deeper into the cave for our examination of the local veins of ore. We were looking for trace veins of a purple crystal called "amethyst," which supposedly occurs in small amounts deep in the rock. We did not find anything, sadly, and returned to the sunlit surface empty-handed.
</p>
<br/>
<p>
Come to think of it, the description of this "amethyst" I now realize closely matches those crystals of media Amanita speaks of. Imagine if these nuggets of thought occurred naturally under the ground! I can't imagine why that might happen, though...
</p>
<br/>
<p>
As a student, I am entitled to send one letter by Akashic post every three months, free of charge. Unfortunately, you know how thin my moneybags are ... so I am afraid this offer is the only method I may communicate with you. I will of course appreciate immensely if you manage to scrounge together the money to send a letter back, but it seems our communications may be limited. I hate to be cut off from you so, but the skills I gain here will be more than repayment. Imagine, I will be the first member of our family to be anything other than a farmer!
</p>
<br/>
<p>
So, I suppose I will write again in three months' time.
</p>
<p>
Yours,
<br/>
-- Cardamom Steles
</p>
<br/>
</div>
<div id="lore/terabithia2">
<h3 class="entry-title page-header">
Cardamom Steles, #2
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/terabithia2" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
Full title: Letter from Cardamom Steles to Her Father, #2
</i>
</p>
<p>
Dear Papa,
<br/>
... Goodness, what an ordeal it is to try to summarize the last three months into a short letter. Such a cruel task set before me by this miracle I receive entirely for free! Woe is me.
</p>
<br/>
<p>
My studies with the Geology Corps have been progressing smoothly. We have gone on more expeditions, deeper into the earth, to where the smooth gray stone makes way to a hard, flaky slate. It creates such an awful, choking dust under your feet... it's incredible what hostility there is below all of our feet all the time, even disregarding the creatures of the dark. (I have had one or two encounters with them, but I know how you shudder to think of me having to fight for my life, so I will not write of them.)
</p>
<br/>
<p>
We did manage to find some of this amethyst, however. There was a small vein with a few trace crystals on one of our expeditions. We were under strict instructions to keep none of them and turn them in to our Corps prefect immediately. I find the whole affair rather ridiculous; they treat it like some matter of enormous importance and secrecy, and yet have a group of a dozen students, all barely six months at the Grand Library, trying to excavate barely ten drams of the stuff with twelve prospector's picks in a square foot...
</p>
<br/>
<p>
I cannot imagine for what purpose, either. A librarian pointed me to an encyclopedia of gems, and amethyst seems to have next to no purpose; it's used for certain specialty types of glass and lenses, of all things.
</p>
<p>
If I were to speculate, I would guess that these amethyst crystals and the media they so resemble are one and the same, as I wrote of last time.
</p>
<br/>
<p>
If this is true, the secrecy, not to mention the prefect's aversion to questioning, may be because this is an original piece of research the Grand Library is not eager to let into the hands of enemy factions.
</p>
<p>
However, this theory does not sit quite right with me. The amethyst I handled in the cave and the crystals of media Amanita has shown to me do seem quite similar, but not identical. I would like to see them side-by-side to be sure, but media has a peculiar buzzing or rumbling feel beneath the fingers that amethyst does not.
</p>
<br/>
<p>
It is quite possible I was unable to sense it on the amethyst in the cave due to the stress of being undergound-- my hands were shaking the one time I managed to touch some, and the feeling is very light --but it does not seem the same to me. The light reflects slightly differently.
</p>
<p>
I suppose if I ever manage to get my hands on a crystal of amethyst outside of a cave, I will ask Amanita to see if she can cast a spell with it. Every time we meet she seems to have some new fantastic trick.
</p>
<br/>
<p>
Just last week she suspended me in the air supported by nothing at all! It is an immensely strange feeling to have your body tingling and lighter than air with your clothing still the same weight... I am just glad she tugged me over my bed before the effect ran out.
</p>
<p>
Yours,
<br/>
-- Cardamom Steles
</p>
<br/>
</div>
<div id="lore/terabithia3">
<h3 class="entry-title page-header">
Cardamom Steles, #3, 1/2
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/terabithia3" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
Full title: Letter from Cardamom Steles to her father, #3, part 1/2
</i>
</p>
<p>
Dear Papa,
<br/>
Two very peculiar things have happened since I last wrote.
</p>
<p>
Firstly, the professor in charge of the entry-level Hexcasting Corps students has disappeared. Nobody knows where he has gone. His office and living quarters were found locked, but still in their usual state of disarray.
</p>
<br/>
<p>
Even more peculiarly, any attempts by the students of the Grand to rouse the administrative portions of the gnarled bureaucracy have been very firmly rejected. Even other professors seem reluctant to talk about him.
</p>
<p>
As you might imagine, Amanita is sorely distressed. Whatever replacement professors the Grand managed to dredge up have none of the old professor's tact or skill with beginners.
</p>
<br/>
<p>
But amazingly, that is not the stranger of the two things I have to tell you. The most horrendous thing I hope to ever experience happened on another trip out with the Geology Corps. This time, we were due for an expedition near a village.
</p>
<br/>
<p>
Usually when we do such a thing, there is a long process of communication with the mayor or elder of the village to ensure we have permission and establish boundaries on where we are allowed to go and what we are allowed to do. But on this expedition, there was very little of that; we were notified where we were going by a prefect of the Hexcasting Corps scarcely two days before we left.
</p>
<br/>
<p>
We camped near the village, but in a thick forest, even though the nearby plains would have been much more hospitable. We could barely see the village from where we pitched our tents. As I laid down my bedroll the evening we arrived, the peculiar silence troubled me. Even if we couldn't see the village, we should have been able to hear it. But the whole time we were above-ground, there was next to no sound.
</p>
<br/>
<p>
The few things I did hear all sounded like work: the peal of hammers on anvils and the scrape of hoe on dirt, for example. I never heard a shred of conversation.
</p>
<p>
The next morning we readied our lanterns and descended into the earth.
</p>
<br/>
<p>
We weren't told exactly what it was we were spelunking for, but one of the other students had overheard we were looking for more amethyst, which seemed reasonable enough. I had my eyes trained for any specks of purple I might find in the cave walls, but just as the gray stone was making way to black slate, an incredible sight unfolded before me.
</p>
<p>
It was an entire chamber made of amethyst, nearly ten times as tall as I am. The inside seemed to glow with purple sparks and lanternlight glint, every surface covered with jagged crystal. There was more amethyst here than our entire group had ever excavated since I came to the Grand.
</p>
<br/>
<p>
Gloves were distributed and we were told to get to mining. One of the prefects along with us had a peculiar lavender box I've seen some of the higher-ups in the Grand using for storage, and the other students and I dutifully got to shattering the glassy crystals off the walls of the cave and putting them in the box. Under the outer layers of brittle crystal there seemed to be two types of denser growth. One of them seemed of similar composition to the loose crystal, but one seemed more ... I struggle to find the word.
</p>
<br/>
<p>
I hesitate to say "important," but that's the best I can think of. It had a certain ... gravitas, like the dark, sunken X in its surface held some sacred meaning. Whatever the reason we were under strict instructions not to touch them. Occasionally a misplaced pickaxe would shatter one, and the student responsible would get quite the earful. Although the labor was hard and took most of my attention, I couldn't help but notice how ... lucid I felt. It was a strange mix of feelings: I felt incredibly clear-headed, but I also felt if I stopped to examine the feeling I might never stop.
</p>
<br/>
<p>
It was like each breath in erected a friendly signpost in my head promising the way forward, pointing directly down a steep cliff. I shook my head and immersed myself in the work of mining, which seemed to stave off the signposts.
</p>
<p>
I did manage, however, to hide a shard of the crystal in my knapsack.
</p>
<p>
We spent nearly the whole day mining, excavating most of the crystal by the time the prefects' chronometer said the sun would set soon.
</p>
<br/>
<p>
As we left, I couldn't help but notice that on the surfaces of those dark, scored places we left unmined, there seemed to be the faintest buds of new crystal, like they were somehow growing out of them. Everything I had learned about the geology of crystals said they took thousands of years to grow, but here there was new growth in less than a day. I suppose the prefects' warnings against breaking those spots were warranted, at least.
</p>
<br/>
<p>
Our journey back to the surface was uneventful, and we got back to our tents just as the sun was setting-- My apologies, I am nearly out of paper for this letter. There's only so much you can write on one Akashic letter ... This tale is worth purchasing another letter for. I'll send them both at once, so they should arrive together.
</p>
<p>
Yours,
<br/>
-- Cardamom Steles
</p>
<br/>
</div>
<div id="lore/terabithia4">
<h3 class="entry-title page-header">
Cardamom Steles, #3, 2/2
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/terabithia4" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
Full title: Letter from Cardamom Steles to her father, #3, part 2/2
</i>
</p>
<p>
Dear Papa,
<br/>
As I was saying, I was running out of paper to write my story, so the rest of it is in this letter. We made it back to camp just as the sun was setting. And that night was the most horrible event of the whole strange outing.
</p>
<br/>
<p>
I had gotten up in the middle of the night to relieve myself. The moon was covered with clouds, and I confess I got lost in the winds of the forest and could not find the way back to the camp. Fearing the monsters of the night, I decided I would find my way to the village and see if I could find a bed there. At the least, I would be protected there.
</p>
<br/>
<p>
The village was easy enough to find, though there was very little sound. Even this late at night I would expect the inn to be, if not bustling, at least not silent. But peeking through the inn door I saw absolutely nobody.
</p>
<p>
I knocked on the door of one of the houses to no response. The next two houses, too, seemed completely empty.
</p>
<br/>
<p>
My pulse started to rise, and I resolved to enter the next house. I figured whoever might be inside would be understanding of their rest being disturbed. At the least, hearing another voice would have been reassuring, even if they didn't let me stay the night under their roof.
</p>
<p>
The house was very small, barely more than a cartographer's table and a bed. I could see there was someone in the bed, and I tried to reassure myself that everyone in the village was just deeply asleep as I turned to leave.
</p>
<br/>
<p>
But then the clouds shifted, and moonlight glinted across the bed's occupant.
</p>
<p>
I screamed, and its eyes snapped open. It was ... distinctly, horrendously not human. It was like some awful de-evolution of a man, its forehead too high, its body stocky and dense. I believe it is appropriate to say "it," at least; the thing before me was obviously not as wise as a human, despite how it resembled us.
</p>
<br/>
<p>
Its eyes trained on me-- oh, its eyes were awful, dull and unintelligent like a sheep's! It opened its mouth but a pained mockery of speech poured out, a shuddering, nasal groan.
</p>
<br/>
<p>
I ran. In the light of the newly-revealed moon I caught glimpses of other townspeople through windows, and they were all warped and simplified as the first
<i>
thing
</i>
I had seen. I sprinted into the darkness of the forest, away from those terrible, terrible animal eyes in those distorted faces.
</p>
<p>
The camp was easier to find now that I could see in the moonlight. No-one seemed to have noticed my prolonged absence, thankfully. I crawled back into my bedroll and did my very best to forget the whole night.
</p>
<br/>
<p>
As you can tell from this letter, I did not do a very good job. That warped visage still haunts my dreams. I shudder to think that it once might have been human.
</p>
<p>
After we got back to the Grand I showed the shard of crystal I had smuggled out to Amanita. She confirmed my suspicions: it is definitely a crystal of media. What an enormous geode full of it is doing underground, though, is beyond her.
</p>
<br/>
<p>
She also mentioned something interesting: apparently media can be used in a similar way to true amethyst in those niche glasses I mentioned a few letters ago. The physical manner in which they both crystallise happens to be nearly identical, and it has nothing to do with media's magical properties, or so she says.
</p>
<p>
I chose not to tell her of the village full of monsters.
</p>
<br/>
<p>
I know how tight money is for you, and how expensive it is to send a letter all the way back to the Grand, but I beg of you, please send a word of advice back. I am greatly distraught, and reading your words would do me much good.
</p>
<p>
Yours,
<br/>
-- Cardamom Steles
</p>
<br/>
</div>
<div id="lore/terabithia5">
<h3 class="entry-title page-header">
Cardamom Steles, #4
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/terabithia5" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
Full title: Letter from Cardamom Steles to her father, #4
</i>
</p>
<p>
Amanita has disappeared.
</p>
<p>
I don't know where she has gone, Papa. The last I saw her was over dinner, and she had just spoken to someone about the disappearances, and then--
</p>
<br/>
<p>
then-- then she was gone too. And no one speaks of her, and I am so so scared, Papa, do they all know? Everyone must have a friend who's just
<i>
vanished
</i>
, into thin air, into non-being.
</p>
<p>
Where did they
<i>
go
</i>
?
</p>
<br/>
<p>
They keep shutting things down, too-- we haven't been on a trip for the Geology Corps in weeks, all the apparati that collect media in the main dome are gone, the Apothecary Corps haven't been open for months... it's like termites are eating the Grand from the inside, leaving a hollow shell.
</p>
<p>
I think they've started scanning the letters, we write too...
</p>
<br/>
<p>
This letter has taken so much courage to write, and I don't have the courage to tell people myself, but if no one here can hold the knowledge I hope and pray you can send the word out... it's a vain hope for this to spread from somewhere as backwater as Brackenfalls, but please, please, do your best. Remember them, Papa... Amanita Libera, Jasmine Ward, Theodore Cha... please, remember them... and please forgive my cowardice, that I foist the responsibility onto you.
</p>
<br/>
<p>
i can no longer write, my hands shake so much, please, rescue us.
</p>
<br/>
</div>
<div id="lore/experiment1">
<h3 class="entry-title page-header">
Wooleye Instance Notes
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/experiment1" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
I only managed to find these five entries from this log.
</i>
</p>
<p>
Detonation #26
</p>
<p class="fake-li">
Location: Carpenter's North
</p>
<p class="fake-li">
Population: 174
</p>
<p class="fake-li">
Nodes Formed: 3
</p>
<p class="fake-li">
Node Distance from Epicenter: 55-80m vertical, 85-156m horizontal
</p>
<p class="fake-li">
Media Generation: 1320 uθ/min
</p>
<br/>
<p>
Detonation #27
</p>
<p class="fake-li">
Location: Brackenfalls
</p>
<p class="fake-li">
Population: 79
</p>
<p class="fake-li">
Nodes Formed: 1
</p>
<p class="fake-li">
Node Distance from Epicenter: 95m vertical, 67m horizontal
</p>
<p class="fake-li">
Media Generation: 412 uθ/min
</p>
<br/>
<p>
Detonation #28
</p>
<p class="fake-li">
Location: Greyston
</p>
<p class="fake-li">
Population: approx. 1000
</p>
<p class="fake-li">
Nodes Formed: 18
</p>
<p class="fake-li">
Node Distance from Epicenter: 47-110m vertical, 59-289m horizontal
</p>
<p class="fake-li">
Media Generation: 8478 uθ/min
</p>
<br/>
<p>
Detonation #29
</p>
<p class="fake-li">
Location: Unnamed; village two days west of Greyston
</p>
<p class="fake-li">
Population: 35
</p>
<p class="fake-li">
Nodes Formed: 0
</p>
<p class="fake-li">
Node Distance from Epicenter: N/A
</p>
<p class="fake-li">
Media Generation: N/A
</p>
<p>
Note: inhabitants still affected in the normal way
</p>
<br/>
<p>
Detonation #30
</p>
<p class="fake-li">
Location: Boiling Brook
</p>
<p class="fake-li">
Population: 231
</p>
<p class="fake-li">
Nodes Formed: 4
</p>
<p class="fake-li">
Node Distance from Epicenter: 61-89m vertical, 78-191m horizontal
</p>
<p class="fake-li">
Media Generation: 1862 uθ/min
</p>
<br/>
<p>
Conclusion: approx 60 needed for one node. Too few consumes them but does not provide enough energy for node formation. Little correlation between input count and breadth/depth.
</p>
<p>
Effects on inhabitants still consistently more severe than with single-target testing, especially the physical effects.
</p>
<br/>
</div>
<div id="lore/experiment2">
<h3 class="entry-title page-header">
Wooleye Interview Logs
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/experiment2" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
These documents were heavily redacted. I have copied the readable text from them here.
</i>
</p>
<p>
Subject #1 "A.E."
<br/>
Stopped struggling immediately after procedure. Facial expression and limbs slack, but can stand unassisted. When left unattended, absently pantomimes actions commonly done in previous profession (groundskeeping).
</p>
<br/>
<p>
Heartrate was very high immediately after procedure, but this is inconclusive due to state of fear immediately before. Resulting bud produced 35 uθ/min.
<br/>
...
<br/>
Subject #4 "P.I."
<br/>
Psychological tests run on P.I. Subject has object permanence, spatial awareness, basic numerical reasoning. Difficulty learning new tasks.
</p>
<p>
...
</p>
<br/>
<p>
Subject #7 "T.C."
<br/>
Consented to procedure. Similar results several hours after the procedure to other subjects: able to stand, perform simple tasks.
</p>
<p>
...
</p>
<p>
Subject #11 "R.S."
<br/>
Sedated before procedure; dosage such that subject would wake up as procedure occurred...
</p>
<p>
...
</p>
<br/>
<p>
Subject #23 "A.L."
<br/>
Ability to speak retained to a greater degree than most subjects; dwindled to broken sentences, then a single word "card" over the course of several hours.
</p>
<p>
For further testing: how does the procedure affect previous Hexcasters vs. non-Hexcasters?
</p>
<p>
...
</p>
<br/>
</div>
<div id="lore/inventory">
<h3 class="entry-title page-header">
Restoration Log #72
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#lore/inventory" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Cell 39, Restoration Log #72, Detainment Center Beta
</p>
<p>
Prisoner Name: Raphael Barr
<br/>
Crime: Knowledge of Project Wooleye
<br/>
Reason for Cell Vacancy: Death
<br/>
Additional notes: The following letter was scrawled over most of the wall space.
</p>
<br/>
<p>
I see hexagons when I close my eyes.
</p>
<p>
The patterns, they invade the space between my eyes and my eyelids, my mind, my dreams. I sparkle in and out of lucidity, like a crystal dangling from a string, sometimes catching the light, sometimes consumed by it.
</p>
<br/>
<p>
I am more lucid today. Maybe. I cannot tell anymore. I cannot even say I am tired anymore; at some point the constant companion of exhaustion left me, even as something else came to prick at my eyes. I can't sense the fatigue. But it's there.
</p>
<p>
My bones are fragile. My joints are rough and sharp.
</p>
<br/>
<p>
Sometimes why I am here comes back to me. I remember being too loud about something I knew ... I remember a very bright room where I was told things. I remember my thoughts freezing into glass, shattered, melted and recrystallized over and over and over and over and over with a purpose behind them to make me forget worse than that to keep me alive while killing me, my self, the iota of ME being meaningless because there would be no observer just a body but I tricked them I did it somehow
</p>
<br/>
<p>
they thought they broke me beyond the point of pulling the wool over my eyes but i was awake enough and am awake enough to feel PAIN
</p>
<p>
I do not sleep but when i wake up I cannot rub the crust off of my eyes because it would cut my skin and I do not want to see the purple glints inside
</p>
<br/>
<p>
They do not kill me, because my husband has my focus, and he would know if I died. But he is no Hexcaster and could not find me with his mediocre skill. i am out of ambit
</p>
<p>
it h urts to think. quite literally. the thoughts are so wasteful now the leftover striates directly onto the million microcrystals
</p>
<br/>
<p>
i remember the doctors in the bright room forcing me to inhale something like sand but sharper and it hurt so much. At first just the physical pain of mucous membranes trying to absorb shatterglass but then they got their fingernails into my stimulus-response and they could do it with a word
</p>
<p>
i remember camping out and seeing the corps setting up their circle all around a village and the ground under my feet rumbling
</p>
<br/>
<p>
drift out of time. Sometimes I believe I see visions of the future, because they seem to make sense but cannot happen now because I know i will be here until forever because the white room men said so. i see myself toppling over and my skull cracking open into halves and inside will be spears of not-amethyst dripping with blood piercing the wrinkled three pounds of fat and meat dreaming that it is a butterfly
</p>
<br/>
<p>
i hope my students are alright. why do i think that? waste. they told me i'm a waste, they couldn't be content with destroying me they had to make me feel like I deserved it the whole time, too. No sticks or stones to break my bones, just words to hurt me. if they released me no one would believe me because my body is inspectable fully i just look like one more addicted to overcasting
</p>
<p>
But they locked me up insted and i dont know if it's a mercy
</p>
<br/>
<p>
with all the media around I tried many times to cast a hex and get me out or at the least snuff out my suffering but the patterns that march through the fields of my mind snicker and dissolve when I try to reach for them. i think i remember being forced to forget them, I remember grand structures of knowledge interlinked getting chipped away and splintering as it fell apart under the weight of forced ignorance but it hurts so much to try to remember forgetting what you remembered you thought you knew
</p>
<br/>
<p>
maybe I am just in the late late late late stages of overcasting dependency, the patterns papercutting into the space between my eyes and my eyelids I have heard of, the purple edges of my nerves i have heard of. is there any point trying to make myself believe what is true I am not being tortured. I deserve this. if i will never have anyone to discuss it with ever again why try
</p>
<br/>
<p>
they're going to kill everyone n the whole world aren't they the grand needs to eat just as much as i ... when did i lasst eat
</p>
<p>
everyone else has to eat and they cannot do that if all the farmers in the world are empty and all the knowledge of farming is underground or at least someone else is going to Find out and melt their smug faces to wax
</p>
<br/>
<p>
maybe wake up someday and wonder about all the thngs we left them and wonder why there are million miles of tunnels underground with no one smart enough to mine them
</p>
<p>
i can see them reading this . they ... will be too far gone to care
</p>
<br/>
</div>
</section>
<section id="interop">
<h2 class="category-title page-header">
Cross-Mod Compatibility
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#interop" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
It appears I have installed some mods Hexcasting interoperates with! I've detailed them here.
</p>
<div id="interop/interop">
<h3 class="entry-title page-header">
Cross-Mod Compatibility
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#interop/interop" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
The art of
<span style="color: #b38ef3">
Hexcasting
</span>
is versatile. If I find that my world has been
<i>
modified
</i>
by certain other powers, it's possible that I may use
<span style="color: #b38ef3">
Hexcasting
</span>
in harmony and combination with them.
</p>
<br/>
<p>
I should keep in mind, however, that Nature seems to have paid less attention in crafting these aspects of my art; strange behavior and bugs are to be expected. I'm sure the mod developer will do her best to correct them, but I must remember this is a less important pastime to her.
</p>
<p>
I may also find that there are sharp disregards to balance in the costs and effects of the interoperating powers. In such a case I suppose I will have to be responsible and restrain myself from using them.
</p>
<br/>
<p>
Finally, if I find myself interested in the lore and stories of this world, I do not think any notes compiled while examining these interoperations should be considered as anything more than light trifles.
</p>
<br/>
</div>
<div id="interop/gravity">
<h3 class="entry-title page-header">
Gravity Changer
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#interop/gravity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I have discovered actions to get and set an entity's gravity. I find them interesting, if slightly nauseating.
</p>
<p>
Interestingly, although
<a href="#patterns/great_spells/flight">
<span style="color: #fc77be">
Flight
</span>
</a>
is a great spell, and manipulates gravity similarly, these are not. It baffles me why... Perhaps the mod developer wanted players to have fun, for once.
</p>
<br/>
<div id="interop/gravity@hexcasting:interop/gravity/get">
<h4 class="pattern-title">
Gravitational Purification (entity → vector)
<a class="permalink small" href="#interop/gravity@hexcasting:interop/gravity/get" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="wawawddew" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wawawddew
</canvas>
</details>
<p>
Get the main direction gravity pulls the given entity in, as a unit vector. For most entities, this will be down, &lt;0, -1, 0&gt;.
</p>
</div>
<br/>
<div id="interop/gravity@hexcasting:interop/gravity/set">
<h4 class="pattern-title">
Alter Gravity (entity, vector →)
<a class="permalink small" href="#interop/gravity@hexcasting:interop/gravity/set" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="wdwdwaaqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wdwdwaaqw
</canvas>
</details>
<p>
Set the main direction gravity pulls the given entity in. The given vector will be coerced into the nearest axis, as per
<a href="#patterns/math@hexcasting:coerce_axial">
<span style="color: #fc77be">
Axial Purification
</span>
</a>
. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
.
</p>
</div>
<br/>
</div>
<div id="interop/pehkui">
<h3 class="entry-title page-header">
Pehkui
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#interop/pehkui" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I have discovered methods of changing the size of entities, and querying how much larger or smaller they are than normal.
</p>
<br/>
<div id="interop/pehkui@hexcasting:interop/pehkui/get">
<h4 class="pattern-title">
Gulliver's Purification (entity → double)
<a class="permalink small" href="#interop/pehkui@hexcasting:interop/pehkui/get" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="aawawwawwa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aawawwawwa
</canvas>
</details>
<p>
Get the scale of the entity, as a proportion of their normal size. For most entities, this will be 1.
</p>
</div>
<br/>
<div id="interop/pehkui@hexcasting:interop/pehkui/set">
<h4 class="pattern-title">
Alter Scale (entity, double →)
<a class="permalink small" href="#interop/pehkui@hexcasting:interop/pehkui/set" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="ddwdwwdwwd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddwdwwdwwd
</canvas>
</details>
<p>
Set the scale of the entity, passing in a proportion of their normal size. Costs about 1
<span style="color: #b0b">
Amethyst Shard
</span>
.
</p>
</div>
<br/>
</div>
</section>
<section id="patterns">
<h2 class="category-title page-header">
Patterns
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
A list of all the patterns I've discovered, as well as what they do.
</p>
<div id="patterns/readers_guide">
<h3 class="entry-title page-header">
How to Read this Section
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/readers_guide" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
I've divided all the valid patterns I've found into sections based on what they do, more or less. I've written down the stroke order of the patterns as well, if I managed to find it in my studies, with the start of the pattern marked with a red dot.
</p>
<p>
If an action is cast by multiple patterns, as is the case with some, I'll write them all side-by-side.
</p>
<br/>
<p>
For a few patterns, however, I was
<i>
not
</i>
able to find the stroke order, just the shape. I suspect the order to draw them in are out there, locked away in the ancient libraries and dungeons of the world.
</p>
<p>
In such cases I just draw the pattern without any information on the order to draw it in.
</p>
<br/>
<p>
I also write the types of iota that the action will consume or modify, a "→", and the types of iota the action will create.
</p>
<p>
For example, "
<span style="text-decoration: underline">
vector, number
</span>
<span style="text-decoration: underline">
vector
</span>
" means the action will remove a vector and a number from the top of the stack, and then add a vector; or, put another way, will remove a number from the stack, and then modify the vector at the top of the stack. (The number needs to be on the top of the stack, with the vector right below it.)
</p>
<br/>
<p>
"→
<span style="text-decoration: underline">
entity
</span>
" means it'll just push an entity. "
<span style="text-decoration: underline">
entity, vector
</span>
→" means it removes an entity and a vector, and doesn't push anything.
</p>
<p>
Finally, if I find the little dot marking the stroke order too slow or confusing, I can press
<span style="color: #490">
Control/Command
</span>
to display a gradient, where the start of the pattern is darkest and the end is lightest. This works on scrolls and when casting, too!
</p>
<br/>
</div>
<div id="patterns/basics">
<h3 class="entry-title page-header">
Basic Patterns
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/basics" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/basics@hexcasting:get_caster">
<h4 class="pattern-title">
Mind's Reflection (→ entity)
<a class="permalink small" href="#patterns/basics@hexcasting:get_caster" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaq
</canvas>
</details>
<p>
Adds me, the caster, to the stack.
</p>
</div>
<br/>
<div id="patterns/basics@hexcasting:entity_pos/eye">
<h4 class="pattern-title">
Compass' Purification (entity → vector)
<a class="permalink small" href="#patterns/basics@hexcasting:entity_pos/eye" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aa
</canvas>
</details>
<p>
Transforms an entity on the stack into the position of its eyes. I should probably use this on myself.
</p>
</div>
<br/>
<div id="patterns/basics@hexcasting:entity_pos/foot">
<h4 class="pattern-title">
Compass' Purification II (entity → vector)
<a class="permalink small" href="#patterns/basics@hexcasting:entity_pos/foot" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="dd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dd
</canvas>
</details>
<p>
Transforms an entity on the stack into the position it is standing. I should probably use this on other entities.
</p>
</div>
<br/>
<div id="patterns/basics@hexcasting:get_entity_look">
<h4 class="pattern-title">
Alidade's Purification (entity → vector)
<a class="permalink small" href="#patterns/basics@hexcasting:get_entity_look" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wa
</canvas>
</details>
<p>
Transforms an entity on the stack into the direction it's looking in, as a unit vector.
</p>
</div>
<br/>
<div id="patterns/basics@hexcasting:raycast">
<h4 class="pattern-title">
Archer's Distillation (vector, vector → vector)
<a class="permalink small" href="#patterns/basics@hexcasting:raycast" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wqaawdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wqaawdd
</canvas>
</details>
<p>
Combines two vectors (a position and a direction) into the answer to the question: If I stood at the position and looked in the direction, what block would I be looking at? Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<p>
If it doesn't hit anything, the vectors will combine into
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
.
</p>
<p>
A common sequence of patterns, the so-called "raycast mantra," is
<span style="color: #fc77be">
Mind's Reflection
</span>
,
<span style="color: #fc77be">
Compass Purification
</span>
,
<span style="color: #fc77be">
Mind's Reflection
</span>
,
<span style="color: #fc77be">
Alidade Purification
</span>
,
<span style="color: #fc77be">
Archer's Distillation
</span>
. Together, they return the vector position of the block I am looking at.
</p>
<br/>
<div id="patterns/basics@hexcasting:raycast/axis">
<h4 class="pattern-title">
Architect's Distillation (vector, vector → vector)
<a class="permalink small" href="#patterns/basics@hexcasting:raycast/axis" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="weddwaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: weddwaa
</canvas>
</details>
<p>
Like
<a href="#patterns/basics@hexcasting:raycast">
<span style="color: #fc77be">
Archer's Distillation
</span>
</a>
, but instead returns a vector representing the answer to the question: Which
<i>
side
</i>
of the block am I looking at? Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<p>
More specifically, it returns the
<i>
normal vector
</i>
of the face hit, or a unit vector pointing perpendicular to the face.
</p>
<p class="fake-li">
If I am looking at a floor, it will return (0, 1, 0).
</p>
<p class="fake-li">
If I am looking at the south face of a block, it will return (0, 0, 1).
</p>
<br/>
<div id="patterns/basics@hexcasting:raycast/entity">
<h4 class="pattern-title">
Scout's Distillation (vector, vector → entity)
<a class="permalink small" href="#patterns/basics@hexcasting:raycast/entity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="weaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: weaqa
</canvas>
</details>
<p>
Like
<a href="#patterns/basics@hexcasting:raycast">
<span style="color: #fc77be">
Archer's Distillation
</span>
</a>
, but instead returns the
<i>
entity
</i>
I am looking at. Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<div id="patterns/basics@hexcasting:print">
<h4 class="pattern-title">
Reveal (any → any)
<a class="permalink small" href="#patterns/basics@hexcasting:print" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="de" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: de
</canvas>
</details>
<p>
Displays the top iota of the stack to me.
</p>
</div>
<br/>
<div id="patterns/basics@hexcasting:get_entity_height">
<h4 class="pattern-title">
Stadiometer's Prfn. (entity → num)
<a class="permalink small" href="#patterns/basics@hexcasting:get_entity_height" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="awq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: awq
</canvas>
</details>
<p>
Transforms an entity on the stack into its height.
</p>
</div>
<br/>
<div id="patterns/basics@hexcasting:get_entity_velocity">
<h4 class="pattern-title">
Pace Purification (entity → vector)
<a class="permalink small" href="#patterns/basics@hexcasting:get_entity_velocity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wq
</canvas>
</details>
<p>
Transforms an entity on the stack into the direction in which it's moving, with the speed of that movement as that direction's magnitude.
</p>
</div>
<br/>
</div>
<div id="patterns/numbers">
<h3 class="entry-title page-header">
Number Literals
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/numbers" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/numbers@Numbers">
<h4>
Numerical Reflection (→ number)
<a class="permalink small" href="#patterns/numbers@Numbers" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="aqaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqaa
</canvas>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="dedd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dedd
</canvas>
</details>
<p>
Irritatingly, there is no easy way to draw numbers. Here is the method Nature deigned to give us.
</p>
</div>
<br/>
<p>
First, I draw one of the two shapes shown on the other page. Next, the
<i>
angles
</i>
following will modify a running count starting at 0.
</p>
<p class="fake-li">
Forward: Add 1
</p>
<p class="fake-li">
Left: Add 5
</p>
<p class="fake-li">
Right: Add 10
</p>
<p class="fake-li">
Sharp Left: Multiply by 2
</p>
<p class="fake-li">
Sharp Right: Divide by 2.
<br/>
The clockwise version of the pattern, on the right of the other page, will negate the value at the very end. (The left-hand counter-clockwise version keeps the number positive).
</p>
<p>
Once I finish drawing, the number's pushed to the top of the stack.
</p>
<br/>
<h4>
Example 1
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="aqaae" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqaae
</canvas>
</details>
<p>
This pattern pushes 10.
</p>
<br/>
<h4>
Example 2
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="aqaaqww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqaaqww
</canvas>
</details>
<p>
This pattern pushes 7: 5 + 1 + 1.
</p>
<br/>
<h4>
Example 3
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="deddwqea" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: deddwqea
</canvas>
</details>
<p>
This pattern pushes -32: negate 1 + 5 + 10 * 2.
</p>
<br/>
<h4>
Example 4
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="aqaaqdww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqaaqdww
</canvas>
</details>
<p>
This pattern pushes 4.5: 5 / 2 + 1 + 1.
</p>
<br/>
<p>
In certain cases it might be easier to just use an
<a href="#items/abacus">
<span style="color: #b0b">
Abacus
</span>
</a>
. But, it's worth knowing the "proper" way to do things.
</p>
<br/>
</div>
<div id="patterns/math">
<h3 class="entry-title page-header">
Mathematics
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/math" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Many mathematical operations function on both numbers and vectors. Such arguments are written as "num/vec".
</p>
<br/>
<br/>
<div id="patterns/math@hexcasting:add">
<h4 class="pattern-title">
Additive Distillation (num/vec, num/vec → num/vec)
<a class="permalink small" href="#patterns/math@hexcasting:add" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="waaw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waaw
</canvas>
</details>
<p>
Perform addition.
</p>
</div>
<br/>
<p>
As such:
</p>
<p class="fake-li">
With two numbers at the top of the stack, combines them into their sum.
</p>
<p class="fake-li">
With a number and a vector, removes the number from the stack and adds it to each element of the vector.
</p>
<p class="fake-li">
With two vectors, combines them by summing corresponding components into a new vector (i.e. [1, 2, 3] + [0, 4, -1] = [1, 6, 2]).
</p>
<br/>
<div id="patterns/math@hexcasting:sub">
<h4 class="pattern-title">
Subtractive Distillation (num/vec, num/vec → num/vec)
<a class="permalink small" href="#patterns/math@hexcasting:sub" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="wddw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wddw
</canvas>
</details>
<p>
Perform subtraction.
</p>
</div>
<br/>
<p>
As such:
</p>
<p class="fake-li">
With two numbers at the top of the stack, combines them into their difference.
</p>
<p class="fake-li">
With a number and a vector, removes the number from the stack and subtracts it from each element of the vector.
</p>
<p class="fake-li">
With two vectors, combines them by subtracting each component.
</p>
<p>
In all cases, the top of the stack or its components are subtracted
<i>
from
</i>
the second-from-the-top.
</p>
<br/>
<div id="patterns/math@hexcasting:mul_dot">
<h4 class="pattern-title">
Multiplicative Dstl. (num/vec, num/vec → num/vec)
<a class="permalink small" href="#patterns/math@hexcasting:mul_dot" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="waqaw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waqaw
</canvas>
</details>
<p>
Perform multiplication or the dot product.
</p>
</div>
<br/>
<p>
As such:
</p>
<p class="fake-li">
With two numbers, combines them into their product.
</p>
<p class="fake-li">
With a number and a vector, removes the number from the stack and multiplies each component of the vector by that number.
</p>
<p class="fake-li">
With two vectors, combines them into their
<a href="https://www.mathsisfun.com/algebra/vectors-dot-product.html">
dot product
</a>
.
</p>
<br/>
<div id="patterns/math@hexcasting:div_cross">
<h4 class="pattern-title">
Division Dstl. (num/vec, num/vec → num/vec)
<a class="permalink small" href="#patterns/math@hexcasting:div_cross" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="wdedw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wdedw
</canvas>
</details>
<p>
Perform division or the cross product.
</p>
</div>
<br/>
<p>
As such:
</p>
<p class="fake-li">
With two numbers, combines them into their quotient.
</p>
<p class="fake-li">
With a number and a vector, removes the number and divides it by each element of the vector.
</p>
<p class="fake-li">
With two vectors, combines them into their
<a href="https://www.mathsisfun.com/algebra/vectors-cross-product.html">
cross product
</a>
.
</p>
<p>
In the first and second cases, the top of the stack or its components comprise the dividend, and the second-from-the-top or its components are the divisor.
</p>
<p>
WARNING: Never divide by zero!
</p>
<br/>
<div id="patterns/math@hexcasting:abs_len">
<h4 class="pattern-title">
Length Purification (num/vec → number)
<a class="permalink small" href="#patterns/math@hexcasting:abs_len" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="wqaqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wqaqw
</canvas>
</details>
<p>
Compute the absolute value or length.
</p>
</div>
<br/>
<p>
Replaces a number with its absolute value, or a vector with its length.
</p>
<br/>
<div id="patterns/math@hexcasting:pow_proj">
<h4 class="pattern-title">
Power Distillation (num/vec, num/vec → num/vec)
<a class="permalink small" href="#patterns/math@hexcasting:pow_proj" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="wedew" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wedew
</canvas>
</details>
<p>
Perform exponentiation or vector projection.
</p>
</div>
<br/>
<p>
With two numbers, combines them by raising the first to the power of the second.
</p>
<p class="fake-li">
With a number and a vector, removes the number and raises each component of the vector to the number's power.
</p>
<p class="fake-li">
With two vectors, combines them into the
<a href="https://en.wikipedia.org/wiki/Vector_projection">
vector projection
</a>
of the top of the stack onto the second-from-the-top.
</p>
<p>
In the first and second cases, the first argument or its components are the base, and the second argument or its components are the exponent.
</p>
<br/>
<div id="patterns/math@hexcasting:floor">
<h4 class="pattern-title">
Floor Purification (num → num)
<a class="permalink small" href="#patterns/math@hexcasting:floor" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="ewq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ewq
</canvas>
</details>
<p>
"Floors" a number, cutting off the fractional component and leaving an integer value.
</p>
</div>
<br/>
<div id="patterns/math@hexcasting:ceil">
<h4 class="pattern-title">
Ceiling Purification (num → num)
<a class="permalink small" href="#patterns/math@hexcasting:ceil" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="qwe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qwe
</canvas>
</details>
<p>
"Ceilings" a number, raising it to the next integer value if it has a fractional component.
</p>
</div>
<br/>
<div id="patterns/math@hexcasting:construct_vec">
<h4 class="pattern-title">
Vector Exaltation (num, num, num → vector)
<a class="permalink small" href="#patterns/math@hexcasting:construct_vec" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="eqqqqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eqqqqq
</canvas>
</details>
<p>
Combine three numbers at the top of the stack into a vector's X, Y, and Z components (top to bottom).
</p>
</div>
<br/>
<div id="patterns/math@hexcasting:deconstruct_vec">
<h4 class="pattern-title">
Vector Disintegration (vector → num, num, num)
<a class="permalink small" href="#patterns/math@hexcasting:deconstruct_vec" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="qeeeee" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qeeeee
</canvas>
</details>
<p>
Split a vector into its X, Y, and Z components (top to bottom).
</p>
</div>
<br/>
<div id="patterns/math@hexcasting:modulo">
<h4 class="pattern-title">
Modulus Distillation (num, num → num)
<a class="permalink small" href="#patterns/math@hexcasting:modulo" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="addwaad" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: addwaad
</canvas>
</details>
<p>
Takes the modulus of two numbers. This is the amount
<i>
remaining
</i>
after division - for example, 5 % 2 is 1, and 5 % 3 is 2.
</p>
</div>
<br/>
<div id="patterns/math@hexcasting:coerce_axial">
<h4 class="pattern-title">
Axial Purification (vec → vec)
<a class="permalink small" href="#patterns/math@hexcasting:coerce_axial" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qqqqqaww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqaww
</canvas>
</details>
<p>
Coerces a vector to its nearest axial direction, a unit vector. The zero vector is unaffected.
</p>
</div>
<br/>
<div id="patterns/math@hexcasting:random">
<h4 class="pattern-title">
Entropy Reflection (→ num)
<a class="permalink small" href="#patterns/math@hexcasting:random" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="eqqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eqqq
</canvas>
</details>
<p>
Creates a random number between 0 and 1.
</p>
</div>
<br/>
</div>
<div id="patterns/consts">
<h3 class="entry-title page-header">
Constants
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/consts" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/consts@hexcasting:const/true">
<h4 class="pattern-title">
True Reflection (→ bool)
<a class="permalink small" href="#patterns/consts@hexcasting:const/true" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="aqae" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqae
</canvas>
</details>
<p>
Adds
<span style="color: #490">
True
</span>
to the top of the stack.
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/false">
<h4 class="pattern-title">
False Reflection (→ bool)
<a class="permalink small" href="#patterns/consts@hexcasting:const/false" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="dedq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dedq
</canvas>
</details>
<p>
Adds
<span style="color: #490">
False
</span>
to the top of the stack.
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/null">
<h4 class="pattern-title">
Nullary Reflection (→ influence)
<a class="permalink small" href="#patterns/consts@hexcasting:const/null" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="d" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: d
</canvas>
</details>
<p>
Adds the
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
influence to the top of the stack.
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/vec/0">
<h4 class="pattern-title">
Vector Reflection Zero (→ vector)
<a class="permalink small" href="#patterns/consts@hexcasting:const/vec/0" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qqqqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqq
</canvas>
</details>
<p>
Adds [0, 0, 0] to the stack.
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/vec/x">
<h4>
Vector Rfln. +X/-X (→ vector)
<a class="permalink small" href="#patterns/consts@hexcasting:const/vec/x" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qqqqqea" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqea
</canvas>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeeqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeeqa
</canvas>
</details>
<p>
The left-hand counter-clockwise pattern adds [1, 0, 0] to the stack; the right-hand clockwise pattern adds [-1, 0, 0].
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/vec/y">
<h4>
Vector Rfln. +Y/-Y (→ vector)
<a class="permalink small" href="#patterns/consts@hexcasting:const/vec/y" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qqqqqew" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqew
</canvas>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeeqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeeqw
</canvas>
</details>
<p>
The left-hand counter-clockwise pattern adds [0, 1, 0] to the stack; the right-hand clockwise pattern adds [0, -1, 0].
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/vec/z">
<h4>
Vector Rfln. +Z/-Z (→ vector)
<a class="permalink small" href="#patterns/consts@hexcasting:const/vec/z" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qqqqqed" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqed
</canvas>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeeqd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeeqd
</canvas>
</details>
<p>
The left-hand counter-clockwise pattern adds [0, 0, 1]; the right-hand clockwise pattern adds [0, 0, -1].
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/double/tau">
<h4 class="pattern-title">
Circle's Reflection (→ num)
<a class="permalink small" href="#patterns/consts@hexcasting:const/double/tau" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="eawae" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eawae
</canvas>
</details>
<p>
Adds τ, the radial representation of a complete circle, to the stack.
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/double/pi">
<h4 class="pattern-title">
Arc's Reflection (→ num)
<a class="permalink small" href="#patterns/consts@hexcasting:const/double/pi" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qdwdq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qdwdq
</canvas>
</details>
<p>
Adds π, the radial representation of half a circle, to the stack.
</p>
</div>
<br/>
<div id="patterns/consts@hexcasting:const/double/e">
<h4 class="pattern-title">
Euler's Reflection (→ num)
<a class="permalink small" href="#patterns/consts@hexcasting:const/double/e" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aaq
</canvas>
</details>
<p>
Adds
<i>
e
</i>
, the base of natural logarithms, to the stack.
</p>
</div>
<br/>
</div>
<div id="patterns/stackmanip">
<h3 class="entry-title page-header">
Stack Manipulation
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/stackmanip" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/stackmanip@hexcasting:pseudo-novice">
<h4>
Novice's Gambit (any →)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:pseudo-novice" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="a" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: a
</canvas>
</details>
<p>
Removes the first iota from the stack.
</p>
<p>
This seems to be a special case of
<a href="#patterns/stackmanip@hexcasting:mask">
<span style="color: #fc77be">
Bookkeeper's Gambit
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:swap">
<h4 class="pattern-title">
Jester's Gambit (any, any → any, any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:swap" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aawdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aawdd
</canvas>
</details>
<p>
Swaps the top two iotas of the stack.
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:rotate">
<h4 class="pattern-title">
Rotation Gambit (any, any, any → any, any, any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:rotate" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aaeaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aaeaa
</canvas>
</details>
<p>
Yanks the iota third from the top of the stack to the top. [0, 1, 2] becomes [1, 2, 0].
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:rotate_reverse">
<h4 class="pattern-title">
Rotation Gambit II (any, any, any → any, any, any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:rotate_reverse" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="ddqdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddqdd
</canvas>
</details>
<p>
Yanks the top iota to the third position. [0, 1, 2] becomes [2, 0, 1].
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:duplicate">
<h4 class="pattern-title">
Gemini Decomposition (any → any, any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:duplicate" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aadaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aadaa
</canvas>
</details>
<p>
Duplicates the top iota of the stack.
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:over">
<h4 class="pattern-title">
Prospector's Gambit (any, any → any, any, any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:over" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aaedd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aaedd
</canvas>
</details>
<p>
Copy the second-to-last iota of the stack to the top. [0, 1] becomes [0, 1, 0].
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:tuck">
<h4 class="pattern-title">
Undertaker's Gambit (any, any → any, any, any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:tuck" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="ddqaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddqaa
</canvas>
</details>
<p>
Copy the top iota of the stack, then put it under the second iota. [0, 1] becomes [1, 0, 1].
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:duplicate_n">
<h4 class="pattern-title">
Gemini Gambit (any, number → many)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:duplicate_n" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aadaadaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aadaadaa
</canvas>
</details>
<p>
Removes the number at the top of the stack, then copies the top iota of the stack that number of times. (A count of 2 results in two of the iota on the stack, not three.)
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:2dup">
<h4 class="pattern-title">
Dioscuri Gambit (any, any → any, any, any, any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:2dup" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aadadaaw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aadadaaw
</canvas>
</details>
<p>
Copy the top two iotas of the stack. [0, 1] becomes [0, 1, 0, 1].
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:stack_len">
<h4 class="pattern-title">
Flock's Reflection (→ number)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:stack_len" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qwaeawqaeaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qwaeawqaeaqa
</canvas>
</details>
<p>
Pushes the size of the stack as a number to the top of the stack. (For example, a stack of [0, 1] will become [0, 1, 2].)
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:fisherman">
<h4 class="pattern-title">
Fisherman's Gambit (number → any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:fisherman" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="west" data-string="ddad" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddad
</canvas>
</details>
<p>
Grabs the element in the stack indexed by the number and brings it to the top.
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:fisherman/copy">
<h4 class="pattern-title">
Fisherman's Gambit II (number → any)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:fisherman/copy" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aada" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aada
</canvas>
</details>
<p>
Like
<span style="color: #fc77be">
Fisherman's Gambit
</span>
, but instead of moving the iota, copies it.
</p>
</div>
<br/>
<div id="patterns/stackmanip@hexcasting:mask">
<h4>
Bookkeeper's Gambit (many → many)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:mask" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="aeea" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aeea
</canvas>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="eada" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eada
</canvas>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="ae" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ae
</canvas>
</details>
<p>
An infinite family of actions that keep or remove elements at the top of the stack based on the sequence of dips and lines.
</p>
</div>
<br/>
<p>
Assuming that I draw a Bookkeeper's Gambit pattern left-to-right, the number of iotas the action will require is determined by the horizontal distance covered by the pattern. From deepest in the stack to shallowest, a flat line will keep the iota, whereas a triangle dipping down will remove it.
</p>
<p>
If my stack contains
<i>
0, 1, 2
</i>
from deepest to shallowest, drawing the first pattern opposite will give me
<i>
1
</i>
, the second will give me
<i>
0
</i>
, and the third will give me
<i>
0, 2
</i>
(the 0 at the bottom is left untouched).
</p>
<br/>
<div id="patterns/stackmanip@hexcasting:swizzle">
<h4 class="pattern-title">
Swindler's Gambit (many, number → many)
<a class="permalink small" href="#patterns/stackmanip@hexcasting:swizzle" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qaawdde" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaawdde
</canvas>
</details>
<p>
Rearranges the top elements of the stack based on the given numerical code, which is the index of the permutation wanted.
</p>
</div>
<br/>
<p>
Although I can't pretend to know the mathematics behind calculating this permutation code, I have managed to dig up an extensive chart of them, enumerating all permutations of up to six elements.
</p>
<p>
If I wish to do further study, the key word is "Lehmer Code."
</p>
<h4 class="linkout">
<a href="https://github.com/gamma-delta/HexMod/wiki/Table-of-Lehmer-Codes-for-Swindler's-Gambit">
Table of Codes
</a>
</h4>
<br/>
</div>
<div id="patterns/logic">
<h3 class="entry-title page-header">
Logical Operators
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/logic" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/logic@hexcasting:not">
<h4 class="pattern-title">
Negation Purification (any → number)
<a class="permalink small" href="#patterns/logic@hexcasting:not" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="dw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dw
</canvas>
</details>
<p>
If the argument is True, return False; if it is False, return True.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:bool_coerce">
<h4 class="pattern-title">
Augur's Purification (any → bool)
<a class="permalink small" href="#patterns/logic@hexcasting:bool_coerce" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="aw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aw
</canvas>
</details>
<p>
Convert an argument to a boolean. The number
<span style="color: #490">
0
</span>
,
<a href="#influences@null">
<span style="color: #490">
Null
</span>
</a>
, and the empty list become False; everything else becomes True.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:or">
<h4 class="pattern-title">
Disjunction Distillation (bool, bool → bool)
<a class="permalink small" href="#patterns/logic@hexcasting:or" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="waw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waw
</canvas>
</details>
<p>
Returns True if at least one of the arguments are True; otherwise returns False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:and">
<h4 class="pattern-title">
Conjunction Distillation (bool, bool → bool)
<a class="permalink small" href="#patterns/logic@hexcasting:and" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="wdw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wdw
</canvas>
</details>
<p>
Returns True if both arguments are true; otherwise returns False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:xor">
<h4 class="pattern-title">
Exclusion Distillation (bool, bool → bool)
<a class="permalink small" href="#patterns/logic@hexcasting:xor" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="dwa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dwa
</canvas>
</details>
<p>
Returns True if exactly one of the arguments is true; otherwise returns False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:if">
<h4 class="pattern-title">
Augur's Exaltation (bool, any, any → any)
<a class="permalink small" href="#patterns/logic@hexcasting:if" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="awdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: awdd
</canvas>
</details>
<p>
If the first argument is True, keeps the second and discards the third; otherwise discards the second and keeps the third.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:equals">
<h4 class="pattern-title">
Equality Distillation (any, any → number)
<a class="permalink small" href="#patterns/logic@hexcasting:equals" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="ad" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ad
</canvas>
</details>
<p>
If the first argument equals the second (within a small tolerance), return True. Otherwise, return False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:not_equals">
<h4 class="pattern-title">
Inequality Distillation (any, any → number)
<a class="permalink small" href="#patterns/logic@hexcasting:not_equals" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="da" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: da
</canvas>
</details>
<p>
If the first argument does not equal the second (outside a small tolerance), return True. Otherwise, return False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:greater">
<h4 class="pattern-title">
Maximus Distillation (number, number → number)
<a class="permalink small" href="#patterns/logic@hexcasting:greater" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="e" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: e
</canvas>
</details>
<p>
If the first argument is greater than the second, return True. Otherwise, return False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:less">
<h4 class="pattern-title">
Minimus Distillation (number, number → number)
<a class="permalink small" href="#patterns/logic@hexcasting:less" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="q" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: q
</canvas>
</details>
<p>
If the first argument is less than the second, return True. Otherwise, return False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:greater_eq">
<h4 class="pattern-title">
Maximus Distillation II (number, number → number)
<a class="permalink small" href="#patterns/logic@hexcasting:greater_eq" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="ee" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ee
</canvas>
</details>
<p>
If the first argument is greater than or equal to the second, return True. Otherwise, return False.
</p>
</div>
<br/>
<div id="patterns/logic@hexcasting:less_eq">
<h4 class="pattern-title">
Minimus Distillation II (number, number → number)
<a class="permalink small" href="#patterns/logic@hexcasting:less_eq" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="qq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qq
</canvas>
</details>
<p>
If the first argument is less than or equal to the second, return True. Otherwise, return False.
</p>
</div>
<br/>
</div>
<div id="patterns/entities">
<h3 class="entry-title page-header">
Entities
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/entities" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/entities@hexcasting:get_entity">
<h4 class="pattern-title">
Entity Purification (vector → entity or null)
<a class="permalink small" href="#patterns/entities@hexcasting:get_entity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqdaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqdaqa
</canvas>
</details>
<p>
Transform the position on the stack into the entity at that location (or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if there isn't one).
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:get_entity/animal">
<h4 class="pattern-title">
Entity Prfn.: Animal (vector → entity or null)
<a class="permalink small" href="#patterns/entities@hexcasting:get_entity/animal" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqdaqaawa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqdaqaawa
</canvas>
</details>
<p>
Transform the position on the stack into the animal at that location (or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if there isn't one).
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:get_entity/monster">
<h4 class="pattern-title">
Entity Prfn.: Monster (vector → entity or null)
<a class="permalink small" href="#patterns/entities@hexcasting:get_entity/monster" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqdaqaawq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqdaqaawq
</canvas>
</details>
<p>
Transform the position on the stack into the monster at that location (or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if there isn't one).
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:get_entity/item">
<h4 class="pattern-title">
Entity Prfn.: Item (vector → entity or null)
<a class="permalink small" href="#patterns/entities@hexcasting:get_entity/item" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqdaqaaww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqdaqaaww
</canvas>
</details>
<p>
Transform the position on the stack into the dropped item at that location (or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if there isn't one).
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:get_entity/player">
<h4 class="pattern-title">
Entity Prfn.: Player (vector → entity or null)
<a class="permalink small" href="#patterns/entities@hexcasting:get_entity/player" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqdaqaawe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqdaqaawe
</canvas>
</details>
<p>
Transform the position on the stack into the player at that location (or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if there isn't one).
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:get_entity/living">
<h4 class="pattern-title">
Entity Prfn.: Living (vector → entity or null)
<a class="permalink small" href="#patterns/entities@hexcasting:get_entity/living" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqdaqaawd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqdaqaawd
</canvas>
</details>
<p>
Transform the position on the stack into the living creature at that location (or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if there isn't one).
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/animal">
<h4 class="pattern-title">
Zone Dstl.: Animal (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/animal" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqwdeddwa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqwdeddwa
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of animals near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/not_animal">
<h4 class="pattern-title">
Zone Dstl.: Non-Animal (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/not_animal" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeewaqaawa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeewaqaawa
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of non-animal entities near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/monster">
<h4 class="pattern-title">
Zone Dstl.: Monster (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/monster" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqwdeddwq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqwdeddwq
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of monsters near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/not_monster">
<h4 class="pattern-title">
Zone Dstl.: Non-Monster (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/not_monster" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeewaqaawq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeewaqaawq
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of non-monster entities near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/item">
<h4 class="pattern-title">
Zone Dstl.: Item (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/item" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqwdeddww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqwdeddww
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of dropped items near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/not_item">
<h4 class="pattern-title">
Zone Dstl.: Non-Item (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/not_item" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeewaqaaww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeewaqaaww
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of non-dropped-item entities near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/player">
<h4 class="pattern-title">
Zone Dstl.: Player (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/player" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqwdeddwe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqwdeddwe
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of players near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/not_player">
<h4 class="pattern-title">
Zone Dstl.: Non-Player (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/not_player" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeewaqaawe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeewaqaawe
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of non-player characters near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/living">
<h4 class="pattern-title">
Zone Dstl.: Living (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/living" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqwdeddwd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqwdeddwd
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of living creatures near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity/not_living">
<h4 class="pattern-title">
Zone Dstl.: Non-Living (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity/not_living" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eeeeewaqaawd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeewaqaawd
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of non-living entities near the position.
</p>
</div>
<br/>
<div id="patterns/entities@hexcasting:zone_entity">
<h4 class="pattern-title">
Zone Dstl.: Any (vector, number → list)
<a class="permalink small" href="#patterns/entities@hexcasting:zone_entity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqwded" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqwded
</canvas>
</details>
<p>
Take a position and maximum distance on the stack, and combine them into a list of all entities near the position.
</p>
</div>
<br/>
</div>
<div id="patterns/lists">
<h3 class="entry-title page-header">
List Manipulation
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/lists" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/lists@hexcasting:index">
<h4 class="pattern-title">
Selection Distillation (list, number → any)
<a class="permalink small" href="#patterns/lists@hexcasting:index" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="deeed" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: deeed
</canvas>
</details>
<p>
Remove the number at the top of the stack, then replace the list at the top with the nth element of that list (where n is the number you removed). Replaces the list with
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if the number is out of bounds.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:slice">
<h4 class="pattern-title">
Selection Exaltation (list, num, num → list)
<a class="permalink small" href="#patterns/lists@hexcasting:slice" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qaeaqwded" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaeaqwded
</canvas>
</details>
<p>
Remove the two numbers at the top of the stack, then take a sublist of the list at the top of the stack between those indices, lower bound inclusive, upper bound exclusive. For example, the 0, 2 sublist of [0, 1, 2, 3, 4] would be [0, 1].
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:append">
<h4 class="pattern-title">
Integration Distillation (list, any → list)
<a class="permalink small" href="#patterns/lists@hexcasting:append" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="edqde" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: edqde
</canvas>
</details>
<p>
Remove the top of the stack, then add it to the end of the list at the top of the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:concat">
<h4 class="pattern-title">
Combination Distillation (list, list → list)
<a class="permalink small" href="#patterns/lists@hexcasting:concat" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qaeaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaeaq
</canvas>
</details>
<p>
Remove the list at the top of the stack, then add all its elements to the end of the list at the top of the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:empty_list">
<h4 class="pattern-title">
Vacant Reflection (→ list)
<a class="permalink small" href="#patterns/lists@hexcasting:empty_list" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qqaeaae" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqaeaae
</canvas>
</details>
<p>
Push an empty list to the top of the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:singleton">
<h4 class="pattern-title">
Single's Purification (any → list)
<a class="permalink small" href="#patterns/lists@hexcasting:singleton" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="adeeed" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: adeeed
</canvas>
</details>
<p>
Remove the top of the stack, then push a list containing only that element.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:list_size">
<h4 class="pattern-title">
Abacus Purification (list → num)
<a class="permalink small" href="#patterns/lists@hexcasting:list_size" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aqaeaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqaeaq
</canvas>
</details>
<p>
Remove the list at the top of the stack, then push the number of elements in the list to the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:reverse_list">
<h4 class="pattern-title">
Retrograde Purification (list → list)
<a class="permalink small" href="#patterns/lists@hexcasting:reverse_list" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="qqqaede" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqaede
</canvas>
</details>
<p>
Reverse the list at the top of the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:index_of">
<h4 class="pattern-title">
Locator's Distillation (list, any → num)
<a class="permalink small" href="#patterns/lists@hexcasting:index_of" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="dedqde" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dedqde
</canvas>
</details>
<p>
Remove the iota at the top of the stack, then replace the list at the top with the first index of that iota within the list (starting from 0). Replaces the list with -1 if the iota doesn't exist in the list.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:list_remove">
<h4 class="pattern-title">
Excisor's Distillation (list, num → list)
<a class="permalink small" href="#patterns/lists@hexcasting:list_remove" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="edqdewaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: edqdewaqa
</canvas>
</details>
<p>
Remove the number at the top of the stack, then remove the nth element of the list at the top of the stack (where n is the number you removed).
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:modify_in_place">
<h4 class="pattern-title">
Surgeon's Exaltation (list, num, any → list)
<a class="permalink small" href="#patterns/lists@hexcasting:modify_in_place" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="wqaeaqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wqaeaqw
</canvas>
</details>
<p>
Remove the top iota of the stack and the number at the top, then set the nth element of the list at the top of the stack to that iota (where n is the number you removed). Does nothing if the number is out of bounds.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:last_n_list">
<h4 class="pattern-title">
Flock's Gambit (many, num → list)
<a class="permalink small" href="#patterns/lists@hexcasting:last_n_list" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="ewdqdwe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ewdqdwe
</canvas>
</details>
<p>
Remove
<i>
num
</i>
elements from the stack, then add them to a list at the top of the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:splat">
<h4 class="pattern-title">
Flock's Disintegration (list → many)
<a class="permalink small" href="#patterns/lists@hexcasting:splat" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qwaeawq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qwaeawq
</canvas>
</details>
<p>
Remove the list at the top of the stack, then push its contents to the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:construct">
<h4 class="pattern-title">
Speaker's Distillation (list, any → list)
<a class="permalink small" href="#patterns/lists@hexcasting:construct" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="ddewedd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddewedd
</canvas>
</details>
<p>
Remove the top iota, then add it as the first element to the list at the top of the stack.
</p>
</div>
<br/>
<div id="patterns/lists@hexcasting:deconstruct">
<h4 class="pattern-title">
Speaker's Decomposition (list → list, any)
<a class="permalink small" href="#patterns/lists@hexcasting:deconstruct" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="aaqwqaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aaqwqaa
</canvas>
</details>
<p>
Remove the first iota from the list at the top of the stack, then push that iota to the stack.
</p>
</div>
<br/>
</div>
<div id="patterns/patterns_as_iotas">
<h3 class="entry-title page-header">
Patterns as Iotas
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/patterns_as_iotas" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
One of the many peculiarities of this art is that
<i>
patterns themselves
</i>
can act as iotas-- I can even put them onto my stack when casting.
</p>
<p>
This raises a fairly obvious question: how do I express them? If I simply drew a pattern, it would hardly tell Nature to add it to my stack-- rather, it would simply be matched to an action.
</p>
<br/>
<p>
Fortunately, Nature has provided me with a set of
<a href="#casting/influences">
influences
</a>
that I can use to work with patterns directly.
</p>
<p>
In short,
<a href="#patterns/patterns_as_iotas@hexcasting:escape">
<span style="color: #fc77be">
Consideration
</span>
</a>
lets me add one pattern to the stack, and
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
Introspection
</span>
</a>
and
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospection
</span>
</a>
let me add a whole list.
</p>
<br/>
<div id="patterns/patterns_as_iotas@hexcasting:escape">
<h4>
Consideration
<a class="permalink small" href="#patterns/patterns_as_iotas@hexcasting:escape" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="west" data-string="qqqaw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqaw
</canvas>
</details>
<p>
To use
<a href="#patterns/patterns_as_iotas@hexcasting:escape">
<span style="color: #fc77be">
Consideration
</span>
</a>
, I draw it, then another arbitrary pattern. That second pattern is added to the stack.
</p>
</div>
<br/>
<p>
One may find it helpful to think of this as "escaping" the pattern onto the stack, if they happen to be familiar with the science of computers.
</p>
<p>
The usual use for this is to copy the pattern to a
<a href="#items/scroll">
<span style="color: #b0b">
Scroll
</span>
</a>
or
<a href="#items/slate">
<span style="color: #b0b">
Slate
</span>
</a>
using
<a href="#patterns/readwrite@hexcasting:write">
<span style="color: #fc77be">
Scribe's Gambit
</span>
</a>
, and then perhaps decorating with them.
</p>
<br/>
<div id="patterns/patterns_as_iotas@hexcasting:open_paren">
<h4>
Introspection
<a class="permalink small" href="#patterns/patterns_as_iotas@hexcasting:open_paren" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="west" data-string="qqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqq
</canvas>
</details>
<p>
Drawing
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
Introspection
</span>
</a>
makes my drawing of patterns act differently, for a time. Until I draw
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
Retrospection
</span>
</a>
, the patterns I draw are saved. Then, when I draw
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospection
</span>
</a>
, they are added to the stack as a list iota.
</p>
</div>
<br/>
<div id="patterns/patterns_as_iotas@hexcasting:close_paren">
<h4>
Retrospection
<a class="permalink small" href="#patterns/patterns_as_iotas@hexcasting:close_paren" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="eee" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eee
</canvas>
</details>
<p>
If I draw another
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Introspection
</span>
</a>
, it'll still be saved to the list, but I'll then have to draw
<i>
two
</i>
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospections
</span>
</a>
to get back to normal casting.
</p>
</div>
<br/>
<p>
Also, I can escape the special behavior of
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
Intro-
</span>
</a>
and
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospection
</span>
</a>
by drawing a
<a href="#patterns/patterns_as_iotas@hexcasting:escape">
<span style="color: #fc77be">
Consideration
</span>
</a>
before them, which will simply add them to the list without affecting which the number of
<a href="#patterns/patterns_as_iotas@hexcasting:close_paren">
<span style="color: #fc77be">
Retrospections
</span>
</a>
I need to return to casting.
</p>
<p>
If I draw two
<a href="#patterns/patterns_as_iotas@hexcasting:escape">
<span style="color: #fc77be">
Considerations
</span>
</a>
in a row while
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
introspecting
</span>
</a>
, it will add a single
<a href="#patterns/patterns_as_iotas@hexcasting:escape">
<span style="color: #fc77be">
Consideration
</span>
</a>
to the list.
</p>
<br/>
</div>
<div id="patterns/readwrite">
<h3 class="entry-title page-header">
Reading and Writing
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/readwrite" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
This section deals with the storage of
<span style="color: #490">
Iotas
</span>
in a more permanent medium. Nearly any iota can be stored to a suitable item, such as a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
or
<a href="#items/spellbook">
<span style="color: #b0b">
Spellbook
</span>
</a>
), and read back later. Certain items, such as an
<a href="#items/abacus">
<span style="color: #b0b">
Abacus
</span>
</a>
, can only be read from.
</p>
<p>
Iotas are usually read and written from the other hand, but it is also possible to read and write with an item when it is sitting on the ground as an item entity, or when in an item frame.
</p>
<br/>
<p>
There may be other entities I can interact with in this way. For example, a
<a href="#items/scroll">
<span style="color: #b0b">
Scroll
</span>
</a>
hung on the wall can have its pattern read off of it.
</p>
<p>
However, it seems I am unable to save a reference to another player, only me. I suppose an entity reference is similar to the idea of a True Name; perhaps Nature is helping to keep our Names out of the hands of enemies. If I want a friend to have my Name I can make a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
for them.
</p>
<br/>
<div id="patterns/readwrite@hexcasting:read">
<h4 class="pattern-title">
Scribe's Reflection (→ any)
<a class="permalink small" href="#patterns/readwrite@hexcasting:read" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aqqqqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqqqqq
</canvas>
</details>
<p>
Copy the iota stored in the item in my other hand and add it to the stack.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:write">
<h4 class="pattern-title">
Scribe's Gambit (any →)
<a class="permalink small" href="#patterns/readwrite@hexcasting:write" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="deeeee" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: deeeee
</canvas>
</details>
<p>
Remove the top iota from the stack, and save it into the item in my other hand.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:read/entity">
<h4 class="pattern-title">
Chronicler's Prfn. (entity → any)
<a class="permalink small" href="#patterns/readwrite@hexcasting:read/entity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wawqwqwqwqwqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wawqwqwqwqwqw
</canvas>
</details>
<p>
Like
<a href="#patterns/readwrite@hexcasting:read">
<span style="color: #fc77be">
Scribe's Reflection
</span>
</a>
, but the iota is read out of an entity instead of my other hand.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:write/entity">
<h4 class="pattern-title">
Chronicler's Gambit (entity, any →)
<a class="permalink small" href="#patterns/readwrite@hexcasting:write/entity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wdwewewewewew" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wdwewewewewew
</canvas>
</details>
<p>
Like
<a href="#patterns/readwrite@hexcasting:read">
<span style="color: #fc77be">
Scribe's Gambit
</span>
</a>
, but the iota is written to an entity instead of my other hand.
</p>
<p>
Interestingly enough, it looks like I cannot write my own Name using this spell. I get a sense that I might be endangered if I could.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:readable">
<h4 class="pattern-title">
Auditor's Reflection (→ bool)
<a class="permalink small" href="#patterns/readwrite@hexcasting:readable" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aqqqqqe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqqqqqe
</canvas>
</details>
<p>
If the item in my other hand holds an iota I can read, returns True. Otherwise, returns False.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:readable/entity">
<h4 class="pattern-title">
Auditor's Purification (entity → bool)
<a class="permalink small" href="#patterns/readwrite@hexcasting:readable/entity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wawqwqwqwqwqwew" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wawqwqwqwqwqwew
</canvas>
</details>
<p>
Like
<a href="#patterns/readwrite@hexcasting:readable">
<span style="color: #fc77be">
Auditor's Reflection
</span>
</a>
, but the readability of an entity is checked instead of my other hand.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:writable">
<h4 class="pattern-title">
Assessor's Reflection (→ bool)
<a class="permalink small" href="#patterns/readwrite@hexcasting:writable" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="deeeeeq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: deeeeeq
</canvas>
</details>
<p>
If I could save an iota into the item in my other hand, returns True. Otherwise, returns False.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:writable/entity">
<h4 class="pattern-title">
Assessor's Purification (entity → bool)
<a class="permalink small" href="#patterns/readwrite@hexcasting:writable/entity" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wdwewewewewewqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wdwewewewewewqw
</canvas>
</details>
<p>
Like
<a href="#patterns/readwrite@hexcasting:writable">
<span style="color: #fc77be">
Assessor's Reflection
</span>
</a>
, but the writability of an entity is checked instead of my other hand.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:local">
<h4>
The Ravenmind
<a class="permalink small" href="#patterns/readwrite@hexcasting:local" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<p>
Items are not the only places I can store information, however. I am also able to store that information in the
<span style="color: #74b3f2">
media
</span>
of the
<span style="color: #b38ef3">
Hex
</span>
itself, much like the stack, but separate. Texts refer to this as the
<a href="#patterns/readwrite@hexcasting:local">
<span style="color: #490">
ravenmind
</span>
</a>
. It holds a single iota, much like a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
, and begins with
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
like the same. It is preserved between iterations of
<a href="#patterns/meta@hexcasting:for_each">
<span style="color: #fc77be">
Thoth's Gambit
</span>
</a>
, but only lasts as long as the
<span style="color: #b38ef3">
Hex
</span>
it's a part of. Once I stop casting, the value will be lost.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:write/local">
<h4 class="pattern-title">
Huginn's Gambit (any →)
<a class="permalink small" href="#patterns/readwrite@hexcasting:write/local" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="eqqwawqaaw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eqqwawqaaw
</canvas>
</details>
<p>
Removes the top iota from the stack, and saves it to my
<a href="#patterns/readwrite@hexcasting:local">
<span style="color: #490">
ravenmind
</span>
</a>
, storing it there until I stop casting the
<span style="color: #b38ef3">
Hex
</span>
.
</p>
</div>
<br/>
<div id="patterns/readwrite@hexcasting:read/local">
<h4 class="pattern-title">
Muninn's Reflection (→ any)
<a class="permalink small" href="#patterns/readwrite@hexcasting:read/local" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qeewdweddw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qeewdweddw
</canvas>
</details>
<p>
Copy the iota out of my
<a href="#patterns/readwrite@hexcasting:local">
<span style="color: #490">
ravenmind
</span>
</a>
, which I likely just wrote with
<a href="#patterns/readwrite@hexcasting:write/local">
<span style="color: #fc77be">
Huginn's Gambit
</span>
</a>
.
</p>
</div>
<br/>
</div>
<div id="patterns/advanced_math">
<h3 class="entry-title page-header">
Advanced Mathematics
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/advanced_math" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/advanced_math@hexcasting:sin">
<h4 class="pattern-title">
Sine Purification (num → num)
<a class="permalink small" href="#patterns/advanced_math@hexcasting:sin" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqaa
</canvas>
</details>
<p>
Takes the sine of an angle in radians, yielding the vertical component of that angle drawn on a unit circle. Related to the values of
<a href="#patterns/consts@hexcasting:const/double/pi">
<span style="color: #490">
π
</span>
</a>
and
<a href="#patterns/consts@hexcasting:const/double/tau">
<span style="color: #490">
τ
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/advanced_math@hexcasting:cos">
<h4 class="pattern-title">
Cosine Purification (num → num)
<a class="permalink small" href="#patterns/advanced_math@hexcasting:cos" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqad" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqad
</canvas>
</details>
<p>
Takes the cosine of an angle in radians, yielding the horizontal component of that angle drawn on a unit circle. Related to the values of
<a href="#patterns/consts@hexcasting:const/double/pi">
<span style="color: #490">
π
</span>
</a>
and
<a href="#patterns/consts@hexcasting:const/double/tau">
<span style="color: #490">
τ
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/advanced_math@hexcasting:tan">
<h4 class="pattern-title">
Tangent Purification (num → num)
<a class="permalink small" href="#patterns/advanced_math@hexcasting:tan" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="wqqqqqadq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wqqqqqadq
</canvas>
</details>
<p>
Takes the tangent of an angle in radians, yielding the slope of that angle drawn on a circle. Related to the values of
<a href="#patterns/consts@hexcasting:const/double/pi">
<span style="color: #490">
π
</span>
</a>
and
<a href="#patterns/consts@hexcasting:const/double/tau">
<span style="color: #490">
τ
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/advanced_math@hexcasting:arcsin">
<h4 class="pattern-title">
Inverse Sine Prfn. (num → num)
<a class="permalink small" href="#patterns/advanced_math@hexcasting:arcsin" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="ddeeeee" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddeeeee
</canvas>
</details>
<p>
Takes the inverse sine of a value with absolute value 1 or less, yielding the angle whose sine is that value. Related to the values of
<a href="#patterns/consts@hexcasting:const/double/pi">
<span style="color: #490">
π
</span>
</a>
and
<a href="#patterns/consts@hexcasting:const/double/tau">
<span style="color: #490">
τ
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/advanced_math@hexcasting:arccos">
<h4 class="pattern-title">
Inverse Cosine Prfn. (num → num)
<a class="permalink small" href="#patterns/advanced_math@hexcasting:arccos" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="adeeeee" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: adeeeee
</canvas>
</details>
<p>
Takes the inverse cosine of a value with absolute value 1 or less, yielding the angle whose cosine is that value. Related to the values of
<a href="#patterns/consts@hexcasting:const/double/pi">
<span style="color: #490">
π
</span>
</a>
and
<a href="#patterns/consts@hexcasting:const/double/tau">
<span style="color: #490">
τ
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/advanced_math@hexcasting:arctan">
<h4 class="pattern-title">
Inverse Tangent Prfn. (num → num)
<a class="permalink small" href="#patterns/advanced_math@hexcasting:arctan" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="eadeeeeew" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eadeeeeew
</canvas>
</details>
<p>
Takes the inverse tangent of a value, yielding the angle whose tangent is that value. Related to the values of
<a href="#patterns/consts@hexcasting:const/double/pi">
<span style="color: #490">
π
</span>
</a>
and
<a href="#patterns/consts@hexcasting:const/double/tau">
<span style="color: #490">
τ
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/advanced_math@hexcasting:logarithm">
<h4 class="pattern-title">
Logarithmic Distillation (num, num → num)
<a class="permalink small" href="#patterns/advanced_math@hexcasting:logarithm" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="eqaqe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eqaqe
</canvas>
</details>
<p>
Removes the number at the top of the stack, then takes the logarithm of the number at the top using the other number as its base. Related to the value of
<a href="#patterns/consts@hexcasting:const/double/e">
<span style="color: #490">
<i>
e
</i>
</span>
</a>
.
</p>
</div>
<br/>
</div>
<div id="patterns/sets">
<h3 class="entry-title page-header">
Sets
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/sets" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Set operations are odd, in that some of them can accept two numbers or two lists, but not a combination thereof. Such arguments will be written as "num, num/list, list".
</p>
<p>
When numbers are used in those operations, they are being used as so-called binary "bitsets", lists of 1 and 0, true and false, "on" and "off".
</p>
<br/>
<br/>
<div id="patterns/sets@hexcasting:or_bit">
<h4 class="pattern-title">
Unifying Distillation (num, num/list, list → num/list)
<a class="permalink small" href="#patterns/sets@hexcasting:or_bit" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="waweaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waweaqa
</canvas>
</details>
<p>
Unifies two sets.
</p>
</div>
<br/>
<p>
As such:
</p>
<p class="fake-li">
With two numbers at the top of the stack, combines them into a bitset containing every "on" bit in either bitset.
</p>
<p class="fake-li">
With two lists, this creates a list of every element from the first list, plus every element from the second list that is not in the first list. This is similar to
<a href="#patterns/lists@hexcasting:concat">
<span style="color: #fc77be">
Combination Distillation
</span>
</a>
.
</p>
<br/>
<div id="patterns/sets@hexcasting:and_bit">
<h4 class="pattern-title">
Intersection Distillation (num, num/list, list → num/list)
<a class="permalink small" href="#patterns/sets@hexcasting:and_bit" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="wdweaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wdweaqa
</canvas>
</details>
<p>
Takes the intersection of two sets.
</p>
</div>
<br/>
<p>
As such:
</p>
<p class="fake-li">
With two numbers at the top of the stack, combines them into a bitset containing every "on" bit present in
<i>
both
</i>
bitsets.
</p>
<p class="fake-li">
With two lists, this creates a list of every element from the first list that is also in the second list.
</p>
<br/>
<div id="patterns/sets@hexcasting:xor_bit">
<h4 class="pattern-title">
Exclusionary Distillation (num, num/list, list → num/list)
<a class="permalink small" href="#patterns/sets@hexcasting:xor_bit" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="dwaeaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dwaeaqa
</canvas>
</details>
<p>
Takes the exclusive disjunction of two sets.
</p>
</div>
<br/>
<p>
As such:
</p>
<p class="fake-li">
With two numbers at the top of the stack, combines them into a bitset containing every "on" bit present in
<i>
exactly one
</i>
of the bitsets.
</p>
<p class="fake-li">
With two lists, this creates a list of every element in both lists that is
<i>
not
</i>
in the other list.
</p>
<br/>
<div id="patterns/sets@hexcasting:not_bit">
<h4 class="pattern-title">
Inversion Purification (num → num)
<a class="permalink small" href="#patterns/sets@hexcasting:not_bit" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="dweaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dweaqa
</canvas>
</details>
<p>
Takes the inversion of a bitset, changing all "on" bits to "off" and vice versa. In my experience, this will take the form of that number negated and decreased by one. For example, 0 will become -1, and -100 will become 99.
</p>
</div>
<br/>
<div id="patterns/sets@hexcasting:to_set">
<h4 class="pattern-title">
Uniqueness Purification (list → list)
<a class="permalink small" href="#patterns/sets@hexcasting:to_set" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="aweaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aweaqa
</canvas>
</details>
<p>
Removes duplicate entries from a list.
</p>
</div>
<br/>
</div>
<div id="patterns/meta">
<h3 class="entry-title page-header">
Meta-evaluation
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/meta" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/meta@hexcasting:eval">
<h4 class="pattern-title">
Hermes' Gambit ([pattern] | pattern → many)
<a class="permalink small" href="#patterns/meta@hexcasting:eval" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="deaqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: deaqq
</canvas>
</details>
<p>
Remove a pattern or list of patterns from the stack, then cast them as if I had drawn them myself with my
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
(until a
<a href="#patterns/meta@hexcasting:halt">
<span style="color: #fc77be">
Charon's Gambit
</span>
</a>
is encountered). If an iota is escaped with
<a href="#patterns/patterns_as_iotas@hexcasting:escape">
<span style="color: #fc77be">
Consideration
</span>
</a>
or
<a href="#patterns/patterns_as_iotas@hexcasting:open_paren">
<span style="color: #fc77be">
its ilk
</span>
</a>
, it will be pushed to the stack. Otherwise, non-patterns will fail.
</p>
</div>
<br/>
<p>
This can be
<i>
very
</i>
powerful in tandem with
<a href="#items/focus">
<span style="color: #b0b">
Foci
</span>
</a>
.
</p>
<p>
It also makes the bureaucracy of Nature a "Turing-complete" system, according to one esoteric scroll I found.
</p>
<p>
However, it seems there's a limit to how many times a
<span style="color: #b38ef3">
Hex
</span>
can cast itself-- Nature doesn't look kindly on runaway spells!
</p>
<p>
In addition, with the energies of the patterns occurring without me to guide them, any mishap will cause the remaining actions to become too unstable and immediately unravel.
</p>
<br/>
<div id="patterns/meta@hexcasting:for_each">
<h4 class="pattern-title">
Thoth's Gambit (list of patterns, list → list)
<a class="permalink small" href="#patterns/meta@hexcasting:for_each" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="dadad" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dadad
</canvas>
</details>
<p>
Remove a list of patterns and a list from the stack, then cast the given pattern over each element of the second list.
</p>
</div>
<br/>
<p>
More specifically, for each element in the second list, it will:
</p>
<p class="fake-li">
Create a new stack, with everything on the current stack plus that element
</p>
<p class="fake-li">
Draw all the patterns in the first list
</p>
<p class="fake-li">
Save all the iotas remaining on the stack to a list
<br/>
Then, after all is said and done, pushes the list of saved iotas onto the main stack.
</p>
<p>
No wonder all the practitioners of this art go mad.
</p>
<br/>
<div id="patterns/meta@hexcasting:halt">
<h4 class="pattern-title">
Charon's Gambit
<a class="permalink small" href="#patterns/meta@hexcasting:halt" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="aqdee" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqdee
</canvas>
</details>
<p>
This pattern forcibly halts a
<span style="color: #b38ef3">
Hex
</span>
. This is mostly useless on its own, as I could simply just stop writing patterns, or put down my staff.
</p>
</div>
<br/>
<p>
But when combined with
<a href="#patterns/meta@hexcasting:eval">
<span style="color: #fc77be">
Hermes'
</span>
</a>
or
<a href="#patterns/meta@hexcasting:for_each">
<span style="color: #fc77be">
Thoth's Gambits
</span>
</a>
, it becomes
<i>
far
</i>
more interesting. Those patterns serve to 'contain' that halting, and rather than ending the entire
<span style="color: #b38ef3">
Hex
</span>
, those gambits end instead. This can be used to cause
<a href="#patterns/meta@hexcasting:for_each">
<span style="color: #fc77be">
Thoth's Gambit
</span>
</a>
not to operate on every iota it's given. An escape from the madness, as it were.
</p>
<br/>
</div>
<div id="patterns/circle">
<div class="spoilered">
<h3 class="entry-title page-header">
Spell Circle Patterns
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/circle" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
These patterns must be cast from a
<a href="#greatwork/spellcircles">
<span style="color: #b0b">
Spell Circle
</span>
</a>
; trying to cast them through a
<a href="#items/staff">
<span style="color: #b0b">
Staff
</span>
</a>
will fail rather spectacularly.
</p>
<br/>
<div id="patterns/circle@hexcasting:circle/impetus_pos">
<h4 class="pattern-title">
Waystone Reflection (→ vector)
<a class="permalink small" href="#patterns/circle@hexcasting:circle/impetus_pos" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="eaqwqae" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eaqwqae
</canvas>
</details>
<p>
Returns the position of the
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
of this spell circle.
</p>
</div>
<br/>
<div id="patterns/circle@hexcasting:circle/impetus_dir">
<h4 class="pattern-title">
Lodestone Reflection (→ vector)
<a class="permalink small" href="#patterns/circle@hexcasting:circle/impetus_dir" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="eaqwqaewede" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eaqwqaewede
</canvas>
</details>
<p>
Returns the direction the
<a href="#greatwork/impetus">
<span style="color: #b0b">
Impetus
</span>
</a>
of this spell circle is facing as a unit vector.
</p>
</div>
<br/>
<div id="patterns/circle@hexcasting:circle/bounds/min">
<h4 class="pattern-title">
Lesser Fold Reflection (→ vector)
<a class="permalink small" href="#patterns/circle@hexcasting:circle/bounds/min" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="eaqwqaewdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eaqwqaewdd
</canvas>
</details>
<p>
Returns the position of the lower-north-west corner of the bounds of this spell circle.
</p>
</div>
<br/>
<div id="patterns/circle@hexcasting:circle/bounds/max">
<h4 class="pattern-title">
Greater Fold Reflection (→ vector)
<a class="permalink small" href="#patterns/circle@hexcasting:circle/bounds/max" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="west" data-string="aqwqawaaqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqwqawaaqa
</canvas>
</details>
<p>
Returns the position of the upper-south-east corner of the bounds of this spell circle.
</p>
</div>
<br/>
</div>
</div>
<div id="patterns/akashic_patterns">
<div class="spoilered">
<h3 class="entry-title page-header">
Akashic Patterns
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/akashic_patterns" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/akashic_patterns@hexcasting:akashic/read">
<h4 class="pattern-title">
Akasha's Distillation (vector, pattern → any)
<a class="permalink small" href="#patterns/akashic_patterns@hexcasting:akashic/read" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="west" data-string="qqqwqqqqqaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqwqqqqqaq
</canvas>
</details>
<p>
Read the iota associated with the given pattern out of the
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Akashic Library
</span>
</a>
with its
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Record
</span>
</a>
at the given position. This has no range limit. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/akashic_patterns@hexcasting:akashic/write">
<h4 class="pattern-title">
Akasha's Gambit (vector, pattern, any →)
<a class="permalink small" href="#patterns/akashic_patterns@hexcasting:akashic/write" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="eeeweeeeede" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeweeeeede
</canvas>
</details>
<p>
Associate the iota with the given pattern in the
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Akashic Library
</span>
</a>
with its
<a href="#greatwork/akashiclib">
<span style="color: #b0b">
Record
</span>
</a>
at the given position. This
<i>
does
</i>
have a range limit. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
</div>
</div>
</section>
<section id="patterns/spells">
<h2 class="category-title page-header">
Spells
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
Patterns and actions that perform a magical effect on the world.
</p>
<div id="patterns/spells/itempicking">
<h3 class="entry-title page-header">
Working with Items
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells/itempicking" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
Certain spells, such as
<a href="#patterns/spells/blockworks@hexcasting:place_block">
<span style="color: #fc77be">
Place Block
</span>
</a>
, will consume additional items from my inventory. When this happens, the spell will first look for the item to use, and then draw from all such items in my inventory.
</p>
<p>
This process is called "picking an item."
</p>
<br/>
<p>
More specifically:
</p>
<p class="fake-li">
First, the spell will search for the first valid item in my hotbar to the
<i>
right of my
<a href="#items/staff">
<span style="color: #b0b">
staff
</span>
</a>
</i>
, wrapping around at the right-hand side, and starting at the first slot if my
<a href="#items/staff">
<span style="color: #b0b">
staff
</span>
</a>
is in my off-hand.
</p>
<p class="fake-li">
Second, the spell will draw that item from as
<i>
far back in my inventory
</i>
as possible, prioritizing the main inventory over the hotbar.
</p>
<br/>
<p>
This way, I can keep a "chooser" item on my hotbar to tell the spell what to use, and fill the rest of my inventory with that item to keep the spell well-stocked.
</p>
<br/>
</div>
<div id="patterns/spells/basic">
<h3 class="entry-title page-header">
Basic Spells
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells/basic" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/spells/basic@hexcasting:explode">
<h4 class="pattern-title">
Explosion (vector, number →)
<a class="permalink small" href="#patterns/spells/basic@hexcasting:explode" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="aawaawaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aawaawaa
</canvas>
</details>
<p>
Remove a number and vector from the stack, then create an explosion at the given location with the given power.
</p>
</div>
<br/>
<p>
A power of 3 is about as much as a Creeper's blast; 4 is about as much as a TNT blast. Nature refuses to give me a blast of more than 10 power, though.
</p>
<p>
Strangely, this explosion doesn't seem to harm me. Perhaps it's because
<i>
I
</i>
am the one exploding?
</p>
<p>
Costs a negligible amount at power 0, plus 3 extra
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per point of explosion power.
</p>
<br/>
<div id="patterns/spells/basic@hexcasting:explode/fire">
<h4 class="pattern-title">
Fireball (vector, number →)
<a class="permalink small" href="#patterns/spells/basic@hexcasting:explode/fire" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="ddwddwdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddwddwdd
</canvas>
</details>
<p>
Remove a number and vector from the stack, then create a fiery explosion at the given location with the given power.
</p>
</div>
<br/>
<p>
Costs one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
, plus about 3 extra
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
s per point of explosion power. Otherwise, the same as
<a href="#patterns/spells/basic@hexcasting:explode">
<span style="color: #fc77be">
Explosion
</span>
</a>
, except with fire.
</p>
<br/>
<div id="patterns/spells/basic@hexcasting:add_motion">
<h4 class="pattern-title">
Impulse (entity, vector →)
<a class="permalink small" href="#patterns/spells/basic@hexcasting:add_motion" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="awqqqwaqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: awqqqwaqw
</canvas>
</details>
<p>
Remove an entity and direction from the stack, then give a shove to the given entity in the given direction. The strength of the impulse is determined by the length of the vector.
<br/>
Costs units of
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
equal to the square of the length of the vector, plus one for every Impulse except the first targeting an entity.
</p>
</div>
<br/>
<div id="patterns/spells/basic@hexcasting:blink">
<h4 class="pattern-title">
Blink (entity, number →)
<a class="permalink small" href="#patterns/spells/basic@hexcasting:blink" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="awqqqwaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: awqqqwaq
</canvas>
</details>
<p>
Remove an entity and length from the stack, then teleport the given entity along its look vector by the given length.
<br/>
Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Shard
</span>
</a>
per two blocks travelled.
</p>
</div>
<br/>
<div id="patterns/spells/basic@hexcasting:beep">
<h4 class="pattern-title">
Make Note (vector, number, number →)
<a class="permalink small" href="#patterns/spells/basic@hexcasting:beep" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="west" data-string="adaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: adaa
</canvas>
</details>
<p>
Remove a vector and two numbers from the stack. Plays an
<span style="color: #490">
instrument
</span>
defined by the first number at the given location, with a
<span style="color: #490">
note
</span>
defined by the second number. Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<p>
There appear to be 16 different
<span style="color: #490">
instruments
</span>
and 25 different
<span style="color: #490">
notes
</span>
. Both are indexed by zero.
</p>
<p>
These seem to be the same instruments I can produce with a
<span style="color: #b0b">
Note Block
</span>
, though the reason for each instrument's number being what it is eludes me.
</p>
<p>
Either way, I can find the numbers I need to use by inspecting a
<span style="color: #b0b">
Note Block
</span>
through a
<a href="#items/lens">
<span style="color: #b0b">
Scrying Lens
</span>
</a>
.
</p>
<br/>
</div>
<div id="patterns/spells/blockworks">
<h3 class="entry-title page-header">
Blockworks
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells/blockworks" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/spells/blockworks@hexcasting:place_block">
<h4 class="pattern-title">
Place Block (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:place_block" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="eeeeede" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeeeede
</canvas>
</details>
<p>
Remove a location from the stack, then pick a block item and place it at the given location.
<br/>
Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:break_block">
<h4 class="pattern-title">
Break Block (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:break_block" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="qaqqqqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaqqqqq
</canvas>
</details>
<p>
Remove a location from the stack, then break the block at the given location. This spell can break nearly anything a Diamond Pickaxe can break.
<br/>
Costs a bit more than one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:create_water">
<h4 class="pattern-title">
Create Water (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:create_water" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="aqawqadaq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqawqadaq
</canvas>
</details>
<p>
Summon a block of water (or insert up to a bucket's worth) into a block at the given position. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:destroy_water">
<h4 class="pattern-title">
Destroy Liquid (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:destroy_water" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="dedwedade" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: dedwedade
</canvas>
</details>
<p>
Drains either a liquid container at, or a body of liquid around, the given position. Costs about two
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:conjure_block">
<h4 class="pattern-title">
Conjure Block (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:conjure_block" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qqa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqa
</canvas>
</details>
<p>
Conjure an ethereal, but solid, block that sparkles with my pigment at the given position. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:conjure_light">
<h4 class="pattern-title">
Conjure Light (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:conjure_light" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qqd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqd
</canvas>
</details>
<p>
Conjure a magical light that softly glows with my pigment at the given position. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:bonemeal">
<h4 class="pattern-title">
Overgrow (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:bonemeal" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="wqaqwawqaqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wqaqwawqaqw
</canvas>
</details>
<p>
Encourage a plant or sapling at the target position to grow, as if
<span style="color: #b0b">
Bonemeal
</span>
was applied. Costs a bit more than one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:edify">
<h4 class="pattern-title">
Edify Sapling (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:edify" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="wqaqwd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wqaqwd
</canvas>
</details>
<p>
Forcibly infuse
<span style="color: #74b3f2">
media
</span>
into the sapling at the target position, causing it to grow into an
<a href="#items/edified">
<span style="color: #490">
Edified Tree
</span>
</a>
. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:ignite">
<h4 class="pattern-title">
Ignite Block (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:ignite" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="aaqawawa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aaqawawa
</canvas>
</details>
<p>
Start a fire on top of the given location, as if a
<span style="color: #b0b">
Fire Charge
</span>
was applied. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/blockworks@hexcasting:extinguish">
<h4 class="pattern-title">
Extinguish Area (vector →)
<a class="permalink small" href="#patterns/spells/blockworks@hexcasting:extinguish" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="ddedwdwd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: ddedwdwd
</canvas>
</details>
<p>
Extinguish blocks in a large area. Costs about six
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
</div>
<div id="patterns/spells/nadirs">
<h3 class="entry-title page-header">
Nadirs
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells/nadirs" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
This family of spells all impart a negative potion effect upon an entity. They all take an entity, the recipient, and one or two numbers, the first being the duration and the second, if present, being the potency (starting at 1).
</p>
<p>
Each one has a "base cost;" the actual cost is equal to that base cost, multiplied by the potency squared.
</p>
<br/>
<p>
According to certain legends, these spells and their sisters, the
<a href="#patterns/great_spells/zeniths">
<span style="color: #fc77be">
Zeniths
</span>
</a>
, were "[...] inspired by a world near to this one, where powerful wizards would gather magic from the land and hold duels to the death. Unfortunately, much was lost in translation..."
</p>
<p>
Perhaps that is the reason for their peculiar names.
</p>
<br/>
<div id="patterns/spells/nadirs@hexcasting:potion/weakness">
<h4 class="pattern-title">
White Sun's Nadir (entity, number, number →)
<a class="permalink small" href="#patterns/spells/nadirs@hexcasting:potion/weakness" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qqqqqaqwawaw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqaqwawaw
</canvas>
</details>
<p>
Inflicts
<span style="color: #490">
weakness
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per 10 seconds.
</p>
</div>
<br/>
<div id="patterns/spells/nadirs@hexcasting:potion/levitation">
<h4 class="pattern-title">
Blue Sun's Nadir (entity, number →)
<a class="permalink small" href="#patterns/spells/nadirs@hexcasting:potion/levitation" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="west" data-string="qqqqqawwawawd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqawwawawd
</canvas>
</details>
<p>
Inflicts
<span style="color: #490">
levitation
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per 5 seconds.
</p>
</div>
<br/>
<div id="patterns/spells/nadirs@hexcasting:potion/wither">
<h4 class="pattern-title">
Black Sun's Nadir (entity, number, number →)
<a class="permalink small" href="#patterns/spells/nadirs@hexcasting:potion/wither" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_west" data-string="qqqqqaewawawe" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqaewawawe
</canvas>
</details>
<p>
Inflicts
<span style="color: #490">
withering
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per second.
</p>
</div>
<br/>
<div id="patterns/spells/nadirs@hexcasting:potion/poison">
<h4 class="pattern-title">
Red Sun's Nadir (entity, number, number →)
<a class="permalink small" href="#patterns/spells/nadirs@hexcasting:potion/poison" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqadwawaww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqadwawaww
</canvas>
</details>
<p>
Inflicts
<span style="color: #490">
poison
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per 3 seconds.
</p>
</div>
<br/>
<div id="patterns/spells/nadirs@hexcasting:potion/slowness">
<h4 class="pattern-title">
Green Sun's Nadir (entity, number, number →)
<a class="permalink small" href="#patterns/spells/nadirs@hexcasting:potion/slowness" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="south_east" data-string="qqqqqadwawaw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqadwawaw
</canvas>
</details>
<p>
Inflicts
<span style="color: #490">
slowness
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per 5 seconds.
</p>
</div>
<br/>
</div>
<div id="patterns/spells/hexcasting">
<h3 class="entry-title page-header">
Crafting Casting Items
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells/hexcasting" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
These three spells each create an
<a href="#items/hexcasting">
<span style="color: #490">
item that casts a
</span>
<span style="color: #b38ef3">
Hex
</span>
</a>
.
<br/>
They all require me to hold the empty item in my off-hand, and require two things: the list of patterns to be cast, and an entity representing a dropped stack of
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst
</span>
</a>
to form the item's battery.
</p>
<p>
See
<a href="#items/hexcasting">
this entry
</a>
for more information.
</p>
<br/>
<div id="patterns/spells/hexcasting@hexcasting:craft/cypher">
<h4 class="pattern-title">
Craft Cypher (entity, list of patterns →)
<a class="permalink small" href="#patterns/spells/hexcasting@hexcasting:craft/cypher" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="waqqqqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waqqqqq
</canvas>
</details>
<p>
Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/hexcasting@hexcasting:craft/trinket">
<h4 class="pattern-title">
Craft Trinket (entity, list of patterns →)
<a class="permalink small" href="#patterns/spells/hexcasting@hexcasting:craft/trinket" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wwaqqqqqeaqeaeqqqeaeq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wwaqqqqqeaqeaeqqqeaeq
</canvas>
</details>
<p>
Costs about five
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethysts
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/hexcasting@hexcasting:craft/artifact">
<h4 class="pattern-title">
Craft Artifact (entity, list of patterns →)
<a class="permalink small" href="#patterns/spells/hexcasting@hexcasting:craft/artifact" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="wwaqqqqqeawqwqwqwqwqwwqqeadaeqqeqqeadaeqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wwaqqqqqeawqwqwqwqwqwwqqeadaeqqeqqeadaeqq
</canvas>
</details>
<p>
Costs about ten
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethysts
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/hexcasting@hexcasting:recharge">
<h4 class="pattern-title">
Recharge Item (entity →)
<a class="permalink small" href="#patterns/spells/hexcasting@hexcasting:recharge" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_west" data-string="qqqqqwaeaeaeaeaea" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqqwaeaeaeaeaea
</canvas>
</details>
<p>
Recharge a
<span style="color: #74b3f2">
media
</span>
-containing item in my other hand. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Shard
</span>
</a>
.
</p>
</div>
<br/>
<p>
This spell is cast in a similar method to the crafting spells; an entity representing a dropped stack of
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst
</span>
</a>
is provided, and recharges the
<span style="color: #74b3f2">
media
</span>
battery of the item in my other hand.
</p>
<p>
This spell
<i>
cannot
</i>
recharge the item farther than its original battery size.
</p>
<br/>
<div id="patterns/spells/hexcasting@hexcasting:erase">
<h4 class="pattern-title">
Erase Item
<a class="permalink small" href="#patterns/spells/hexcasting@hexcasting:erase" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="qdqawwaww" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qdqawwaww
</canvas>
</details>
<p>
Clear a
<span style="color: #b38ef3">
Hex
</span>
-containing item in my other hand. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<p>
The spell will also void all the
<span style="color: #74b3f2">
media
</span>
stored inside the item, releasing it back to Nature and returning the item to a perfectly clean slate. This way, I can re-use
<a href="#items/hexcasting">
<span style="color: #b0b">
Trinkets
</span>
</a>
I have put an erroneous spell into, for example.
</p>
<p>
This also works to clear a
<a href="#items/focus">
<span style="color: #b0b">
Focus
</span>
</a>
or
<a href="#items/spellbook">
<span style="color: #b0b">
Spellbook
</span>
</a>
page, unsealing them in the process.
</p>
<br/>
</div>
<div id="patterns/spells/sentinels">
<h3 class="entry-title page-header">
Sentinels
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells/sentinels" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
<i>
Hence, away! Now all is well,
<br/>
One aloof stand sentinel.
</i>
</p>
<p>
A
<a href="#patterns/spells/sentinels">
<span style="color: #490">
Sentinel
</span>
</a>
is a mysterious force I can summon to assist in the casting of
<span style="color: #b38ef3">
Hexes
</span>
, like a familiar or guardian spirit. It appears as a spinning geometric shape to my eyes, but is invisible to everyone else.
</p>
<br/>
<p>
It has several interesting properties:
</p>
<p class="fake-li">
It does not appear to be tangible; no one can touch it.
</p>
<p class="fake-li">
Only my
<span style="color: #b38ef3">
Hexes
</span>
can interact with it.
</p>
<p class="fake-li">
Once summoned, it stays in place until banished.
</p>
<p class="fake-li">
I am always able to see it if I'm close enough, even through solid objects.
</p>
<br/>
<div id="patterns/spells/sentinels@hexcasting:sentinel/create">
<h4 class="pattern-title">
Summon Sentinel (vector →)
<a class="permalink small" href="#patterns/spells/sentinels@hexcasting:sentinel/create" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="waeawae" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waeawae
</canvas>
</details>
<p>
Summons my
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
at the given position. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/spells/sentinels@hexcasting:sentinel/destroy">
<h4 class="pattern-title">
Banish Sentinel
<a class="permalink small" href="#patterns/spells/sentinels@hexcasting:sentinel/destroy" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="north_east" data-string="qdwdqdw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qdwdqdw
</canvas>
</details>
<p>
Banish my
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
, and remove it from the world. Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<div id="patterns/spells/sentinels@hexcasting:sentinel/get_pos">
<h4 class="pattern-title">
Locate Sentinel (→ vector)
<a class="permalink small" href="#patterns/spells/sentinels@hexcasting:sentinel/get_pos" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="waeawaede" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waeawaede
</canvas>
</details>
<p>
Add the position of my
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
to the stack, or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if it isn't summoned. Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
<div id="patterns/spells/sentinels@hexcasting:sentinel/wayfind">
<h4 class="pattern-title">
Wayfind Sentinel (vector → vector)
<a class="permalink small" href="#patterns/spells/sentinels@hexcasting:sentinel/wayfind" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="waeawaedwa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waeawaedwa
</canvas>
</details>
<p>
Transform the position vector on the top of the stack into a unit vector pointing from that position to my
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
, or
<a href="#casting/influences">
<span style="color: #490">
Null
</span>
</a>
if it isn't summoned. Costs a negligible amount of
<span style="color: #74b3f2">
media
</span>
.
</p>
</div>
<br/>
</div>
<div id="patterns/spells/colorize">
<h3 class="entry-title page-header">
Internalize Pigment
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/spells/colorize" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/spells/colorize@hexcasting:colorize">
<h4 class="pattern-title">
Internalize Pigment
<a class="permalink small" href="#patterns/spells/colorize@hexcasting:colorize" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="False" data-start="east" data-string="awddwqawqwawq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: awddwqawqwawq
</canvas>
</details>
<p>
I must be holding a
<a href="#items/pigments">
<span style="color: #b0b">
Pigment
</span>
</a>
in my other hand to cast this spell. When I do, it will consume the dye and permanently change my mind's coloration (at least, until I cast the spell again). Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
</div>
<br/>
</div>
</section>
<section id="patterns/great_spells">
<h2 class="category-title page-header">
Great Spells
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h2>
<p>
The spells catalogued here are purported to be of legendary difficulty and power. They seem to have been recorded only sparsely (for good reason, the texts claim). It's probably just the hogwash of extinct traditionalists, though-- a pattern's a pattern. What could possibly go wrong?
</p>
<div id="patterns/great_spells/create_lava">
<h3 class="entry-title page-header">
Create Lava
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/create_lava" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/great_spells/create_lava@hexcasting:create_lava">
<h4 class="pattern-title">
Create Lava (vector →)
<a class="permalink small" href="#patterns/great_spells/create_lava@hexcasting:create_lava" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="east" data-string="eaqawqadaqd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eaqawqadaqd
</canvas>
</details>
<p>
Summon a block of lava (or insert up to a bucket's worth) into a block at the given position. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
.
</p>
</div>
<br/>
<p>
It may be advisable to keep my knowledge of this spell secret. A certain faction of botanists get... touchy about it, or so I've heard.
</p>
<p>
Well, no one said tracing the deep secrets of the universe was going to be an easy time.
</p>
<br/>
</div>
<div id="patterns/great_spells/zeniths">
<h3 class="entry-title page-header">
Zeniths
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/zeniths" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<p>
This family of spells all impart a positive potion effect upon an entity, similar to the
<a href="#patterns/spells/nadirs">
<span style="color: #fc77be">
Nadirs
</span>
</a>
. However, these have their
<span style="color: #74b3f2">
media
</span>
costs increase with the
<i>
cube
</i>
of the potency.
</p>
<br/>
<div id="patterns/great_spells/zeniths@hexcasting:potion/regeneration">
<h4 class="pattern-title">
White Sun's Zenith (entity, number, number →)
<a class="permalink small" href="#patterns/great_spells/zeniths@hexcasting:potion/regeneration" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="north_west" data-string="qqqqaawawaedd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqqaawawaedd
</canvas>
</details>
<p>
Bestows
<span style="color: #490">
regeneration
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per second.
</p>
</div>
<br/>
<div id="patterns/great_spells/zeniths@hexcasting:potion/night_vision">
<h4 class="pattern-title">
Blue Sun's Zenith (entity, number →)
<a class="permalink small" href="#patterns/great_spells/zeniths@hexcasting:potion/night_vision" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="west" data-string="qqqaawawaeqdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqqaawawaeqdd
</canvas>
</details>
<p>
Bestows
<span style="color: #490">
night vision
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per 5 seconds.
</p>
</div>
<br/>
<div id="patterns/great_spells/zeniths@hexcasting:potion/absorption">
<h4 class="pattern-title">
Black Sun's Zenith (entity, number, number →)
<a class="permalink small" href="#patterns/great_spells/zeniths@hexcasting:potion/absorption" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="south_west" data-string="qqaawawaeqqdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qqaawawaeqqdd
</canvas>
</details>
<p>
Bestows
<span style="color: #490">
absorption
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per second.
</p>
</div>
<br/>
<div id="patterns/great_spells/zeniths@hexcasting:potion/haste">
<h4 class="pattern-title">
Red Sun's Zenith (entity, number, number →)
<a class="permalink small" href="#patterns/great_spells/zeniths@hexcasting:potion/haste" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="south_east" data-string="qaawawaeqqqdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qaawawaeqqqdd
</canvas>
</details>
<p>
Bestows
<span style="color: #490">
haste
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per 3 seconds.
</p>
</div>
<br/>
<div id="patterns/great_spells/zeniths@hexcasting:potion/strength">
<h4 class="pattern-title">
Green Sun's Zenith (entity, number, number →)
<a class="permalink small" href="#patterns/great_spells/zeniths@hexcasting:potion/strength" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="east" data-string="aawawaeqqqqdd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aawawaeqqqqdd
</canvas>
</details>
<p>
Bestows
<span style="color: #490">
strength
</span>
. Base cost is one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
per 3 seconds.
</p>
</div>
<br/>
</div>
<div id="patterns/great_spells/weather_manip">
<h3 class="entry-title page-header">
Weather Manipulation
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/weather_manip" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/great_spells/weather_manip@hexcasting:lightning">
<h4 class="pattern-title">
Summon Lightning (vector →)
<a class="permalink small" href="#patterns/great_spells/weather_manip@hexcasting:lightning" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="east" data-string="waadwawdaaweewq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waadwawdaaweewq
</canvas>
</details>
<p>
I command the heavens! This spell will summon a bolt of lightning to strike the earth where I direct it. Costs about three
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Shards
</span>
</a>
.
</p>
</div>
<br/>
<div id="patterns/great_spells/weather_manip@hexcasting:summon_rain">
<h4 class="pattern-title">
Summon Rain
<a class="permalink small" href="#patterns/great_spells/weather_manip@hexcasting:summon_rain" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="west" data-string="wwweeewwweewdawdwad" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wwweeewwweewdawdwad
</canvas>
</details>
<p>
I control the clouds! This spell will summon rain across the world I cast it upon. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
. Does nothing if it is already raining.
</p>
</div>
<br/>
<div id="patterns/great_spells/weather_manip@hexcasting:dispel_rain">
<h4 class="pattern-title">
Dispel Rain
<a class="permalink small" href="#patterns/great_spells/weather_manip@hexcasting:dispel_rain" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="east" data-string="eeewwweeewwaqqddqdqd" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eeewwweeewwaqqddqdqd
</canvas>
</details>
<p>
A counterpart to summoning rain. This spell will dispel rain across the world I cast it upon. Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Shard
</span>
</a>
. Does nothing if the skies are already clear.
</p>
</div>
<br/>
</div>
<div id="patterns/great_spells/flight">
<h3 class="entry-title page-header">
Flight
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/flight" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/great_spells/flight@hexcasting:flight">
<h4 class="pattern-title">
Flight (entity, number, number →)
<a class="permalink small" href="#patterns/great_spells/flight@hexcasting:flight" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="north_west" data-string="eawwaeawawaa" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: eawwaeawawaa
</canvas>
</details>
<p>
The power of flight! I have wrestled Nature to its knees. But Nature is vengeful, and itches for me to break its contract so it may break my shins.
</p>
</div>
<br/>
<p>
The entity (which must be a player) will be endowed with flight. The first number is the number of seconds they may fly for, and the second number is the radius of the zone they may fly in. If the recipient exits that zone, or their timer runs out while midair, the gravity that they spurned will get its revenge. Painfully.
</p>
<p>
It costs one quarter of an
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
, per meter of radius, per second in flight.
</p>
<br/>
</div>
<div id="patterns/great_spells/teleport">
<h3 class="entry-title page-header">
Greater Teleport
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/teleport" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/great_spells/teleport@hexcasting:teleport">
<h4 class="pattern-title">
Greater Teleport (entity, vector →)
<a class="permalink small" href="#patterns/great_spells/teleport@hexcasting:teleport" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="east" data-string="wwwqqqwwwqqeqqwwwqqwqqdqqqqqdqq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: wwwqqqwwwqqeqqwwwqqwqqdqqqqqdqq
</canvas>
</details>
<p>
Far more powerful than
<a href="#patterns/spells/basic@hexcasting:blink">
<span style="color: #fc77be">
Blink
</span>
</a>
, this spell lets me teleport nearly anywhere in the entire world! There does seem to be a limit, but it is
<i>
much
</i>
greater than the normal radius of influence I am used to.
</p>
</div>
<br/>
<p>
The entity will be teleported by the given vector, which is an offset from its given position. No matter the distance, it always seems to cost about ten
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
.
</p>
<p>
The transference is not perfect, and it seems when teleporting something as complex as a player, their inventory doesn't
<i>
quite
</i>
stay attached, and tends to splatter everywhere at the destination. In addition, the target will be forcibly removed from anything inanimate they are riding or sitting on ... but I've read scraps that suggest animals can come along for the ride, so to speak.
</p>
<br/>
</div>
<div id="patterns/great_spells/greater_sentinel">
<h3 class="entry-title page-header">
Summon Greater Sentinel
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/greater_sentinel" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<h4 class="pattern-title">
Summon Greater Sentinel (vector →)
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="east" data-string="waeawaeqqqwqwqqwq" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: waeawaeqqqwqwqqwq
</canvas>
</details>
<p>
Summon a greater version of my
<a href="#patterns/spells/sentinels">
<span style="color: #490">
Sentinel
</span>
</a>
. Costs about two
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst Dust
</span>
</a>
.
</p>
<br/>
<p>
The stronger
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
acts like the normal one I can summon without the use of a Great Spell, if a little more visually interesting. However, the range in which my spells can work is extended to a small region around my greater
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
, about 16 blocks. In other words, no matter where in the world I am, I can interact with things around my
<a href="#patterns/spells/sentinels">
<span style="color: #490">
sentinel
</span>
</a>
(the mysterious forces of chunkloading notwithstanding).
</p>
<br/>
</div>
<div id="patterns/great_spells/make_battery">
<h3 class="entry-title page-header">
Craft Phial
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/make_battery" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/great_spells/make_battery@hexcasting:craft/battery">
<h4 class="pattern-title">
Craft Phial (entity →)
<a class="permalink small" href="#patterns/great_spells/make_battery@hexcasting:craft/battery" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="south_west" data-string="aqqqaqwwaqqqqqeqaqqqawwqwqwqwqwqw" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: aqqqaqwwaqqqqqeqaqqqawwqwqwqwqwqw
</canvas>
</details>
<p>
Infuse a bottle with
<span style="color: #74b3f2">
media
</span>
to form a
<a href="#items/phials">
<span style="color: #b0b">
Phial.
</span>
</a>
</p>
</div>
<br/>
<p>
Similarly to the spells for
<a href="#patterns/spells/hexcasting">
<span style="color: #fc77be">
Crafting Casting Items
</span>
</a>
, I must hold a
<span style="color: #b0b">
Glass Bottle
</span>
in my other hand, and provide the spell with a dropped stack of
<a href="#items/amethyst">
<span style="color: #b0b">
Amethyst
</span>
</a>
. See
<a href="#items/phials">
this page
</a>
for more information.
</p>
<p>
Costs about one
<a href="#items/amethyst">
<span style="color: #b0b">
Charged Amethyst
</span>
</a>
.
</p>
<br/>
</div>
<div id="patterns/great_spells/brainsweep">
<h3 class="entry-title page-header">
Flay Mind
<a class="permalink small" href="#table-of-contents" title="Jump to top">
<i class="bi bi-box-arrow-up">
</i>
</a>
<a class="permalink small" href="#patterns/great_spells/brainsweep" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h3>
<div id="patterns/great_spells/brainsweep@hexcasting:brainsweep">
<h4 class="pattern-title">
Flay Mind (entity, vector →)
<a class="permalink small" href="#patterns/great_spells/brainsweep@hexcasting:brainsweep" title="Permalink">
<i class="bi bi-link-45deg">
</i>
</a>
</h4>
<details class="spell-collapsible">
<summary class="collapse-spell">
</summary>
<canvas class="spell-viz" data-per-world="True" data-start="north_east" data-string="qeqwqwqwqwqeqaeqeaqeqaeqaqded" height="216" width="216">
Your browser does not support visualizing patterns. Pattern code: qeqwqwqwqwqeqaeqeaqeqaeqaqded
</canvas>
</details>
<p>
I cannot make heads or tails of this spell... To be honest, I'm not sure I want to know what it does.
</p>
</div>
<br/>
</div>
</section>
</main>
</div>
</body>
</html>
'''
# ---
2023-06-07 05:01:25 +02:00
# name: test_stdout
CaptureResult(
err='',
out='''
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="The Hex Book, all in one place.">
<meta name="author" content="petrak@, Alwinfy">
<link rel="icon" href="icon.png">
<title>Hex Book</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.3.0/font/bootstrap-icons.css">
<style>
summary { display: list-item; }
details.spell-collapsible {
display: inline-block;
border: 1px solid #aaa;
border-radius: 4px;
padding: .5em .5em 0;
margin-bottom: .5em;
}
summary.collapse-spell {
font-weight: bold;
margin: -.5em -.5em 0;
padding: .5em;
}
details.spell-collapsible[open] {
padding: .5em;
}
details[open] summary.collapse-spell {
border-bottom: 1px solid #aaa;
margin-bottom: .5em;
}
details .collapse-spell::before {
content: "Click to show spell";
}
details[open] .collapse-spell::before {
content: "Click to hide spell";
}
blockquote.crafting-info {
font-size: inherit;
}
a.permalink {
margin-left: 0.5em;
}
a.permalink:hover {
color: lightgray;
}
p {
margin: 0.5ex 0;
}
p.fake-li {
margin: 0;
}
p.fake-li::before {
content: "\2022";
margin: 1ex;
}
.linkout::before {
content: "Link: ";
}
p.todo-note {
font-style: italic;
color: lightgray;
}
.obfuscated {
filter: blur(1em);
}
.spoilered {
filter: blur(1ex);
-moz-transition: filter 0.04s linear;
}
.spoilered:hover {
filter: blur(0.5ex);
}
.spoilered.unspoilered {
filter: blur(0);
}
canvas.spell-viz {
--dot-color: #777f;
--dot-color: #777f;
--start-dot-color: #f009;
--moving-dot-color: #0fa9;
--path-color: darkgray;
--visited-path-color: #0c8;
--dot-scale: 0.0625;
--moving-dot-scale: 0.125;
--line-scale: 0.08333;
--pausetext-scale: 0.5;
--dark-mode: 0;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #201a20;
color: #ddd;
}
.jumbotron {
background-color: #323;
}
canvas.spell-viz {
/* hack */
--dark-mode: 1;
}
}
</style>
<noscript>
<style>
/* for accessibility */
.spoilered {
filter: none !important;
}
</style>
</noscript>
<script>
"use strict";
const speeds = [0, 0.25, 0.5, 1, 2, 4];
const scrollThreshold = 100;
const rfaQueue = [];
const colorCache = new Map();
function getColorRGB(ctx, str) {
if (!colorCache.has(str)) {
ctx.fillStyle = str;
ctx.clearRect(0, 0, 1, 1);
ctx.fillRect(0, 0, 1, 1);
const imgData = ctx.getImageData(0, 0, 1, 1);
colorCache.set(str, imgData.data);
}
return colorCache.get(str);
}
function startAngle(str) {
switch (str) {
case "east": return 0;
case "north_east": return 1;
case "north_west": return 2;
case "west": return 3;
case "south_west": return 4;
case "south_east": return 5;
default: return 0;
}
}
function offsetAngle(str) {
switch (str) {
case "w": return 0;
case "q": return 1;
case "a": return 2;
case "s": return 3;
case "d": return 4;
case "e": return 5;
default: return -1;
}
}
function initializeElem(canvas) {
const str = canvas.dataset.string;
let angle = startAngle(canvas.dataset.start);
const perWorld = canvas.dataset.perWorld === "True";
// build geometry
const points = [[0, 0]];
let lastPoint = points[0];
let minPoint = lastPoint, maxPoint = lastPoint;
for (const ch of "w" + str) {
const addAngle = offsetAngle(ch);
if (addAngle < 0) continue;
angle = (angle + addAngle) % 6;
const trueAngle = Math.PI / 3 * angle;
const [lx, ly] = lastPoint;
const newPoint = [lx + Math.cos(trueAngle), ly - Math.sin(trueAngle)];
points.push(newPoint);
lastPoint = newPoint;
const [mix, miy] = minPoint;
minPoint = [Math.min(mix, newPoint[0]), Math.min(miy, newPoint[1])];
const [max, may] = maxPoint;
maxPoint = [Math.max(max, newPoint[0]), Math.max(may, newPoint[1])];
}
const size = Math.min(canvas.width, canvas.height) * 0.8;
const scale = size / Math.max(3, Math.max(maxPoint[1] - minPoint[1], maxPoint[0] - minPoint[0]));
const center = [(minPoint[0] + maxPoint[0]) * 0.5, (minPoint[1] + maxPoint[1]) * 0.5];
const truePoints = points.map(p => [canvas.width * 0.5 + scale * (p[0] - center[0]), canvas.height * 0.5 + scale * (p[1] - center[1])]);
let uniqPoints = [];
l1: for (const point of truePoints) {
for (const pt of uniqPoints) {
if (Math.abs(point[0] - pt[0]) < 0.00001 && Math.abs(point[1] - pt[1]) < 0.00001) {
continue l1;
}
}
uniqPoints.push(point);
}
// rendering code
const speed = 0.0025;
const context = canvas.getContext("2d");
const negaProgress = -3;
let progress = 0;
let scrollTimeout = 1e309;
let speedLevel = 3;
let speedIncrement = 0;
function speedScale() {
return speeds[speedLevel];
}
const style = getComputedStyle(canvas);
const getProp = n => style.getPropertyValue(n);
const tick = dt => {
scrollTimeout += dt;
if (canvas.offsetParent === null) return;
const strokeStyle = getProp("--path-color");
const strokeVisitedStyle = getProp("--visited-path-color");
const startDotStyle = getProp("--start-dot-color");
const dotStyle = getProp("--dot-color");
const movDotStyle = getProp("--moving-dot-color");
const strokeWidth = scale * +getProp("--line-scale");
const dotRadius = scale * +getProp("--dot-scale");
const movDotRadius = scale * +getProp("--moving-dot-scale");
const pauseScale = scale * +getProp("--pausetext-scale");
const bodyBg = scale * +getProp("--pausetext-scale");
const darkMode = +getProp("--dark-mode");
const bgColors = getColorRGB(context, getComputedStyle(document.body).backgroundColor);
if (!perWorld) {
progress += speed * dt * (progress > 0 ? speedScale() : Math.sqrt(speedScale()));
}
if (progress >= truePoints.length - 1) {
progress = negaProgress;
}
let ix = Math.floor(progress), frac = progress - ix, core = null, fadeColor = 0;
if (ix < 0) {
const rawFade = 2 * progress / negaProgress - 1;
fadeColor = 1 - Math.abs(rawFade);
context.strokeStyle = rawFade > 0 ? strokeVisitedStyle : strokeStyle;
ix = rawFade > 0 ? truePoints.length - 2 : 0;
frac = +(rawFade > 0);
} else {
context.strokeStyle = strokeVisitedStyle;
}
const [lx, ly] = truePoints[ix];
const [rx, ry] = truePoints[ix + 1];
core = [lx + (rx - lx) * frac, ly + (ry - ly) * frac];
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.lineWidth = strokeWidth;
context.moveTo(truePoints[0][0], truePoints[0][1]);
for (let i = 1; i < ix + 1; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.lineTo(core[0], core[1]);
context.stroke();
context.beginPath();
context.strokeStyle = strokeStyle;
context.moveTo(core[0], core[1]);
for (let i = ix + 1; i < truePoints.length; i++) {
context.lineTo(truePoints[i][0], truePoints[i][1]);
}
context.stroke();
for (let i = 0; i < uniqPoints.length; i++) {
context.beginPath();
context.fillStyle = (i == 0 && !perWorld) ? startDotStyle : dotStyle;
const radius = (i == 0 && !perWorld) ? movDotRadius : dotRadius;
context.arc(uniqPoints[i][0], uniqPoints[i][1], radius, 0, 2 * Math.PI);
context.fill();
}
if (!perWorld) {
context.beginPath();
context.fillStyle = movDotStyle;
context.arc(core[0], core[1], movDotRadius, 0, 2 * Math.PI);
context.fill();
}
if (fadeColor) {
context.fillStyle = `rgba(${bgColors[0]}, ${bgColors[1]}, ${bgColors[2]}, ${fadeColor})`;
context.fillRect(0, 0, canvas.width, canvas.height);
}
if (scrollTimeout <= 2000) {
context.fillStyle = `rgba(200, 200, 200, ${(2000 - scrollTimeout) / 1000})`;
context.font = `${pauseScale}px sans-serif`;
context.fillText(speedScale() ? speedScale() + "x" : "Paused", 0.2 * scale, canvas.height - 0.2 * scale);
}
};
rfaQueue.push(tick);
// scrolling input
if (!perWorld) {
canvas.addEventListener("wheel", ev => {
speedIncrement += ev.deltaY;
const oldSpeedLevel = speedLevel;
if (speedIncrement >= scrollThreshold) {
speedLevel--;
} else if (speedIncrement <= -scrollThreshold) {
speedLevel++;
}
if (oldSpeedLevel != speedLevel) {
speedIncrement = 0;
speedLevel = Math.max(0, Math.min(speeds.length - 1, speedLevel));
scrollTimeout = 0;
}
ev.preventDefault();
});
}
}
function hookLoad(elem) {
let init = false;
const canvases = elem.querySelectorAll("canvas");
elem.addEventListener("toggle", () => {
if (!init) {
canvases.forEach(initializeElem);
init = true;
}
});
}
function hookToggle(elem) {
const details = Array.from(document.querySelectorAll("details." + elem.dataset.target));
elem.addEventListener("click", () => {
if (details.some(x => x.open)) {
details.forEach(x => x.open = false);
} else {
details.forEach(x => x.open = true);
}
});
}
const params = new URLSearchParams(document.location.search);
function hookSpoiler(elem) {
if (params.get("nospoiler") !== null) {
elem.classList.add("unspoilered");
} else {
const thunk = ev => {
if (!elem.classList.contains("unspoilered")) {
ev.preventDefault();
ev.stopImmediatePropagation();
elem.classList.add("unspoilered");
}
elem.removeEventListener("click", thunk);
};
elem.addEventListener("click", thunk);
if (elem instanceof HTMLAnchorElement) {
const href = elem.getAttribute("href");
if (href.startsWith("#")) {
elem.addEventListener("click", () => document.getElementById(href.substring(1)).querySelector(".spoilered").classList.add("unspoilered"));
}
}
}
}
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('details.spell-collapsible').forEach(hookLoad);
document.querySelectorAll('a.toggle-link').forEach(hookToggle);
document.querySelectorAll('.spoilered').forEach(hookSpoiler);
function tick(prevTime, time) {
const dt = time - prevTime;
for (const q of rfaQueue) {
q(dt);
}
requestAnimationFrame(t => tick(time, t));
}
requestAnimationFrame(t => tick(t, t));
});
</script>
</head>
<body>
<div class="container" style="margin-top: 3em;">
<blockquote>
<h1>This is the online version of the Hexcasting documentation.</h1>
<p>Embedded images and patterns are included, but not crafting recipes or items. There's an in-game book for
those.</p>
<p>Additionally, this is built from the latest code on GitHub. It may describe <b>newer</b> features that you
may not necessarily have, even on the latest CurseForge version!</p>
<p><b>Entries which are blurred are spoilers</b>. Click to reveal them, but be aware that they may spoil endgame
progression. Alternatively, click <a href="?nospoiler">here</a> to get a version with all spoilers showing.
</p>
</blockquote>
</div>
<div class='container'><header class='jumbotron'><h1 class='book-title'>Hex Notebook</h1><p>I seem to have discovered a new method of magical arts, in which one draws patterns strange and wild onto a hexagonal grid. It fascinates me. I&#x27;ve decided to start a journal of my thoughts and findings.</p><p><a href='https://discord.gg/4xxHGYteWk'>Discord Server Link</a></p></header><nav><h2 id='table-of-contents' class='page-header'>Table of Contents<a href='javascript:void(0)' class='permalink toggle-link small' data-target='toc-category' title='Toggle all'><i class='bi bi-list-nested'></i></a><a href='#table-of-contents' class='permalink small' title='Permalink'><i class='bi bi-link-45deg'></i></a></h2><details class='toc-category'><summary><a href='#basics' class=''>Getting Started</a></summary><ul><li><a href='#basics/media' class=''>Media</a></li><li><a href='#basics/geodes' class=''>Geodes</a></li><li><a href='#basics/couldnt_cast' class='spoilered'>A Frustration</a></li><li><a href='#basics/start_to_see' class='spoilered'>WHAT DID I SEE</a></li></ul></details><details class='toc-category'><summary><a href='#casting' class=''>Hex Casting</a></summary><ul><li><a href='#casting/101' class=''>Hexing 101</a></li><li><a href='#casting/vectors' class=''>A Primer on Vectors</a></li><li><a href='#casting/mishaps' class=''>Mishaps</a></li><li><a href='#casting/stack' class=''>Stacks</a></li><li><a href='#casting/naming' class=''>Naming Actions</a></li><li><a href='#casting/influences' class=''>Influences</a></li><li><a href='#casting/mishaps2' class='spoilered'>Enlightened Mishaps</a></li></ul></details><details class='toc-category'><summary><a href='#items' class=''>Items</a></summary><ul><li><a href='#items/amethyst' class=''>Amethyst</a></li><li><a href='#items/staff' class=''>Staff</a></li><li><a href='#items/lens' class=''>Scrying Lens</a></li><li><a href='#items/focus' class=''>Focus</a></li><li><a href='#items/abacus' class=''>Abacus</a></li><li><a href='#items/spellbook' class=''>Spellbook</a></li><li><a href='#items/scroll' class=''>Scrolls</a></li><li><a href='#items/slate' class=''>Slates</a></li><li><a href='#items/hexcasting' class=''>Casting Items</a></li><li><a href='#items/phials' class=''>Phials of Media</a></li><li><a href='#items/pigments' class=''>Pigments</a></li><li><a href='#items/edified' class=''>Edified Trees</a></li><li><a href='#items/jeweler_hammer' class=''>Jeweler&#x27;s Hammer</a></li><li><a href='#items/decoration' class=''>Decorative Blocks</a></li></ul></details><details class='toc-category'><summary><a href='#greatwork' class='spoilered'>The Great Work</a></summary><ul><li><a href='#greatwork/the_work' class='spoilered'>The Work</a></li><li><a href='#greatwork/brainsweeping' class='spoilered'>On the Flaying of Minds</a></li><li><a href='#greatwork/spellcircles' class='spoilered'>Spell Circles</a></li><li><a href='#greatwork/impetus' class='spoilered'>Impetuses</a></li><li><a href='#greatwork/directrix' class='spoilered'>Directrices</a></li><li><a href='#greatwork/akashiclib' class='spoilered'>Akashic Libraries</a></li></ul></details><details class='toc-category'><summary><a href='#lore' class=''>Lore</a></summary><ul><li><a href='#lore/terabithia1' class=''>Cardamom Steles, #1</a></li><li><a href='#lore/terabithia2' class=''>Cardamom Steles, #2</a></li><li><a href='#lore/terabithia3' class=''>Cardamom Steles, #3, 1/2</a></li><li><a href='#lore/terabithia4' class=''>Cardamom Steles, #3, 2/2</a></li><li><a href='#lore/terabithia5' class=''>Cardamom Steles, #4</a></li><li><a href='#lore/experiment1' class=''>Wooleye Instance Notes</a></li><li><a href='#lore/experiment2' class=''>Wooleye Interview Logs</a></li><li><a href='#lore/inventory' class=''>Restoration Log #72</a></li></ul></details><details class='toc-category'><summary><a href='#interop' class=''>Cross-Mod Compatibility</a></summary><ul><li><a href='#interop/interop' class=''>Cross-Mod Compatibility</a></li><li><a href='#interop/gravity' class=''>Gravity Changer</a></li><li><a href='#interop/pehkui' class=''>Pehkui</a></li></ul>
</body>
</html>
''',
)
# ---