diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..0a438461c6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,68 @@ +name: Bug Report +description: Report an issue with Hex Casting +labels: + - bug + - unconfirmed + +body: + - type: dropdown + attributes: + label: Modloader + options: + - Forge + - Fabric + - Quilt + validations: + required: true + + - type: input + attributes: + label: Minecraft version + placeholder: eg. 1.19.2 + validations: + required: true + + - type: input + attributes: + label: Hex Casting version + placeholder: eg. 0.11.1-7-pre-609 + validations: + required: true + + - type: input + attributes: + label: Modloader version + description: | + List the version of the mod loader you are using. + If on Fabric, post the versions of both Fabric Loader and Fabric API. + placeholder: "eg. Forge: 36.2.9 / Fabric: Loader 0.10.6 + API 0.42.1" + + - type: input + attributes: + label: Modpack info + description: If playing a modpack, post the link to it! + + - type: input + attributes: + label: The latest.log file + description: Please use https://mclo.gs/ if possible. Sites like https://gist.github.com/ or https://pastebin.com/ are also acceptable. + + - type: textarea + attributes: + label: Issue description + placeholder: A description of the issue. + validations: + required: true + + - type: textarea + attributes: + label: Steps to reproduce + placeholder: | + 1. First step + 2. Second step + 3. etc... + + - type: textarea + attributes: + label: Other information + description: Any other relevant information that is related to this issue, such as other mods and their versions. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..b8e5e99047 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,17 @@ +name: Feature Request +description: Suggest an improvement or a new feature +labels: + - enhancement + - unconfirmed + +body: + - type: textarea + attributes: + label: Describe the feature + validations: + required: true + + - type: textarea + attributes: + label: Additional context + description: Any other relevant information (eg. use cases, alternative solutions) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index 000737ec55..f2d8c7906c 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -1,29 +1,60 @@ -name: Build the Python doc-gen +name: Build the web book on: push: - branches: [main] + branches: main + workflow_dispatch: + inputs: + release: + description: Release this version + type: boolean + default: false + publish: + description: Package index to publish to + type: choice + options: + - none + - PyPI + +env: + PYPI_PACKAGE: hexdoc-hexcasting + +permissions: + contents: read jobs: - build_docs: - runs-on: ubuntu-latest + hexdoc: + uses: hexdoc-dev/hexdoc/.github/workflows/hexdoc.yml@main permissions: contents: write + pages: read + secrets: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + python-version: "3.11" + release: |- + ${{ + github.event_name != 'push' && inputs.release + || github.event_name == 'push' && startsWith(github.event.head_commit.message, '[Release]') + }} + + publish-pypi: + runs-on: ubuntu-latest + needs: hexdoc + if: |- + needs.hexdoc.outputs.release == 'true' && + (github.event_name == 'push' || inputs.publish == 'PyPI') + environment: + name: pypi + url: https://pypi.org/p/${{ env.PYPI_PACKAGE }} + permissions: + id-token: write steps: - - uses: actions/checkout@v3 - - name: Generate file - run: doc/collate_data.py Common/src/main/resources hexcasting thehexbook doc/template.html index.html.uncommitted - - name: Check out gh-pages - uses: actions/checkout@v3 - with: - clean: false - ref: gh-pages - - name: Overwrite file and commmit - run: | - mv index.html.uncommitted index.html - git config user.name "Documentation Generation Bot" - git config user.email "noreply@github.com" - git add index.html - git diff-index --quiet HEAD || git commit -m "Update docs at index.html from $GITHUB_REF" - - name: Upload changes - run: git push + - name: Download package artifact + uses: actions/download-artifact@v3 + with: + name: hexdoc-build + path: dist + + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000000..fadca52244 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,50 @@ +# mirror of the Jenkins pipeline, used for requiring PRs to build successfully before merging +# this uses Actions because it's easier to integrate with GitHub PRs, and to allow running the build on forks + +name: Build pull request + +on: + pull_request: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17.0.1" + - uses: gradle/actions/setup-gradle@v3 + + - name: Clean + run: | + chmod +x gradlew + ./gradlew clean + + - name: Build + run: ./gradlew build + + - name: Run Datagen + run: ./gradlew runAllDatagen + + - name: Check Datagen + run: | + git add --intent-to-add . + git diff --name-only --exit-code -- ":!:*/src/generated/resources/.cache/*" + + hexdoc: + uses: hexdoc-dev/hexdoc/.github/workflows/hexdoc.yml@main + permissions: + contents: write + pages: read + secrets: + GH_TOKEN: "" + with: + python-version: "3.11" + release: false + deploy-pages: false + site-url: https://hexcasting.hexxy.media diff --git a/.gitignore b/.gitignore index 36af21beda..2da9d42dbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,10 @@ +# hexdoc +doc/**/_export/generated/ +/_site/ +/_checkout/ +__gradle_version__.py +.hexdoc/ + # eclipse bin *.launch @@ -22,9 +29,168 @@ eclipse run .DS_Store +# MacOS moment +.DS_Store + # Files from Forge MDK forge*changelog.txt Session.vim plot/ + +# Python + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..6ce73458d7 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + // List of extensions which should be recommended for users of this workspace. + "recommendations": [ + "ms-python.vscode-pylance", + "charliermarsh.ruff", + "samuelcolvin.jinjahtml", + "noxiz.jinja-snippets", + ], +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..7a26f45b1a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,34 @@ +{ + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports.ruff": "explicit" + }, + "editor.rulers": [88], + }, + "[yaml][html][css][javascript][jinja-html][jinja-css][jinja-js]": { + "editor.tabSize": 2, + }, + "[html][jinja-html]": { + "editor.rulers": [120], + }, + "ruff.organizeImports": true, + "ruff.lint.args": [ + "--extend-ignore=I", // format on save is enabled, so don't show the squiggles + ], + "python.languageServer": "Pylance", + "python.analysis.diagnosticMode": "workspace", + "python.analysis.packageIndexDepths": [ + {"name": "hexdoc", "depth": 3}, + {"name": "pydantic", "depth": 2}, + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "files.associations": { + "*.js.jinja": "javascript", + "*.css.jinja": "css", + "*.jcss.jinja": "jinja-css", // for files with a lot of jinja stuff, where the linting isn't useful + "*.json5.jinja": "json5", + }, +} diff --git a/Common/build.gradle b/Common/build.gradle index 2c84ea11f8..d5e6128c84 100644 --- a/Common/build.gradle +++ b/Common/build.gradle @@ -28,17 +28,13 @@ repositories { url = "https://modmaven.dev" } - // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: - flatDir { - dir 'libs' - } } dependencies { compileOnly group: 'org.spongepowered', name: 'mixin', version: '0.8.5' implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' - compileOnly "${modID}:paucal-common-$minecraftVersion:$paucalVersion" + compileOnly "at.petra-k.paucal:paucal-common-$minecraftVersion:$paucalVersion" compileOnly "vazkii.patchouli:Patchouli-xplat:$minecraftVersion-$patchouliVersion-SNAPSHOT" compileOnly "org.jetbrains:annotations:$jetbrainsAnnotationsVersion" diff --git a/Common/libs/paucal-common-1.20.1-0.6.0.jar b/Common/libs/paucal-common-1.20.1-0.6.0.jar deleted file mode 100644 index 5d6e2c0ad9..0000000000 Binary files a/Common/libs/paucal-common-1.20.1-0.6.0.jar and /dev/null differ diff --git a/Common/src/main/resources/data/hexcasting/damage_type/overcast.json b/Common/src/generated/resources/data/hexcasting/damage_type/overcast.json similarity index 81% rename from Common/src/main/resources/data/hexcasting/damage_type/overcast.json rename to Common/src/generated/resources/data/hexcasting/damage_type/overcast.json index cc59d47153..012582c4b2 100644 --- a/Common/src/main/resources/data/hexcasting/damage_type/overcast.json +++ b/Common/src/generated/resources/data/hexcasting/damage_type/overcast.json @@ -1,5 +1,5 @@ { - "exhaustion": 0, + "exhaustion": 0.0, "message_id": "hexcasting.overcast", "scaling": "when_caused_by_living_non_player" } \ No newline at end of file diff --git a/Common/src/main/resources/data/hexcasting/damage_type/shame.json b/Common/src/generated/resources/data/hexcasting/damage_type/shame.json similarity index 80% rename from Common/src/main/resources/data/hexcasting/damage_type/shame.json rename to Common/src/generated/resources/data/hexcasting/damage_type/shame.json index e7cd1eda85..2a9dbc393e 100644 --- a/Common/src/main/resources/data/hexcasting/damage_type/shame.json +++ b/Common/src/generated/resources/data/hexcasting/damage_type/shame.json @@ -1,5 +1,5 @@ { - "exhaustion": 0, + "exhaustion": 0.0, "message_id": "hexcasting.shame", "scaling": "when_caused_by_living_non_player" } \ No newline at end of file diff --git a/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json new file mode 100644 index 0000000000..ef37abe999 --- /dev/null +++ b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:overcast", + "hexcasting:shame" + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_effects.json b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_effects.json new file mode 100644 index 0000000000..ef37abe999 --- /dev/null +++ b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_effects.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:overcast", + "hexcasting:shame" + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_invulnerability.json b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_invulnerability.json new file mode 100644 index 0000000000..8d8be7f423 --- /dev/null +++ b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_invulnerability.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:shame" + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_shield.json b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_shield.json new file mode 100644 index 0000000000..ef37abe999 --- /dev/null +++ b/Common/src/generated/resources/data/minecraft/tags/damage_type/bypasses_shield.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:overcast", + "hexcasting:shame" + ] +} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/OperationAction.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/OperationAction.kt index c2c5b06ee3..1e9a39f80f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/OperationAction.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/OperationAction.kt @@ -18,7 +18,7 @@ data class OperationAction(val pattern: HexPattern) : Action { return try { HexArithmetics.getEngine().run(pattern, env, image, continuation) } catch (e: NoOperatorCandidatesException) { - throw MishapInvalidOperatorArgs(e.args, e.pattern) + throw MishapInvalidOperatorArgs(e.args) } } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java index d1b3122189..f03011ad98 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java @@ -67,8 +67,11 @@ public final void triggerCreateEvent() { protected Map, @NotNull CastingEnvironmentComponent> componentMap = new HashMap<>(); private final List postExecutions = new ArrayList<>(); + private final List postCasts = new ArrayList<>(); - private final List extractMedias = new ArrayList<>(); + private final List preMediaExtract = new ArrayList<>(); + private final List postMediaExtract = new ArrayList<>(); + private final List isVecInRanges = new ArrayList<>(); private final List hasEditPermissionsAts = new ArrayList<>(); @@ -116,7 +119,11 @@ public void addExtension(@NotNull T exte if (extension instanceof PostCast postCast) postCasts.add(postCast); if (extension instanceof ExtractMedia extractMedia) - extractMedias.add(extractMedia); + if (extension instanceof ExtractMedia.Pre pre) { + preMediaExtract.add(pre); + } else if (extension instanceof ExtractMedia.Post post) { + postMediaExtract.add(post); + } if (extension instanceof IsVecInRange isVecInRange) isVecInRanges.add(isVecInRange); if (extension instanceof HasEditPermissionsAt hasEditPermissionsAt) @@ -133,7 +140,11 @@ public void removeExtension(@NotNull CastingEnvironmentComponent.Key key) { if (extension instanceof PostCast postCast) postCasts.remove(postCast); if (extension instanceof ExtractMedia extractMedia) - extractMedias.remove(extractMedia); + if (extension instanceof ExtractMedia.Pre pre) { + preMediaExtract.remove(pre); + } else if (extension instanceof ExtractMedia.Post post) { + postMediaExtract.remove(post); + } if (extension instanceof IsVecInRange isVecInRange) isVecInRanges.remove(isVecInRange); if (extension instanceof HasEditPermissionsAt hasEditPermissionsAt) @@ -216,9 +227,12 @@ public boolean isEnlightened() { * positive. */ public long extractMedia(long cost) { - for (var extractMediaComponent : extractMedias) + for (var extractMediaComponent : preMediaExtract) cost = extractMediaComponent.onExtractMedia(cost); - return extractMediaEnvironment(cost); + cost = extractMediaEnvironment(cost); + for (var extractMediaComponent : postMediaExtract) + cost = extractMediaComponent.onExtractMedia(cost); + return cost; } /** @@ -273,7 +287,7 @@ public final boolean isVecInAmbit(Vec3 vec) { } public final boolean isEntityInRange(Entity e) { - return e instanceof Player || this.isVecInRange(e.position()); + return (e instanceof Player && HexConfig.server().trueNameHasAmbit()) || (this.isVecInWorld(e.position()) && this.isVecInRange(e.position())); } /** @@ -304,6 +318,9 @@ public final boolean canEditBlockAt(BlockPos vec) { * Convenience function to throw if the entity is out of the caster's range or the world */ public final void assertEntityInRange(Entity e) throws MishapEntityTooFarAway { + if (e instanceof ServerPlayer && HexConfig.server().trueNameHasAmbit()) { + return; + } if (!this.isVecInWorld(e.position())) { throw new MishapEntityTooFarAway(e); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironmentComponent.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironmentComponent.java index 5cae9e9f41..faee1de0ba 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironmentComponent.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironmentComponent.java @@ -27,10 +27,20 @@ interface ExtractMedia extends CastingEnvironmentComponent { /** * Receives the cost that is being extracted, should return the * remaining cost after deducting whatever cost source this component - * is responsible for (should be >= 0). All Components are executed - * before the CastingEnvironment's extractMedia is executed. + * is responsible for (should be >= 0) */ long onExtractMedia(long cost); + + /** + * ExtractMedia component that extracts media BEFORE the call to {@link CastingEnvironment#extractMediaEnvironment(long)} + */ + interface Pre extends ExtractMedia {} + + /** + * ExtractMedia component that extracts media AFTER the call to {@link CastingEnvironment#extractMediaEnvironment(long)} + * if the input is <= 0 you should also probably return 0 (since media cost was already paid off) + */ + interface Post extends ExtractMedia {} } interface IsVecInRange extends CastingEnvironmentComponent { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt index d04b1c29c9..3ffd771bcd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt @@ -67,6 +67,11 @@ data class CastingImage private constructor( */ fun withOverriddenUsedOps(count: Long) = this.copy(opsConsumed = count) + /** + * Returns a copy of this with escape/paren-related fields cleared. + */ + fun withResetEscape() = this.copy(parenCount = 0, parenthesized = listOf(), escapeNext = false) + fun serializeToNbt() = NBTBuilder { TAG_STACK %= stack.serializeToNBT() diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt index 5ff591bf8d..849a43ba20 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt @@ -59,7 +59,12 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) { continuation = image2.continuation lastResolutionType = image2.resolutionType - performSideEffects(info, image2.sideEffects) + try { + performSideEffects(info, image2.sideEffects) + } catch (e: Exception) { + e.printStackTrace() + performSideEffects(info, listOf(OperatorSideEffect.DoMishap(MishapInternalException(e), Mishap.Context(null, null)))) + } info.earlyExit = info.earlyExit || !lastResolutionType.success } @@ -185,7 +190,7 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) { val newParenCount = this.image.parenCount + if (last == null || last.escaped || last.iota !is PatternIota) 0 else when (last.iota.pattern) { SpecialPatterns.INTROSPECTION -> -1 SpecialPatterns.RETROSPECTION -> 1 - else -> -1 + else -> 0 } this.image.copy(parenthesized = newParens, parenCount = newParenCount) to if (last == null) ResolvedPatternType.ERRORED else ResolvedPatternType.UNDONE } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt index ec587cb787..0221c1f36d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt @@ -73,7 +73,8 @@ data class FrameForEach( return CastResult( ListIota(code), newCont, - newImage.copy(stack = tStack), + // reset escapes so they don't carry over to other iterations or out of thoth + newImage.withResetEscape().copy(stack = tStack), listOf(), ResolvedPatternType.EVALUATED, HexEvalSounds.THOTH, diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidIotas.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidIotas.kt deleted file mode 100644 index 34a13f7acd..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidIotas.kt +++ /dev/null @@ -1,32 +0,0 @@ -package at.petrak.hexcasting.api.casting.mishaps - -import at.petrak.hexcasting.api.casting.eval.CastingEnvironment -import at.petrak.hexcasting.api.casting.iota.GarbageIota -import at.petrak.hexcasting.api.casting.iota.Iota -import at.petrak.hexcasting.api.casting.math.HexPattern -import at.petrak.hexcasting.api.pigment.FrozenPigment -import net.minecraft.network.chat.ComponentContents -import net.minecraft.network.chat.MutableComponent -import net.minecraft.world.item.DyeColor - -/** - * The value failed some kind of predicate. - */ -class MishapInvalidOperatorArgs( - val perpetrators: List, - val operator: HexPattern -) : Mishap() { - override fun accentColor(ctx: CastingEnvironment, errorCtx: Context): FrozenPigment = - dyeColor(DyeColor.GRAY) - - override fun execute(ctx: CastingEnvironment, errorCtx: Context, stack: MutableList) { - for (i in perpetrators.indices) { - stack[stack.size - 1 - i] = GarbageIota() - } - } - - override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = - error( - "invalid_operator_args", operator, perpetrators.fold(MutableComponent.create(ComponentContents.EMPTY)) { mc, iota -> mc.append(iota.display()) } - ) -} diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidOperatorArgs.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidOperatorArgs.kt new file mode 100644 index 0000000000..a16c083f4c --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidOperatorArgs.kt @@ -0,0 +1,42 @@ +package at.petrak.hexcasting.api.casting.mishaps + +import at.petrak.hexcasting.api.casting.eval.CastingEnvironment +import at.petrak.hexcasting.api.casting.iota.GarbageIota +import at.petrak.hexcasting.api.casting.iota.Iota +import at.petrak.hexcasting.api.pigment.FrozenPigment +import at.petrak.hexcasting.api.utils.asTextComponent +import net.minecraft.network.chat.Component +import net.minecraft.network.chat.ComponentUtils +import net.minecraft.world.item.DyeColor + +/** + * The value failed some kind of predicate. + */ +class MishapInvalidOperatorArgs(val perpetrators: List) : Mishap() { + override fun accentColor(ctx: CastingEnvironment, errorCtx: Context): FrozenPigment = + dyeColor(DyeColor.GRAY) + + override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { + for (i in perpetrators.indices) { + stack[stack.size - 1 - i] = GarbageIota() + } + } + + override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context): Component { + return if (perpetrators.size == 1) { + error( + "invalid_operator_args.one", + 0, + perpetrators[0].display() + ) + } else { + error( + "invalid_operator_args.many", + perpetrators.size, + 0, + perpetrators.lastIndex, + ComponentUtils.formatList(perpetrators.map { it.display() }, ", ".asTextComponent) + ) + } + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index be86acef10..105994f61d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -69,6 +69,8 @@ public interface ServerConfigAccess { // fun fact, although dimension keys are a RegistryHolder, they aren't a registry, so i can't do tags boolean canTeleportInThisDimension(ResourceKey dimension); + boolean trueNameHasAmbit(); + int DEFAULT_MAX_OP_COUNT = 1_000_000; int DEFAULT_MAX_SPELL_CIRCLE_LENGTH = 1024; int DEFAULT_OP_BREAK_HARVEST_LEVEL = 3; @@ -77,6 +79,8 @@ public interface ServerConfigAccess { List DEFAULT_DIM_TP_DENYLIST = List.of("twilightforest:twilight_forest"); + boolean DEFAULT_TRUE_NAME_HAS_AMBIT = true; + default Tier opBreakHarvestLevel() { return switch (this.opBreakHarvestLevelBecauseForgeThoughtItWasAGoodIdeaToImplementHarvestTiersUsingAnHonestToGodTopoSort()) { case 0 -> Tiers.WOOD; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/PatternRegistryManifest.java b/Common/src/main/java/at/petrak/hexcasting/common/casting/PatternRegistryManifest.java index c15ad6488f..66199bfba1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/PatternRegistryManifest.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/PatternRegistryManifest.java @@ -48,7 +48,10 @@ public static void processRegistry(@Nullable ServerLevel overworld) { continue; if (!HexUtils.isOfTag(registry, key, HexTags.Actions.PER_WORLD_PATTERN)) { - NORMAL_ACTION_LOOKUP.put(entry.prototype().getAngles(), key); + var old = NORMAL_ACTION_LOOKUP.put(entry.prototype().getAngles(), key); + if (old != null) { + HexAPI.LOGGER.warn("Inserted %s which has same signature as %s, overriding it.".formatted(key, old)); + } } else { perWorldActionCount++; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/selectors/OpGetEntitiesBy.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/selectors/OpGetEntitiesBy.kt index 17eabc1878..c3366c9aca 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/selectors/OpGetEntitiesBy.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/selectors/OpGetEntitiesBy.kt @@ -11,6 +11,7 @@ import net.minecraft.world.entity.Entity import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.animal.Animal import net.minecraft.world.entity.animal.WaterAnimal +import net.minecraft.world.entity.boss.EnderDragonPart import net.minecraft.world.entity.item.ItemEntity import net.minecraft.world.entity.monster.Enemy import net.minecraft.world.entity.player.Player @@ -51,6 +52,6 @@ class OpGetEntitiesBy(val checker: Predicate, val negate: Boolean) : Con fun isPlayer(e: Entity): Boolean = e is Player @JvmStatic - fun isLiving(e: Entity): Boolean = e is LivingEntity + fun isLiving(e: Entity): Boolean = (e is LivingEntity) || (e is EnderDragonPart) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java index e7ca5402c2..d9f5ad2111 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java @@ -1,12 +1,28 @@ package at.petrak.hexcasting.common.lib; import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.resources.ResourceKey; +import net.minecraft.world.damagesource.DamageScaling; import net.minecraft.world.damagesource.DamageType; import static at.petrak.hexcasting.api.HexAPI.modLoc; public class HexDamageTypes { public static final ResourceKey OVERCAST = ResourceKey.create(Registries.DAMAGE_TYPE, modLoc("overcast")); - public static final ResourceKey SHAME_ON_YOU = ResourceKey.create(Registries.DAMAGE_TYPE, modLoc("overcast")); + public static final ResourceKey SHAME_ON_YOU = ResourceKey.create(Registries.DAMAGE_TYPE, modLoc("shame")); + + public static void bootstrap(BootstapContext ctx) { + ctx.register(OVERCAST, new DamageType( + "hexcasting.overcast", + DamageScaling.WHEN_CAUSED_BY_LIVING_NON_PLAYER, + 0f + )); + + ctx.register(SHAME_ON_YOU, new DamageType( + "hexcasting.shame", + DamageScaling.WHEN_CAUSED_BY_LIVING_NON_PLAYER, + 0f + )); + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java index 811df1d455..cd568fad1d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java @@ -440,7 +440,7 @@ public void buildRecipes(Consumer recipes) { .save(recipes, modLoc("brainsweep/impetus_rightclick")); new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.IMPETUS_EMPTY), - new VillagerIngredient(VillagerProfession.TOOLSMITH, null, 2), + new VillagerIngredient(VillagerProfession.FLETCHER, null, 2), HexBlocks.IMPETUS_LOOK.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", enlightenment) .save(recipes, modLoc("brainsweep/impetus_look")); diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexDamageTypeTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexDamageTypeTagProvider.java new file mode 100644 index 0000000000..82eb35e7e2 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexDamageTypeTagProvider.java @@ -0,0 +1,42 @@ +package at.petrak.hexcasting.datagen.tag; + +import at.petrak.hexcasting.common.lib.HexDamageTypes; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.DamageTypeTagsProvider; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import org.jetbrains.annotations.NotNull; + +import java.util.concurrent.CompletableFuture; + +public class HexDamageTypeTagProvider extends DamageTypeTagsProvider { + public HexDamageTypeTagProvider(PackOutput output, CompletableFuture provider) { + super(output, provider); + } + + @Override + protected void addTags(@NotNull HolderLookup.Provider provider) { + add(HexDamageTypes.OVERCAST, + DamageTypeTags.BYPASSES_ARMOR, + DamageTypeTags.BYPASSES_EFFECTS, + DamageTypeTags.BYPASSES_SHIELD + ); + + add(HexDamageTypes.SHAME_ON_YOU, + DamageTypeTags.BYPASSES_ARMOR, + DamageTypeTags.BYPASSES_EFFECTS, + DamageTypeTags.BYPASSES_INVULNERABILITY, + DamageTypeTags.BYPASSES_SHIELD + ); + } + + @SafeVarargs + private void add(ResourceKey damageType, TagKey... tags) { + for (var tag : tags) { + this.tag(tag).add(damageType); + } + } +} diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index cd5888eda8..470c006c0d 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -1,356 +1,523 @@ // A work in progress { "item.hexcasting": { - "book": "Hex Notebook", + book: "Hex Notebook", staff: { - "oak": "Oak Staff", - "spruce": "Spruce Staff", - "birch": "Birch Staff", - "jungle": "Jungle Staff", - "acacia": "Acacia Staff", - "dark_oak": "Dark Oak Staff", - "crimson": "Crimson Staff", - "warped": "Warped Staff", - "mangrove": "Mangrove Staff", - "cherry": "Cherry Staff", - "bamboo": "Bamboo Staff", - "edified": "Edified Staff", - "quenched": "Quenched Shard Staff", - "mindsplice": "Mindsplice Staff" + oak: "Oak Staff", + spruce: "Spruce Staff", + birch: "Birch Staff", + jungle: "Jungle Staff", + acacia: "Acacia Staff", + dark_oak: "Dark Oak Staff", + crimson: "Crimson Staff", + warped: "Warped Staff", + mangrove: "Mangrove Staff", + cherry: "Cherry Staff", + bamboo: "Bamboo Staff", + edified: "Edified Staff", + quenched: "Quenched Shard Staff", + mindsplice: "Mindsplice Staff", }, + + amethyst_dust: "Amethyst Dust", + charged_amethyst: "Charged Amethyst", + quenched_allay_shard: "Shard of Quenched Allay", - tags: { - "tag.item.hexcasting:brainswept_circle_components": "Brainswept Circle Components", - "tag.item.hexcasting:directrices": "Directrices", - "tag.item.hexcasting:grants_root_advancement": "Grants Rood Advancement", - "tag.item.hexcasting:impeti": "Impeti", - "tag.item.hexcasting:seal_materials": "Seal Materials", + scroll_small: { + "": "Small Scroll", + of: "How did you get this item of %s", + empty: "Empty Small Scroll", + }, + + scroll_medium: { + "": "Medium Scroll", + of: "How did you get this item of %s", + empty: "Empty Medium Scroll", + }, + + scroll: { + "": "Large Scroll", + of: "Ancient Scroll of %s", + empty: "Empty Large Scroll", + }, + + focus: { + "": "Focus", + sealed: "Sealed Focus", + }, + + thought_knot: "Thought-Knot", + spellbook: "Spellbook", + cypher: "Cypher", + trinket: "Trinket", + artifact: "Artifact", + battery: "Phial of Media", + lens: "Scrying Lens", + abacus: "Abacus", + jeweler_hammer: "Jeweler's Hammer", + sub_sandwich: "Submarine Sandwich", + + dye_colorizer_: { + white: "White Pigment", + orange: "Orange Pigment", + magenta: "Magenta Pigment", + light_blue: "Light Blue Pigment", + yellow: "Yellow Pigment", + lime: "Lime Pigment", + pink: "Pink Pigment", + gray: "Gray Pigment", + light_gray: "Light Gray Pigment", + cyan: "Cyan Pigment", + purple: "Purple Pigment", + blue: "Blue Pigment", + brown: "Brown Pigment", + green: "Green Pigment", + red: "Red Pigment", + black: "Black Pigment", + }, + + pride_colorizer_: { + agender: "Agender Pigment", + aroace: "Aroace Pigment", + aromantic: "Aromantic Pigment", + asexual: "Asexual Pigment", + bisexual: "Bisexual Pigment", + demiboy: "Demiboy Pigment", + demigirl: "Demigirl Pigment", + gay: "Gay Pigment", + genderfluid: "Genderfluid Pigment", + genderqueer: "Genderqueer Pigment", + intersex: "Intersex Pigment", + lesbian: "Lesbian Pigment", + nonbinary: "Non-Binary Pigment", + pansexual: "Pansexual Pigment", + plural: "Plural Pigment", + transgender: "Transgender Pigment", + }, + + uuid_colorizer: "Soulglimmer Pigment", + default_colorizer: "Vacant Pigment", + + creative_unlocker: { + "": "The Media Cube", + for_emphasis: "INFINITE MEDIA", + tooltip: "Consume to unlock all %s knowledge.", + mod_name: "Hexcasting", + }, + + lore_fragment: { + "": "Lore Fragment", + all: "It seems I have found all the lore this world has to offer.", }, - - "amethyst_dust": "Amethyst Dust", - "charged_amethyst": "Charged Amethyst", - "quenched_allay_shard": "Shard of Quenched Allay", - - "scroll_small": "Small Scroll", - "scroll_small.of": "How did you get this item of %s", - "scroll_small.empty": "Empty Small Scroll", - "scroll_medium": "Medium Scroll", - "scroll_medium.of": "How did you get this item of %s", - "scroll_medium.empty": "Empty Medium Scroll", - "scroll": "Large Scroll", - "scroll.of": "Ancient Scroll of %s", - "scroll.empty": "Empty Large Scroll", - - "thought_knot": "Thought-Knot", - "focus": "Focus", - "focus.sealed": "Sealed Focus", - "spellbook": "Spellbook", - "cypher": "Cypher", - "trinket": "Trinket", - "artifact": "Artifact", - "battery": "Phial of Media", - "lens": "Scrying Lens", - "abacus": "Abacus", - "jeweler_hammer": "Jeweler's Hammer", - "sub_sandwich": "Submarine Sandwich", - - "dye_colorizer_white": "White Pigment", - "dye_colorizer_orange": "Orange Pigment", - "dye_colorizer_magenta": "Magenta Pigment", - "dye_colorizer_light_blue": "Light Blue Pigment", - "dye_colorizer_yellow": "Yellow Pigment", - "dye_colorizer_lime": "Lime Pigment", - "dye_colorizer_pink": "Pink Pigment", - "dye_colorizer_gray": "Gray Pigment", - "dye_colorizer_light_gray": "Light Gray Pigment", - "dye_colorizer_cyan": "Cyan Pigment", - "dye_colorizer_purple": "Purple Pigment", - "dye_colorizer_blue": "Blue Pigment", - "dye_colorizer_brown": "Brown Pigment", - "dye_colorizer_green": "Green Pigment", - "dye_colorizer_red": "Red Pigment", - "dye_colorizer_black": "Black Pigment", - "pride_colorizer_agender": "Agender Pigment", - "pride_colorizer_aroace": "Aroace Pigment", - "pride_colorizer_aromantic": "Aromantic Pigment", - "pride_colorizer_asexual": "Asexual Pigment", - "pride_colorizer_bisexual": "Bisexual Pigment", - "pride_colorizer_demiboy": "Demiboy Pigment", - "pride_colorizer_demigirl": "Demigirl Pigment", - "pride_colorizer_gay": "Gay Pigment", - "pride_colorizer_genderfluid": "Genderfluid Pigment", - "pride_colorizer_genderqueer": "Genderqueer Pigment", - "pride_colorizer_intersex": "Intersex Pigment", - "pride_colorizer_lesbian": "Lesbian Pigment", - "pride_colorizer_nonbinary": "Non-Binary Pigment", - "pride_colorizer_pansexual": "Pansexual Pigment", - "pride_colorizer_plural": "Plural Pigment", - "pride_colorizer_transgender": "Transgender Pigment", - "uuid_colorizer": "Soulglimmer Pigment", - "default_colorizer": "Vacant Pigment", - - "creative_unlocker": "The Media Cube", - "creative_unlocker.for_emphasis": "INFINITE MEDIA", - "creative_unlocker.tooltip": "Consume to unlock all %s knowledge.", - "creative_unlocker.mod_name": "Hexcasting", - - "lore_fragment": "Lore Fragment", - "lore_fragment.all": "It seems I have found all the lore this world has to offer.", }, - "entity.hexcasting.wall_scroll": "Hanging Scroll", + "entity.hexcasting": { + wall_scroll: "Hanging Scroll", + }, "block.hexcasting": { - "conjured_light": "Conjured Light", - "conjured_block": "Conjured Block", - "slate": "Slate", - "slate.blank": "Blank Slate", - "slate.written": "Patterned Slate", - "directrix.empty": "Empty Directrix", - "directrix.redstone": "Mason Directrix", - "directrix.boolean": "??? Directrix", - "impetus.empty": "Empty Impetus", - "impetus.rightclick": "Toolsmith Impetus", - "impetus.look": "Fletcher Impetus", - "impetus.redstone": "Cleric Impetus", - "akashic_record": "Akashic Record", - "akashic_bookshelf": "Akashic Bookshelf", - "akashic_connector": "Akashic Ligature", - - "slate_block": "Block of Slate", - "slate_tiles": "Slate Tiles", - "slate_bricks": "Slate Bricks", - "slate_bricks_small": "Small Slate Bricks", - "slate_pillar": "Slate Pillar", - "amethyst_dust_block": "Block of Amethyst Dust", - "amethyst_tiles": "Amethyst Tiles", - "amethyst_bricks": "Amethyst Bricks", - "amethyst_bricks_small": "Small Amethyst Bricks", - "amethyst_pillar": "Amethyst Pillar", - "slate_amethyst_tiles": "Slate & Amethyst Tiles", - "slate_amethyst_bricks": "Slate & Amethyst Bricks", - "slate_amethyst_bricks_small": "Small Slate & Amethyst Bricks", - "slate_amethyst_pillar": "Slate & Amethyst Pillar", - "scroll_paper": "Scroll Paper", - "ancient_scroll_paper": "Ancient Scroll Paper", - "scroll_paper_lantern": "Paper Lantern", - "ancient_scroll_paper_lantern": "Ancient Paper Lantern", - "amethyst_sconce": "Amethyst Sconce", - "edified_log": "Edified Log", - "edified_log_amethyst": "Amethyst Edified Log", - "edified_log_aventurine": "Aventurine Edified Log", - "edified_log_citrine": "Citrine Edified Log", - "edified_log_purple": "Purple Edified Log", - "stripped_edified_log": "Stripped Edified Log", - "edified_wood": "Edified Wood", - "stripped_edified_wood": "Stripped Edified Wood", - "edified_planks": "Edified Planks", - "edified_panel": "Edified Panel", - "edified_tile": "Edified Tile", - "edified_door": "Edified Door", - "edified_trapdoor": "Edified Trapdoor", - "edified_stairs": "Edified Stairs", - "edified_fence": "Edified Fence", - "edified_fence_gate": "Edified Fence Gate", - "edified_slab": "Edified Slab", - "edified_button": "Edified Button", - "edified_pressure_plate": "Edified Pressure Plate", - "amethyst_edified_leaves": "Amethyst Edified Leaves", - "aventurine_edified_leaves": "Aventurine Edified Leaves", - "citrine_edified_leaves": "Citrine Edified Leaves", - "quenched_allay": "Quenched Allay", - "quenched_allay_tiles": "Quenched Allay Tiles", - "quenched_allay_bricks": "Quenched Allay Bricks", - "quenched_allay_bricks_small": "Small Quenched Allay Bricks", - "slate": "Slate", + conjured_light: "Conjured Light", + conjured_block: "Conjured Block", + + directrix: { + empty: "Empty Directrix", + redstone: "Mason Directrix", + boolean: "??? Directrix", + }, + + impetus: { + empty: "Empty Impetus", + rightclick: "Toolsmith Impetus", + look: "Fletcher Impetus", + redstone: "Cleric Impetus", + }, + + akashic_: { + record: "Akashic Record", + bookshelf: "Akashic Bookshelf", + connector: "Akashic Ligature", + }, + + slate: { + "": "Slate", + blank: "Blank Slate", + written: "Patterned Slate", + }, + + slate_: { + block: "Block of Slate", + tiles: "Slate Tiles", + bricks: "Slate Bricks", + bricks_small: "Small Slate Bricks", + pillar: "Slate Pillar", + }, + + amethyst_: { + dust_block: "Block of Amethyst Dust", + tiles: "Amethyst Tiles", + bricks: "Amethyst Bricks", + bricks_small: "Small Amethyst Bricks", + pillar: "Amethyst Pillar", + }, + + slate_amethyst_: { + tiles: "Slate & Amethyst Tiles", + bricks: "Slate & Amethyst Bricks", + bricks_small: "Small Slate & Amethyst Bricks", + pillar: "Slate & Amethyst Pillar", + }, + + scroll_paper: "Scroll Paper", + ancient_scroll_paper: "Ancient Scroll Paper", + scroll_paper_lantern: "Paper Lantern", + ancient_scroll_paper_lantern: "Ancient Paper Lantern", + amethyst_sconce: "Amethyst Sconce", + + edified_: { + log: "Edified Log", + log_amethyst: "Amethyst Edified Log", + log_aventurine: "Aventurine Edified Log", + log_citrine: "Citrine Edified Log", + log_purple: "Purple Edified Log", + wood: "Edified Wood", + planks: "Edified Planks", + panel: "Edified Panel", + tile: "Edified Tile", + door: "Edified Door", + trapdoor: "Edified Trapdoor", + stairs: "Edified Stairs", + slab: "Edified Slab", + button: "Edified Button", + pressure_plate: "Edified Pressure Plate", + fence: "Edified Fence", + fence_gate: "Edified Fence Gate", + }, + + stripped_edified_log: "Stripped Edified Log", + stripped_edified_wood: "Stripped Edified Wood", + + amethyst_edified_leaves: "Amethyst Edified Leaves", + aventurine_edified_leaves: "Aventurine Edified Leaves", + citrine_edified_leaves: "Citrine Edified Leaves", + + quenched_allay: "Quenched Allay", + + quenched_allay_: { + tiles: "Quenched Allay Tiles", + bricks: "Quenched Allay Bricks", + bricks_small: "Small Quenched Allay Bricks", + }, + }, + + "itemGroup.hexcasting": { + "": "Hexcasting", + creative_tab: "Hexcasting", + }, + + "gui.hexcasting": { + spellcasting: "Hex Grid", }, - "itemGroup.hexcasting": "Hexcasting", - "itemGroup.hexcasting.creative_tab": "Hexcasting", - - "gui.hexcasting.spellcasting": "Hex Grid", - "tag.hexcasting.staves": "Hex Staves", - "tag.hexcasting.edified_logs": "Edified Logs", - "tag.hexcasting.edified_planks": "Edified Planks", - "tag.hexcasting.phial_base": "Empty Phials", - "emi.category.hexcasting.brainsweep": "Flay Mind", - "emi.category.hexcasting.craft.battery": "Craft Phial", - "emi.category.hexcasting.edify": "Edify Sapling", - "emi.category.hexcasting.villager_leveling": "Trade Leveling", - "emi.category.hexcasting.villager_profession": "Villager Profession", - - "text.autoconfig.hexcasting.title": "Hexcasting Config", - "text.autoconfig.hexcasting.category.common": "Common", - "text.autoconfig.hexcasting.category.client": "Client", - "text.autoconfig.hexcasting.category.server": "Server", - - "text.autoconfig.hexcasting.option.common.dustMediaAmount": "Dust Media Amount", - "text.autoconfig.hexcasting.option.common.shardMediaAmount": "Shard Media Amount", - "text.autoconfig.hexcasting.option.common.chargedCrystalMediaAmount": "Charged Crystal Media Amount", - "text.autoconfig.hexcasting.option.common.mediaToHealthRate": "Media To Health Rate", - "text.autoconfig.hexcasting.option.common.cypherCooldown": "Cypher Cooldown", - "text.autoconfig.hexcasting.option.common.trinketCooldown": "Trinket Cooldown", - "text.autoconfig.hexcasting.option.common.artifactCooldown": "Artifact Cooldown", - "text.autoconfig.hexcasting.option.common.dustMediaAmount.@Tooltip": "How much media a single Amethyst Dust item is worth", - "text.autoconfig.hexcasting.option.common.shardMediaAmount.@Tooltip": "How much media a single Amethyst Shard item is worth", - "text.autoconfig.hexcasting.option.common.chargedCrystalMediaAmount.@Tooltip": "How much media a single Charged Amethyst Crystal item is worth", - "text.autoconfig.hexcasting.option.common.mediaToHealthRate.@Tooltip": "How many points of media a half-heart is worth when casting from HP", - "text.autoconfig.hexcasting.option.common.cypherCooldown.@Tooltip": "Cooldown of a cypher in ticks", - "text.autoconfig.hexcasting.option.common.trinketCooldown.@Tooltip": "Cooldown of a trinket in ticks", - "text.autoconfig.hexcasting.option.common.artifactCooldown.@Tooltip": "Cooldown of an artifact in ticks", - - "text.autoconfig.hexcasting.option.client.ctrlTogglesOffStrokeOrder": "Ctrl Toggles Off Stroke Order", - "text.autoconfig.hexcasting.option.client.invertSpellbookScrollDirection": "Invert Spellbook Scroll Direction", - "text.autoconfig.hexcasting.option.client.invertAbacusScrollDirection": "Invert Abacus Scroll Direction", - "text.autoconfig.hexcasting.option.client.gridSnapThreshold": "Grid Snap Threshold", - "text.autoconfig.hexcasting.option.client.ctrlTogglesOffStrokeOrder.@Tooltip": "Whether the ctrl key will instead turn *off* the color gradient on patterns", - "text.autoconfig.hexcasting.option.client.invertSpellbookScrollDirection.@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the spellbook, and vice versa", - "text.autoconfig.hexcasting.option.client.invertAbacusScrollDirection.@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the abacus, and vice versa", - "text.autoconfig.hexcasting.option.client.gridSnapThreshold.@Tooltip": "When using a staff, the distance from one dot you have to go to snap to the next dot, where 0.5 means 50% of the way (0.5-1)", + "tag.hexcasting": { + staves: "Hex Staves", + edified_logs: "Edified Logs", + edified_planks: "Edified Planks", + phial_base: "Empty Phials", + }, + + "tag.item.hexcasting": { + brainswept_circle_components: "Brainswept Circle Components", + directrices: "Directrices", + grants_root_advancement: "Grants Rood Advancement", + impeti: "Impeti", + seal_materials: "Seal Materials", + }, - "text.autoconfig.hexcasting.option.server.opBreakHarvestLevel": "Break Harvest Level", - "text.autoconfig.hexcasting.option.server.maxOpCount": "Max Action Count", - "text.autoconfig.hexcasting.option.server.maxSpellCircleLength": "Max Spell Circle Length", - "text.autoconfig.hexcasting.option.server.actionDenyList": "Action Deny List", - "text.autoconfig.hexcasting.option.server.circleActionDenyList": "Circle Action Deny List", - "text.autoconfig.hexcasting.option.server.villagersOffendedByMindMurder": "Villagers Offended By Mind Murder", - "text.autoconfig.hexcasting.option.server.scrollInjectionsRaw": "Scroll Injection Weights", - "text.autoconfig.hexcasting.option.server.amethystShardModification": "Amethyst Shard Drop Rate Change", - "text.autoconfig.hexcasting.option.server.opBreakHarvestLevel.@Tooltip": "The harvest level of the Break Block spell.\n0 = wood, 1 = stone, 2 = iron, 3 = diamond, 4 = netherite.", - "text.autoconfig.hexcasting.option.server.maxOpCount.@Tooltip": "The maximum number of actions that can be executed in one tick, to avoid hanging the server.", - "text.autoconfig.hexcasting.option.server.maxSpellCircleLength.@Tooltip": "The maximum number of slates in a spell circle", - "text.autoconfig.hexcasting.option.server.actionDenyList.@Tooltip": "Resource locations of disallowed actions. Trying to cast one of these will result in a mishap. For example, hexcasting:get_caster will prevent Mind's Reflection", - "text.autoconfig.hexcasting.option.server.circleActionDenyList.@Tooltip": "Resource locations of disallowed actions within circles. Trying to cast one of these from a circle will result in a mishap.", - "text.autoconfig.hexcasting.option.server.villagersOffendedByMindMurder.@Tooltip": "Whether villagers should be angry at the player when other villagers are mindflayed", - "text.autoconfig.hexcasting.option.server.fewScrollTables.@Tooltip": "Loot tables that a small number of Ancient Scrolls are injected into", - "text.autoconfig.hexcasting.option.server.someScrollTables.@Tooltip": "Loot tables that a decent number of Ancient Scrolls are injected into", - "text.autoconfig.hexcasting.option.server.manyScrollTables.@Tooltip": "Loot tables that a huge number of Ancient Scrolls are injected into", - "text.autoconfig.hexcasting.option.server.scrollInjectionsRaw.@Tooltip": "Maps the names of loot tables to the amount of per-world patterns on scrolls should go in them. There's about a 50% chance to get any scrolls in a given chest marked here; once that is met, between 1 and that many scrolls are generated.", - "text.autoconfig.hexcasting.option.server.amethystShardModification.@Tooltip": "How much the number of amethyst shards dropped from clusters is increased/decreased.", + "emi.category.hexcasting": { + brainsweep: "Flay Mind", + "craft.battery": "Craft Phial", + edify: "Edify Sapling", + villager_leveling: "Trade Leveling", + villager_profession: "Villager Profession", + }, + "text.autoconfig.hexcasting": { + title: "Hexcasting Config", + + category: { + common: "Common", + client: "Client", + server: "Server", + }, + + option: { + common: { + dustMediaAmount: { + "": "Dust Media Amount", + "@Tooltip": "How much media a single Amethyst Dust item is worth", + }, + shardMediaAmount: { + "": "Shard Media Amount", + "@Tooltip": "How much media a single Amethyst Shard item is worth", + }, + chargedCrystalMediaAmount: { + "": "Charged Crystal Media Amount", + "@Tooltip": "How much media a single Charged Amethyst Crystal item is worth", + }, + mediaToHealthRate: { + "": "Media To Health Rate", + "@Tooltip": "How many points of media a half-heart is worth when casting from HP", + }, + cypherCooldown: { + "": "Cypher Cooldown", + "@Tooltip": "Cooldown of a cypher in ticks", + }, + trinketCooldown: { + "": "Trinket Cooldown", + "@Tooltip": "Cooldown of a trinket in ticks", + }, + artifactCooldown: { + "": "Artifact Cooldown", + "@Tooltip": "Cooldown of an artifact in ticks", + }, + }, + + client: { + ctrlTogglesOffStrokeOrder: { + "": "Ctrl Toggles Off Stroke Order", + "@Tooltip": "Whether the ctrl key will instead turn *off* the color gradient on patterns", + }, + invertSpellbookScrollDirection: { + "": "Invert Spellbook Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the spellbook, and vice versa", + }, + invertAbacusScrollDirection: { + "": "Invert Abacus Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the abacus, and vice versa", + }, + gridSnapThreshold: { + "": "Grid Snap Threshold", + "@Tooltip": "When using a staff, the distance from one dot you have to go to snap to the next dot, where 0.5 means 50% of the way (0.5-1)", + }, + }, + + server: { + opBreakHarvestLevel: { + "": "Break Harvest Level", + "@Tooltip": "The harvest level of the Break Block spell.\n0 = wood, 1 = stone, 2 = iron, 3 = diamond, 4 = netherite.", + }, + maxOpCount: { + "": "Max Action Count", + "@Tooltip": "The maximum number of actions that can be executed in one tick, to avoid hanging the server.", + }, + maxSpellCircleLength: { + "": "Max Spell Circle Length", + "@Tooltip": "The maximum number of slates in a spell circle", + }, + actionDenyList: { + "": "Action Deny List", + "@Tooltip": "Resource locations of disallowed actions. Trying to cast one of these will result in a mishap. For example, hexcasting:get_caster will prevent Mind's Reflection", + }, + circleActionDenyList: { + "": "Circle Action Deny List", + "@Tooltip": "Resource locations of disallowed actions within circles. Trying to cast one of these from a circle will result in a mishap.", + }, + villagersOffendedByMindMurder: { + "": "Villagers Offended By Mind Murder", + "@Tooltip": "Whether villagers should be angry at the player when other villagers are mindflayed", + }, + scrollInjectionsRaw: { + "": "Scroll Injection Weights", + "@Tooltip": "Maps the names of loot tables to the amount of per-world patterns on scrolls should go in them. There's about a 50% chance to get any scrolls in a given chest marked here; once that is met, between 1 and that many scrolls are generated.", + }, + amethystShardModification: { + "": "Amethyst Shard Drop Rate Change", + "@Tooltip": "How much the number of amethyst shards dropped from clusters is increased/decreased.", + }, + + // TODO: are these used anywhere?? + "fewScrollTables.@Tooltip": "Loot tables that a small number of Ancient Scrolls are injected into", + "someScrollTables.@Tooltip": "Loot tables that a decent number of Ancient Scrolls are injected into", + "manyScrollTables.@Tooltip": "Loot tables that a huge number of Ancient Scrolls are injected into", + }, + }, + }, + "advancement.hexcasting:": { - "root": "Hexcasting Research", - "root.desc": "Find and mine a concentrated form of media growing deep beneath the earth.", - "enlightenment": "Achieve Enlightenment", - "enlightenment.desc": "Shatter a barrier by casting a hex using almost all of your health.", - "wasteful_cast": "Waste Not...", - "wasteful_cast.desc": "Waste a large amount of media when casting a hex.", - "big_cast": "... Want Not", - "big_cast.desc": "Cast a single spell requiring a truly huge amount of media.", - "y_u_no_cast_angy": "Blind Diversion", - "y_u_no_cast_angy.desc": "Try to cast a spell from a scroll, but fail.", - "opened_eyes": "Opened Eyes", - "opened_eyes.desc": "Have nature take a piece of your mind in payment for a hex. What might happen if you let it have more?", - "lore": "Hexcasting Lore", - "lore.desc": "Read a Lore Fragment", - "lore/cardamom1": "Cardamom Steles #1", - "lore/cardamom1.desc": "Letter from Cardamom Steles to Her Father, #1", - "lore/cardamom2": "Cardamom Steles #2", - "lore/cardamom2.desc": "Letter from Cardamom Steles to Her Father, #2", - "lore/cardamom3": "Cardamom Steles #3", - "lore/cardamom3.desc": "Letter from Cardamom Steles to Her Father, #3, 1/2", - "lore/cardamom4": "Cardamom Steles #3 pt2", - "lore/cardamom4.desc": "Letter from Cardamom Steles to Her Father, #3, 2/2", - "lore/cardamom5": "Cardamom Steles #4", - "lore/cardamom5.desc": "Letter from Cardamom Steles to Her Father, #4", - "lore/experiment1": "Wooleye Instance Notes", - "lore/experiment2": "Wooleye Interview Logs", - "lore/inventory": "Restoration Log 72", + root: { + "": "Hexcasting Research", + desc: "Find and mine a concentrated form of media growing deep beneath the earth.", + }, + enlightenment: { + "": "Achieve Enlightenment", + desc: "Shatter a barrier by casting a hex using almost all of your health.", + }, + wasteful_cast: { + "": "Waste Not...", + desc: "Waste a large amount of media when casting a hex.", + }, + big_cast: { + "": "... Want Not", + desc: "Cast a single spell requiring a truly huge amount of media.", + }, + y_u_no_cast_angy: { + "": "Blind Diversion", + desc: "Try to cast a spell from a scroll, but fail.", + }, + opened_eyes: { + "": "Opened Eyes", + desc: "Have nature take a piece of your mind in payment for a hex. What might happen if you let it have more?", + }, + lore: { + "": "Hexcasting Lore", + desc: "Read a Lore Fragment", + }, + "lore/": { + cardamom1: { + "": "Cardamom Steles #1", + desc: "Letter from Cardamom Steles to Her Father, #1", + }, + cardamom2: { + "": "Cardamom Steles #2", + desc: "Letter from Cardamom Steles to Her Father, #2", + }, + cardamom3: { + "": "Cardamom Steles #3", + desc: "Letter from Cardamom Steles to Her Father, #3, 1/2", + }, + cardamom4: { + "": "Cardamom Steles #3 pt2", + desc: "Letter from Cardamom Steles to Her Father, #3, 2/2", + }, + cardamom5: { + "": "Cardamom Steles #4", + desc: "Letter from Cardamom Steles to Her Father, #4", + }, + experiment1: "Wooleye Instance Notes", + experiment2: "Wooleye Interview Logs", + inventory: "Restoration Log 72", + }, }, - - "stat.hexcasting.media_used": "Media Consumed (in dust)", - "stat.hexcasting.media_overcasted": "Media Overcast (in dust)", - "stat.hexcasting.patterns_drawn": "Patterns Drawn", - "stat.hexcasting.spells_cast": "Spells Cast", - - "death.attack.hexcasting.overcast": "%s's mind was subsumed into energy", - "death.attack.hexcasting.shame": "Shame on %s!", - + + "stat.hexcasting": { + media_used: "Media Consumed (in dust)", + media_overcasted: "Media Overcast (in dust)", + patterns_drawn: "Patterns Drawn", + spells_cast: "Spells Cast", + }, + + "death.attack.hexcasting": { + overcast: "%s's mind was subsumed into energy", + shame: "Shame on %s!", + }, + "command.hexcasting": { - "pats.listing": "Patterns in this world:", - "pats.all": "Gave all %d scrolls to %s", - "pats.specific.success": "Gave %s with id %s to %s", - "recalc": "Recalculated patterns", - "brainsweep": "Brainswept %s", - "brainsweep.fail.badtype": "%s is not a mob", - "brainsweep.fail.already": "%s is already empty", + recalc: "Recalculated patterns", + + pats: { + listing: "Patterns in this world:", + all: "Gave all %d scrolls to %s", + "specific.success": "Gave %s with id %s to %s", + }, + + brainsweep: { + "": "Brainswept %s", + "fail.badtype": "%s is not a mob", + "fail.already": "%s is already empty", + }, }, hexcasting: { "pattern.unknown": "Unknown pattern resource location %s", debug: { - "media_withdrawn": "%s - Media withdrawn: %s", + media_withdrawn: "%s - Media withdrawn: %s", "media_withdrawn.with_dust": "%s - Media withdrawn: %s (%s in dust)", - "media_inserted": "%s - Media inserted: %s", + media_inserted: "%s - Media inserted: %s", "media_inserted.with_dust": "%s - Media inserted: %s (%s in dust)", - "all_media": "Entire contents", - "infinite_media": "Infinite", + all_media: "Entire contents", + infinite_media: "Infinite", }, // TODO: post-eigengrau make these less anticlimactic message: { - "cant_overcast": "That Hex needed more media than I had... I should double-check my math.", - "cant_great_spell": "The spell failed, somehow... am I not skilled enough?", + cant_overcast: "That Hex needed more media than I had... I should double-check my math.", + cant_great_spell: "The spell failed, somehow... am I not skilled enough?", }, tooltip: { spellbook: { - "page": "Selected Page %d/%d", - "page.sealed": "Selected Page %d/%d (%s)", - "page_with_name": "Selected Page %d/%d (\"%s\")", - "page_with_name.sealed": "Selected Page %d/%d (\"%s\") (%s)", - "sealed": "Sealed", - "empty": "Empty", - "empty.sealed": "Empty (%s)", + page: { + "": "Selected Page %d/%d", + sealed: "Selected Page %d/%d (%s)", + }, + page_with_name: { + "": "Selected Page %d/%d (\"%s\")", + sealed: "Selected Page %d/%d (\"%s\") (%s)", + }, + empty: { + "": "Empty", + sealed: "Empty (%s)", + }, + sealed: "Sealed", }, - - "abacus": "%d", - "abacus.reset": "Reset to 0", - "abacus.reset.nice": "nice", - + + abacus: { + "": "%d", + reset: "Reset to 0", + "reset.nice": "nice", + }, + circle: { - "no_exit": "The flow of media could not find an exit at %s", - "many_exits": "The flow of media had too many exits at %s", - no_closure: "The flow of media will not be able to return to the impetus at %s" + no_exit: "The flow of media could not find an exit at %s", + many_exits: "The flow of media had too many exits at %s", + no_closure: "The flow of media will not be able to return to the impetus at %s", }, lens: { - impetus: { - "redstone.bound": "Bound to %s", - "redstone.bound.none": "Unbound", - }, "pattern.invalid": "Invalid Pattern", - "akashic.bookshelf.location": "Record at %s", - "akashic.record.count": "%s iotas stored", - "akashic.record.count.single": "%s iota stored", - "bee": "%s bees", - "bee.single": "%s bee", + bee: { + "": "%s bees", + single: "%s bee", + }, + "impetus.redstone.bound": { + "": "Bound to %s", + none: "Unbound", + }, + akashic: { + "bookshelf.location": "Record at %s", + "record.count": { + "": "%s iotas stored", + single: "%s iota stored", + }, + }, }, - - "brainsweep.min_level": "Level %s or higher", - "brainsweep.level": "Level %s", - "brainsweep.product": "Mindless Body", - - "media": "%d dust", - "media_amount": "Contains: %s (%s)", + + brainsweep: { + min_level: "Level %s or higher", + level: "Level %s", + product: "Mindless Body", + }, + + media: "%d dust", + media_amount: "Contains: %s (%s)", "media_amount.advanced": "Contains: %s/%s (%s)", - "list_contents": "[%s]", - "null_iota": "Null", - "jump_iota": "[Jump]", - "pattern_iota": "HexPattern(%s)", - "boolean_true": "True", - "boolean_false": "False" + list_contents: "[%s]", + null_iota: "Null", + jump_iota: "[Jump]", + pattern_iota: "HexPattern(%s)", + boolean_true: "True", + boolean_false: "False", }, // ^ tooltip spelldata: { - "onitem": "Contains: %s", - "anything": "Anything", - "unknown": "A broken iota", + onitem: "Contains: %s", + anything: "Anything", + unknown: "A broken iota", "entity.whoknows": "An unknown entity", - "akashic.nopos": "The owning record does not know of any iota here (this is a bug)" + "akashic.nopos": "The owning record does not know of any iota here (this is a bug)", }, subtitles: { @@ -363,18 +530,16 @@ normal: "Action hums", spell: "Spell boinks", hermes: "Hermes' twangs", - thoth: "Thoth's twangs" - } + thoth: "Thoth's twangs", + }, }, ambiance: "Hex grid hums", - staff: { - reset: "Casting resets" - }, + "staff.reset": "Casting resets", abacus: { "": "Abacus clicks", - shake: "Abacus shakes" + shake: "Abacus shakes", }, "spellcircle.add_pattern": "Spell circle crackles", "spellcircle.fail": "Spell circle fizzles out", @@ -390,364 +555,447 @@ attributes: { grid_zoom: "Casting Grid Size", // TODO: the +1 is kind of janky - scry_sight: "Scrying Sight" + scry_sight: "Scrying Sight", }, // Action localizations action: { "hexcasting:": { - "const/null": "Nullary Reflection", - "const/vec/px": "Vector Reflection +X", - "const/vec/py": "Vector Reflection +Y", - "const/vec/pz": "Vector Reflection +Z", - "const/vec/nx": "Vector Reflection -X", - "const/vec/ny": "Vector Reflection -Y", - "const/vec/nz": "Vector Reflection -Z", - "const/vec/0": "Vector Reflection Zero", - "const/true": "True Reflection", - "const/false": "False Reflection", - "const/double/pi": "Arc's Reflection", - "const/double/tau": "Circle's Reflection", - "const/double/e": "Euler's Reflection", - - "get_caster": "Mind's Reflection", + "const/": { + "null": "Nullary Reflection", + "true": "True Reflection", + "false": "False Reflection", + + "vec/": { + px: "Vector Reflection +X", + py: "Vector Reflection +Y", + pz: "Vector Reflection +Z", + nx: "Vector Reflection -X", + ny: "Vector Reflection -Y", + nz: "Vector Reflection -Z", + "0": "Vector Reflection Zero", + }, + + "double/": { + pi: "Arc's Reflection", + tau: "Circle's Reflection", + "e": "Euler's Reflection", + }, + }, + + get_caster: "Mind's Reflection", "entity_pos/eye": "Compass' Purification", "entity_pos/foot": "Compass' Purification II", - "get_entity_look": "Alidade's Purification", - "get_entity_height": "Stadiometer's Purification", - "get_entity_velocity": "Pace Purification", - "raycast": "Archer's Distillation", + get_entity_look: "Alidade's Purification", + get_entity_height: "Stadiometer's Purification", + get_entity_velocity: "Pace Purification", + raycast: "Archer's Distillation", "raycast/axis": "Architect's Distillation", "raycast/entity": "Scout's Distillation", - "circle/impetus_pos": "Waystone Reflection", - "circle/impetus_dir": "Lodestone Reflection", - "circle/bounds/min": "Lesser Fold Reflection", - "circle/bounds/max": "Greater Fold Reflection", - - "append": "Integration Distillation", - "unappend": "Derivation Distillation", - "concat": "Combination Distillation", - "index": "Selection Distillation", - "list_size": "Abacus Purification", - "singleton": "Single's Purification", - "empty_list": "Vacant Reflection", - "reverse": "Retrograde Purification", - "last_n_list": "Flock's Gambit", - "splat": "Flock's Disintegration", - "index_of": "Locator's Distillation", - "remove_from": "Excisor's Distillation", - "slice": "Selection Exaltation", - "replace": "Surgeon's Exaltation", - "construct": "Speaker's Distillation", - "deconstruct": "Speaker's Decomposition", - - "get_entity": "Entity Purification", - "get_entity/animal": "Entity Purification: Animal", - "get_entity/monster": "Entity Purification: Monster", - "get_entity/item": "Entity Purification: Item", - "get_entity/player": "Entity Purification: Player", - "get_entity/living": "Entity Purification: Living", - "zone_entity": "Zone Distillation: Any", - "zone_entity/animal": "Zone Distillation: Animal", - "zone_entity/monster": "Zone Distillation: Monster", - "zone_entity/item": "Zone Distillation: Item", - "zone_entity/player": "Zone Distillation: Player", - "zone_entity/living": "Zone Distillation: Living", - "zone_entity/not_animal": "Zone Distillation: Non-Animal", - "zone_entity/not_monster": "Zone Distillation: Non-Monster", - "zone_entity/not_item": "Zone Distillation: Non-Item", - "zone_entity/not_player": "Zone Distillation: Non-Player", - "zone_entity/not_living": "Zone Distillation: Non-Living", + + "circle/": { + impetus_pos: "Waystone Reflection", + impetus_dir: "Lodestone Reflection", + "bounds/min": "Lesser Fold Reflection", + "bounds/max": "Greater Fold Reflection", + }, + + append: "Integration Distillation", + unappend: "Derivation Distillation", + index: "Selection Distillation", + singleton: "Single's Purification", + empty_list: "Vacant Reflection", + reverse: "Retrograde Purification", + last_n_list: "Flock's Gambit", + splat: "Flock's Disintegration", + index_of: "Locator's Distillation", + remove_from: "Excisor's Distillation", + slice: "Selection Exaltation", + replace: "Surgeon's Exaltation", + construct: "Speaker's Distillation", + deconstruct: "Speaker's Decomposition", - "swap": "Jester's Gambit", - "rotate": "Rotation Gambit", - "rotate_reverse": "Rotation Gambit II", - "duplicate": "Gemini Decomposition", - "over": "Prospector's Gambit", - "tuck": "Undertaker's Gambit", + get_entity: "Entity Purification", + "get_entity/": { + animal: "Entity Purification: Animal", + monster: "Entity Purification: Monster", + item: "Entity Purification: Item", + player: "Entity Purification: Player", + living: "Entity Purification: Living", + }, + + zone_entity: "Zone Distillation: Any", + "zone_entity/": { + animal: "Zone Distillation: Animal", + monster: "Zone Distillation: Monster", + item: "Zone Distillation: Item", + player: "Zone Distillation: Player", + living: "Zone Distillation: Living", + not_animal: "Zone Distillation: Non-Animal", + not_monster: "Zone Distillation: Non-Monster", + not_item: "Zone Distillation: Non-Item", + not_player: "Zone Distillation: Non-Player", + not_living: "Zone Distillation: Non-Living", + }, + + swap: "Jester's Gambit", + rotate: "Rotation Gambit", + rotate_reverse: "Rotation Gambit II", + duplicate: "Gemini Decomposition", + over: "Prospector's Gambit", + tuck: "Undertaker's Gambit", "2dup": "Dioscuri Gambit", - "duplicate_n": "Gemini Gambit", - "stack_len": "Flock's Reflection", - "fisherman": "Fisherman's Gambit", + duplicate_n: "Gemini Gambit", + stack_len: "Flock's Reflection", + fisherman: "Fisherman's Gambit", "fisherman/copy": "Fisherman's Gambit II", - "swizzle": "Swindler's Gambit", + swizzle: "Swindler's Gambit", - "unique": "Uniqueness Purification", - "and": "Conjunction Distillation", - "or": "Disjunction Distillation", - "xor": "Exclusion Distillation", + unique: "Uniqueness Purification", + and: "Conjunction Distillation", + or: "Disjunction Distillation", + xor: "Exclusion Distillation", - "greater": "Maximus Distillation", - "less": "Minimus Distillation", - "greater_eq": "Maximus Distillation II", - "less_eq": "Minimus Distillation II", - "equals": "Equality Distillation", - "not_equals": "Inequality Distillation", - "not": "Negation Purification", - "bool_coerce": "Augur's Purification", - "if": "Augur's Exaltation", + greater: "Maximus Distillation", + less: "Minimus Distillation", + greater_eq: "Maximus Distillation II", + less_eq: "Minimus Distillation II", + equals: "Equality Distillation", + not_equals: "Inequality Distillation", + not: "Negation Purification", + bool_coerce: "Augur's Purification", + if: "Augur's Exaltation", - "add": "Additive Distillation", - "sub": "Subtractive Distillation", - "mul": "Multiplicative Distillation", - "div": "Division Distillation", - "abs": "Length Purification", - "pow": "Power Distillation", - "floor": "Floor Purification", - "ceil": "Ceiling Purification", - "modulo": "Modulus Distillation", - "construct_vec": "Vector Exaltation", - "deconstruct_vec": "Vector Disintegration", - "sin": "Sine Purification", - "cos": "Cosine Purification", - "tan": "Tangent Purification", - "arcsin": "Inverse Sine Purification", - "arccos": "Inverse Cosine Purification", - "arctan": "Inverse Tangent Purification", - "arctan2": "Inverse Tangent Purification II", - "random": "Entropy Reflection", - "logarithm": "Logarithmic Distillation", - "coerce_axial": "Axial Purification", + add: "Additive Distillation", + sub: "Subtractive Distillation", + mul: "Multiplicative Distillation", + div: "Division Distillation", + abs: "Length Purification", + pow: "Power Distillation", + floor: "Floor Purification", + ceil: "Ceiling Purification", + modulo: "Modulus Distillation", + construct_vec: "Vector Exaltation", + deconstruct_vec: "Vector Disintegration", + sin: "Sine Purification", + cos: "Cosine Purification", + tan: "Tangent Purification", + arcsin: "Inverse Sine Purification", + arccos: "Inverse Cosine Purification", + arctan: "Inverse Tangent Purification", + arctan2: "Inverse Tangent Purification II", + random: "Entropy Reflection", + logarithm: "Logarithmic Distillation", + coerce_axial: "Axial Purification", - "read": "Scribe's Reflection", + read: "Scribe's Reflection", "read/entity": "Chronicler's Purification", - "write": "Scribe's Gambit", + "read/local": "Muninn's Reflection", + + write: "Scribe's Gambit", "write/entity": "Chronicler's Gambit", - "readable": "Auditor's Reflection", - "writable": "Assessor's Reflection", + "write/local": "Huginn's Gambit", + + readable: "Auditor's Reflection", "readable/entity": "Auditor's Purification", + writable: "Assessor's Reflection", "writable/entity": "Assessor's Purification", "akashic/read": "Akasha's Distillation", "akashic/write": "Akasha's Gambit", - "read/local": "Muninn's Reflection", - "write/local": "Huginn's Gambit", - - "print": "Reveal", - "beep": "Make Note", - "explode": "Explosion", + + print: "Reveal", + beep: "Make Note", + explode: "Explosion", "explode/fire": "Fireball", - "add_motion": "Impulse", - "blink": "Blink", - "break_block": "Break Block", - "place_block": "Place Block", + add_motion: "Impulse", + blink: "Blink", + break_block: "Break Block", + place_block: "Place Block", + "craft/cypher": "Craft Cypher", "craft/trinket": "Craft Trinket", "craft/artifact": "Craft Artifact", "craft/battery": "Craft Phial", - "recharge": "Recharge Item", - "erase": "Erase Item", - "create_water": "Create Water", - "destroy_water": "Destroy Liquid", - "ignite": "Ignite Block", - "extinguish": "Extinguish Area", - "conjure_block": "Conjure Block", - "conjure_light": "Conjure Light", - "bonemeal": "Overgrow", - "edify": "Edify Sapling", - "colorize": "Internalize Pigment", - "sentinel/create": "Summon Sentinel", - "sentinel/destroy": "Banish Sentinel", - "sentinel/get_pos": "Locate Sentinel", - "sentinel/wayfind": "Wayfind Sentinel", - "potion/weakness": "White Sun's Nadir", - "potion/levitation": "Blue Sun's Nadir", - "potion/wither": "Black Sun's Nadir", - "potion/poison": "Red Sun's Nadir", - "potion/slowness": "Green Sun's Nadir", + + recharge: "Recharge Item", + erase: "Erase Item", + create_water: "Create Water", + destroy_water: "Destroy Liquid", + ignite: "Ignite Block", + extinguish: "Extinguish Area", + conjure_block: "Conjure Block", + conjure_light: "Conjure Light", + bonemeal: "Overgrow", + edify: "Edify Sapling", + colorize: "Internalize Pigment", + + "sentinel/": { + create: "Summon Sentinel", + "create/great": "Summon Greater Sentinel", + destroy: "Banish Sentinel", + get_pos: "Locate Sentinel", + wayfind: "Wayfind Sentinel", + }, + + "potion/": { + weakness: "White Sun's Nadir", + levitation: "Blue Sun's Nadir", + wither: "Black Sun's Nadir", + poison: "Red Sun's Nadir", + slowness: "Green Sun's Nadir", + + regeneration: "White Sun's Zenith", + night_vision: "Blue Sun's Zenith", + absorption: "Black Sun's Zenith", + haste: "Red Sun's Zenith", + strength: "Green Sun's Zenith", + }, + + flight: "Altiora", "flight/range": "Anchorite's Flight", "flight/time": "Wayfarer's Flight", - - "potion/regeneration": "White Sun's Zenith", - "potion/night_vision": "Blue Sun's Zenith", - "potion/absorption": "Black Sun's Zenith", - "potion/haste": "Red Sun's Zenith", - "potion/strength": "Green Sun's Zenith", - "flight": "Altiora", - "lightning": "Summon Lightning", - "summon_rain": "Summon Rain", - "dispel_rain": "Dispel Rain", - "create_lava": "Create Lava", + + lightning: "Summon Lightning", + summon_rain: "Summon Rain", + dispel_rain: "Dispel Rain", + create_lava: "Create Lava", "teleport/great": "Greater Teleport", - "brainsweep": "Flay Mind", - "sentinel/create/great": "Summon Greater Sentinel", + brainsweep: "Flay Mind", - "eval": "Hermes' Gambit", + eval: "Hermes' Gambit", "eval/cc": "Iris' Gambit", - "for_each": "Thoth's Gambit", - "halt": "Charon's Gambit", + for_each: "Thoth's Gambit", + halt: "Charon's Gambit", "interop/": { - "gravity/get": "Gravitational Purification", - "gravity/set": "Alter Gravity", - "pehkui/get": "Gulliver's Purification", - "pehkui/set": "Alter Scale", - } + "gravity/": { + get: "Gravitational Purification", + set: "Alter Gravity", + }, + + "pehkui/": { + get: "Gulliver's Purification", + set: "Alter Scale", + }, + }, }, // hexcasting.action.book.[resloc] override the name of that pattern in the patchi book, for abbreviations "book.hexcasting:": { - "get_entity_height": "Stadiometer's Prfn.", - "get_entity/animal": "Entity Prfn.: Animal", - "get_entity/monster": "Entity Prfn.: Monster", - "get_entity/item": "Entity Prfn.: Item", - "get_entity/player": "Entity Prfn.: Player", - "get_entity/living": "Entity Prfn.: Living", - "zone_entity": "Zone Dstl.: Any", - "zone_entity/animal": "Zone Dstl.: Animal", - "zone_entity/monster": "Zone Dstl.: Monster", - "zone_entity/item": "Zone Dstl.: Item", - "zone_entity/player": "Zone Dstl.: Player", - "zone_entity/living": "Zone Dstl.: Living", - "zone_entity/not_animal": "Zone Dstl.: Non-Animal", - "zone_entity/not_monster": "Zone Dstl.: Non-Monster", - "zone_entity/not_item": "Zone Dstl.: Non-Item", - "zone_entity/not_player": "Zone Dstl.: Non-Player", - "zone_entity/not_living": "Zone Dstl.: Non-Living", - "mul": "Multiplicative Dstl.", - "div": "Division Dstl.", - "arcsin": "Inverse Sine Prfn.", - "arccos": "Inverse Cosine Prfn.", - "arctan": "Inverse Tangent Prfn.", - "arctan2": "Inverse Tan. Prfn. II", - "const/vec/x": "Vector Rfln. +X/-X", - "const/vec/y": "Vector Rfln. +Y/-Y", - "const/vec/z": "Vector Rfln. +Z/-Z", + get_entity_height: "Stadiometer's Prfn.", + + "get_entity/": { + animal: "Entity Prfn.: Animal", + monster: "Entity Prfn.: Monster", + item: "Entity Prfn.: Item", + player: "Entity Prfn.: Player", + living: "Entity Prfn.: Living", + }, + + zone_entity: "Zone Dstl.: Any", + "zone_entity/": { + animal: "Zone Dstl.: Animal", + monster: "Zone Dstl.: Monster", + item: "Zone Dstl.: Item", + player: "Zone Dstl.: Player", + living: "Zone Dstl.: Living", + not_animal: "Zone Dstl.: Non-Animal", + not_monster: "Zone Dstl.: Non-Monster", + not_item: "Zone Dstl.: Non-Item", + not_player: "Zone Dstl.: Non-Player", + not_living: "Zone Dstl.: Non-Living", + }, + + mul: "Multiplicative Dstl.", + div: "Division Dstl.", + arcsin: "Inverse Sine Prfn.", + arccos: "Inverse Cosine Prfn.", + arctan: "Inverse Tangent Prfn.", + arctan2: "Inverse Tan. Prfn. II", + + "const/vec/": { + x: "Vector Rfln. +X/-X", + y: "Vector Rfln. +Y/-Y", + z: "Vector Rfln. +Z/-Z", + }, + "read/entity": "Chronicler's Prfn.", - "bool_to_number": "Numerologist's Prfn.", - "number": "Numerical Reflection", - "mask": "Bookkeeper's Gambit", - } + bool_to_number: "Numerologist's Prfn.", + number: "Numerical Reflection", + mask: "Bookkeeper's Gambit", + }, }, // ^ action + "special.hexcasting:": { - "number": "Numerical Reflection: %s", - "mask": "Bookkeeper's Gambit: %s", + number: "Numerical Reflection: %s", + mask: "Bookkeeper's Gambit: %s", }, + "rawhook.hexcasting:": { - "open_paren": "Introspection", - "close_paren": "Retrospection", - "escape": "Consideration", - "undo": "Evanition" + open_paren: "Introspection", + close_paren: "Retrospection", + escape: "Consideration", + undo: "Evanition", }, + "iota.hexcasting:": { "null": "Null", - "double": "Number", - "boolean": "Boolean", - "entity": "Entity", - "list": "List", - "pattern": "Pattern", - "garbage": "Garbage", - "vec3": "Vector" + double: "Number", + boolean: "Boolean", + entity: "Entity", + list: "List", + pattern: "Pattern", + garbage: "Garbage", + vec3: "Vector", }, + mishap: { "": "%s: %s", - "invalid_pattern": "That pattern isn't associated with any action", - "unescaped": "Expected to evaluate a pattern, but evaluated %s instead", + invalid_pattern: "That pattern isn't associated with any action", + unescaped: "Expected to evaluate a pattern, but evaluated %s instead", - "not_enough_args": "expected %s or more arguments but the stack was only %s tall", - "no_args": "expected %s or more arguments but the stack was empty", - "too_many_close_parens": "Did not first use Introspection", + not_enough_args: "expected %s or more arguments but the stack was only %s tall", + no_args: "expected %s or more arguments but the stack was empty", + too_many_close_parens: "Did not first use Introspection", - "wrong_dimension": "cannot see %s from %s", - "entity_too_far": "%s is out of range", - "immune_entity": "cannot alter %s", - "eval_too_deep": "Recursively evaluated too deep", - "no_item": "needs %s but got nothing", + wrong_dimension: "cannot see %s from %s", + entity_too_far: "%s is out of range", + immune_entity: "cannot alter %s", + eval_too_deep: "Recursively evaluated too deep", + no_item: "needs %s but got nothing", "no_item.offhand": "needs %s in the other hand but got nothing", - "bad_entity": "needs %s but got %s", - "bad_brainsweep": "The %s rejected the being's mind", - "already_brainswept": "The mind has already been used", - "no_spell_circle": "%s requires a spell circle", - "others_name": "Tried to invade the privacy of %s's soul", + bad_entity: "needs %s but got %s", + bad_brainsweep: "The %s rejected the being's mind", + already_brainswept: "The mind has already been used", + no_spell_circle: "%s requires a spell circle", + others_name: "Tried to invade the privacy of %s's soul", "others_name.self": "Tried to divulge my Name too recklessly", - "divide_by_zero.divide": "Attempted to divide %s by %s", - "divide_by_zero.project": "Attempted to project %s onto %s", - "divide_by_zero.exponent": "Attempted to raise %s to the %s", - "divide_by_zero.logarithm": "Attempted to get the logarithm of %s in base %s", - "divide_by_zero.zero": "zero", - "divide_by_zero.zero.power": "zeroth power", - "divide_by_zero.zero.vec": "the zero vector", - "divide_by_zero.power": "power of %s", - "divide_by_zero.sin": "the sine of %s", - "divide_by_zero.cos": "the cosine of %s", - "no_akashic_record": "No Akashic Record at %s", - "disallowed": "has been disallowed by the server admins", - "disallowed_circle": "has been disallowed in spell circles by the server admins", - "invalid_spell_datum_type": "Tried to use a value of invalid type as a SpellDatum: %s (class %s). This is a bug in the mod.", - "unknown": "threw an exception (%s). This is a bug in the mod.", - "shame": "Shame on you!", - - "invalid_value": { + + divide_by_zero: { + divide: "Attempted to divide %s by %s", + project: "Attempted to project %s onto %s", + exponent: "Attempted to raise %s to the %s", + logarithm: "Attempted to get the logarithm of %s in base %s", + + zero: { + "": "zero", + power: "zeroth power", + vec: "the zero vector", + }, + power: "power of %s", + sin: "the sine of %s", + cos: "the cosine of %s", + }, + + invalid_operator_args: { + one: "got an unexpected iota at index %d of the stack: %s", + many: "got %d unexpected iotas at indices %d-%d of the stack: %s", + }, + + no_akashic_record: "No Akashic Record at %s", + disallowed: "has been disallowed by the server admins", + disallowed_circle: "has been disallowed in spell circles by the server admins", + invalid_spell_datum_type: "Tried to use a value of invalid type as a SpellDatum: %s (class %s). This is a bug in the mod.", + unknown: "threw an exception (%s). This is a bug in the mod.", + shame: "Shame on you!", + + invalid_value: { "": "expected %s at index %s of the stack, but got %s", - "class.double": "a number", - "class.boolean": "a boolean", - "class.vector": "a vector", - "class.list": "a list", - "class.widget": "an influence", - "class.pattern": "a pattern", - "class.entity.item": "an item entity", - "class.entity.player": "a player", - "class.entity.villager": "a villager", - "class.entity.living": "a living entity", - "class.entity": "an entity", - "class.unknown": "(unknown, uh-oh, this is a bug)", - "numvec": "a number or vector", - "numlist": "an integer or list", + + class: { + double: "a number", + boolean: "a boolean", + vector: "a vector", + list: "a list", + widget: "an influence", + pattern: "a pattern", + + entity: { + "": "an entity", + item: "an item entity", + player: "a player", + villager: "a villager", + living: "a living entity", + }, + + unknown: "(unknown, uh-oh, this is a bug)", + }, + + numvec: "a number or vector", + numlist: "an integer or list", "list.pattern": "a list of patterns", - "double.positive": "a positive number", - "double.positive.less": "a positive number less than %d", - "double.positive.less.equal": "a positive number less than or equal to %d", - "double.between": "a number between %d and %d", - "int": "an integer", - "int.positive": "a positive integer", - "int.positive.less": "a positive integer less than %d", - "int.positive.less.equal": "a positive integer less than or equal to %d", - "int.between": "an integer between %d and %d", - "evaluatable": "something evaluatable", - "bool_commute": "a boolean, 0, or 1", + + double: { + positive: { + "": "a positive number", + less: "a positive number less than %d", + "less.equal": "a positive number less than or equal to %d", + }, + between: "a number between %d and %d", + }, + + int: { + "": "an integer", + positive: { + "": "a positive integer", + less: "a positive integer less than %d", + "less.equal": "a positive integer less than or equal to %d", + }, + between: "an integer between %d and %d", + }, + + evaluatable: "something evaluatable", + bool_commute: "a boolean, 0, or 1", }, + location: { - "too_far": "%s is out of range", - "out_of_world": "%s is not within the world", - "too_close_to_out": "%s is too close to the boundary of the world", - "forbidden": "%s is forbidden to you", - "bad_dimension": "This dimension forbids that action", + too_far: "%s is out of range", + out_of_world: "%s is not within the world", + too_close_to_out: "%s is too close to the boundary of the world", + forbidden: "%s is forbidden to you", + bad_dimension: "This dimension forbids that action", }, bad_item: { "": "needs %s but got %dx %s", - "offhand": "needs %s in the other hand but got %dx %s", - "iota": "a place to store iotas", - "iota.read": "a place to read iotas from", - "iota.write": "a place to write iotas to", - "iota.readonly": "a place that will accept %s", - "media": "a media-containing item", - "media_for_battery": "a raw media item", - "only_one": "exactly one item", - "eraseable": "an eraseable item", - "bottle": "a glass bottle", - "rechargable": "a rechargable item", - "colorizer": "a pigment", - "variant": "an item with variants" + offhand: "needs %s in the other hand but got %dx %s", + + iota: { + "": "a place to store iotas", + read: "a place to read iotas from", + write: "a place to write iotas to", + readonly: "a place that will accept %s", + }, + + media: "a media-containing item", + media_for_battery: "a raw media item", + only_one: "exactly one item", + eraseable: "an eraseable item", + bottle: "a glass bottle", + rechargable: "a rechargable item", + colorizer: "a pigment", + variant: "an item with variants", }, + bad_block: { "": "Expected %s at %s, but got %s", - "sapling": "a sapling", - "replaceable": "somewhere to place a block", + sapling: "a sapling", + replaceable: "somewhere to place a block", }, - circle: { - "bool_directrix.no_bool": "the iota encountered at %s was %s, not a bool", - "bool_directrix.empty_stack": "the stack was empty at %s" - } + "circle.bool_directrix": { + no_bool: "the iota encountered at %s was %s, not a bool", + empty_stack: "the stack was empty at %s", + }, }, // ^ mishap circles: { no_exit: "The flow of media at %s could not find an exit", - many_exits: "The flow of media at %s had too many exits" + many_exits: "The flow of media at %s had too many exits", }, @@ -755,65 +1003,60 @@ landing: "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. \ + It fascinates me. I've decided to start a journal of my thoughts and findings.\ $(br2)$(l:https://forum.petra-k.at/index.php)Forum Link/$", category: { basics: { "": "Getting Started", - "desc": "The practitioners of this art would cast their so-called _Hexes by drawing strange patterns in the air with a $(l:items/staff)$(item)Staff/$--\ - or craft $(l:items/hexcasting)$(item)powerful magical items/$ to do the casting for them.\ - How might I do the same?" + desc: "The practitioners of this art would cast their so-called _Hexes by drawing strange patterns in the air with a $(l:items/staff)$(item)Staff/$ -- \ + or craft $(l:items/hexcasting)$(item)powerful magical items/$ to do the casting for them. \ + How might I do the same?", }, casting: { "": "Hex Casting", - desc: "I've started to understand how the old masters cast their _Hexes! It's a bit complicated,\ - but I'm sure I can figure it out. Let's see..." + desc: "I've started to understand how the old masters cast their _Hexes! It's a bit complicated, \ + but I'm sure I can figure it out. Let's see...", }, items: { "": "Items", - desc: "I devote this section to the magical and mysterious items I might encounter in my studies." + desc: "I devote this section to the magical and mysterious items I might encounter in my studies.", }, greatwork: { "": "The Great Work", - desc: "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.\ + desc: "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$(k)get stick bugged lmao/$", // alwinfy you think you're so funny }, lore: { "": "Lore", - desc: ">>>\ -| 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..." + desc: "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...", }, interop: { "": "Cross-Mod Compatibility", - desc: ">>>\ -| It appears I have installed some mods Hexcasting interoperates with! I've detailed them here." + desc: "It appears I have installed some mods Hexcasting interoperates with! I've detailed them here.", }, patterns: { "": "Patterns", - desc: "A list of all the patterns I've discovered, as well as what they do." + desc: "A list of all the patterns I've discovered, as well as what they do.", }, spells: { "": "Spells", - desc: "Patterns and actions that perform a magical effect on the world." + desc: "Patterns and actions that perform a magical effect on the world.", }, great_spells: { "": "Great Spells", - desc: "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).\ + desc: "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 ramblings of extinct traditionalists, though -- a pattern's a pattern.$(br2)\ - What could possibly go wrong?" + What could possibly go wrong?", }, - - lore: "Lore", - interop: "Cross-Mod Interactions", }, // ^ categories @@ -894,14 +1137,14 @@ zeniths: "Zeniths", lore: { - "cardamom1": "Cardamom Steles, #1", - "cardamom2": "Cardamom Steles, #2", - "cardamom3": "Cardamom Steles, #3", - "cardamom4": "Cardamom Steles, #4", - "cardamom5": "Cardamom Steles, #5", - "experiment1": "Wooleye Instance Notes", - "experiment2": "Wooleye Interview Logs", - "inventory": "Restoration Log #72" + cardamom1: "Cardamom Steles, #1", + cardamom2: "Cardamom Steles, #2", + cardamom3: "Cardamom Steles, #3", + cardamom4: "Cardamom Steles, #4", + cardamom5: "Cardamom Steles, #5", + experiment1: "Wooleye Instance Notes", + experiment2: "Wooleye Interview Logs", + inventory: "Restoration Log #72", }, interop: { @@ -911,726 +1154,879 @@ // TODO: add something about Switchy once that PR gets merged // https://github.com/sisby-folk/switchy/pull/44 // i can't WAIT for all the hilarious people on the github issues about this one - } + }, }, // ^ entries page: { - "media.1": "_Media is a form of mental energy external to a mind. All living creatures generate trace amounts of _media when thinking about anything; after the thought is finished, the media is released into the environment.$(br2)The art of casting _Hexes is all about manipulating _media to do your bidding.", - "media.2": "_Media can exert influences on other media-- the strength and type of influence can be manipulated by drawing _media out into patterns.$(p)Scholars of the art used a concentrated blob of _media on the end of a stick: by waving it in the air in precise configurations, they were able to manipulate enough _media with enough precision to influence the world itself, in the form of a _Hex.", - "media.3": "Sadly, even a fully sentient being (like myself, presumably) can only generate miniscule amounts of _media. It would be quite impractical to try and use my own brainpower to cast Hexes.$(br2)But legend has it that there are underground deposits where _media slowly accumulates, growing into crystalline forms.$(p)If I could just find one of those...", - - - "geodes.1": "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 $(italic)must/$ be the place spoken about in legends where _media accumulates.$(br2)These $(l:items/amethyst)$(item)amethyst crystals/$ must be a $(l:items/amethyst)$(thing)convenient, solidified form of _Media/$.", - "geodes.2": "It appears that, in addition to the $(l:items/amethyst)$(item)Amethyst Shards/$ I have seen in the past, these crystals can also drop bits of powdered $(l:items/amethyst)$(item)Amethyst Dust/$, as well as these $(l:items/amethyst)$(item)Charged Amethyst Crystals/$. It looks like I'll have a better chance of finding the $(l:items/amethyst)$(item)Charged Amethyst Crystals/$ by using a Fortune pickaxe.", - "geodes.3": "As I take the beauty of the crystal in, I can feel connections flashing wildly in my mind. It's like the _media in the air is entering me, empowering me, elucidating me... It feels wonderful.$(br2)Finally, my study into the arcane is starting to make some sense!$(p)Let me reread those old legends again, now that I know what I'm looking at.", - - - "couldnt_cast.1": "Argh! Why won't it let me cast the spell?!$(br2)The scroll I found rings with authenticity. I can $(italic)feel/$ it humming in the scroll-- the pattern is true, or as true as it can be. The spell is $(italic)right there/$.$(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 $(italic)COULD NOT/$.", - "couldnt_cast.2": "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 $(italic)refuses/$ to cross the barrier. It's maddening.$(p)$(italic)This/$ is where my arcane studies end? Cursed by impotence, cursed to lose my rightful powers?$(br2)I should take a deep breath. I should meditate on what I have learned, even if it wasn't very much...", - "couldnt_cast.3": "...After careful reflection... I have discovered a change in myself.$(p)It seems... in lieu of $(l:items/amethyst)$(item)amethyst/$, 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)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.$(br2)Fortunately, I feel my limits as well-- I would get approximately two $(l:items/amethyst)$(item)Charged Amethyst/$'s worth of _media out of my health at its prime.", - "couldnt_cast.4": "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)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)Is it so wrong, to want it for myself?", - - - "start_to_see.1": "The texts weren't lying. Nature took its due.", - "start_to_see.2": "That... that was...$(p)...that was one of the $(italic)worst/$ things I've $(italic)ever/$ 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)I feel lucky to have $(italic)survived/$, much less have the sagacity to write this-- I should declare the matter closed, double-check my math before I cast any more _Hexes, and never make such a mistake again.", - "start_to_see.3": "...But.$(br2)But for the scarcest instant, that part of myself... it $(italic)saw/$... $(l:greatwork/the_work)$(thing)something/$. A place-- a design, perhaps? (Such distinctions didn't seem to matter in the face of... that.)$(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)I wanted $(italic)through./$", - "start_to_see.4": "I shouldn't. I $(italic)know/$ 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 $(italic)single stroke/$.$(br2)But I'm. So. $(italic)Close/$.$(p)$(italic)This/$ is the culmination of my art. This is the $(#54398a)Enlightenment/$ I've been seeking. $(br2)I want more. I need to see it again. I $(italic)will/$ see it.$(p)What is my mortal mind against immortal glory?", + media: { + "1": "_Media is a form of mental energy external to a mind. All living creatures generate trace amounts of _media when thinking about anything; after the thought is finished, the media is released into the environment.$(br2)The art of casting _Hexes is all about manipulating _media to do your bidding.", + "2": "_Media can exert influences on other media-- the strength and type of influence can be manipulated by drawing _media out into patterns.$(p)Scholars of the art used a concentrated blob of _media on the end of a stick: by waving it in the air in precise configurations, they were able to manipulate enough _media with enough precision to influence the world itself, in the form of a _Hex.", + "3": "Sadly, even a fully sentient being (like myself, presumably) can only generate miniscule amounts of _media. It would be quite impractical to try and use my own brainpower to cast Hexes.$(br2)But legend has it that there are underground deposits where _media slowly accumulates, growing into crystalline forms.$(p)If I could just find one of those...", + }, + + geodes: { + "1": "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 $(italic)must/$ be the place spoken about in legends where _media accumulates.$(br2)These $(l:items/amethyst)$(item)amethyst crystals/$ must be a $(l:items/amethyst)$(thing)convenient, solidified form of _Media/$.", + "2": "It appears that, in addition to the $(l:items/amethyst)$(item)Amethyst Shards/$ I have seen in the past, these crystals can also drop bits of powdered $(l:items/amethyst)$(item)Amethyst Dust/$, as well as these $(l:items/amethyst)$(item)Charged Amethyst Crystals/$. It looks like I'll have a better chance of finding the $(l:items/amethyst)$(item)Charged Amethyst Crystals/$ by using a Fortune pickaxe.", + "3": "As I take the beauty of the crystal in, I can feel connections flashing wildly in my mind. It's like the _media in the air is entering me, empowering me, elucidating me... It feels wonderful.$(br2)Finally, my study into the arcane is starting to make some sense!$(p)Let me reread those old legends again, now that I know what I'm looking at.", + }, + + couldnt_cast: { + "1": "Argh! Why won't it let me cast the spell?!$(br2)The scroll I found rings with authenticity. I can $(italic)feel/$ it humming in the scroll-- the pattern is true, or as true as it can be. The spell is $(italic)right there/$.$(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 $(italic)COULD NOT/$.", + "2": "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 $(italic)refuses/$ to cross the barrier. It's maddening.$(p)$(italic)This/$ is where my arcane studies end? Cursed by impotence, cursed to lose my rightful powers?$(br2)I should take a deep breath. I should meditate on what I have learned, even if it wasn't very much...", + "3": "...After careful reflection... I have discovered a change in myself.$(p)It seems... in lieu of $(l:items/amethyst)$(item)amethyst/$, 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)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.$(br2)Fortunately, I feel my limits as well-- I would get approximately two $(l:items/amethyst)$(item)Charged Amethyst/$'s worth of _media out of my health at its prime.", + "4": "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)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)Is it so wrong, to want it for myself?", + }, + + start_to_see: { + "1": "The texts weren't lying. Nature took its due.", + "2": "That... that was...$(p)...that was one of the $(italic)worst/$ things I've $(italic)ever/$ 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)I feel lucky to have $(italic)survived/$, much less have the sagacity to write this-- I should declare the matter closed, double-check my math before I cast any more _Hexes, and never make such a mistake again.", + "3": "...But.$(br2)But for the scarcest instant, that part of myself... it $(italic)saw/$... $(l:greatwork/the_work)$(thing)something/$. A place-- a design, perhaps? (Such distinctions didn't seem to matter in the face of... that.)$(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)I wanted $(italic)through./$", + "4": "I shouldn't. I $(italic)know/$ 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 $(italic)single stroke/$.$(br2)But I'm. So. $(italic)Close/$.$(p)$(italic)This/$ is the culmination of my art. This is the $(#54398a)Enlightenment/$ I've been seeking. $(br2)I want more. I need to see it again. I $(italic)will/$ see it.$(p)What is my mortal mind against immortal glory?", + }, casting: { overview: { - "1": ">>>\ - I believe it's good to always start off on the right foot. So, I've compiled the patterns for a _Hex that will cause a modest explosion at the position I am looking at. I believe examining the inner workings of this _Hex will be quite edifying." + "1": "I believe it's good to always start off on the right foot. So, I've compiled the patterns for a _Hex that will cause a modest explosion at the position I am looking at. I believe examining the inner workings of this _Hex will be quite edifying.", }, grid: { - "1": ">>>\ - I will generally provide my patterns to Nature via my $(l:items/staff)$(item)Staff/$.\ - Pressing $(thing)$(k:use)/$ with one in my hand will cause a hexagonal grid of dots to appear in front of me.\ + "1": "I will generally provide my patterns to Nature via my $(l:items/staff)$(item)Staff/$. \ + Pressing $(thing)$(k:use)/$ with one in my hand will cause a hexagonal grid of dots to appear in front of me. \ I can then click, drag from dot to dot, and release to draw patterns.$(br2)\ Once I submit a pattern, it is executed (see the next chapter).", - "2": ">>>\ - Pressing $(thing)$(k:escape)/$ saves and closes the grid; when I next use my staff, all my patterns and iotas will still be there.$(br2)\ - Should I wish to reset my casting state, I can do so by sneaking while opening the grid." + "2": "Pressing $(thing)$(k:escape)/$ saves and closes the grid; when I next use my staff, all my patterns and iotas will still be there.$(br2)\ + Should I wish to reset my casting state, I can do so by sneaking while opening the grid.", }, "patterns&actions": { - "1": ">>>\ - $(thing)Patterns/$ are paths traced through the grid of _media. I believe the sixfold symmetry of patterns is what gives my art its name.$(br2)\ + "1": "$(thing)Patterns/$ are paths traced through the grid of _media. I believe the sixfold symmetry of patterns is what gives my art its name.$(br2)\ $(thing)Actions/$, meanwhile, are what patterns $(italic)do/$.", - "2": ">>>\ - The difference is similar to the difference between $(italic)words/$ and $(italic)meanings/$.\ - Any jumble of letters forms a word, but most of them (like \"xnopyt\") don't mean anything.\ + "2": "The difference is similar to the difference between $(italic)words/$ and $(italic)meanings/$. \ + Any jumble of letters forms a word, but most of them (like \"xnopyt\") don't mean anything. \ Similarly, any squiggle yanked through the _media is technically a pattern, but most of them won't do anything.", - "3": ">>>\ - Actions are somewhat like commands to the grand systems rules that govern the universe (which I have seen some texts personify as \"Nature.\").\ + "3": "Actions are somewhat like commands to the grand systems rules that govern the universe (which I have seen some texts personify as \"Nature.\"). \ They tend to do one of a few things:\ $(li)Gather some information about the world, such as finding the position of a entity.\ $(li)Manipulate the info gathered, like finding the distance between two positions.\ $(li)Perform some magical effect on the world, like summoning lightning or an explosion.$(br)\ These last kinds of actions are called \"spells.\", and are generally what attract people to the art.", - "4": ">>>\ - A _Hex, then, is a sequence of valid patterns presented to Nature in sequence.\ - Nature interprets each of these patterns one-by-one and, if it understands, changes the world to my whims.\ + "4": "A _Hex, then, is a sequence of valid patterns presented to Nature in sequence. \ + Nature interprets each of these patterns one-by-one and, if it understands, changes the world to my whims. \ (Or, what it thinks my whims are.)", - "5": ">>>\ - Although some actions can be performed easily, some require a payment in the form of coalesced _media.\ - I believe the concentrated mental energy is used as a sort of argument to Nature, convincing it that it should indeed do as I ask.\ + "5": "Although some actions can be performed easily, some require a payment in the form of coalesced _media. \ + I believe the concentrated mental energy is used as a sort of argument to Nature, convincing it that it should indeed do as I ask. \ Most spells require this kind of payment, but a few non-spell actions do too.$(br2)\ - I've recorded the costs, if any, of each action on their respective pages." + I've recorded the costs, if any, of each action on their respective pages.", }, iotas: { - "1": ">>>\ - The \"nouns\" in Nature's language are called $(thing)iotas/$.\ + "1": "The \"nouns\" in Nature's language are called $(thing)iotas/$. \ At its most basic level, Hexcasting is the art of manipulating iotas.$(br2)\ Iotas come in many different types:\ $(li)Numbers (which some legends called \"doubles\").\ $(li)Vectors, a collection of three numbers representing a position, movement, or direction.\ $(li)Booleans or \"bools\" for short, representing an abstract True or False.\ $(li)Entities, like myself, chickens, and minecarts.", - "2": ">>>\ - $(li)Influences, peculiar types of iota that seem to represent abstract ideas.\ + "2": "$(li)Influences, peculiar types of iota that seem to represent abstract ideas.\ $(li)Patterns themselves, used for crafting magic items and truly mind-boggling feats like $(italic)spells that cast other spells/$.\ $(li)A list of several of the above, gathered into a single iota.", - "3": ">>>\ - Generally, I provide iotas to actions.\ - For example, take $(l:patterns/spells/basic#hexcasting:explode)$(action)Explosion/$.\ + "3": "Generally, I provide iotas to actions. \ + For example, take $(l:patterns/spells/basic#hexcasting:explode)$(action)Explosion/$. \ This spell requires a number iota, to indicate the strength, and a vector iota, to indicate the location.$(br2)\ - Or, take $(l:patterns/basic#hexcasting:get_pos)$(action)Compass Purification/$.\ - This takes an entity iota and transforms it into a vector iota, representing the position of that entity." - } + Or, take $(l:patterns/basic#hexcasting:get_pos)$(action)Compass Purification/$. \ + This takes an entity iota and transforms it into a vector iota, representing the position of that entity.", + }, }, // Casting - "101.1": "Casting a _Hex is quite difficult-- no wonder this art was lost to time! I'll have to re-read my notes carefully.$(br2)I can start a _Hex by pressing $(k:use) with a $(l:items/staff)$(item)Staff/$ 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 _media of the grid; finishing a pattern will run its corresponding action (more on that later).", - "101.2": "Once I've drawn enough patterns to cast a spell, the grid will disappear as the _media I've stored up is released. Holding $(k:sneak) while using my $(l:items/staff)$(item)staff/$ will also clear the grid.$(br2)So how do patterns work? In short:$(li)$(italic)Patterns/$ will execute...$(li)$(italic)Actions/$, which manipulate...$(li)$(l:casting/stack)$(italic)The Stack/$, which is a list of...$(li)$(italic)Iotas/$, which are simply units of information.", - "101.3": "First, $(thing)patterns/$. These are essential-- they're what I use to manipulate the _media around me. Certain patterns, when drawn, will cause $(thing)actions/$ to happen. Actions are what actually $(italic)do/$ the magic; all patterns influence _media in particular ways, and when those influences end up doing something useful, we call it an action.$(br2)_Media can be fickle: if I draw an invalid pattern, I'll get some $(l:casting/influences)$(action)garbage/$ result somewhere on my stack (read on...)", - "101.4.header": "An Example", - "101.4": "It's interesting to note that the $(italic)rotation/$ of a pattern doesn't seem to matter at all. These two patterns both perform an action called $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$, for example.", - "101.5": "A _Hex is cast by drawing (valid) actions in sequence. Each action might do one of a few things:$(li)Gather some information about the environment, leaving it on the top of the stack;$(li)manipulate the info gathered (e.g. adding two numbers); or$(li)perform some magical effect, like summoning lightning or an explosion. (These actions are called \"spells.\")$(p)When I start casting a _Hex, it creates an empty stack. Actions manipulate the top of that stack.", - "101.6": "For example, $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$ will create an iota representing $(italic)me/$, the caster, and add it to the top of the stack. $(l:patterns/basics#hexcasting:entity_pos/eye)$(action)Compass Purification/$ 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.$(br2)So, drawing those patterns in that order would result in an iota on the stack representing my position.", - "101.7": "$(thing)Iotas/$ can represent things like myself or my position, but there are several other types I can manipulate with $(thing)Actions/$. Here's a comprehensive list:$(li)Numbers (which some legends called \"doubles\");$(li)Vectors, a collection of three numbers representing a position, movement, or direction in the world;$(li)Booleans or \"bools\" for short, representing an abstract True or False,", - "101.8": "$(li)Entities, like myself, chickens, and minecarts;$(li)Influences, peculiar types of iota that seem to represent abstract ideas;$(li)Patterns themselves, used for crafting magic items and truly mind-boggling feats like $(italic)spells that cast other spells/$; and$(li)A list of several of the above, gathered into a single iota.", - "101.9": "Of course, there's no such thing as a free lunch. All spells, and certain other actions, require _media as payment.$(br2)The best I can figure, a _Hex is a little bit like a plan of action presented to Nature-- in this analogy, the _media is used to provide the arguments to back it up, so Nature will accept your plan and carry it out.", - "101.10": "That aside, it doesn't seem like anyone has done much research on exactly how $(italic)much/$ any particular piece of $(l:items/amethyst)$(item)amethyst/$ is valued. The best I can tell, an $(l:items/amethyst)$(item)Amethyst Shard/$ is worth about five pieces of $(l:items/amethyst)$(item)Amethyst Dust/$, and a $(l:items/amethyst)$(item)Charged Amethyst Crystal/$ is worth about ten.$(br2)Strangely enough, it seems like no other form of $(l:items/amethyst)$(item)amethyst/$ is suitable to be used in the casting of a _Hex. I suspect that whole blocks or crystals are too solid to be easily unraveled into _media.", - "101.11": "It's also worth noting that each action will consume the _media 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 $(l:items/amethyst)$(item)Amethyst Dust/$'s worth of _media will consume an entire $(l:items/amethyst)$(item)Charged Amethyst Crystal/$, if that's all that's present in my inventory.$(br2)Thus, it might be a good idea to bring dust for spellcasting too-- waste not, want not...", - "101.12": "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 $(italic)healthy/$.", - "101.13": "Maybe something's changed, though. In my experiments, I've never managed to do it; if I run out of _media, the spell will simply fail to cast, as if some barrier is blocking it from harming me. $(br2)It would be interesting to get to the bottom of that mystery, but for now I suppose it'll keep me safe.", - "101.14": "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.$(br2)$(italic)Content Warning: some body horror and suggestive elements./$", - "101.14.link_text": "Goblin Punch", - "101.15": "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.$(br2)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 _Hexcasters could use them to great effect and utility, I shudder to think of what someone malicious might do with this.", - - - "vectors.1": "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.$(br2)First off, an enlightening video on the topic.", - "vectors.1.link_text": "3blue1brown", - "vectors.2": "Additionally, it seems that the mages who manipulated $(thing)Psi energy/$ (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.$(br2)They seem to have used different language for their spellcasting:$(li)A \"Spell Piece\" was their name for an action;$(li)a \"Trick\" was their name for a spell; and$(li)an \"Operator\" was their name for a non-spell action.", - "vectors.3": "Link here.", - "vectors.3.link_text": "Psi Codex", - - - "mishaps.1": "Unfortunately, I am not (yet) a perfect being. I make mistakes from time to time in my study and casting of _Hexes; 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 $(italic)mishap/$.", - "mishaps.2": "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 _media curdles into light of a given color.", - "mishaps.3": "Fortunately, although the bad effects of mishaps are certainly $(italic)annoying/$, 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.$(br2)Following is a list of mishaps I have compiled.", - "mishaps.invalid_pattern.title": "Invalid Pattern", - "mishaps.invalid_pattern": "The pattern drawn is not associated with any action.$(br2)Causes yellow sparks, and a $(l:casting/influences)$(action)Garbage/$ will be pushed to the top of my stack.", - "mishaps.not_enough_iotas.title": "Not Enough Iotas", - "mishaps.not_enough_iotas": "The action required more iotas than were on the stack.$(br2)Causes light gray sparks, and as many $(l:casting/influences)$(action)Garbages/$ as would be required to fill up the argument count will be pushed.", - "mishaps.incorrect_iota.title": "Incorrect Iota", - "mishaps.incorrect_iota": "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.$(br2)Causes dark gray sparks, and the invalid iota will be replaced with $(l:casting/influences)$(action)Garbage/$.", - "mishaps.vector_out_of_range.title": "Vector Out of Ambit", - "mishaps.vector_out_of_range": "The action tried to affect the world at a point that was out of my range.$(br2)Causes magenta sparks, and the items in my hands will be yanked out and flung towards the offending location.", - "mishaps.entity_out_of_range.title": "Entity Out of Ambit", - "mishaps.entity_out_of_range": "The action tried to affect an entity that was out of my range.$(br2)Causes pink sparks, and the items in my hands will be yanked out and flung towards the offending entity.", - "mishaps.entity_immune.title": "Entity is Immune", - "mishaps.entity_immune": "The action tried to affect an entity that cannot be altered by it.$(br2)Causes blue sparks, and the items in my hands will be yanked out and flung towards the offending entity.", - "mishaps.math_error.title": "Mathematical Error", - "mishaps.math_error": "The action did something offensive to the laws of mathematics, such as dividing by zero.$(br2)Causes red sparks, pushes a $(l:casting/influences)$(action)Garbage/$ 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 $(italic)me/$ in retaliation.", - "mishaps.incorrect_item.title": "Incorrect Item", - "mishaps.incorrect_item": "The action requires some sort of item, but the item I supplied was not suitable.$(br2)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.", - "mishaps.incorrect_block.title": "Incorrect Block", - "mishaps.incorrect_block": "The action requires some sort of block at a target location, but the block supplied was not suitable.$(br2)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.", - "mishaps.retrospection.title": "Hasty Retrospection", - "mishaps.retrospection": "I attempted to draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ without first drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$.$(br2)Causes orange sparks, and pushes the pattern for $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ to the stack as a pattern iota.", - "mishaps.too_deep.title": "Delve Too Deep", - "mishaps.too_deep": "Evaluated too many spells with meta-evaluation from one spell.$(br2)Causes dark blue sparks, and chokes all the air out of me.", - "mishaps.true_name.title": "Transgress Other", - "mishaps.true_name": "I attempted to $(l:patterns/readwrite#hexcasting:write)$(action)save a reference/$ to another player to a permanent medium.$(br2)Causes black sparks, and robs me of my sight for approximately one minute.", - "mishaps.disabled.title": "Disallowed Action", - "mishaps.disabled": "I tried to cast an action that has been disallowed by a server administrator.$(br2)Causes black sparks.", - "mishaps.other.title": "Catastrophic Failure", - "mishaps.other": "A bug in the mod caused an iota of an invalid type or otherwise caused the spell to crash. $(l:https://github.com/gamma-delta/HexMod/issues)Please open a bug report!/$$(br2)Causes black sparks.", - - - "stack.1": "A $(thing)Stack/$, 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.$(br2)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.", - "stack.2": "Because a stack is so simple, there's only so many things you can do with it:$(li)$(italic)Adding something to it/$, known formally as pushing,$(li)$(italic)Removing the last added element/$, known as popping, or$(li)$(italic)Examining or modifying the last added element/$, known as peeking.$(br)We call the last-added element the \"top\" of the stack, in accordance with the dinner plate analogy.$(p)As an example, if we push 1 to a stack, then push 2, then pop, the top of the stack is now 1.", - "stack.3": "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.$(br2)Of course, some actions (e.g. $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$) might pop no arguments, and some actions (particularly spells) might push nothing afterwards.", - "stack.4": "Even more complicated actions can be expressed in terms of pushing, popping, and peeking. For example, $(l:patterns/stackmanip#hexcasting:swap)$(action)Jester's Gambit/$ 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, $(l:patterns/stackmanip#hexcasting:duplicate)$(action)Gemini Decomposition/$ duplicates the top of the stack-- in other words, it peeks the stack and pushes a copy of what it finds.", - - - "naming.1": "The names given to actions by the ancients were certainly peculiar, but I think there's a certain kind of logic to them.$(br2)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.", - "naming.2": "$(li)A $(thing)Reflection/$ pops nothing and pushes one iota.$(li)A $(thing)Purification/$ pops one and pushes one.$(li)A $(thing)Distillation/$ pops two and pushes one.$(li)An $(thing)Exaltation/$ pops three or more and pushes one.$(li)A $(thing)Decomposition/$ pops one argument and pushes two.$(li)A $(thing)Disintegration/$ pops one and pushes three or more.$(li)Finally, a $(thing)Gambit/$ pushes or pops some other number (or rearranges the stack in some other manner).", - "naming.3": "Spells seem to be exempt from this nomenclature and are more or less named after what they do-- after all, why call it a $(action)Demoman's Gambit/$ when you could just say $(l:patterns/spells/basic#hexcasting:explode)$(action)Explosion/$?", - - - "influences.1": "Influences are ... strange, to say the least. Whereas most iotas seem to represent something about the world, influences represent something more... abstract, or formless.$(br2)For example, one influence I've named $(l:casting/influences)$(thing)Null/$ seems to represent nothing at all. It's created when there isn't a suitable answer to a question asked, such as an $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$ facing the sky.", - "influences.2": "In addition, I've discovered a curious quartet of influences I've named $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, and $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Evanition/$. 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. $(l:patterns/patterns_as_iotas)My notes on the subject are here/$.", - "influences.3": "Finally, there seems to be an infinite family of influences that just seem to be a tangled mess of _media. I've named them $(l:casting/influences)$(action)Garbage/$, as they are completely useless. They seem to appear in my stack at various places in response to $(l:casting/mishaps)$(thing)mishaps/$, and appear to my senses as a nonsense jumble.", - - - "mishaps2.1": "I have discovered new and horrifying modes of failure. I must not succumb to them.", - "mishaps2.bad_mindflay.title": "Inert Mindflay", - "mishaps2.bad_mindflay": "Attempted to flay the mind of something that I have either already used, or of a character not suitable for the target block.$(br2)Causes dark green sparks, and kills the subject. If a villager sees that, I doubt they would look on it favorably.", - "mishaps2.no_circle.title": "Lack Spell Circle", - "mishaps2.no_circle": "Tried to cast an action requiring a spell circle without a spell circle.$(br2)Causes light blue sparks, and upends my inventory onto the ground.", - "mishaps2.no_record.title": "Lack Akashic Record", - "mishaps2.no_record": "Tried to access an $(l:greatwork/akashiclib)$(item)Akashic Record/$ at a location where there isn't one.$(br2)Causes purple sparks, and steals away some of my experience.", - - - "_comment": "Items", - - - "amethyst.dust": "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 _media.", - "amethyst.shard": "The second is a whole shard of amethyst, of the type non-_Hexcasters might be used to. This has about as much _media inside as five $(l:items/amethyst)$(item)Amethyst Dust/$.", - "amethyst.crystal": "Finally, I'll rarely find a large crystal crackling with energy. This has about as much _media inside as ten units of $(l:items/amethyst)$(item)Amethyst Dust/$ (or two $(l:items/amethyst)$(item)Amethyst Shards/$).", - "amethyst.lore": "$(italic)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./$", - - - "staff.1": "A $(l:items/staff)$(item)Staff/$ is my entry point into casting all _Hexes, large and small. By holding it and pressing $(thing)$(k:use)/$, I begin casting a _Hex; then I can click and drag to draw patterns.$(br2)It's little more than a chunk of _media on the end of a stick; that's all that's needed, after all.", - "staff.crafting.header": "Staves", - "staff.crafting.desc": "$(italic)Don't fight; flame, light; ignite; burn bright./$", - - - "lens.1": "_Media 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.$(br2)By holding a $(l:items/lens)$(item)Scrying Lens/$ in my hand, certain blocks will display additional information when I look at them.", - "lens.2": "For example, looking at a piece of $(item)Redstone/$ will display its signal strength. I suspect I will discover other blocks with additional insight as my studies into my art progress.$(br2)In addition, holding it while casting using a $(l:items/staff)$(item)Staff/$ will shrink the spacing between dots, allowing me to draw more on my grid.$(br2)I can also wear it on my head as a strange sort of monocle.", - "lens.crafting.desc": "$(italic)You must learn... to see what you are looking at./$", - - - "thought_knot.1": "The forgetful often tie a piece of string about their finger to help them remember something important. I believe this idea might be of use in my art. A specially knotted piece of string should be able to hold a single iota stably, irregardless of my stack.$(br2)I will call my invention a $(item)Thought-Knot/$.", - "thought_knot.2": "When I craft it, it stores no iota. Using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ while holding a $(item)Thought-Knot/$ in my other hand will remove the top of the stack and save it into the $(item)Thought-Knot/$. Using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$ will copy whatever iota's in the $(item)Thought-Knot/$ and add it to the stack.$(br2)Once a $(item)Thought-Knot/$ has been written to, the string is indelibly tangled; the iota can be read any number of times, but there is no way to erase or overwrite it. Fortunately, they are not expensive.", - "thought_knot.3": "Also, if I store an entity in a $(item)Thought-Knot/$ and try to recall it after the referenced entity has died or otherwise disappeared, the $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$ will add $(l:casting/influences)$(thing)Null/$ to the stack instead.", - "thought_knot.crafting.desc": "$(italic)How would you feel if someone saw you wearing a sign that said, \"I am dashing and handsome?\"/$", - - - "focus.1": "A $(item)Focus/$ is like a $(l:items/thought_knot)$(item)Thought-Knot/$, in that iota can be written to or read from it. However, the advantage of a focus is that it is $(italic)reusable/$. If I make a mistake in the iota I write to a $(item)Focus, I can simply cast $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ again and write over the iota inside.", - "focus.2": "If I wish to protect a $(l:items/focus)$(item)focus/$ from accidentally being overwritten, I can seal it with wax by crafting it with a $(item)Honeycomb/$. Attempting to use $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ on a sealed focus will fail.$(br2)$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove this seal along with the contents.", - "focus.3": "Indeed, the only advantage of my $(l:items/thought_knot)$(item)Thought-Knot/$s have over $(item)Foci/$ is that $(item)Foci/$ are more expensive to produce. My research indicates that the early practitioners of the art used exclusively $(item)Foci/$, with the $(l:items/thought_knot)$(item)Thought-Knot/$ being an original creation of mine.$(br2)Whoever those ancient people were, they must have been very prosperous.", - "focus.crafting.desc": "$(italic)Poison apples, poison worms./$", - - - "abacus.1": "Although there are $(l:patterns/numbers)$(action)patterns for drawing numbers/$, I find them ... cumbersome, to say the least.$(br2)Fortunately, the old masters of my craft invented an ingenious device called an $(l:items/abacus)$(item)Abacus/$ to provide numbers to my casting. I simply set the number to what I want, then read the value using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, just like I would read a $(l:items/thought_knot)$(item)Thought-Knot/$ or $(l:items/focus)$(item)Focus/$.", - "abacus.2": "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.$(br2)I can shake the abacus to reset it to zero by sneak-right-clicking.", - "abacus.crafting.desc": "$(italic)Mathematics? That's for eggheads!/$", - - - "spellbook.1": "A $(l:items/spellbook)$(item)Spellbook/$ is the culmination of my art-- it acts like an entire library of $(l:items/focus)$(item)Foci/$. Up to $(thing)sixty-four/$ of them, to be exact.$(br2)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 _Hex.", - "spellbook.2": "Like a $(l:items/focus)$(item)Focus/$, there exists a simple method to prevent accidental overwriting. Crafting it with a $(item)Honeycomb/$ will lacquer the current page, preventing $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ from modifying its contents. Also like a $(l:items/focus)$(item)Focus/$, using $(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove the lacquer along with the page's contents.$(br2)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.", - "spellbook.crafting.desc": "$(italic)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.", - - - "scroll.1": "A $(l:items/scroll)$(item)Scroll/$ is a convenient method of sharing a pattern with others. I can copy a pattern onto one with $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, after which it will display in a tooltip.$(br2)I can also place them on the wall as decoration or edification, like a painting, in sizes from 1x1 to 3x3 blocks. Using $(l:items/amethyst)$(item)Amethyst Dust/$ on such a scroll will have it display the stroke order.", - "scroll.2": "In addition, I can also find so-called $(l:items/scroll)$(item)Ancient Scrolls/$ in the dungeons and strongholds of the world. These contain the stroke order of $(thing)Great Spells/$, powerful magicks rumored to be too powerful for the hands and minds of mortals...$(br2)If those \"mortals\" couldn't cast them, I'm not sure they deserve to know them.", - "scroll.crafting.desc": "$(italic)I write upon clean white parchment with a sharp quill and the blood of my students, divining their secrets./$", - - - "slate.1": "$(l:items/slate)$(item)Slates/$ are similar to $(l:items/scroll)$(item)Scrolls/$; I can copy a pattern to them and place them in the world to display the pattern.$(br2)However, I have read vague tales of grand assemblies of $(l:items/slate)$(item)Slates/$, used to cast $(l:greatwork/spellcircles)$(thing)great rituals/$ more powerful than can be handled by a $(l:items/staff)$(item)Staff/$.", - "slate.2": "Perhaps this knowledge will be revealed to me with time. But for now, I suppose they make a quaint piece of decor.$(br2)At the least, they can be placed on any side of a block, unlike $(l:items/scroll)$(item)Scrolls/$.", - "slate.crafting.desc": "$(italic)This is the letter \"a.\" Learn it./$", - "slate.3": "I'm also aware of other types of $(l:items/slate)$(item)Slates/$, 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--$(br2)... I almost lost myself. Maybe I should postpone my studies of those.", - - - "hexcasting.1": "Although the flexibility of casting _Hexes \"on the go\" with my $(l:items/staff)$(item)Staff/$ 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 _Hexes with friends, too.", - "hexcasting.2": "To do this, I can craft one of three types of magic items: $(l:items/hexcasting)$(item)Cyphers/$, $(l:items/hexcasting)$(item)Trinkets/$, or $(l:items/hexcasting)$(item)Artifacts/$. All of them hold the patterns of a given _Hex inside, along with a small battery containing _media.$(br2)Simply holding one and pressing $(thing)$(k:use)/$ will cast the patterns inside, as if the holder had cast them out of a staff, using its internal battery.", - "hexcasting.3": "Each item has its own quirks:$(br2)$(l:items/hexcasting)$(item)Cyphers/$ are fragile, destroyed after their internal _media reserves are gone, and $(italic)cannot/$ be recharged;$(br2)$(l:items/hexcasting)$(item)Trinkets/$ can be cast as much as the holder likes, as long as there's enough _media left, but become useless afterwards until recharged;", - "hexcasting.4": "$(l:items/hexcasting)$(item)Artifacts/$ are the most powerful of all-- after their _media is depleted, they can use $(l:items/amethyst)$(item)Amethyst/$ from the holder's inventory to pay for the _Hex, just as I do when casting with a $(l:items/staff)$(item)Staff/$. Of course, this also means the spell might consume their mind if there's not enough $(l:items/amethyst)$(item)Amethyst/$.$(br2)Once I've made an empty magic item in a mundane crafting bench, I infuse the _Hex into it using (what else but) a spell appropriate to the item. $(l:patterns/spells/hexcasting)I've catalogued the patterns here./$", - "hexcasting.5": "Each infusion spell requires an entity and a list of patterns on the stack. The entity must be a _media-holding item entity (i.e. $(l:items/amethyst)$(item)amethyst/$ crystals, dropped on the ground); the entity is consumed and forms the battery.$(br2)Usefully, it seems that the _media in the battery is not consumed in chunks as it is when casting with a $(l:items/staff)$(item)Staff/$-- rather, the _media \"melts down\" into one continuous pool. Thus, if I store a _Hex that only costs one $(l:items/amethyst)$(item)Amethyst Dust/$'s worth of media, a $(l:items/amethyst)$(item)Charged Crystal/$ used as the battery will allow me to cast it 10 times.", - "hexcasting.crafting.desc": "$(italic)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./$", - - - "phials.1": "I find it quite ... irritating, how Nature refuses to give me change for my work. If all I have on hand is $(l:items/amethyst)$(item)Charged Amethyst/$, even the tiniest $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$ will consume the entire crystal, wasting the remaining _media.$(br2)Fortunately, it seems I've found a way to somewhat allay this problem.", - "phials.2": "I've found old scrolls describing a $(item)Glass Bottle/$ infused with _media. When casting _Hexes, my spells would then draw _media out of the phial. The liquid form of the _media would let me take exact change, so to speak; nothing would be wasted. It's quite like the internal battery of a $(l:items/hexcasting)$(item)Trinket/$, or similar; I can even $(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)Recharge/$ them in the same manner.", - "phials.3": "Unfortunately, the art of actually $(italic)making/$ the things seems to have been lost to time. I've found a $(l:patterns/great_spells/make_battery#hexcasting:craft/battery)$(thing)hint at the pattern used to craft it/$, 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 _media...$(br2)But I won't settle for it forever.", - "phials.desc": "$(italic)Drink the milk./$", - - - "pigments.1": "The old practitioners of my art sometimes identified themselves by a color, emblematic of them and their _Hexes. Although their names have faded, their colors remain. 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.\"", - "pigments.2": "I'm not certain on the specifics, but I believe I have isolated the formulae for many different colors and blends of pigments. To apply a pigment, I hold it in one hand and cast $(l:patterns/spells/colorize)$(action)Internalize Pigment/$ with the other; this consumes the pigment.$(br2)The pigments seem to affect the color of the sparks of _media emitted when I cast a _Hex and my $(l:patterns/spells/sentinels)$(thing)sentinel/$, but I don't doubt that the color will show up elsewhere.", - "pigments.colored.crafting.header": "Chromatic Pigments", - "pigments.colored.crafting.desc": "Pigments in all the colors of the rainbow.", - "pigments.special": "And finally, a pair of special pigments. $(item)Soulglimmer Pigment/$ shines with colors wholly unique to me, and $(item)Vacant Pigment/$ restores my original purplish-orange spread.$(br2)$(italic)And all the colors I am inside have not been invented yet./$", - - - "edified.1": "By infusing _media into a sapling via the use of $(l:patterns/spells/blockworks#hexcasting:edify)$(action)Edify Sapling/$, I can create what is called an $(l:items/edified)$(thing)Edified Tree/$. 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.", - "edified.2": "I would assume the wood would have some properties relevant to _Hexcasting. 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.$(br2)I suppose for now I will use it for decoration; the full suite of standard wood blocks can be crafted from them.$(br2)Of course, I can strip them with an axe as well.", - "edified.crafting.desc": "$(italic)Their smooth trunks, with white bark, gave the effect of enormous columns sustaining the weight of an immense foliage, full of shade and silence./$", - - - "jeweler_hammer.1": "After being careless with the sources of my _media one too many times, I have devised a tool to work around my clumsiness.$(br2)Using the delicate nature of crystallized _media as a fixture for a pickaxe, I can create the $(l:items/jeweler_hammer)$(item)Jeweler's Hammer/$. It acts like an $(item)Iron Pickaxe/$, for the most part, but can't break anything that takes up an entire block's space.", - "jeweler_hammer.crafting.desc": "$(italic)Carefully, she cracked the half ruby, letting the spren escape./$", - - - "decoration.1": "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.", - "decoration.ancient_scroll.crafting.desc": "Brown dye works well enough to simulate the look of an $(l:items/scroll)$(item)ancient scroll/$.", - "decoration.tiles.crafting.desc": "$(l:items/decoration)$(item)Amethyst Tiles/$ can also be made in a Stonecutter.$(br2)$(l:items/decoration)$(item)Blocks of Amethyst Dust/$ (next page) will fall like sand.", - "decoration.sconce.crafting.desc": "$(l:items/decoration)$(item)Amethyst Sconces/$ emit light and particles, as well as a pleasing chiming sound.", - - - "_comment": "The Work", - - - "the_work.1": "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.", - "the_work.2": "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 $(italic)ache/$. I'm possessed by an intense $(italic)need/$ 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)All shall see.$(p)All will see.", - - - "brainsweeping.1": "A secret was revealed to me. I saw it. I cannot forget its horror. The idea skitters across my brain.$(br2)I believed-- oh, foolishly, I $(italic)believed/$ --that _Media is the spare energy left over by thought. But now I $(italic)know/$ what it is: the energy $(italic)of/$ thought.", - "brainsweeping.2": "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$(br2)I am not holding on. My notes. Quickly.", - "brainsweeping.3": "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.$(br2)This is what $(l:patterns/great_spells/brainsweep)$(action)Flay Mind/$ does, the extraction. Target the villager entity and the destination block. Ten $(l:items/amethyst)$(item)Charged Amethyst/$ for this perversion of will.", - "brainsweeping.budding_amethyst": "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 _media.", - - - "spellcircles.1": "I KNOW what the $(l:items/slate)$(item)slates/$ 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.", - "spellcircles.2": "To start the ritual I need an $(l:greatwork/impetus)$(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(l:items/slate)$(item)slates/$ or other blocks suitable for the energies, one by one, collecting any patterns it finds. Once the wave circles back around to the $(l:greatwork/impetus)$(item)Impetus/$, all the patterns encountered are cast in order.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.", - "spellcircles.3": "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.", - "spellcircles.4": "Miracle of miracles, the circle will withdraw _media neither from my inventory nor my mind. Instead, crystallized shards of _media must be provided to the $(l:greatwork/impetus)$(item)Impetus/$ via hopper, or other such artifice.$(br2)The application of a $(l:items/lens)$(item)Scrying Lens/$ will show how much _media is inside an $(l:greatwork/impetus)$(item)Impetus/$, in units of dust.", - "spellcircles.5": "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).", - "spellcircles.6": "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.$(br2)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 $(l:patterns/circle)here/$.", - "spellcircles.7": "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.$(br2)The patterns there would have been executed counter-clockwise, starting with $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$ and ending with $(l:patterns/great_spells/teleport#hexcasting:teleport)$(action)Greater Teleport/$.", - "spellcircles.teleport_circle.title": "Teleportation Circle", - - - "impetus.1": "The fluctuation of _media required to actuate a spell circle is complex. Even the mortal with sharpest eyes and steadiest hands could not serve as an $(l:greatwork/impetus)$(item)Impetus/$ and weave _media into the self-sustaining oroboros required.$(br2)The problem is that the mind is too full of other useless $(italics)garbage/$.", - "impetus.2": "At a ... metaphysical level-- I must be careful with these thoughts, I cannot lose myself, I have become too valuable --moving _media moves the mind, and the mind must be moved for the process to work. But, the mind is simply too $(italic)heavy/$ with other thoughts to move nimbly enough.$(br2)It is like an artisan trying to repair a watch while wearing mittens.", - "impetus.3": "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.$(br2)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.", - "impetus.4": "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 _media-manipulating apparati, cauterize all inputs but the signal to start its work.$(br2)The process of $(l:greatwork/brainsweeping)$(action)mindflaying/$ 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.", - "impetus.empty_impetus": "First, the cradle. Although it does not work as an $(l:greatwork/impetus)$(item)Impetus/$, the flow of _media 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.", - "impetus.impetus_rightclick": "Then, to transpose the mind. Villagers of different professions will lend different actuation conditions to the resulting $(l:greatwork/impetus)$(item)Impetus/$. A $(l:greatwork/impetus)$(item)Toolsmith Impetus/$ activates on a simple $(k:use).", - "impetus.impetus_storedplayer.1": "A $(l:greatwork/impetus)$(item)Cleric Impetus/$ must be bound to a player by using an item with a reference to that player, like a $(l:items/focus)$(item)Focus/$, on the block. Then, it activates when receiving a redstone signal.", - "impetus.impetus_storedplayer.2": "Peculiarly to this $(l:greatwork/impetus)$(item)Impetus/$, 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.$(br2)The bound player is shown when looking at a $(l:greatwork/impetus)$(item)Cleric Impetus/$ through a $(l:items/lens)$(item)Scrying Lens/$.", - "impetus.impetus_look": "A $(l:greatwork/impetus)$(item)Fletcher Impetus/$ activates when looked at for a short time.", - - - "directrix.1": "Simpler than the task of creating a self-sustaining wave of _media 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.$(br2)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.", - "directrix.2": "A $(l:greatwork/directrix)$(item)Directrix/$ accepts a wave of _media and determines to which of the arrows it will exit from, depending on the villager mind inside.$(br2)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", - "directrix.empty_directrix": "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 _media wave and surroundings, making it effectively random.", - "directrix.directrix_redstone": "A $(l:greatwork/directrix)$(item)Mason Directrix/$ switches output side based on a redstone signal. Without a signal, the exit is the _media-color side; with a signal, the exit is the redstone-color side.", - - - "akashiclib.1": "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 $(italic)slow/$ to write by hand and read by eye. I demand BETTER. And so I shall MAKE better.$(br2)... I am getting worse ... do not know if I have time to write everything bursting through my head before expiring.", - "akashiclib.2": "The library. Here. My plans.$(br2)Like how patterns are associated with actions, I can associate my own patterns with iotas in any way I choose. An $(l:greatwork/akashiclib)$(item)Akashic Record/$ controls the library, and each $(l:greatwork/akashiclib)$(item)Akashic Bookshelf/$ stores one pattern mapped to one iota. These must all be directly connected together, touching, within 32 blocks. An $(l:greatwork/akashiclib)$(item)Akashic Ligature/$ doesn't do anything but count as a connecting block, to extend the size of my library.", - "akashiclib.akashic_record": "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.", - "akashiclib.3": "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. $(l:patterns/akashic_patterns)Notes here/$.$(br2)Using an empty $(l:items/scroll)$(item)scroll/$ on a bookshelf copies the pattern there onto the $(l:items/scroll)$(item)scroll/$. Sneaking and using an empty hand clears the datum in the shelf.", - - - "quenching_allays.1": "THEY ARE BITS OF MEDIA. How did I not see it sooner? They are -- as I am a heap of flesh with a scrap, blessed with a scrap of thought, an Allay is a self-sustaining quarrel of media pinned to a scrap of flesh. It explains everything -- their propensity for media, their response to music, I SEE NOW, HOW did the ones before NOT?", - "quenching_allays.2": "And given this it is only RIGHT I conquer their peculiar minds -- their peculiar selves -- that is all they are, a mind, a self, a coda. Something about their phase speaks to me. I can... I can compress _media with them, overlay two wends of thought in one space, physical and cognitive, all and once.$(br2)Somehow, the process produces _media of its own. How? Perhaps -- perhaps MY work, the process of doing it --", - "quenching_allays.3": "It matters not. I matter not. They matter not, all that matters is what it does. And this is it.$(br2)It must hurt so very much.", - "quenching_allays.4": "The product is fragile. Breaking it shatters it into pieces, with $(thing)Fortune/$ increasing the yield... if I wish the block itself I need a silken touch.$(br2)The produced shards are worth thrice an $(l:items/amethyst)$(item)Charged Amethyst Crystal/$ apiece. The block itself is worth four of the shards.", - "quenching_allays.5": "They are mercurial, they seem to twist and wink under my fingers, and by giving them a mentor in another form of _media they may be coerced into its shape, in an equivalent exchange of _media.", - + "101": { + "1": "Casting a _Hex is quite difficult-- no wonder this art was lost to time! I'll have to re-read my notes carefully.$(br2)I can start a _Hex by pressing $(k:use) with a $(l:items/staff)$(item)Staff/$ 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 _media of the grid; finishing a pattern will run its corresponding action (more on that later).", + "2": "Once I've drawn enough patterns to cast a spell, the grid will disappear as the _media I've stored up is released. Holding $(k:sneak) while using my $(l:items/staff)$(item)staff/$ will also clear the grid.$(br2)So how do patterns work? In short:$(li)$(italic)Patterns/$ will execute...$(li)$(italic)Actions/$, which manipulate...$(li)$(l:casting/stack)$(italic)The Stack/$, which is a list of...$(li)$(italic)Iotas/$, which are simply units of information.", + "3": "First, $(thing)patterns/$. These are essential-- they're what I use to manipulate the _media around me. Certain patterns, when drawn, will cause $(thing)actions/$ to happen. Actions are what actually $(italic)do/$ the magic; all patterns influence _media in particular ways, and when those influences end up doing something useful, we call it an action.$(br2)_Media can be fickle: if I draw an invalid pattern, I'll get some $(l:casting/influences)$(action)garbage/$ result somewhere on my stack (read on...)", + "4.header": "An Example", + "4": "It's interesting to note that the $(italic)rotation/$ of a pattern doesn't seem to matter at all. These two patterns both perform an action called $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$, for example.", + "5": "A _Hex is cast by drawing (valid) actions in sequence. Each action might do one of a few things:$(li)Gather some information about the environment, leaving it on the top of the stack;$(li)manipulate the info gathered (e.g. adding two numbers); or$(li)perform some magical effect, like summoning lightning or an explosion. (These actions are called \"spells.\")$(p)When I start casting a _Hex, it creates an empty stack. Actions manipulate the top of that stack.", + "6": "For example, $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$ will create an iota representing $(italic)me/$, the caster, and add it to the top of the stack. $(l:patterns/basics#hexcasting:entity_pos/eye)$(action)Compass Purification/$ 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.$(br2)So, drawing those patterns in that order would result in an iota on the stack representing my position.", + "7": "$(thing)Iotas/$ can represent things like myself or my position, but there are several other types I can manipulate with $(thing)Actions/$. Here's a comprehensive list:$(li)Numbers (which some legends called \"doubles\");$(li)Vectors, a collection of three numbers representing a position, movement, or direction in the world;$(li)Booleans or \"bools\" for short, representing an abstract True or False,", + "8": "$(li)Entities, like myself, chickens, and minecarts;$(li)Influences, peculiar types of iota that seem to represent abstract ideas;$(li)Patterns themselves, used for crafting magic items and truly mind-boggling feats like $(italic)spells that cast other spells/$; and$(li)A list of several of the above, gathered into a single iota.", + "9": "Of course, there's no such thing as a free lunch. All spells, and certain other actions, require _media as payment.$(br2)The best I can figure, a _Hex is a little bit like a plan of action presented to Nature-- in this analogy, the _media is used to provide the arguments to back it up, so Nature will accept your plan and carry it out.", + "10": "That aside, it doesn't seem like anyone has done much research on exactly how $(italic)much/$ any particular piece of $(l:items/amethyst)$(item)amethyst/$ is valued. The best I can tell, an $(l:items/amethyst)$(item)Amethyst Shard/$ is worth about five pieces of $(l:items/amethyst)$(item)Amethyst Dust/$, and a $(l:items/amethyst)$(item)Charged Amethyst Crystal/$ is worth about ten.$(br2)Strangely enough, it seems like no other form of $(l:items/amethyst)$(item)amethyst/$ is suitable to be used in the casting of a _Hex. I suspect that whole blocks or crystals are too solid to be easily unraveled into _media.", + "11": "It's also worth noting that each action will consume the _media 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 $(l:items/amethyst)$(item)Amethyst Dust/$'s worth of _media will consume an entire $(l:items/amethyst)$(item)Charged Amethyst Crystal/$, if that's all that's present in my inventory.$(br2)Thus, it might be a good idea to bring dust for spellcasting too-- waste not, want not...", + "12": "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 $(italic)healthy/$.", + "13": "Maybe something's changed, though. In my experiments, I've never managed to do it; if I run out of _media, the spell will simply fail to cast, as if some barrier is blocking it from harming me. $(br2)It would be interesting to get to the bottom of that mystery, but for now I suppose it'll keep me safe.", + "14": "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.$(br2)$(italic)Content Warning: some body horror and suggestive elements./$", + "14.link_text": "Goblin Punch", + "15": "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.$(br2)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 _Hexcasters could use them to great effect and utility, I shudder to think of what someone malicious might do with this.", + }, + + vectors: { + "1": "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.$(br2)First off, an enlightening video on the topic.", + "1.link_text": "3blue1brown", + "2": "Additionally, it seems that the mages who manipulated $(thing)Psi energy/$ (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.$(br2)They seem to have used different language for their spellcasting:$(li)A \"Spell Piece\" was their name for an action;$(li)a \"Trick\" was their name for a spell; and$(li)an \"Operator\" was their name for a non-spell action.", + "3": "Link here.", + "3.link_text": "Psi Codex", + }, + + mishaps: { + "1": "Unfortunately, I am not (yet) a perfect being. I make mistakes from time to time in my study and casting of _Hexes; 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 $(italic)mishap/$.", + "2": "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 _media curdles into light of a given color.", + "3": "Fortunately, although the bad effects of mishaps are certainly $(italic)annoying/$, 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.$(br2)Following is a list of mishaps I have compiled.", + + "invalid_pattern.title": "Invalid Pattern", + invalid_pattern: "The pattern drawn is not associated with any action.$(br2)Causes yellow sparks, and a $(l:casting/influences)$(action)Garbage/$ will be pushed to the top of my stack.", + + "not_enough_iotas.title": "Not Enough Iotas", + not_enough_iotas: "The action required more iotas than were on the stack.$(br2)Causes light gray sparks, and as many $(l:casting/influences)$(action)Garbages/$ as would be required to fill up the argument count will be pushed.", + + "incorrect_iota.title": "Incorrect Iota", + incorrect_iota: "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.$(br2)Causes dark gray sparks, and the invalid iota will be replaced with $(l:casting/influences)$(action)Garbage/$.", + + "vector_out_of_range.title": "Vector Out of Ambit", + vector_out_of_range: "The action tried to affect the world at a point that was out of my range.$(br2)Causes magenta sparks, and the items in my hands will be yanked out and flung towards the offending location.", + + "entity_out_of_range.title": "Entity Out of Ambit", + entity_out_of_range: "The action tried to affect an entity that was out of my range.$(br2)Causes pink sparks, and the items in my hands will be yanked out and flung towards the offending entity.", + + "entity_immune.title": "Entity is Immune", + entity_immune: "The action tried to affect an entity that cannot be altered by it.$(br2)Causes blue sparks, and the items in my hands will be yanked out and flung towards the offending entity.", + + "math_error.title": "Mathematical Error", + math_error: "The action did something offensive to the laws of mathematics, such as dividing by zero.$(br2)Causes red sparks, pushes a $(l:casting/influences)$(action)Garbage/$ 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 $(italic)me/$ in retaliation.", + + "incorrect_item.title": "Incorrect Item", + incorrect_item: "The action requires some sort of item, but the item I supplied was not suitable.$(br2)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.", + + "incorrect_block.title": "Incorrect Block", + incorrect_block: "The action requires some sort of block at a target location, but the block supplied was not suitable.$(br2)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.", + + "retrospection.title": "Hasty Retrospection", + retrospection: "I attempted to draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ without first drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$.$(br2)Causes orange sparks, and pushes the pattern for $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ to the stack as a pattern iota.", + + "too_deep.title": "Delve Too Deep", + too_deep: "Evaluated too many spells with meta-evaluation from one spell.$(br2)Causes dark blue sparks, and chokes all the air out of me.", + + "true_name.title": "Transgress Other", + true_name: "I attempted to $(l:patterns/readwrite#hexcasting:write)$(action)save a reference/$ to another player to a permanent medium.$(br2)Causes black sparks, and robs me of my sight for approximately one minute.", + + "disabled.title": "Disallowed Action", + disabled: "I tried to cast an action that has been disallowed by a server administrator.$(br2)Causes black sparks.", + + "other.title": "Catastrophic Failure", + other: "A bug in the mod caused an iota of an invalid type or otherwise caused the spell to crash. $(l:https://github.com/gamma-delta/HexMod/issues)Please open a bug report!/$$(br2)Causes black sparks.", + }, + + stack: { + "1": "A $(thing)Stack/$, 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.$(br2)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.", + "2": "Because a stack is so simple, there's only so many things you can do with it:$(li)$(italic)Adding something to it/$, known formally as pushing,$(li)$(italic)Removing the last added element/$, known as popping, or$(li)$(italic)Examining or modifying the last added element/$, known as peeking.$(br)We call the last-added element the \"top\" of the stack, in accordance with the dinner plate analogy.$(p)As an example, if we push 1 to a stack, then push 2, then pop, the top of the stack is now 1.", + "3": "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.$(br2)Of course, some actions (e.g. $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$) might pop no arguments, and some actions (particularly spells) might push nothing afterwards.", + "4": "Even more complicated actions can be expressed in terms of pushing, popping, and peeking. For example, $(l:patterns/stackmanip#hexcasting:swap)$(action)Jester's Gambit/$ 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, $(l:patterns/stackmanip#hexcasting:duplicate)$(action)Gemini Decomposition/$ duplicates the top of the stack-- in other words, it peeks the stack and pushes a copy of what it finds.", + }, + + naming: { + "1": "The names given to actions by the ancients were certainly peculiar, but I think there's a certain kind of logic to them.$(br2)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.", + "2": "$(li)A $(thing)Reflection/$ pops nothing and pushes one iota.$(li)A $(thing)Purification/$ pops one and pushes one.$(li)A $(thing)Distillation/$ pops two and pushes one.$(li)An $(thing)Exaltation/$ pops three or more and pushes one.$(li)A $(thing)Decomposition/$ pops one argument and pushes two.$(li)A $(thing)Disintegration/$ pops one and pushes three or more.$(li)Finally, a $(thing)Gambit/$ pushes or pops some other number (or rearranges the stack in some other manner).", + "3": "Spells seem to be exempt from this nomenclature and are more or less named after what they do-- after all, why call it a $(action)Demoman's Gambit/$ when you could just say $(l:patterns/spells/basic#hexcasting:explode)$(action)Explosion/$?", + }, + + influences: { + "1": "Influences are ... strange, to say the least. Whereas most iotas seem to represent something about the world, influences represent something more... abstract, or formless.$(br2)For example, one influence I've named $(l:casting/influences)$(thing)Null/$ seems to represent nothing at all. It's created when there isn't a suitable answer to a question asked, such as an $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$ facing the sky.", + "2": "In addition, I've discovered a curious quartet of influences I've named $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, and $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Evanition/$. 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. $(l:patterns/patterns_as_iotas)My notes on the subject are here/$.", + "3": "Finally, there seems to be an infinite family of influences that just seem to be a tangled mess of _media. I've named them $(l:casting/influences)$(action)Garbage/$, as they are completely useless. They seem to appear in my stack at various places in response to $(l:casting/mishaps)$(thing)mishaps/$, and appear to my senses as a nonsense jumble.", + }, + + mishaps2: { + "1": "I have discovered new and horrifying modes of failure. I must not succumb to them.", + + "bad_mindflay.title": "Inert Mindflay", + bad_mindflay: "Attempted to flay the mind of something that I have either already used, or of a character not suitable for the target block.$(br2)Causes dark green sparks, and kills the subject. If a villager sees that, I doubt they would look on it favorably.", + + "no_circle.title": "Lack Spell Circle", + no_circle: "Tried to cast an action requiring a spell circle without a spell circle.$(br2)Causes light blue sparks, and upends my inventory onto the ground.", + + "no_record.title": "Lack Akashic Record", + no_record: "Tried to access an $(l:greatwork/akashiclib)$(item)Akashic Record/$ at a location where there isn't one.$(br2)Causes purple sparks, and steals away some of my experience.", + }, + + + // Items + + amethyst: { + dust: "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 _media.", + shard: "The second is a whole shard of amethyst, of the type non-_Hexcasters might be used to. This has about as much _media inside as five $(l:items/amethyst)$(item)Amethyst Dust/$.", + crystal: "Finally, I'll rarely find a large crystal crackling with energy. This has about as much _media inside as ten units of $(l:items/amethyst)$(item)Amethyst Dust/$ (or two $(l:items/amethyst)$(item)Amethyst Shards/$).", + lore: "$(italic)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./$", + }, + + staff: { + "1": "A $(l:items/staff)$(item)Staff/$ is my entry point into casting all _Hexes, large and small. By holding it and pressing $(thing)$(k:use)/$, I begin casting a _Hex; then I can click and drag to draw patterns.$(br2)It's little more than a chunk of _media on the end of a stick; that's all that's needed, after all.", + "crafting.header": "Staves", + "crafting.desc": "$(italic)Don't fight; flame, light; ignite; burn bright./$", + }, + + lens: { + "1": "_Media 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.$(br2)By holding a $(l:items/lens)$(item)Scrying Lens/$ in my hand, certain blocks will display additional information when I look at them.", + "2": "For example, looking at a piece of $(item)Redstone/$ will display its signal strength. I suspect I will discover other blocks with additional insight as my studies into my art progress.$(br2)In addition, holding it while casting using a $(l:items/staff)$(item)Staff/$ will shrink the spacing between dots, allowing me to draw more on my grid.$(br2)I can also wear it on my head as a strange sort of monocle.", + "crafting.desc": "$(italic)You must learn... to see what you are looking at./$", + }, + + thought_knot: { + "1": "The forgetful often tie a piece of string about their finger to help them remember something important. I believe this idea might be of use in my art. A specially knotted piece of string should be able to hold a single iota stably, irregardless of my stack.$(br2)I will call my invention a $(item)Thought-Knot/$.", + "2": "When I craft it, it stores no iota. Using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ while holding a $(item)Thought-Knot/$ in my other hand will remove the top of the stack and save it into the $(item)Thought-Knot/$. Using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$ will copy whatever iota's in the $(item)Thought-Knot/$ and add it to the stack.$(br2)Once a $(item)Thought-Knot/$ has been written to, the string is indelibly tangled; the iota can be read any number of times, but there is no way to erase or overwrite it. Fortunately, they are not expensive.", + "3": "Also, if I store an entity in a $(item)Thought-Knot/$ and try to recall it after the referenced entity has died or otherwise disappeared, the $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$ will add $(l:casting/influences)$(thing)Null/$ to the stack instead.", + "crafting.desc": "$(italic)How would you feel if someone saw you wearing a sign that said, \"I am dashing and handsome?\"/$", + }, + + focus: { + "1": "A $(item)Focus/$ is like a $(l:items/thought_knot)$(item)Thought-Knot/$, in that iota can be written to or read from it. However, the advantage of a focus is that it is $(italic)reusable/$. If I make a mistake in the iota I write to a $(item)Focus/$, I can simply cast $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ again and write over the iota inside.", + "2": "If I wish to protect a $(l:items/focus)$(item)focus/$ from accidentally being overwritten, I can seal it with wax by crafting it with a $(item)Honeycomb/$. Attempting to use $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ on a sealed focus will fail.$(br2)$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove this seal along with the contents.", + "3": "Indeed, the only advantage of my $(l:items/thought_knot)$(item)Thought-Knot/$s have over $(item)Foci/$ is that $(item)Foci/$ are more expensive to produce. My research indicates that the early practitioners of the art used exclusively $(item)Foci/$, with the $(l:items/thought_knot)$(item)Thought-Knot/$ being an original creation of mine.$(br2)Whoever those ancient people were, they must have been very prosperous.", + "crafting.desc": "$(italic)Poison apples, poison worms./$", + }, + + abacus: { + "1": "Although there are $(l:patterns/numbers)$(action)patterns for drawing numbers/$, I find them ... cumbersome, to say the least.$(br2)Fortunately, the old masters of my craft invented an ingenious device called an $(l:items/abacus)$(item)Abacus/$ to provide numbers to my casting. I simply set the number to what I want, then read the value using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, just like I would read a $(l:items/thought_knot)$(item)Thought-Knot/$ or $(l:items/focus)$(item)Focus/$.", + "2": "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.$(br2)I can shake the abacus to reset it to zero by sneak-right-clicking.", + "crafting.desc": "$(italic)Mathematics? That's for eggheads!/$", + }, + + spellbook: { + "1": "A $(l:items/spellbook)$(item)Spellbook/$ is the culmination of my art-- it acts like an entire library of $(l:items/focus)$(item)Foci/$. Up to $(thing)sixty-four/$ of them, to be exact.$(br2)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 _Hex.", + "2": "Like a $(l:items/focus)$(item)Focus/$, there exists a simple method to prevent accidental overwriting. Crafting it with a $(item)Honeycomb/$ will lacquer the current page, preventing $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ from modifying its contents. Also like a $(l:items/focus)$(item)Focus/$, using $(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove the lacquer along with the page's contents.$(br2)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.", + "crafting.desc": "$(italic)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.", + }, + + scroll: { + "1": "A $(l:items/scroll)$(item)Scroll/$ is a convenient method of sharing a pattern with others. I can copy a pattern onto one with $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, after which it will display in a tooltip.$(br2)I can also place them on the wall as decoration or edification, like a painting, in sizes from 1x1 to 3x3 blocks. Using $(l:items/amethyst)$(item)Amethyst Dust/$ on such a scroll will have it display the stroke order.", + "2": "In addition, I can also find so-called $(l:items/scroll)$(item)Ancient Scrolls/$ in the dungeons and strongholds of the world. These contain the stroke order of $(thing)Great Spells/$, powerful magicks rumored to be too powerful for the hands and minds of mortals...$(br2)If those \"mortals\" couldn't cast them, I'm not sure they deserve to know them.", + "crafting.desc": "$(italic)I write upon clean white parchment with a sharp quill and the blood of my students, divining their secrets./$", + }, + + slate: { + "1": "$(l:items/slate)$(item)Slates/$ are similar to $(l:items/scroll)$(item)Scrolls/$; I can copy a pattern to them and place them in the world to display the pattern.$(br2)However, I have read vague tales of grand assemblies of $(l:items/slate)$(item)Slates/$, used to cast $(l:greatwork/spellcircles)$(thing)great rituals/$ more powerful than can be handled by a $(l:items/staff)$(item)Staff/$.", + "2": "Perhaps this knowledge will be revealed to me with time. But for now, I suppose they make a quaint piece of decor.$(br2)At the least, they can be placed on any side of a block, unlike $(l:items/scroll)$(item)Scrolls/$.", + "crafting.desc": "$(italic)This is the letter \"a.\" Learn it./$", + "3": "I'm also aware of other types of $(l:items/slate)$(item)Slates/$, 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--$(br2)... I almost lost myself. Maybe I should postpone my studies of those.", + }, + + // roll credits + hexcasting: { + "1": "Although the flexibility of casting _Hexes \"on the go\" with my $(l:items/staff)$(item)Staff/$ 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 _Hexes with friends, too.", + "2": "To do this, I can craft one of three types of magic items: $(l:items/hexcasting)$(item)Cyphers/$, $(l:items/hexcasting)$(item)Trinkets/$, or $(l:items/hexcasting)$(item)Artifacts/$. All of them hold the patterns of a given _Hex inside, along with a small battery containing _media.$(br2)Simply holding one and pressing $(thing)$(k:use)/$ will cast the patterns inside, as if the holder had cast them out of a staff, using its internal battery.", + "3": "Each item has its own quirks:$(br2)$(l:items/hexcasting)$(item)Cyphers/$ are fragile, destroyed after their internal _media reserves are gone, and $(italic)cannot/$ be recharged;$(br2)$(l:items/hexcasting)$(item)Trinkets/$ can be cast as much as the holder likes, as long as there's enough _media left, but become useless afterwards until recharged;", + "4": "$(l:items/hexcasting)$(item)Artifacts/$ are the most powerful of all-- after their _media is depleted, they can use $(l:items/amethyst)$(item)Amethyst/$ from the holder's inventory to pay for the _Hex, just as I do when casting with a $(l:items/staff)$(item)Staff/$. Of course, this also means the spell might consume their mind if there's not enough $(l:items/amethyst)$(item)Amethyst/$.$(br2)Once I've made an empty magic item in a mundane crafting bench, I infuse the _Hex into it using (what else but) a spell appropriate to the item. $(l:patterns/spells/hexcasting)I've catalogued the patterns here./$", + "5": "Each infusion spell requires an entity and a list of patterns on the stack. The entity must be a _media-holding item entity (i.e. $(l:items/amethyst)$(item)amethyst/$ crystals, dropped on the ground); the entity is consumed and forms the battery.$(br2)Usefully, it seems that the _media in the battery is not consumed in chunks as it is when casting with a $(l:items/staff)$(item)Staff/$-- rather, the _media \"melts down\" into one continuous pool. Thus, if I store a _Hex that only costs one $(l:items/amethyst)$(item)Amethyst Dust/$'s worth of media, a $(l:items/amethyst)$(item)Charged Crystal/$ used as the battery will allow me to cast it 10 times.", + "crafting.desc": "$(italic)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./$", + }, + + phials: { + "1": "I find it quite ... irritating, how Nature refuses to give me change for my work. If all I have on hand is $(l:items/amethyst)$(item)Charged Amethyst/$, even the tiniest $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$ will consume the entire crystal, wasting the remaining _media.$(br2)Fortunately, it seems I've found a way to somewhat allay this problem.", + "2": "I've found old scrolls describing a $(item)Glass Bottle/$ infused with _media. When casting _Hexes, my spells would then draw _media out of the phial. The liquid form of the _media would let me take exact change, so to speak; nothing would be wasted. It's quite like the internal battery of a $(l:items/hexcasting)$(item)Trinket/$, or similar; I can even $(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)Recharge/$ them in the same manner.", + "3": "Unfortunately, the art of actually $(italic)making/$ the things seems to have been lost to time. I've found a $(l:patterns/great_spells/make_battery#hexcasting:craft/battery)$(thing)hint at the pattern used to craft it/$, 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 _media...$(br2)But I won't settle for it forever.", + desc: "$(italic)Drink the milk./$", + }, + + pigments: { + "1": "The old practitioners of my art sometimes identified themselves by a color, emblematic of them and their _Hexes. Although their names have faded, their colors remain. 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.\"", + "2": "I'm not certain on the specifics, but I believe I have isolated the formulae for many different colors and blends of pigments. To apply a pigment, I hold it in one hand and cast $(l:patterns/spells/colorize)$(action)Internalize Pigment/$ with the other; this consumes the pigment.$(br2)The pigments seem to affect the color of the sparks of _media emitted when I cast a _Hex and my $(l:patterns/spells/sentinels)$(thing)sentinel/$, but I don't doubt that the color will show up elsewhere.", + + "colored.crafting.header": "Chromatic Pigments", + "colored.crafting.desc": "Pigments in all the colors of the rainbow.", + + special: "And finally, a pair of special pigments. $(item)Soulglimmer Pigment/$ shines with colors wholly unique to me, and $(item)Vacant Pigment/$ restores my original purplish-orange spread.$(br2)$(italic)And all the colors I am inside have not been invented yet./$", + }, + + edified: { + "1": "By infusing _media into a sapling via the use of $(l:patterns/spells/blockworks#hexcasting:edify)$(action)Edify Sapling/$, I can create what is called an $(l:items/edified)$(thing)Edified Tree/$. 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.", + "2": "I would assume the wood would have some properties relevant to _Hexcasting. 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.$(br2)I suppose for now I will use it for decoration; the full suite of standard wood blocks can be crafted from them.$(br2)Of course, I can strip them with an axe as well.", + "crafting.desc": "$(italic)Their smooth trunks, with white bark, gave the effect of enormous columns sustaining the weight of an immense foliage, full of shade and silence./$", + }, + + jeweler_hammer: { + "1": "After being careless with the sources of my _media one too many times, I have devised a tool to work around my clumsiness.$(br2)Using the delicate nature of crystallized _media as a fixture for a pickaxe, I can create the $(l:items/jeweler_hammer)$(item)Jeweler's Hammer/$. It acts like an $(item)Iron Pickaxe/$, for the most part, but can't break anything that takes up an entire block's space.", + "crafting.desc": "$(italic)Carefully, she cracked the half ruby, letting the spren escape./$", + }, + + decoration: { + "1": "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.", + "ancient_scroll.crafting.desc": "Brown dye works well enough to simulate the look of an $(l:items/scroll)$(item)ancient scroll/$.", + "tiles.crafting.desc": "$(l:items/decoration)$(item)Amethyst Tiles/$ can also be made in a Stonecutter.$(br2)$(l:items/decoration)$(item)Blocks of Amethyst Dust/$ (next page) will fall like sand.", + "sconce.crafting.desc": "$(l:items/decoration)$(item)Amethyst Sconces/$ emit light and particles, as well as a pleasing chiming sound.", + }, + + + // The Work + the_work: { + "1": "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.", + "2": "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 $(italic)ache/$. I'm possessed by an intense $(italic)need/$ 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)All shall see.$(p)All will see.", + }, + + brainsweeping: { + "1": "A secret was revealed to me. I saw it. I cannot forget its horror. The idea skitters across my brain.$(br2)I believed-- oh, foolishly, I $(italic)believed/$ --that _Media is the spare energy left over by thought. But now I $(italic)know/$ what it is: the energy $(italic)of/$ thought.", + "2": "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$(br2)I am not holding on. My notes. Quickly.", + "3": "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.$(br2)This is what $(l:patterns/great_spells/brainsweep)$(action)Flay Mind/$ does, the extraction. Target the villager entity and the destination block. Ten $(l:items/amethyst)$(item)Charged Amethyst/$ for this perversion of will.", + budding_amethyst: "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 _media.", + }, + + spellcircles: { + "1": "I KNOW what the $(l:items/slate)$(item)slates/$ 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.", + "2": "To start the ritual I need an $(l:greatwork/impetus)$(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(l:items/slate)$(item)slates/$ or other blocks suitable for the energies, one by one, collecting any patterns it finds. Once the wave circles back around to the $(l:greatwork/impetus)$(item)Impetus/$, all the patterns encountered are cast in order.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.", + "3": "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.", + "4": "Miracle of miracles, the circle will withdraw _media neither from my inventory nor my mind. Instead, crystallized shards of _media must be provided to the $(l:greatwork/impetus)$(item)Impetus/$ via hopper, or other such artifice.$(br2)The application of a $(l:items/lens)$(item)Scrying Lens/$ will show how much _media is inside an $(l:greatwork/impetus)$(item)Impetus/$, in units of dust.", + "5": "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).", + "6": "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.$(br2)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 $(l:patterns/circle)here/$.", + "7": "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.$(br2)The patterns there would have been executed counter-clockwise, starting with $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$ and ending with $(l:patterns/great_spells/teleport#hexcasting:teleport/great)$(action)Greater Teleport/$.", + "teleport_circle.title": "Teleportation Circle", + }, + + impetus: { + "1": "The fluctuation of _media required to actuate a spell circle is complex. Even the mortal with sharpest eyes and steadiest hands could not serve as an $(l:greatwork/impetus)$(item)Impetus/$ and weave _media into the self-sustaining oroboros required.$(br2)The problem is that the mind is too full of other useless $(italics)garbage/$.", + "2": "At a ... metaphysical level-- I must be careful with these thoughts, I cannot lose myself, I have become too valuable --moving _media moves the mind, and the mind must be moved for the process to work. But, the mind is simply too $(italic)heavy/$ with other thoughts to move nimbly enough.$(br2)It is like an artisan trying to repair a watch while wearing mittens.", + "3": "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.$(br2)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.", + "4": "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 _media-manipulating apparati, cauterize all inputs but the signal to start its work.$(br2)The process of $(l:greatwork/brainsweeping)$(action)mindflaying/$ 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.", + + empty_impetus: "First, the cradle. Although it does not work as an $(l:greatwork/impetus)$(item)Impetus/$, the flow of _media 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.", + impetus_rightclick: "Then, to transpose the mind. Villagers of different professions will lend different actuation conditions to the resulting $(l:greatwork/impetus)$(item)Impetus/$. A $(l:greatwork/impetus)$(item)Toolsmith Impetus/$ activates on a simple $(k:use).", + impetus_storedplayer: { + "1": "A $(l:greatwork/impetus)$(item)Cleric Impetus/$ must be bound to a player by using an item with a reference to that player, like a $(l:items/focus)$(item)Focus/$, on the block. Then, it activates when receiving a redstone signal.", + "2": "Peculiarly to this $(l:greatwork/impetus)$(item)Impetus/$, 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.$(br2)The bound player is shown when looking at a $(l:greatwork/impetus)$(item)Cleric Impetus/$ through a $(l:items/lens)$(item)Scrying Lens/$.", + }, + impetus_look: "A $(l:greatwork/impetus)$(item)Fletcher Impetus/$ activates when looked at for a short time.", + }, + + directrix: { + "1": "Simpler than the task of creating a self-sustaining wave of _media 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.$(br2)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.", + "2": "A $(l:greatwork/directrix)$(item)Directrix/$ accepts a wave of _media and determines to which of the arrows it will exit from, depending on the villager mind inside.$(br2)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", + + empty_directrix: "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 _media wave and surroundings, making it effectively random.", + directrix_redstone: "A $(l:greatwork/directrix)$(item)Mason Directrix/$ switches output side based on a redstone signal. Without a signal, the exit is the _media-color side; with a signal, the exit is the redstone-color side.", + }, + + akashiclib: { + "1": "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 $(italic)slow/$ to write by hand and read by eye. I demand BETTER. And so I shall MAKE better.$(br2)... I am getting worse ... do not know if I have time to write everything bursting through my head before expiring.", + "2": "The library. Here. My plans.$(br2)Like how patterns are associated with actions, I can associate my own patterns with iotas in any way I choose. An $(l:greatwork/akashiclib)$(item)Akashic Record/$ controls the library, and each $(l:greatwork/akashiclib)$(item)Akashic Bookshelf/$ stores one pattern mapped to one iota. These must all be directly connected together, touching, within 32 blocks. An $(l:greatwork/akashiclib)$(item)Akashic Ligature/$ doesn't do anything but count as a connecting block, to extend the size of my library.", + akashic_record: "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.", + "3": "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. $(l:patterns/akashic_patterns)Notes here/$.$(br2)Using an empty $(l:items/scroll)$(item)scroll/$ on a bookshelf copies the pattern there onto the $(l:items/scroll)$(item)scroll/$. Sneaking and using an empty hand clears the datum in the shelf.", + }, + + quenching_allays: { + "1": "THEY ARE BITS OF MEDIA. How did I not see it sooner? They are -- as I am a heap of flesh with a scrap, blessed with a scrap of thought, an Allay is a self-sustaining quarrel of media pinned to a scrap of flesh. It explains everything -- their propensity for media, their response to music, I SEE NOW, HOW did the ones before NOT?", + "2": "And given this it is only RIGHT I conquer their peculiar minds -- their peculiar selves -- that is all they are, a mind, a self, a coda. Something about their phase speaks to me. I can... I can compress _media with them, overlay two wends of thought in one space, physical and cognitive, all and once.$(br2)Somehow, the process produces _media of its own. How? Perhaps -- perhaps MY work, the process of doing it --", + "3": "It matters not. I matter not. They matter not, all that matters is what it does. And this is it.$(br2)It must hurt so very much.", + "4": "The product is fragile. Breaking it shatters it into pieces, with $(thing)Fortune/$ increasing the yield... if I wish the block itself I need a silken touch.$(br2)The produced shards are worth thrice an $(l:items/amethyst)$(item)Charged Amethyst Crystal/$ apiece. The block itself is worth four of the shards.", + "5": "They are mercurial, they seem to twist and wink under my fingers, and by giving them a mentor in another form of _media they may be coerced into its shape, in an equivalent exchange of _media.", + }, + + "fanciful_staves.1": "It is only right as I shed the husk of ignorance I replace my tools, my palm-polished staves. These new constructions of mine have no additional properties -- but they are so glorious, oh so Glorious... They match the radiance winking at the corners of my sight.", - "_comment": "Patterns", - - - "readers_guide.1": "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.$(br2)If an action is cast by multiple patterns, as is the case with some, I'll write them all side-by-side.", - "readers_guide.2": "For a few patterns, however, I was $(italic)not/$ 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.$(br2)In such cases I just draw the pattern without any information on the order to draw it in.", - "readers_guide.3": "I also write the types of iota that the action will consume or modify, a \"\u2192\", and the types of iota the action will create.$(p)For example, \"$(n)vector, number/$ \u2192 $(n)vector/$\" 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.)", - "readers_guide.4": "\"\u2192 $(n)entity/$\" means it'll just push an entity. \"$(n)entity, vector/$ \u2192\" means it removes an entity and a vector, and doesn't push anything.$(br2)Finally, if I find the little dot marking the stroke order too slow or confusing, I can press $(thing)Control/Command/$ 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!", - - - "basics_pattern.get_caster": "Adds me, the caster, to the stack.", - "basics_pattern.entity_pos/eye": "Transforms an entity on the stack into the position of its eyes. I should probably use this on myself.", - "basics_pattern.entity_pos/foot": "Transforms an entity on the stack into the position it is standing. I should probably use this on other entities.", - "basics_pattern.get_entity_look": "Transforms an entity on the stack into the direction it's looking in, as a unit vector.", - "basics_pattern.print": "Displays the top iota of the stack to me.", - "basics_pattern.raycast.1": "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 _media.", - "basics_pattern.raycast.2": "If it doesn't hit anything, the vectors will combine into $(l:casting/influences)$(thing)Null/$.$(br2)A common sequence of patterns, the so-called \"raycast mantra,\" is $(action)Mind's Reflection/$, $(action)Compass Purification/$, $(action)Mind's Reflection/$, $(action)Alidade Purification/$, $(action)Archer's Distillation/$. Together, they return the vector position of the block I am looking at.", - "basics_pattern.raycast/axis.1": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$, but instead returns a vector representing the answer to the question: Which $(italic)side/$ of the block am I looking at? Costs a negligible amount of _media.", - "basics_pattern.raycast/axis.2": "More specifically, it returns the $(italic)normal vector/$ of the face hit, or a unit vector pointing perpendicular to the face.$(li)If I am looking at a floor, it will return (0, 1, 0).$(li)If I am looking at the south face of a block, it will return (0, 0, 1).", - "basics_pattern.raycast/entity": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$, but instead returns the $(italic)entity/$ I am looking at. Costs a negligible amount of _media.", - "basics_pattern.get_entity_height": "Transforms an entity on the stack into its height.", - "basics_pattern.get_entity_velocity": "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.", - - - "numbers.1": "Irritatingly, there is no easy way to draw numbers. Here is the method Nature deigned to give us.", - "numbers.2": "First, I draw one of the two shapes shown on the other page. Next, the $(italic)angles/$ following will modify a running count starting at 0.$(li)Forward: Add 1$(li)Left: Add 5$(li)Right: Add 10$(li)Sharp Left: Multiply by 2$(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)Once I finish drawing, the number's pushed to the top of the stack.", - "numbers.example.10.header": "Example 1", - "numbers.example.10": "This pattern pushes 10.", - "numbers.example.7.header": "Example 2", - "numbers.example.7": "This pattern pushes 7: 5 + 1 + 1.", - "numbers.example.-32.header": "Example 3", - "numbers.example.-32": "This pattern pushes -32: negate 1 + 5 + 10 * 2.", - "numbers.example.4.5.header": "Example 4", - "numbers.example.4.5": "This pattern pushes 4.5: 5 / 2 + 1 + 1.", - "numbers.3": "In certain cases it might be easier to just use an $(l:items/abacus)$(item)Abacus/$. But, it's worth knowing the \"proper\" way to do things.", - - - "math.numvec": "Many mathematical operations function on both numbers and vectors. Such arguments are written as \"num|vec\".", - "math.add.1": "Perform addition.", - "math.add.2": "As such:$(li)With two numbers at the top of the stack, combines them into their sum.$(li)With a number and a vector, removes the number from the stack and adds it to each element of the vector.$(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]).", - "math.sub.1": "Perform subtraction.", - "math.sub.2": "As such:$(li)With two numbers at the top of the stack, combines them into their difference.$(li)With a number and a vector, removes the number from the stack and subtracts it from each element of the vector.$(li)With two vectors, combines them by subtracting each component.$(br2)In all cases, the top of the stack or its components are subtracted $(italic)from/$ the second-from-the-top.", - "math.mul.1": "Perform multiplication or the dot product.", - "math.mul.2": "As such:$(li)With two numbers, combines them into their product.$(li)With a number and a vector, removes the number from the stack and multiplies each component of the vector by that number.$(li)With two vectors, combines them into their $(l:https://www.mathsisfun.com/algebra/vectors-dot-product.html)dot product/$.", - "math.div.1": "Perform division or the cross product.", - "math.div.2": "As such:$(li)With two numbers, combines them into their quotient.$(li)With a number and a vector, removes the number and divides it by each element of the vector.$(li)With two vectors, combines them into their $(l:https://www.mathsisfun.com/algebra/vectors-cross-product.html)cross product/$.$(br2)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)WARNING: Never divide by zero!", - "math.abs.1": "Compute the absolute value or length.", - "math.abs.2": "Replaces a number with its absolute value, or a vector with its length.", - "math.pow.1": "Perform exponentiation or vector projection.", - "math.pow.2": "With two numbers, combines them by raising the first to the power of the second.$(li)With a number and a vector, removes the number and raises each component of the vector to the number's power.$(li)With two vectors, combines them into the $(l:https://en.wikipedia.org/wiki/Vector_projection)vector projection/$ of the top of the stack onto the second-from-the-top.$(br2)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.", - "math.floor": "\"Floors\" a number, cutting off the fractional component and leaving an integer value. If passed a vector, instead floors each of its components.", - "math.ceil": "\"Ceilings\" a number, raising it to the next integer value if it has a fractional component. If passed a vector, instead ceils each of its components.", - "math.construct_vec": "Combine three numbers at the top of the stack into a vector's X, Y, and Z components (top to bottom).", - "math.deconstruct_vec": "Split a vector into its X, Y, and Z components (top to bottom).", - "math.modulo": "Takes the modulus of two numbers. This is the amount $(italics)remaining/$ after division - for example, 5 %% 2 is 1, and 5 %% 3 is 2. When applied on vectors, performs the above operation elementwise.", - "math.coerce_axial": "For a vector, coerce it to its nearest axial direction, a unit vector. For a number, return the sign of the number; 1 if positive, -1 if negative. In both cases, zero is unaffected.", - "math.random": "Creates a random number between 0 and 1.", - - - "advanced_math.sin": "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "advanced_math.cos": "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "advanced_math.tan": "Takes the tangent of an angle in radians, yielding the slope of that angle drawn on a circle. Related to the values of $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "advanced_math.arcsin": "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "advanced_math.arccos": "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "advanced_math.arctan": "Takes the inverse tangent of a value, yielding the angle whose tangent is that value. Related to the values of $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "advanced_math.arctan2": "Takes the inverse tangent of a Y and X value, yielding the angle between the X-axis and a line from the origin to that point.", - "advanced_math.logarithm": "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 $(l:patterns/consts#hexcasting:const/double/e)$(thing)$(italic)e/$.", - - - "sets.numlist": "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)\".$(br2)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\".", - "sets.or.1": "Unifies two sets.", - "sets.or.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit in either bitset.$(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 $(l:patterns/lists#hexcasting:concat)$(action)Combination Distillation/$.", - "sets.and.1": "Takes the intersection of two sets.", - "sets.and.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit present in $(italics)both/$ bitsets.$(li)With two lists, this creates a list of every element from the first list that is also in the second list.", - "sets.xor.1": "Takes the exclusive disjunction of two sets.", - "sets.xor.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit present in $(italics)exactly one/$ of the bitsets.$(li)With two lists, this creates a list of every element in both lists that is $(italics)not/$ in the other list.", - "sets.not": "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.", - "sets.to_set": "Removes duplicate entries from a list.", - - - "consts.const/null": "Adds the $(l:casting/influences)$(thing)Null/$ influence to the top of the stack.", - "consts.const/true": "Adds $(thing)True/$ to the top of the stack.", - "consts.const/false": "Adds $(thing)False/$ to the top of the stack.", - "consts.const/vec/x": "The left-hand counter-clockwise pattern adds [1, 0, 0] to the stack; the right-hand clockwise pattern adds [-1, 0, 0].", - "consts.const/vec/y": "The left-hand counter-clockwise pattern adds [0, 1, 0] to the stack; the right-hand clockwise pattern adds [0, -1, 0].", - "consts.const/vec/z": "The left-hand counter-clockwise pattern adds [0, 0, 1]; the right-hand clockwise pattern adds [0, 0, -1].", - "consts.const/vec/0": "Adds [0, 0, 0] to the stack.", - "consts.const/double/tau": "Adds τ, the radial representation of a complete circle, to the stack.", - "consts.const/double/pi": "Adds π, the radial representation of half a circle, to the stack.", - "consts.const/double/e": "Adds $(italic)e/$, the base of natural logarithms, to the stack.", - - - "stackmanip.pseudo-novice.title": "Novice's Gambit", - "stackmanip.pseudo-novice": "Removes the first iota from the stack.$(br2)This seems to be a special case of $(l:patterns/stackmanip#hexcasting:mask)$(action)Bookkeeper's Gambit/$.", - "stackmanip.swap": "Swaps the top two iotas of the stack.", - "stackmanip.rotate": "Yanks the iota third from the top of the stack to the top. [0, 1, 2] becomes [1, 2, 0].", - "stackmanip.rotate_reverse": "Yanks the top iota to the third position. [0, 1, 2] becomes [2, 0, 1].", - "stackmanip.duplicate": "Duplicates the top iota of the stack.", - "stackmanip.over": "Copy the second-to-last iota of the stack to the top. [0, 1] becomes [0, 1, 0].", - "stackmanip.tuck": "Copy the top iota of the stack, then put it under the second iota. [0, 1] becomes [1, 0, 1].", - "stackmanip.2dup": "Copy the top two iotas of the stack. [0, 1] becomes [0, 1, 0, 1].", - "stackmanip.stack_len": "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].)", - "stackmanip.duplicate_n": "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.)", - "stackmanip.fisherman": "Grabs the element in the stack indexed by the number and brings it to the top. If the number is negative, instead moves the top element of the stack down that many elements.", - "stackmanip.fisherman/copy": "Like $(action)Fisherman's Gambit/$, but instead of moving the iota, copies it.", - "stackmanip.mask.1": "An infinite family of actions that keep or remove elements at the top of the stack based on the sequence of dips and lines.", - "stackmanip.mask.2": "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.$(br2)If my stack contains $(italic)0, 1, 2/$ from deepest to shallowest, drawing the first pattern opposite will give me $(italic)1/$, the second will give me $(italic)0/$, and the third will give me $(italic)0, 2/$ (the 0 at the bottom is left untouched).", - "stackmanip.swizzle.1": "Rearranges the top elements of the stack based on the given numerical code, which is the index of the permutation wanted.", - "stackmanip.swizzle.2": "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.$(br2)If I wish to do further study, the key word is \"Lehmer Code.\"", - "stackmanip.swizzle.link": "Table of Codes", - - - "logic.bool_coerce": "Convert an argument to a boolean. The number $(thing)0/$, $(l:influences#null)$(thing)Null/$, and the empty list become False; everything else becomes True.", - "logic.bool_to_number": "Convert a boolean to a number; True becomes $(thing)1/$, and False becomes $(thing)0/$.", - "logic.not": "If the argument is True, return False; if it is False, return True.", - "logic.or": "Returns True if at least one of the arguments are True; otherwise returns False.", - "logic.and": "Returns True if both arguments are true; otherwise returns False.", - "logic.xor": "Returns True if exactly one of the arguments is true; otherwise returns False.", - "logic.if": "If the first argument is True, keeps the second and discards the third; otherwise discards the second and keeps the third.", - "logic.equals": "If the first argument equals the second (within a small tolerance), return True. Otherwise, return False.", - "logic.not_equals": "If the first argument does not equal the second (outside a small tolerance), return True. Otherwise, return False.", - "logic.greater": "If the first argument is greater than the second, return True. Otherwise, return False.", - "logic.less": "If the first argument is less than the second, return True. Otherwise, return False.", - "logic.greater_eq": "If the first argument is greater than or equal to the second, return True. Otherwise, return False.", - "logic.less_eq": "If the first argument is less than or equal to the second, return True. Otherwise, return False.", - - - "entities.get_entity": "Transform the position on the stack into the entity at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", - "entities.get_entity/animal": "Transform the position on the stack into the animal at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", - "entities.get_entity/monster": "Transform the position on the stack into the monster at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", - "entities.get_entity/item": "Transform the position on the stack into the dropped item at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", - "entities.get_entity/player": "Transform the position on the stack into the player at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", - "entities.get_entity/living": "Transform the position on the stack into the living creature at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", - "entities.zone_entity/animal": "Take a position and maximum distance on the stack, and combine them into a list of animals near the position.", - "entities.zone_entity/not_animal": "Take a position and maximum distance on the stack, and combine them into a list of non-animal entities near the position.", - "entities.zone_entity/monster": "Take a position and maximum distance on the stack, and combine them into a list of monsters near the position.", - "entities.zone_entity/not_monster": "Take a position and maximum distance on the stack, and combine them into a list of non-monster entities near the position.", - "entities.zone_entity/item": "Take a position and maximum distance on the stack, and combine them into a list of dropped items near the position.", - "entities.zone_entity/not_item": "Take a position and maximum distance on the stack, and combine them into a list of non-dropped-item entities near the position.", - "entities.zone_entity/player": "Take a position and maximum distance on the stack, and combine them into a list of players near the position.", - "entities.zone_entity/not_player": "Take a position and maximum distance on the stack, and combine them into a list of non-player characters near the position.", - "entities.zone_entity/living": "Take a position and maximum distance on the stack, and combine them into a list of living creatures near the position.", - "entities.zone_entity/not_living": "Take a position and maximum distance on the stack, and combine them into a list of non-living entities near the position.", - "entities.zone_entity": "Take a position and maximum distance on the stack, and combine them into a list of all entities near the position.", - - - "lists.index": "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 $(l:casting/influences)$(thing)Null/$ if the number is out of bounds.", - "lists.slice": "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].", - "lists.append": "Remove the top of the stack, then add it to the end of the list at the top of the stack.", - "lists.unappend": "Remove the iota on the end of the list at the top of the stack, and add it to the top of the stack.", - "lists.concat": "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.", - "lists.empty_list": "Push an empty list to the top of the stack.", - "lists.singleton": "Remove the top of the stack, then push a list containing only that element.", - "lists.list_size": "Remove the list at the top of the stack, then push the number of elements in the list to the stack.", - "lists.reverse": "Reverse the list at the top of the stack.", - "lists.index_of": "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.", - "lists.remove_from": "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).", - "lists.replace": "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.", - "lists.last_n_list": "Remove $(italic)num/$ elements from the stack, then add them to a list at the top of the stack.", - "lists.splat": "Remove the list at the top of the stack, then push its contents to the stack.", - "lists.construct": "Remove the top iota, then add it as the first element to the list at the top of the stack.", - "lists.deconstruct": "Remove the first iota from the list at the top of the stack, then push that iota to the stack.", - - - "patterns_as_iotas.1": "One of the many peculiarities of this art is that $(italic)patterns themselves/$ can act as iotas-- I can even put them onto my stack when casting.$(br2)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.", - "patterns_as_iotas.2": "Fortunately, Nature has provided me with a set of $(l:casting/influences)influences/$ that I can use to work with patterns directly.$(br2)In short, $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ lets me add one pattern to the stack, and $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ let me add a whole list.", - "patterns_as_iotas.escape.1": "To use $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, I draw it, then another arbitrary pattern. That second pattern is added to the stack.", - "patterns_as_iotas.escape.2": "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.$(br2)The usual use for this is to copy the pattern to a $(l:items/scroll)$(item)Scroll/$ or $(l:items/slate)$(item)Slate/$ using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, and then perhaps decorating with them.", - "patterns_as_iotas.parens.1": "Drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$ makes my drawing of patterns act differently, for a time. Until I draw $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Retrospection/$, the patterns I draw are saved. Then, when I draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, they are added to the stack as a list iota.", - "patterns_as_iotas.parens.2": "If I draw another $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Introspection/$, it'll still be saved to the list, but I'll then have to draw $(italic)two/$ $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$ to get back to normal casting.", - "patterns_as_iotas.parens.3": "Also, I can escape the special behavior of $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ by drawing a $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ before them, which will simply add them to the list without affecting which the number of $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$ I need to return to casting.$(br2)If I draw two $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Considerations/$ in a row while $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)introspecting/$, it will add a single $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ to the list.", - "patterns_as_iotas.undo": "Finally, if I make a mistake while drawning patterns inside $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ I can draw $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Evanition/$ to remove the last pattern that I drew from the pattern list that is being constructed.", - - - "readwrite.1": "This section deals with the storage of $(thing)Iotas/$ in a more permanent medium. Nearly any iota can be stored to a suitable item, such as a $(l:items/focus)$(item)Focus/$ or $(l:items/spellbook)$(item)Spellbook/$), and read back later. Certain items, such as an $(l:items/abacus)$(item)Abacus/$, can only be read from.$(br2)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.", - "readwrite.2": "There may be other entities I can interact with in this way. For example, a $(l:items/scroll)$(item)Scroll/$ hung on the wall can have its pattern read off of it.$(br2)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 $(l:items/focus)$(item)Focus/$ for them.", - "readwrite.read": "Copy the iota stored in the item in my other hand and add it to the stack.", - "readwrite.write": "Remove the top iota from the stack, and save it into the item in my other hand.", - "readwrite.read/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is read out of an entity instead of my other hand.", - "readwrite.write/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Gambit/$, but the iota is written to an entity instead of my other hand.$(br2)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.", - "readwrite.readable": "If the item in my other hand holds an iota I can read, returns True. Otherwise, returns False.", - "readwrite.readable/entity": "Like $(l:patterns/readwrite#hexcasting:readable)$(action)Auditor's Reflection/$, but the readability of an entity is checked instead of my other hand.", - "readwrite.writable": "If I could save an iota into the item in my other hand, returns True. Otherwise, returns False.", - "readwrite.writable/entity": "Like $(l:patterns/readwrite#hexcasting:writable)$(action)Assessor's Reflection/$, but the writability of an entity is checked instead of my other hand.", - "readwrite.local.title": "The Ravenmind", - "readwrite.local": "Items are not the only places I can store information, however. I am also able to store that information in the _media of the _Hex itself, much like the stack, but separate. Texts refer to this as the $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$. It holds a single iota, much like a $(l:items/focus)$(item)Focus/$, and begins with $(l:casting/influences)$(thing)Null/$ like the same. It is preserved between iterations of $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, but only lasts as long as the _Hex it's a part of. Once I stop casting, the value will be lost.", - "readwrite.write/local": "Removes the top iota from the stack, and saves it to my $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$, storing it there until I stop casting the _Hex.", - "readwrite.read/local": "Copy the iota out of my $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$, which I likely just wrote with $(l:patterns/readwrite#hexcasting:write/local)$(action)Huginn's Gambit/$.", - - - "meta.eval.1": "Remove a pattern or list of patterns from the stack, then cast them as if I had drawn them myself with my $(l:items/staff)$(item)Staff/$ (until a $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ is encountered). If an iota is escaped with $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ or $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)its ilk/$, it will be pushed to the stack. Otherwise, non-patterns will fail.", - "meta.eval.2": "This can be $(italic)very/$ powerful in tandem with $(l:items/focus)$(item)Foci/$.$(br2)It also makes the bureaucracy of Nature a \"Turing-complete\" system, according to one esoteric scroll I found.$(br2)However, it seems there's a limit to how many times a _Hex can cast itself-- Nature doesn't look kindly on runaway spells!$(br2)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.", - "meta.for_each.1": "Remove a list of patterns and a list from the stack, then cast the given pattern over each element of the second list.", - "meta.for_each.2": "More specifically, for each element in the second list, it will:$(li)Create a new stack, with everything on the current stack plus that element$(li)Draw all the patterns in the first list$(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.$(br2)No wonder all the practitioners of this art go mad.", - "meta.halt.1": "This pattern forcibly halts a _Hex. This is mostly useless on its own, as I could simply just stop writing patterns, or put down my staff.", - "meta.halt.2": "But when combined with $(l:patterns/meta#hexcasting:eval)$(action)Hermes'/$ or $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambits/$, it becomes $(italics)far/$ more interesting. Those patterns serve to 'contain' that halting, and rather than ending the entire _Hex, those gambits end instead. This can be used to cause $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$ not to operate on every iota it's given. An escape from the madness, as it were.", - "meta.eval/cc.1": "Cast a pattern or list of patterns from the stack exactly like $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$, except that a unique \"Jump\" iota is pushed to the stack beforehand. ", - "meta.eval/cc.2": "When the \"Jump\"-iota is executed, it'll skip the rest of the patterns and jump directly to the end of the pattern list.$(p)While this may seem redundant given $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ exists, this allows you to exit $(italic)nested/$ $(l:patterns/meta#hexcasting:eval)$(action)Hermes'/$ invocations in a controlled way, where Charon only allows you to exit one.$(p)The \"Jump\" iota will apparently stay on the stack even after execution is finished... better not think about the implications of that.", - - "circle_patterns.disclaimer": "These patterns must be cast from a $(l:greatwork/spellcircles)$(item)Spell Circle/$; trying to cast them through a $(l:items/staff)$(item)Staff/$ will fail rather spectacularly.", - "circle_patterns.circle/impetus_pos": "Returns the position of the $(l:greatwork/impetus)$(item)Impetus/$ of this spell circle.", - "circle_patterns.circle/impetus_dir": "Returns the direction the $(l:greatwork/impetus)$(item)Impetus/$ of this spell circle is facing as a unit vector.", - "circle_patterns.circle/bounds/min": "Returns the position of the lower-north-west corner of the bounds of this spell circle.", - "circle_patterns.circle/bounds/max": "Returns the position of the upper-south-east corner of the bounds of this spell circle.", - - - "akashic_patterns.akashic/read": "Read the iota associated with the given pattern out of the $(l:greatwork/akashiclib)$(item)Akashic Library/$ with its $(l:greatwork/akashiclib)$(item)Record/$ at the given position. This has no range limit. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "akashic_patterns.akashic/write": "Associate the iota with the given pattern in the $(l:greatwork/akashiclib)$(item)Akashic Library/$ with its $(l:greatwork/akashiclib)$(item)Record/$ at the given position. This $(italic)does/$ have a range limit. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - - "_comment": "Normal Spells", - - - "itempicking.1": "Certain spells, such as $(l:patterns/spells/blockworks#hexcasting:place_block)$(action)Place Block/$, 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.$(br2)This process is called \"picking an item.\"", - "itempicking.2": "More specifically:$(li)First, the spell will search for the first valid item in my hotbar to the $(italic)right of my $(l:items/staff)$(item)staff/$, wrapping around at the right-hand side, and starting at the first slot if my $(l:items/staff)$(item)staff/$ is in my off-hand.$(li)Second, the spell will draw that item from as $(italic)far back in my inventory/$ as possible, prioritizing the main inventory over the hotbar.", - "itempicking.3": "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.", - - - "basic_spell.explode.1": "Remove a number and vector from the stack, then create an explosion at the given location with the given power.", - "basic_spell.explode.2": "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.$(br2)Strangely, this explosion doesn't seem to harm me. Perhaps it's because $(italic)I/$ am the one exploding?$(br2)Costs a negligible amount at power 0, plus 3 extra $(l:items/amethyst)$(item)Amethyst Dust/$ per point of explosion power.", - "basic_spell.explode.fire.1": "Remove a number and vector from the stack, then create a fiery explosion at the given location with the given power.", - "basic_spell.explode.fire.2": "Costs one $(l:items/amethyst)$(item)Amethyst Dust/$, plus about 3 extra $(l:items/amethyst)$(item)Amethyst Dust/$s per point of explosion power. Otherwise, the same as $(l:patterns/spells/basic#hexcasting:explode)$(action)Explosion/$, except with fire.", - "basic_spell.add_motion": "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 $(l:items/amethyst)$(item)Amethyst Dust/$ equal to the square of the length of the vector, plus one for every Impulse except the first targeting an entity.", - "basic_spell.blink": "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 $(l:items/amethyst)$(item)Amethyst Shard/$ per two blocks travelled.", - "basic_spell.beep.1": "Remove a vector and two numbers from the stack. Plays an $(thing)instrument/$ defined by the first number at the given location, with a $(thing)note/$ defined by the second number. Costs a negligible amount of _media.", - "basic_spell.beep.2": "There appear to be 16 different $(thing)instruments/$ and 25 different $(thing)notes/$. Both are indexed by zero.$(br2)These seem to be the same instruments I can produce with a $(item)Note Block/$, though the reason for each instrument's number being what it is eludes me.$(br2)Either way, I can find the numbers I need to use by inspecting a $(item)Note Block/$ through a $(l:items/lens)$(item)Scrying Lens/$.", - - - "blockworks.place_block": "Remove a location from the stack, then pick a block item and place it at the given location.$(br)Costs about an eighth of one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "blockworks.break_block": "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 about an eighth of one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "blockworks.create_water": "Summon a block of water (or insert up to a bucket's worth) into a block at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "blockworks.destroy_water": "Drains either a liquid container at, or a body of liquid around, the given position. Costs about two $(l:items/amethyst)$(item)Charged Amethyst/$.", - "blockworks.conjure_block": "Conjure an ethereal, but solid, block that sparkles with my pigment at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "blockworks.conjure_light": "Conjure a magical light that softly glows with my pigment at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "blockworks.bonemeal": "Encourage a plant or sapling at the target position to grow, as if $(item)Bonemeal/$ was applied. Costs a bit more than one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "blockworks.edify": "Forcibly infuse _media into the sapling at the target position, causing it to grow into an $(l:items/edified)$(thing)Edified Tree/$. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", - "blockworks.ignite": "Start a fire on top of the given location, as if a $(item)Fire Charge/$ was applied. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "blockworks.extinguish": "Extinguish blocks in a large area. Costs about six $(l:items/amethyst)$(item)Amethyst Dust/$.", - - - "nadirs.1": "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).$(br2)Each one has a \"base cost;\" the actual cost is equal to that base cost, multiplied by the potency squared.", - "nadirs.2": "According to certain legends, these spells and their sisters, the $(l:patterns/great_spells/zeniths)$(action)Zeniths/$, 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...\"$(br2)Perhaps that is the reason for their peculiar names.", - "nadirs.potion/weakness": "Inflicts $(thing)weakness/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 10 seconds.", - "nadirs.potion/levitation": "Inflicts $(thing)levitation/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.", - "nadirs.potion/wither": "Inflicts $(thing)withering/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.", - "nadirs.potion/poison": "Inflicts $(thing)poison/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.", - "nadirs.potion/slowness": "Inflicts $(thing)slowness/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.", - - - "hexcasting_spell.basics": "These three spells each create an $(l:items/hexcasting)$(thing)item that casts a _Hex./$$(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 $(l:items/amethyst)$(item)Amethyst/$ to form the item's battery.$(br2)See $(l:items/hexcasting)this entry/$ for more information.", - "hexcasting_spell.craft/cypher": "Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", - "hexcasting_spell.craft/trinket": "Costs about five $(l:items/amethyst)$(item)Charged Amethysts/$.", - "hexcasting_spell.craft/artifact": "Costs about ten $(l:items/amethyst)$(item)Charged Amethysts/$.", - "hexcasting_spell.recharge.1": "Recharge a _media-containing item in my other hand. Costs about one $(l:items/amethyst)$(item)Amethyst Shard/$.", - "hexcasting_spell.recharge.2": "This spell is cast in a similar method to the crafting spells; an entity representing a dropped stack of $(l:items/amethyst)$(item)Amethyst/$ is provided, and recharges the _media battery of the item in my other hand.$(br2)This spell $(italic)cannot/$ recharge the item farther than its original battery size.", - "hexcasting_spell.erase.1": "Clear a _Hex-containing item in my other hand. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "hexcasting_spell.erase.2": "The spell will also void all the _media stored inside the item, releasing it back to Nature and returning the item to a perfectly clean slate. This way, I can re-use $(l:items/hexcasting)$(item)Trinkets/$ I have put an erroneous spell into, for example.$(br2)This also works to clear a $(l:items/focus)$(item)Focus/$ or $(l:items/spellbook)$(item)Spellbook/$ page, unsealing them in the process.", - - - "sentinels.1": "$(italic)Hence, away! Now all is well,$(br)One aloof stand sentinel./$$(br2)A $(l:patterns/spells/sentinels)$(thing)Sentinel/$ is a mysterious force I can summon to assist in the casting of _Hexes, like a familiar or guardian spirit. It appears as a spinning geometric shape to my eyes, but is invisible to everyone else.", - "sentinels.2": "It has several interesting properties:$(li)It does not appear to be tangible; no one can touch it.$(li)Only my _Hexes can interact with it.$(li)Once summoned, it stays in place until banished.$(li)I am always able to see it if I'm close enough, even through solid objects.", - "sentinels.sentinel/create": "Summons my $(l:patterns/spells/sentinels)$(thing)sentinel/$ at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", - "sentinels.sentinel/destroy": "Banish my $(l:patterns/spells/sentinels)$(thing)sentinel/$, and remove it from the world. Costs a negligible amount of _media.", - "sentinels.sentinel/get_pos": "Add the position of my $(l:patterns/spells/sentinels)$(thing)sentinel/$ to the stack, or $(l:casting/influences)$(thing)Null/$ if it isn't summoned. Costs a negligible amount of _media.", - "sentinels.sentinel/wayfind": "Transform the position vector on the top of the stack into a unit vector pointing from that position to my $(l:patterns/spells/sentinels)$(thing)sentinel/$, or $(l:casting/influences)$(thing)Null/$ if it isn't summoned. Costs a negligible amount of _media.", - - "colorize": "I must be holding a $(l:items/pigments)$(item)Pigment/$ 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 $(l:items/amethyst)$(item)Amethyst Dust/$.", - - - "flights.1": "Although it seems that true, limitless flight is out of my grasp, I have nonetheless found some methods of holding one in the sky, each with their respective drawbacks.$(br2)All forms produce a shimmer of excess _media; as the spell gets closer to ending, the sparks are shot through with more red and black.", - "flights.2": "Other forms of flight do exist, of course. For example, a combination of $(l:patterns/spells/basic#hexcasting:add_motion)$(action)Impulse/$ and $(l:patterns/spells/nadirs#hexcasting:potion/levitation)$(action)Blue Sun's Nadir/$ has been used since antiquity for a flight of sorts.$(br2)I've also heard tell of a thin membrane worn on the back that allows the ability to glide. From my research, I believe the Great spell $(l:patterns/great_spells/altiora)$(action)Altiora/$ may be used to mimic it.", - "flights.range.1": "A flight limited in its range.", - "flights.range.2": "The second argument is a horizontal radius, in meters, in which the spell is stable. Moving outside of that radius will end the spell, dropping me out of the sky. As long as I stay inside the safe zone, however, the spell lasts indefinitely. An additional shimmer of _media marks the origin point of the safe zone. $(br2)Costs about 1 $(l:items/amethyst)$(item)Amethyst Dust/$ per meter of safety.", - "flights.time.1": "A flight limited in its duration.", - "flights.time.2": "The second argument is an amount of time in seconds for which the spell is stable. After that time, the spell ends and I am dropped from the sky. $(br2)It is relatively expensive at about 1 $(l:items/amethyst)$(item)Charged Crystal/$ per second of flight; I believe it is best suited for travel.", - - "create_lava.1": "Summon a block of lava (or insert up to a bucket's worth) into a block at the given position. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", - "create_lava.2": "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.$(br2)Well, no one said tracing the deep secrets of the universe was going to be an easy time.", - - - "weather_manip.lightning": "I command the heavens! This spell will summon a bolt of lightning to strike the earth where I direct it. Costs about three $(l:items/amethyst)$(item)Amethyst Shards/$.", - "weather_manip.summon_rain": "I control the clouds! This spell will summon rain across the world I cast it upon. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$. Does nothing if it is already raining.", - "weather_manip.dispel_rain": "A counterpart to summoning rain. This spell will dispel rain across the world I cast it upon. Costs about one $(l:items/amethyst)$(item)Amethyst Shard/$. Does nothing if the skies are already clear.", - - "altiora.1": "Summon a sheaf of _media about me in the shape of wings, endowed with enough substance to allow gliding.", - "altiora.2": "Using them is identical to using $(item)Elytra/$; the target (which must be a player) is lofted into the air, after which pressing $(k:jump) will deploy the wings. The wings are fragile, and break upon touching any surface. Longer flights may benefit from $(l:patterns/spells/basic#hexcasting:add_motion)$(action)Impulse/$ or (for the foolhardy) $(item)Fireworks/$.$(br2)Costs about one $(l:items/amethyst)$(item)Charged Crystal/$.", - - "teleport/great.1": "Far more powerful than $(l:patterns/spells/basic#hexcasting:blink)$(action)Blink/$, this spell lets me teleport nearly anywhere in the entire world! There does seem to be a limit, but it is $(italic)much/$ greater than the normal radius of influence I am used to.", - "teleport/great.2": "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 $(l:items/amethyst)$(item)Charged Amethyst/$.$(br2)The transference is not perfect, and it seems when teleporting something as complex as a player, their inventory doesn't $(italic)quite/$ 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.", - - - "zeniths.1": "This family of spells all impart a positive potion effect upon an entity, similar to the $(l:patterns/spells/nadirs)$(action)Nadirs/$. However, these have their _media costs increase with the $(italic)cube/$ of the potency.", - "zeniths.potion/regeneration": "Bestows $(thing)regeneration/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.", - "zeniths.potion/night_vision": "Bestows $(thing)night vision/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.", - "zeniths.potion/absorption": "Bestows $(thing)absorption/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.", - "zeniths.potion/haste": "Bestows $(thing)haste/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.", - "zeniths.potion/strength": "Bestows $(thing)strength/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.", - - "greater_sentinel.1": "Summon a greater version of my $(l:patterns/spells/sentinels)$(thing)Sentinel/$. Costs about two $(l:items/amethyst)$(item)Amethyst Dust/$.", - "greater_sentinel.2": "The stronger $(l:patterns/spells/sentinels)$(thing)sentinel/$ 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 $(l:patterns/spells/sentinels)$(thing)sentinel/$, about 16 blocks. In other words, no matter where in the world I am, I can interact with things around my $(l:patterns/spells/sentinels)$(thing)sentinel/$ (the mysterious forces of chunkloading notwithstanding).", + // Patterns + + readers_guide: { + "1": "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.$(br2)If an action is cast by multiple patterns, as is the case with some, I'll write them all side-by-side.", + "2": "For a few patterns, however, I was $(italic)not/$ 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.$(br2)In such cases I just draw the pattern without any information on the order to draw it in.", + "3": "I also write the types of iota that the action will consume or modify, a \"\u2192\", and the types of iota the action will create.$(p)For example, \"$(n)vector, number/$ \u2192 $(n)vector/$\" 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.)", + "4": "\"\u2192 $(n)entity/$\" means it'll just push an entity. \"$(n)entity, vector/$ \u2192\" means it removes an entity and a vector, and doesn't push anything.$(br2)Finally, if I find the little dot marking the stroke order too slow or confusing, I can press $(thing)Control/Command/$ 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!", + }, + + basics_pattern: { + get_caster: "Adds me, the caster, to the stack.", + "entity_pos/eye": "Transforms an entity on the stack into the position of its eyes. I should probably use this on myself.", + "entity_pos/foot": "Transforms an entity on the stack into the position it is standing. I should probably use this on other entities.", + get_entity_look: "Transforms an entity on the stack into the direction it's looking in, as a unit vector.", + print: "Displays the top iota of the stack to me.", + raycast: { + "1": "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 _media.", + "2": "If it doesn't hit anything, the vectors will combine into $(l:casting/influences)$(thing)Null/$.$(br2)A common sequence of patterns, the so-called \"raycast mantra,\" is $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$, $(l:patterns/basics#hexcasting:entity_pos/eye)$(action)Compass Purification/$, $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$, $(l:patterns/basics#hexcasting:get_entity_look)$(action)Alidade Purification/$, $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$. Together, they return the vector position of the block I am looking at.", + }, + "raycast/axis": { + "1": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$, but instead returns a vector representing the answer to the question: Which $(italic)side/$ of the block am I looking at? Costs a negligible amount of _media.", + "2": "More specifically, it returns the $(italic)normal vector/$ of the face hit, or a unit vector pointing perpendicular to the face.$(li)If I am looking at a floor, it will return (0, 1, 0).$(li)If I am looking at the south face of a block, it will return (0, 0, 1).", + }, + "raycast/entity": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$, but instead returns the $(italic)entity/$ I am looking at. Costs a negligible amount of _media.", + get_entity_height: "Transforms an entity on the stack into its height.", + get_entity_velocity: "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.", + }, + + numbers: { + "1": "Irritatingly, there is no easy way to draw numbers. Here is the method Nature deigned to give us.", + "2": "First, I draw one of the two shapes shown on the other page. Next, the $(italic)angles/$ following will modify a running count starting at 0.$(li)Forward: Add 1$(li)Left: Add 5$(li)Right: Add 10$(li)Sharp Left: Multiply by 2$(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)Once I finish drawing, the number's pushed to the top of the stack.", + example: { + "10.header": "Example 1", + "10": "This pattern pushes 10.", + + "7.header": "Example 2", + "7": "This pattern pushes 7: 5 + 1 + 1.", + + "-32.header": "Example 3", + "-32": "This pattern pushes -32: negate 1 + 5 + 10 * 2.", + + "4.5.header": "Example 4", + "4.5": "This pattern pushes 4.5: 5 / 2 + 1 + 1.", + }, + "3": "In certain cases it might be easier to just use an $(l:items/abacus)$(item)Abacus/$. But, it's worth knowing the \"proper\" way to do things.", + }, + + math: { + numvec: "Many mathematical operations function on both numbers and vectors. Such arguments are written as \"num|vec\".", + + "add.1": "Perform addition.", + "add.2": "As such:$(li)With two numbers at the top of the stack, combines them into their sum.$(li)With a number and a vector, removes the number from the stack and adds it to each element of the vector.$(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]).", + + "sub.1": "Perform subtraction.", + "sub.2": "As such:$(li)With two numbers at the top of the stack, combines them into their difference.$(li)With a number and a vector, removes the number from the stack and subtracts it from each element of the vector.$(li)With two vectors, combines them by subtracting each component.$(br2)In all cases, the top of the stack or its components are subtracted $(italic)from/$ the second-from-the-top.", + + "mul.1": "Perform multiplication or the dot product.", + "mul.2": "As such:$(li)With two numbers, combines them into their product.$(li)With a number and a vector, removes the number from the stack and multiplies each component of the vector by that number.$(li)With two vectors, combines them into their $(l:https://www.mathsisfun.com/algebra/vectors-dot-product.html)dot product/$.", + + "div.1": "Perform division or the cross product.", + "div.2": "As such:$(li)With two numbers, combines them into their quotient.$(li)With a number and a vector, removes the number and divides it by each element of the vector.$(li)With two vectors, combines them into their $(l:https://www.mathsisfun.com/algebra/vectors-cross-product.html)cross product/$.$(br2)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)WARNING: Never divide by zero!", + + "abs.1": "Compute the absolute value or length.", + "abs.2": "Replaces a number with its absolute value, or a vector with its length.", + + "pow.1": "Perform exponentiation or vector projection.", + "pow.2": "With two numbers, combines them by raising the first to the power of the second.$(li)With a number and a vector, removes the number and raises each component of the vector to the number's power.$(li)With two vectors, combines them into the $(l:https://en.wikipedia.org/wiki/Vector_projection)vector projection/$ of the top of the stack onto the second-from-the-top.$(br2)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.", + + floor: "\"Floors\" a number, cutting off the fractional component and leaving an integer value. If passed a vector, instead floors each of its components.", + ceil: "\"Ceilings\" a number, raising it to the next integer value if it has a fractional component. If passed a vector, instead ceils each of its components.", + construct_vec: "Combine three numbers at the top of the stack into a vector's X, Y, and Z components (top to bottom).", + deconstruct_vec: "Split a vector into its X, Y, and Z components (top to bottom).", + modulo: "Takes the modulus of two numbers. This is the amount $(italics)remaining/$ after division - for example, 5 %% 2 is 1, and 5 %% 3 is 2. When applied on vectors, performs the above operation elementwise.", + coerce_axial: "For a vector, coerce it to its nearest axial direction, a unit vector. For a number, return the sign of the number; 1 if positive, -1 if negative. In both cases, zero is unaffected.", + random: "Creates a random number between 0 and 1.", + }, + + advanced_math: { + sin: "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + cos: "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + tan: "Takes the tangent of an angle in radians, yielding the slope of that angle drawn on a circle. Related to the values of $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arcsin: "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arccos: "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arctan: "Takes the inverse tangent of a value, yielding the angle whose tangent is that value. Related to the values of $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arctan2: "Takes the inverse tangent of a Y and X value, yielding the angle between the X-axis and a line from the origin to that point.", + logarithm: "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 $(l:patterns/consts#hexcasting:const/double/e)$(thing)$(italic)e/$.", + }, + + sets: { + numlist: "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)\".$(br2)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\".", + + "or.1": "Unifies two sets.", + "or.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit in either bitset.$(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 $(l:patterns/lists#hexcasting:add)$(action)Combination Distillation/$.", + + "and.1": "Takes the intersection of two sets.", + "and.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit present in $(italics)both/$ bitsets.$(li)With two lists, this creates a list of every element from the first list that is also in the second list.", + + "xor.1": "Takes the exclusive disjunction of two sets.", + "xor.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit present in $(italics)exactly one/$ of the bitsets.$(li)With two lists, this creates a list of every element in both lists that is $(italics)not/$ in the other list.", + + not: "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.", + to_set: "Removes duplicate entries from a list.", + }, + + "consts.const/": { + "null": "Adds the $(l:casting/influences)$(thing)Null/$ influence to the top of the stack.", + "true": "Adds $(thing)True/$ to the top of the stack.", + "false": "Adds $(thing)False/$ to the top of the stack.", + + "vec/": { + x: "The left-hand counter-clockwise pattern adds [1, 0, 0] to the stack; the right-hand clockwise pattern adds [-1, 0, 0].", + y: "The left-hand counter-clockwise pattern adds [0, 1, 0] to the stack; the right-hand clockwise pattern adds [0, -1, 0].", + z: "The left-hand counter-clockwise pattern adds [0, 0, 1]; the right-hand clockwise pattern adds [0, 0, -1].", + "0": "Adds [0, 0, 0] to the stack.", + }, + + "double/": { + tau: "Adds τ, the radial representation of a complete circle, to the stack.", + pi: "Adds π, the radial representation of half a circle, to the stack.", + "e": "Adds $(italic)e/$, the base of natural logarithms, to the stack.", + }, + }, + + stackmanip: { + "pseudo-novice.title": "Novice's Gambit", + "pseudo-novice": "Removes the first iota from the stack.$(br2)This seems to be a special case of $(l:patterns/stackmanip#hexcasting:mask)$(action)Bookkeeper's Gambit/$.", + + swap: "Swaps the top two iotas of the stack.", + rotate: "Yanks the iota third from the top of the stack to the top. [0, 1, 2] becomes [1, 2, 0].", + rotate_reverse: "Yanks the top iota to the third position. [0, 1, 2] becomes [2, 0, 1].", + duplicate: "Duplicates the top iota of the stack.", + over: "Copy the second-to-last iota of the stack to the top. [0, 1] becomes [0, 1, 0].", + tuck: "Copy the top iota of the stack, then put it under the second iota. [0, 1] becomes [1, 0, 1].", + "2dup": "Copy the top two iotas of the stack. [0, 1] becomes [0, 1, 0, 1].", + stack_len: "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].)", + duplicate_n: "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.)", + fisherman: "Grabs the element in the stack indexed by the number and brings it to the top. If the number is negative, instead moves the top element of the stack down that many elements.", + "fisherman/copy": "Like $(l:patterns/stackmanip#hexcasting:fisherman)$(action)Fisherman's Gambit/$, but instead of moving the iota, copies it.", + + mask: { + "1": "An infinite family of actions that keep or remove elements at the top of the stack based on the sequence of dips and lines.", + "2": "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.$(br2)If my stack contains $(italic)0, 1, 2/$ from deepest to shallowest, drawing the first pattern opposite will give me $(italic)1/$, the second will give me $(italic)0/$, and the third will give me $(italic)0, 2/$ (the 0 at the bottom is left untouched).", + }, + + swizzle: { + "1": "Rearranges the top elements of the stack based on the given numerical code, which is the index of the permutation wanted.", + "2": "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.$(br2)If I wish to do further study, the key word is \"Lehmer Code.\"", + link: "Table of Codes", + }, + }, + + logic: { + bool_coerce: "Convert an argument to a boolean. The number $(thing)0/$, $(l:casting/influences)$(thing)Null/$, and the empty list become False; everything else becomes True.", + bool_to_number: "Convert a boolean to a number; True becomes $(thing)1/$, and False becomes $(thing)0/$.", + not: "If the argument is True, return False; if it is False, return True.", + or: "Returns True if at least one of the arguments are True; otherwise returns False.", + and: "Returns True if both arguments are true; otherwise returns False.", + xor: "Returns True if exactly one of the arguments is true; otherwise returns False.", + if: "If the first argument is True, keeps the second and discards the third; otherwise discards the second and keeps the third.", + equals: "If the first argument equals the second (within a small tolerance), return True. Otherwise, return False.", + not_equals: "If the first argument does not equal the second (outside a small tolerance), return True. Otherwise, return False.", + greater: "If the first argument is greater than the second, return True. Otherwise, return False.", + less: "If the first argument is less than the second, return True. Otherwise, return False.", + greater_eq: "If the first argument is greater than or equal to the second, return True. Otherwise, return False.", + less_eq: "If the first argument is less than or equal to the second, return True. Otherwise, return False.", + }, + + entities: { + get_entity: "Transform the position on the stack into the entity at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + "get_entity/": { + animal: "Transform the position on the stack into the animal at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + monster: "Transform the position on the stack into the monster at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + item: "Transform the position on the stack into the dropped item at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + player: "Transform the position on the stack into the player at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + living: "Transform the position on the stack into the living creature at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).", + }, + + zone_entity: "Take a position and maximum distance on the stack, and combine them into a list of all entities near the position.", + "zone_entity/": { + animal: "Take a position and maximum distance on the stack, and combine them into a list of animals near the position.", + not_animal: "Take a position and maximum distance on the stack, and combine them into a list of non-animal entities near the position.", + monster: "Take a position and maximum distance on the stack, and combine them into a list of monsters near the position.", + not_monster: "Take a position and maximum distance on the stack, and combine them into a list of non-monster entities near the position.", + item: "Take a position and maximum distance on the stack, and combine them into a list of dropped items near the position.", + not_item: "Take a position and maximum distance on the stack, and combine them into a list of non-dropped-item entities near the position.", + player: "Take a position and maximum distance on the stack, and combine them into a list of players near the position.", + not_player: "Take a position and maximum distance on the stack, and combine them into a list of non-player characters near the position.", + living: "Take a position and maximum distance on the stack, and combine them into a list of living creatures near the position.", + not_living: "Take a position and maximum distance on the stack, and combine them into a list of non-living entities near the position.", + }, + }, + + lists: { + index: "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 $(l:casting/influences)$(thing)Null/$ if the number is out of bounds.", + slice: "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].", + append: "Remove the top of the stack, then add it to the end of the list at the top of the stack.", + unappend: "Remove the iota on the end of the list at the top of the stack, and add it to the top of the stack.", + add: "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.", + empty_list: "Push an empty list to the top of the stack.", + singleton: "Remove the top of the stack, then push a list containing only that element.", + abs: "Remove the list at the top of the stack, then push the number of elements in the list to the stack.", + reverse: "Reverse the list at the top of the stack.", + index_of: "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.", + remove_from: "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).", + replace: "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.", + last_n_list: "Remove $(italic)num/$ elements from the stack, then add them to a list at the top of the stack.", + splat: "Remove the list at the top of the stack, then push its contents to the stack.", + construct: "Remove the top iota, then add it as the first element to the list at the top of the stack.", + deconstruct: "Remove the first iota from the list at the top of the stack, then push that iota to the stack.", + }, + + patterns_as_iotas: { + "1": "One of the many peculiarities of this art is that $(italic)patterns themselves/$ can act as iotas-- I can even put them onto my stack when casting.$(br2)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.", + "2": "Fortunately, Nature has provided me with a set of $(l:casting/influences)influences/$ that I can use to work with patterns directly.$(br2)In short, $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ lets me add one pattern to the stack, and $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ let me add a whole list.", + escape: { + "1": "To use $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, I draw it, then another arbitrary pattern. That second pattern is added to the stack.", + "2": "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.$(br2)The usual use for this is to copy the pattern to a $(l:items/scroll)$(item)Scroll/$ or $(l:items/slate)$(item)Slate/$ using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, and then perhaps decorating with them.", + }, + parens: { + "1": "Drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$ makes my drawing of patterns act differently, for a time. Until I draw $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Retrospection/$, the patterns I draw are saved. Then, when I draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, they are added to the stack as a list iota.", + "2": "If I draw another $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Introspection/$, it'll still be saved to the list, but I'll then have to draw $(italic)two/$ $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$ to get back to normal casting.", + "3": "Also, I can escape the special behavior of $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ by drawing a $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ before them, which will simply add them to the list without affecting which the number of $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$ I need to return to casting.$(br2)If I draw two $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Considerations/$ in a row while $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)introspecting/$, it will add a single $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ to the list.", + }, + undo: "Finally, if I make a mistake while drawning patterns inside $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ I can draw $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Evanition/$ to remove the last pattern that I drew from the pattern list that is being constructed.", + }, + + readwrite: { + "1": "This section deals with the storage of $(thing)Iotas/$ in a more permanent medium. Nearly any iota can be stored to a suitable item, such as a $(l:items/focus)$(item)Focus/$ or $(l:items/spellbook)$(item)Spellbook/$), and read back later. Certain items, such as an $(l:items/abacus)$(item)Abacus/$, can only be read from.$(br2)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.", + "2": "There may be other entities I can interact with in this way. For example, a $(l:items/scroll)$(item)Scroll/$ hung on the wall can have its pattern read off of it.$(br2)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 $(l:items/focus)$(item)Focus/$ for them.", + read: "Copy the iota stored in the item in my other hand and add it to the stack.", + write: "Remove the top iota from the stack, and save it into the item in my other hand.", + "read/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is read out of an entity instead of my other hand.", + "write/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Gambit/$, but the iota is written to an entity instead of my other hand.$(br2)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.", + readable: "If the item in my other hand holds an iota I can read, returns True. Otherwise, returns False.", + "readable/entity": "Like $(l:patterns/readwrite#hexcasting:readable)$(action)Auditor's Reflection/$, but the readability of an entity is checked instead of my other hand.", + writable: "If I could save an iota into the item in my other hand, returns True. Otherwise, returns False.", + "writable/entity": "Like $(l:patterns/readwrite#hexcasting:writable)$(action)Assessor's Reflection/$, but the writability of an entity is checked instead of my other hand.", + "local.title": "The Ravenmind", + local: "Items are not the only places I can store information, however. I am also able to store that information in the _media of the _Hex itself, much like the stack, but separate. Texts refer to this as the $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$. It holds a single iota, much like a $(l:items/focus)$(item)Focus/$, and begins with $(l:casting/influences)$(thing)Null/$ like the same. It is preserved between iterations of $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, but only lasts as long as the _Hex it's a part of. Once I stop casting, the value will be lost.", + "write/local": "Removes the top iota from the stack, and saves it to my $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$, storing it there until I stop casting the _Hex.", + "read/local": "Copy the iota out of my $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$, which I likely just wrote with $(l:patterns/readwrite#hexcasting:write/local)$(action)Huginn's Gambit/$.", + }, + + meta: { + "eval.1": "Remove a pattern or list of patterns from the stack, then cast them as if I had drawn them myself with my $(l:items/staff)$(item)Staff/$ (until a $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ is encountered). If an iota is escaped with $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ or $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)its ilk/$, it will be pushed to the stack. Otherwise, non-patterns will fail.", + "eval.2": "This can be $(italic)very/$ powerful in tandem with $(l:items/focus)$(item)Foci/$.$(br2)It also makes the bureaucracy of Nature a \"Turing-complete\" system, according to one esoteric scroll I found.$(br2)However, it seems there's a limit to how many times a _Hex can cast itself-- Nature doesn't look kindly on runaway spells!$(br2)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.", + + "for_each.1": "Remove a list of patterns and a list from the stack, then cast the given pattern over each element of the second list.", + "for_each.2": "More specifically, for each element in the second list, it will:$(li)Create a new stack, with everything on the current stack plus that element$(li)Draw all the patterns in the first list$(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.$(br2)No wonder all the practitioners of this art go mad.", + + "halt.1": "This pattern forcibly halts a _Hex. This is mostly useless on its own, as I could simply just stop writing patterns, or put down my staff.", + "halt.2": "But when combined with $(l:patterns/meta#hexcasting:eval)$(action)Hermes'/$ or $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambits/$, it becomes $(italics)far/$ more interesting. Those patterns serve to 'contain' that halting, and rather than ending the entire _Hex, those gambits end instead. This can be used to cause $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$ not to operate on every iota it's given. An escape from the madness, as it were.", + + "eval/cc.1": "Cast a pattern or list of patterns from the stack exactly like $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$, except that a unique \"Jump\" iota is pushed to the stack beforehand. ", + "eval/cc.2": "When the \"Jump\"-iota is executed, it'll skip the rest of the patterns and jump directly to the end of the pattern list.$(p)While this may seem redundant given $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ exists, this allows you to exit $(italic)nested/$ $(l:patterns/meta#hexcasting:eval)$(action)Hermes'/$ invocations in a controlled way, where Charon only allows you to exit one.$(p)The \"Jump\" iota will apparently stay on the stack even after execution is finished... better not think about the implications of that.", + }, + + circle_patterns: { + disclaimer: "These patterns must be cast from a $(l:greatwork/spellcircles)$(item)Spell Circle/$; trying to cast them through a $(l:items/staff)$(item)Staff/$ will fail rather spectacularly.", + + "circle/impetus_pos": "Returns the position of the $(l:greatwork/impetus)$(item)Impetus/$ of this spell circle.", + "circle/impetus_dir": "Returns the direction the $(l:greatwork/impetus)$(item)Impetus/$ of this spell circle is facing as a unit vector.", + "circle/bounds/min": "Returns the position of the lower-north-west corner of the bounds of this spell circle.", + "circle/bounds/max": "Returns the position of the upper-south-east corner of the bounds of this spell circle.", + }, + + akashic_patterns: { + "akashic/read": "Read the iota associated with the given pattern out of the $(l:greatwork/akashiclib)$(item)Akashic Library/$ with its $(l:greatwork/akashiclib)$(item)Record/$ at the given position. This has no range limit. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + "akashic/write": "Associate the iota with the given pattern in the $(l:greatwork/akashiclib)$(item)Akashic Library/$ with its $(l:greatwork/akashiclib)$(item)Record/$ at the given position. This $(italic)does/$ have a range limit. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + }, + + // Normal Spells - "make_battery.1": "Infuse a bottle with _media to form a $(l:items/phials)$(item)Phial./$", - "make_battery.2": "Similarly to the spells for $(l:patterns/spells/hexcasting)$(action)Crafting Casting Items/$, I must hold a $(item)Glass Bottle/$ in my other hand, and provide the spell with a dropped stack of $(l:items/amethyst)$(item)Amethyst/$. See $(l:items/phials)this page/$ for more information.$(br2)Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", + itempicking: { + "1": "Certain spells, such as $(l:patterns/spells/blockworks#hexcasting:place_block)$(action)Place Block/$, 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.$(br2)This process is called \"picking an item.\"", + "2": "More specifically:$(li)First, the spell will search for the first valid item in my hotbar to the $(italic)right of my $(l:items/staff)$(item)staff/$, wrapping around at the right-hand side, and starting at the first slot if my $(l:items/staff)$(item)staff/$ is in my off-hand.$(li)Second, the spell will draw that item from as $(italic)far back in my inventory/$ as possible, prioritizing the main inventory over the hotbar.", + "3": "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.", + }, + + basic_spell: { + "explode.1": "Remove a number and vector from the stack, then create an explosion at the given location with the given power.", + "explode.2": "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.$(br2)Strangely, this explosion doesn't seem to harm me. Perhaps it's because $(italic)I/$ am the one exploding?$(br2)Costs a negligible amount at power 0, plus 3 extra $(l:items/amethyst)$(item)Amethyst Dust/$ per point of explosion power.", + + "explode.fire.1": "Remove a number and vector from the stack, then create a fiery explosion at the given location with the given power.", + "explode.fire.2": "Costs one $(l:items/amethyst)$(item)Amethyst Dust/$, plus about 3 extra $(l:items/amethyst)$(item)Amethyst Dust/$s per point of explosion power. Otherwise, the same as $(l:patterns/spells/basic#hexcasting:explode)$(action)Explosion/$, except with fire.", + + add_motion: "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 $(l:items/amethyst)$(item)Amethyst Dust/$ equal to the square of the length of the vector, plus one for every Impulse except the first targeting an entity.", + blink: "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 $(l:items/amethyst)$(item)Amethyst Shard/$ per two blocks travelled.", + + "beep.1": "Remove a vector and two numbers from the stack. Plays an $(thing)instrument/$ defined by the first number at the given location, with a $(thing)note/$ defined by the second number. Costs a negligible amount of _media.", + "beep.2": "There appear to be 16 different $(thing)instruments/$ and 25 different $(thing)notes/$. Both are indexed by zero.$(br2)These seem to be the same instruments I can produce with a $(item)Note Block/$, though the reason for each instrument's number being what it is eludes me.$(br2)Either way, I can find the numbers I need to use by inspecting a $(item)Note Block/$ through a $(l:items/lens)$(item)Scrying Lens/$.", + }, + + blockworks: { + place_block: "Remove a location from the stack, then pick a block item and place it at the given location.$(br)Costs about an eighth of one $(l:items/amethyst)$(item)Amethyst Dust/$.", + break_block: "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 about an eighth of one $(l:items/amethyst)$(item)Amethyst Dust/$.", + create_water: "Summon a block of water (or insert up to a bucket's worth) into a block at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + destroy_water: "Drains either a liquid container at, or a body of liquid around, the given position. Costs about two $(l:items/amethyst)$(item)Charged Amethyst/$.", + conjure_block: "Conjure an ethereal, but solid, block that sparkles with my pigment at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + conjure_light: "Conjure a magical light that softly glows with my pigment at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + bonemeal: "Encourage a plant or sapling at the target position to grow, as if $(item)Bonemeal/$ was applied. Costs a bit more than one $(l:items/amethyst)$(item)Amethyst Dust/$.", + edify: "Forcibly infuse _media into the sapling at the target position, causing it to grow into an $(l:items/edified)$(thing)Edified Tree/$. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", + ignite: "Start a fire on top of the given location, as if a $(item)Fire Charge/$ was applied. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + extinguish: "Extinguish blocks in a large area. Costs about six $(l:items/amethyst)$(item)Amethyst Dust/$.", + }, + + nadirs: { + "1": "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).$(br2)Each one has a \"base cost;\" the actual cost is equal to that base cost, multiplied by the potency squared.", + "2": "According to certain legends, these spells and their sisters, the $(l:patterns/great_spells/zeniths)$(action)Zeniths/$, 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...\"$(br2)Perhaps that is the reason for their peculiar names.", + + "potion/weakness": "Inflicts $(thing)weakness/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 10 seconds.", + "potion/levitation": "Inflicts $(thing)levitation/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.", + "potion/wither": "Inflicts $(thing)withering/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.", + "potion/poison": "Inflicts $(thing)poison/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.", + "potion/slowness": "Inflicts $(thing)slowness/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.", + }, + + hexcasting_spell: { + basics: "These three spells each create an $(l:items/hexcasting)$(thing)item that casts a _Hex./$$(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 $(l:items/amethyst)$(item)Amethyst/$ to form the item's battery.$(br2)See $(l:items/hexcasting)this entry/$ for more information.", + "craft/cypher": "Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", + "craft/trinket": "Costs about five $(l:items/amethyst)$(item)Charged Amethysts/$.", + "craft/artifact": "Costs about ten $(l:items/amethyst)$(item)Charged Amethysts/$.", + + "recharge.1": "Recharge a _media-containing item in my other hand. Costs about one $(l:items/amethyst)$(item)Amethyst Shard/$.", + "recharge.2": "This spell is cast in a similar method to the crafting spells; an entity representing a dropped stack of $(l:items/amethyst)$(item)Amethyst/$ is provided, and recharges the _media battery of the item in my other hand.$(br2)This spell $(italic)cannot/$ recharge the item farther than its original battery size.", + + "erase.1": "Clear a _Hex-containing item in my other hand. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + "erase.2": "The spell will also void all the _media stored inside the item, releasing it back to Nature and returning the item to a perfectly clean slate. This way, I can re-use $(l:items/hexcasting)$(item)Trinkets/$ I have put an erroneous spell into, for example.$(br2)This also works to clear a $(l:items/focus)$(item)Focus/$ or $(l:items/spellbook)$(item)Spellbook/$ page, unsealing them in the process.", + }, + + sentinels: { + "1": "$(italic)Hence, away! Now all is well,$(br)One aloof stand sentinel./$$(br2)A $(l:patterns/spells/sentinels)$(thing)Sentinel/$ is a mysterious force I can summon to assist in the casting of _Hexes, like a familiar or guardian spirit. It appears as a spinning geometric shape to my eyes, but is invisible to everyone else.", + "2": "It has several interesting properties:$(li)It does not appear to be tangible; no one can touch it.$(li)Only my _Hexes can interact with it.$(li)Once summoned, it stays in place until banished.$(li)I am always able to see it if I'm close enough, even through solid objects.", + + "sentinel/create": "Summons my $(l:patterns/spells/sentinels)$(thing)sentinel/$ at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.", + "sentinel/destroy": "Banish my $(l:patterns/spells/sentinels)$(thing)sentinel/$, and remove it from the world. Costs a negligible amount of _media.", + "sentinel/get_pos": "Add the position of my $(l:patterns/spells/sentinels)$(thing)sentinel/$ to the stack, or $(l:casting/influences)$(thing)Null/$ if it isn't summoned. Costs a negligible amount of _media.", + "sentinel/wayfind": "Transform the position vector on the top of the stack into a unit vector pointing from that position to my $(l:patterns/spells/sentinels)$(thing)sentinel/$, or $(l:casting/influences)$(thing)Null/$ if it isn't summoned. Costs a negligible amount of _media.", + }, + + colorize: "I must be holding a $(l:items/pigments)$(item)Pigment/$ 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 $(l:items/amethyst)$(item)Amethyst Dust/$.", + flights: { + "1": "Although it seems that true, limitless flight is out of my grasp, I have nonetheless found some methods of holding one in the sky, each with their respective drawbacks.$(br2)All forms produce a shimmer of excess _media; as the spell gets closer to ending, the sparks are shot through with more red and black.", + "2": "Other forms of flight do exist, of course. For example, a combination of $(l:patterns/spells/basic#hexcasting:add_motion)$(action)Impulse/$ and $(l:patterns/spells/nadirs#hexcasting:potion/levitation)$(action)Blue Sun's Nadir/$ has been used since antiquity for a flight of sorts.$(br2)I've also heard tell of a thin membrane worn on the back that allows the ability to glide. From my research, I believe the Great spell $(l:patterns/great_spells/altiora)$(action)Altiora/$ may be used to mimic it.", + + "range.1": "A flight limited in its range.", + "range.2": "The second argument is a horizontal radius, in meters, in which the spell is stable. Moving outside of that radius will end the spell, dropping me out of the sky. As long as I stay inside the safe zone, however, the spell lasts indefinitely. An additional shimmer of _media marks the origin point of the safe zone. $(br2)Costs about 1 $(l:items/amethyst)$(item)Amethyst Dust/$ per meter of safety.", + + "time.1": "A flight limited in its duration.", + "time.2": "The second argument is an amount of time in seconds for which the spell is stable. After that time, the spell ends and I am dropped from the sky. $(br2)It is relatively expensive at about 1 $(l:items/amethyst)$(item)Charged Crystal/$ per second of flight; I believe it is best suited for travel.", + }, + + create_lava: { + "1": "Summon a block of lava (or insert up to a bucket's worth) into a block at the given position. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", + "2": "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.$(br2)Well, no one said tracing the deep secrets of the universe was going to be an easy time.", + }, + + weather_manip: { + lightning: "I command the heavens! This spell will summon a bolt of lightning to strike the earth where I direct it. Costs about three $(l:items/amethyst)$(item)Amethyst Shards/$.", + summon_rain: "I control the clouds! This spell will summon rain across the world I cast it upon. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$. Does nothing if it is already raining.", + dispel_rain: "A counterpart to summoning rain. This spell will dispel rain across the world I cast it upon. Costs about one $(l:items/amethyst)$(item)Amethyst Shard/$. Does nothing if the skies are already clear.", + }, + + altiora: { + "1": "Summon a sheaf of _media about me in the shape of wings, endowed with enough substance to allow gliding.", + "2": "Using them is identical to using $(item)Elytra/$; the target (which must be a player) is lofted into the air, after which pressing $(k:jump) will deploy the wings. The wings are fragile, and break upon touching any surface. Longer flights may benefit from $(l:patterns/spells/basic#hexcasting:add_motion)$(action)Impulse/$ or (for the foolhardy) $(item)Fireworks/$.$(br2)Costs about one $(l:items/amethyst)$(item)Charged Crystal/$.", + }, + + "teleport/great": { + "1": "Far more powerful than $(l:patterns/spells/basic#hexcasting:blink)$(action)Blink/$, this spell lets me teleport nearly anywhere in the entire world! There does seem to be a limit, but it is $(italic)much/$ greater than the normal radius of influence I am used to.", + "2": "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 $(l:items/amethyst)$(item)Charged Amethyst/$.$(br2)The transference is not perfect, and it seems when teleporting something as complex as a player, their inventory doesn't $(italic)quite/$ 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.", + }, + + zeniths: { + "1": "This family of spells all impart a positive potion effect upon an entity, similar to the $(l:patterns/spells/nadirs)$(action)Nadirs/$. However, these have their _media costs increase with the $(italic)cube/$ of the potency.", + + "potion/regeneration": "Bestows $(thing)regeneration/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.", + "potion/night_vision": "Bestows $(thing)night vision/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.", + "potion/absorption": "Bestows $(thing)absorption/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.", + "potion/haste": "Bestows $(thing)haste/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.", + "potion/strength": "Bestows $(thing)strength/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.", + }, + + greater_sentinel: { + "1": "Summon a greater version of my $(l:patterns/spells/sentinels)$(thing)Sentinel/$. Costs about two $(l:items/amethyst)$(item)Amethyst Dust/$.", + "2": "The stronger $(l:patterns/spells/sentinels)$(thing)sentinel/$ 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 $(l:patterns/spells/sentinels)$(thing)sentinel/$, about 16 blocks. In other words, no matter where in the world I am, I can interact with things around my $(l:patterns/spells/sentinels)$(thing)sentinel/$ (the mysterious forces of chunkloading notwithstanding).", + }, + + make_battery: { + "1": "Infuse a bottle with _media to form a $(l:items/phials)$(item)Phial./$", + "2": "Similarly to the spells for $(l:patterns/spells/hexcasting)$(action)Crafting Casting Items/$, I must hold a $(item)Glass Bottle/$ in my other hand, and provide the spell with a dropped stack of $(l:items/amethyst)$(item)Amethyst/$. See $(l:items/phials)this page/$ for more information.$(br2)Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", + }, + "brainsweep_spell.1": "I cannot make heads or tails of this spell... To be honest, I'm not sure I want to know what it does.", - - - - - "lore.cardamom1.1": "$(italic)Full title: Letter from Cardamom Steles to Her Father, #1/$$(br2)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.", - "lore.cardamom1.2": "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.", - "lore.cardamom1.3": "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.", - "lore.cardamom1.4": "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!", - "lore.cardamom1.5": "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.", - "lore.cardamom1.6": "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... ", - "lore.cardamom1.7": "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!", - "lore.cardamom1.8": "So, I suppose I will write again in three months' time.$(br2)Yours,$(br)-- Cardamom Steles", - - - "lore.cardamom2.1": "$(italic)Full title: Letter from Cardamom Steles to Her Father, #2/$$(br2)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.", - "lore.cardamom2.2": "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.)", - "lore.cardamom2.3": "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...", - "lore.cardamom2.4": "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.$(br2)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.", - "lore.cardamom2.5": "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.$(br2)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.", - "lore.cardamom2.6": "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.$(br2)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.", - "lore.cardamom2.7": "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.$(br2)Yours,$(br)-- Cardamom Steles", - - - "lore.cardamom3.1": "$(italic)Full title: Letter from Cardamom Steles to her father, #3, part 1/2/$$(br2)Dear Papa,$(br)Two very peculiar things have happened since I last wrote.$(br2)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.", - "lore.cardamom3.2": "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.$(br2)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.", - "lore.cardamom3.3": "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.", - "lore.cardamom3.4": "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.", - "lore.cardamom3.5": "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.", - "lore.cardamom3.6": "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.$(br2)The next morning we readied our lanterns and descended into the earth.", - "lore.cardamom3.7": "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.$(br2)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.", - "lore.cardamom3.8": "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.", - "lore.cardamom3.9": "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.", - "lore.cardamom3.10": "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.$(br2)I did manage, however, to hide a shard of the crystal in my knapsack.$(br2)We spent nearly the whole day mining, excavating most of the crystal by the time the prefects' chronometer said the sun would set soon.", - "lore.cardamom3.11": "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.", - "lore.cardamom3.12": "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.$(br2)Yours,$(br)-- Cardamom Steles", - - - "lore.cardamom4.1": "$(italic)Full title: Letter from Cardamom Steles to her father, #3, part 2/2/$$(br2)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.", - "lore.cardamom4.2": "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.", - "lore.cardamom4.3": "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.$(br2)I knocked on the door of one of the houses to no response. The next two houses, too, seemed completely empty.", - "lore.cardamom4.4": "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.$(br2)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.", - "lore.cardamom4.5": "But then the clouds shifted, and moonlight glinted across the bed's occupant.$(br2)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.", - "lore.cardamom4.6": "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.", - "lore.cardamom4.7": "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 $(italic)thing/$ I had seen. I sprinted into the darkness of the forest, away from those terrible, terrible animal eyes in those distorted faces.$(br2)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.", - "lore.cardamom4.8": "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.$(br2)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.", - "lore.cardamom4.9": "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.$(br2)I chose not to tell her of the village full of monsters.", - "lore.cardamom4.10": "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.$(br2)Yours,$(br)-- Cardamom Steles", - - - "lore.cardamom5.1": "$(italic)Full title: Letter from Cardamom Steles to her father, #4/$$(br2)Amanita has disappeared.$(br2)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--", - "lore.cardamom5.2": "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 $(italic)vanished/$, into thin air, into non-being.$(br2)Where did they $(italic)go/$?", - "lore.cardamom5.3": "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.$(br2)I think they've started scanning the letters, we write too...", - "lore.cardamom5.4": "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.", - "lore.cardamom5.5": "i can no longer write, my hands shake so much, please, rescue us.", - - - "lore.inventory.1": "Cell 39, Restoration Log #72, Detainment Center Beta$(br2)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.", - "lore.inventory.2": "I see hexagons when I close my eyes.$(br2)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.", - "lore.inventory.3": "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.$(br2)My bones are fragile. My joints are rough and sharp.", - "lore.inventory.4": "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", - "lore.inventory.5": "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$(br2)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", - "lore.inventory.6": "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$(br2)it h urts to think. quite literally. the thoughts are so wasteful now the leftover striates directly onto the million microcrystals", - "lore.inventory.7": "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$(br2)i remember camping out and seeing the corps setting up their circle all around a village and the ground under my feet rumbling", - "lore.inventory.8": "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", - "lore.inventory.9": "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$(br2)But they locked me up insted and i dont know if it's a mercy", - "lore.inventory.10": "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", - "lore.inventory.11": "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", - "lore.inventory.12": "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$(br2)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", - "lore.inventory.13": "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$(br2)i can see them reading this . they ... will be too far gone to care", - - - "lore.experiment1.1": "$(italic)I only managed to find these five entries from this log./$$(br2)Detonation #26$(li)Location: Carpenter's North$(li)Population: 174$(li)Nodes Formed: 3$(li)Node Distance from Epicenter: 55-80m vertical, 85-156m horizontal$(li)Media Generation: 1320 uθ/min", - "lore.experiment1.2": "Detonation #27$(li)Location: Brackenfalls$(li)Population: 79$(li)Nodes Formed: 1$(li)Node Distance from Epicenter: 95m vertical, 67m horizontal$(li)Media Generation: 412 uθ/min", - "lore.experiment1.3": "Detonation #28$(li)Location: Greyston$(li)Population: approx. 1000$(li)Nodes Formed: 18$(li)Node Distance from Epicenter: 47-110m vertical, 59-289m horizontal$(li)Media Generation: 8478 uθ/min", - "lore.experiment1.4": "Detonation #29$(li)Location: Unnamed; village two days west of Greyston$(li)Population: 35$(li)Nodes Formed: 0$(li)Node Distance from Epicenter: N/A$(li)Media Generation: N/A$(br2)Note: inhabitants still affected in the normal way", - "lore.experiment1.5": "Detonation #30$(li)Location: Boiling Brook$(li)Population: 231$(li)Nodes Formed: 4$(li)Node Distance from Epicenter: 61-89m vertical, 78-191m horizontal$(li)Media Generation: 1862 uθ/min", - "lore.experiment1.6": "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.$(br2)Effects on inhabitants still consistently more severe than with single-target testing, especially the physical effects.", - - - "lore.experiment2.1": "$(italic)These documents were heavily redacted. I have copied the readable text from them here./$$(br2)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).", - "lore.experiment2.2": "Heartrate 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. $(br2) ...", - "lore.experiment2.3": "Subject #7 \"T.C.\"$(br)Similar results several hours after the procedure to other subjects: able to stand, perform simple tasks... $(br2)Subject #11 \"R.S.\"$(br)Sedated before procedure...$(br2) ...", - "lore.experiment2.4": "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.$(br2)For further testing: how does the procedure affect previous Hexcasters vs. non-Hexcasters?$(br2) ...", - - - - "interop.1": "The art of _Hexcasting is versatile. If I find that my world has been $(italic)modified/$ by certain other powers, it's possible that I may use _Hexcasting in harmony and combination with them.", - "interop.2": "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.$(br2)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.", - "interop.3": "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.", - - - "interop.gravity.1": "I have discovered actions to get and set an entity's gravity. I find them interesting, if slightly nauseating.$(br2)Interestingly, although $(l:patterns/great_spells/flight)$(action)Flight/$ 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.", - "interop.gravity.get": "Get the main direction gravity pulls the given entity in, as a unit vector. For most entities, this will be down, <0, -1, 0>.", - "interop.gravity.set": "Set the main direction gravity pulls the given entity in. The given vector will be coerced into the nearest axis, as per $(l:patterns/math#hexcasting:coerce_axial)$(action)Axial Purification/$. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", - - - "interop.pehkui.1": "I have discovered methods of changing the size of entities, and querying how much larger or smaller they are than normal.", - "interop.pehkui.get": "Get the scale of the entity, as a proportion of their normal size. For most entities, this will be 1.", - "interop.pehkui.set": "Set the scale of the entity, passing in a proportion of their normal size. Costs about 1 $(item)Amethyst Shard/$." - } - } + + lore: { + cardamom1: { + "1": "$(italic)Full title: Letter from Cardamom Steles to Her Father, #1/$$(br2)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.", + "2": "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.", + "3": "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.", + "4": "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!", + "5": "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.", + "6": "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... ", + "7": "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!", + "8": "So, I suppose I will write again in three months' time.$(br2)Yours,$(br)-- Cardamom Steles", + }, + + cardamom2: { + "1": "$(italic)Full title: Letter from Cardamom Steles to Her Father, #2/$$(br2)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.", + "2": "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.)", + "3": "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...", + "4": "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.$(br2)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.", + "5": "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.$(br2)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.", + "6": "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.$(br2)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.", + "7": "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.$(br2)Yours,$(br)-- Cardamom Steles", + }, + + cardamom3: { + "1": "$(italic)Full title: Letter from Cardamom Steles to her father, #3, part 1/2/$$(br2)Dear Papa,$(br)Two very peculiar things have happened since I last wrote.$(br2)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.", + "2": "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.$(br2)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.", + "3": "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.", + "4": "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.", + "5": "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.", + "6": "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.$(br2)The next morning we readied our lanterns and descended into the earth.", + "7": "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.$(br2)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.", + "8": "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.", + "9": "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.", + "10": "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.$(br2)I did manage, however, to hide a shard of the crystal in my knapsack.$(br2)We spent nearly the whole day mining, excavating most of the crystal by the time the prefects' chronometer said the sun would set soon.", + "11": "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.", + "12": "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.$(br2)Yours,$(br)-- Cardamom Steles", + }, + + cardamom4: { + "1": "$(italic)Full title: Letter from Cardamom Steles to her father, #3, part 2/2/$$(br2)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.", + "2": "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.", + "3": "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.$(br2)I knocked on the door of one of the houses to no response. The next two houses, too, seemed completely empty.", + "4": "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.$(br2)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.", + "5": "But then the clouds shifted, and moonlight glinted across the bed's occupant.$(br2)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.", + "6": "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.", + "7": "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 $(italic)thing/$ I had seen. I sprinted into the darkness of the forest, away from those terrible, terrible animal eyes in those distorted faces.$(br2)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.", + "8": "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.$(br2)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.", + "9": "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.$(br2)I chose not to tell her of the village full of monsters.", + "10": "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.$(br2)Yours,$(br)-- Cardamom Steles", + }, + + cardamom5: { + "1": "$(italic)Full title: Letter from Cardamom Steles to her father, #4/$$(br2)Amanita has disappeared.$(br2)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--", + "2": "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 $(italic)vanished/$, into thin air, into non-being.$(br2)Where did they $(italic)go/$?", + "3": "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.$(br2)I think they've started scanning the letters, we write too...", + "4": "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.", + "5": "i can no longer write, my hands shake so much, please, rescue us.", + }, + + inventory: { + "1": "Cell 39, Restoration Log #72, Detainment Center Beta$(br2)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.", + "2": "I see hexagons when I close my eyes.$(br2)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.", + "3": "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.$(br2)My bones are fragile. My joints are rough and sharp.", + "4": "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", + "5": "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$(br2)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", + "6": "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$(br2)it h urts to think. quite literally. the thoughts are so wasteful now the leftover striates directly onto the million microcrystals", + "7": "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$(br2)i remember camping out and seeing the corps setting up their circle all around a village and the ground under my feet rumbling", + "8": "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", + "9": "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$(br2)But they locked me up insted and i dont know if it's a mercy", + "10": "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", + "11": "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", + "12": "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$(br2)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", + "13": "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$(br2)i can see them reading this . they ... will be too far gone to care", + }, + + experiment1: { + "1": "$(italic)I only managed to find these five entries from this log./$$(br2)Detonation #26$(li)Location: Carpenter's North$(li)Population: 174$(li)Nodes Formed: 3$(li)Node Distance from Epicenter: 55-80m vertical, 85-156m horizontal$(li)Media Generation: 1320 uθ/min", + "2": "Detonation #27$(li)Location: Brackenfalls$(li)Population: 79$(li)Nodes Formed: 1$(li)Node Distance from Epicenter: 95m vertical, 67m horizontal$(li)Media Generation: 412 uθ/min", + "3": "Detonation #28$(li)Location: Greyston$(li)Population: approx. 1000$(li)Nodes Formed: 18$(li)Node Distance from Epicenter: 47-110m vertical, 59-289m horizontal$(li)Media Generation: 8478 uθ/min", + "4": "Detonation #29$(li)Location: Unnamed; village two days west of Greyston$(li)Population: 35$(li)Nodes Formed: 0$(li)Node Distance from Epicenter: N/A$(li)Media Generation: N/A$(br2)Note: inhabitants still affected in the normal way", + "5": "Detonation #30$(li)Location: Boiling Brook$(li)Population: 231$(li)Nodes Formed: 4$(li)Node Distance from Epicenter: 61-89m vertical, 78-191m horizontal$(li)Media Generation: 1862 uθ/min", + "6": "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.$(br2)Effects on inhabitants still consistently more severe than with single-target testing, especially the physical effects.", + }, + + experiment2: { + "1": "$(italic)These documents were heavily redacted. I have copied the readable text from them here./$$(br2)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).", + "2": "Heartrate 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. $(br2) ...", + "3": "Subject #7 \"T.C.\"$(br)Similar results several hours after the procedure to other subjects: able to stand, perform simple tasks... $(br2)Subject #11 \"R.S.\"$(br)Sedated before procedure...$(br2) ...", + "4": "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.$(br2)For further testing: how does the procedure affect previous Hexcasters vs. non-Hexcasters?$(br2) ...", + }, + }, + // ^ lore + + interop: { + "1": "The art of _Hexcasting is versatile. If I find that my world has been $(italic)modified/$ by certain other powers, it's possible that I may use _Hexcasting in harmony and combination with them.", + "2": "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.$(br2)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.", + "3": "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.", + + gravity: { + "1": "I have discovered actions to get and set an entity's gravity. I find them interesting, if slightly nauseating.$(br2)Interestingly, although $(l:patterns/great_spells/flight)$(action)Flight/$ 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.", + get: "Get the main direction gravity pulls the given entity in, as a unit vector. For most entities, this will be down, <0, -1, 0>.", + set: "Set the main direction gravity pulls the given entity in. The given vector will be coerced into the nearest axis, as per $(l:patterns/math#hexcasting:coerce_axial)$(action)Axial Purification/$. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.", + }, + + pehkui: { + "1": "I have discovered methods of changing the size of entities, and querying how much larger or smaller they are than normal.", + get: "Get the scale of the entity, as a proportion of their normal size. For most entities, this will be 1.", + set: "Set the scale of the entity, passing in a proportion of their normal size. Costs about 1 $(item)Amethyst Shard/$.", + }, + }, + }, + // ^ page + }, + // ^ hexcasting } diff --git a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 new file mode 100644 index 0000000000..cf82567e18 --- /dev/null +++ b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 @@ -0,0 +1,2027 @@ +// A work in progress +{ + "item.hexcasting": { + book: "Рунный блокнот", + + staff: { + oak: "Дубовый Посох", + spruce: "Еловый Посох", + birch: "Посох из Берёзы", + jungle: "Посох из Тропического дерева", + acacia: "Посох из Акации", + dark_oak: "Посох из Тёмного Дуба", + crimson: "Багровый Посох", + warped: "Искаженный Посох", + mangrove: "Посох из Мангровых зарослей", + cherry: "Вишнёвый Посох", + bamboo: "Бамбуковый Посох", + edified: "Посох Созидания", + quenched: "Погашенный Посох", + mindsplice: "Посох Разума", + }, + + amethyst_dust: "Аметистовая Пыль", + charged_amethyst: "Заряженный Аметист", + quenched_allay_shard: "Осколок Погашенного Сплава", + + scroll_small: { + "": "Малый Свиток", + of: "Как вы получили этот элемент %s", + empty: "Пустой Малый Свиток", + }, + + scroll_medium: { + "": "Свиток", + of: "Как вы получили этот элемент %s", + empty: "Пустой Свиток", + }, + + scroll: { + "": "Большой Свиток", + of: "Древний свиток %s", + empty: "Пустой Большой Свиток", + }, + + focus: { + "": "Талисман", + sealed: "Запечатанный Талисман", + }, + + thought_knot: "Узел Мыслей", + spellbook: "Книга заклинаний", + cypher: "Побрякушка", + trinket: "Штуковина", + artifact: "Артефакт", + battery: "Сосуд мысли", + lens: "Линза прозрения", + abacus: "Рунные счеты", + jeweler_hammer: "Ювелирный Молоток", + sub_sandwich: "ЗубоДробительный бутерброд", + + dye_colorizer_: { + white: "Белый Пигмент", + orange: "Оранжевый Пигмент", + magenta: "Пурпурный Пигмент", + light_blue: "Светло-голубой Пигмент", + yellow: "Желтый Пигмент", + lime: "Лаймовый Пигмент", + pink: "Розовый Пигмент", + gray: "Серый Пигмент", + light_gray: "Светло-Серый Пигмент", + cyan: "Циановый Пигмент", + purple: "Фиолетовый Пигмент", + blue: "Синий Пигмент", + brown: "Коричневый Пигмент", + green: "Зелёный Пигмент", + red: "Красный Пигмент", + black: "Черный Пигмент", + }, + + pride_colorizer_: { + agender: "Agender Pigment", + aroace: "Aroace Pigment", + aromantic: "Aromantic Pigment", + asexual: "Asexual Pigment", + bisexual: "Bisexual Pigment", + demiboy: "Demiboy Pigment", + demigirl: "Demigirl Pigment", + gay: "Gay Pigment", + genderfluid: "Genderfluid Pigment", + genderqueer: "Genderqueer Pigment", + intersex: "Intersex Pigment", + lesbian: "Lesbian Pigment", + nonbinary: "Non-Binary Pigment", + pansexual: "Pansexual Pigment", + plural: "Plural Pigment", + transgender: "Transgender Pigment", + }, + + uuid_colorizer: "Пигмент Души", + default_colorizer: "Чистый Пигмент", + + creative_unlocker: { + "": "Медиакуб", + for_emphasis: "Безграничные мысли", + tooltip: "Потребляйте, чтобы разблокировать все знания %s.", + mod_name: "Hexcasting", + }, + + lore_fragment: { + "": "Фрагмент истории", + all: "Кажется, я постиг все, что может предложить этот мир.", + }, + }, + + "entity.hexcasting": { + wall_scroll: "Висящий Свиток", + }, + + "block.hexcasting": { + conjured_light: "Магический Свет", + conjured_block: "Магический Блок", + + directrix: { + empty: "Пустой Направитель", + redstone: "Направитель Каменщика", + boolean: "Логический Направитель", + }, + + impetus: { + empty: "Пустой Инициатор", + rightclick: "Инициатор Инструментальщика", + look: "Инициатор Лучника", + redstone: "Инициатор Священника", + }, + + akashic_: { + record: "Запись Акаши", + bookshelf: "Акаши Книжная Полка", + connector: "Лигатура Акаши", + }, + + slate: { + "": "Скрижаль", + blank: "Пустая Скрижаль", + written: "Начертанная Скрижаль", + }, + + slate_: { + block: "Блок Скрижалей", + tiles: "Плитка из Скражалей", + bricks: "Кирпичи из Скрижалей", + bricks_small: "Маленькие кирпичи из Скрижалей", + pillar: "Колонна из Скрижалей", + }, + + amethyst_: { + dust_block: "Блок Аметистовой Пыли", + tiles: "Аметистовая Плитка", + bricks: "Аметистовые Кирпичи", + bricks_small: "Маленькие Аметистовые Кирпичи", + pillar: "Аметистовая Колонна", + }, + + slate_amethyst_: { + tiles: "Сланцево-аметистовые плитки", + bricks: "Сланцево-аметистовые кирпичи", + bricks_small: "Малые сланцево-аметистовые кирпичи", + pillar: "Сланцево-аметистовая колонна", + }, + + scroll_paper: "Бумага для свитков", + ancient_scroll_paper: "Древняя бумага для свитков", + scroll_paper_lantern: "Бумажный Фонарь", + ancient_scroll_paper_lantern: "Древний Бумажный Фонарь", + amethyst_sconce: "Аметистовый Подсвечник", + + edified_: { + log: "Бревно Созидания", + log_amethyst: "Аметистовое Бревно Созидания", + log_aventurine: "Авантюриновое Бревно Созидания", + log_citrine: "Цитриновое Бревно Созидания", + log_purple: "Фиолетовое Бревно Созидания", + wood: "Древесина Созидания", + planks: "Доски Созидания", + panel: "Panel Созидания", + tile: "Плитка Созидания", + door: "Дверь Созидания", + trapdoor: "Люк Созидания", + stairs: "Лестница Созидания", + slab: "Полу Блок Созидания", + button: "Кнопка Созидания", + pressure_plate: "Нажимная Плита Созидания", + fence: "Ограда Созидания", + fence_gate: "Ворота Созидания", + }, + + stripped_edified_log: "Обтесанное Бревно Созидания", + stripped_edified_wood: "Обтесанная Древесина Созидания", + + amethyst_edified_leaves: "Аметистовые Листья Созидания", + aventurine_edified_leaves: "Авентюриновые Листья Созидания", + citrine_edified_leaves: "Цитриновые Листья Созидания", + + quenched_allay: "Погашенный Сплав", + + quenched_allay_: { + tiles: "Плитка из Погашенного Сплава", + bricks: "Кирпичи из Погашенного Сплава", + bricks_small: "Малые Кирпичи из Погашенного Сплава", + }, + }, + + "itemGroup.hexcasting": { + "": "Hexcasting", + creative_tab: "Hexcasting", + }, + + "gui.hexcasting": { + spellcasting: "Hex Grid", + }, + + "tag.hexcasting": { + staves: "Посохи", + edified_logs: "Брёвна Созидани", + edified_planks: "Доски Созидания", + phial_base: "Пустой Сосуд", + }, + + "tag.item.hexcasting": { + brainswept_circle_components: "Компоненты Круга Очистки Разума", + directrices: "Направители", + grants_root_advancement: "Grants Rood Advancement", + impeti: "Инициаторы", + seal_materials: "Запечатанные материалы", + }, + + "emi.category.hexcasting": { + brainsweep: "Очистка Разума", + "craft.battery": "Создать пузырь мыслей", + edify: "Саженец Созидания", + villager_leveling: "Уровень Торговли", + villager_profession: "Профессия Жителя", + }, + + "text.autoconfig.hexcasting": { + title: "Hexcasting Config", + + category: { + common: "Common", + client: "Client", + server: "Server", + }, + + option: { + common: { + dustMediaAmount: { + "": "Количество Мысли в Пыли", + "@Tooltip": "Сколько мысли вмещает предмет из Аметистовой пыли.", + }, + shardMediaAmount: { + "": "Количество Мысли в Осколке", + "@Tooltip": "Сколько мысли вмещает осколок аметиста", + }, + chargedCrystalMediaAmount: { + "": "Количество Мысли в Заряженном Кристалле Аметиста", + "@Tooltip": "Сколько Media стоит один заряженный кристалл аметиста", + }, + mediaToHealthRate: { + "": "Влияние Мысли на уровень Здоровья", + "@Tooltip": "Сколько мысли стоит половинка сердца при использовании магии за жизни", + }, + cypherCooldown: { + "": "Время восстановления Побрякушки", + "@Tooltip": "Время восстановления Побрякушки в тиках", + }, + trinketCooldown: { + "": "Время восстановления Штуковины", + "@Tooltip": "Время восстановления Штуковины в тиках", + }, + artifactCooldown: { + "": "Время восстановления Артефакта", + "@Tooltip": "Время восстановления Артефакта в тиках", + }, + }, + + client: { + ctrlTogglesOffStrokeOrder: { + "": "Ctrl Toggles Off Stroke Order", + "@Tooltip": "Whether the ctrl key will instead turn *off* the color gradient on patterns", + }, + invertSpellbookScrollDirection: { + "": "Invert Spellbook Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the spellbook, and vice versa", + }, + invertAbacusScrollDirection: { + "": "Invert Abacus Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the page index of the abacus, and vice versa", + }, + gridSnapThreshold: { + "": "Grid Snap Threshold", + "@Tooltip": "When using a staff, the distance from one dot you have to go to snap to the next dot, where 0.5 means 50% of the way (0.5-1)", + }, + }, + + server: { + opBreakHarvestLevel: { + "": "Break Harvest Level", + "@Tooltip": "The harvest level of the Break Block spell.\n0 = wood, 1 = stone, 2 = iron, 3 = diamond, 4 = netherite.", + }, + maxOpCount: { + "": "Max Action Count", + "@Tooltip": "The maximum number of actions that can be executed in one tick, to avoid hanging the server.", + }, + maxSpellCircleLength: { + "": "Max Spell Circle Length", + "@Tooltip": "The maximum number of slates in a spell circle", + }, + actionDenyList: { + "": "Action Deny List", + "@Tooltip": "Resource locations of disallowed actions. Trying to cast one of these will result in a mishap. For example, hexcasting:get_caster will prevent Mind's Reflection", + }, + circleActionDenyList: { + "": "Circle Action Deny List", + "@Tooltip": "Resource locations of disallowed actions within circles. Trying to cast one of these from a circle will result in a mishap.", + }, + villagersOffendedByMindMurder: { + "": "Villagers Offended By Mind Murder", + "@Tooltip": "Whether villagers should be angry at the player when other villagers are mindflayed", + }, + scrollInjectionsRaw: { + "": "Scroll Injection Weights", + "@Tooltip": "Maps the names of loot tables to the amount of per-world patterns on scrolls should go in them. There's about a 50% chance to get any scrolls in a given chest marked here; once that is met, between 1 and that many scrolls are generated.", + }, + amethystShardModification: { + "": "Amethyst Shard Drop Rate Change", + "@Tooltip": "How much the number of amethyst shards dropped from clusters is increased/decreased.", + }, + + // TODO: are these used anywhere?? + "fewScrollTables.@Tooltip": "Loot tables that a small number of Ancient Scrolls are injected into", + "someScrollTables.@Tooltip": "Loot tables that a decent number of Ancient Scrolls are injected into", + "manyScrollTables.@Tooltip": "Loot tables that a huge number of Ancient Scrolls are injected into", + }, + }, + }, + + "advancement.hexcasting:": { + root: { + "": "Изучение рунных заклинаний", + desc: "Найдите и добудте концентрированную форму мыслей, растущих глубоко под землей.", + }, + enlightenment: { + "": "Прорицание", + desc: "Разрушьте внутренний барьер, израсходовав почти все свое здоровье за заклинание.", + }, + wasteful_cast: { + "": "Кто аметистами посорит...", + desc: "Потратить впустую большое количество мысли при использовании заклинания.", + }, + big_cast: { + "": "... тот нужду пожнет", + desc: "Произнесение одного-единственного заклинания требует поистине огромного количества Мысли.", + }, + y_u_no_cast_angy: { + "": "Первый блин комом", + desc: "Попробовать произнести заклинание из свитка, но потерпеть неудачу.", + }, + opened_eyes: { + "": "Открытие", + desc: "Пусть природа заберет частичку твоего разума в качестве платы за колдовство. Что может случиться, если ты позволишь ей сделать больше?", + }, + lore: { + "": "История Рунных Заклинаний", + desc: "Прочитать фрагмент истории", + }, + "lore/": { + cardamom1: { + "": "Кардамом Стайлз #1", + desc: "Письмо Кардамон Стайлз своему отцу, #1", + }, + cardamom2: { + "": "Кардамом Стайлз #2", + desc: "Письмо Кардамон Стайлз своему отцу, #2", + }, + cardamom3: { + "": "Кардамом Стайлз #3", + desc: "Письмо Кардамон Стайлз своему отцу, #3, 1/2", + }, + cardamom4: { + "": "Кардамом Стайлз #3 pt2", + desc: "Письмо Кардамон Стайлз своему отцу, #3, 2/2", + }, + cardamom5: { + "": "Кардамом Стайлз #4", + desc: "Письмо Кардамон Стайлз своему отцу, #4", + }, + experiment1: "Wooleye Instance Notes", + experiment2: "Wooleye Interview Logs", + inventory: "Журнал восстановления 72", + }, + }, + + "stat.hexcasting": { + media_used: "Мысли потребляемые (в виде пыли)", + media_overcasted: "Переиспользовано мысли (в виде пыли)", + patterns_drawn: "Рун нарисовано", + spells_cast: "Заклинаний использовано", + }, + + "death.attack.hexcasting": { + overcast: "Разум %s был полноценно поглощён как оплата заклинания.", + shame: "Позор %s!", + }, + + "command.hexcasting": { + recalc: "Recalculated patterns", + + pats: { + listing: "Руны в этом мире:", + all: "Отдал все %d свитки в %s", + "specific.success": "Отдал %s с id %s за %s", + }, + + brainsweep: { + "": "Brainswept %s", + "fail.badtype": "%s это не моб", + "fail.already": "%s уже пуст", + }, + }, + + hexcasting: { + "pattern.unknown": "Неизвестная руна %s", + + debug: { + media_withdrawn: "%s - Media withdrawn: %s", + "media_withdrawn.with_dust": "%s - Media withdrawn: %s (%s in dust)", + media_inserted: "%s - Media inserted: %s", + "media_inserted.with_dust": "%s - Media inserted: %s (%s in dust)", + all_media: "Entire contents", + infinite_media: "Бесконечный", + }, + + // TODO: post-eigengrau make these less anticlimactic + message: { + cant_overcast: "Для этого заклинания требовалось больше мысли, чем у меня было... Мне следует еще раз проверить свои расчеты.", + cant_great_spell: "Заклинание каким-то образом не сработало... неужели у меня не хватает знаний?", + }, + + tooltip: { + spellbook: { + page: { + "": "Выбрана страница %d/%d", + sealed: "Выбрана страница %d/%d (%s)", + }, + page_with_name: { + "": "Выбрана страница %d/%d (\"%s\")", + sealed: "Выбрана страница %d/%d (\"%s\") (%s)", + }, + empty: { + "": "Пустой", + sealed: "Пустой (%s)", + }, + sealed: "Запечатанный", + }, + + abacus: { + "": "%d", + reset: "Сбросить до 0", + "reset.nice": "хороший", + }, + + circle: { + no_exit: "Поток мысли не смог найти выхода в %s", + many_exits: "У потока мысли было слишком много выходов в %s", + no_closure: "Поток мысли не сможет вернуться к прежнему Инициатору на %s", + }, + + lens: { + "pattern.invalid": "Неизвестная руна", + bee: { + "": "%s bees", + single: "%s bee", + }, + "impetus.redstone.bound": { + "": "Связанный с %s", + none: "Несвязан", + }, + akashic: { + "bookshelf.location": "Запись на %s", + "record.count": { + "": "%s йоты хранящиеся", + single: "%s iota хранящаяся", + }, + }, + }, + + brainsweep: { + min_level: "Уровень %s или выше", + level: "Уровень %s", + product: "Лишенное разума Тело", + }, + + media: "%d пыли", + media_amount: "Содержит: %s (%s)", + "media_amount.advanced": "Содержит: %s/%s (%s)", + + list_contents: "[%s]", + null_iota: "Ничто", + jump_iota: "[Jump]", + pattern_iota: "Руна(%s)", + boolean_true: "Истина", + boolean_false: "Ложь", + }, + // ^ tooltip + spelldata: { + onitem: "Содержит: %s", + anything: "Что-либо", + unknown: "Сломанная йота", + "entity.whoknows": "Неизвестная сущность", + "akashic.nopos": "Владелец записи не знает ни о каких йота здесь (это ошибка)", + }, + + subtitles: { + casting: { + pattern: { + start: "Начальная руна", + add_segment: "Добавление строки", + }, + cast: { + normal: "Действие жужжит", + spell: "Заклинание гремит", + hermes: "Гермес стрекочит", + thoth: "Тот стрекочит", + }, + }, + + ambiance: "Hex grid hums", + "staff.reset": "Сброс заклинания", + + abacus: { + "": "Счеты щелкают", + shake: "Счеты трещат", + }, + "spellcircle.add_pattern": "Заклинание круга трещит", + "spellcircle.fail": "Заклинание круга громко трещит", + "scroll.dust": "Свиток покрывается аметистовой пылью", + "scroll.scribble": "Свиток расписан", + "impetus.fletcher.tick": "Инициатор Лучника кликает", + "impetus.redstone.register": "Инициатор Священника звенит", + "lore_fragment.read": "Прочтен фрагмент истории", + "flight.ambience": "Игрок летит", + "flight.finish": "Полет окончился", + }, + + attributes: { + grid_zoom: "Размер сетки заклинания", + // TODO: the +1 is kind of janky + scry_sight: "Магический взгляд", + }, + + // Action localizations + + action: { + "hexcasting:": { + "const/": { + "null": "Отражение ничта", + "true": "Отражение истины", + "false": "Отражение лжи", + + "vec/": { + px: "Отражение Вектора +X", + py: "Отражение Вектора +Y", + pz: "Отражение Вектора +Z", + nx: "Отражение Вектора -X", + ny: "Отражение Вектора -Y", + nz: "Отражение Вектора -Z", + "0": "Отражение Вектора 0", + }, + + "double/": { + pi: "Отражение арки", + tau: "Отражение круга", + "e": "Отражение Эйлера", + }, + }, + + get_caster: "Отражение Нарцисса", + "entity_pos/eye": "Преображение глаз", + "entity_pos/foot": "Преображение ног", + get_entity_look: "Преображение Взгляда", + get_entity_height: "Преображение Высот", + get_entity_velocity: "Преображение Скорости", + raycast: "Объединение Луча", + "raycast/axis": "Объединение Стороны", + "raycast/entity": "Объединение Сущности", + + "circle/": { + impetus_pos: "Отражение Путевого Камня", + impetus_dir: "Взгляд Путевого Камня", + "bounds/min": "Отражение меньшей стопки", + "bounds/max": "Отражение большей стопки", + }, + + append: "Объединение Вступления", + unappend: "Объединение Вывода", + index: "Объединение Выборки", + singleton: "Одиночное Преображение", + empty_list: "Отражение Чистоты", + reverse: "Обратное Преображение", + last_n_list: "Гамбит Группы", + splat: "Распад Группы", + index_of: "Объединение Искателя", + remove_from: "Возвышение Удаления", + slice: "Возвышение Выборки", + replace: "Возвышение Хирурга", + construct: "Объединение Динамика", + deconstruct: "Распад Динамика", + + get_entity: "Сущностное Преображение", + "get_entity/": { + animal: "Сущностное Преображение: Животное", + monster: "Сущностное Преображение: Монстр", + item: "Сущностное Преображение: Предмет", + player: "Сущностное Преображение: Игрок", + living: "Сущностное Преображение: Живое", + }, + + zone_entity: "Объединение Области: Любое", + "zone_entity/": { + animal: "Объединение Области: Животное", + monster: "Объединение Области: Монстр", + item: "Объединение Области: Предмет", + player: "Объединение Области: Игрок", + living: "Объединение Области: Живое", + not_animal: "Объединение Области: Не-Животное", + not_monster: "Объединение Области: Не-Монстр", + not_item: "Объединение Области: Не-Предмет", + not_player: "Объединение Области: Не-Игрок", + not_living: "Объединение Области: Не-Живое", + }, + + swap: "Гамбит Шута", + rotate: "Гамбит Поворота", + rotate_reverse: "Гамбит Поворота II", + duplicate: "Разбор Близнецов", + over: "Гамбит Старателя", + tuck: "Гамбит Гробовщика", + "2dup": "Гамбит Дубля", + duplicate_n: "Гамбит Близнецов", + stack_len: "Отражение Группы", + fisherman: "Гамбит Рыбака", + "fisherman/copy": "Гамбит Рыбака II", + swizzle: "Гамбит Мошенника", + + unique: "Преображение Уникальности", + and: "Объединение Совпадения", + or: "Объединение Дизъюнкции", + xor: "Объединение Исключения", + + greater: "Объединение Максимум", + less: "Объединение Минимум", + greater_eq: "Объединение Максимум II", + less_eq: "Объединение Минимум II", + equals: "Объединение Равенства", + not_equals: "Объединение Неравенства", + not: "Объединение Отрицания", + bool_coerce: "Преображение Прорицателя", + if: "Возвышение Прорицателя", + + add: "Суммирующее Объединение", + sub: "Вычитающее Объединение", + mul: "Умножающее Объединение", + div: "Делящее Объединение", + abs: "Преображение к Абсолюту", + pow: "Объединение Экспоненты", + floor: "Преображение к полу", + ceil: "Преображение к потолку", + modulo: "Модульное Объединение", + construct_vec: "Векторное Возвышение", + deconstruct_vec: "Векторный Распад", + sin: "Преображение к Синусу", + cos: "Преображение к Косинусу", + tan: "Преображение к Тангенсу", + arcsin: " Преображение к Арксинусу", + arccos: "Преображение к Арккосинусу", + arctan: "Преображение к Арктангенсу", + arctan2: "Преображение к Арктангенсу II", + random: "Отражение Случая", + logarithm: "Логаритмическое Объединение", + coerce_axial: "Преображение к Стороне", + + read: "Отражение Писаря", + "read/entity": "Преображение Летописца", + "read/local": "Отражение Мунин", + + write: "Гамбит Писаря", + "write/entity": "Гамбит Летописца", + "write/local": "Гамбит Хугин", + + readable: "Отражение Ревизора", + "readable/entity": "Преображение Ревизора", + writable: "Отражение Заседателя", + "writable/entity": "Преображение Заседателя", + "akashic/read": "Объединение Акаши", + "akashic/write": "Гамбит Акаши", + + print: "Раскрытие", + beep: "Издать Ноту", + explode: "Взрыв", + "explode/fire": "Огненный шар", + add_motion: "Импульс", + blink: "Перенос", + break_block: "Сломать Блок", + place_block: "Поставить Блок", + + "craft/cypher": "Создать Побрякушку", + "craft/trinket": "Создрать Штуковину", + "craft/artifact": "Создрать Артефакт", + "craft/battery": "Создать Сосуд Мыслей", + + recharge: "Зарядить Предмет", + erase: "Очистить Предмет", + create_water: "Создать Воду", + destroy_water: "Испарить Жидкость", + ignite: "Поджечь Блок", + extinguish: "Потушить Область", + conjure_block: "Магический Барьер", + conjure_light: "Магический Свет", + bonemeal: "Ускорить Рост", + edify: "Созидать Саженец", + colorize: "Использовать Пигмент", + + "sentinel/": { + create: "Призвать Часового", + "create/great": "Призвать Великого Часового", + destroy: "Уничтожить Часового", + get_pos: "Место Часового", + wayfind: "Путь к Часовому", + }, + + "potion/": { + weakness: "Надир Белого Солнца", + levitation: "Надир Синего Солнца", + wither: "Надир Черного Солнца", + poison: "Надир Красного Солнца", + slowness: "Надир Зеленого Солнца", + + regeneration: "Зенит Белого Солнца", + night_vision: "Зенит Синего Солнца", + absorption: "Зенит Черного Солнца", + haste: "Зенит Красного Солнца", + strength: "Зенит Зеленого Солнца", + }, + + flight: "Альтиора", + "flight/range": "Дальность Полета", + "flight/time": "Время Полета", + + lightning: "Громовержец", + summon_rain: "Призвать дождь", + dispel_rain: "Прогнать дождь", + create_lava: "Создать лаву", + "teleport/great": "Великое Перемещение", + brainsweep: "Очистка разума", + + eval: "Гамбит Гермеса", + "eval/cc": "Гамбит Ириса", + for_each: "Гамбит Тота", + halt: "Гамбит Харона", + + "interop/": { + "gravity/": { + get: "Отражение Гравитации", + set: "Изменить Гравитацию", + }, + + "pehkui/": { + get: "Отражение Гуливера", + set: "Изменить Размер", + }, + }, + }, + + // hexcasting.action.book.[resloc] override the name of that pattern in the patchi book, for abbreviations + "book.hexcasting:": { + get_entity_height: "Высот Преобр.", + + "get_entity/": { + animal: "Преобр Сущн.: Животное", + monster: "Преобр Сущн.: Монстр", + item: "Преобр Сущн.: Предмет", + player: "Преобр Сущн.: Игрок", + living: "Преобр Сущн.: Живое", + }, + + zone_entity: "Объед. Обл.: Any", + "zone_entity/": { + animal: "Объед. Обл.: Животное", + monster: "Объед. Обл.: Монстр", + item: "Объед. Обл.: Предмет", + player: "Объед. Обл.: Игрок", + living: "Объед. Обл.: Живое", + not_animal: "Объед. Обл.: Не Животное", + not_monster: "Объед. Обл.: Не Монстр", + not_item: "Объед. Обл.: Не Предмет", + not_player: "Объед. Обл.: Не Игрок", + not_living: "Объед. Обл.: Не Живое", + }, + + mul: "Умножение", + div: "Деление", + arcsin: "Обратный синус", + arccos: "Обратный косинус", + arctan: "Обратный тангенс", + arctan2: "Обратный тангенс II", + + "const/vec/": { + x: "Отражение Вектора +X/-X", + y: "Отражение Вектора +Y/-Y", + z: "Отражение Вектора +Z/-Z", + }, + + "read/entity": "Преображение Летописца", + bool_to_number: "Нумерологист", + number: "Численное Отражение", + mask: "Гамбит Библиотекаря", + }, + }, + // ^ action + + "special.hexcasting:": { + number: "Численное Отражение: %s", + mask: "Гамбит Библиотекаря: %s", + }, + + "rawhook.hexcasting:": { + open_paren: "Интроспекция", + close_paren: "Ретроспектива", + escape: "Рассмотрение", + undo: "Исчезновение", + }, + + "iota.hexcasting:": { + "null": "Ничто", + double: "Число", + boolean: "Истина/Ложь", + entity: "Сущность", + list: "Список", + pattern: "Руна", + garbage: "Мусор", + vec3: "Вектор", + }, + + mishap: { + "": "%s: %s", + + invalid_pattern: "Эта руна не связана ни с каким действием", + unescaped: "Ожидалось, что он оценит паттерн, но вместо этого он оценил %s", + + not_enough_args: "ожидалось %s или больше аргументов, но высота стека была всего %s", + no_args: "ожидалось %s или больше аргументов, но стек был пуст", + too_many_close_parens: "Слишком много рун закрытий", + + wrong_dimension: "не удается увидеть %s из %s", + entity_too_far: "%s находится вне диапазона", + immune_entity: "невозможно изменить %s", + eval_too_deep: "Рекурсивные вычисления слишком глубокие", + no_item: "нуждается в %s, но ничего не получает", + "no_item.offhand": "нуждается в %s в другой руке, но ничего не получил", + bad_entity: "нуждается в %s, но получил %s", + bad_brainsweep: "%s отверг разум существа", + already_brainswept: "Разум уже был использован", + no_spell_circle: "%s требует круг заклинаний", + others_name: "Пытался вторгнуться в частную жизнь - %s", + "others_name.self": "Ты слишком опрометчиво пытался разгласить мое имя", + + divide_by_zero: { + divide: "Попытался разделить %s на %s", + project: "Попытался спроецировать %s на %s", + exponent: "Попытался возвести %s в степень %s", + logarithm: "Попытался получить логарифм %s в виде базового значения %s", + + zero: { + "": "ноль", + power: "нулевая сила", + vec: "нулевой вектор", + }, + power: "сила %s", + sin: "синус %s", + cos: "косинус %s", + }, + + no_akashic_record: "Нет Записи Акаши на %s", + disallowed: "был запрещен администраторами сервера", + disallowed_circle: "был запрещен в кругах заклинаний администраторами сервера", + invalid_spell_datum_type: "Пытался использовать значение недопустимого типа в качестве параметра для написания: %s (класс %s). Это ошибка в настройках.", + unknown: "возникло исключение (%s). Это ошибка в моде.", + shame: "Как вам не стыдно!", + + invalid_value: { + "": "ожидал %s по индексу %s стека, но получил %s", + + class: { + double: "число", + boolean: "логика", + vector: "вектор", + list: "список", + widget: "действие", + pattern: "руна", + + entity: { + "": "сущность", + item: "предмет-сущность", + player: "игрок", + villager: "житель", + living: "живая сущность", + }, + + unknown: "(неизвестно, это ошибка)", + }, + + numvec: "число или вектор", + numlist: "целое число или список", + "list.pattern": "список рун", + + double: { + positive: { + "": "положительное число", + less: "положительное число меньше %d", + "less.equal": "положительное число, меньшее или равное %d", + }, + between: "число между %d и %d", + }, + + int: { + "": "целое число", + positive: { + "": "положительное целое число", + less: "положительное целое число, меньшее, чем %d", + "less.equal": "целое положительное число, меньшее или равное %d", + }, + between: "целое число между %d и %d", + }, + + evaluatable: "нечто исполняемое", + bool_commute: "Логика - 0 или 1", + }, + + location: { + too_far: "%s находится вне диапазона", + out_of_world: "%s находится за пределами этого мира", + too_close_to_out: "%s находится слишком близко к границе мира", + forbidden: "%s для вас запрещено", + bad_dimension: "Это измерение запрещает такое действие", + }, + + bad_item: { + "": "нужен %s, но получил %dx %s", + offhand: "нужен %s в другой руке но получил %dx %s", + + iota: { + "": "место для хранения йоты", + read: "место, откуда можно читать йоты", + write: "место, куда можно записывать йоты", + readonly: "место, которое будет принимать %s", + }, + + media: "предмет, содержащий мысли", + media_for_battery: "необработанный мысли предмет", + only_one: "ровно один предмет", + eraseable: "предмет, поддающийся стиранию", + bottle: "стеклянная бутылочка", + rechargable: "перезаряжаемый предмет", + colorizer: "Пигмент", + variant: "предмет с вариантами", + }, + + bad_block: { + "": "Ожидал %s при %s, но получил %s", + sapling: "саженец", + replaceable: "куда-нибудь поместить блок", + }, + + "circle.bool_directrix": { + no_bool: "значение йоты, обнаруженное в %s, было %s, а не bool", + empty_stack: "стек был пуст в момент %s", + }, + }, + // ^ mishap + + circles: { + no_exit: "Поток мысли в %s не смог найти выход", + many_exits: "Поток мысли в %s имел слишком много выходов", + }, + + + // === Patchi stuff! === + + + landing: "Кажется, я открыл новый метод магических искусств, при котором человек рисует странные и дикие руны на шестиугольной сетке. \ + Это меня восхищает. Я решил начать вести дневник своих мыслей и открытий.\ + $(br2)$(l:https://forum.petra-k.at/index.php)Ссылка на форум/$", + + category: { + basics: { + "": "Приступая к работе", + desc: "Практикующие это искусство разыгрывали свои так называемые Заклинания рисуя странные руны в воздухе с помощью $(l:items/staff)$(item)Staff/$ -- \ + или создавая $(l:items/hexcasting)$(item)могущественные магические предметы/$ что бы исполнять руны с их помощью. \ + Как я мог бы сделать то же самое?", + }, + casting: { + "": "Hex Casting", + desc: "Я начал понимать, как старые мастера создавали свои Заклинания! Это немного сложно, \ + но я уверен, что смогу с этим разобраться. Давайте посмотрим...", + }, + items: { + "": "Предметы", + desc: "Я посвящаю этот раздел магическим и таинственным предметам, с которыми я могу столкнуться в ходе своих исследований.", + }, + + greatwork: { + "": "Великая работа", + desc: "Я видел... так много. У меня есть... пережил... аннигиляцию, деконструкцию и реконструкцию. \ + Я видел, как атомы мира кричали, когда их переворачивали, ниспровергали и превращали в энергию. \ + Я видел, я видел, я видел s$(k)get stick bugged lmao/$", + // alwinfy you think you're so funny + }, + + lore: { + "": "Лор", + desc: "Я обнаружил несколько писем и текстов, не имеющих прямого отношения к моему искусству. \ + Но я думаю, что, возможно, смогу по ним угадать кое-что из истории мира. Дай-ка посмотрю...", + }, + + interop: { + "": "Совместимость с различными модами", + desc: "Похоже, я установил несколько модов, с которыми взаимодействует Hex casting! Я подробно описал их здесь.", + }, + + patterns: { + "": "Руны", + desc: "Список всех обнаруженных мной руны, а также то, что они делают.", + }, + spells: { + "": "Продвинутые Руны", + desc: "Руны, которые оказывают магическое воздействие на окружающий мир.", + }, + great_spells: { + "": "Великие Руны", + desc: "Руны, перечисленные здесь, предположительно обладают легендарной сложностью и силой. \ + Похоже, что они использовались очень редко (как утверждается в текстах, на то есть веские причины). \ + Хотя, возможно, это просто бредни давно умерших стариков.$(br2)\ + Что может пойти не так?", + }, + }, + // ^ categories + + entry: { + media: "Мысли", + geodes: "Жеоды", + couldnt_cast: "Разочарование", + start_to_see: "ЧТО Я ВИДЕЛ!", + "101": "Рунные заклинания: начало", + vectors: "Учебник по векторам", + mishaps: "Неудачи", + stack: "Стек", + naming: "Наименование", + influences: "Влияние", + mishaps2: "Просвещённые неудачи", + amethyst: "Аметист", + + staff: "Посох", + lens: "Линза Прозрения", + jeweler_hammer: "Ювелирный молоток", + + thought_knot: "Узел мысли", + focus: "Focus", + abacus: "Cчеты", + spellbook: "Книга Заклинаний", + + scroll: "Свитки", + slate: "Плитки", + + // why is this called "hexcasting"? + hexcasting: "Предметы для Заклинаний", + phials: "Сосуд мысли", + pigments: "Пигмент", + + edified: "Деревья Созидания", + decoration: "Декоративные Блоки", + + the_work: "Работа", + brainsweeping: "Об очистке разума", + spellcircles: "Круги Заклинаний", + impetus: "Инициатор", + directrix: "Направитель", + akashiclib: "Библиотеки Акаши", + quenching_allays: "Погашенные Тихони", + fanciful_staves: "Красивые Посохи", + + // and the actions + readers_guide: "Как Читать Этот Раздел", + // ops + basics_pattern: "Базовые руны", + numbers: "Числа в Рунах", + math: "Математика", + advanced_math: "Продвинутая математика", + sets: "Множества", + consts: "Константы", + stackmanip: "Манипулирование стеком", + logic: "Логические операторы", + entities: "Сущности", + lists: "Манипулирование списками", + patterns_as_iotas: "Escaping Patterns", + readwrite: "Чтение и Запись", + meta: "Meta-Evaluation", + circle_patterns: "Руны для Кругов Заклинаний", + akashic_patterns: "Руны Акаши", + + // spells + itempicking: "Работа с Предметами", + basic_spell: "Базовые заклинания", + blockworks: "Манипулирование блоками", + nadirs: "Надир", + hexcasting_spell: "Создание Исполняющих Предметов", + sentinels: "Часовые", + // internalize pigment uses the action name + flights: "Полет", + + // great spells usually use the action name + weather_manip: "Манипуляция Погодой", + zeniths: "Зенит", + + lore: { + cardamom1: "Кардамом Стайлз, #1", + cardamom2: "Кардамом Стайлз, #2", + cardamom3: "Кардамом Стайлз, #3", + cardamom4: "Кардамом Стайлз, #4", + cardamom5: "Кардамом Стайлз, #5", + experiment1: "Wooleye Instance Notes", + experiment2: "Wooleye Interview Logs", + inventory: "Журнал восстановления #72", + }, + + interop: { + "": "Межмодовые взаимодействия", + gravity: "Gravity Changer", + pehkui: "Pehkui", + // TODO: add something about Switchy once that PR gets merged + // https://github.com/sisby-folk/switchy/pull/44 + // i can't WAIT for all the hilarious people on the github issues about this one + }, + }, + // ^ entries + + page: { + media: { + "1": "Мысли - это форма психической энергии, внешняя по отношению к разуму. Все живые существа, думая о чем-либо, вырабатывают незначительное количество Мысли; после того, как мысль закончена, средства массовой информации попадают в окружающую среду.$(br2)Искуство Рунных Заклинаний заключается в манипуляции _мыслями чтобы они выполняли ваши требования.", + "2": "Мысли могут оказывать влияние на другие мысли-- силой и типом влияния можно манипулировать, используя Мысли в виде шаблонов.$(p)Знатоки искусства использовали концентрированный сгусток Мысли на конце палочки: размахивая им в воздухе в определенных конфигурациях, они могли манипулировать достаточным количеством Мысли с достаточной точностью, чтобы влиять на сам мир в форме Рун.", + "3": "К сожалению, даже полностью разумное существо (предположительно, такое, как я) может генерировать лишь незначительное количество Мысли. Было бы совершенно непрактично пытаться использовать свои собственные силы для использование Рун.$(br2)Но легенда гласит, что существуют подземные отложения, где Мысли медленно накапливаются, превращаясь в кристаллические формы.$(p)Если бы я только мог найти что-нибудь из этого...", + }, + + geodes: { + "1": "Aга! Занимаясь добычей полезных ископаемых глубоко под землей, я обнаружил огромную жеоду, резонирующую с энергией - энергией, которая давила на мой череп и мои мысли. И теперь я держу это давление в своей руке, в твердой форме. Это $(italic)должно/$ быть тем местом, о котором говорится в легендах, где скапливается Мысли.$(br2)Эти $(l:items/amethyst)$(item)кристаллы аметиста/$ должны быть $(l:items/amethyst)$(thing)удобной, затвердевшей формой Мысли/$.", + "2": "Похоже, что в дополнение к $(l:items/amethyst)$(item)аметистовым осколкам/$ Я уже видел в прошлом, что из этих кристаллов также могут выпадать частицы порошкообразной $(l:items/amethyst)$(item)аметистовой пыли/$, а также эти $(l:items/amethyst)$(item) Заряженные кристаллы аметиста/$. Похоже, у меня будет больше шансов найти заряженные кристаллы аметиста $(l:items/amethyst)$(item)/$ если я воспользуюсь киркой с зачарованием Удачи.", + "3": "Когда я впитываю красоту кристалла, я чувствую, как в моем сознании стремительно вспыхивают связи. Как будто Мысли витающие в воздухе, проникают в меня, наполняют меня силой, проясняют меня... Это чудесное чувство.$(br2)Наконец-то мое изучение тайн начинает обретать какой-то смысл!$(p)Позвольте мне еще раз перечитать эти старые легенды, теперь, когда я знаю, на что смотрю.", + }, + + couldnt_cast: { + "1": "Аргх! Почему он не позволяет мне произнести заклинание?!$(br2)Свиток, который я нашел, казалось бы корректен. Я могу $(italic)почувствовать/$ как он трещит в свитке - схема верна, или настолько верна, насколько это возможно. Это заклинание $(italic)должно было сработать/$.$(p)Но мне кажется, что это происходит по другую сторону какой-то тонкой мембраны. Я вызвал это - оно попыталось проявиться - но оно $(italic)не смогло/$.", + "2": "Мне показалось, что барьер, возможно, совсем немного ослаб от силы, которую я приложил к заклинанию; и все же, несмотря на мои величайшие усилия - мою глубочайшую сосредоточенность, мой тончайший аметист, мои самые точные рисунки, - он отказывается преодолевать барьер. Это сводит с ума.$(p)$(italic)На этом/$ мои занятия тайнами заканчиваются? Проклят бессилием, обречен потерять свои законные силы?$(br2)Я должен сделать глубокий вдох. Я должен поразмышлять над тем, что я узнал, даже если это было не так уж много...", + "3": "..После тщательного обдумывания... Я обнаружил перемену в себе.$(p)Кажется... вместо $(l:items/amethyst)$(item)аметиста/$, я получил возможность творить заклинания, используя свой собственный разум и жизненную энергию - точно так, как я читал в древних легендах.$(p)Я не уверен, почему я могу это сделать сейчас. Это просто ... бремя истины-знания- было всегда, и теперь я это вижу. Я знаю это. Я терплю это.$(br2)К счастью, я тоже чувствую свои пределы - я бы потратил на свое здоровье примерно два $(l:items/amethyst)$(item)заряженных аметиста/$'на сумму Мысли в самом расцвете сил.", + "4": "Я содрогаюсь даже при мысли об этом - до сих пор я сохранял свой разум в основном нетронутым во время учебы. Но факт в том, что я являюсь одной из сторон хрупкой связи.$(p)Я связан с какой-то другой стороной - стороной, границы которой сузились из-за этой травмы. Место, где простые действия создают вечную славу.$(p)Неужели это так неправильно - хотеть этого для себя?", + }, + + start_to_see: { + "1": "Тексты не лгали. Природа взяла свое.", + "2": "Это... это было... $(p)...это была одна из $(italic)худших/$ вещей, с которыми я $(italic)когда-либо/$ сталкивался. Я предложил свой план Природе и получил в ответ искреннюю улыбку и ощущение разрыва - частичка меня самого откалывается, как аметистовая пыль под дождем.$(p)Мне повезло, что у меня $(italic)сохранился/$, не говоря уже о том, что у меня хватило ума написать это - я должен объявить вопрос закрытым, перепроверить свои математические выкладки, прежде чем ставить еще какие-либо Заклинания, и никогда больше не допускать подобной ошибки.", + "3": "..Но.$(br2)Но на краткий миг эта часть меня... она $(italic)увидела/$... $(l:greatwork/the_work)$(thing)что-то/$. Какое-то место. (Такие различия, казалось, не имели значения перед лицом... того, что.)$(p)И... мембранный барьер-кожная граница, отделяющая меня от царства необузданных мыслей-потоков-света-энергии. Я помню - я видел - думал- вспоминал - чувствовал - барьер расплывался по краям, совсем чуть-чуть.$(p)Я хотел $(italic)покончить с этим./$", + "4": "Я не должен был этого делать. Я $(italic)знаю/$Я не должен был. Это опасно. Это слишком опасно. Для этого требовалась сила... Мне пришлось бы $(italic)одним ударом оказаться на волосок от смерти/$.$(br2)Но я... так $(italic)близко/$.$(p)$(italic)Это/$ кульминация моего творчества. Это и есть $(#54398a)Просветление/$ Которого я так долго добивался. $(br2)Я хочу больше. Мне нужно увидеть это снова. Я $(italic)will/$ увижу это.$(p)Что значит мой смертный разум против бессмертной славы?", + }, + + casting: { + overview: { + "1": "Я считаю, что всегда полезно начинать с правильного шага. Итак, я собрал руны которые вызовут небольшой всплеск в той позиции, на которую я смотрю. Я полагаю, что изучение внутренней работы этого заклинания будет весьма поучительным.", + }, + + grid: { + "1": "Как правило, я предоставляю свои шаблоны природе с помощью моего $(l:items/staff)$(item)Staff/$. \ + Применив $(thing)$(k:use)/$ держа его в руке, передо мной появится шестиугольная сетка из точек. \ + Затем я могу щелкнуть, перетащить от точки к точке и отпустить, чтобы нарисовать руну.$(br2)\ + Как только я отправляю шаблон, он выполняется (смотрите следующую главу).", + "2": "Нажатие кнопки $(thing)$(k:escape)/$ сохраняет и закрывает сетку; когда я в следующий раз использую свой посох, все мои руны и йоты по-прежнему будут там.$(br2)\ + Если я захочу сбросить свое состояние заклинания, я могу сделать это присев, открывая сетку.", + }, + "patterns&actions": { + "1": "$(thing)Руны/$ это пути, проложенные по сетке Мысли. Я считаю, что симметрия рун в шестиугольниках - это то, что дало название моему искусству.$(br2)\ + $(thing)Действия/$, между тем, - это то, что $(italic)делают/$ руны.", + "2": "Разница подобна разнице между $(italic)словами /$ и их $(italic)значениями/$. \ + Любое сочетание букв образует слово, но большинство из них ничего не означают. \ + Аналогично, любая закорючка, пропущенная через Мысли технически является руной, но большинство из них ничего не сделают.", + "3": "Действия чем-то напоминают команды к правилам великой системы, управляющей Вселенной (которые, как я видел, в некоторых текстах олицетворяются как \"Природа.\"). \ + Они склонны делать одну из нескольких вещей:\ + $(li)Соберите некоторую информацию о мире, например, определите местоположение - сущность.\ + $(li)Манипулируйте собранной информацией, например, находите расстояние между двумя позициями.\ + $(li)Произведите какое-нибудь магическое воздействие на мир, например, вызовите молнию или взрыв.$(br)\ + Эти последние виды действий называются \"Заклинаниями.\", и, как правило, являются тем, что привлекает людей к искусству.", + "4": "Таким образом, Заклинания - это последовательность допустимых рун, представленных Природе в определенной последовательности. \ + Природа интерпретирует каждую руну по отдельности и, если понимает, изменяет мир в соответствии с моими прихотями. \ + (Или каковы, по её мнению, мои прихоти.)", + "5": "Хотя некоторые действия могут быть выполнены легко, некоторые требуют оплаты в виде Мысли. \ + Я верю, что концентрированная ментальная энергия используется как своего рода аргумент для Природы, убеждающий ее в том, что она действительно должна сделать то, о чем я прошу. \ + Большинство заклинаний требуют такого рода оплаты, но некоторые действия, не связанные с заклинаниями, тоже требуют такой оплаты.$(br2)\ + Я записал стоимость каждого действия, если таковая имелась, на соответствующих страницах.", + }, + iotas: { + "1": "В языке природы \"существительные\" названы $(thing)йоты/$. \ + На самом базовом уровне Рунная магия - это искусство манипулирования йотами.$(br2)\ + Йоты бывают самых разных типов:\ + $(li)Числа.\ + $(li)Векторы - это набор из трех чисел, представляющих положение, движение или направление.\ + $(li)Логические значения абстрактное значение Истина или Ложь (1 или 0)\ + $(li)Сущности - подобные мне, цыплятам, лодкам и лежащим на земле аметистам.", + "2": "$(li)Влияния - своеобразные типы йот, которые, по-видимому, представляют собой абстрактные идеи.\ + $(li)Руны - используемые для создания магических предметов и поистине умопомрачительных трюков, таких как $(italic)заклинания, что манипулируют другими заклинаниями/$.\ + $(li)Список - несколько вышеперечисленных типов вместе", + "3": "Как правило, я предоставляю йоты для действий. \ + Например, возьмем $(l:patterns/spells/basic#hexcasting:explode)$(action)Взрыв/$. \ + Для этого заклинания требуется числовая йота, указывающая на силу, и векторная йота0, указывающая на местоположение.$(br2)\ + Или возьмите $(l:patterns/basic#hexcasting:get_pos)$(action)/$. \ + При этом берется йота сущности и преобразуется в вектор йота, представляющую положение этого сущности.", + }, + }, + + // Casting + "101": { + "1": "Исполнение рунных заклинаний немного сложный процесс, неудивительно, что это искусство было забыто. Мне придется внимательно перечитать свои записи.$(br2)Я могу начать писать Руну нажав $(k:use) держа в руке $(l:items/staff)$(item)Посох/$ - это приведет к появлению передо мной шестиугольной сетки из точек. Затем я могу щелкать и перетаскивать от точки к точке, чтобы рисовать руны сетки; завершение создания руны приведет к выполнению соответствующего действия (подробнее об этом позже).", + "2": "Как только я нарисую достаточно рун, чтобы произнести заклинание, сетка исчезнет, когда будут выпущены сохраненные мною мысли. Удерживая $(k:sneak) при использовании моего $(l:items/staff)$(item)посоха/$ вы также очистите сетку.$(br2)Итак, как же работают руны? Вкратце:$(italic)Руны/$ выполняют $(italic)Действия/$, которые манипулируют...$(l:casting/stack)$(italic)Стэком/$, который представляет собой список из...$(italic)Йоты/$, которые являются просто единицами информации.", + "3": "Во-первых, $(thing)Руны/$. Они важны - это то, что я использую для манипулирования мысли вокруг меня. Определенные паттерны, будучи нарисованными, вызовут выполнение оределённых действий. Действия - это то, что на самом деле творит чудеса; все шаблоны определенным образом влияют на мысли и когда эти влияния в конечном итоге приводят к чему-то полезному, мы называем это действием.$(br2)Мысли могут быть непостоянными: если я нарисую неверную руну, я получу некоторый $(l:casting/influences)$(action)мусор/$ как результат где-нибудь в моем стеке (читайте дальше...)", + "4.header": "Вот пример", + "4": "Интересно отметить, что $(italic)угол/$ руны похоже, вообще не имеет значения, самое главное это начальная точка руны и градус на который вы поворачиваете линию. Оба этих паттерна выполняют действие, называемое $(l:patterns/basics#hexcasting:get_caster)$(action)Отражение Нарцисса/$, например.", + "5": "Заклинание приводится в действие путем последовательного выполнения (допустимых) действий. Каждое действие может выполнять одну из нескольких задач:$(li)Собирать некоторую информацию об окружающей среде, оставляя ее на вершине стека;$(li)манипулировать собранной информацией (например, складывать два числа); или$(li)выполнять какой-либо магический эффект, например вызывать молнию или взрыв. (Эти действия называются \"заклинания\")$(p)Когда я начинаю использовать посох, создается пустой стек. Действия управляют вершиной этого стека.", + "6": "Например, $(l:patterns/basics#hexcasting:get_caster)$(action)Отражение Нарцисса/$ создаст йота представляющую $(italic)меня/$, заклинателя, и добавит ее в начало стека. $(l:patterns/basics#hexcasting:entity_pos/eye)$(action)Преображение глаз/$ возьмет йота расположенную на вершине стека, если она представляет сущность, и преобразует ее в йота представляющую местоположение этого объекта.$(br2)Таким образом, рисование этих рун в таком порядке привело бы к тому, что в стеке появилась бы йота представляющая мою позицию.", + "7": "$(thing)Йоты/$ может представлять вещи, такие как я сам или мое положение, но есть несколько других типов, с которыми я могу манипулировать с помощью $(thing)Действия/$. Вот подробный список:$(li)Числа (которые некоторые легенды называют \"double\");$(li)Векторы, коллекция из трех чисел, представляющих положение, движение или направление в мире;$(li) Логические значения или \"bools\" в сокращении, представляющие абстрактное Истина или Ложь,", + "8": "$(li)Сущности, подобные мне, курицам и вагонеткам;$(li)Influences, особые типы иоты, которые кажутся представлять абстрактные идеи;$(li)Сами руны, используемые для создания магических предметов и поистине поразительных подвигов, таких как $(italic)заклинания, которые произносят другие заклинания/$; и$(li)Список нескольких из вышеперечисленного, собранных в одну йота.", + "9": "Конечно, бесплатный сыр только в мышеловке. Все заклинания и определенные другие действия требуют Мысли в качестве оплаты.$(br2)Как я могу понять, Рунные заклинания - это нечто вроде плана действий, представленного Природе - в этой аналогии Мысли используются для убеждения, чтобы Природа приняла план и осуществила его.", + "10": "Помимо этого, кажется, что никто не проводил серьезных исследований о том, насколько $(italic)много/$ стоит конкретный кусок $(l:items/amethyst)$(item)аметиста/$. По моим лучшим оценкам, $(l:items/amethyst)$(item)Осколок Аметиста/$ стоит примерно пять кусков $(l:items/amethyst)$(item)Аметистовой Пыли/$, а $(l:items/amethyst)$(item)Заряженный Кристалл Аметиста/$ - примерно десять.$(br2)Странно, что кажется, никакая другая форма $(l:items/amethyst)$(item)аметиста/$ не подходит для использования при создании Рунных заклинаний. Я подозреваю, что целые блоки или кристаллы слишком прочны, чтобы легко распутываться в Мысли.", + "11": "Также стоит отметить, что каждое действие немедленно потребляет необходимые Мысли, а не все сразу, когда Заклинание завершается. Кроме того, действие всегда потребляет целые предметы - действие, которое требует только столько Мысли, сколько стоит одна $(l:items/amethyst)$(item)Аметистовая Пыль/$, потребует целый $(l:items/amethyst)$(item)Заряженный Аметистовый Кристалл/$, если это единственное, что есть в моем инвентаре.$(br2)Таким образом, может быть хорошей идеей взять пыль для колдовства тоже - не тратьте зря, не будет желания...", + "12": "Я также должен быть осторожен, чтобы убедиться, что у меня действительно достаточно Аметиста в инвентаре - некоторые старые тексты говорят, что Природа с удовольствием использует разум в качестве оплаты. Они описывают это чувство как ужасное, но странно эйфорическое, \"[...] искрящееся растворение в свет и энергию...\" Возможно, поэтому все старые практикующие искусство сходили с ума. Я не могу представить, каково $(italic)сжигать кусочки своего разума ради силы/$.", + "13": "Но кажется что-то не так, в ходе моих экспериментов мне ещё не доводилось достить такого. Когда у меня кончается аметист заклинание просто обрывается! Будто бы некоторый барьер останавливает меня, спасает.$(br2)Мне интересно разгадать эту тайну, пока что я защищёен от этого.", + "14": "Я нашел некоторую информацию о том почему многие маги сходят с ума, неканоническое чтиво что я мог бы счесть крайне страшным.$(br2)$(italic)Предупреждение: элементы ужасных изощрений с телом./$", + "14.link_text": "Goblin Punch", + "15": "Наконец, кажется, что заклинания имеют максимальную дальность воздействия, около 32 блоков от моего положения. Попытка воздействовать на что-либо за пределами этого приведет к неудаче заклинания.$(br2)Несмотря на это, если у меня есть истинное имя игрока, я могу воздействовать на него откуда угодно. Однако это применимо только к прямому воздействию на них; я не могу использовать это для воздействия на мир вокруг них, если они за пределами моего диапазона.$(br)Мне следует быть крайне осторожным и не давать никому свое истинное имя. В то время как дружелюбные Рунные маги могут использовать их с большим эффектом и пользой, мне страшно думать, что мог бы сделать кто-то злонамеренный с этим...", + }, + + vectors: { + "1": "Похоже, мне придется быть искусным с векторами, если я собираюсь добиться успеха в своих исследованиях. Я собрал здесь некоторые ресурсы по векторам, если обнаружу, что не знаю, как с ними работать.$(br2)Прежде всего, просветительское видео по этой теме.", + "1.link_text": "3blue1brown", + "2": "Кроме того, кажется, что маги, которые манипулировали $(thing)Псиэнергией/$ (так называемые \"мастера заклинаний\"), несмотря на их плохой вкус в названиях, имели некоторые довольно эффективные уроки по векторам для своих последователей. Я позволил себе разместить ссылку на один из их текстов на следующей странице.$(br2)Похоже, что они использовали другой язык для своего колдовства:$(li)\"Кусок Заклинани\" было их название для действия;$(li)\"Талисман\" было их название для заклинания; и$(li)\"Оператор\" было их название для не-заклинательного действия.", + "3": "Ссылка Сдесь.", + "3.link_text": "Psi Codex", + }, + + mishaps: { + "1": "К сожалению, я не (пока что) совершенное существо. Иногда я допускаю ошибки в своих исследованиях и произношении Заклинания; например, неправильное нарисование руны или попытка вызвать действие с неправильными иотами. И Природа обычно не смотрит благосклонно на мои ошибки - вызывая то, что называется $(italic)несчастье/$.", + "2": "Некорректная руна будет светиться красным на моей сетке. В зависимости от типа ошибки, я также могу ожидать определенного вредного эффекта и обильного разбрызгивания красного и разноцветных искр, поскольку неправильно обработанная Мысли сворачивается в свет определенного цвета.", + "3": "К счастью, хотя плохие последствия несчастий, безусловно, $(italic)раздражающие/$, ни одно из них не является особенно разрушительным в долгосрочной перспективе. Нечего лучше делать, чем смахнуть пыль с себя и попробовать снова... но все равно я должен стремиться к лучшему.$(br2)Ниже приведен список несчастий, который я составил.", + + "invalid_pattern.title": "Некорретная руна", + invalid_pattern: "Руна не связана ни с одним действием.$(br2)Вызывает желтые искры, и $(l:casting/influences)$(action)Мусор/$ будет помещен в верхнюю часть моего стека.", + + "not_enough_iotas.title": "Недостаточно Йот", + not_enough_iotas: "Для действия требовалось больше йот, чем было в стеке.$(br2)Вызывает светло-серые искры, и столько $(l:casting/influences)$(action)Мусора/$, сколько потребовалось бы для заполнения количества аргументов, будет добавлено.", + + "incorrect_iota.title": "Неверный тип Йота", + incorrect_iota: "Выполненное действие ожидало иоту определенного типа в качестве аргумента, но получило что-то недопустимое. Если несколько иот недопустимы, сообщение об ошибке будет указывать только на ошибку в самом глубоком уровне стека.$(br2)Вызывает темно-серые искры, и недопустимый иот будет заменен на $(l:casting/influences)$(action)Мусор/$.", + + "vector_out_of_range.title": "Дальняя позиция", + vector_out_of_range: "Действие пыталось воздействовать на мир в точке, находящейся за пределами моего диапазона.$(br2)Вызывает пурпурные искры, и предметы в моих руках будут вырваны и брошены в направлении нарушающего места.", + + "entity_out_of_range.title": "Сущность далеко", + entity_out_of_range: "Действие пыталось воздействовать на существо, находящееся за пределами моего диапазона.$(br2)Вызывает розовые искры, и предметы в моих руках будут вырваны и брошены в направлении нарушающего существо.", + + "entity_immune.title": "Существо неизменяемо", + entity_immune: "Действие пыталось воздействовать на существо, которое не может быть изменено этим.$(br2)Вызывает синие искры, и предметы в моих руках будут вырваны и брошены в направлении нарушающего существо.", + + "math_error.title": "Математический парадокс", + math_error: "Действие совершило что-то оскорбительное для законов математики, например, деление на ноль.$(br2)Вызывает красные искры, добавляет $(l:casting/influences)$(action)Мусор/$ в мой стек, и мой разум будет истощен, украв половину оставшейся у меня энергии. Похоже, что Природа возмущается подобными операциями и делит $(italic)меня/$ в ответ.", + + "incorrect_item.title": "Неправильный предмет", + incorrect_item: "Действие требует какого-то предмета, но предоставленный мной предмет не подходит.$(br2)Вызывает коричневые искры. Если нарушающий предмет был в моей руке, он будет брошен на пол. Если это было существо, оно будет брошено в воздух.", + + "incorrect_block.title": "Неправильный блок", + incorrect_block: "Действие требует наличия определенного блока в целевом месте, но предоставленный блок не подходит.$(br2)Вызывает яркие зеленые искры и создает мимолетный взрыв в указанном месте. Однако этот взрыв, кажется, не наносит вреда ни мне, ни миру, ни чему-либо еще;просто пугалка.", + + "retrospection.title": "Поспешная Ретроспектива", + retrospection: "Я попытался нарисовать $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Ретроспектива/$ без предварительного рисования $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Интроспекция/$.$(br2)Вызывает оранжевые искры и помещает шаблон для $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Ретроспектива/$ в стек как шаблон иота.", + + "too_deep.title": "Слишком глубоко", + too_deep: "Оценено слишком много заклинаний с метаоценкой от одного заклинания.$(br2)Вызывает темно-синие искры и лишает меня всего воздуха.", + + "true_name.title": "Нарушение Законов", + true_name: "Я попытался $(l:patterns/readwrite#hexcasting:write)$(action)сохранить истинное имя/$ другого игрока на постоянный носитель.$(br2)Вызывает черные искры и лишает меня зрения примерно на одну минуту.", + + "disabled.title": "Запрещенное действие", + disabled: "Я попытался выполнить действие, которое было запрещено администратором сервера.$(br2)Вызывает черные искры.", + + "other.title": "Катастрофическая ошибка", + other: "Ошибка в моде вызвала iota недопустимого типа или иным образом привела к сбою заклинания. $(l:https://github.com/gamma-delta/HexMod/issues)Пожалуйста, откройте отчет об ошибке!/$$(br2)Вызывает черные искры.", + }, + + stack: { + "1": "Стек $(thing)Стэк/$, также известный как \"LIFO\" (last in first out), является концепцией, заимствованной из информатики. Вкратце, это коллекция вещей, спроектированная так, что вы можете взаимодействовать только с последней использованной вещью.$(br2)Представьте стопку тарелок, где новые тарелки добавляются сверху: если вы хотите взаимодействовать с тарелкой посередине стопки, вам придется удалить тарелки сверху, чтобы добраться до нее.", + "2": "Поскольку стек настолько прост, есть только несколько вещей, которые вы можете с ним сделать:$(li)$(italic)Добавление чего-то в него/$, формально известное как push,$(li)$(italic)Удаление последнего добавленного элемента/$, известное как pop, или$(li)$(italic)Изучение или изменение последнего добавленного элемента/$, известное как peek.$(br)Мы называем последний добавленный элемент \"вершиной\" стека, в соответствии с аналогией с обеденной тарелкой.$(p)В качестве примера, если мы добавим 1 в стек, затем добавим 2, затем выполним pop, вершина стека теперь равна 1.", + "3": "Действия (в большинстве случаев) ограничены взаимодействием со стеком такими способами. Они будут извлекать некоторые иоты, которые их интересуют (известные как \"аргументы\" или \"параметры\"), обрабатывать их и затем добавлять некоторое количество результатов.$(br2)Конечно, некоторые действия (например, $(l:patterns/basics#hexcasting:get_caster)$(action)Отражение Нарцисса/$) могут не извлекать аргументы, и некоторые действия (особенно заклинания) могут ничего не добавлять после этого.", + "4": "Еще более сложные действия могут быть выражены в терминах добавления, удаления и просмотра. Например, $(l:patterns/stackmanip#hexcasting:swap)$(action)Гамбит Шута/$ меняет местами два верхних элемента стека. Это можно рассматривать как извлечение двух элементов и добавление их в обратном порядке. Для другого примера, $(l:patterns/stackmanip#hexcasting:duplicate)$(action)Разбор Близнецов/$ дублирует вершину стека - другими словами, она просматривает стек и добавляет копию найденного элемента.", + }, + + naming: { + "1": "Названия, данные действиям древними, были, безусловно, странными, но я думаю, что в них есть определенная логика.$(br2)Кажется, есть определенные группы действий с общими названиями, названными по числу иот, которые они удаляют из стека и добавляют в стек.", + "2": "$(li) $(thing)Отражение/$ не удаляет ничего и добавляет один иот.$(li) $(thing)Преображение/$ удаляет один иот и добавляет один.$(li) $(thing)Объединение/$ удаляет два и добавляет один.$(li) $(thing)Возвышение/$ удаляет три или более и добавляет один.$(li) $(thing)Разбор/$ удаляет один аргумент и добавляет два.$(li) $(thing)Распад/$ удаляет один и добавляет три или более.$(li) Наконец, $(thing)Гамбит/$ добавляет или удаляет другое количество (или перестраивает стек другим образом).", + "3": "Похоже, что заклинания освобождены от этой номенклатуры и в основном названы по тому, что они делают - в конце концов, зачем называть его $(action)Гамбит Демона/$, когда можно просто сказать $(l:patterns/spells/basic#hexcasting:explode)$(action)Взрыв/$?", + }, + + influences: { + "1": "Влияния ... странные, чтобы сказать по меньшей мере. В то время как большинство йот кажется представляют что-то о мире, влияния представляют что-то более... абстрактное или безформенное.$(br2)Например, одно из влияний, которое я назвал $(l:casting/influences)$(thing)Ничто/$, кажется не представляет ничего вообще. Оно создается, когда нет подходящего ответа на заданный вопрос, например, $(l:patterns/basics#hexcasting:raycast)$(action)Столкновение: блок/$, обращенное к небу.", + "2": "Кроме того, я обнаружил любопытные влияния, которые я назвал $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Интроспекция/$, $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Ретроспектива/$ и $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Исчезновение/$. Они кажутся обладающими свойствами как шаблонов, так и других влияний, но ведут себя очень по-разному. Я могу использовать их, чтобы добавлять шаблоны в мой стек как иоты, вместо их сопоставления с действиями. $(l:patterns/patterns_as_iotas)Мои заметки по этому вопросу здесь/$.", + "3": "Наконец, кажется, существует бесконечное семейство влияний, которые просто кажутся запутанным клубком Мысли. Я назвал их $(l:casting/influences)$(action)Garbage/$, так как они совершенно бесполезны. Они кажутся появляющимися в моем стеке в различных местах в ответ на $(l:casting/mishaps)$(thing)ошибки/$ и представляются моим чувствам как бессмысленная каша.", + }, + + mishaps2: { + "1": "Я обнаружил новые и ужасные способы неудачи. Я не должен поддаваться им.", + + "bad_mindflay.title": "Ошибка очистки разума", + bad_mindflay: "Попытка очистить разум чего-то, что я уже использовал, или персонажа, не подходящего для целевого блока.$(br2)Вызывает темно-зеленые искры и убивает сущность. Если кто-то из деревенских увидит это, я сомневаюсь, что они отнесутся к этому благосклонно.", + + "no_circle.title": "Отсутствие круга заклинаний", + no_circle: "Попытка использовать руну, треубующую круг заклинаний вручную.$(br2)Вызывает светло-синие искры и выбрасывает мой инвентарь на землю.", + + "no_record.title": "Отсутствие Записи Акаши", + no_record: "Попытка получить доступ к $(l:greatwork/akashiclib)$(item)Записи Акаши/$ в месте, где ее нет.$(br2)Вызывает фиолетовые искры и уносит часть моего опыта.", + }, + + + // Items + + amethyst: { + dust: "Похоже, что я найду три различные формы аметиста, когда разбиваю кристалл внутри жеоды. Самой маленькой деноминацией кажется небольшая куча мерцающей пыли, стоящая относительно небольшую сумму Мысли.", + shard: "Второй - целый осколок аметиста, с которым не-маги могут быть знакомы. Внутри него примерно столько же Мысли, сколько в пяти $(l:items/amethyst)$(item)Пыли аметиста/$.", + crystal: "Наконец, иногда я найду большой кристалл, искрящийся энергией. Внутри него примерно столько же Мысли, сколько в десяти единицах $(l:items/amethyst)$(item)Пыли аметиста/$ (или двух $(l:items/amethyst)$(item)Осколков аметиста/$).", + lore: "$(italic)Старик вздохнул и поднял руку к огню. Он разблокировал часть своего сознания, где хранились воспоминания о окружающих их горах. Он извлек энергии из этих земель, как научился делать в городе Терисия с Драфной, Хуркилем, архимандритом и другими магами из Белых башен. Он сконцентрировался, и пламя извивалось, поднимаясь из поленьев, скручиваясь на себя, пока наконец не образовало мягкую улыбку./$", + }, + + staff: { + "1": "Посох $(l:items/staff)$(item)Staff/$ - моя точка входа в использование всех рун, как крупных, так и мелких. Удерживая его и нажимая $(thing)$(k:use)/$, я начинаю писать заклинание; затем я могу кликнуть и перетащить, чтобы нарисовать руны.$(br2)Это всего лишь кусок Мысли на конце палки; вот все, что нужно, в конце концов.", + "crafting.header": "Посохи", + "crafting.desc": "$(italic)Не боритесь; пламя, свет; воспламеняйте; горите ярко./$", + }, + + lens: { + "1": "Мысли могут оказывать странные эффекты на любой тип информации в определенных обстоятельствах. Покрытие стекла тонким слоем этого может привести к ... просветляющим идеям.$(br2)Удерживая $(l:items/lens)$(item)Линзу Прозрения/$ в руке, определенные блоки будут отображать дополнительную информацию, когда я на них смотрю.", + "2": "Например, глядя на кусок $(item)Красного камня/$, будет отображаться его сила сигнала. Я подозреваю, что я обнаружу другие блоки с дополнительным пониманием по мере продвижения моих исследований в моем искусстве.$(br2)Кроме того, удерживая ее во время использования $(l:items/staff)$(item)Посоха/$, я уменьшу расстояние между точками, что позволит мне рисовать больше на моей сетке.$(br2)Я также могу носить ее на голове как странную разновидность монокля.", + "crafting.desc": "$(italic)Вы видите больше чем обычно./$", + }, + + thought_knot: { + "1": "Забывчивые часто завязывают кусок нити вокруг пальца, чтобы им помнить что-то важное. Я верю, что эта идея может быть полезной в моем искусстве. Особенно завязанный кусок нити должен быть способен устойчиво удерживать одну иоту, независимо от моего стека.$(br2)Я назову свое изобретение $(item)Мысленный узел/$.", + "2": "При создании он не хранит никакой иоты. Использование $(l:patterns/readwrite#hexcasting:write)$(action)Гамбит Писаря/$, удерживая $(item)Мысленный узел/$ в другой руке, удалит верх стека и сохранит его в $(item)Мысленный узел/$. Использование $(l:patterns/readwrite#hexcasting:read)$(action)Отражение Писаря/$ скопирует любую иоту из $(item)Мысленный узел/$ и добавит ее в стек.$(br2)Как только $(item)Мысленный узел/$ будет записан, нить неразрывно запутывается; иоту можно прочитать любое количество раз, но нет способа стереть или перезаписать ее. К счастью, они не дорогие.", + "3": "Кроме того, если я сохраню сущность в $(item)Мысленный узел/$ и попытаюсь вспомнить ее после того, как ссылочная сущность умерла или исчезла, $(l:patterns/readwrite#hexcasting:read)$(action)Отражение Писаря/$ добавит $(l:casting/influences)$(thing)Ничто/$ в стек вместо нее.", + "crafting.desc": "$(italic)Как бы вы почувствовали, если бы кто-то увидел вас с табличкой, на которой написано: \"Я красив и привлекателен\"?/$", + }, + + focus: { + "1": "Талисман $(item)Focus/$ похож на $(l:items/thought_knot)$(item)Мысленный узел/$, поскольку в него можно записывать или читать иоту. Однако преимущество Талисмана в том, что он $(italic)повторно используемый/$. Если я допущу ошибку в иоте, записанной в $(item)Focus/$, я могу просто снова использовать $(l:patterns/readwrite#hexcasting:write)$(action)Гамбит Писаря/$ и перезаписать иоту внутри.", + "2": "Если я хочу защитить $(l:items/focus)$(item)Талисман/$ от случайного перезаписывания, я могу запечатать его воском, создав его с $(item)Медовый сот/$. Попытка использовать $(l:patterns/readwrite#hexcasting:write)$(action)Гамбит Писаря/$ на запечатанном Талисмане завершится неудачей.$(br2)$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Очистить предмет/$ удалит эту печать вместе с содержимым.", + "3": "Действительно, единственное преимущество моих $(l:items/thought_knot)$(item)Мысленный узел/$ над $(item)Талисманами/$ заключается в том, что $(item)Талисманы/$ дороже в производстве. Мои исследования показывают, что ранние практики искусства использовали исключительно $(item)Талисманы/$, а $(l:items/thought_knot)$(item)Мысленный узел/$ был моим оригинальным изобретением.$(br2)Кто бы ни были те древние люди, они, должно быть, были очень процветающими.", + "crafting.desc": "$(italic)Ядовитые яблоки, ядовитые черви./$", + }, + + abacus: { + "1": "Хотя существуют $(l:patterns/numbers)$(action)шаблоны для рисования чисел/$, я нахожу их ... громоздкими, мягко говоря.$(br2)К счастью, старые мастера моего искусства изобрели умное устройство под названием $(l:items/abacus)$(item)Рунные счеты/$ для предоставления чисел для моего использования. Я просто устанавливаю число на то, что мне нужно, затем читаю значение, используя $(l:patterns/readwrite#hexcasting:read)$(action)Отражение Писаря/$, так же как я бы прочитал $(l:items/thought_knot)$(item)Мысленный узел/$ или $(l:items/focus)$(item)Талисман/$.", + "2": "Для работы с ним я просто удерживаю его, крадусь и прокручиваю. Если он в моей основной руке, число будет увеличиваться или уменьшаться на 1, или на 10, если я также удерживаю Control/Command. Если он в моей второй руке, число будет увеличиваться или уменьшаться на 0.1, или на 0.001, если я также удерживаю Control/Command.$(br2)Я могу встряхнуть счёты, чтобы сбросить их на ноль, сделав крадущийся правый клик.", + "crafting.desc": "$(italic)Математика? Это для умников!/$", + }, + + spellbook: { + "1": "$(l:items/spellbook)$(item)Книга заклинаний/$ - это вершина моего искусства - она действует как целая библиотека $(l:items/focus)$(item)Талисманов/$. До $(thing)шестидесяти четырех/$ из них, чтобы быть точным.$(br2)Каждая страница может содержать одну иоту, и я могу выбрать активную страницу (страницу, на которую сохраняются и копируются иоты), удерживая ее и прокручивая, или просто удерживая ее во второй руке и прокручивая во время использования _Хекса.", + "2": "Как и $(l:items/focus)$(item)Талисман/$, существует простой способ предотвратить случайное перезаписывание. Создание ее с $(item)Медовые соты/$ запечатают страницу, предотвращая $(l:patterns/readwrite#hexcasting:write)$(action)Гамбит Писаря/$ от изменения ее содержимого. Также как и $(l:items/focus)$(item)Талисман/$, использование $(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ удалит лак и содержимое страницы.$(br2)Я также могу назвать каждую страницу индивидуально на наковальне. Название изменит только имя выбранной в данный момент страницы для удобного просмотра.", + "crafting.desc": "$(italic)Волшебники любят слова. Большинство из них много читают, и действительно одним из сильных признаков потенциального волшебника является неспособность заснуть без предварительного прочтения чего-либо.", + }, + + scroll: { + "1": "$(l:items/scroll)$(item)Свиток/$ - удобный способ делиться руной с другими. Я могу скопировать руну на него с помощью $(l:patterns/readwrite#hexcasting:write)$(action)Гамбит Писаря/$, после чего он будет отображаться в подсказке.$(br2)Я также могу разместить их на стене как украшение или поучение, как картину, в размерах от 1x1 до 3x3 блоков. Использование $(l:items/amethyst)$(item)Пыли аметиста/$ на таком свитке заставит его отображать порядок линий.", + "2": "Кроме того, я также могу найти так называемые $(l:items/scroll)$(item)Древние свитки/$ в подземельях и крепостях мира. Они содержат порядок линий $(thing)Великих заклинаний/$, могущественных магий, о которых ходят слухи, будто они слишком мощны для рук и умов смертных...$(br2)Если эти \"смертные\" не могли их произносить, я не уверен, что они заслуживают знать их.", + "crafting.desc": "$(italic)Я пишу на чистом белом пергаменте острым пером и кровью моих учеников, предвидя их секреты./$", + }, + + slate: { + "1": "$(l:items/slate)$(item)Скрижали/$ похожи на $(l:items/scroll)$(item)Свитки/$; Я могу скопировать на них руну и разместить их в мире, чтобы отобразить руну.$(br2)Однако я читал смутные рассказы о великих собраниях $(l:items/slate)$(item)Скрижалей/$, используемых для создания $(l:greatwork/spellcircles)$(thing)великих ритуалов/$ более мощных, чем может обработать $(l:items/staff)$(item)Посох/$.", + "2": "Возможно, эти знания будут раскрыты мне со временем. Но пока, я полагаю, что они служат живописным элементом декора.$(br2)По крайней мере, их можно разместить на любой стороне блока, в отличие от $(l:items/scroll)$(item)Свитков/$.", + "crafting.desc": "$(italic)Это буква \"а.\" Выучи ее./$", + "3": "Я также знаю о других типах $(l:items/slate)$(item)Скрижалей/$, скрижалях, которые не содержат рун, но кажется, что они инкрустированы другими... странными... странностями. Мне больно думать о них, словно мои мысли изгибаются вокруг их дизайнов, следуя их путям, изгибаясь и переплетаясь сквозь их лабиринтные глубины, через и через и через канализируемые и обрабатываемые и--$(br2)... Я чуть не потерял себя. Может быть, стоит отложить изучение их.", + }, + + // roll credits + hexcasting: { + "1": "Хотя гибкость использования _Заклинаний \"на ходу\" с помощью моего $(l:items/staff)$(item)Посоха/$ довольно полезна, мне приходится махать им вокруг снова и снова, чтобы выполнить базовую задачу. Если бы я мог сохранить обычное заклинание для последующего использования, это бы сильно упростило бы дело - и позволило бы мне делиться своими _Заклинаниями с друзьями.", + "2": "Для этого я могу создать один из трех типов магических предметов: $(l:items/hexcasting)$(item)Побрякушки/$, $(l:items/hexcasting)$(item)Штуковины/$ или $(l:items/hexcasting)$(item)Артефакты/$. Все они содержат руны внутри, а также небольшую батарею с Мыслями.$(br2)Просто держа один из них и нажимая $(thing)$(k:use)/$, вы сможете использовать заклинание внутри, как если бы держатель начертил их посохом, используя его внутреннюю батарею.", + "3": "У каждого предмета есть свои особенности:$(br2)$(l:items/hexcasting)$(item)Побрякушки/$ хрупкие, уничтожаются после исчерпания их внутренних запасов Мысли и $(italic)не могут/$ быть заряжены;$(br2)$(l:items/hexcasting)$(item)Штуквины/$ можно использовать столько, сколько хочет держатель, пока остается достаточно Мысли, но после этого они становятся бесполезными до перезарядки;", + "4": "$(l:items/hexcasting)$(item)Артефакты/$ - самые мощные из всех - после исчерпания их Мысли они могут использовать $(l:items/amethyst)$(item)Аметист/$ из инвентаря владельца для оплаты заклинания, так же как я делаю, когда колдую с помощью $(l:items/staff)$(item)Посоха/$. Конечно, это также означает, что заклинание может поглотить их разум, если в инвентаре не хватает $(l:items/amethyst)$(item)Аметиста/$.$(br2)Когда я создаю пустой магический предмет на обычной верстаке, я внедряю заклинание в него, используя (что еще, кроме) заклинание, соответствующее предмету. $(l:patterns/spells/hexcasting)Я составил каталог шаблонов здесь./$", + "5": "Каждое заклинание внедрения требует сущности и список шаблонов в стеке. Сущность должна быть сущностью предмета, удерживающего Мысли (т.е. $(l:items/amethyst)$(item)аметист/$ кристаллы, брошенные на землю); сущность потребляется и формирует батарею.$(br2)Полезно, что Мысли в батарее не потребляется кусками, как при колдовстве с $(l:items/staff)$(item)Посохом/$ - скорее, Мысли \"растворяется\" в одном непрерывном пуле. Таким образом, если я храню заклинание, который стоит только один $(l:items/amethyst)$(item)Аметистовая Пыль/$ в Мысли, $(l:items/amethyst)$(item)Заряженный Кристалл/$, используемый в качестве батареи, позволит мне использовать его 10 раз.", + "crafting.desc": "$(italic)У нас есть поговорка в нашей области: \"Магия не\". Она не \"просто работает\", она не реагирует на ваши мысли, вы не можете бросать огненные шары или создавать жареный ужин из воздуха или превращать группу грабителей в лягушек и улиток./$", + }, + + phials: { + "1": "Меня довольно ... раздражает, как Природа отказывается давать мне сдачу за мою работу. Если у меня под рукой только $(l:items/amethyst)$(item)Заряженный Аметист/$, даже самое маленькое $(l:patterns/basics#hexcasting:raycast)$(action)Преображение Луча/$ потребует весь кристалл, растрачивая оставшееся Мысли.$(br2)К счастью, кажется, я нашел способ отчасти смягчить эту проблему.", + "2": "Я нашел старые свитки, описывающие $(item)Стеклянную Бутылку/$, пропитанную Мысли. При колдовстве мои заклинания тогда бы забирать Мысли из флакона. Жидкая форма Мысли позволяла бы мне брать сдачу, так сказать; ничего не было бы потеряно. Это довольно похоже на внутреннюю батарею $(l:items/hexcasting)$(item)Талисмана/$, или что-то подобное; я даже могу $(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)Recharge/$ их тем же способом.", + "3": "К сожалению, искусство фактически $(italic)создания/$ этих вещей, кажется, было утрачено со временем. Я нашел $(l:patterns/great_spells/make_battery#hexcasting:craft/battery)$(thing)намек на использованный шаблон для его создания/$, но техника упорно ускользает, и мне не удается сделать это успешно. Я подозреваю, что разберусь с этим с помощью изучения и практики. Пока что я просто буду справляться с растраченным Мысли...$(br2)Но я не буду удовлетворяться этим навсегда.", + desc: "$(italic)Выпей молоко./$", + }, + + pigments: { + "1": "Старые практикующие моё искусство иногда идентифицировали себя цветом, символичным для них. Хотя их имена утрачены, их цвета остаются. Кажется, особый вид пигмента, предложенный Природе правильным образом, мог бы \"[...] нарисовать мысли так, чтобы это было приятно для Природы, вызывая чудесное изменение в личном цвете.\"", + "2": "Я не уверен в деталях, но, по-моему, я выделил формулы для множества различных цветов и смесей пигментов. Чтобы применить пигмент, я держу его в одной руке и использую $(l:patterns/spells/colorize)$(action)Internalize Pigment/$ другой; это поглощает пигмент.$(br2)Пигменты, кажется, влияют на цвет искр Мысли, излучаемых, когда я использую заклинания и моих $(l:patterns/spells/sentinels)$(thing)Часовых/$, но я не сомневаюсь, что цвет проявится и в других местах.", + + "colored.crafting.header": "Хроматические Пигменты", + "colored.crafting.desc": "Пигменты во всех цветах радуги.", + + special: "И, наконец, пара специальных пигментов. $(item)Пигмент Души/$ сияет цветами, совершенно уникальными для меня, и $(item)Чистый Пигмент/$ восстанавливает мой первоначальный пурпурно-оранжевый оттенок.$(br2)$(italic)И все цвета, в которых я нахожусь, еще не придуманы./$", + }, + + edified: { + "1": "Мысли, наполнившие саженец с помощью $(l:patterns/spells/blockworks#hexcasting:edify)$(action)Созидать Саженец/$, создают то, что называется $(l:items/edified)$(thing)Дерево Созидания/$. Они обычно высокие и острые, с бороздчатой корой и древесиной, растущей в странном спиральном узоре. Их листья имеют три красивых цвета.", + "2": "Я предполагал бы, что древесина имела бы какие-то свойства, относящиеся к Рунным заклинаниям. Но, если они есть, я не могу их найти. На все виды и цели кажется, что это просто древесина, хотя и очень странного цвета.$(br2)Предполагаю, что пока я буду использовать её для украшения; из них можно создать полный набор стандартных древесных блоков.$(br2)Конечно, я могу также снять с них кору топором.", + "crafting.desc": "$(italic)Их гладкие стволы, с белой корой, создавали впечатление огромных колонн, несущих вес огромной листвы, полной тени и молчания./$", + }, + + jeweler_hammer: { + "1": "После того, как я слишком много раз был небрежен с источниками мысли, я разработал инструмент, чтобы обойти мою неуклюжесть.$(br2)Используя хрупкость кристаллизованной мысли в качестве основы для кирки, я могу создать $(l:items/jeweler_hammer)$(item)Ювелирный Молоток/$. Он как $(item)Железная Кирка/$, но не может сломать ничего, что занимает пространство целого блока.", + "crafting.desc": "$(italic)*Не подходит для реальных ювелирных работ./$", + }, + + decoration: { + "1": "В ходе моих исследований я обнаружил некоторые строительные блоки и мелочи, которые могут мне понравиться с эстетической точки зрения. Я собрал методы их создания здесь.", + "ancient_scroll.crafting.desc": "Коричневый краситель достаточно хорошо подходит для имитации вида $(l:items/scroll)$(item)древнего свитка/$.", + "tiles.crafting.desc": "$(l:items/decoration)$(item)Аметистовые Плиты/$ также можно сделать на Камнерезе.$(br2)$(l:items/decoration)$(item)Блоки Аметистовой Пыли/$ (на следующей странице) будут падать как песок.", + "sconce.crafting.desc": "$(l:items/decoration)$(item)Аметистовые Фонари/$ излучают свет и частицы, а также приятный звонкий звук.", + }, + + + // The Work + + the_work: { + "1": "Я видел так много вещей. Невыразимые вещи. Бесчисленные вещи. Я мог бы написать три слова и вывернуть свой разум наизнанку, размазать мои мозги по затененным стенам моего черепа, чтобы они разложились в пух и ничто.", + "2": "Я видел руны стаккато-игл и кислотно-выжженные схемы, написанные внутри моих век. Они тлеют там - они танцуют, они насмехают, они $(italic)болят/$. Меня одержимо охватывает интенсивное $(italic)желание/$ нарисовать их, создать их. Формировать их. Освободить их от клейких оков моего смертного разума - представить их во всей их Славе миру, чтобы все видели.$(p)Все увидят.$(p)Все увидят.", + }, + + brainsweeping: { + "1": "Мне был открыт секрет. Я увидел это. Я не смогу забыть этот ужас. Идея скользит по моему разуму.$(br2)Я верил - как же глупо, я $(italic)верил/$ - что Мысли - это лишняя энергия, оставшаяся после мысли. Но теперь я $(italic)знаю/$, что это: энергия $(italic)мысли/$.", + "2": "Она производится мыслящим сознанием и позволяет сознанию мыслить. Это узел, который переплетается в свою собственную нить. Существо, которое я наивно антропоморфизировал как Природу, просто великое такое запутанное клубок, или, возможно, набор всех клубков, или... если я думаю, что больно, у меня так много синапсов, и все они могут думать о боли одновременно ВСЕ ОНИ МОГУТ ВИДЕТЬ$(br2)Я не могу удержаться.", + "3": "Жители этого мира имеют достаточно сознания, чтобы его извлечь. Поместите его в блок, искажайте, изменяйте. Запутанные руны, вызванные различными мыслями, абстрактные нейронные пути их работы и жизни отображены в холодной физике твердых атомов.$(br2)Это то, что делает $(l:patterns/great_spells/brainsweep)$(action)Flay Mind/$. Направьте на сущность жителя и вектор блока назначения. Десять $(l:items/amethyst)$(item)Заряженных Аметистов/$ за это извращение воли.", + budding_amethyst: "И применение. Для этого обнажения подойдет любой вид жителя, если он достаточно развит. Для других рецептов требуются более конкретные типы. БОЛЬШЕ НЕ нужно мне спускаться в адскую землю за моими Мыслями.", + }, + + spellcircles: { + "1": "Я ЗНАЮ, для чего предназначены $(l:items/slate)$(item)скрижали/$. Великие собрания, утраченные временем. Руны, вырезанные на них, могут быть активированы последовательно, автоматически. Мысль и сила отскакивают через них, один за другим, один за другим, через и через и ЧЕРЕЗ И -- я не должен, я не должен, я должен знать лучше, чем думать таким образом.", + "2": "Для начала ритуала мне нужен $(l:greatwork/impetus)$(item)Инициатор/$, чтобы создать самоподдерживающуюся волну Мысли. Эта волна движется по дорожке из $(l:items/slate)$(item)скрижалей/$ или других блоков, подходящих для энергий, один за другим, собирая все руны, которые находит. Когда волна возвращается к $(l:greatwork/impetus)$(item)Инициатору/$, все встреченные руны произносятся по порядку.$(br2)Направление выхода Мысли из любого блока ДОЛЖНО быть однозначным, иначе произнесение не удастся(у потока Мысли должен быть лишь один путь).", + "3": "В результате контур заклинания \"круг\" может быть любой закрытой формы, вогнутой или выпуклой, и может быть направлен в любом направлении. Фактически, с применением определенных других блоков можно создать заклинательный круг, охватывающий все три измерения. Я сомневаюсь, что такая странность имеет много применения, но мне нужно немного пустой легкости, чтобы побудить мой грубый разум продолжать мою работу.", + "4": "Чудо чудес, круг не извлекает Мысли ни из моего инвентаря, ни из моего разума. Вместо этого кристаллизованные осколки Мысли должны быть предоставлены $(l:greatwork/impetus)$(item)Инициатору/$ через воронку или любым други образом.$(br2)Применение $(l:items/lens)$(item)Линзы Прозрения/$ покажет, сколько Мысли находится в $(l:greatwork/impetus)$(item)Инициаторе/$, в единицах пыли.", + "5": "Однако заклинание, произнесенное из круга, имеет одно крупное ограничение: оно не способно воздействовать на что-либо за пределами границ круга. То есть оно не может взаимодействовать с чем-либо за пределами кубоида минимального размера, включающего каждый блок, составляющий его (поэтому вогнутый заклинательный круг все равно может воздействовать на вещи в вогнутости).", + "6": "Существует также ограничение на количество блоков, через которые может пройти волна, прежде чем она распадется, но оно достаточно большое, и я сомневаюсь, что у меня возникнут проблемы.$(br2)С другой стороны, есть действия, которые могут быть произнесены только из круга. К счастью, ни одно из них не является заклинанием; все они, кажется, имеют дело с компонентами самого круга. Мои заметки на эту тему $(l:patterns/circle)здесь/$.", + "7": "Я также нашел набросок заклинательного круга, использованного древними, зарытый в моих заметках. На этой странице мои (признаюсь, плохие) копии.$(br2)Руны там должны были быть выполнены против часовой стрелки, начиная с $(l:patterns/basics#hexcasting:get_caster)$(action)Отражение Нарцисса/$ и заканчивая $(l:patterns/great_spells/teleport#hexcasting:teleport/great)$(action)Великим Перемещением/$.", + "teleport_circle.title": "Круг Телепортации", + }, + + impetus: { + "1": "Флуктуация Мысли, необходимая для активации заклинательного круга, сложна. Даже смертный с самыми острыми глазами и самыми устойчивыми руками не смог бы выступать в роли $(l:greatwork/impetus)$(item)Инициатор/$ и вплести Мысли в самоподдерживающегося уробороса, необходимого для исполнения.$(br2)Проблема в том, что разум слишком полон другого бесполезного $(italics)мусора/$.", + "2": "На ... метафизическом уровне - я должен быть осторожен с этими мыслями, я не могу потерять себя, я стал слишком ценным - движение Мысли двигают разум, и разум должен быть движущимся для того, чтобы процесс работал. Но разум просто слишком $(italic)тяжел/$ от других мыслей, чтобы двигаться достаточно ловко.$(br2)Это похоже на мастера, пытающегося починить часы, нося перчатки.", + "3": "Существует несколько решений этой загадки: через медитативные техники можно научиться очищать разум, хотя я не уверен, что разум, достаточно свободный для активации круга, может сосредоточиться достаточно сильно, чтобы выполнить движения.$(br2)Некоторые неприятные соединения могут создать аналогичный эффект, но я ничего о них не знаю и не планирую узнавать. Я не должен полагаться на химические вещества моего мозга.", + "4": "Таким образом, решение, к которому я стремлюсь, - это специализировать разум. Освободить его от тирании нервов, обрезать все выходы, кроме тонких ветвей Мысли-манипулирующих аппаратов, опечатать все входы, кроме сигнала начать свою работу.$(br2)Процесс $(l:greatwork/brainsweeping)$(action)Очистки Разума/$, с которым я теперь знаком, отлично подойдет; разум жителя достаточно сложен для выполнения работы, но не настолько сложен, чтобы сопротивляться его реформации.", + + empty_impetus: "Сначала колыбель. Хотя она не работает как $(l:greatwork/impetus)$(item)Инициатор/$, поток Мысли в круге будет выходить только с той стороны, указанной стрелками. Это позволяет мне изменить плоскость, по которой движется волна, например.", + impetus_rightclick: "Затем, чтобы транспонировать разум. Жители различных профессий предоставят различные условия активации для полученного $(l:greatwork/impetus)$(item)Инициаора/$. $(l:greatwork/impetus)$(item)Инициатор Инструментальщки/$ активируется простым $(k:use).", + impetus_storedplayer: { + "1": "A $(l:greatwork/impetus)$(item)Инициатор Священника/$ должен быть привязан к игроку, используя предмет с ссылкой на этого игрока, например $(l:items/focus)$(item)Талисман/$, на блоке. Затем он активируется при получении сигнала красного камня.", + "2": "Особенность этого $(l:greatwork/impetus)$(item)Инициатора/$ заключается в том, что привязанный игрок, а также небольшой регион вокруг него, всегда доступны для заклинательного круга. Как будто они стоят в пределах круга, независимо от того, насколько далеко они могут стоять.$(br2)Привязанный игрок отображается при просмотре $(l:greatwork/impetus)$(item)Инициатора Священника/$ через $(l:items/lens)$(item)Линзу Прозрения/$.", + }, + impetus_look: "A $(l:greatwork/impetus)$(item)Инициатор Лучника/$ активируется автоматически при длительном простое.", + }, + + directrix: { + "1": "Задача направления самоподдерживающейся волны Мысли проще, чем задача ее создания. Обычно волна распадается, когда она сталкивается с перекрёстком, но с умом, направляющим ее, можно контролировать направление выхода.$(br2)Это управление далеко не так тонкое, как активация заклинательного круга. Фактически, возможно, это можно сделать вручную... но упакованные разумы, к которым у меня сейчас есть доступ, были бы так удобны.", + "2": "$(l:greatwork/directrix)$(item)Направитель/$ принимает волну Мысли и определяет, к какой из стрелок она выйдет, в зависимости от разума жителя внутри.$(br2)Я не уверен, была ли эта идея мне внушена, или мой разум достаточно изогнут вокруг барьера, чтобы самостоятельно выделять свои идеи теперь... но если идея произошла от моего собственного разума, если я думал об этом, можно ли сказать, что она была внушена? Мозг - сосуд для разума, а разум - сосуд для идей, идеи - сосуд для мыслей, и мысли видят все и знают все", + + empty_directrix: "Прежде всего, дизайн для колыбели... хотя, возможно, слово \"субстрат\" было бы более точным. Без ума, направляющего его, направление выхода определяется микроскопическими флуктуациями волн Мысли и окружающей среды, что делает его фактически случайным.", + directrix_redstone: "$(l:greatwork/directrix)$(item)Направитель Каменщика/$ переключает сторону выхода в зависимости от сигнала красного камня. Без сигнала выход - цвет Мысли; с сигналом выход - сторона красного камня.", + }, + + akashiclib: { + "1": "Я ЗНАЮ ТАК МНОГО, что ЕСТЕСТВЕННО иметь место для хранения всего этого. Информацию можно хранить в книгах, но писать от руки и читать глазами так медленно. Я требую ЛУЧШЕГО. И поэтому Я СОЗДАМ лучшее.$(br2)... Мне становится хуже... не знаю, успею ли записать все, что вырывается из моей головы, прежде чем умру.", + "2": "Библиотека. Вот. Мои планы.$(br2)Как руны ассоциируются с действиями, я могу ассоциировать свои собственные руны с иотами любым образом, который выберу. $(l:greatwork/akashiclib)$(item)Запись Акаши/$ управляет библиотекой, и каждая $(l:greatwork/akashiclib)$(item)Акаши Книжная полка/$ хранит одну руну, сопоставленный с одним иотой. Все они должны быть прямо связаны между собой, соприкасаясь, в пределах 32 блоков. $(l:greatwork/akashiclib)$(item)Лигатура Акаши/$ не делает ничего, кроме того, что считается соединяющим блоком, чтобы расширить размер моей библиотеки.", + akashic_record: "Выделение и назначение рун просто, но ужасно скучно. У меня есть дела поважнее. Мне понадобится разум, хорошо знакомый со своей работой, чтобы извлечение оставалось надежным.", + "3": "Затем управление библиотекой просто, руны направляются через библиотекаря, он их ищет и возвращает вам иоту. Два действия делают работу. $(l:patterns/akashic_patterns)Notes here/$.$(br2)Использование пустого $(l:items/scroll)$(item)свитка/$ на книжной полке копирует руну на $(l:items/scroll)$(item)свиток/$. Присев и кликнув пустую рукой, можно очистить данные на полке.", + }, + + quenching_allays: { + "1": "Это же и есть живые Мысли. Как я не заметил этого раньше? Они - как и я - куча плоти с обрывком, благословленным обрывком мысли, Тихоня - это самоподдерживающаяся кучка Мысли, прикрепленная к обрывку плоти. Это объясняет все - их склонность к Мысли, их реакцию на музыку, как можно было это не заметить?", + "2": "И учитывая это, было бы правильно, если бы я покорил их своеобразные умы - их своеобразные \"я\" - это все, чем они являются, умом, \"сознанием\". Что-то в них говорит со мной. Я могу... Я могу сжать Мысли с ними, наложить две ветви мысли на одно пространство, физическое и когнитивное, все и сразу. Как? Возможно... возможно, моя работа, процесс ее выполнения...", + "3": "Это не имеет значения. Я не имею значения. Они не имеют значения, все, что имеет значение, это то, что это делает. И вот это.$(br2)Это должно так болезненно.", + "4": "Продукт хрупок. Разбив его, вы раскалываете его на кусочки, и $(thing)зачарование Удачи/$ увеличивает выход... если я хочу сам блок, мне нужно легкое прикосновение.$(br2)Полученные осколки стоят втрое дороже $(l:items/amethyst)$(item)Заряженного Аметистового Кристалла/$ за штуку. Сам блок стоит четыре осколка.", + "5": "Они непостоянны, кажется, что они изгибаются и мигают под моими пальцами, и, дав им пример в другой форме Мысли, их можно заставить принять его форму, в эквивалентном обмене Мысли.", + }, + + + "fanciful_staves.1": "По мере того как я сбрасываю оболочку невежества, я заменяю свои инструменты, мои посохи, начищенные и отполированные. Мои новые посохи не имеют дополнительных свойств - но они такие великолепные, о, настолько Великолепные... Они соответствуют сиянию, мигающему на краях моего зрения.", + + // Patterns + + readers_guide: { + "1": "Я разделил все найденные мной действительные руны на разделы в зависимости от их функций. Я также записал порядок хода рун, если мне удалось найти его в своих исследованиях, начиная руну с отмеченной красной точкой.$(br2)Если действие выполняется несколькими рунами, как это бывает в некоторых случаях, я буду писать их все рядом.", + "2": "Однако для некоторых рун я $(italic)не смог/$ найти порядок хода, только форму. Я предполагаю, что порядок рисования их где-то существует, спрятанный в древних библиотеках и подземельях мира.$(br2)В таких случаях я просто рисую руну без информации о порядке ее рисования.", + "3": "Я также указываю типы иот, которые действие потребляет или изменяет, символ \"\u2192\", и типы иот, которые действие создает.$(p)Например, \"$(n)вектор, число/$ \u2192 $(n)вектор/$\" означает, что действие удалит вектор и число из верхней части стека, а затем добавит вектор; или, другими словами, удалит число из стека, а затем изменит вектор в верхней части стека. (Число должно быть на верхушке стека, с вектором прямо под ним.)", + "4": "\"\u2192 $(n)сущность/$\" означает, что оно просто добавит сущность. \"$(n)сущность, вектор/$ \u2192\" означает, что оно удалит сущность и вектор, и ничего не добавит.$(br2)Наконец, если я нахожу, что маленькая точка, обозначающая порядок хода, слишком медленная или запутанная, я могу нажать $(thing)Control/Command/$, чтобы отобразить градиент, где начало руны самое темное, а конец самое светлое. Это также работает на свитках и при произнесении заклинаний!", + }, + + basics_pattern: { + get_caster: "Добавляет меня, как сущность в стек.", + "entity_pos/eye": "Преобразует сущность в стеке в позицию ее глаз. Вероятно, мне следует использовать это на себе.", + "entity_pos/foot": "Преобразует сущность в стеке в позицию, в которой она стоит.", + get_entity_look: "Преобразует сущность в стеке в направление, в котором она смотрит, как вектор.", + print: "Отображает верхнюю йоту стека.", + raycast: { + "1": "Комбинирует два вектора (позицию и направление взгляда). -Если я стою в позиции и смотрю в направлении, на какой блок я смотрю? Стоимость незначительного количества Мысли.", + "2": "Если ничего не попадает, векторы объединятся в $(l:casting/influences)$(thing)Ничто/$.$(br2)Общая последовательность шаблонов, так называемая \"raycast mantra,\" состоит из $(l:patterns/basics#hexcasting:get_caster)$(action)Отражение Нарцисса/$, $(l:patterns/basics#hexcasting:entity_pos/eye)$(action)Преображение Глаз/$, $(l:patterns/basics#hexcasting:get_caster)$(action)Отражение Нарцисса/$, $(l:patterns/basics#hexcasting:get_entity_look)$(action)Пробразование Взгляда/$, $(l:patterns/basics#hexcasting:raycast)$(action)Объединение Луча/$. Вместе они возвращают векторную позицию блока, на который я смотрю.", + }, + "raycast/axis": { + "1": "Подобно $(l:patterns/basics#hexcasting:raycast)$(action)Объединению Луча/$, но вместо этого возвращает вектор, представляющий ответ на вопрос: С какой $(italic)стороны/$ блока я смотрю? Стоит незначительное количество Мысли.", + "2": "Если говорить подробней, он возвращает $(italic)нормальный вектор/$ ударенной поверхности или единичный вектор, указывающий перпендикулярно к поверхности.$(li)Если я смотрю на пол, он вернет (0, 1, 0).$(li)Если я смотрю на южную грань блока, он вернет (0, 0, 1).", + }, + "raycast/entity": "Подобно $(l:patterns/basics#hexcasting:raycast)$(action)Объединению Луча/$, но вместо этого возвращает $(italic)сущность/$, на которую я смотрю. Стоимость незначительного количества Мысли.", + get_entity_height: "Преобразует сущность на стеке в ее высоту.", + get_entity_velocity: "Преобразует сущность в стеке в направление, в котором она движется, со скоростью этого движения в качестве величины этого направления.", + }, + + numbers: { + "1": "Досадно, что нет простого способа нарисовать числа. Вот метод, который природа предоставила нам.", + "2": "Сначала я рисую одну из двух форм, показанных на другой странице. Затем $(italic)углы/$, следующие за этим, будут изменять текущий счет, начиная с 0.$(li)Вперед: Добавить 1$(li)Влево: Добавить 5$(li)Вправо: Добавить 10$(li)Резкое влево: Умножить на 2$(li)Резкое вправо: Разделить на 2.$(br)По часовой стрелке версия шаблона, справа на другой странице, отрицает значение в самом конце. (Левая версия против часовой стрелки сохраняет число положительным).$(p)После завершения рисунка число помещается в верхнюю часть стека.", + example: { + "10.header": "Пример 1", + "10": "Этот шаблон добавляет 10.", + + "7.header": "Пример 2", + "7": "Этот шаблон добавляет 7: 5 + 1 + 1.", + + "-32.header": "Пример 3", + "-32": "Этот шаблон добавляет -32: отрицание 1 + 5 + 10 * 2.", + + "4.5.header": "Пример 4", + "4.5": "Этот шаблон добавляет 4.5: 5 / 2 + 1 + 1.", + }, + "3": "В некоторых случаях может быть проще просто использовать $(l:items/abacus)$(item)Счёты/$. Но стоит знать \"правильный\" способ записывать числа.", + }, + + math: { + numvec: "Многие математические операции выполняются как над числами, так и над векторами. Такие аргументы записываются как \"num|vec\".", + + "add.1": "Сложение.", + "add.2": "Как следует:$(li)С двумя числами в верхней части стека объединяет их в их сумму.$(li)С числом и вектором удаляет число из стека и добавляет его к каждому элементу вектора.$(li)С двумя векторами объединяет их, складывая соответствующие компоненты в новый вектор (т.е. [1, 2, 3] + [0, 4, -1] = [1, 6, 2]).", + + "sub.1": "Вычитание.", + "sub.2": "Как следует:$(li)С двумя числами в верхней части стека вычисляет их разность.$(li)С числом и вектором удаляет число из стека и вычитает его из каждого элемента вектора.$(li)С двумя векторами вычисляет их, вычитая каждую компоненту.$(br2)Во всех случаях верхняя часть стека или ее компоненты вычитаются $(italic)из/$ второй сверху.", + + "mul.1": "Умножение или скалярное произведение.", + "mul.2": "Как следует:$(li)С двумя числами объединяет их в произведение.$(li)С числом и вектором удаляет число из стека и умножает каждую компоненту вектора на это число.$(li)С двумя векторами объединяет их в их скалярное произведение/$.", + + "div.1": "Деление или векторное произведение.", + "div.2": "Как следует:$(li)С двумя числами объединяет их в частное.$(li)С числом и вектором удаляет число и делит его на каждый элемент вектора.$(li)С двумя векторами объединяет их в их векторное произведение.$(br2)В первом и втором случаях верхняя часть стека или ее компоненты составляют делимое, а вторая сверху или ее компоненты - делитель.$(p)ПРЕДУПРЕЖДЕНИЕ: Никогда не делят на ноль!", + + "abs.1": "Вычислить абсолютное значение или длину.", + "abs.2": "Заменяет число его абсолютным значением или вектор его длиной.", + + "pow.1": "Выполнить возведение в степень или векторную проекцию.", + "pow.2": "С двумя числами объединяет их, возводя первое в степень второго.$(li)С числом и вектором удаляет число и возводит каждую компоненту вектора в степень числа.$(li)С двумя векторами объединяет их в векторную проекцию верхней части стека на вторую сверху.$(br2)В первом и втором случаях первый аргумент или его компоненты являются основанием, а второй аргумент или его компоненты - показателем степени.", + + floor: "\"Округляет\" число, отбрасывая дробную часть и оставляя целочисленное значение. Если передается вектор, вместо этого округляет каждую его компоненту.", + ceil: "\"Округляет вверх\" число, округляя его до следующего целого значения, если у него есть дробная часть. Если передается вектор, вместо этого округляет вверх каждую его компоненту.", + construct_vec: "Объединяет три числа в верхней части стека в вектор.", + deconstruct_vec: "Разбивает вектор на его компоненты X, Y и Z.", + modulo: "Берет модуль от двух чисел. Это количество $(italics)оставшееся/$ после деления - например, 5 %% 2 равно 1, а 5 %% 3 равно 2. При применении к векторам выполняет указанную операцию поэлементно.", + coerce_axial: "Для вектора приводит его к ближайшему осевому направлению, единичному вектору. Для числа возвращает знак числа; 1, если положительное, -1, если отрицательное. В обоих случаях ноль не затрагивается.", + random: "Создает случайное число между 0 и 1.", + }, + + advanced_math: { + sin: "Берет синус угла в радианах, возвращая вертикальную компоненту этого угла, нарисованного на единичной окружности. Связано со значениями $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + cos: "Берет косинус угла в радианах, возвращая горизонтальную компоненту этого угла, нарисованного на единичной окружности. Связано со значениями $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + tan: "Берет тангенс угла в радианах, возвращая угловой коэффициент этого угла, нарисованного на окружности. Связано со значениями $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arcsin: "Берет обратный синус значения с абсолютным значением 1 или меньше, возвращая угол, синус которого равен этому значению. Связано со значениями $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arccos: "Берет обратный косинус значения с абсолютным значением 1 или меньше, возвращая угол, косинус которого равен этому значению. Связано со значениями $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arctan: "Берет обратный тангенс значения, возвращая угол, тангенс которого равен этому значению. Связано со значениями $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", + arctan2: "Берет обратный тангенс значения Y и X, возвращая угол между осью X и линией от начала координат до этой точки.", + logarithm: "Удаляет число в верхней части стека, затем берет логарифм числа в верхней части, используя другое число в качестве основания. Связано со значением $(l:patterns/consts#hexcasting:const/double/e)$(thing)$(italic)e/$.", + }, + + sets: { + numlist: "Операции с множествами странны тем, что некоторые из них могут принимать два числа или два списка, но не их комбинацию. Такие аргументы записываются как \"(num, num)|(list, list)\".$(br2)Когда числа используются в этих операциях, они используются как так называемые двоичные \"биты\", списки из 1 и 0, true и false, \"on\" и \"off\".", + + "or.1": "Объединяет два набора.", + "or.2": "Как следует:$(li)С двумя числами в верхней части стека объединяет их в битовый набор, содержащий каждый \"on\" бит в любом из битовых наборов.$(li)С двумя списками это создает список каждого элемента из первого списка, плюс каждый элемент из второго списка, который отсутствует в первом списке. Это похоже на $(l:patterns/lists#hexcasting:add)$(action)Объединение/$.", + + "and.1": "Находит пересечение двух множеств.", + "and.2": "Как следует:$(li)С двумя числами в верхней части стека объединяет их в битовый набор, содержащий каждый \"on\" бит, присутствующий в $(italics)обоих/$ битовых наборах.$(li)С двумя списками это создает список каждого элемента из первого списка, который также присутствует во втором списке.", + + "xor.1": "Находит исключающее ИЛИ двух множеств.", + "xor.2": "Как следует:$(li)С двумя числами в верхней части стека объединяет их в битовый набор, содержащий каждый \"on\" бит, присутствующий в $(italics)ровно одном/$ из битовых наборов.$(li)С двумя списками это создает список каждого элемента из обоих списков, который $(italics)не/$ присутствует в другом списке.", + + not: "Берет инверсию битового набора, меняя все \"on\" биты на \"off\" и наоборот. На мой взгляд, это будет представлено числом, инвертированным и уменьшенным на единицу. Например, 0 станет -1, а -100 станет 99.", + to_set: "Удаляет дублирующиеся записи из списка.", + }, + + "consts.const/": { + "null": "Добавляет $(l:casting/influences)$(thing)Ничто/$ в верхнюю часть стека.", + "true": "Добавляет $(thing)Истину/$ в верхнюю часть стека.", + "false": "Добавляет $(thing)Ложь/$ в верхнюю часть стека.", + + "vec/": { + x: "Левый противочасовой шаблон добавляет [1, 0, 0] в стек; правый по часовой стрелке шаблон добавляет [-1, 0, 0].", + y: "Левый противочасовой шаблон добавляет [0, 1, 0] в стек; правый по часовой стрелке шаблон добавляет [0, -1, 0].", + z: "Левый противочасовой шаблон добавляет [0, 0, 1]; правый по часовой стрелке шаблон добавляет [0, 0, -1].", + "0": "Добавляет [0, 0, 0] в стек.", + }, + + "double/": { + tau: "Добавляет τ, радиальное представление полного круга, в стек.", + pi: "Добавляет π, радиальное представление половины круга, в стек.", + "e": "Добавляет $(italic)e/$, основание натурального логарифма, в стек.", + }, + }, + + stackmanip: { + "pseudo-novice.title": "Гамбит Новичка", + "pseudo-novice": "Удаляет первую йоту из стека.$(br2)Это кажется особым случаем $(l:patterns/stackmanip#hexcasting:mask)$(action)Гамбита Библиотекаря/$.", + + swap: "Меняет местами две верхних йоты в стеке.", + rotate: "Вытаскивает третью йоту сверху стека и перемещает его наверх. [0, 1, 2] становится [1, 2, 0].", + rotate_reverse: "Перемещает верхнюю йота на третью позицию. [0, 1, 2] становится [2, 0, 1].", + duplicate: "Дублирует верхнюю йоту в стеке.", + over: "Копирует вторую с конца йоту из стека наверх. [0, 1] становится [0, 1, 0].", + tuck: "Копирует верхнюю йоту из стека, затем помещает её под второй йотой. [0, 1] становится [1, 0, 1].", + "2dup": "Копирует две верхних йоты из стека. [0, 1] становится [0, 1, 0, 1].", + stack_len: "Помещает размер стека в виде числа наверху стека. (Например, стек [0, 1] станет [0, 1, 2].)", + duplicate_n: "Удаляет число в верхней части стека, затем копирует верхнюю йоту столько раз, сколько указано этим числом. (При значении 2 в стеке будет две йоты, а не три.)", + fisherman: "Берет элемент в стеке с указанным индексом и перемещает его наверх. Если число отрицательное, то перемещает верхний элемент стека на указанное количество позиций вниз.", + "fisherman/copy": "Подобно $(l:patterns/stackmanip#hexcasting:fisherman)$(action)Гамбиту РЫбака/$, но вместо перемещения йота, копирует его.", + + mask: { + "1": "Бесконечное семейство действий, которые сохраняют или удаляют элементы на вершине стека, основываясь на последовательности погружений и линий.", + "2": "Предполагая, что я рисую шаблон - Гамбита Библиотекаря слева направо, количество йотов, необходимых для действия, определяется горизонтальным расстоянием, пройденным шаблоном. От самого глубокого в стеке до самого поверхностного, плоская линия сохранит йот, в то время как треугольник, опускающийся вниз, удалит его.$(br2)Если мой стек содержит $(italic)0, 1, 2/$ от самого глубокого к поверхностному, рисование первого шаблона в противоположную сторону даст мне $(italic)1/$, второй даст $(italic)0/$, а третий даст $(italic)0, 2/$ (нуль внизу остается нетронутым).", + }, + + swizzle: { + "1": "Переставляет верхние элементы стека в соответствии с указанным индексом, который указывает на элемент.", + "2": "Хотя я не претендую на знание математики, лежащей в основе расчета этого кода перестановки, мне удалось найти обширную таблицу этих кодов, перечисляющую все перестановки до шести элементов.$(br2)Если я хочу провести дальнейшее исследование, ключевым словом является \"Код Лемера\".", + link: "Таблица кодов", + }, + }, + + logic: { + bool_coerce: "Преобразует аргумент в логическое значение. Число $(thing)0/$, $(l:casting/influences)$(thing)Ничто/$ и пустой список становятся Ложь; всё остальное становится Истина.", + bool_to_number: "Преобразует логическое значение в число; Истина становится $(thing)1/$, а Ложь становится $(thing)0/$.", + not: "Если аргумент равен Истина, вернёт Ложь; если он равен Ложь, вернёт Истина.", + or: "Возвращает Истина, если хотя бы один из аргументов равен Истина; в противном случае возвращает Ложь.", + and: "Возвращает Истина, если оба аргумента равны Истина; в противном случае возвращает Ложь.", + xor: "Возвращает Истина, если ровно один из аргументов равен Истина; в противном случае возвращает Ложь.", + if: "Если первый аргумент равен Истина, сохраняет второй и отбрасывает третий; в противном случае отбрасывает второй и сохраняет третий.", + equals: "Если первый аргумент равен второму (с небольшим допуском), возвращает Истина. В противном случае возвращает Ложь.", + not_equals: "Если первый аргумент не равен второму (с учетом небольшого допуска), возвращает Истина. В противном случае возвращает Ложь.", + greater: "Если первый аргумент больше второго, возвращает Истина. В противном случае возвращает Ложь.", + less: "Если первый аргумент меньше второго, возвращает Истина. В противном случае возвращает Ложь.", + greater_eq: "Если первый аргумент больше или равен второму, возвращает Истина. В противном случае возвращает Ложь.", + less_eq: "Если первый аргумент меньше или равен второму, возвращает Истина. В противном случае возвращает Ложь.", + }, + + entities: { + get_entity: "Преобразует позицию в стеке в сущность на этом месте (или $(l:casting/influences)$(thing)Ничто/$, если ее там нет).", + "get_entity/": { + animal: "Преобразует позицию в стеке в животное на этом месте (или $(l:casting/influences)$(thing)Ничто/$, если его там нет).", + monster: "Преобразует позицию в стеке в монстра на этом месте (или $(l:casting/influences)$(thing)Ничто/$, если его там нет).", + item: "Преобразует позицию в стеке в выброшенный предмет на этом месте (или $(l:casting/influences)$(thing)Ничто/$, если его там нет).", + player: "Преобразует позицию в стеке в игрока на этом месте (или $(l:casting/influences)$(thing)Ничто/$, если его там нет).", + living: "Преобразует позицию в стеке в живое существо на этом месте (или $(l:casting/influences)$(thing)Ничто/$, если его там нет).", + }, + + zone_entity: "Берёт позицию и радиус в стеке и объедините их в список всех сущность, находящихся в заданном радиусе от позиции.", + "zone_entity/": { + animal: "Берёт позицию и радиус в стеке и объедините их в список животных, находящихся в заданном радиусе от позиции.", + not_animal: "Берёт позицию и радиус в стеке и объедините их в список сущность, не являющихся животными, находящихся в заданном радиусе от позиции.", + monster: "Берёт позицию и радиус в стеке и объедините их в список монстров, находящихся в заданном радиусе от позиции.", + not_monster: "Берёт позицию и радиус в стеке и объедините их в список сущность, не являющихся монстрами, находящихся в заданном радиусе от позиции.", + item: "Берёт позицию и радиус в стеке и объедините их в список выброшенных предметов, находящихся в заданном радиусе от позиции.", + not_item: "Берёт позицию и радиус в стеке и объедините их в список сущность, не являющихся предметами, находящихся в заданном радиусе от позиции.", + player: "Берёт позицию и радиус в стеке и объедините их в список игроков, находящихся в заданном радиусе от позиции.", + not_player: "Берёт позицию и радиус в стеке и объедините их в список сущность, не являющихся игроками, находящихся в заданном радиусе от позиции.", + living: "Берёт позицию и радиус в стеке и объедините их в список живых сущность, находящихся в заданном радиусе от позиции.", + not_living: "Берёт позицию и радиус в стеке и объедините их в список сущность, не являющихся живыми, находящихся в заданном радиусе от позиции.", + }, + }, + + lists: { + index: "Удаляет число в верхней части стека, затем замените список в верхней части n-м элементом этого списка (где n - число, которое вы удалили). Заменяет список на $(l:casting/influences)$(thing)Ничто/$, если число выходит за границы.", + slice: "Удаляет два числа на вершине стека, затем возьмите подсписок списка на вершине стека между этими индексами, включая нижнюю границу и исключая верхнюю. Например, подсписок 0, 2 из [0, 1, 2, 3, 4] будет [0, 1].", + append: "Удаляет верхний элемент стека, затем добавляет его в конец списка находящигося вершине стека.", + unappend: "Перемещает элемент с конца списка в начало.", + add: "Удаляет список на вершине стека, затем добавляет все его элементы в конец списка идущего за ним.", + empty_list: "Помещает пустой список на вершину стека.", + singleton: "Удаляет вершину стека, а затем поместите в него список, содержащий только этот элемент.", + abs: "Удаляет список с вершины стека, затем перемещает количество элементов в списке в стек.", + reverse: "Переворачивает список в верхней части стека.", + index_of: "Удаляет элемент на вершине стека, затем заменяет список на вершине на индекс этого элемента в списке (начиная с 0). Заменяет список на -1, если элемент не существует в списке..", + remove_from: "Удаляет число в верхней части стека, затем удаляет n-й элемент списка в верхней части стека (где n - число, которое было удалено).", + replace: "Удаляет верхнюю йоту стека и число на вершине, затем устанавливает n-й элемент списка на вершине стека на эту йоту (где n - число, которое вы удалили).", + last_n_list: "Удаляет $(italic)количество/$ элементов из стека, затем добавляет их в список на вершине стека.", + splat: "Удаляет список из верхней части стека, а затем перемещает его содержимое в стек.", + construct: "Удаляет верхнюю йоту, а затем добавляет её в качестве первого элемента в список на вершине стека.", + deconstruct: "Удаляет первую йоту из списка на вершине стека, а затем перемещает эту йоту в стек.", + }, + + patterns_as_iotas: { + "1": "Одной из многих особенностей этого искусства является то, что $(italic)сами по себе шаблоны/$ могут действовать как йоты - я могу даже поместить их на стек при выполнении заклинания.$(br2)Это порождает довольно очевидный вопрос: как их выразить? Если я просто нарисую шаблон, это вряд ли скажет Природе добавить его на мой стек - скорее всего, он просто будет сопоставлен с действием.", + "2": "К счастью, Природа предоставила мне набор $(l:casting/influences)влияний/$, которые я могу использовать для работы с шаблонами напрямую.$(br2)Кратко говоря, $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ позволяет мне добавить один шаблон на стек, а $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$ и $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ позволяют мне добавить целый список.", + escape: { + "1": "Чтобы использовать $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, я рисую его, затем другой произвольный шаблон. Этот второй шаблон добавляется на стек.", + "2": "Можно рассматривать это как \"экранирование\" шаблона на стек.$(br2)Обычно это используется для копирование шаблонов на $(l:items/scroll)$(item)Свиток/$ или $(l:items/slate)$(item)Скрижаль/$ с помощью $(l:patterns/readwrite#hexcasting:write)$(action)Гамбит Писаря/$, а затем, возможно, считать его.", + }, + parens: { + "1": "Нарисовав $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, мои рисунки шаблонов начинают вести себя по-другому на какое-то время. Пока я не нарисую $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Retrospection/$, нарисованные мной шаблоны сохраняются. Затем, когда я нарисую $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, они добавляются на стек как список йот.", + "2": "Если я нарисую ещё один $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Introspection/$, оно все равно будет сохранено в списке, но затем мне придется нарисовать $(italic)два/$ $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$, чтобы вернуться к обычному заклинанию.", + "3": "Кроме того, я могу избежать специального поведения $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro/$ и $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, нарисовав $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ перед ними, что просто добавит их в список, не влияя на количество $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$, необходимых для возвращения к заклинанию.$(br2)Если я нарисую два $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Considerations/$ подряд во время $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)introspecting/$, это добавит одно $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ в список.", + }, + undo: "Наконец, если я допущу ошибку при рисовании шаблонов внутри $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ и $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, я могу нарисовать $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Evanition/$, чтобы удалить последний нарисованный мной шаблон из списка шаблонов.", + }, + + readwrite: { + "1": "Этот раздел касается хранения $(thing)йот/$ в более постоянной среде. Почти любой йот может быть сохранен на подходящем предмете, таком как $(l:items/focus)$(item)Талисман/$ или $(l:items/spellbook)$(item)Книга заклинаний/$), и позже снова прочитан. Некоторые предметы, такие как $(l:items/abacus)$(item)Счеты/$, могут быть только прочитаны.$(br2)Йоты обычно читаются и записываются с другой руки, но также возможно читать и писать с помощью предмета, когда он находится на земле как предмет-сущность или в рамке предмета.", + "2": "Возможно, есть и другие сущности, с которыми я могу взаимодействовать подобным образом. Например, со $(l:items/scroll)$(item)Свитка/$, висящего на стене, можно считывать его руну.$(br2)Однако, похоже, я не могу сохранить ссылку на другого игрока, только на себя. Я полагаю, что ссылка на сущность похожа на идею Истинного Имени; возможно, Природа помогает сохранить наши Имена от рук наших врагов. Если я хочу, чтобы у друга было мое Имя, я могу сделать для него $(l:items/focus)$(item)Focus/$ и самостоятельно записать себя на него.", + read: "Копирует йоту, хранящуюся в предмете в моей другой руке, и добавляет её в стек.", + write: "Извлекает верхнюю йоту из стека и помещает ее в предмет в другой руке.", + "read/entity": "Подобно $(l:patterns/readwrite#hexcasting:read)$(action)Отражение Писаря/$, но йота считывается из сущности, а не из моей руки.", + "write/entity": "Подобно $(l:patterns/readwrite#hexcasting:read)$(action)Гамбит Писаря/$, но йота записывается на сущность, а не в предмет в руке.$(br2)Интересно, кажется, что я не могу записать свое собственное Имя с помощью этого заклинания. Я чувствую, что могу оказаться в опасности, если бы мог это сделать.", + readable: "Если предмет в моей другой руке содержит йоту, которую я могу прочитать, возвращается Истина. В противном случае возвращается Ложь.", + "readable/entity": "Подобно $(l:patterns/readwrite#hexcasting:readable)$(action)Отражение Ревизора/$, но проверяется читаемость сущности, а не моя вторая рука.", + writable: "Если я могу сохранить йоту в предмете, который держу в другой руке, возвращается Истина. В противном случае возвращается Ложь.", + "writable/entity": "Подобно $(l:patterns/readwrite#hexcasting:writable)$(action)Отражению Заседателя/$, но проверяется возможность записи на сущность.", + "local.title": "Разум", + local: "Предметы - не единственное место, где я могу хранить информацию. Я также могу хранить эту информацию в Мысли, подобно стеку, но отдельно. В текстах это именуется $(l:patterns/readwrite#hexcasting:local)$(thing)Разум/$. Он содержит одну йоту, подобно $(l:items/focus)$(item)Талисману/$. Он сохраняется между итерациями $(l:patterns/meta#hexcasting:for_each)$(action)Гамбита Тота/$, но длится только до тех пор, пока действует заклинание, частью которого он является. Как только я прекращу писать руны, значение будет потеряно.", + "write/local": "Удаляет верхнюю йоту из стека и сохраняет его в мой $(l:patterns/readwrite#hexcasting:local)$(thing)Разум Ворона/$, храня его там до тех пор, пока я не прекращу заклинание.", + "read/local": "Копирует йоту из моего $(l:patterns/readwrite#hexcasting:local)$(thing)Разума/$, который я, только что записал с помощью $(l:patterns/readwrite#hexcasting:write/local)$(action)Гамбит Хугина/$.", + }, + + meta: { + "eval.1": "Убирает паттерн или список паттернов из стека, затем кастует их, как если бы я сам их нарисовал, с помощью моего $(l:items/staff)$(item)Посоха/$ (пока не встретится $(l:patterns/meta#hexcasting:halt)$(action)Гамбит Харона/$). Если йота была выведена с помощью $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ или $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)its ilk/$, она будет перемещена в стек. В противном случае непаттерны будут провалены.", + "eval.2": "Это может быть $(italic)очень/$ мощным в сочетании с $(l:items/focus)$(item)Талисманами/$.$(br2)Это также делает бюрократию Природы \"Тьюриг-Полной\" системой, согласно одному эзотерическому свитку, который я нашел.$(br2)Однако, кажется, есть ограничение на количество раз, которое _Хекс может сам себя использовать - Природа не благосклонно относится к беглым заклинаниям!$(br2)Кроме того, с энергией шаблонов, происходящей без моего управления, любое недоразумение приведет к тому, что оставшиеся действия станут слишком нестабильными и немедленно разваливаются.", + + "for_each.1": "Извлеките из стека список шаблонов и список, а затем проведите по каждому элементу второго списка заданный шаблон.", + "for_each.2": "Более конкретно, для каждого элемента во втором списке будет:$(li) Создать новый стек со всем, что есть на текущем стеке плюс этот элемент$(li) Нарисовать все шаблоны из первого списка$(li) Сохранить все иоты, оставшиеся на стеке, в список$(br) Затем, после того, как все будет сделано, поместить список сохраненных иотов на основной стек.$(br2) Неудивительно, что все практикующие этого искусства сходят с ума.", + + "halt.1": "Этот паттерн принудительно останавливает заклинание. Сам по себе он практически бесполезен, так как я могу просто перестать писать шаблоны или положить посох.", + "halt.2": "Но когда это сочетается с $(l:patterns/meta#hexcasting:eval)$(action)Гамбитом Гермеса/$ или $(l:patterns/meta#hexcasting:for_each)$(action)Гамбит Тота/$, это становится $(italics)гораздо/$ более интересным. Эти шаблоны служат для 'содержания' этого прекращения, и вместо того, чтобы завершить вcё заклинание, эти части завершаются вместо этого. Это можно использовать, чтобы $(l:patterns/meta#hexcasting:for_each)$(action)Гамбит Тота/$ не действовал на каждую йоту, которая ему дана. Побег от безумия, так сказать.", + + "eval/cc.1": "Вызывает паттерн или список паттернов из стека точно так же, как Гамбит Гермеса, за исключением того, что в стек предварительно помещается уникальная йота \"Jump\".", + "eval/cc.2": "Когда \"Jump\"-йота выполняется, она пропускает остальные паттерны и переходит непосредственно к концу списка паттернов. $(p)Хотя это может показаться излишним, учитывая существование $(l:patterns/meta#hexcasting:halt)$(action)Гамбит Харона/$, это позволяет вам выходить из $(italic)вложенных/$ $(l:patterns/meta#hexcasting:eval)$(action)Hermes'/$ вызовов контролируемым образом, тогда как Харон позволяет вам выйти только из одного.$(p)The \"Jump\" йота, очевидно, останется в стеке даже после завершения выполнения... лучше не думать о последствиях этого.", + }, + + circle_patterns: { + disclaimer: "Предупреждение! все эти патерны должны быть использованы с помощью $(l:greatwork/spellcircles)$(item)Магического Круга/$; попытка каста с помощью $(l:items/staff)$(item)Посоха/$ приведёт к весьма впечатляющему провалу.", + + "circle/impetus_pos": "Возвращает позицию $(l:greatwork/impetus)$(item)Инициатора/$ этого круга заклинаний.", + "circle/impetus_dir": "Возвращает направление, в котором смотрит $(l:greatwork/impetus)$(item)Инициатор/$ этого круга заклинаний, в виде единичного вектора.", + "circle/bounds/min": "Возвращает позицию нижнего северо-западного угла границ этого круга заклинаний.", + "circle/bounds/max": "Возвращает позицию верхнего юго-восточного угла границ этого круга заклинаний.", + }, + + akashic_patterns: { + "akashic/read": "Прочитайте йоту, связанную с данным шаблоном, из $(l:greatwork/akashiclib)$(item)Библиотека Акаши/$ с его $(l:greatwork/akashiclib)$(item)Записью/$ в заданной позиции. Это не имеет ограничения по дальности. Стоит примерно одну $(l:items/amethyst)$(item)Аметистовую Пыль/$.", + "akashic/write": "Связывает йоту с данным шаблоном в $(l:greatwork/akashiclib)$(item)Библиотеку Акаши/$ с его $(l:greatwork/akashiclib)$(item)Записью/$ в заданной позиции. Это $(italic)имеет/$ ограничение по дальности. Стоит примерно одну $(l:items/amethyst)$(item)Аметистовую Пыль/$.", + }, + + // Normal Spells + + itempicking: { + "1": "Определенные заклинания, такие как $(l:patterns/spells/blockworks#hexcasting:place_block)$(action)Поставить Блок/$, будут потреблять предметы из моего инвентаря. Когда это происходит, заклинание сначала ищет предмет для использования, а затем берёт предметы из инвенторя.$(br2)Этот процесс называется \"выбор предмета\"", + "2": "Более конкретно:$(li)Во-первых, заклинание будет искать первый действительный предмет на моей горячей панели справа от $(l:items/staff)$(item)посоха/$, огибая ее с правой стороны и начиная с первого слота, если $(l:items/staff)$(item)посох/$ находится в моей второй руке.$(li)Во-вторых, заклинание извлечет этот предмет из как можно более $(italic)дальнего места в моем инвентаре/$, отдавая приоритет основному инвентарю, а не горячей панели.", + "3": "Так я могу сам выбрать какой предмет будет выбран и заполнить остаток моего инвентаря этим блоком, чтобы его было достаточно для заклинания.", + }, + + basic_spell: { + "explode.1": "Удаляет верхние вектор и число из стека, затем создаёт взрыв в указанном месте с заданной мощностью.", + "explode.2": "Мощность 3 примерно равна взрыву крипера; 4 примерно равно взрыву динамита. Однако природа отказывается дать мне взрыв мощнее 10.$(br2)Странно, что этот взрыв, кажется, не причиняет мне вреда. Возможно, это потому что $(italic)я/$ тот, кто взрывается?$(br2)Стоимость незначительна при мощности 0, плюс 3 дополнительных $(l:items/amethyst)$(item)аметистовых пылей/$ за каждую единицу мощности взрыва.", + + "explode.fire.1": "Удаляет верхние вектор и число из стека, затем создаёт огненный-взрыв в указанном месте с заданной мощностью.", + "explode.fire.2": "Стоит одну $(l:items/amethyst)$(item)аметистовую пыль/$, плюс примерно 3 дополнительных $(l:items/amethyst)$(item)аметистовых пыли/$ за каждую единицу мощности взрыва. В остальном то же самое, что и $(l:patterns/spells/basic#hexcasting:explode)$(action)Взрыв/$, за исключением наличия огня.", + + add_motion: "Поглощает Сущность и вектор из стека, затем придает импульс указанной сущности в указанном направлении. Сила импульса определяется длиной вектора.$(br)Стоимость в единицах $(l:items/amethyst)$(item)аметистовой пыли/$, равная квадрату длины вектора, плюс одна за каждый импульс, кроме первого, направленного на сущность.", + blink: "Поглощает Сущность и вектор из стека, затем телепортирует указанную сущность вдоль её вектора обзора на указанное расстояние.$(br)Стоимость примерно одного $(l:items/amethyst)$(item)аметистового осколка/$ за каждые два пройденных блока.", + + "beep.1": "Поглощает вектор и два числа из стека. Играет на $(thing)инструменте/$, определенном первым числом, в указанном месте, с $(thing)нотой/$, определенной вторым числом.", + "beep.2": "Похоже, что есть 16 различных $(thing)инструментов/$ и 25 различных $(thing)нот/$. Оба параметра индексируются начиная с нуля.$(br2)Похоже, что это те же инструменты, которые я могу создать с помощью $(item)нотного блока/$, хотя причина присвоения каждому инструменту своего номера мне неизвестна.$(br2)В любом случае, я могу найти необходимые мне числа, осматривая $(item)нотный блок/$ через $(l:items/lens)$(item)Линзу Прозрения/$.", + }, + + blockworks: { + place_block: "Поглощает вектор-местоположения из стека, затем выберает блок и размещает его в указанное месте.$(br)Стоимость равна примерно восьмой части $(l:items/amethyst)$(item)аметистовой пыли/$.", + break_block: "Поглощает вектор-местоположения из стека, затем ломает блок в указанном месте. Это заклинание способно сломать практически все, что способна сломать алмазная кирка.$(br)Стоимость равна примерно восьмой части $(l:items/amethyst)$(item)аметистовой пыли/$.", + create_water: "Призывает блок воды на указанной позиции. Стоит примерно одну $(l:items/amethyst)$(item)аметистовую пыль/$.", + destroy_water: "Drains either a liquid container at, or a body of liquid around, the given position. Costs about two $(l:items/amethyst)$(item)Charged Amethyst/$.", + conjure_block: "Создаёт прозрачный, но прочный блок, который сверкает моим пигментом в указанном месте. Стоит примерно одну $(l:items/amethyst)$(item)Аметистовую Пыль/$.", + conjure_light: "Создаёт магический свет, мягко светящийся моим пигментом в указанном месте. Стоит примерно одну $(l:items/amethyst)$(item)Аметистовую Пыль/$.", + bonemeal: "Побуждает растения или саженцы в указанном месте к росту, как если бы к ним была применена $(item)Костная Мука/$. Стоит немного больше, чем одна $(l:items/amethyst)$(item)Аметистовая Пыль/$.", + edify: "Принудительно насыщает саженец Мысли на целевой позиции, заставляя его вырасти в $(l:items/edified)$(thing)Edified Tree/$. Стоит примерно примерно как один $(l:items/amethyst)$(item)заряженный аметист/$.", + ignite: "Зажигает огонь на указанном местоположением, как если бы был применен $(item)огненный заряд/$. Стоит примерно одну $(l:items/amethyst)$(item)аметистовую пыль/$.", + extinguish: "Тушит блоки в большой области. Стоит примерно шесть $(l:items/amethyst)$(item)аметистовых пылинок/$.", + }, + + nadirs: { + "1": "Вся эта группа заклинаний накладывает отрицательный эффект зелья на сущность. Все они принимают сущность - получателя, и одно или два числа: первое - это длительность, а второе, если присутствует, - это сила (начиная с 1).$(br2)У каждого из них есть \"базовая стоимость\"; фактическая стоимость равна этой базовой стоимости, умноженной на квадрат силы.", + "2": "Согласно некоторым легендам, эти заклинания и их собратья, $(l:patterns/great_spells/zeniths)$(action)Зениты/$, были \"[...] вдохновлены миром, близким к этому, где могущественные волшебники собирали магию из земли и устраивали дуэли насмерть. К сожалению, многое было потеряно в переводе...\"$(br2)Возможно, в этом и причина их странных названий.", + + "potion/weakness": "Накладывает $(thing)Слабость/$. Базовая стоимость - одна $(l:items/amethyst)$(item)аметистовая пыль/$ за 10 секунд.", + "potion/levitation": "Накладывает $(thing)Левитацию/$. Базовая стоимость - одна $(l:items/amethyst)$(item)аметистовая пыль/$ за 5 секунд.", + "potion/wither": "Накладывает $(thing)Истощение/$. Базовая стоимость - одна $(l:items/amethyst)$(item)аметистовая пыль/$ в секунду.", + "potion/poison": "Накладывает $(thing)Отравление/$. Базовая стоимость - одна $(l:items/amethyst)$(item)аметистовая пыль/$ за 3 секунды.", + "potion/slowness": "Накладывает $(thing)Замедление/$. Базовая стоимость - одна $(l:items/amethyst)$(item)аметистовая пыль/$ за 5 секунд.", + }, + + hexcasting_spell: { + basics: "Эти три заклинания создают $(l:items/hexcasting)$(thing)предмет, который кастуют заклинания./$$(br)Все они требуют, чтобы я держал соответсвующий пустой предмет в своей второй руке и нуждаются в двух вещах: списке шаблонов для произнесения и сущность, представляющую собой сброшенный стак $(l:items/amethyst)$(item)аметиста/$ для формирования батареи предмета.$(br2)Смотрите $(l:items/hexcasting)эту запись/$ для получения дополнительной информации.", + "craft/cypher": "Стоит примерно 1 $(l:items/amethyst)$(item)Заряженный Аметист/$.", + "craft/trinket": "Стоит примерно 5 $(l:items/amethyst)$(item)Заряженных Аметистов/$.", + "craft/artifact": "Стоит примерно 10 $(l:items/amethyst)$(item)Заряженных Аметистов/$.", + + "recharge.1": "Перезарядить предмет, содержащий Мысли, в моей второй руке. Стоит примерно 1 $(l:items/amethyst)$(item)Аметистовый Осколок/$.", + "recharge.2": "Это заклинание применяется похожим образом на заклинание создания батареи-media; Ему требуется Сущность, представляющая собой сброшенную стопку $(l:items/amethyst)$(item)аметиста/$, оно перезаряжает батарею Мысли предмета в моей другой руке.", + + "erase.1": "Очищает предмет от содержащегося в нём заклинания, в моей другой руке. Стоит примерно 1 $(l:items/amethyst)$(item)Аметистовую Пыль/$.", + "erase.2": "Это заклинание также аннулирует всю Мысли, хранящуюся внутри предмета, возвращая её обратно в Природу и возвращая предмет к идеально чистому состоянию. Таким образом, я могу повторно использовать $(l:items/hexcasting)$(item)Талисманы/$, в которые я поместил ошибочное заклинание.$(br2)Оно также способно очистить $(l:items/focus)$(item)Талисман/$ или $(l:items/spellbook)$(item)Книгу заклинаний/$.", + }, + + sentinels: { + "1": "$(italic)Итак, вперед! Теперь все в порядке./$$(br2)$(l:patterns/spells/sentinels)$(thing)Часовые/$ - это таинственная сила, которую я могу призвать для помощи в произнесении заклинаний, подобно знакомому или духу-хранителю. Для меня он выглядит как вращающаяся геометрическая форма, но он невидим для всех остальных.", + "2": "У него несколько интересных свойств:$(li)По-видимому, он не является осязаемым; никто не может его коснуться.$(li)Только мои заклинания могут взаимодействовать с ним.$(li)После призыва он остается на месте до изгнания.", + + "sentinel/create": "Призывает моего $(l:patterns/spells/sentinels)$(thing)Часового/$ на указанной позиции. Стоит примерно 1 $(l:items/amethyst)$(item)аметистовую пыль/$.", + "sentinel/destroy": "Изгоняет моего $(l:patterns/spells/sentinels)$(thing)Часового/$ из мира. Стоимость незначительна в Мысли.", + "sentinel/get_pos": "Добавляет позицию моего $(l:patterns/spells/sentinels)$(thing)Часового/$ в стек, или $(l:casting/influences)$(thing)Ничто/$, если он не призван. Стоимость незначительна в Мысли.", + "sentinel/wayfind": "Преобразует вектор-позиции на вершине стека в единичный вектор, указывающий от этой позиции к моему $(l:patterns/spells/sentinels)$(thing)Часового/$, или $(l:casting/influences)$(thing)Ничто/$, если он не призван. Стоимость незначительна в Мысли.", + }, + + colorize: "Для произнесения этого заклинания мне необходимо держать в другой руке $(l:items/pigments)$(item)Пигмент/$. Когда я это делаю, он поглощает краситель и навсегда изменяет окраску моего разума (по крайней мере, до тех пор, пока я снова не произнесу заклинание). Стоит примерно одну $(l:items/amethyst)$(item)аметистовую пыль/$.", + + flights: { + "1": "Хотя кажется, что истинный, безграничный полет находится за пределами моего понимания, я тем не менее нашел некоторые способы удержания в воздухе, каждый со своими недостатками.$(br2)Все формы производят избыток Мысли; по мере приближения к концу заклинания, искры пропитываются большим количеством красного и черного.", + "2": "Конечно, существуют и другие формы полета. Например, комбинация $(l:patterns/spells/basic#hexcasting:add_motion)$(action)Импульс/$ и $(l:patterns/spells/nadirs#hexcasting:potion/levitation)$(action)Blue Sun's Nadir/$ использовалась с древности для своего рода полета.$(br2)Я также слышал о тонкой мембране, носимой на спине, которая позволяет скользить по воздуху. Из моих исследований я полагаю, что Великое заклинание $(l:patterns/great_spells/altiora)$(action)Altiora/$ может быть использовано для имитации этого.", + + "range.1": "Полет, ограниченный по дальности.", + "range.2": "Второй аргумент - горизонтальный радиус, в метрах, в пределах которого заклинание стабильно. Перемещение за пределы этого радиуса приведет к окончанию заклинания и к падению на землю. Однако, пока я остаюсь в пределах безопасной зоны, заклинание длится бесконечно. Дополнительное мерцание Мысли обозначает точку происхождения безопасной зоны. $(br2)Стоит примерно 1 $(l:items/amethyst)$(item)аметистовую пыль/$ за метр безопасности.", + + "time.1": "Полет, ограниченный по продолжительности.", + "time.2": "Второй аргумент - это количество времени в секундах, в течение которого заклинание стабильно. По истечении этого времени заклинание завершается. $(br2)Это относительно дорогое заклинание, примерно 1 $(l:items/amethyst)$(item)Заряженный Аметист/$ за секунду полета; я считаю, что оно лучше всего подходит для путешествий.", + }, + + create_lava: { + "1": "Призывает блок лавы на указанной позиции. Стоит примерно один $(l:items/amethyst)$(item)заряженный аметист/$.", + "2": "Возможно, будет разумно держать свои знания об этом заклинании в секрете. Как я слышал, определенная фракция ботаников реагирует на это... чувствительно.$(br2)Ну, никто не говорил, что отслеживание глубоких секретов вселенной будет легким занятием.", + }, + + weather_manip: { + lightning: "Я повелеваю небесам! Это заклинание призовет молнию, чтобы ударить землю там, куда я направлю ее. Стоит примерно 3 $(l:items/amethyst)$(item)Аметистовых Осколка/$.", + summon_rain: "Я управляю облаками! Это заклинание вызовет дождь во всем мире, на который я его наложу. Стоит около одного $(l:items/amethyst)$(item)Заряженого Аметиста/$.", + dispel_rain: "Аналог вызывания дождя. Это заклинание развеет дождь по всему миру, на который я его наложил. Стоит около одного $(l:items/amethyst)$(item)Осколка Аметиста/$.", + }, + + altiora: { + "1": "Вызывает вокруг тебя сноп Мысли в форме крыльев, наделенных достаточным количеством вещества, чтобы обеспечить скольжение по воздуху.", + "2": "Их использование идентично использованию $(item)Елитр/$; цель(которой должен быть игрок) поднимается в воздух, после нажатие $(k:jump) приводит в действие крылья. Крылья хрупкие и ломаются при соприкосновении с любой поверхностью. Для более длительных полетов можно использовать $(l:patterns/spells/basic#hexcasting:add_motion)$(action)Импульс/$ или (для самых отважных) $(item)Феерверки/$.$(br2)Стоит около одного $(l:items/amethyst)$(item)Заряженного Аметиста/$.", + }, + + "teleport/great": { + "1": "Гораздо мощнее, чем $(l:patterns/spells/basic#hexcasting:blink)$(action)Перенос/$, это заклинание позволяет мне телепортироваться практически в любое место на всей планете! Похоже, что есть ограничение, но оно $(italic)гораздо/$ больше, чем обычный радиус, к которому я привык.", + "2": "Сущность будет телепортирована по заданному вектору, который является смещением от его текущего положения. Независимо от расстояния, это всегда стоит около десяти $(l:items/amethyst)$(item)Заряженных Аметистов/$.$(br2)Перенос не идеален, и кажется, что при телепортации чего-то такого сложного, как игрок, их инвентарь не $(italic)всегда/$ остается прикрепленным и склонен разлетаться повсюду на месте назначения. Кроме того, цель будет насильственно удалена от всего неживого, на чем они едут или сидят... но я прочитал кое-какие обрывки, которые предполагают, что животные могут пойти вместе в путь, так сказать.", + }, + + zeniths: { + "1": "Это семейство заклинаний наделяют существо положительными еффектами, оно схожо с $(l:patterns/spells/nadirs)$(action)Надир/$. Однако их затраты на Мысли увеличиваются с $(italic)кубом/$ мощности.", + + "potion/regeneration": "Дарует $(thing)Регенерацию/$. Базовая стоимость - одна $(l:items/amethyst)$(item)Аметистовая Пыль/$ в секунду.", + "potion/night_vision": "Дарует $(thing)Ночное Зрение/$. Базовая стоимость - одна $(l:items/amethyst)$(item)Аметистовая пыль/$ за каждые 5 секунд.", + "potion/absorption": "Дарует $(thing)Поглощение/$. Базовая стоимость - одна $(l:items/amethyst)$(item)Аметистовая Пыль/$ в секунду.", + "potion/haste": "Дарует $(thing)Спешку/$. Базовая стоимость - одна $(l:items/amethyst)$(item)Аметистовая Пыль/$ за каждые 3 секунды.", + "potion/strength": "Дарует $(thing)Силу/$. Базовая стоимость - одна $(l:items/amethyst)$(item)Аметистовая Пыль/$ за каждые 3 секунды.", + }, + + greater_sentinel: { + "1": "Призывает более мощную версию моего $(l:patterns/spells/sentinels)$(thing)Часового/$. Стоит около двух $(l:items/amethyst)$(item)Аметистовых Пылей/$.", + "2": "Более сильный $(l:patterns/spells/sentinels)$(thing)Часовой/$ действует как обычный, которого я могу призвать без использования Великого Заклинания. Однако диапазон, в котором мои заклинания могут работать, расширяется до небольшого региона вокруг моего более мощного $(l:patterns/spells/sentinels)$(thing)Часового/$, примерно 16 блоков. Другими словами, независимо от того, где я нахожусь в мире, я могу взаимодействовать с вещами вокруг моего $(l:patterns/spells/sentinels)$(thing)Часового/$.", + }, + + make_battery: { + "1": "Наполняет бутыль Мыслью для получения $(l:items/phials)$(item)Сосуда Мысли/$.", + "2": "Подобно заклинаниям для $(l:patterns/spells/hexcasting)$(action)Создания Магических Предметов/$, мне нужно держать $(item)Стеклянную Бутылку/$ в другой руке и предоставить заклинанию выброшенный стак $(l:items/amethyst)$(item)Аметиста/$. Посмотрите $(l:items/phials)эту страницу/$ для получения дополнительной информации.$(br2)Стоит около одного $(l:items/amethyst)$(item)Заряженного Аметиста/$.", + }, + + "brainsweep_spell.1": "Я не могу понять смысла этого заклинания... Если честно, я не уверен, хочу ли я знать, что оно делает.", + + + lore: { + cardamom1: { + "1": "$(italic)Письмо Кардамом Стайлз её Отцу, #1/$$(br2)Дорогой папа,$(br)каждый день я нахожу новые причины поблагодарить тебя за отправление меня в Великую Библиотеку. Невероятно то сколько нового я узнаю! Мне кажется что нет таких слов чтобы описать то как я себя чувствую... здесь прекрасно!", + "2": "Я пишу это находясь в основном куполе. Он поддерживается Рунной Службой; у них есть некоторый механизм на верху, который захватывает мимолетную энергию мысли, которая вылетает с учебных мест трудящихся студентов, как я понимаю. Моя подруга Аманита изучает эту тему и она очень любит объяснять мне всё что может, но честно признаться я сама не до конца понимаю что она говорит.", + "3": "Как я понимаю, наши процессы мышления - нематериальные механизмы, с помощью которых я двигаю своим пером, а вы читаете это письмо - не совершенно эффективны. Небольшое количество этой энергии высвобождается в окружающую среду, подобно тому, как ось повозки нагревается на ощупь после того, как она крутится некоторое время. Эта лишняя энергия называется \"Мысли\". Лишние Мысли одного человека ничтожна, но сотни мыслящих людей в главном куполе имеют своего рода накопительный эффект, и в сочетании с каким-то изобретательным механизмом, она может быть превращена в своего рода фиолетовый кристалл.", + "4": "Но достаточно об учебе. Сегодня я вернулась с моей первой экспедиции с Геологическим корпусом! Прошу прощения, что не отправил письмо перед отъездом; дата подкралась ко мне незаметно. Мы отправились в трещину на востоке от Гранда и провели ночь в походе под скалой и почвой. Конечно, мы держались в хорошо освещенных и хорошо проторенных участках пещеры, и, честно говоря, скорее всего, там было безопаснее, чем на поверхности ночью, но как же мне было страшно!", + "5": "К счастью, ночь прошла без происшествий, и мы продолжили двигаться глубже в пещеру для изучения местных жил руды. Мы искали следы жил фиолетового кристалла по имени \"аметист\", который, как говорят, встречается в небольших количествах глубоко в скале. К сожалению, мы ничего не нашли и вернулись на освещенную солнцем поверхность с пустыми руками.", + "6": "Придя к этому, описание этого \"аметиста\" я теперь понимаю, тесно соответствует тем кристаллам среды, о которых говорит Аманита. Представьте, если бы эти кусочки мысли возникали естественным образом под землей! Я не могу представить, почему это могло бы произойти, однако...", + "7": "Как студент, у меня есть право отправить одно письмо по почте Акаши каждые три месяца бесплатно. К сожалению, вы знаете, насколько пусты мои кошельки... поэтому боюсь, что это предложение - единственный способ связаться с вами. Конечно, я буду очень благодарен, если вы сможете найти деньги, чтобы отправить ответное письмо, но, кажется, наши коммуникации могут быть ограничены. Мне жаль, что нам придется быть отрезанными друг от друга, но навыки, которые я здесь приобрету, более чем окупят это. Представьте, я буду первым членом нашей семьи, который станет кем-то, кроме фермера!", + "8": "Так что, предполагаю, я напишу снова через три месяца.$(br2)Ваша,$(br)-- Кардамом Стайлз", + }, + + cardamom2: { + "1": "$(italic)Письмо Кардамом Стайлз ее отцу, #2/$$(br2)Дорогой Папа,$(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.", + "2": "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.)", + "3": "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...", + "4": "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.$(br2)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.", + "5": "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.$(br2)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.", + "6": "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.$(br2)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.", + "7": "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.$(br2)Ваша,$(br)-- Кардамом Стайлз", + }, + + cardamom3: { + "1": "$(italic)Full title: Letter from Кардамом Стайлз to her father, #3, part 1/2/$$(br2)Dear Papa,$(br)Two very peculiar things have happened since I last wrote.$(br2)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.", + "2": "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.$(br2)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.", + "3": "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.", + "4": "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.", + "5": "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.", + "6": "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.$(br2)The next morning we readied our lanterns and descended into the earth.", + "7": "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.$(br2)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.", + "8": "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.", + "9": "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.", + "10": "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.$(br2)I did manage, however, to hide a shard of the crystal in my knapsack.$(br2)We spent nearly the whole day mining, excavating most of the crystal by the time the prefects' chronometer said the sun would set soon.", + "11": "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.", + "12": "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.$(br2)Ваша,$(br)-- Кардамом Стайлз", + }, + + cardamom4: { + "1": "$(italic)Full title: Letter from Кардамом Стайлз to her father, #3, part 2/2/$$(br2)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.", + "2": "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.", + "3": "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.$(br2)I knocked on the door of one of the houses to no response. The next two houses, too, seemed completely empty.", + "4": "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.$(br2)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.", + "5": "But then the clouds shifted, and moonlight glinted across the bed's occupant.$(br2)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.", + "6": "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.", + "7": "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 $(italic)thing/$ I had seen. I sprinted into the darkness of the forest, away from those terrible, terrible animal eyes in those distorted faces.$(br2)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.", + "8": "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.$(br2)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.", + "9": "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.$(br2)I chose not to tell her of the village full of monsters.", + "10": "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.$(br2)Ваша,$(br)-- Кардамом Стайлз", + }, + + cardamom5: { + "1": "$(italic)Full title: Letter from Кардамом Стайлз to her father, #4/$$(br2)Amanita has disappeared.$(br2)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--", + "2": "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 $(italic)vanished/$, into thin air, into non-being.$(br2)Where did they $(italic)go/$?", + "3": "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.$(br2)I think they've started scanning the letters, we write too...", + "4": "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.", + "5": "i can no longer write, my hands shake so much, please, rescue us.", + }, + + inventory: { + "1": "Cell 39, Restoration Log #72, Detainment Center Beta$(br2)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.", + "2": "I see hexagons when I close my eyes.$(br2)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.", + "3": "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.$(br2)My bones are fragile. My joints are rough and sharp.", + "4": "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", + "5": "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$(br2)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", + "6": "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$(br2)it hurts to think. quite literally. the thoughts are so wasteful now the leftover striates directly onto the million microcrystals", + "7": "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$(br2)i remember camping out and seeing the corps setting up their circle all around a village and the ground under my feet rumbling", + "8": "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", + "9": "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$(br2)But they locked me up insted and i dont know if it's a mercy", + "10": "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", + "11": "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", + "12": "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$(br2)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", + "13": "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$(br2)i can see them reading this . they ... will be too far gone to care", + }, + + experiment1: { + "1": "$(italic)I only managed to find these five entries from this log./$$(br2)Detonation #26$(li)Location: Carpenter's North$(li)Population: 174$(li)Nodes Formed: 3$(li)Node Distance from Epicenter: 55-80m vertical, 85-156m horizontal$(li)Media Generation: 1320 uθ/min", + "2": "Detonation #27$(li)Location: Brackenfalls$(li)Population: 79$(li)Nodes Formed: 1$(li)Node Distance from Epicenter: 95m vertical, 67m horizontal$(li)Media Generation: 412 uθ/min", + "3": "Detonation #28$(li)Location: Greyston$(li)Population: approx. 1000$(li)Nodes Formed: 18$(li)Node Distance from Epicenter: 47-110m vertical, 59-289m horizontal$(li)Media Generation: 8478 uθ/min", + "4": "Detonation #29$(li)Location: Unnamed; village two days west of Greyston$(li)Population: 35$(li)Nodes Formed: 0$(li)Node Distance from Epicenter: N/A$(li)Media Generation: N/A$(br2)Note: inhabitants still affected in the normal way", + "5": "Detonation #30$(li)Location: Boiling Brook$(li)Population: 231$(li)Nodes Formed: 4$(li)Node Distance from Epicenter: 61-89m vertical, 78-191m horizontal$(li)Media Generation: 1862 uθ/min", + "6": "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.$(br2)Effects on inhabitants still consistently more severe than with single-target testing, especially the physical effects.", + }, + + experiment2: { + "1": "$(italic)These documents were heavily redacted. I have copied the readable text from them here./$$(br2)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).", + "2": "Heartrate 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. $(br2) ...", + "3": "Subject #7 \"T.C.\"$(br)Similar results several hours after the procedure to other subjects: able to stand, perform simple tasks... $(br2)Subject #11 \"R.S.\"$(br)Sedated before procedure...$(br2) ...", + "4": "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.$(br2)For further testing: how does the procedure affect previous Hexcasters vs. non-Hexcasters?$(br2) ...", + }, + }, + // ^ lore + + interop: { + "1": "Искусство написания рун универсально. Если я обнаружу, что мой мир был $(italic)изменен/$ определенными другими силами, возможно, что я смогу использовать руны в гармонии и сочетании с ними.", + "2": "Я должен помнить, однако, что Природа, кажется, уделила меньше внимания при создании этих аспектов моего искусства; странное поведение и ошибки можно ожидать. Я уверен, что разработчик мода сделает все возможное, чтобы их исправить, но я должен помнить, что это для нее менее важное занятие.$(br2)Мне также может показаться, что есть явные нарушения баланса в затратах и эффектах взаимодействующих сил. В таком случае, предполагаю, мне придется быть ответственным и воздерживаться от их использования.", + "3": "Наконец, если я обнаружу, что меня заинтересовали легенды и истории этого мира, я не думаю, что какие-либо заметки, составленные во время изучения этих взаимодействий, следует рассматривать как что-то более серьезное, чем легкие пустяки.", + + gravity: { + "1": "Я обнаружил действия для получения и установки гравитации сущности. Мне они кажутся интересными, хотя и немного вызывают тошноту.$(br2)Интересно, хотя $(l:patterns/great_spells/flight)$(action)Flight/$ является великим заклинанием и также манипулирует гравитацией, эти действия не таковы. Это меня смущает... Возможно, разработчик мода хотел, чтобы игроки развлекались, хотя бы на время.", + get: "Получите основное направление, в котором гравитация тянет данную сущность, как единичный вектор. Для большинства сущностей это будет вниз, <0, -1, 0>.", + set: "Установите основное направление, в котором гравитация тянет данную сущность. Указанный вектор будет приведен к ближайшей оси, согласно $(l:patterns/math#hexcasting:coerce_axial)$(action)Преображение Стороны/$. Стоимость около одного $(l:items/amethyst)$(item)Заряженного Аметиста/$.", + }, + + pehkui: { + "1": "Я обнаружил способы изменения размера сущностей и запроса, насколько они больше или меньше обычного.", + get: "Получите масштаб сущности как отношение к их нормальному размеру. Для большинства сущностей это будет 1.", + set: "Установите масштаб сущности, передавая пропорцию их нормального размера. Стоимость около 1 $(item)Осколка Аметиста/$.", + }, + }, + }, + // ^ page + }, + // ^ hexcasting +} diff --git a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.json b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.json deleted file mode 100644 index e0a5d53302..0000000000 --- a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.json +++ /dev/null @@ -1,888 +0,0 @@ -{ - "item.hexcasting.book": "Рунный блокнот", - "item.hexcasting.wand_oak": "Дубовый Посох", - "item.hexcasting.wand_spruce": "Еловый Посох", - "item.hexcasting.wand_birch": "Берёзовый Посох", - "item.hexcasting.wand_jungle": "Посох джунглей", - "item.hexcasting.wand_acacia": "Посох акации", - "item.hexcasting.wand_dark_oak": "Тёмно-дубовый Посох", - "item.hexcasting.wand_crimson": "Багровый Посох", - "item.hexcasting.wand_warped": "Искажённый Посох", - "item.hexcasting.wand_akashic": "Потусторонний Посох", - "item.hexcasting.focus": "Талисман", - "item.hexcasting.focus.sealed": "Залипший талисман", - "item.hexcasting.spellbook": "Книга знаний", - "item.hexcasting.cypher": "Побрякушка", - "item.hexcasting.trinket": "Штуковина", - "item.hexcasting.artifact": "Амулет", - "item.hexcasting.battery": "Бутыль мыслей", - "item.hexcasting.manaholder.amount": "§7Мысли: %s/%s (%.0f%%)§r", - "item.hexcasting.amethyst_dust": "Аметистовая пыль", - "item.hexcasting.charged_amethyst": "Заряженный осколок аметиста", - "item.hexcasting.lens": "Линза прозрения", - "item.hexcasting.scroll": "Свиток", - "item.hexcasting.scroll.of": "Древний Свиток - %s", - "item.hexcasting.scroll.empty": "Чистый свиток", - "item.hexcasting.abacus": "Рунные счёты", - "item.hexcasting.sub_sandwich": "Зубодробительный сэндвич", - "item.hexcasting.dye_colorizer_white": "Белый оттенок", - "item.hexcasting.dye_colorizer_orange": "Оранжевый оттенок", - "item.hexcasting.dye_colorizer_magenta": "Пурпурный оттенок", - "item.hexcasting.dye_colorizer_light_blue": "Голубой оттенок", - "item.hexcasting.dye_colorizer_yellow": "Жёлтый оттенок", - "item.hexcasting.dye_colorizer_lime": "Светло-зеленый оттенок", - "item.hexcasting.dye_colorizer_pink": "Розовый оттенок", - "item.hexcasting.dye_colorizer_gray": "Серый оттенок", - "item.hexcasting.dye_colorizer_light_gray": "Светло-серый оттенок", - "item.hexcasting.dye_colorizer_cyan": "Бирюзовый оттенок", - "item.hexcasting.dye_colorizer_purple": "Фиолетовый оттенок", - "item.hexcasting.dye_colorizer_blue": "Синий оттенок", - "item.hexcasting.dye_colorizer_brown": "Коричневый оттенок", - "item.hexcasting.dye_colorizer_green": "Зелёный оттенок", - "item.hexcasting.dye_colorizer_red": "Красный оттенок", - "item.hexcasting.dye_colorizer_black": "Чёрный оттенок", - "item.hexcasting.pride_colorizer_0": "Transgender оттенок", - "item.hexcasting.pride_colorizer_1": "Gay оттенок", - "item.hexcasting.pride_colorizer_2": "Agender оттенок", - "item.hexcasting.pride_colorizer_3": "Asexual оттенок", - "item.hexcasting.pride_colorizer_4": "Bisexual оттенок", - "item.hexcasting.pride_colorizer_5": "Pansexual оттенок", - "item.hexcasting.pride_colorizer_6": "Genderqueer оттенок", - "item.hexcasting.pride_colorizer_7": "Demigirl оттенок", - "item.hexcasting.pride_colorizer_8": "Non-Binary оттенок", - "item.hexcasting.pride_colorizer_9": "Lesbian оттенок", - "item.hexcasting.pride_colorizer_10": "Demiboy оттенок", - "item.hexcasting.pride_colorizer_11": "Genderfluid оттенок", - "item.hexcasting.pride_colorizer_12": "Intersex оттенок", - "item.hexcasting.pride_colorizer_13": "Aroace оттенок", - "item.hexcasting.uuid_colorizer": "Оттенок души", - - "block.hexcasting.conjured": "Магический барьер", - "block.hexcasting.slate.blank": "Пустая скрижаль", - "block.hexcasting.slate.written": "Рунная скрижаль", - "block.hexcasting.empty_impetus": "Empty Impetus", - "block.hexcasting.directrix_redstone": "Mason Directrix", - "block.hexcasting.empty_directrix": "Empty Directrix", - "block.hexcasting.impetus_rightclick": "Toolsmith Impetus", - "block.hexcasting.impetus_look": "Fletcher Impetus", - "block.hexcasting.impetus_storedplayer": "Cleric Impetus", - "block.hexcasting.akashic_record": "Запись акаши", - "block.hexcasting.akashic_bookshelf": "Книжный шкаф акаши", - "block.hexcasting.akashic_connector": "Akashic Ligature", - - "block.hexcasting.slate_block": "Блок скрижали", - "block.hexcasting.amethyst_dust_block": "Аметистовый песок", - "block.hexcasting.amethyst_tiles": "Аметистовые плитки", - "block.hexcasting.scroll_paper": "Свиточная бумага", - "block.hexcasting.ancient_scroll_paper": "Бумага древних свитков", - "block.hexcasting.scroll_paper_lantern": "Фонарь из бумаги свитков", - "block.hexcasting.ancient_scroll_paper_lantern": "Фонарь из бумаги древних свитков", - "block.hexcasting.amethyst_sconce": "Аметистовая свеча", - "block.hexcasting.akashic_log": "Потустороннее бревно", - "block.hexcasting.akashic_log_stripped": "Бритое потустороннее бревно", - "block.hexcasting.akashic_wood": "Потустороннее дерево", - "block.hexcasting.akashic_wood_stripped": "Бритое потустороннее дерево", - "block.hexcasting.akashic_planks": "Потусторонние доски", - "block.hexcasting.akashic_panel": "Потусторонние панели", - "block.hexcasting.akashic_tile": "Потусторонние резные доски", - "block.hexcasting.akashic_door": "Дверь из потусторонних досок", - "block.hexcasting.akashic_trapdoor": "Люк из потусторонних досок", - "block.hexcasting.akashic_stairs": "Ступени из потусторонних досок", - "block.hexcasting.akashic_slab": "Полублок потусторонних досок", - "block.hexcasting.akashic_button": "Кнопки из потусторонних досок", - "block.hexcasting.akashic_pressure_plate": "Потусторонняя нажимная плита", - "block.hexcasting.akashic_leaves1": "Листва аметиста", - "block.hexcasting.akashic_leaves2": "Листва авантюрина", - "block.hexcasting.akashic_leaves3": "Янтарная листва", - - "itemGroup.hexcasting": "Hexcasting", - - "hexcasting.tooltip.spellbook.page": "Текущая страница %d/%d", - "hexcasting.tooltip.spellbook.page.sealed": "Текущая страница %d/%d (%s)", - "hexcasting.tooltip.spellbook.page_with_name": "Текущая страница %d/%d (\"%s\")", - "hexcasting.tooltip.spellbook.page_with_name.sealed": "Текущая страница %d/%d (\"%s\") (%s)", - "hexcasting.tooltip.spellbook.sealed": "Залипло", - "hexcasting.tooltip.spellbook.empty": "Пусто", - "hexcasting.tooltip.spellbook.empty.sealed": "Пусто (%s)", - "hexcasting.tooltip.abacus": "§d", - "hexcasting.tooltip.abacus.reset": "Вернуть к 0", - "hexcasting.tooltip.abacus.reset.nice": "Норм", - "hexcasting.tooltip.lens.impetus.mana": "%s пылинок", - "hexcasting.tooltip.lens.impetus.storedplayer": "Привязано к %s", - "hexcasting.tooltip.lens.impetus.storedplayer.none": "Привязка убрана", - "hexcasting.tooltip.lens.pattern.invalid": "Неизвестная руна", - "hexcasting.tooltip.brainsweep.profession": "Профессия: %s", - "hexcasting.tooltip.lens.akashic.bookshelf.location": "Запись %s", - "hexcasting.tooltip.lens.akashic.record.count": "%s записей", - "hexcasting.tooltip.lens.akashic.record.count.single": "%s запись", - "hexcasting.tooltip.brainsweep.profession.any": "Любая профессия", - "hexcasting.tooltip.brainsweep.biome": "Биом: %s", - "hexcasting.tooltip.brainsweep.biome.any": "Любой биом", - "hexcasting.tooltip.brainsweep.min_level": "Уровень %d или выше", - "hexcasting.spelldata.onitem": "§7Содержит: §r%s", - "hexcasting.spelldata.anything": "Что угодно", - "hexcasting.spelldata.entity.whoknows": "Сущность из 0.5.0", - "hexcasting.spelldata.akashic.nopos": "The owning record does not know of any iota here (this is a bug)", - - "advancement.hexcasting:root": "Исследование рунных заклинаний", - "advancement.hexcasting:root.desc": "Войдите в аметистовую залежь - сконцентрированный источник мысли.", - "advancement.hexcasting:enlightenment": "Прорицание", - "advancement.hexcasting:enlightenment.desc": "Получите безумный урон от рунного заклинания, ходя по грани жизни и смерти.", - "advancement.hexcasting:wasteful_cast": "Сорить аметистами", - "advancement.hexcasting:wasteful_cast.desc": "Потратьте немалое количество аметистов на заклинание", - "advancement.hexcasting:big_cast": "Вы - Банкрот", - "advancement.hexcasting:big_cast.desc": "Потратьте огромное количество мысли для исполнения рунного заклинания.", - "advancement.hexcasting:y_u_no_cast_angy": "Не по плану", - "advancement.hexcasting:y_u_no_cast_angy.desc": "Исполнить сложное заклинание из свитка и потерпеть неудачу.", - "advancement.hexcasting:opened_eyes": "Открытие", - "advancement.hexcasting:opened_eyes.desc": "Потеряйте часть своего разума в качестве оплаты рунного заклинания.", - - "stat.hexcasting.mana_used": "Поглощено мысли (в пылинках)", - "stat.hexcasting.mana_overcasted": "Сверхзатраты мысли (в пылинках)", - "stat.hexcasting.patterns_drawn": "Написано рун", - "stat.hexcasting.spells_cast": "Использовано заклинаний", - - "death.attack.hexcasting.overcast": "Разум %s был полноценно поглощён как оплата заклинания", - - "command.hexcasting.pats.listing": "Руны в этом мире:", - "command.hexcasting.pats.all": "Дал тебе %d свитков", - "command.hexcasting.pats.specific.success": "Получен свиток %s ( %s )", - "command.hexcasting.recalc": "Пересчёт рун в мире", - "command.hexcasting.brainsweep": "Разум очищен %s", - "command.hexcasting.brainsweep.fail.badtype": "%s - не житель!", - "command.hexcasting.brainsweep.fail.already": "%s уже пуст", - "hexcasting.pattern.unknown": "Unknown pattern resource location %s", - - "hexcasting.message.cant_overcast": "Руны потребовали больше мысли чем у меня было... Возможно следовало дополнительно проверить расчёты.", - "hexcasting.message.cant_great_spell": "Заклинание не сработало, должно быть у меня не хватает знаний.?", - - "hexcasting.subtitles.start_pattern": "Пишем руну", - "hexcasting.subtitles.add_line": "Пишем линию", - "hexcasting.subtitles.add_pattern": "Руна окончена", - "hexcasting.subtitles.fail_pattern": "Допущена ошибка в руне", - "hexcasting.subtitles.ambiance": "Рунные линии трещат", - "hexcasting.subtitles.cast": "Руна исполняется", - "hexcasting.subtitles.abacus": "Счёты переведены", - "hexcasting.subtitles.abacus.shake": "Счёты трясутся", - "hexcasting.subtitles.spellcircle.add_pattern": "Заклинание круга трещит", - "hexcasting.subtitles.spellcircle.fail": "Заклинание круга громко трещит", - "hexcasting.subtitles.spellcircle.cast": "Заклинание круга применяется", - "hexcasting.subtitles.scroll.dust": "Свиток покрывается пылью", - "hexcasting.subtitles.scroll.scribble": "Свиток очищен", - "hexcasting.subtitles.impetus.fletcher.tick": "Fletcher Impetus ticks", - "hexcasting.subtitles.redstone.cleric.register": "Cleric Impetus dings", - - "hexcasting.spell.hexcasting:get_caster": "Зеркало нарцисса", - "hexcasting.spell.hexcasting:get_entity_pos": "Положение сущности", - "hexcasting.spell.hexcasting:get_entity_look": "Взгляд алидады", - "hexcasting.spell.hexcasting:get_entity_height": "Высота сущности", - "hexcasting.spell.hexcasting:get_entity_velocity": "Скорость сущности", - "hexcasting.spell.hexcasting:raycast": "Столкновение: стена", - "hexcasting.spell.hexcasting:raycast/axis": "Столкновение: компас", - "hexcasting.spell.hexcasting:raycast/entity": "Столкновение: сущность", - "hexcasting.spell.hexcasting:circle/impetus_pos": "Зеркало путевого камня", - "hexcasting.spell.hexcasting:circle/impetus_dir": "Взгляд путевого камня", - "hexcasting.spell.hexcasting:circle/bounds/min": "Отражение меньшей стопки", - "hexcasting.spell.hexcasting:circle/bounds/max": "Отражение большей стопки", - "hexcasting.spell.hexcasting:append": "Вступление в очередь", - "hexcasting.spell.hexcasting:concat": "Комбинация очередей", - "hexcasting.spell.hexcasting:index": "Выборка из очереди", - "hexcasting.spell.hexcasting:for_each": "Рунный перебор", - "hexcasting.spell.hexcasting:list_size": "Очередные счёты", - "hexcasting.spell.hexcasting:singleton": "Одиночное вхождение", - "hexcasting.spell.hexcasting:empty_list": "Пустотная очередь", - "hexcasting.spell.hexcasting:reverse_list": "Очередной переполох", - "hexcasting.spell.hexcasting:last_n_list": "Множественное вступление", - "hexcasting.spell.hexcasting:splat": "Flock's Disintegration", - "hexcasting.spell.hexcasting:index_of": "Locator's Distillation", - "hexcasting.spell.hexcasting:list_remove": "Excisor's Distillation", - "hexcasting.spell.hexcasting:slice": "Selection Exaltation", - "hexcasting.spell.hexcasting:get_entity": "Обнаружение сущности", - "hexcasting.spell.hexcasting:get_entity/animal": "Обнаруж. сущн.: Животные", - "hexcasting.spell.hexcasting:get_entity/monster": "Обнаруж. сущн.: Монстры", - "hexcasting.spell.hexcasting:get_entity/item": "Обнаруж. сущн.: Предметы", - "hexcasting.spell.hexcasting:get_entity/player": "Обнаруж. сущн.: Игроки", - "hexcasting.spell.hexcasting:get_entity/living": "Обнаруж. сущн.: Живое", - "hexcasting.spell.hexcasting:zone_entity": "Поиск по площади: Any", - "hexcasting.spell.hexcasting:zone_entity/animal": "Поиск по площади: Животные", - "hexcasting.spell.hexcasting:zone_entity/monster": "Поиск по площади: Монстры", - "hexcasting.spell.hexcasting:zone_entity/item": "Поиск по площади: Предметы", - "hexcasting.spell.hexcasting:zone_entity/player": "Поиск по площади: Игроки", - "hexcasting.spell.hexcasting:zone_entity/living": "Поиск по площади: Живое", - "hexcasting.spell.hexcasting:zone_entity/not_animal": "Поиск по площади: Не животные", - "hexcasting.spell.hexcasting:zone_entity/not_monster": "Поиск по площади: Не монстры", - "hexcasting.spell.hexcasting:zone_entity/not_item": "Поиск по площади: Не предметы", - "hexcasting.spell.hexcasting:zone_entity/not_player": "Поиск по площади: Не игроки", - "hexcasting.spell.hexcasting:zone_entity/not_living": "Поиск по площади: Неживое", - "hexcasting.spell.hexcasting:const/null": "Нуль константа", - "hexcasting.spell.hexcasting:duplicate": "Дублировать", - "hexcasting.spell.hexcasting:duplicate_n": "Множественное дублирование", - "hexcasting.spell.hexcasting:stack_len": "Размер стэка", - "hexcasting.spell.hexcasting:swap": "Верхний переход", - "hexcasting.spell.hexcasting:fisherman": "Значение по индексу", - "hexcasting.spell.hexcasting:swizzle": "Swindler's Gambit", - "hexcasting.spell.hexcasting:add": "Сложение", - "hexcasting.spell.hexcasting:sub": "Убавление", - "hexcasting.spell.hexcasting:mul_dot": "Умножение", - "hexcasting.spell.hexcasting:div_cross": "Деление", - "hexcasting.spell.hexcasting:abs_len": "Length Purification", - "hexcasting.spell.hexcasting:pow_proj": "Возведение в степень", - "hexcasting.spell.hexcasting:construct_vec": "Создать вектоа", - "hexcasting.spell.hexcasting:deconstruct_vec": "Разбить вектор", - "hexcasting.spell.hexcasting:and_bit": "Побитовое И", - "hexcasting.spell.hexcasting:or_bit": "Побитовое ИЛИ", - "hexcasting.spell.hexcasting:xor_bit": "Побитовое исключающее ИЛИ", - "hexcasting.spell.hexcasting:not_bit": "Побитовое НЕ", - "hexcasting.spell.hexcasting:to_set": "Uniqueness Purification", - "hexcasting.spell.hexcasting:and": "Логическое И (&&)", - "hexcasting.spell.hexcasting:or": "Логическое ИЛИ (||)", - "hexcasting.spell.hexcasting:xor": "Логическое исключающее ИЛИ (^)", - "hexcasting.spell.hexcasting:floor": "Опущение дроби", - "hexcasting.spell.hexcasting:ceil": "Доведение дроби", - "hexcasting.spell.hexcasting:greater": "Логическое больше (>)", - "hexcasting.spell.hexcasting:less": "Логическое меньше (<)", - "hexcasting.spell.hexcasting:greater_eq": "Логическое больше или равно (>=)", - "hexcasting.spell.hexcasting:less_eq": "Логическое меньше или равно (<=)", - "hexcasting.spell.hexcasting:equals": "Логическое равенство (==)", - "hexcasting.spell.hexcasting:not_equals": "Логическое неравенство (!=)", - "hexcasting.spell.hexcasting:not": "Логическое НЕ (!)", - "hexcasting.spell.hexcasting:identity": "id", - "hexcasting.spell.hexcasting:sin": "Синус", - "hexcasting.spell.hexcasting:cos": "Косинус", - "hexcasting.spell.hexcasting:tan": "Тангенс", - "hexcasting.spell.hexcasting:arcsin": "Арксинус", - "hexcasting.spell.hexcasting:arccos": "Аркосинус", - "hexcasting.spell.hexcasting:arctan": "Арктангенс", - "hexcasting.spell.hexcasting:random": "Энтропийное значение", - "hexcasting.spell.hexcasting:logarithm": "Логарифм", - "hexcasting.spell.hexcasting:coerce_axial": "Axial", - "hexcasting.spell.hexcasting:print": "Вывод в чат", - "hexcasting.spell.hexcasting:beep": "Издать ноту", - "hexcasting.spell.hexcasting:explode": "Взрыв", - "hexcasting.spell.hexcasting:explode/fire": "Огненный взрыв", - "hexcasting.spell.hexcasting:add_motion": "Импульс", - "hexcasting.spell.hexcasting:blink": "Мини-телепорт", - "hexcasting.spell.hexcasting:break_block": "Сломать блок", - "hexcasting.spell.hexcasting:place_block": "Поставить блок", - "hexcasting.spell.hexcasting:craft/cypher": "Создать побрякушку", - "hexcasting.spell.hexcasting:craft/trinket": "Создать штуковину", - "hexcasting.spell.hexcasting:craft/artifact": "Создать амулет", - "hexcasting.spell.hexcasting:craft/battery": "Создать пузырь мыслей", - "hexcasting.spell.hexcasting:recharge": "Перезарядка предмета", - "hexcasting.spell.hexcasting:erase": "Очистка предмета", - "hexcasting.spell.hexcasting:create_water": "Вылить воды", - "hexcasting.spell.hexcasting:destroy_water": "Зачерпнуть воды", - "hexcasting.spell.hexcasting:ignite": "Поджог", - "hexcasting.spell.hexcasting:extinguish": "Массовый поджог", - "hexcasting.spell.hexcasting:conjure_block": "Магический барьер", - "hexcasting.spell.hexcasting:conjure_light": "Магический свет", - "hexcasting.spell.hexcasting:bonemeal": "Удобрить", - "hexcasting.spell.hexcasting:edify": "Наполнить саженец", - "hexcasting.spell.hexcasting:colorize": "Установить оттенок", - "hexcasting.spell.hexcasting:sentinel/create": "Поставить Метку", - "hexcasting.spell.hexcasting:sentinel/destroy": "Убрать Метку", - "hexcasting.spell.hexcasting:sentinel/get_pos": "Позиция Метки", - "hexcasting.spell.hexcasting:sentinel/wayfind": "Путь к Метке", - "hexcasting.spell.hexcasting:potion/weakness": "Эффект слабости", - "hexcasting.spell.hexcasting:potion/levitation": "Эффект левитации", - "hexcasting.spell.hexcasting:potion/wither": "Эффект иссушения", - "hexcasting.spell.hexcasting:potion/poison": "Эффект отравления", - "hexcasting.spell.hexcasting:potion/slowness": "Эффект замедления", - "hexcasting.spell.hexcasting:potion/regeneration": "Эффект регенерации", - "hexcasting.spell.hexcasting:potion/night_vision": "Эффект ночного зрения", - "hexcasting.spell.hexcasting:potion/absorption": "Эффект поглощения", - "hexcasting.spell.hexcasting:potion/haste": "Эффект спешки", - "hexcasting.spell.hexcasting:potion/strength": "Эффект силы", - "hexcasting.spell.hexcasting:flight": "Полёт", - "hexcasting.spell.hexcasting:lightning": "Громовержец", - "hexcasting.spell.hexcasting:summon_rain": "Призвать дождь", - "hexcasting.spell.hexcasting:dispel_rain": "Гнать дождь", - "hexcasting.spell.hexcasting:create_lava": "Создать лаву", - "hexcasting.spell.hexcasting:teleport": "Телепорт", - "hexcasting.spell.hexcasting:brainsweep": "Чистый разум", - "hexcasting.spell.hexcasting:sentinel/create/great": "Призвать чанк-лоадер метку", - "hexcasting.spell.hexcasting:open_paren": "Начало функции", - "hexcasting.spell.hexcasting:close_paren": "Конец функции", - "hexcasting.spell.hexcasting:escape": "Лямбда выражение", - "hexcasting.spell.hexcasting:eval": "Исполнить заклинание", - "hexcasting.spell.hexcasting:eval/delay": "Секрет!", - "hexcasting.spell.hexcasting:read": "Чтение предмета", - "hexcasting.spell.hexcasting:write": "Запись в предмет", - "hexcasting.spell.hexcasting:readable": "Проверка чтимости", - "hexcasting.spell.hexcasting:readable/entity": "Проверка чтимости II", - "hexcasting.spell.hexcasting:writable": "Проверка вписываемости", - "hexcasting.spell.hexcasting:read/entity": "Чтение сущности", - "hexcasting.spell.hexcasting:akashic/read": "Чтение акаши", - "hexcasting.spell.hexcasting:akashic/write": "Запись акаши", - "hexcasting.spell.hexcasting:const/vec/px": "Взгляд +X", - "hexcasting.spell.hexcasting:const/vec/py": "Взгляд +Y", - "hexcasting.spell.hexcasting:const/vec/pz": "Взгляд +Z", - "hexcasting.spell.hexcasting:const/vec/nx": "Взгляд -X", - "hexcasting.spell.hexcasting:const/vec/ny": "Взгляд -Y", - "hexcasting.spell.hexcasting:const/vec/nz": "Взгляд -Z", - "hexcasting.spell.hexcasting:const/vec/0": "Взгляд 0", - "hexcasting.spell.hexcasting:const/vec/x": "Vector Rfln. +X/-X", - "hexcasting.spell.hexcasting:const/vec/y": "Vector Rfln. +Y/-Y", - "hexcasting.spell.hexcasting:const/vec/z": "Vector Rfln. +Z/-Z", - "hexcasting.spell.hexcasting:const/double/pi": "Значение Пифагора", - "hexcasting.spell.hexcasting:const/double/tau": "Значение Тау", - "hexcasting.spell.hexcasting:const/double/e": "Значение эйлера", - "hexcasting.spell.hexcasting:number": "Число", - "hexcasting.spell.hexcasting:mask": "Bookkeeper's Gambit", - "hexcasting.spell.unknown": "чё-то специальное", - - "hexcasting.mishap.invalid_pattern": "Эти линии не образуют правильную руну", - "hexcasting.mishap.invalid_spell_datum_type": "Попытка использовать неверный тип как SpellDatum: %s (тип %s). Баг детектед.", - "hexcasting.mishap.invalid_value": "%s ожидал %s по индексу %s стэка, но получил %s", - "hexcasting.mishap.invalid_value.class.double": "число", - "hexcasting.mishap.invalid_value.class.vector": "вектор", - "hexcasting.mishap.invalid_value.class.list": "последовательность", - "hexcasting.mishap.invalid_value.class.widget": "абстракция", - "hexcasting.mishap.invalid_value.class.pattern": "руна", - "hexcasting.mishap.invalid_value.class.entity.item": "предмет", - "hexcasting.mishap.invalid_value.class.entity.player": "игрок", - "hexcasting.mishap.invalid_value.class.entity.villager": "житель", - "hexcasting.mishap.invalid_value.class.entity.living": "живое существо", - "hexcasting.mishap.invalid_value.class.entity": "существо", - "hexcasting.mishap.invalid_value.class.unknown": "БАГ ДЕТЕКТЕД", - "hexcasting.mishap.invalid_value.numvec": "число или вектор", - "hexcasting.mishap.invalid_value.numlist": "число или очередь", - "hexcasting.mishap.invalid_value.list.pattern": "последовательность рун", - "hexcasting.mishap.invalid_value.int": "целое число", - "hexcasting.mishap.invalid_value.double.between": "число между %d и %d", - "hexcasting.mishap.invalid_value.int.between": "целое число между %d и %d", - "hexcasting.mishap.not_enough_args": "%s ожидалось %s или больше аргументов, но стэк имеет %s", - "hexcasting.mishap.too_many_close_parens": "Лишняя скобка закрытия функции", - "hexcasting.mishap.wrong_dimension": "%s не может увидеть %s из %s", - "hexcasting.mishap.location_too_far": "%s слишком далеко для %s", - "hexcasting.mishap.entity_too_far": "%s слишком далеко для %s", - "hexcasting.mishap.immune_entity": "%s не может отобразить %s", - "hexcasting.mishap.eval_too_deep": "Достигнут предел рекурсии", - "hexcasting.mishap.no_item": "%s ожидал %s, но получил ничего", - "hexcasting.mishap.no_item.offhand": "%s ожидал %s в другой руке, но получил ничего", - "hexcasting.mishap.bad_item": "%s ожидал %s, но получил %s", - "hexcasting.mishap.bad_item.offhand": "%s ожидал %s в другой руке, но получил %dx %s", - "hexcasting.mishap.bad_item.iota": "информация", - "hexcasting.mishap.bad_item.iota.read": "место чтения информации", - "hexcasting.mishap.bad_item.iota.write": "a place to write iotas to", - "hexcasting.mishap.bad_item.iota.readonly": "принимает только %s", - "hexcasting.mishap.bad_item.mana": " предмет-хранилище мысли", - "hexcasting.mishap.bad_item.mana_for_battery": "предмет сырой мысли", - "hexcasting.mishap.bad_item.only_one": "ровно один предмет", - "hexcasting.mishap.bad_item.eraseable": "очищаемый предмет", - "hexcasting.mishap.bad_item.bottle": "стекляный пузырь", - "hexcasting.mishap.bad_item.rechargable": "перезаряжаемый предмет", - "hexcasting.mishap.bad_block": "Ожидал %s на %s, но получил %s", - "hexcasting.mishap.bad_block.sapling": "саженец", - "hexcasting.mishap.bad_brainsweep": "%s отклонил разум жителя", - "hexcasting.mishap.already_brainswept": "Житель уже был использован", - "hexcasting.mishap.no_spell_circle": "%s требует рунный круг", - "hexcasting.mishap.others_name": "Пытался внедриться в конфиденциальность %s", - "hexcasting.mishap.divide_by_zero.divide": "Попытался делить %s на %s", - "hexcasting.mishap.divide_by_zero.project": "%s на %s", - "hexcasting.mishap.divide_by_zero.exponent": "Попытался возвести %s в %s", - "hexcasting.mishap.divide_by_zero.logarithm": "Попытался получить логарифм %s с основанием %s", - "hexcasting.mishap.divide_by_zero.zero": "нуль", - "hexcasting.mishap.divide_by_zero.zero.power": "нулевая степень", - "hexcasting.mishap.divide_by_zero.zero.vec": "нулевой вектор", - "hexcasting.mishap.divide_by_zero.power": "степень %s", - "hexcasting.mishap.divide_by_zero.sin": "сунус %s", - "hexcasting.mishap.divide_by_zero.cos": "косинус %s", - "hexcasting.mishap.no_akashic_record": "Отсутсвует Запись Акаши на %s", - "hexcasting.mishap.disallowed": "%s админ запретил.", - - "hexcasting.landing": "Кажется я познал новый способ магического искусства, оно предпологает хаотичное написание рун. Это очаровывает. Я решил начать вести записи моих мыслей и находок.$(br2)$(l:https://discord.gg/4xxHGYteWk)Discord сервер(там большинство англичане)/$", - - "hexcasting.entry.basics": "Вводный урок", - "hexcasting.entry.basics.desc": "Практикующие это искусство могут исполнять заклинания написанием странных комбинаций посохом в воздухе ( их называют рунами ) или создают могущественные магические предметы чтобы мнгновенно исполнять заклинания. Я хочу достить того же.", - - "hexcasting.entry.casting": "Рунные заклинания", - "hexcasting.entry.casting.desc": "Я начинаю понимать как древние мастера исполняли свои заклинания. Это довольно времезатратный проект, уверен у меня получится всё понять. Посмотрим...", - - "hexcasting.entry.items": "Магические предметы", - "hexcasting.entry.items.desc": "Я посвящаю эту секцию загадочным предметам, которые я обнаружил в ходе моего обучения.$(br2)Похоже множество этих предметов используется при совместном удержании с посохом. Думаю мне следует тщательно выбирать что находится в моей неведущей руке.", - - "hexcasting.entry.greatwork": "Великое деяние (перевода 0%)", - "hexcasting.entry.greatwork.desc": "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$(k)get stick bugged lmao/$", - - "hexcasting.entry.patterns": "Руны", - "hexcasting.entry.patterns.desc": "Список всех рун, в использовании которых я уверен.", - - "hexcasting.entry.spells": "Продвинутые руны", - "hexcasting.entry.spells.desc": "Руны, которые совершают магические взаимодействия с окружающим миром.", - - "hexcasting.entry.great_spells": "Сложные руны", - "hexcasting.entry.great_spells.desc": "Руны, изложенные здесь считаются легендарно сложными и мощными. Кажется они были использованы очень редко (к счастью, в древних текстах они упоминаются). Вероятно это просто трактирные байки, но попробовать стоит. Разве могут возникнуть проблемы?", - - - "_comment": "Основы", - - "hexcasting.entry.media": "Мысли", - "hexcasting.page.media.1": "Мысли это вариант ментальной энергии, привязанная к разуму. Каждое живое существо генерирует потоки мысли при мозговой активности; после окончания цикла мозговой активности, потоки мысли выделяются в окружающую среду.$(br2)Искусство $(thing)Рунных/$ заклинаний о том как использовать мысли в своих целях.", - "hexcasting.page.media.2": "Мысли могут взаимодействовать с другими с помощью написания Мыслей в руны.$(p)Последователи этого искусства использовали сконцентрированную сферу Мыслей на конце палки - с помощью размахивания ей в воздухе в нужных комбинациях они были способны использовать достаточно Мыслей, чтобы взаимодействовать с миром с помощью рунных заклинаний.", - "hexcasting.page.media.3": "К сожалению даже такое живое существо как могу генерировать крайне малое количество Мыслей. Будет крайне непрактично использовать мои естественные Мысли для практики заклинаний.$(br2)Но древние текста говорят, что под землёй есть некие залежи кристализованные источники Мыслей, которые медленно пополняются.$(p)Я бы был очень рад найти такое.", - - "hexcasting.entry.geodes": "Жеоды", - "hexcasting.page.geodes.1": "При копании глубоко под землёй я нашёл жеоду, которая наполнена кристализованными залежами энергии, сжимающая мой череп и мысли. $(italic)Должно быть это место/$, о котором было написано в древних текстах. Эти криссалы аметиста должно быть содержат $(thing)физическую форму Мыслей./$", - "hexcasting.page.geodes.2": "Похоже, в дополнение к $(item)Осколкам аметиста/$, которые я вижу чаще всего, эти кристалы так же могут дать мне $(item)Аметистовую пыль/$ и $(item)Заряженные кристалы аметиста/$. С зачарованием удачи на кирке шанс получения заряженных кристалов выше.", - "hexcasting.page.geodes.3": "При погружении в красоту жеоды я чувствую потоки ветряных Мыслей, посещающих мой разум с невероятной скоростью. Это великолепное чувство.$(br2)Наконец-таки моё погружение в эту бездну обретает некий смысл.$(p) Мне следует перепрочесть старые текста, так как теперь я имею большее понимание с чем работаю.", - - "hexcasting.entry.couldnt_cast": "Бессилие", - "hexcasting.page.couldnt_cast.1": "Чёрт! Почему я не могу использовать эту руну?!$(br2)Свиток, который я нашёл, отвечает аутентично. Я могу $(italic)почувствовать/$ его треск в свитке - порядок верный, или настолько верный насколько есть возможность. Заклинание $(italic)уже должно было исполниться/$.$(p)Но кажется, что по ту сторону некая тонкая мембрана. Заклинание почти исполнилось, но что-то мешало, мне необходимо преодолеть этот барьер.", - "hexcasting.page.couldnt_cast.2": "Кажется барьер ослабляется с приложенной силой заклинания; не смотря на мои усилия, мою концентрацию, мои лучшие аметисты, мои великолепные зарисовки - оно $(italic)отказывается/$ пресечь барьер. Это сводит с ума.$(p)$(italic)Неужели это/$ конец моего обучения? Проклятие слабости, проклятие потерять мою мощь?$(br2)Мне следует глубоко вздохнуть. Мне следует сконцентрироваться на том что мешает мне...", - "hexcasting.page.couldnt_cast.3": "После тщательного обдумывания я нашёл изменение в себе.$(p)Будучи в окружении $(item)аметистов/$, Я научился исполнять руны используя мою энергию разума и жизни - как было написано в древних текстах.$(p)Не знаю почему теперь я могу. Это бремя знания истины и я ношу его всегда. Я знаю. Я обременён.$(br2)К счастью, я чувствую свои пределы, с меня получилось бы около двух $(item)Заряженных кристалов аметиста/$ Мысли из моего здоровья, разума.", - "hexcasting.page.couldnt_cast.4": "Я содрагаю в понимании этого... До этого мой разум был практически цел до сей поры, в моих исследованиях. Но оказалось что я формирую одну сторону тонской связи.$(p)Я присоединен к некой другой стороне - сторона, которая была практически истощена этой болью. Место где простые действия даруют великую славу.$(p)Неужели так плохо хотеть этого для себя?", - - "hexcasting.entry.start_to_see": "ЧТО Я ВИДЕЛ", - "hexcasting.page.start_to_see.1": "Тексты не лгали. Природа взяла свою положенную долю.", - "hexcasting.page.start_to_see.2": "Это... это было...$(p)...это были самые ужасные чувства, которые я испытывал. Я предложила природе свой план и почуствовал лёгкую улыбку и плачевное чувство взамен - часть меня, моего разума растворилась, как аметистовая пыль под дождём.$(p)Моё $(italic)выживание на грани/$ это невероятная удача, несмотря на это мне хватает сил что писать это, следует закрыть этот вопрос, перепроверять мои расчёты и больше не допускать такой ужасающей ошибки", - "hexcasting.page.start_to_see.3": "...Но.$(br2) Но на мнгновение, часть меня... $(italic)видела/$... нечто. Место....$(p)И мембранный барьер, отделяющий меня от сырой реальности, наполненной лёгкой, светлой энергией Мысли. Я помню, я видел, чувствовал, вспоминал барьер, слегка трещащий на гранях.$(p)Я хотел $(italic)туда, сквозь./$", - "hexcasting.page.start_to_see.4": "Мне не следует этого делать. Я $(italic)знаю/$, это будет слишком опасно. Мне не следует. Опасно. Попытка этого поставит меня на мост, с огромной возможностью сорваться в низ, к безумию, к смерти.$(br2)Но я так близок...$(italic)Близок/$.$(p)$(italic)Это/$ кульминация моих исследований. Это $(#54398a)Прорицание/$, которого я искал. $(br2)Я хочу больше. Я должен испытать это снова. Я $(italic)увижу/$ это ещё раз.$(p) Как моожно не мечтать о вечной славе, о великой силе?", - - - "_comment": "Исполнение рун", - - "hexcasting.entry.101": "Урок первый.", - "hexcasting.page.101.1": "Исполнение рунных заклинаний немного сложный процесс, неудивительно, что это искусство было практически забыто. Я перепрочту мои записи тщательно.$(br2)Я могу начать писать Руну зажав $(k:use) с $(item)Посохом/$ в моей руке, я увижу диагональную сетку точек в воздухе, передо мной. Дальше я могу зажимать и двигать посохом от точки до точки, чтобы писать руны в Мыслях сетки; завершение руны запустит её действие, описанное во вкладке Руны.", - "hexcasting.page.101.2": "Как только я написал достаточное количество рун для исполнения заклинания сетка исчезнет как Мысли, которые я сохранил будут выпущены. Я также могут нажать Escape если хочу покинуть сетку заранее, если я конечно не опасаюсь некоторой ошибки, которая может привести к неприятностям ( чем больше Мыслей я использовал тем выше шанс, что последствия будут ).$(br2) Так как работают Руны? В кратце:$(li)$(italic)Руны/$ будут испольнять...$(li)$(italic)Действия/$, которые используют $(li)$(italic)Стэк/$, являющийся очередью... Из различной $(li)$(italic)Информации/$.", - "hexcasting.page.101.3": "Во первых, $(thing)Руны/$. Они основополагающие - их я использую чтобы взаимодействовать с Мыслями вокруг меня. Некоторые руны, когда написаны, совершат $(thing)действия/$. Действия на самом деле и $(italic)делают всю магию/$; все руны манипулируют Мыслями разными методами и если метод оканчивается чем-то полезным это называется действием.$(br2)Мысли могут быть изменчивыми: если я напишу неправильную руну то получу в результате мусор где-то в моём стэке", - "hexcasting.page.101.4.header": "Пример", - "hexcasting.page.101.4": "Следует заметить что $(italic)направление/$ этих рун не важно. Обе этих руны исполняют действие $(l:patterns/basics#hexcasting:get_caster)$(action)Зеркало нарцисса/$", - "hexcasting.page.101.5": "Заклинания исполняются написанием (верных) рун по очереди. Each action might do one of a few things:$(li)Gather some information about the environment, leaving it on the top of the stack;$(li)manipulate the info gathered (e.g. adding two numbers); or$(li)perform some magical effect, like summoning lightning or an explosion. (These actions are called \"spells.\")$(p)When I start casting a _Hex, it creates an empty stack. Actions manipulate the top of that stack.", - "hexcasting.page.101.6": "$(l:patterns/basics#hexcasting:get_caster)$(action)Зеркало нарцисса/$ поместит на верх стэка информацию об игроке, который исполняет заклинание. $(l:patterns/basics#hexcasting:get_entity_pos)$(action)Положение сущности/$ возьмёт информацию о сущности с верха стэка и вернёт её положение на верх стэка. $(br2)Так что написание рун в этом порядке положит на верх стэка моё положение.", - "hexcasting.page.101.7": "$(thing)Информация/$ может представлять такие вещи как я или моя позиция, но есть другие типы которыми я могу управлять с помощью $(thing)Действий$(0). Список типов информации:$(li)Числа (\"doubles\");$(li)Вектора (\"vector\") 3 числа представляющие позицию или направление", - "hexcasting.page.101.8": "$(li)Сущности, как я, куры, вагонетки, валяющиеся предметы;$(li)Абстракции;$(li)Очередь из рун, использующаяся для создания магических предметов и мозговыносящих заклинаний как $(italic)заклинания, которые вызывают другие/$; И$(li)Очередь с любыми типами информации", - "hexcasting.page.101.9": "Естественно все заклинания тратят Мысли в качестве оплаты.$(br2)Как я понимаю заклинания это план действий, представленный Природе - в этой аналогии Мысли используются для соединения с Природой, передачи ей информации.", - "hexcasting.page.101.10": "К слову, похоже никто не делал исследований по поводу того $(italic)сколько Мысли хранит аметист/$. $(item)Осколок аметиста/$ около пяти $(item)Аметистовой Пыли/$, и $(item)Заряженный кристал аметиста/$ около 10.(br2)Достаточно странно, видимо другие формы аметиста не подходят для исполнения заклинаний. Цельные блоки кристалов и цельные кристалы слишком большие чтобы запросто конвертироваться в Мысли.", - "hexcasting.page.101.11": "Следует отметить, что Действие потребляет Мысли сразу, а не когда заклинание окончено. Так же Действие всегда потребляет цельный предмет, к примеру, если руна требует 1 $(item)Аметистовую пыль/$ заберёт в оплату целый $(item)Заряженный кристал аметиста/$, если это единственный источник Мысли в моём инвентаре.$(br2)Хорошей идеей будет брать немного пыли для заклинаний, чтобы не тратить лишнего.", - "hexcasting.page.101.12": "Судя по древним текстам, недостаток Мысли в инвентаре для заклинания может вызвать ужасные последствия - в качестве оплаты, будет принята часть разума. Ощущения описываются как - слабость, жуткая боль, страдания, растворение плоти...\"$(br)Вероятно из-за этого все последователи этой магии сошли с ума. Я не могу представить себе плавление $(italic)частей моего разума/$.", - "hexcasting.page.101.13": "Возможно что-то поменялось, наверное. В моих экспериментах у меня не получалось потратить больше Мысли чем есть у меня в виде аметистов, будто что-то оберегает меня.$(br2)Было бы интересно достичь дна этой мистики, но сейчас что-то оберегает меня...", - "hexcasting.page.101.14": "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.$(br2)$(italic)Content Warning: some body horror and suggestive elements./$", - "hexcasting.page.101.14.link_text": "Goblin Punch", - "hexcasting.page.101.15": "Похоже, все руны имеют ограничение в дистанции работы, около 32 блоков радиуса, если попытаться активировать заклинание за пределами этого круга руна не сработает.", - - "hexcasting.entry.vectors": "A Primer on Vectors", - "hexcasting.page.vectors.1": "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.$(br2)First off, an enlightening video on the topic.", - "hexcasting.page.vectors.1.link_text": "3blue1brown", - "hexcasting.page.vectors.2": "Additionally, it seems that the mages who manipulated $(thing)Psi energy/$ (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.$(br2)They seem to have used different language for their spellcasting:$(li)A \"Spell Piece\" was their name for an action;$(li)a \"Trick\" was their name for a spell; and$(li)an \"Operator\" was their name for a non-spell action.", - "hexcasting.page.vectors.3": "Link here.", - "hexcasting.page.vectors.3.link_text": "Psi Codex", - - "hexcasting.entry.mishaps": "Ошибки и последствия", - "hexcasting.page.mishaps.1": "Я не идеален, я делаю ошибки время от времени во время обучения и исполнения заклинаний; например если допустить ошибку в написании руны или использовать руну без нужных аргументов. Ошибки не прощаются, допуская ошибку я получу $(italic)неприятности/$.", - "hexcasting.page.mishaps.2": "Неверная руна будет подсвечена красным на сетке. Основываясь на типе ошибки можно ожидать различные эффекты и разноцветные искорки. $(br2)Так же я получу полезное сообщение в чате ( грядёт обновление и это вырежут!).", - "hexcasting.page.mishaps.3": "Fortunately, although the bad effects of mishaps are certainly $(italic)annoying/$, 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.$(br2)Following is a list of mishaps I have compiled.", - "hexcasting.page.mishaps.invalid_pattern.title": "Invalid Pattern", - "hexcasting.page.mishaps.invalid_pattern": "The pattern drawn is not associated with any action.$(br2)Causes yellow sparks, and a $(l:casting/influences)$(action)Garbage/$ will be pushed to the top of my stack.", - "hexcasting.page.mishaps.not_enough_iotas.title": "Not Enough Iotas", - "hexcasting.page.mishaps.not_enough_iotas": "The action required more iotas than were on the stack.$(br2)Causes light gray sparks, and as many $(l:casting/influences)$(action)Garbages/$ as would be required to fill up the argument count will be pushed.", - "hexcasting.page.mishaps.incorrect_iota.title": "Incorrect Iota", - "hexcasting.page.mishaps.incorrect_iota": "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.$(br2)Causes dark gray sparks, and the invalid iota will be replaced with $(l:casting/influences)$(action)Garbage/$.", - "hexcasting.page.mishaps.vector_out_of_range.title": "Vector Out of Ambit", - "hexcasting.page.mishaps.vector_out_of_range": "The action tried to affect the world at a point that was out of my range.$(br2)Causes magenta sparks, and the items in my hands will be yanked out and flung towards the offending location.", - "hexcasting.page.mishaps.entity_out_of_range.title": "Entity Out of Ambit", - "hexcasting.page.mishaps.entity_out_of_range": "The action tried to affect an entity that was out of my range.$(br2)Causes pink sparks, and the items in my hands will be yanked out and flung towards the offending entity.", - "hexcasting.page.mishaps.entity_immune.title": "Entity is Immune", - "hexcasting.page.mishaps.entity_immune": "The action tried to affect an entity that cannot be altered by it.$(br2)Causes blue sparks, and the items in my hands will be yanked out and flung towards the offending entity.", - "hexcasting.page.mishaps.math_error.title": "Mathematical Error", - "hexcasting.page.mishaps.math_error": "The action did something offensive to the laws of mathematics, such as dividing by zero.$(br2)Causes red sparks, pushes a $(l:casting/influences)$(action)Garbage/$ 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 $(italic)me/$ in retaliation.", - "hexcasting.page.mishaps.incorrect_item.title": "Incorrect Item", - "hexcasting.page.mishaps.incorrect_item": "The action requires some sort of item, but the item I supplied was not suitable.$(br2)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.", - "hexcasting.page.mishaps.incorrect_block.title": "Incorrect Block", - "hexcasting.page.mishaps.incorrect_block": "The action requires some sort of block at a target location, but the block supplied was not suitable.$(br2)Causes bright green sparks, and causes an ephemeral explosion at the given location; it will harm me and others, but will not destroy any blocks.", - "hexcasting.page.mishaps.retrospection.title": "Hasty Retrospection", - "hexcasting.page.mishaps.retrospection": "I attempted to draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ without first drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$.$(br2)Causes orange sparks, and pushes the pattern for $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ to the stack as a pattern iota.", - "hexcasting.page.mishaps.too_deep.title": "Delve Too Deep", - "hexcasting.page.mishaps.too_deep": "Evaluated too many spells with meta-evaluation from one spell.$(br2)Causes dark blue sparks, and chokes all the air out of me.", - "hexcasting.page.mishaps.true_name.title": "Transgress Other", - "hexcasting.page.mishaps.true_name": "Я попытался $(l:patterns/readwrite#hexcasting:write)$(action)сохранить информацию/$ о другом игроке.$(br2)Вызывает чёрные искрыs, and robs me of my sight for approximately one minute.", - "hexcasting.page.mishaps.disabled.title": "Disallowed Action", - "hexcasting.page.mishaps.disabled": "I tried to cast an action that has been disallowed by a server administrator.$(br2)Causes black sparks.", - "hexcasting.page.mishaps.invalid_iota.title": "Invalid Iota Type", - "hexcasting.page.mishaps.invalid_iota": "A bug in the mod caused an iota of an invalid type. $(l:https://https://github.com/gamma-delta/HexMod/issues)Please open a bug report!/$$(br2)Causes black sparks.", - - "hexcasting.entry.stack": "Стэк", - "hexcasting.page.stack.1": "A $(thing)Stack/$, 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.$(br2)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.", - "hexcasting.page.stack.2": "Because a stack is so simple, there's only so many things you can do with it:$(li)$(italic)Adding something to it/$, known formally as pushing,$(li)$(italic)Removing the last added element/$, known as popping, or$(li)$(italic)Examining or modifying the last added element/$, known as peeking.$(br)We call the last-added element the \"top\" of the stack, in accordance with the dinner plate analogy.$(p)As an example, if we push 1 to a stack, then push 2, then pop, the top of the stack is now 1.", - "hexcasting.page.stack.3": "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.$(br2)Of course, some actions (e.g. $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$) might pop no arguments, and some actions (particularly spells) might push nothing afterwards.", - "hexcasting.page.stack.4": "Even more complicated actions can be expressed in terms of pushing, popping, and peeking. For example, $(l:patterns/stackmanip#hexcasting:swap)$(action)Jester's Gambit/$ 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, $(l:patterns/stackmanip#hexcasting:duplicate)$(action)Gemini Decomposition/$ duplicates the top of the stack-- in other words, it peeks the stack and pushes a copy of what it finds.", - - "hexcasting.entry.naming": "Naming Actions", - "hexcasting.page.naming.1": "The names given to actions by the ancients were certainly peculiar, but I think there's a certain kind of logic to them.$(br2)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.", - "hexcasting.page.naming.2": "$(li)A $(thing)Reflection/$ pops nothing and pushes one iota.$(li)A $(thing)Purification/$ pops one and pushes one.$(li)A $(thing)Distillation/$ pops two and pushes one.$(li)An $(thing)Exaltation/$ pops three or more and pushes one.$(li)A $(thing)Decomposition/$ pops one argument and pushes two.$(li)A $(thing)Disintegration/$ pops one and pushes three or more.$(li)Finally, a $(thing)Gambit/$ pushes or pops some other number (or rearranges the stack in some other manner).", - "hexcasting.page.naming.3": "Spells seem to be exempt from this nomenclature and are more or less named after what they do-- after all, why call it a $(thing)Demoman's Gambit/$ when you could just say $(thing)Explosion/$?", - - "hexcasting.entry.influences": "Influences", - "hexcasting.page.influences.1": "Influences are ... strange, to say the least. Whereas most iotas seem to represent something about the world, influences represent something more... abstract, or formless.$(br2)For example, one influence I've named Null seems to represent nothing at all. It's created when there isn't a suitable answer to a question asked, such as an $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$ facing the sky.", - "hexcasting.page.influences.2": "In addition, I've discovered a curious triplet of influences I've named Consideration, Introspection, and Retrospection. I can use these to add patterns to my stack as iotas, instead of matching them to actions. $(l:patterns/patterns_as_iotas)My notes on the subject are here/$.", - "hexcasting.page.influences.3": "Finally, there seems to be an infinite family of influences that just seem to be a tangled mess of _media. I've named them $(action)Garbage/$, as they are completely useless. They seem to appear in my stack at random, like pests, when I drawn an invalid pattern. Turning my (admittedly very poor) ethereal senses towards them, I see only a nonsense jumble.", - - - "_comment": "Предметы", - - "hexcasting.entry.amethyst": "Аметист", - "hexcasting.page.amethyst.1": "Похоже существует 3 разных типа аметиста, который я могу получить ломая кристалы внутри жеоды. Самая маленькая форма из них - пыль, имеющая в себе крайне незначительное количество мысли.", - "hexcasting.page.amethyst.2": "Второй - цельный осколок аметиста, который может быть использован не только колдуны. В осколке содержится столько же мысли сколько находится в 5 штуках $(item)Аметистовой Пыли/$s.", - "hexcasting.page.amethyst.3": "Наконец, редко я буду находить болшьшие куски кристалов, переполняющиеся энергией. В них находится объем 10 $(item)Аметистовой Пыли/$s (или двух $(item)Осколков Аметиста/$s).", - "hexcasting.page.amethyst.4": "$(italic)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./$", - - "hexcasting.entry.Посох": "Посох", - "hexcasting.page.staff.1": "$(item)Посох/$ это моя точка входа в использовании рун всех типов. Если держать его в руке и нажать $(thing)$(k:use)/$, я начну писать руну; тогда я смогу зажать любую кнопку мыши чтобы писать руны.$(br2)Это нечто большее чем просто кусок мысли на конце палки; в конечном счётё это всё что нужно.", - "hexcasting.page.staff.crafting.header": "Вставки", - "hexcasting.page.staff.crafting.desc": "Посох можно создать из различных видов дерева и он будет выглядеть по-разному, это $(italic)не влияет на руны/$", - - "hexcasting.entry.lens": "Линза прозрения", - "hexcasting.page.lens.1": "Мысли могут иметь эффект на любом типе информации, в особых условиях. Покрытие стекляшки тонкий слоем из мыслей может помочь узнать множество нового.$(br2)Удерживая $(item)Линзу прозрения/$ в моей руке, некоторые блоки будут показывать дополнительную информацию когда я смотрю на них.", - "hexcasting.page.lens.2": "К примеру, смотря на редстоун пылинку я увижу силу её сигнала. Я предполагаю, что узнаю множество других блоков, с которыми взаимодействует линза.$(br2)В дополнение, удерживая её при написании рун сильно уменьшит расстояние между точками на рунной сетке, что позволит мне написать куда больше рун.", - "hexcasting.page.lens.3": "$(italic)You must learn... to see what you are looking at./$", - - "hexcasting.entry.focus": "Талисман", - "hexcasting.page.focus.1": "$(item)Талисман/$ может хранить одну единицу информации.$(br2)При создании она имеет внутри Null абстракцию. Используя $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ while holding a $(item)Focus/$ in my other hand will remove the top of the stack and save it into the $(item)Focus/$. Using $(l:patterns/readwrite#hexcasting:read)$(action)Запись в предмет/$ можно сохранить любую информацию в $(item)Талисман/$ и добавить её в стэк позже.", - "hexcasting.page.focus.2": "Вероятно я могу хранить целую очередь из рун в $(item)Талисмане/$, а затем вызывать их и использовать с помощью $(l:patterns/meta#hexcasting:eval)$(action)/$. Таким образом я могу исполнять комплексные заклинани, или части заклинаний, без необходимости постоянно их писать.$(br2)Думаю я могу сильно укоротить заклинания, положив часто встречающиеся очереди рун в $(item)Талисман/$, например быстрый доступ к координатам блока на который я смотрю.", - "hexcasting.page.focus.3": "Также, если я сохраню сущность в $(item)Талисмане/$ и попробую получить её после того как сущность погибла или исчезла $(action)Чтение из предмета/$ вернёт Null абстракцию заместо сущности.$(br2)С помощью медовых сот я могу защитить талисман от случайной перезаписи. Попытавшись использоватоь $(action)Запись в предмет/$ на залипшем талисмане провалится.", - "hexcasting.page.focus.4": "$(italic)Poison apples, poison worms./$", - - "hexcasting.entry.abacus": "Счёты", - "hexcasting.page.abacus.1": "Числа могут быть выражены не только с помощью рун, старые мастера рунного ремесла создали предмет, позволяющий быстро получать числа с помощью $(item)Счётов/$. Просто установить число на счётах и прочесть его с помощью $(l:patterns/readwrite#hexcasting:read)$(action)Чтения из предмета/$, будто я получаю информацию из $(item)Талисмана/$.", - "hexcasting.page.abacus.2": "Чтобы управлять счётами, нужно держать их, присесть и использовать колесо мыши. В основной руке число будет изменяться на 1 или 10 если я удерживаю Ctrl(Command для Эпл). В другой руке число измениться на 0.1 или 0.001.$(br2)Я могу встрясти счёты чтобы вернуть их к 0 с помощью приседания+правая кнопка мыши.", - "hexcasting.page.abacus.3": "$(italic)Mathematics? That's for eggheads!/$", - - "hexcasting.entry.spellbook": "Книга заклинаний", - "hexcasting.page.spellbook.1": "A $(item)Spellbook/$ is the culmination of my art-- it acts like an entire library of $(l:items/focus)$(item)Foci/$.$(br2)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 _Hex.", - "hexcasting.page.spellbook.2": "$(italic)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.", - - "hexcasting.entry.scroll": "Scrolls", - "hexcasting.page.scroll.1": "A $(item)Scroll/$ is a convenient method of sharing a pattern with others. I can copy a pattern onto one with $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, after which it will display in a tooltip.$(br2)I can also place them on the wall as decoration, like a Painting. Using $(item)Amethyst Dust/$ on such a scroll will have it display the stroke order.", - "hexcasting.page.scroll.2": "In addition, I can also find so-called $(item)Ancient Scrolls/$ in the dungeons and strongholds of the world. These contain the stroke order of Great Spells, powerful magicks rumored to be too powerful for the hands and minds of mortals...$(br2)If those \"mortals\" couldn't cast them, I'm not sure they deserve to know them.", - "hexcasting.page.scroll.3": "$(italic)I write upon clean white parchment with a sharp quill and the blood of my students, divining their secrets./$", - - "hexcasting.entry.slate": "Slates", - "hexcasting.page.slate.1": "$(item)Slate/$s are similar to $(l:items/scroll)$(item)Scroll/$s; I can copy a pattern to them and place them in the world to display the pattern.$(br2)However, I have read vague tales of grand assemblies of $(item)Slate/$s, used to cast great rituals more powerful than can be handled by a $(item)Посох/$.", - "hexcasting.page.slate.2": "Perhaps this knowledge will be revealed to me with time. But for now, I suppose they make a quaint piece of decor.$(br2)At the least, they can be placed on any side of a block, unlike $(item)Scroll/$s.", - "hexcasting.page.slate.3": "$(italic)This is the letter \"a.\" Learn it./$", - "hexcasting.page.slate.4": "I'm also aware of other types of $(item)Slate/$s, 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--$(br2)... I almost lost myself. Maybe I should postpone my studies of those.", - - "hexcasting.entry.hexcasting": "Hexcasting Items", - "hexcasting.page.hexcasting.1": "Although the flexibility that casting _Hexes \"on the go\" with my $(l:items/Staff)$(item)Посох/$ is quite helpful, it's a huge pain to have to wave it around repeatedly just to accomplish a common task. If I could save a common spell for later reuse, it would simplify things a lot-- and allow me to share my _Hexes with friends, too.", - "hexcasting.page.hexcasting.2": "To do this, I can craft one of three types of magic items: $(item)Cypher/$s, $(item)Trinket/$s, or $(item)Artifact/$s. All of them hold the patterns of a given _Hex inside, along with a small battery containing _media.$(br2)Simply holding one and pressing $(thing)$(k:use)/$ will cast the patterns inside, as if the holder had cast them out of a Посох, using its internal battery.", - "hexcasting.page.hexcasting.3": "Each item has its own quirks:$(br2)$(item)Cypher/$s are single-use, destroyed after the _Hex is cast;$(br2)$(item)Trinket/$s can be cast as much as the holder likes, as long as there's enough _media left, but become useless afterwards;", - "hexcasting.page.hexcasting.4": "$(item)Artifact/$s are the most powerful of all-- after their _media is depleted, they can use $(l:items/amethyst)$(item)Amethyst/$ from the holder's inventory to pay for the _Hex, just as I do when casting with a $(item)Посох/$. Of course, this also means the spell might consume their mind if there's not enough $(item)Amethyst/$.$(br2)Once I've made an empty magic item in a mundane crafting bench, I infuse the _Hex into it using (what else but) a spell appropriate to the item. $(l:patterns/spells/hexcasting)I've catalogued the patterns here./$", - "hexcasting.page.hexcasting.5": "Each infusion spell requires an entity and a list of patterns on the stack. The entity must be a _media-holding item entity (i.e. amethyst crystals, dropped on the ground); the entity is consumed and forms the battery.$(br2)Usefully, it seems that the _media in the battery is not consumed in chunks as it is when casting with a $(item)Посох/$-- rather, the _media \"melts down\" into one continuous pool. Thus, if I store a _Hex that only costs one $(item)Amethyst Dust/$'s worth of mana, a $(item)Charged Crystal/$ used as the battery will allow me to cast it 10 times.", - "hexcasting.page.hexcasting.6": "$(italic)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./$", - - "hexcasting.entry.phials": "Phials of Media", - "hexcasting.page.phials.1": "I find it quite ... irritating, how Nature refuses to give me change for my work. If all I have on hand is $(item)Charged Crystal/$s, even the tiniest $(action)Archer's Purification/$ will consume the entire crystal, wasting the remaining _media.$(br2)Fortunately, it seems I've found a way somewhat allay this problem.", - "hexcasting.page.phials.2": "I've found old scrolls describing a $(item)Glass Bottle/$ infused with _media. When casting _Hexes, my spells would then draw _media out of the phial. The liquid form of the _media would let me take exact change, so to speak; nothing would be wasted. It's quite like the internal battery of a $(item)Trinket/$, or similar; I can even $(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)Recharge/$ them in the same manner.", - "hexcasting.page.phials.3": "Unfortunately, the art of actually $(italic)making/$ the things seems to have been lost to time. I've found a hint at the pattern used to craft it, 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 _media...$(br2)But I won't settle for it forever.", - "hexcasting.page.phials.4": "$(italic)Drink the milk./$", - - "hexcasting.entry.dyes": "Оттенки", - "hexcasting.page.dyes.1": "Оттенки позволяют менять цвет моей магии, круто!", - - "hexcasting.page.dyes.2": "Чтобы использовать оттенок, нужно держать его в другой рука пока я исполняю $(l:patterns/spells/colorize)$(action)Использовать оттенок/$, оттенок будет поглощён.", - "hexcasting.page.оттенокs.3.header": "Необычные оттенки", - "hexcasting.page.оттенокs.3": "Оттенки всех цветов радуги.", - "hexcasting.page.оттенокs.4": "Оттенок полностью уникальный для каждого.", - - "hexcasting.entry.decoration": "Декорации", - "hexcasting.page.decoration.1": "За время моего обучения я открыл некоторые строительные блоки и вещи, которые я нахожу подходящими для декорирования. Ниже я описал способы их создания.", - "hexcasting.page.decoration.2": "Коричневый краситель может использоваться чтобы симулировать вид древнего свитка.", - "hexcasting.page.decoration.3": "$(item)Аметистовая плитка/$s может быть создана в камнерезе.$(br2)$(item)Аметистовый песок/$ - из него нельзя сделать стекло.", - "hexcasting.page.decoration.4": "$(item)Аметистовые свечи/$s издают свет и частицы, а также приятный, успокаивающий звук.", - - - "_comment": "The Work", - - "hexcasting.entry.the_work": "The Work", - "hexcasting.page.the_work.1": "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.", - "hexcasting.page.the_work.2": "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 $(italic)ache/$. I'm possessed by an intense $(italic)need/$ 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)All shall see.$(p)All will see.", - - "hexcasting.entry.brainsweeping": "On the Flaying of Minds", - "hexcasting.page.brainsweeping.1": "A secret was revealed to me. I saw it. I cannot forget its horror. The idea skitters across my brain.$(br2)I belived-- oh, foolishly, I $(italic)believed/$ --that _Media is the spare energy left over by thought. But now I $(italic)know/$ what it is: the energy $(italic)of/$ thought.", - "hexcasting.page.brainsweeping.2": "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$(br2)I am not holding on. My notes. Quickly.", - "hexcasting.page.brainsweeping.3": "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.$(br2)This is what $(l:patterns/great_spells/brainsweep)$(action)Flay Mind/$ does, the extraction. Target the villager entity and the destination block. Ten $(item)Charged Crystals/$ for this perversion of will.", - "hexcasting.page.brainsweeping.4": "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 _media.", - - "hexcasting.entry.spellcircles": "Spell Circles", - "hexcasting.page.spellcircles.1": "I KNOW what the $(item)slates/$ 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.", - "hexcasting.page.spellcircles.2": "To start the ritual I need an $(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(item)slate/$s or other blocks suitable for the energies, one by one, collecting any patterns it finds. Once the wave circles back around to the $(item)Impetus/$, all the patterns encountered are cast in order.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.", - "hexcasting.page.spellcircles.3": "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.", - "hexcasting.page.spellcircles.4": "Miracle of miracles, the circle will withdraw _media neither from my inventory nor my mind. Instead, crystallized shards of _media must be provided to the $(item)Impetus/$ via hopper, or other such artifice.$(br2)The application of a $(item)Scrying Lens/$ will show how much _media is inside an $(item)Impetus/$, in units of dust.", - "hexcasting.page.spellcircles.5": "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).", - "hexcasting.page.spellcircles.6": "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.$(br2)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 $(l:patterns/circle)here/$.", - "hexcasting.page.spellcircles.7": "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.$(br2)The patterns there would have been executed counter-clockwise, starting with $(action)Mind's Reflection/$ and ending with $(action)Greater Teleport/$.", - "hexcasting.page.spellcircles.8.title": "Teleportation Circle", - - "hexcasting.entry.impetus": "Impetuses", - "hexcasting.page.impetus.1": "The fluctuation of _media required to actuate a spell circle is complex. Even the mortal with sharpest eyes and steadiest hands could not serve as an $(item)Impetus/$ and weave _media into the self-sustaining ourobouros required.$(br2)The problem is that the mind is too full of other useless $(italics)garbage/$.", - "hexcasting.page.impetus.2": "At a ... metaphysical level-- I must be careful with these thoughts, I cannot lose myself, I have become too valuable --moving _media moves the mind, and the mind must be moved for the process to work. But, the mind is simply too $(italic)heavy/$ with other thoughts to move nimbly enough.$(br2)It is like an artisan trying to repair a watch while wearing mittens.", - "hexcasting.page.impetus.3": "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.$(br2)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.", - "hexcasting.page.impetus.4": "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 _media-manipulating apparati, cauterize all inputs but the signal to start its work.$(br2)The process of $(action)mindflaying/$ 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.", - "hexcasting.page.impetus.5": "First, the cradle. Although it does not work as an $(item)Impetus/$, the flow of _media 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.", - "hexcasting.page.impetus.6": "Then, to transpose the mind. Villagers of different professions will lend different actuation conditions to the resulting $(item)Impetus/$. A Toolsmith's activates on a simple $(k:use).", - "hexcasting.page.impetus.7": "A Cleric Impetus must be bound to a player by using an item with a reference to that player, like a $(item)Focus/$, on the block. Then, it activates when receiving a redstone signal.$(br2)", - "hexcasting.page.impetus.8": "Peculiarly to this Impetus, 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.$(br2)The bound player is shown when looking at a Cleric Impetus through a $(item)Scrying Lens/$.", - "hexcasting.page.impetus.9": "A Fletcher Impetus activates when looked at for a short time.", - - "hexcasting.entry.directrix": "Directrices", - "hexcasting.page.directrix.1": "Simpler than the task of creating a self-sustaining wave of _media 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.$(br2)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.", - "hexcasting.page.directrix.2": "A Directrix accepts a wave of _media and determines to which of the arrows it will exit from, depending on the villager mind inside.$(br2)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", - "hexcasting.page.directrix.3": "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 _media wave and surroundings, making it effectively random.", - "hexcasting.page.directrix.4": "A Mason Directrix switches output side based on a redstone signal. Without a signal, the exit is the _media-color side; with a signal, the exit is the redstone-color side.", - - "_comment": "Руны", - - "hexcasting.entry.readers_guide": "Как читать эту секцию", - "hexcasting.page.readers_guide.1": "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.$(br2)If an action is cast by multiple patterns, as is the case with some, I'll write them all side-by-side.", - "hexcasting.page.readers_guide.2": "For a few patterns, however, I was $(italic)not/$ 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.$(br2)In such cases I just draw the pattern without any information on the order to draw it in.", - "hexcasting.page.readers_guide.3": "I also write the types of iota that the action will consume or modify, a \"\u2192\", and the types of iota the action will create.$(p)For example, \"$(n)vector, number/$ \u2192 $(n)vector/$\" 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.)", - "hexcasting.page.readers_guide.4": "\"\u2192 $(n)entity/$\" means it'll just push an entity. \"$(n)entity, vector/$ \u2192\" means it removes an entity and a vector, and doesn't push anything.$(br2)Finally, if I find the little dot marking the stroke order too slow or confusing, I can press $(thing)Control/Command/$ 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!", - - "hexcasting.entry.basics_pattern": "Простые руны", - "hexcasting.page.basics_pattern.1": "Добавляет меня в стэк.", - "hexcasting.page.basics_pattern.2": "Превращает сущность в её позицию на верху стэка.", - "hexcasting.page.basics_pattern.3": "Превращает сущность в её направление взгляда на верху стэка.", - "hexcasting.page.basics_pattern.4": "Выводит верх стэка в чат.", - "hexcasting.page.basics_pattern.5": "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?", - "hexcasting.page.basics_pattern.6": "For example, casting this with my own position and look vectors will return the coordinates of the block I am looking at.$(br2)If it doesn't hit anything, the vectors will combine into Null.", - "hexcasting.page.basics_pattern.7": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation$(/l), but instead returns a vector representing the answer to the question: Which $(italic)side/$ of the block am I looking at?", - "hexcasting.page.basics_pattern.8": "More specifically, it returns the $(italic)normal vector/$ of the face hit, or a vector with length 1 pointing perpendicular to the face.$(li)If I am looking at a floor, it will return (0, 1, 0).$(li)If I am looking at the south face of a block, it will return (0, 0, 1).$(br)", - "hexcasting.page.basics_pattern.9": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation$(/l), but instead returns the $(italic)entity/$ I am looking at.", - - "hexcasting.entry.numbers": "Числа в рунах", - "hexcasting.page.numbers.1.header": "Написание числа", - "hexcasting.page.numbers.1": "Нет какого-то простейшего способа писать числа. Этот метод в теории является рабочим для любого числа и единственное ограничение - размер сетки.", - "hexcasting.page.numbers.2": "Сначала я пишу одну из двух вариаций руны показанной на следующей странице. Далее $(italic)угол/$ следующих линий будет изменять счётчик, который начинается с 0.$(li)Вперёд: Добавить 1$(li)Влево: Добавить 5$(li)Вправо: Добавить 10$(li)Ещё левее: Умножить на 2$(li)Ещё правее: Делить на 2.$(br)Развернутая руна на правой части страницы используется для отрицательных чисел.$(p) Как только руна написана число добавляется вверх стэка.", - "hexcasting.page.numbers.example.10.header": "Пример 1", - "hexcasting.page.numbers.example.10": "Руна для 10.", - "hexcasting.page.numbers.example.7.header": "Пример 2", - "hexcasting.page.numbers.example.7": "Руна для 7: 5 + 1 + 1.", - "hexcasting.page.numbers.example.-32.header": "Пример 3", - "hexcasting.page.numbers.example.-32": "Руна для -32: - ( 1 + 5 + 10 * 2 ).", - "hexcasting.page.numbers.example.4.5.header": "Пример 4", - "hexcasting.page.numbers.example.4.5": "Руна для 4.5: 5 / 2 + 1 + 1.", - "hexcasting.page.numbers.3": "Некоторые, для которых это сложно используют $(l:items/abacus)$(item)Счёты/$", - - "hexcasting.entry.math": "Матем. операции", - "hexcasting.page.math.numvec": "Множество рун для математических операций для векторов и чисел. Аргументы написаны как \"num/vec\".", - "hexcasting.page.math.add.1": "Выполнить сложение.", - "hexcasting.page.math.add.2": "$(li)Вынимает два числа из верха стэка, складывает и вставляет результат на верх стэка.$(li)С числом и вектором вынимает число с верха стэка и добавляет его в каждый элемент направления.$(li)С двумя направлениями вынимает их из стэка и складывает, после чего новое вектором вставляется вверх стэка ([1, 2, 3] + [0, 4, -1] = [1, 6, 2]).", - "hexcasting.page.math.sub.1": "Выполнить вычитание.", - "hexcasting.page.math.sub.2": "$(li)Вынимает два числа из верха стэка, вычитает и вставляет результат на верх стэка.$(li)С числом и вектором вынимает число с верха стэка и вычитает его из каждого элемента направления.$(li)С двумя направлениями вынимает их из стэка и вычитает, после чего новое вектором вставляется вверх стэка$(br2)Во всех случаях верх стэка вычитается $(italic)из второго числа в стэке/$.", - "hexcasting.page.math.mul_dot.1": "Выполнить умножение.", - "hexcasting.page.math.mul_dot.2": "$(li)With two numbers, combines them into their product.$(li)With a number and a vector, removes the number from the stack and multiplies each component of the vector by that number.$(li)With two vectors, combines them into their $(l:https://www.mathsisfun.com/algebra/vectors-dot-product.html)dot product/$.", - "hexcasting.page.math.div_cross.1": "Деление или пересечение векторов.", - "hexcasting.page.math.div_cross.2": "$(li)Деление двух чисел.$(li)С числом и вектором, убирает число и делит его на каждый элемент вектора.$(li)С двумя векторами ищет их $(l:https://www.mathsisfun.com/algebra/vectors-cross-product.html)пересечение/$.WARNING: Не дели на ноль!!!", - "hexcasting.page.math.abs_len.1": "Посчитать abs(num) или длину вектора", - "hexcasting.page.math.abs_len.2": "Высчитывает абсолютное значение числа или длину вектора", - "hexcasting.page.math.pow_proj.1": "Посчитать pow(num, num) или vector projection.", - "hexcasting.page.math.pow_proj.2": "$(li)With two numbers, combines them by raising the first to the power of the second.$(li)With a number and a vector, removes the number and raises each component of the vector to the number's power.$(li)With two vectors, combines them into the $(l:https://en.wikipedia.org/wiki/Vector_projection)vector projection/$ of the top of the stack onto the second-from-the-top.$(br2)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.", - "hexcasting.page.math.floor": "Убирает дробную часть числа, 4.5 -> 4", - "hexcasting.page.math.ceil": "Добивает число до потолка, 4.5 -> 5", - "hexcasting.page.math.construct_vec": "Объединяет 3 числа на верху стэка в вектор XYZ (сверху вниз).", - "hexcasting.page.math.deconstruct_vec": "Делит вектор на компоненты X, Y, Z сверху вниз.", - "hexcasting.page.math.coerce_axial": "Скругляет вектор до ближайших значений.", - "hexcasting.page.math.random": "Случайное число от 0 до 1.", - - "hexcasting.entry.advanced_math": "Продвинутая математика", - "hexcasting.page.advanced_math.sin": "Синус угла в радианах. Выражается в $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "hexcasting.page.advanced_math.cos": "Косинус угла в радианах. Выражается в $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ и $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "hexcasting.page.advanced_math.tan": "Тангенс угла в радианах. Выражается в $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "hexcasting.page.advanced_math.arcsin": "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "hexcasting.page.advanced_math.arccos": "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 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "hexcasting.page.advanced_math.arctan": "Takes the inverse tangent of a value, yielding the angle whose tangent is that value. Related to the values of $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ and $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$.", - "hexcasting.page.advanced_math.logarithm": "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 $(l:patterns/consts#hexcasting:const/double/e)$(thing)$(italic)e/$.", - - "hexcasting.entry.sets": "Множество", - "hexcasting.page.sets.numlist": "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\".$(br2)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\".", - "hexcasting.page.sets.or.1": "Unifies two sets.", - "hexcasting.page.sets.or.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit in either bitset.$(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 $(l:patterns/lists#hexcasting:concat)$(action)Combination Distillation/$.", - "hexcasting.page.sets.and.1": "Takes the intersection of two sets.", - "hexcasting.page.sets.and.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit present in $(italics)both/$ bitsets.$(li)With two lists, this creates a list of every element from the first list that is also in the second list.", - "hexcasting.page.sets.xor.1": "Takes the exclusive disjunction of two sets.", - "hexcasting.page.sets.xor.2": "As such:$(li)With two numbers at the top of the stack, combines them into a bitset containing every \"on\" bit present in $(italics)exactly one/$ of the bitsets.$(li)With two lists, this creates a list of every element in both lists that is $(italics)not/$ in the other list.", - "hexcasting.page.sets.not": "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.", - "hexcasting.page.sets.to_set": "Removes duplicate entries from a list.", - - "hexcasting.entry.consts": "Константы", - "hexcasting.page.consts.1": "(1, 0, 0) или (-1, 0, 0).", - "hexcasting.page.consts.2": "(0, 1, 0) или (0, -1, 0).", - "hexcasting.page.consts.3": "(0, 0, 1) или (0, 0, -1).", - "hexcasting.page.consts.4": "Вставляет вектор (0, 0, 0) на верх стэка.", - "hexcasting.page.consts.5": "Вставляет NULL абстракцию на верх стэка.", - - "hexcasting.entry.stackmanip": "Управление стэком", - "hexcasting.page.stackmanip.del": "Просто убирает верх стэка.", - "hexcasting.page.stackmanip.duplicate": "Дублирует верх стэка.", - "hexcasting.page.stackmanip.splat": "Убирает очередь с верха стэка и добавляет его элементы отдельно на верх стэка.", - "hexcasting.page.stackmanip.swap": "Меняет местами 2 верхние части стэка.", - "hexcasting.page.stackmanip.stack_len": "Добавляет на верх стэка длину стэка. ([0, 1] -> [0, 1, 2])", - "hexcasting.page.stackmanip.last_n_list": "Убирает $(italic)n'ное/$ кол-во элементов из стэка, а потом добавляет их в очередь на верху стэка.", - "hexcasting.page.stackmanip.fisherman": "Захватывает n'ый элемент со стэка и приводит к верху стэка.", - "hexcasting.page.stackmanip.mask.header": "Bookkeeper's Gambits", - "hexcasting.page.stackmanip.mask.1": "An infinite family of actions that keep or remove elements at the top of the stack based on the sequence of dips and lines.", - "hexcasting.page.stackmanip.mask.2": "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.$(br2)If my stack contains $(italic)0, 1, 2/$ from deepest to shallowest, drawing the first pattern opposite will give me $(italic)1/$, the second will give me $(italic)0/$, and the third will give me $(italic)0, 2/$ (the 0 at the bottom is left untouched).", - "hexcasting.page.stackmanip.swizzle.1": "Rearranges the top elements of the stack based on the given numerical code, which is the index of the permutation wanted.", - "hexcasting.page.stackmanip.swizzle.2": "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.$(br2)If I wish to do further study, the key word is \"Lehmer Code.\"", - "hexcasting.page.stackmanip.swizzle.link": "Table of Codes", - - "hexcasting.entry.logic": "Логические операторы", - "hexcasting.page.logic.greater": "arg1 > arg2 -> return 1 else 0", - "hexcasting.page.logic.less": "arg1 < arg2 -> return 1 else 0", - "hexcasting.page.logic.greater_eq": "arg1 >= arg2 -> return 1 else 0", - "hexcasting.page.logic.less_eq": "arg1 <= arg2 -> return 1 else 0", - "hexcasting.page.logic.equals": "arg1 == arg2 -> return 1 else 0", - "hexcasting.page.logic.not_equals": "arg1 != arg2 -> return 1 else 0", - "hexcasting.page.logic.not": "arg == 0 or Null -> return 1 else 0", - "hexcasting.page.logic.identity": "arg == 0 -> return Null arg == Null -> return 0 else arg", - "hexcasting.page.logic.or": "arg1 != Null -> return arg1 else arg2", - "hexcasting.page.logic.and": "arg1 == Null -> return Null else arg2", - "hexcasting.page.logic.xor": "xor(arg1, arg2) -> non-Null else Null", - - "hexcasting.entry.entities": "Сущности", - "hexcasting.page.entities.get_entity": "Сущность на этом месте или null.", - "hexcasting.page.entities.get_entity/animal": "Животное на этом месте или null.", - "hexcasting.page.entities.get_entity/monster": "Монстр на этом месте или null.", - "hexcasting.page.entities.get_entity/item": "Предмет на этом месте или null.", - "hexcasting.page.entities.get_entity/player": "Игрок на этом месте или null.", - "hexcasting.page.entities.get_entity/living": "Живое существо на этом месте или null.", - "hexcasting.page.entities.zone_entity/animal": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь животных около позиции.", - "hexcasting.page.entities.zone_entity/not_animal": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь не животных около позиции.", - "hexcasting.page.entities.zone_entity/monster": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь монстров около позиции.", - "hexcasting.page.entities.zone_entity/not_monster": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь не монстров около позиции.", - "hexcasting.page.entities.zone_entity/item": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь предметов около позиции.", - "hexcasting.page.entities.zone_entity/not_item": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь не предметов около позиции.", - "hexcasting.page.entities.zone_entity/player": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь игроков около позиции.", - "hexcasting.page.entities.zone_entity/not_player": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь не игроков около позиции.", - "hexcasting.page.entities.zone_entity/living": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь живых существ около позиции.", - "hexcasting.page.entities.zone_entity/not_living": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь не живых существ около позиции.", - "hexcasting.page.entities.zone_entity": "$(br)Берет позицию и максимальную дистанцию со стэка и возвращает очередь существ около позиции.", - - "hexcasting.entry.lists": "Очереди", - "hexcasting.page.lists.1": "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 Null if the number is out of bounds.", - "hexcasting.page.lists.2": "Remove the top of the stack, then add it to the end of the list at the top of the stack.", - "hexcasting.page.lists.3": "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.", - "hexcasting.page.lists.4": "Push an empty list to the top of the stack.", - "hexcasting.page.lists.5": "Remove the top of the stack, then push a list containing only that element.", - "hexcasting.page.lists.6": "Remove num elements from the stack, then add them to a list at the top of the stack.", - "hexcasting.page.lists.7": "Remove the list at the top of the stack, then push the number of elements in the list to the stack.", - "hexcasting.page.lists.8": "Reverse the list at the top of the stack.", - - "hexcasting.entry.patterns_as_iotas": "Очереди из рун", - "hexcasting.page.patterns_as_iotas.1": "One of the many peculiarities of this art is that $(italic)patterns themselves/$ can act as iotas-- I can even put them onto my stack when casting.$(br2)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.", - "hexcasting.page.patterns_as_iotas.2": "Fortunately, Nature has provided me with a set of $(l:casting/influences)influences/$ that I can use to work with patterns directly.$(br2)In short, $(action)Consideration/$ lets me add one pattern to the stack, and $(action)Introspection/$ and $(action)Retrospection/$ let me add a whole list.", - "hexcasting.page.patterns_as_iotas.3": "To use $(action)Consideration/$, I draw it, then another arbitrary pattern. That second pattern is added to the stack.", - "hexcasting.page.patterns_as_iotas.4": "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.$(br2)The usual use for this is to copy the pattern to a $(l:items/scroll)$(item)Scroll/$ or $(l:items/slate)$(item)Slate/$ using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, and then perhaps decorating with them.", - "hexcasting.page.patterns_as_iotas.5": "Drawing $(action)Introspection/$ makes my drawing of patterns act differently, for a time. Until I draw $(action)Retrospection/$, the patterns I draw are saved. Then, when I draw $(action)Retrospection/$, they are added to the stack as a list iota.", - "hexcasting.page.patterns_as_iotas.6": "If I draw another $(action)Introspection/$, it'll still be saved to the list, but I'll then have to draw $(italic)two/$ $(action)Retrospection/$s to get back to normal casting.", - "hexcasting.page.patterns_as_iotas.7": "Also, I can escape the special behavior of $(action)Intro-/$ and $(action)Retrospection/$ by drawing a $(action)Consideration/$ before them, which will simply add them to the list without affecting which the number of Retrospections I need to return to casting.$(br2)If I draw two $(action)Consideration/$s in a row while introspecting, it will add a single $(action)Consideration/$ to the list.", - - "hexcasting.entry.readwrite": "Чтение и запись", - "hexcasting.page.readwrite.read": "Скопировать информацию из предмета (к примеру $(l:items/focus)$(item)Талисман/$, $(l:items/abacus)$(item)Счёты/$ или $(l:items/spellbook)$(item)Книга знаний/$) в моей другой руке, и добавить на верх стэка.", - "hexcasting.page.readwrite.readable": "Если прочесть информацию из другой руки можно - вернёт 1, нет - 0.", - "hexcasting.page.readwrite.read/entity": "Типо $(action)/$, но информация читается из сущности предмета.", - "hexcasting.page.readwrite.write.1": "Убирает верх стэка и записывает его в предмет в моей другой руке.", - "hexcasting.page.readwrite.write.2": "Можно записать информацию в (не закрытый) $(l:items/focus)$(item)Талисман/$ или $(l:items/spellbook)$(item)Книгу знаний/$, или я могу записать руну на $(l:items/scroll)$(item)Свиток/$s или $(l:items/slate)$(item)Плиту/$s с помощью $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Лямбда-выражение/$.$(br2)Сохранить сущность игрока невозможно, только меня. Чтобы иметь ссылку на игрока нужно чтобы он самостоятельно добавился в $(item)Талисман/$.", - "hexcasting.page.readwrite.writable": "Если сохранить информацию можно - возвращает 1 если нет - 0.", - - - "hexcasting.entry.meta": "Работа с очередями рун", - "hexcasting.page.meta.eval.1": "Убирает очередь рун со стэка и поочерёдно их использует.$(br)Cтоит около одного $(item)Осколка Аметиста/$.", - "hexcasting.page.meta.2": "This can be $(italic)very/$ powerful in tandem with $(l:items/focus)$(item)Foci/$.$(br2)It also makes the bureaucracy of Nature a \"Turing-complete\" system, according to one esoteric scroll I found.$(br2)However, it seems there's a limit to how many times a _Hex can cast itself-- Nature doesn't look kindly on runaway spells!$(br2)In addition, with the energies of the patterns occuring without me to guide them, any mishap will cause the remaining actions to become too unstable and immediately unravel.", - "hexcasting.page.meta.3": "Remove a list of patterns and a list from the stack, then cast the given pattern over each element of the second list.$(br)Costs about one $(item)Charged Amethyst/$.", - "hexcasting.page.meta.4": "More specifically, for each element in the second list, it will:$(li)Create a new stack, with everything on the current stack plus that element$(li)Draw all the patterns in the first list$(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.$(br2)No wonder all the practitioners of this art go mad.", - - "hexcasting.entry.circle_patterns": "Spell Circle Patterns", - "hexcasting.page.circle_patterns.1": "These patterns must be cast from a $(item)Spell Circle/$; trying to cast them through a $(item)Посох/$ will fail.", - "hexcasting.page.circle_patterns.2": "Returns the position of the $(item)Impetus/$ of this spell circle.", - "hexcasting.page.circle_patterns.3": "Returns the direction the $(item)Impetus/$ of this spell circle is facing as a unit vector.", - "hexcasting.page.circle_patterns.4": "Returns the position of the lower-north-west corner of the bounds of this spell circle.", - "hexcasting.page.circle_patterns.5": "Returns the position of the upper-south-east corner of the bounds of this spell circle.", - - "_comment": "Продвинутые руны", - - "hexcasting.entry.itempicking": "Работа с предметами", - "hexcasting.page.itempicking.1": "Некоторые руны, такие как $(l:hexcasting:patterns/spells/blockworks#OpPlaceBlock)$(action)Поставить блок/$, потребляют дополнительные предметы из инвентаря. Руна ищёт предмет для использования.", - "hexcasting.page.itempicking.2": "$(li)Сначала, руна ищёт первый подходящий предмет в хотбаре около $(italic)Посоха/$.$(li)Во вторых, руна использует $(italic)самый далёкий предмет из инвентаря/$.", - "hexcasting.page.itempicking.3": "Так можно выбрать какой предмет какое заклинание будет использовать.", - - "hexcasting.entry.basic_spell": "Продвинутые руны", - "hexcasting.page.basic_spell.explode.1": "Создает взрыв на месте вектора с силой данного числа.", - "hexcasting.page.basic_spell.explode.2": "Сила 3 как взрыв крипера; 4 как ТНТ. Больше 10 нельзя.$(br2)Стоит 1 $(item)Аметистовый осколок/$, и ещё $(item)Аметистовый осколок/$ за каждую единицу силы взрыва.", - "hexcasting.page.basic_spell.explode.fire.1": "Создаёт огненный взрыв на данных координатах с данной силой.", - "hexcasting.page.basic_spell.explode.fire.2": "Стоит 3 $(item)Осколка аметиста/$, и ещё один за каждую единицу силы взрыва.", - "hexcasting.page.basic_spell.add_motion": "Даёт импульс данному существу в данном направлении, сила обозначается длиной вектора.$(br)Стоит количество $(item)Aметистовой пыли/$ равное квадрату длины вектора.", - "hexcasting.page.basic_spell.blink": "Телепортирует существо по направлению её взгляда на данную длину.$(br)Стоит 1 $(item)Аметистовый осколок/$ за каждый блок.", - "hexcasting.page.basic_spell.beep.1": "Требует вектор и 2 числа. Проигрывает $(thing)инструмент/$ основанный на первом числе на указаной позиции, с $(thing)нотой/$ основанной на втором числе. Стоит малое количество мысли.", - "hexcasting.page.basic_spell.beep.2": "Существует 16 различных $(thing)инструментов/$ и 25 различных $(thing)нот/$. Отсчёт начинается с нуля.$(br2)Это те же самые инструменты, которые может воспроизвести $(item)нотный блок/$.$(br2)Узнать числа разных инструментов можно используя линзу прозрения на $(item)нотном блоке/$.", - - "hexcasting.entry.blockworks": "Работа с блоками", - "hexcasting.page.blockworks.1": "Ставит блок на данные координаты.$(br)Стоит около 1 $(item)Аметистовой пыли/$.", - "hexcasting.page.blockworks.2": "Ломает блок на данных координатах. Можно сломать всё, что алмазная кирка может сломать.$(br)Стоит около 3 $(item)Аметистовой пыли/$s.", - "hexcasting.page.blockworks.3": "Из ниоткуда ставит блок воды на данные координаты. Стоит около 1 $(item)Аметистовой пыли/$.", - "hexcasting.page.blockworks.4": "Убирает жидкость на данных координатах. Стоит около 2 $(item)Осколков аметиста/$s.", - "hexcasting.page.blockworks.5": "Создаёт магический барьер на данных координатах, который издаёт частицы моего цвета. Стоит около 1 $(item)Аметистовой пыли/$.", - "hexcasting.page.blockworks.6": "Создаёт магический свет на данных коориднатах, который светится и издаёт частицы моего цвета. Стоит около 1 $(item)Аметистовой пыли/$.", - "hexcasting.page.blockworks.7": "Удобряет растение на данных координатах, как $(item)Костная мука/$. Стоит около 1 $(item)Аметистовой пыли/$.", - "hexcasting.page.blockworks.8": "Поджигает блок на данных координатах, как $(item)Огненный заряд/$. Стоит около 1 $(item)Аметистовой пыли/$.", - "hexcasting.page.blockworks.9": "Устраивает большой поджог на данных координатах. Стоит около 2 $(item)Аметистовых осколков/$.", - - "hexcasting.entry.nadirs": "Негативные зелья", - "hexcasting.page.nadirs.1": "Они берут сущность и 2 или 1 число, первое - длительность, второе - уровень(от 1).$(br2)Каждый имеет обычную стоимость, она будет умножаться на уровень зелья .", - "hexcasting.page.nadirs.2": "According to certain legends, these spells and their sisters, the $(l:patterns/great_spells/zeniths)$(action)Положительные зелья/$, 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...\"$(br2)Perhaps that is the reason for their peculiar names.", - "hexcasting.page.nadirs.3": "Даёт слабость. Обычная стоимость 1 $(item)Аметистовая пыль/$ за 10 секунд.", - "hexcasting.page.nadirs.4": "Даёт левитацию. Обычная стоимость 1 $(item)Amethyst Dust/$ за 5 секунд.", - "hexcasting.page.nadirs.5": "Даёт иссушение. Обычная стоимость 1 $(item)Amethyst Dust/$ за секунду.", - "hexcasting.page.nadirs.6": "Даёт отравление. Обычная стоимость 1 $(item)Amethyst Dust/$ за 3 секунд.", - "hexcasting.page.nadirs.7": "Даёт медлительность. Обычная стоимость 1 $(item)Amethyst Dust/$ за 5 секунд.", - - "hexcasting.entry.hexcasting_spell": "Обработка магических предметов", - "hexcasting.page.hexcasting_spell.1": "Все эти 3 руны используются для исполнения рунных заклинаний.$(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 $(item)Amethyst/$ to form the item's battery.$(br2)See $(l:items/hexcasting)this entry/$ for more information.", - "hexcasting.page.hexcasting_spell.2": "Стоит около 1 $(item)Заряженных осколков аметиста/$.", - "hexcasting.page.hexcasting_spell.3": "Стоит около 5 $(item)Заряженных осколков аметиста/$s.", - "hexcasting.page.hexcasting_spell.4": "Стоит около 10 $(item)Заряженных осколков аметиста/$s.", - "hexcasting.page.hexcasting_spell.5": "Перезарядить контейнер мыслей в моей другой руке. Стоит около 1 $(item)Заряженного осколка аметиста/$.", - "hexcasting.page.hexcasting_spell.6": "Также необходима сущность вида предмета, содержащего чистые мысли. Нельзя зарядить предмет сверх нормы, данной при первом создании.", - "hexcasting.page.hexcasting_spell.7": "Очищает предмет в моей другой руке. Стоит около 1 $(item)Аметистовой пыли/$.", - "hexcasting.page.hexcasting_spell.8": "Хранилище мыслей будет опустошено, полностью. Так можно исправить к примеру $(item)Штуковины/$s с ошибками.", - - "hexcasting.entry.sentinels": "Метки", - "hexcasting.page.sentinels.1": "$(italic)Hence, away! Now all is well,$(br)One aloof stand sentinel./$$(br2)A $(thing)Sentinel/$ is a mysterious force I can summon to assist in the casting of _Hexes, like a familiar or guardian spirit. It appears as a spinning geometric shape to my eyes, but is invisible to everyone else.", - "hexcasting.page.sentinels.2": "It has several interesting properties:$(li)It does not appear to be tangible; no one else can interact with it.$(li)Once summoned, it stays in place until banished.$(li)I am always able to see it, even through solid objects.", - "hexcasting.page.sentinels.3": "Summon my sentinel at the given position. Costs about 1 $(item)Amethyst Dust/$.", - "hexcasting.page.sentinels.4": "Banish my sentinel, and remove it from the world. Costs a negligible amount of _media.", - "hexcasting.page.sentinels.5": "Add the position of my sentinel to the stack, or Null if it isn't summoned. Costs a negligible amount of _media.", - "hexcasting.page.sentinels.6": "Transform the position vector on the top of the stack into a unit vector pointing from that position to my sentinel, or Null if it isn't summoned. Costs a negligible amount of _media.", - - "hexcasting.page.colorize.1": "Я должен держать $(item)оттенок/$ в моей другой руке чтобы исполнить заклинание. После исполнения оттенок будет поглощён и цвет моей магии поменяется (пока я не поменяю его снова). Стоит около 1 $(item)Аметистовой пыли/$.", - - "hexcasting.page.create_lava.1": "Summon a block of lava or insert a bucket's worth into a block at the given position. Costs about one $(item)Charged Amethyst/$.", - "hexcasting.page.create_lava.2": "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.$(br2)Well, no one said tracing the deep secrets of the universe was going to be an easy time.", - - "hexcasting.entry.weather_manip": "Weather Manipulation", - "hexcasting.page.weather_manip.1": "I command the heavens! This spell will summon a bolt of lightning to strike the earth where I direct it. Costs about 3 $(item)Amethyst Shard/$s.", - "hexcasting.page.weather_manip.2": "I control the clouds! This spell will summon rain across the world I cast it upon. Costs about 2 $(item)Amethyst Shard/$s. Does nothing if it is already raining.", - "hexcasting.page.weather_manip.3": "A counterpart to summoning rain. This spell will dispel rain across the world I cast it upon. Costs about 1 $(item)Amethyst Shard/$. Does nothing if the skies are already clear.", - - "hexcasting.page.flight.1": "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.", - "hexcasting.page.flight.2": "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.$(br2)It costs approximately 1 $(item)Amethyst Dust/$ multiplied by the radius, per second of flight.", - - "hexcasting.page.teleport.1": "Куда мощнее $(l:patterns/spells/basic#OpBlink)$(action)Блинка/$, это позволит мне телепортироваться на невероятные расстония, пускай ограничение и есть, но оно $(italic)куда больше/$.", - "hexcasting.page.teleport.2": "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 $(item)Charged Crystal/$s.$(br2)The transference is not perfect, and it seems when teleporting something as complex as a player, their inventory doesn't $(italic)quite/$ stay attached, and tends to splatter everywhere at the destination.", - - "hexcasting.entry.zeniths": "Zeniths", - "hexcasting.page.zeniths.1": "This family of spells all impart a positive potion effect upon an entity, similar to the $(l:patterns/spells/nadirs)$(action)Nadirs/$. However, these have their _media costs increase with the $(italic)cube/$ of the potency.", - "hexcasting.page.zeniths.2": "Bestows regeneration. Base cost is one $(item)Amethyst Dust/$ per second.", - "hexcasting.page.zeniths.3": "Bestows night vision. Base cost is one $(item)Amethyst Dust/$ per 5 seconds.", - "hexcasting.page.zeniths.4": "Bestows absorption. Base cost is one $(item)Amethyst Dust/$ per second.", - "hexcasting.page.zeniths.5": "Bestows haste. Base cost is one $(item)Amethyst Dust/$ per 3 seconds.", - "hexcasting.page.zeniths.6": "Bestows strength. Base cost is one $(item)Amethyst Dust/$ per 3 seconds.", - - "hexcasting.page.greater_sentinel.1": "Summon a greater version of my $(l:patterns/sentinels)$(thing)Sentinel/$. Costs about 2 $(item)Amethyst Dust/$s.", - "hexcasting.page.greater_sentinel.2": "The stronger sentinel 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 sentinel, about 16 blocks. In other words, no matter where in the world I am, I can interact with things around my sentinel (the mysterious forces of chunkloading notwithstanding).", - - "hexcasting.page.make_battery.1": "Infuse a bottle with _media to form a $(item)Phial./$", - "hexcasting.page.make_battery.2": "Similarly to the spells for $(l:patterns/spells/hexcasting)$(action)Crafting Hexcasting Items/$, I must hold a $(item)Glass Bottle/$ in my other hand, and provide the spell with a dropped stack of $(item)Amethyst/$. See $(l:items/phials)this page/$ for more information.$(br2)Costs about 1 $(item)Charged Amethyst Crystal/$.", - - "hexcasting.page.brainsweep_spell.1": "Я не могу узнать начало или конец этой руны... Честно говоря мне страшно узнать что оно сделает..." -} diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index c4fefc76e5..da3abb9df5 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -1,276 +1,431 @@ // A work in progress { "item.hexcasting": { - "book": "咒术笔记", + book: "咒术笔记", staff: { - "oak": "橡木法杖", - "spruce": "云杉木法杖", - "birch": "白桦木法杖", - "jungle": "丛林木法杖", - "acacia": "金合欢木法杖", - "dark_oak": "深色橡木法杖", - "crimson": "绯红木法杖", - "warped": "诡异木法杖", - "mangrove": "红树木法杖", - "edified": "启迪木法杖", - "quenched": "淬灵晶法杖", - "mindsplice": "制念法杖" + oak: "橡木法杖", + spruce: "云杉木法杖", + birch: "白桦木法杖", + jungle: "丛林木法杖", + acacia: "金合欢木法杖", + dark_oak: "深色橡木法杖", + crimson: "绯红木法杖", + warped: "诡异木法杖", + mangrove: "红树木法杖", + cherry: "樱花木法杖", + bamboo: "竹法杖", + edified: "启迪木法杖", + quenched: "淬灵晶法杖", + mindsplice: "制念法杖", }, - tags: { - "tag.item.hexcasting:brainswept_circle_components": "剥离意识环组件", - "tag.item.hexcasting:directrices": "导向石", - "tag.item.hexcasting:grants_root_advancement": "给予根进度", - "tag.item.hexcasting:impeti": "促动石", - "tag.item.hexcasting:seal_materials": "密封材料", + amethyst_dust: "紫水晶粉", + charged_amethyst: "充能紫水晶", + quenched_allay_shard: "淬灵晶碎片", + + scroll_small: { + "": "小型卷轴", + of: "是如何拿到此%s卷轴的", + empty: "空白小型卷轴", + }, + + "scroll_medium": { + "": "中型卷轴", + of: "是如何拿到此%s卷轴的", + empty: "空白中型卷轴", }, - "amethyst_dust": "紫水晶粉", - "charged_amethyst": "充能紫水晶", - "quenched_allay_shard": "淬灵晶碎片", - - "scroll_small": "小型卷轴", - "scroll_small.of": "是如何拿到此%s卷轴的", - "scroll_small.empty": "空白小型卷轴", - "scroll_medium": "中型卷轴", - "scroll_medium.of": "是如何拿到此%s卷轴的", - "scroll_medium.empty": "空白中型卷轴", - "scroll": "大型卷轴", - "scroll.of": "%s之远古卷轴", - "scroll.empty": "空白大型卷轴", - - "thought_knot": "结念绳", - "focus": "核心", - "focus.sealed": "密封核心", - "spellbook": "法术书", - "cypher": "杂件", - "trinket": "缀品", - "artifact": "造物", - "battery": "媒质之瓶", - "lens": "探知透镜", - "abacus": "算盘", - "jeweler_hammer": "珠宝匠锤", - "sub_sandwich": "潜艇三明治", - - "dye_colorizer_white": "白色染色剂", - "dye_colorizer_orange": "橙色染色剂", - "dye_colorizer_magenta": "品红色染色剂", - "dye_colorizer_light_blue": "淡蓝色染色剂", - "dye_colorizer_yellow": "黄色染色剂", - "dye_colorizer_lime": "黄绿色染色剂", - "dye_colorizer_pink": "粉红色染色剂", - "dye_colorizer_gray": "灰色染色剂", - "dye_colorizer_light_gray": "淡灰色染色剂", - "dye_colorizer_cyan": "青色染色剂", - "dye_colorizer_purple": "紫色染色剂", - "dye_colorizer_blue": "蓝色染色剂", - "dye_colorizer_brown": "棕色染色剂", - "dye_colorizer_green": "绿色染色剂", - "dye_colorizer_red": "红色染色剂", - "dye_colorizer_black": "黑色染色剂", - "pride_colorizer_agender": "无性别染色剂", - "pride_colorizer_aroace": "无浪漫倾向无性恋染色剂", - "pride_colorizer_aromantic": "无浪漫倾向染色剂", - "pride_colorizer_asexual": "无性恋染色剂", - "pride_colorizer_bisexual": "双性恋染色剂", - "pride_colorizer_demiboy": "部分男性染色剂", - "pride_colorizer_demigirl": "部分女性染色剂", - "pride_colorizer_gay": "男同性恋染色剂", - "pride_colorizer_genderfluid": "性别流体染色剂", - "pride_colorizer_genderqueer": "性别酷儿染色剂", - "pride_colorizer_intersex": "双性人染色剂", - "pride_colorizer_lesbian": "女同性恋染色剂", - "pride_colorizer_nonbinary": "非二元性别染色剂", - "pride_colorizer_pansexual": "泛性恋染色剂", - "pride_colorizer_plural": "多重人格染色剂", - "pride_colorizer_transgender": "跨性别染色剂", + scroll: { + "": "大型卷轴", + of: "%s之远古卷轴", + empty: "空白大型卷轴", + }, + + focus: { + "": "核心", + sealed: "密封核心", + }, + + thought_knot: "结念绳", + spellbook: "法术书", + cypher: "杂件", + trinket: "缀品", + artifact: "造物", + battery: "媒质之瓶", + lens: "探知透镜", + abacus: "算盘", + jeweler_hammer: "珠宝匠锤", + sub_sandwich: "潜艇三明治", + + dye_colorizer_: { + white: "白色染色剂", + orange: "橙色染色剂", + magenta: "品红色染色剂", + light_blue: "淡蓝色染色剂", + yellow: "黄色染色剂", + lime: "黄绿色染色剂", + pink: "粉红色染色剂", + gray: "灰色染色剂", + light_gray: "淡灰色染色剂", + cyan: "青色染色剂", + purple: "紫色染色剂", + blue: "蓝色染色剂", + brown: "棕色染色剂", + green: "绿色染色剂", + red: "红色染色剂", + black: "黑色染色剂", + }, + + pride_colorizer_: { + agender: "无性别染色剂", + aroace: "无浪漫倾向无性恋染色剂", + aromantic: "无浪漫倾向染色剂", + asexual: "无性恋染色剂", + bisexual: "双性恋染色剂", + demiboy: "部分男性染色剂", + demigirl: "部分女性染色剂", + gay: "男同性恋染色剂", + genderfluid: "性别流体染色剂", + genderqueer: "性别酷儿染色剂", + intersex: "双性人染色剂", + lesbian: "女同性恋染色剂", + nonbinary: "非二元性别染色剂", + pansexual: "泛性恋染色剂", + plural: "多重人格染色剂", + transgender: "跨性别染色剂", + }, + "uuid_colorizer": "灵魂闪光染色剂", "default_colorizer": "空无染色剂", - "creative_unlocker": "媒质立方", - "creative_unlocker.for_emphasis": "无限媒质", - "creative_unlocker.tooltip": "食用以解锁所有有关%s的知识。", - "creative_unlocker.mod_name": "咒法学", + creative_unlocker: { + "": "媒质立方", + for_emphasis: "无限媒质", + tooltip: "食用以解锁所有有关%s的知识。", + mod_name: "咒法学", + }, - "lore_fragment": "故事残卷", - "lore_fragment.all": "似乎我已找齐了此世界上的所有故事。", + lore_fragment: { + "": "故事残卷", + all: "似乎我已找齐了此世界上的所有故事。", + }, }, - "entity.hexcasting.wall_scroll": "壁挂卷轴", + "entity.hexcasting": { + wall_scroll: "壁挂卷轴", + }, "block.hexcasting": { - "conjured_light": "构筑的光源", - "conjured_block": "构筑的方块", - "slate": "石板", - "slate.blank": "空白石板", - "slate.written": "有图案的石板", - "directrix.empty": "空白导向石", - "directrix.redstone": "石匠导向石", - "directrix.boolean": "???导向石", - "impetus.empty": "空白促动石", - "impetus.rightclick": "工具匠促动石", - "impetus.look": "制箭师促动石", - "impetus.redstone": "牧师促动石", - "akashic_record": "阿卡夏记录", - "akashic_bookshelf": "阿卡夏书架", - "akashic_connector": "阿卡夏桥接块", - - "slate_block": "板岩块", - "slate_tiles": "板岩瓦", - "slate_bricks": "板岩砖", - "slate_bricks_small": "板岩小型砖", - "slate_pillar": "板岩柱", - "amethyst_dust_block": "紫水晶粉块", - "amethyst_tiles": "紫水晶瓦", - "amethyst_bricks": "紫水晶砖", - "amethyst_bricks_small": "紫水晶小型砖", - "amethyst_pillar": "紫水晶柱", - "slate_amethyst_tiles": "板岩紫晶瓦", - "slate_amethyst_bricks": "板岩紫晶砖", - "slate_amethyst_bricks_small": "板岩紫晶砖", - "slate_amethyst_pillar": "板岩紫晶柱", - "scroll_paper": "纸卷轴", - "ancient_scroll_paper": "远古纸卷轴", - "scroll_paper_lantern": "纸灯笼", - "ancient_scroll_paper_lantern": "远古纸灯笼", - "amethyst_sconce": "紫水晶灯台", - "edified_log": "启迪原木", - "edified_log_amethyst": "晶紫启迪原木", - "edified_log_aventurine": "砂蓝启迪原木", - "edified_log_citrine": "晶黄启迪原木", - "edified_log_purple": "紫色启迪原木", - "stripped_edified_log": "去皮启迪原木", - "edified_wood": "启迪木", - "stripped_edified_wood": "去皮启迪木", - "edified_planks": "启迪木板", - "edified_panel": "启迪木块", - "edified_tile": "启迪木方砖", - "edified_door": "启迪木门", - "edified_trapdoor": "启迪木活板门", - "edified_stairs": "启迪木楼梯", - "edified_slab": "启迪木台阶", - "edified_button": "启迪木按钮", - "edified_pressure_plate": "启迪木压力板", - "amethyst_edified_leaves": "晶紫启迪树叶", - "aventurine_edified_leaves": "砂蓝启迪树叶", - "citrine_edified_leaves": "晶黄启迪树叶", - "quenched_allay": "淬灵晶块", - "quenched_allay_tiles": "淬灵晶瓦", - "quenched_allay_bricks": "淬灵晶砖", - "quenched_allay_bricks_small": "淬灵晶小型砖", - "slate": "石板", + conjured_light: "构筑的光源", + conjured_block: "构筑的方块", + + directrix: { + empty: "空白导向石", + redstone: "石匠导向石", + boolean: "???导向石", + }, + + impetus: { + empty: "空白促动石", + rightclick: "工具匠促动石", + look: "制箭师促动石", + redstone: "牧师促动石", + }, + + akashic_: { + record: "阿卡夏记录", + bookshelf: "阿卡夏书架", + connector: "阿卡夏桥接块", + }, + + slate: { + "": "石板", + blank: "空白石板", + written: "有图案的石板", + }, + + slate_: { + block: "板岩块", + tiles: "板岩瓦", + bricks: "板岩砖", + bricks_small: "板岩小型砖", + pillar: "板岩柱", + }, + + amethyst_: { + dust_block: "紫水晶粉块", + tiles: "紫水晶瓦", + bricks: "紫水晶砖", + bricks_small: "紫水晶小型砖", + pillar: "紫水晶柱", + }, + + slate_amethyst_: { + tiles: "板岩紫晶瓦", + bricks: "板岩紫晶砖", + bricks_small: "板岩紫晶砖", + pillar: "板岩紫晶柱", + }, + + scroll_paper: "纸卷轴", + ancient_scroll_paper: "远古纸卷轴", + scroll_paper_lantern: "纸灯笼", + ancient_scroll_paper_lantern: "远古纸灯笼", + amethyst_sconce: "紫水晶灯台", + + edified_: { + log: "启迪原木", + log_amethyst: "晶紫启迪原木", + log_aventurine: "砂蓝启迪原木", + log_citrine: "晶黄启迪原木", + log_purple: "紫色启迪原木", + wood: "启迪木", + planks: "启迪木板", + panel: "启迪木块", + tile: "启迪木方砖", + door: "启迪木门", + trapdoor: "启迪木活板门", + stairs: "启迪木楼梯", + slab: "启迪木台阶", + button: "启迪木按钮", + pressure_plate: "启迪木压力板", + fence: "启迪木栅栏", + fence_gate: "启迪木栅栏门", + }, + + stripped_edified_log: "去皮启迪原木", + stripped_edified_wood: "去皮启迪木", + + amethyst_edified_leaves: "晶紫启迪树叶", + aventurine_edified_leaves: "砂蓝启迪树叶", + citrine_edified_leaves: "晶黄启迪树叶", + + quenched_allay: "淬灵晶块", + + quenched_allay_: { + tiles: "淬灵晶瓦", + bricks: "淬灵晶砖", + bricks_small: "淬灵晶小型砖", + }, + }, + + "itemGroup.hexcasting": { + "": "咒法学", + creative_tab: "咒法学", }, - "itemGroup.hexcasting": "咒法学", - "itemGroup.hexcasting.creative_tab": "咒法学", - - "gui.hexcasting.spellcasting": "咒术网格", - "tag.hexcasting.staves": "咒术法杖", - "tag.hexcasting.edified_logs": "启迪原木", - "tag.hexcasting.edified_planks": "启迪木板", - "tag.hexcasting.phial_base": "空试剂瓶", - "emi.category.hexcasting.brainsweep": "剥离意识", - "emi.category.hexcasting.craft.battery": "制作试剂瓶", - "emi.category.hexcasting.edify": "启迪树苗", - "emi.category.hexcasting.villager_leveling": "职业等级", - "emi.category.hexcasting.villager_profession": "村民职业", - - "text.autoconfig.hexcasting.title": "咒法学(Hexcasting)配置", - "text.autoconfig.hexcasting.category.common": "Common", - "text.autoconfig.hexcasting.category.client": "Client", - "text.autoconfig.hexcasting.category.server": "Server", - - "text.autoconfig.hexcasting.option.common.dustMediaAmount": "紫水晶粉媒质含量", - "text.autoconfig.hexcasting.option.common.shardMediaAmount": "紫水晶碎片媒质含量", - "text.autoconfig.hexcasting.option.common.chargedCrystalMediaAmount": "充能紫水晶媒质含量", - "text.autoconfig.hexcasting.option.common.mediaToHealthRate": "媒质与生命值交换比率", - "text.autoconfig.hexcasting.option.common.cypherCooldown": "杂件使用冷却", - "text.autoconfig.hexcasting.option.common.trinketCooldown": "缀品使用冷却", - "text.autoconfig.hexcasting.option.common.artifactCooldown": "造物使用冷却", - "text.autoconfig.hexcasting.option.common.dustMediaAmount.@Tooltip": "单个紫水晶粉所含媒质量", - "text.autoconfig.hexcasting.option.common.shardMediaAmount.@Tooltip": "单个紫水晶碎片所含媒质量", - "text.autoconfig.hexcasting.option.common.chargedCrystalMediaAmount.@Tooltip": "单个充能紫水晶所含媒质量", - "text.autoconfig.hexcasting.option.common.mediaToHealthRate.@Tooltip": "1点生命值可在施法时换算的媒质量", - "text.autoconfig.hexcasting.option.common.cypherCooldown.@Tooltip": "杂件使用冷却刻(tick)数", - "text.autoconfig.hexcasting.option.common.trinketCooldown.@Tooltip": "缀品使用冷却刻(tick)数", - "text.autoconfig.hexcasting.option.common.artifactCooldown.@Tooltip": "造物使用冷却刻(tick)数", - - "text.autoconfig.hexcasting.option.client.ctrlTogglesOffStrokeOrder": "Ctrl关闭笔顺显示", - "text.autoconfig.hexcasting.option.client.invertSpellbookScrollDirection": "反转法术书滚轮方向", - "text.autoconfig.hexcasting.option.client.invertAbacusScrollDirection": "反转算盘滚轮方向", - "text.autoconfig.hexcasting.option.client.gridSnapThreshold": "咒术网格吸附阈值", - "text.autoconfig.hexcasting.option.client.ctrlTogglesOffStrokeOrder.@Tooltip": "按下Ctrl键时*关闭*图案渐变显示,而非按下时打开", - "text.autoconfig.hexcasting.option.client.invertSpellbookScrollDirection.@Tooltip": "向上滚动滚轮(而非向下)增加法术书当前页页码,反之亦然", - "text.autoconfig.hexcasting.option.client.invertAbacusScrollDirection.@Tooltip": "向上滚动滚轮(而非向下)增加算盘计数,反之亦然", - "text.autoconfig.hexcasting.option.client.gridSnapThreshold.@Tooltip": "使用法杖时,吸附至另一点所需划过的距离,0.5意味着需划过50%(取值0.5~1)", - - "text.autoconfig.hexcasting.option.server.opBreakHarvestLevel": "破坏方块挖掘等级", - "text.autoconfig.hexcasting.option.server.maxRecurseDepth": "递归最大深度", - "text.autoconfig.hexcasting.option.server.maxSpellCircleLength": "法术环最大长度", - "text.autoconfig.hexcasting.option.server.actionDenyList": "禁用操作列表", - "text.autoconfig.hexcasting.option.server.circleActionDenyList": "法术环禁用操作列表", - "text.autoconfig.hexcasting.option.server.villagersOffendedByMindMurder": "村民会被意识剥除冒犯", - "text.autoconfig.hexcasting.option.server.scrollInjectionsRaw": "卷轴战利品权重", - "text.autoconfig.hexcasting.option.server.amethystShardModification": "紫水晶碎片掉落率变化量", - "text.autoconfig.hexcasting.option.server.opBreakHarvestLevel.@Tooltip": "破坏方块法术的挖掘等级\n0 = 木,1 = 石,2 = 铁,3 = 钻石,4 = 下界合金", - "text.autoconfig.hexcasting.option.server.maxRecurseDepth.@Tooltip": "一个操作能执行其他操作的最大次数", - "text.autoconfig.hexcasting.option.server.maxSpellCircleLength.@Tooltip": "法术环所允许含有石板的最大个数", - "text.autoconfig.hexcasting.option.server.actionDenyList.@Tooltip": "被禁用操作的资源位置;试图执行此类操作会导致事故。例如,“hexcasting:get_caster”会禁用意识之精思。", - "text.autoconfig.hexcasting.option.server.circleActionDenyList.@Tooltip": "法术环中被禁用操作的资源位置;试图执行此类操作会导致事故", - "text.autoconfig.hexcasting.option.server.villagersOffendedByMindMurder.@Tooltip": "村民是否会在其他村民被剥离意识时感到气愤", - "text.autoconfig.hexcasting.option.server.fewScrollTables.@Tooltip": "会额外生成较少数量卷轴的战利品表", - "text.autoconfig.hexcasting.option.server.someScrollTables.@Tooltip": "会额外生成中等数量卷轴的战利品表", - "text.autoconfig.hexcasting.option.server.manyScrollTables.@Tooltip": "会额外生成较大数量卷轴的战利品表", - "text.autoconfig.hexcasting.option.server.scrollInjectionsRaw.@Tooltip": "将战利品表名与卷轴生成数量期望一一对应并罗列。在下列所有战利品表中生成卷轴的概率约50%,生成时会放入1到对应期望个数的卷轴。", - "text.autoconfig.hexcasting.option.server.amethystShardModification.@Tooltip": "采掘紫水晶簇时紫水晶碎片掉落数量相较原版的改变量", + "gui.hexcasting": { + spellcasting: "咒术网格", + }, + + "tag.hexcasting": { + staves: "咒术法杖", + edified_logs: "启迪原木", + edified_planks: "启迪木板", + phial_base: "空试剂瓶", + }, + + "tag.item.hexcasting": { + brainswept_circle_components: "剥离意识环组件", + directrices: "导向石", + grants_root_advancement: "给予根进度", + impeti: "促动石", + seal_materials: "密封材料", + }, + + "emi.category.hexcasting": { + brainsweep: "剥离意识", + "craft.battery": "制作试剂瓶", + edify: "启迪树苗", + villager_leveling: "职业等级", + villager_profession: "村民职业", + }, + + "text.autoconfig.hexcasting": { + title: "咒法学(Hexcasting)配置", + + category: { + common: "Common", + client: "Client", + server: "Server", + }, + + option: { + common: { + dustMediaAmount: { + "": "紫水晶粉媒质含量", + "@Tooltip": "单个紫水晶粉所含媒质量", + }, + shardMediaAmount: { + "": "紫水晶碎片媒质含量", + "@Tooltip": "单个紫水晶碎片所含媒质量", + }, + chargedCrystalMediaAmount: { + "": "充能紫水晶媒质含量", + "@Tooltip": "单个充能紫水晶所含媒质量", + }, + mediaToHealthRate: { + "": "媒质与生命值交换比率", + "@Tooltip": "1点生命值可在施法时换算的媒质量", + }, + cypherCooldown: { + "": "杂件使用冷却", + "@Tooltip": "杂件使用冷却刻(tick)数", + }, + trinketCooldown: { + "": "缀品使用冷却", + "@Tooltip": "缀品使用冷却刻(tick)数", + }, + artifactCooldown: { + "": "造物使用冷却", + "@Tooltip": "造物使用冷却刻(tick)数", + }, + }, + + client: { + ctrlTogglesOffStrokeOrder: { + "": "Ctrl关闭笔顺显示", + "@Tooltip": "按下Ctrl键时*关闭*图案渐变显示,而非按下时打开", + }, + invertSpellbookScrollDirection: { + "": "反转法术书滚轮方向", + "@Tooltip": "向上滚动滚轮(而非向下)增加法术书当前页页码,反之亦然", + }, + invertAbacusScrollDirection: { + "": "反转算盘滚轮方向", + "@Tooltip": "向上滚动滚轮(而非向下)增加算盘计数,反之亦然", + }, + gridSnapThreshold: { + "": "咒术网格吸附阈值", + "@Tooltip": "使用法杖时,吸附至另一点所需划过的距离,0.5意味着需划过50%(取值0.5~1)", + }, + }, + + server: { + opBreakHarvestLevel: { + "": "破坏方块挖掘等级", + "@Tooltip": "破坏方块法术的挖掘等级\n0 = 木,1 = 石,2 = 铁,3 = 钻石,4 = 下界合金", + }, + maxRecurseDepth: { + "": "递归最大深度", + "@Tooltip": "一个操作能执行其他操作的最大次数", + }, + maxSpellCircleLength: { + "": "法术环最大长度", + "@Tooltip": "法术环所允许含有石板的最大个数", + }, + actionDenyList: { + "": "禁用操作列表", + "@Tooltip": "被禁用操作的资源位置;试图执行此类操作会导致事故。例如,“hexcasting:get_caster”会禁用意识之精思。", + }, + circleActionDenyList: { + "": "法术环禁用操作列表", + "@Tooltip": "法术环中被禁用操作的资源位置;试图执行此类操作会导致事故", + }, + villagersOffendedByMindMurder: { + "": "村民会被意识剥除冒犯", + "@Tooltip": "村民是否会在其他村民被剥离意识时感到气愤", + }, + scrollInjectionsRaw: { + "": "卷轴战利品权重", + "@Tooltip": "将战利品表名与卷轴生成数量期望一一对应并罗列。在下列所有战利品表中生成卷轴的概率约50%,生成时会放入1到对应期望个数的卷轴。", + }, + amethystShardModification: { + "": "紫水晶碎片掉落率变化量", + "@Tooltip": "采掘紫水晶簇时紫水晶碎片掉落数量相较原版的改变量", + }, + + // TODO: are these used anywhere?? + "option.server.fewScrollTables.@Tooltip": "会额外生成较少数量卷轴的战利品表", + "option.server.someScrollTables.@Tooltip": "会额外生成中等数量卷轴的战利品表", + "option.server.manyScrollTables.@Tooltip": "会额外生成较大数量卷轴的战利品表", + }, + }, + }, "advancement.hexcasting:" : { - "root": "咒法学研究", - "root.desc": "在地底深处找到并采集不断生长着的、凝聚的媒质", - "enlightenment": "获得启迪", - "enlightenment.desc": "施放咒术至生命将尽来击碎屏障", - "wasteful_cast": "勤俭节约……", - "wasteful_cast.desc": "施放咒术时浪费巨量媒质", - "big_cast": "……吃穿不缺", - "big_cast.desc": "耗费巨量媒质以施放一个咒术", - "y_u_no_cast_angy": "盲目绘制", - "y_u_no_cast_angy.desc": "尝试根据卷轴施放法术,然后失败", - "opened_eyes": "恍然大悟", - "opened_eyes.desc": "用你的一部分意识向自然换取一个咒术。让自然再拿些又会怎样呢?", - "lore": "咒法学故事", - "lore.desc": "阅读一份故事残卷", - "lore/cardamom1": "卡达蒙·斯蒂勒斯 #1", - "lore/cardamom1.desc": "卡达蒙·斯蒂勒斯寄给她父亲的信,#1", - "lore/cardamom2": "卡达蒙·斯蒂勒斯 #2", - "lore/cardamom2.desc": "卡达蒙·斯蒂勒斯寄给她父亲的信,#2", - "lore/cardamom3": "卡达蒙·斯蒂勒斯 #3", - "lore/cardamom3.desc": "卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第一部分", - "lore/cardamom4": "卡达蒙·斯蒂勒斯 #3,第二部分", - "lore/cardamom4.desc": "卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第二部分", - "lore/cardamom5": "卡达蒙·斯蒂勒斯 #4", - "lore/cardamom5.desc": "卡达蒙·斯蒂勒斯寄给她父亲的信,#4", - "lore/experiment1": "“毡障”实例笔记", - "lore/experiment2": "“毡障”测试日志", - "lore/inventory": "回收日志 #72", + root: { + "": "咒法学研究", + desc: "在地底深处找到并采集不断生长着的、凝聚的媒质", + }, + enlightenment: { + "": "获得启迪", + desc: "施放咒术至生命将尽来击碎屏障", + }, + wasteful_cast: { + "": "勤俭节约……", + desc: "施放咒术时浪费巨量媒质", + }, + big_cast: { + "": "……吃穿不缺", + desc: "耗费巨量媒质以施放一个咒术", + }, + y_u_no_cast_angy: { + "": "盲目绘制", + desc: "尝试根据卷轴施放法术,然后失败", + }, + opened_eyes: { + "": "恍然大悟", + desc: "用你的一部分意识向自然换取一个咒术。让自然再拿些又会怎样呢?", + }, + lore: { + "": "咒法学故事", + desc: "阅读一份故事残卷", + }, + "lore/": { + cardamom1: { + "": "卡达蒙·斯蒂勒斯 #1", + desc: "卡达蒙·斯蒂勒斯寄给她父亲的信,#1", + }, + cardamom2: { + "": "卡达蒙·斯蒂勒斯 #2", + desc: "卡达蒙·斯蒂勒斯寄给她父亲的信,#2", + }, + cardamom3: { + "": "卡达蒙·斯蒂勒斯 #3", + desc: "卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第一部分", + }, + cardamom4: { + "": "卡达蒙·斯蒂勒斯 #3,第二部分", + desc: "卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第二部分", + }, + cardamom5: { + "": "卡达蒙·斯蒂勒斯 #4", + desc: "卡达蒙·斯蒂勒斯寄给她父亲的信,#4", + }, + experiment1: "“毡障”实例笔记", + experiment2: "“毡障”测试日志", + inventory: "回收日志 #72", + }, }, - "stat.hexcasting.media_used": "消耗媒质量(以紫水晶粉计)", - "stat.hexcasting.media_overcasted": "过度施法消耗媒质量(以紫水晶粉计)", - "stat.hexcasting.patterns_drawn": "绘制图案次数", - "stat.hexcasting.spells_cast": "施放法术次数", + "stat.hexcasting": { + media_used: "消耗媒质量(以紫水晶粉计)", + media_overcasted: "过度施法消耗媒质量(以紫水晶粉计)", + patterns_drawn: "绘制图案次数", + spells_cast: "施放法术次数", + }, - "death.attack.hexcasting.overcast": "%s的意识消散为了能量", - "death.attack.hexcasting.shame": "%s真是可耻!", + "death.attack.hexcasting": { + overcast: "%s的意识消散为了能量", + shame: "%s真是可耻!", + }, "command.hexcasting": { - "pats.listing": "此世界特有的图案:", - "pats.all": "给予%s所有%d张卷轴", - "pats.specific.success": "给予%3$sID为%2$s的%1$s", - "recalc": "已重生成此世界特有图案", - "brainsweep": "已清除%s的意识", - "brainsweep.fail.badtype": "%s不是生物", - "brainsweep.fail.already": "%s早已没有了意识", + recalc: "已重生成此世界特有图案", + + pats: { + listing: "此世界特有的图案:", + all: "给予%s所有%d张卷轴", + "specific.success": "给予%3$sID为%2$s的%1$s", + }, + + brainsweep: { + "": "已清除%s的意识", + "fail.badtype": "%s不是生物", + "fail.already": "%s早已没有了意识", + }, }, hexcasting: { @@ -293,58 +448,74 @@ tooltip: { spellbook: { - "page": "所选书页 %d/%d", - "page.sealed": "所选书页 %d/%d(%s)", - "page_with_name": "所选书页 %d/%d(“%s”)", - "page_with_name.sealed": "所选书页 %d/%d(“%s”)(%s)", - "sealed": "已密封", - "empty": "空白", - "empty.sealed": "空白(%s)", + page: { + "": "所选书页 %d/%d", + sealed: "所选书页 %d/%d(%s)", + }, + page_with_name: { + "": "所选书页 %d/%d(“%s”)", + sealed: "所选书页 %d/%d(“%s”)(%s)", + }, + empty: { + "": "空白", + sealed: "空白(%s)", + }, + sealed: "已密封", }, - "abacus": "%d", - "abacus.reset": "重置为0", - "abacus.reset.nice": "nice", + abacus: { + "": "%d", + reset: "重置为0", + "reset.nice": "nice", + }, circle: { - "no_exit": "%s处的媒质流无法找到出口", - "many_exits": "%s处的媒质流的可选去路过多", + no_exit: "%s处的媒质流无法找到出口", + many_exits: "%s处的媒质流的可选去路过多", no_closure: "%s处的媒质流无法返回促动石" }, lens: { - impetus: { - "redstone.bound": "与%s绑定", - "redstone.bound.none": "未绑定", - }, "pattern.invalid": "无效图案", - "akashic.bookshelf.location": "记录于%s", - "akashic.record.count": "存有%s个iota", - "akashic.record.count.single": "存有%s个iota", - "bee": "%s只蜜蜂", - "bee.single": "%s只蜜蜂", + bee: { + "": "%s只蜜蜂", + single: "%s只蜜蜂", + }, + "impetus.redstone.bound": { + "": "与%s绑定", + none: "未绑定", + }, + akashic: { + "bookshelf.location": "记录于%s", + "record.count": { + "": "存有%s个iota", + single: "存有%s个iota", + }, + }, }, - "brainsweep.min_level": "%s级或以上", - "brainsweep.level": "%s级", - "brainsweep.product": "无意识的躯体", + brainsweep: { + min_level: "%s级或以上", + level: "%s级", + product: "无意识的躯体", + }, - "media": "%d 紫水晶粉", - "media_amount": "含有:%s(%s)", + media: "%d 紫水晶粉", + media_amount: "含有:%s(%s)", "media_amount.advanced": "含有:%s/%s(%s)", - "list_contents": "[%s]", - "null_iota": "NULL", - "jump_iota": "[Jump]", - "pattern_iota": "HexPattern(%s)", - "boolean_true": "True", - "boolean_false": "False" + list_contents: "[%s]", + null_iota: "NULL", + jump_iota: "[Jump]", + pattern_iota: "HexPattern(%s)", + boolean_true: "True", + boolean_false: "False" }, // ^ tooltip spelldata: { - "onitem": "存有:%s", - "anything": "任意", - "unknown": "损坏的iota", + onitem: "存有:%s", + anything: "任意", + unknown: "损坏的iota", "entity.whoknows": "未知实体", "akashic.nopos": "阿卡夏记录无法读取此处iota(这是个bug)", }, @@ -364,9 +535,7 @@ }, ambiance: "咒术网格:嗡鸣", - staff: { - reset: "重置咒术" - }, + "reset": "重置咒术", abacus: { "": "算盘:咔哒", @@ -393,351 +562,434 @@ action: { "hexcasting:": { - "const/null": "空元之精思", - "const/vec/px": "向量之精思,+X型", - "const/vec/py": "向量之精思,+Y型", - "const/vec/pz": "向量之精思,+Z型", - "const/vec/nx": "向量之精思,-X型", - "const/vec/ny": "向量之精思,-Y型", - "const/vec/nz": "向量之精思,-Z型", - "const/vec/0": "向量之精思,零型", - "const/true": "真之精思", - "const/false": "假之精思", - "const/double/pi": "弧之精思", - "const/double/tau": "圆之精思", - "const/double/e": "欧拉之精思", - - "get_caster": "意识之精思", + "const/": { + "null": "空元之精思", + "true": "真之精思", + "false": "假之精思", + + "vec/": { + px: "向量之精思,+X型", + py: "向量之精思,+Y型", + pz: "向量之精思,+Z型", + nx: "向量之精思,-X型", + ny: "向量之精思,-Y型", + nz: "向量之精思,-Z型", + "0": "向量之精思,零型", + }, + + "double/": { + pi: "弧之精思", + tau: "圆之精思", + "e": "欧拉之精思", + }, + }, + + get_caster: "意识之精思", "entity_pos/eye": "指南针之纯化", "entity_pos/foot": "指南针之纯化,第二型", - "get_entity_look": "照准仪之纯化", - "get_entity_height": "测高仪之纯化", - "get_entity_velocity": "步伐之纯化", - "raycast": "弓箭手之馏化", + get_entity_look: "照准仪之纯化", + get_entity_height: "测高仪之纯化", + get_entity_velocity: "步伐之纯化", + raycast: "弓箭手之馏化", "raycast/axis": "建筑师之馏化", "raycast/entity": "侦查员之馏化", - "circle/impetus_pos": "指路石之精思", - "circle/impetus_dir": "磁石之精思", - "circle/bounds/min": "次要折角之精思", - "circle/bounds/max": "主要折角之精思", - - "append": "整合之馏化", - "unappend": "派生之馏化", - "concat": "组合之馏化", - "index": "选择之馏化", - "list_size": "算盘之纯化", - "singleton": "单体之纯化", - "empty_list": "空无之精思", - "reverse": "逆行之纯化", - "last_n_list": "群体之策略", - "splat": "群体之拆解", - "index_of": "定位器之馏化", - "remove_from": "切除器之馏化", - "slice": "选择之提整", - "replace": "外科医师之提整", - "construct": "演讲者之馏化", - "deconstruct": "演讲者之分解", - - "get_entity": "实体之纯化", - "get_entity/animal": "实体之纯化:动物", - "get_entity/monster": "实体之纯化:怪物", - "get_entity/item": "实体之纯化:物品", - "get_entity/player": "实体之纯化:玩家", - "get_entity/living": "实体之纯化:生物", - "zone_entity": "区域之馏化:任意", - "zone_entity/animal": "区域之馏化:动物", - "zone_entity/monster": "区域之馏化:怪物", - "zone_entity/item": "区域之馏化:物品", - "zone_entity/player": "区域之馏化:玩家", - "zone_entity/living": "区域之馏化:生物", - "zone_entity/not_animal": "区域之馏化:非动物", - "zone_entity/not_monster": "区域之馏化:非怪物", - "zone_entity/not_item": "区域之馏化:非物品", - "zone_entity/not_player": "区域之馏化:非玩家", - "zone_entity/not_living": "区域之馏化:非生物", - - "swap": "弄臣之策略", - "rotate": "轮换之策略", - "rotate_reverse": "轮换之策略,第二型", - "duplicate": "双子之分解", - "over": "勘探者之策略", - "tuck": "送葬者之策略", + + "circle/": { + impetus_pos: "指路石之精思", + impetus_dir: "磁石之精思", + "bounds/min": "次要折角之精思", + "bounds/max": "主要折角之精思", + }, + + append: "整合之馏化", + unappend: "派生之馏化", + index: "选择之馏化", + singleton: "单体之纯化", + empty_list: "空无之精思", + reverse: "逆行之纯化", + last_n_list: "群体之策略", + splat: "群体之拆解", + index_of: "定位器之馏化", + remove_from: "切除器之馏化", + slice: "选择之提整", + replace: "外科医师之提整", + construct: "演讲者之馏化", + deconstruct: "演讲者之分解", + + get_entity: "实体之纯化", + "get_entity/": { + animal: "实体之纯化:动物", + monster: "实体之纯化:怪物", + item: "实体之纯化:物品", + player: "实体之纯化:玩家", + living: "实体之纯化:生物", + }, + + zone_entity: "区域之馏化:任意", + "zone_entity/": { + animal: "区域之馏化:动物", + monster: "区域之馏化:怪物", + item: "区域之馏化:物品", + player: "区域之馏化:玩家", + living: "区域之馏化:生物", + not_animal: "区域之馏化:非动物", + not_monster: "区域之馏化:非怪物", + not_item: "区域之馏化:非物品", + not_player: "区域之馏化:非玩家", + not_living: "区域之馏化:非生物", + }, + + swap: "弄臣之策略", + rotate: "轮换之策略", + rotate_reverse: "轮换之策略,第二型", + duplicate: "双子之分解", + over: "勘探者之策略", + tuck: "送葬者之策略", "2dup": "狄俄斯库里之策略", - "duplicate_n": "双子之策略", - "stack_len": "群体之精思", - "fisherman": "渔夫之策略", + duplicate_n: "双子之策略", + stack_len: "群体之精思", + fisherman: "渔夫之策略", "fisherman/copy": "渔夫之策略,第二型", - "swizzle": "骗徒之策略", - - "unique": "唯一之纯化", - "and": "合取之馏化", - "or": "析取之馏化", - "xor": "互斥之馏化", - - "greater": "至大之馏化", - "less": "至小之馏化", - "greater_eq": "至大之馏化,第二型", - "less_eq": "至小之馏化,第二型", - "equals": "相等之馏化", - "not_equals": "不等之馏化", - "not": "取非之纯化", - "bool_coerce": "占卜师之纯化", - "if": "占卜师之提整", - - "add": "加法之馏化", - "sub": "减法之馏化", - "mul": "乘法之馏化", - "div": "除法之馏化", - "abs": "长度之纯化", - "pow": "乘方之馏化", - "floor": "取底之纯化", - "ceil": "取顶之纯化", - "modulo": "余数之馏化", - "construct_vec": "向量之提整", - "deconstruct_vec": "向量之拆解", - "sin": "正弦之纯化", - "cos": "余弦之纯化", - "tan": "正切之纯化", - "arcsin": "反正弦之纯化", - "arccos": "反余弦之纯化", - "arctan": "反正切之纯化", - "arctan2": "反正切之纯化,第二型", - "random": "熵之精思", - "logarithm": "对数之馏化", - "coerce_axial": "轴向之纯化", - - "read": "书吏之精思", + swizzle: "骗徒之策略", + + unique: "唯一之纯化", + and: "合取之馏化", + or: "析取之馏化", + xor: "互斥之馏化", + + greater: "至大之馏化", + less: "至小之馏化", + greater_eq: "至大之馏化,第二型", + less_eq: "至小之馏化,第二型", + equals: "相等之馏化", + not_equals: "不等之馏化", + not: "取非之纯化", + bool_coerce: "占卜师之纯化", + if: "占卜师之提整", + + add: "加法之馏化", + sub: "减法之馏化", + mul: "乘法之馏化", + div: "除法之馏化", + abs: "长度之纯化", + pow: "乘方之馏化", + floor: "取底之纯化", + ceil: "取顶之纯化", + modulo: "余数之馏化", + construct_vec: "向量之提整", + deconstruct_vec: "向量之拆解", + sin: "正弦之纯化", + cos: "余弦之纯化", + tan: "正切之纯化", + arcsin: "反正弦之纯化", + arccos: "反余弦之纯化", + arctan: "反正切之纯化", + arctan2: "反正切之纯化,第二型", + random: "熵之精思", + logarithm: "对数之馏化", + coerce_axial: "轴向之纯化", + + read: "书吏之精思", "read/entity": "编年史家之纯化", - "write": "书吏之策略", + "read/local": "雾尼之精思", + + write: "书吏之策略", "write/entity": "编年史家之策略", - "readable": "审计员之精思", - "writable": "估价员之精思", + "write/local": "福金之策略", + + readable: "审计员之精思", "readable/entity": "审计员之纯化", + writable: "估价员之精思", "writable/entity": "估价员之纯化", "akashic/read": "阿卡夏之馏化", "akashic/write": "阿卡夏之策略", - "read/local": "雾尼之精思", - "write/local": "福金之策略", - "print": "揭示", - "beep": "弹奏音符", - "explode": "爆炸", + print: "揭示", + beep: "弹奏音符", + explode: "爆炸", "explode/fire": "火球", - "add_motion": "驱动", - "blink": "闪现", - "break_block": "破坏方块", - "place_block": "放置方块", + add_motion: "驱动", + blink: "闪现", + break_block: "破坏方块", + place_block: "放置方块", + "craft/cypher": "制作杂件", "craft/trinket": "制作缀品", "craft/artifact": "制作造物", "craft/battery": "制作试剂瓶", - "recharge": "重新充能", - "erase": "清除物品", - "create_water": "制造水源", - "destroy_water": "清除流体", - "ignite": "点燃方块", - "extinguish": "广域熄灭", - "conjure_block": "构筑方块", - "conjure_light": "构筑光源", - "bonemeal": "催生", - "edify": "启迪树苗", - "colorize": "内化染色剂", - "sentinel/create": "召唤哨卫", - "sentinel/destroy": "驱除哨卫", - "sentinel/get_pos": "定位哨卫", - "sentinel/wayfind": "寻路至哨卫", - "potion/weakness": "白阳西沉", - "potion/levitation": "蓝阳西沉", - "potion/wither": "黑阳西沉", - "potion/poison": "红阳西沉", - "potion/slowness": "绿阳西沉", + + recharge: "重新充能", + erase: "清除物品", + create_water: "制造水源", + destroy_water: "清除流体", + ignite: "点燃方块", + extinguish: "广域熄灭", + conjure_block: "构筑方块", + conjure_light: "构筑光源", + bonemeal: "催生", + edify: "启迪树苗", + colorize: "内化染色剂", + + "sentinel/": { + create: "召唤哨卫", + "create/great": "召唤卓越哨卫", + destroy: "驱除哨卫", + get_pos: "定位哨卫", + wayfind: "寻路至哨卫", + }, + + "potion/": { + weakness: "白阳西沉", + levitation: "蓝阳西沉", + wither: "黑阳西沉", + poison: "红阳西沉", + slowness: "绿阳西沉", + + regeneration: "白阳当空", + night_vision: "蓝阳当空", + absorption: "黑阳当空", + haste: "红阳当空", + strength: "绿阳当空", + }, + + flight: "翱翔", "flight/range": "隐士之飞行", "flight/time": "旅者之飞行", - "potion/regeneration": "白阳当空", - "potion/night_vision": "蓝阳当空", - "potion/absorption": "黑阳当空", - "potion/haste": "红阳当空", - "potion/strength": "绿阳当空", - "flight": "翱翔", - "lightning": "召雷", - "summon_rain": "召雨", - "dispel_rain": "驱雨", - "create_lava": "制造熔岩", + lightning: "召雷", + summon_rain: "召雨", + dispel_rain: "驱雨", + create_lava: "制造熔岩", "teleport/great": "卓越传送", - "brainsweep": "剥离意识", - "sentinel/create/great": "召唤卓越哨卫", + brainsweep: "剥离意识", - "eval": "赫尔墨斯之策略", + eval: "赫尔墨斯之策略", "eval/cc": "伊里斯之策略", - "for_each": "托特之策略", - "halt": "卡戎之策略", + for_each: "托特之策略", + halt: "卡戎之策略", "interop/": { - "gravity/get": "引力之纯化", - "gravity/set": "改变引力", - "pehkui/get": "格列佛之纯化", - "pehkui/set": "改变大小", - } + "gravity/": { + get: "引力之纯化", + set: "改变引力", + }, + + "pehkui/": { + get: "格列佛之纯化", + set: "改变大小", + }, + }, }, // hexcasting.action.book.[resloc] override the name of that pattern in the patchi book, for abbreviations "book.hexcasting:": { - "get_entity_height": "测高仪之纯化", - "get_entity/animal": "实体之纯化:动物", - "get_entity/monster": "实体之纯化:怪物", - "get_entity/item": "实体之纯化:物品", - "get_entity/player": "实体之纯化:玩家", - "get_entity/living": "实体之纯化:生物", - "zone_entity": "区域之馏化:任意", - "zone_entity/animal": "区域之馏化:动物", - "zone_entity/monster": "区域之馏化:怪物", - "zone_entity/item": "区域之馏化:物品", - "zone_entity/player": "区域之馏化:玩家", - "zone_entity/living": "区域之馏化:生物", - "zone_entity/not_animal": "区域之馏化:非动物", - "zone_entity/not_monster": "区域之馏化:非怪物", - "zone_entity/not_item": "区域之馏化:非物品", - "zone_entity/not_player": "区域之馏化:非玩家", - "zone_entity/not_living": "区域之馏化:非生物", - "mul": "乘法之馏化", - "div": "除法之馏化", - "arcsin": "反正弦之纯化", - "arccos": "反余弦之纯化", - "arctan": "反正切之纯化", - "arctan2": "反正切之纯化,第二型", - "const/vec/x": "向量之精思,+X/-X型", - "const/vec/y": "向量之精思,+Y/-Y型", - "const/vec/z": "向量之精思,+Z/-Z型", + get_entity_height: "测高仪之纯化", + + "get_entity/": { + animal: "实体之纯化:动物", + monster: "实体之纯化:怪物", + item: "实体之纯化:物品", + player: "实体之纯化:玩家", + living: "实体之纯化:生物", + }, + + zone_entity: "区域之馏化:任意", + "zone_entity/": { + animal: "区域之馏化:动物", + monster: "区域之馏化:怪物", + item: "区域之馏化:物品", + player: "区域之馏化:玩家", + living: "区域之馏化:生物", + not_animal: "区域之馏化:非动物", + not_monster: "区域之馏化:非怪物", + not_item: "区域之馏化:非物品", + not_player: "区域之馏化:非玩家", + not_living: "区域之馏化:非生物", + }, + + mul: "乘法之馏化", + div: "除法之馏化", + arcsin: "反正弦之纯化", + arccos: "反余弦之纯化", + arctan: "反正切之纯化", + arctan2: "反正切之纯化,第二型", + + "const/vec/": { + x: "向量之精思,+X/-X型", + y: "向量之精思,+Y/-Y型", + z: "向量之精思,+Z/-Z型", + }, + "read/entity": "编年史家之纯化", - "bool_to_number": "数秘术师之纯化", - "number": "数字之精思", - "mask": "簿记员之策略", - } + bool_to_number: "数秘术师之纯化", + number: "数字之精思", + mask: "簿记员之策略", + }, }, // ^ action + "special.hexcasting:": { - "number": "数字之精思:%s", - "mask": "簿记员之策略:%s", + number: "数字之精思:%s", + mask: "簿记员之策略:%s", }, + "rawhook.hexcasting:": { - "open_paren": "内省", - "close_paren": "反思", - "escape": "考察", - "undo": "消解" + open_paren: "内省", + close_paren: "反思", + escape: "考察", + undo: "消解" }, + "iota.hexcasting:": { "null": "Null", - "double": "数", - "boolean": "布尔值", - "entity": "实体", - "list": "列表", - "pattern": "图案", - "garbage": "垃圾", - "vec3": "向量", + double: "数", + boolean: "布尔值", + entity: "实体", + list: "列表", + pattern: "图案", + garbage: "垃圾", + vec3: "向量", }, + mishap: { "": "%s:%s", - "invalid_pattern": "该图案不对应任何操作", - "unescaped": "本应运行一个图案,而实际运行了%s", + invalid_pattern: "该图案不对应任何操作", + unescaped: "本应运行一个图案,而实际运行了%s", - "not_enough_args": "本应接受大于等于%s个参数,而实际栈中元素数为%s", - "no_args": "本应接受大于等于%s个参数,而实际为空栈", - "too_many_close_parens": "在绘制反思前未先绘制内省", + not_enough_args: "本应接受大于等于%s个参数,而实际栈中元素数为%s", + no_args: "本应接受大于等于%s个参数,而实际为空栈", + too_many_close_parens: "在绘制反思前未先绘制内省", - "wrong_dimension": "无法在%2$s中影响到%1$s", - "entity_too_far": "%s超出影响范围", - "immune_entity": "无法影响到%s", - "eval_too_deep": "递归深度过大", - "no_item": "需要%s,而实际无对应物品", + wrong_dimension: "无法在%2$s中影响到%1$s", + entity_too_far: "%s超出影响范围", + immune_entity: "无法影响到%s", + eval_too_deep: "递归深度过大", + no_item: "需要%s,而实际无对应物品", "no_item.offhand": "需要在另一只手里持有%s,而实际无对应物品", - "bad_entity": "需要%s,而实际接受了%s", - "bad_brainsweep": "%s排斥此生物的意识", - "already_brainswept": "此意识已被使用", - "no_spell_circle": "%s需在法术环上执行", - "others_name": "试图侵犯%s的灵魂的隐私", + bad_entity: "需要%s,而实际接受了%s", + bad_brainsweep: "%s排斥此生物的意识", + already_brainswept: "此意识已被使用", + no_spell_circle: "%s需在法术环上执行", + others_name: "试图侵犯%s的灵魂的隐私", "others_name.self": "试图随意泄露我自己真名的秘密", - "divide_by_zero.divide": "试图用%2$s除%1$s", - "divide_by_zero.project": "试图将%s投影至%s", - "divide_by_zero.exponent": "试图计算%s的%s", - "divide_by_zero.logarithm": "试图计算%s以%s为底的对数", - "divide_by_zero.zero": "零", - "divide_by_zero.zero.power": "零次幂", - "divide_by_zero.zero.vec": "零向量", - "divide_by_zero.power": "%s次幂", - "divide_by_zero.sin": "%s的正弦", - "divide_by_zero.cos": "%s的余弦", - "no_akashic_record": "%s处无阿卡夏记录", - "disallowed": "已被服务器管理员禁用于施法", - "disallowed_circle": "已被服务器管理员禁用于法术环", - "invalid_spell_datum_type": "尝试将某无效类型的值用作SpellDatum:%s(class %s)。这是模组中的bug。", - "unknown": "抛出异常(%s)。这是模组中的bug。", - "shame": "你真是可耻!", - - "invalid_value": { + + divide_by_zero: { + divide: "试图用%2$s除%1$s", + project: "试图将%s投影至%s", + exponent: "试图计算%s的%s", + logarithm: "试图计算%s以%s为底的对数", + + zero: { + "": "零", + power: "零次幂", + vec: "零向量", + }, + power: "%s次幂", + sin: "%s的正弦", + cos: "%s的余弦", + }, + + invalid_operator_args: { + one: "在栈下标为%d处获取到意外iota:%s", + many: "在栈下标为%2$d到%3$d处获取到意外iota:%4$s", + }, + + no_akashic_record: "%s处无阿卡夏记录", + disallowed: "已被服务器管理员禁用于施法", + disallowed_circle: "已被服务器管理员禁用于法术环", + invalid_spell_datum_type: "尝试将某无效类型的值用作SpellDatum:%s(class %s)。这是模组中的bug。", + unknown: "抛出异常(%s)。这是模组中的bug。", + shame: "你真是可耻!", + + invalid_value: { "": "本应在栈下标为%2$s处接受%1$s,而实际接受了%3$s", - "class.double": "一个数", - "class.boolean": "一个布尔值", - "class.vector": "一个向量", - "class.list": "一个列表", - "class.widget": "一个虚指", - "class.pattern": "一个图案", - "class.entity.item": "一个物品实体", - "class.entity.player": "一个玩家", - "class.entity.villager": "一个村民", - "class.entity.living": "一个生物", - "class.entity": "一个实体", - "class.unknown": "(未知,这是个bug)", - "numvec": "一个数或向量", - "numlist": "一个整数或列表", + + class: { + double: "一个数", + boolean: "一个布尔值", + vector: "一个向量", + list: "一个列表", + widget: "一个虚指", + pattern: "一个图案", + + entity: { + "": "一个实体", + item: "一个物品实体", + player: "一个玩家", + villager: "一个村民", + living: "一个生物", + }, + + unknown: "(未知,这是个bug)", + }, + + numvec: "一个数或向量", + numlist: "一个整数或列表", "list.pattern": "一个由图案组成的列表", - "double.positive": "一个正数", - "double.positive.less": "一个小于%d的正数", - "double.positive.less.equal": "一个小于等于%d的正数", - "double.between": "一个介于%d和%d之间的数", - "int": "一个整数", - "int.positive": "一个正整数", - "int.positive.less": "一个小于%d的正整数", - "int.positive.less.equal": "一个小于等于%d的正整数", - "int.between": "一个介于%d和%d之间的整数", - "evaluatable": "可运行的事物", - "bool_commute": "一个布尔值、0或1", + + double: { + positive: { + "": "一个正数", + less: "一个小于%d的正数", + "less.equal": "一个小于等于%d的正数", + }, + between: "一个介于%d和%d之间的数", + }, + + int: { + "": "一个整数", + positive: { + "": "一个正整数", + less: "一个小于%d的正整数", + "less.equal": "一个小于等于%d的正整数", + }, + between: "一个介于%d和%d之间的整数", + }, + + evaluatable: "可运行的事物", + bool_commute: "一个布尔值、0或1", }, + location: { - "too_far": "%s超出影响范围", - "out_of_world": "%s不在此世界内", - "too_close_to_out": "%s离世界边界太近了", - "forbidden": "%s并未对你开放", - "bad_dimension": "无法在此维度内传送", + too_far: "%s超出影响范围", + out_of_world: "%s不在此世界内", + too_close_to_out: "%s离世界边界太近了", + forbidden: "%s并未对你开放", + bad_dimension: "无法在此维度内传送", }, bad_item: { "": "需要%s,而实际持有%d个%s", - "offhand": "需要在另一只手里持有%s,而实际持有%d个%s", - "iota": "一个可以存储iota的地方", - "iota.read": "一个可以读出iota的地方", - "iota.write": "一个可以写入iota的地方", - "iota.readonly": "一个能够接受%s的地方", - "media": "含有媒质的物品", - "media_for_battery": "天然含有媒质的物品", - "only_one": "仅一个物品", - "eraseable": "一个可清除的物品", - "bottle": "一个玻璃瓶", - "rechargable": "一个可重新充能的物品", - "colorizer": "一个染色剂", - "variant": "一个有变种的物品" + offhand: "需要在另一只手里持有%s,而实际持有%d个%s", + + iota: { + "": "一个可以存储iota的地方", + read: "一个可以读出iota的地方", + write: "一个可以写入iota的地方", + readonly: "一个能够接受%s的地方", + }, + + media: "含有媒质的物品", + media_for_battery: "天然含有媒质的物品", + only_one: "仅一个物品", + eraseable: "一个可清除的物品", + bottle: "一个玻璃瓶", + rechargable: "一个可重新充能的物品", + colorizer: "一个染色剂", + variant: "一个有变种的物品" }, + bad_block: { "": "本应在%2$s处接受%1$s,而实际接受了%3$s", - "sapling": "一个树苗", - "replaceable": "一个可放置方块的地方", + sapling: "一个树苗", + replaceable: "一个可放置方块的地方", }, - circle: { - "bool_directrix.no_bool": "%s处的iota实际为%s,而非布尔值", - "bool_directrix.empty_stack": "%s处的栈为空栈" - } + "circle.bool_directrix": { + no_bool: "%s处的iota实际为%s,而非布尔值", + empty_stack: "%s处的栈为空栈" + }, }, // ^ mishap @@ -757,7 +1009,7 @@ category: { basics: { "": "初入咒法", - "desc": "研究这种魔法的人士会用$(l:items/staff)$(item)法杖/$在空中绘制奇异的图案来施放他们口中的“$(hex)咒术/$”,\ + desc: "研究这种魔法的人士会用$(l:items/staff)$(item)法杖/$在空中绘制奇异的图案来施放他们口中的“$(hex)咒术/$”,\ 他们也会让$(l:items/hexcasting)$(item)强大的魔法物品/$替他们施法。\ 我应该也可以这样做?", }, @@ -781,15 +1033,13 @@ lore: { "": "故事", - desc: ">>>\ -| 我发现了些与我所研究的学问没有直接关系的信件和文本。\ -| 但是,其中也许记载了某些历史上发生过的事。还是需要好好读读……" + desc: "我发现了些与我所研究的学问没有直接关系的信件和文本。\ + 但是,其中也许记载了某些历史上发生过的事。还是需要好好读读……" }, interop: { "": "模组联动", - desc: ">>>\ -| 好像我装了某些能和咒法学联动的模组!详情如下。" + desc: "好像我装了某些能和咒法学联动的模组!详情如下。" }, patterns: { @@ -807,9 +1057,6 @@ 这也许只是某些消亡的老古董口中的胡言乱语,不过——它们只是简单的图案罢了。$(br2)\ 试试看又能出什么错呢?", }, - - lore: "故事", - interop: "模组联动", }, // ^ categories @@ -890,14 +1137,14 @@ zeniths: "天顶法术", lore: { - "cardamom1": "卡达蒙的信,#1", - "cardamom2": "卡达蒙的信,#2", - "cardamom3": "卡达蒙的信,#3", - "cardamom4": "卡达蒙的信,#4", - "cardamom5": "卡达蒙的信,#5", - "experiment1": "“毡障”实例笔记", - "experiment2": "“毡障”测试日志", - "inventory": "回收日志 #72" + cardamom1: "卡达蒙的信,#1", + cardamom2: "卡达蒙的信,#2", + cardamom3: "卡达蒙的信,#3", + cardamom4: "卡达蒙的信,#4", + cardamom5: "卡达蒙的信,#5", + experiment1: "“毡障”实例笔记", + experiment2: "“毡障”测试日志", + inventory: "回收日志 #72" }, interop: { @@ -912,83 +1159,77 @@ // ^ entries page: { - "media.1": "$(media)媒质/$是一种独立于意识的思维能量。所有生物都会在思考时产生痕量的$(media)媒质/$,而在这一思考过程结束后,产生的媒质就会被释放至环境中。$(br2)所谓施放$(hex)咒术/$,就是操纵$(media)媒质/$以产生有效影响的过程。", - "media.2": "$(media)媒质/$可以影响其他媒质,而这种影响的强度和种类都可通过将$(media)媒质/$绘制为各式图案来进行控制。$(p)研究这种魔法的学者则会使用接在木棍一端的浓缩的$(media)媒质/$。只要在空中按特定模式挥舞,学者们就能以足够的精度操控足量的$(media)媒质/$来影响世界,也即“$(hex)咒术/$”。", - "media.3": "遗憾的是,就算是感知能力较强的生物(也许我自己也算)也只能产生微量的$(media)媒质/$。只凭自己的大脑来施放咒术不太现实。$(br2)但传说地下有种特殊的矿床,$(media)媒质/$会在其中缓慢累积,并生长为晶体。$(p)真希望我能找到一处……", - - - "geodes.1": "啊哈!在地下挖矿时,我找到了一个巨大的、满溢着能量的晶洞。那些能量压迫着我的颅骨和思维。而现在,我手里就有一块那种压迫的来源,一块固体。传说是真的。这块固体$(italic)一定/$就是传说中$(media)媒质/$累积的产物。$(br2)这些$(l:items/amethyst)$(item)紫水晶/$肯定就是$(l:items/amethyst)$(thing)一种便于使用的、固态的$(media)媒质/$。", - "geodes.2": "似乎除了我往常碰到的$(l:items/amethyst)$(item)紫水晶碎片/$,这些水晶还会掉落些许粉末状的$(l:items/amethyst)$(item)紫水晶粉/$,也有可能掉落$(l:items/amethyst)$(item)充能紫水晶/$。而且好像附有时运的镐子挖出$(l:items/amethyst)$(item)充能紫水晶/$的概率更大。", - "geodes.3": "而在欣赏这些水晶的美时,我能感受到某种连接迅速闪过我的意识。就好像空气中的$(media)媒质/$正在流入我的脑海,正给予我更强的力量,正为我启迪全新知识……这种感觉真不错。$(br2)我总算是入门了!$(p)我要再读几遍那些古老的传说,我总算能理解我在读什么了。", - + media: { + "1": "$(media)媒质/$是一种独立于意识的思维能量。所有生物都会在思考时产生痕量的$(media)媒质/$,而在这一思考过程结束后,产生的媒质就会被释放至环境中。$(br2)所谓施放$(hex)咒术/$,就是操纵$(media)媒质/$以产生有效影响的过程。", + "2": "$(media)媒质/$可以影响其他媒质,而这种影响的强度和种类都可通过将$(media)媒质/$绘制为各式图案来进行控制。$(p)研究这种魔法的学者则会使用接在木棍一端的浓缩的$(media)媒质/$。只要在空中按特定模式挥舞,学者们就能以足够的精度操控足量的$(media)媒质/$来影响世界,也即“$(hex)咒术/$”。", + "3": "遗憾的是,就算是感知能力较强的生物(也许我自己也算)也只能产生微量的$(media)媒质/$。只凭自己的大脑来施放咒术不太现实。$(br2)但传说地下有种特殊的矿床,$(media)媒质/$会在其中缓慢累积,并生长为晶体。$(p)真希望我能找到一处……", + }, - "couldnt_cast.1": "为什么我就是施不了这个法术?!$(br2)我找到的卷轴货真价实。我能$(italic)感受/$到卷轴的嗡鸣——图案是真的,真的不能再真了。法术$(italic)就在里面/$。$(p)但感觉起来它好像处在某种薄膜的另一侧。我试过召唤它——它也想要起效——但它$(italic)做不到/$。", - "couldnt_cast.2": "好像那层屏障会因我施法时用的魔力而被缓慢地削弱。但就算我用尽全力——最大程度地专注,最精致的紫水晶,最精确的图案——它$(italic)就是不肯/$跨过那个屏障。真是惹人上火。难道我对魔法的研究就$(p)$(italic)止步于此/$了吗?就因为我无力施法,我就要放弃那些力量了吗?$(br2)深呼吸。我应该仔细回顾我曾学到的知识,就算可能加起来也没多少……", - "couldnt_cast.3": "……经过仔细回顾……我发现我自己发生了改变。$(p)似乎……拜$(l:items/amethyst)$(item)紫水晶/$所赐,我能仅凭我自身的意识和生命能量来施放法术,就和传说中说的一样。$(p)我不清楚我为什么做得到。只是……获得真知的代价就在那里,而我现在知道了那个代价是什么。我要去承受它。$(br2)幸运的是,我也清楚我的极限在哪里——我的生命力最旺盛时大概就相当于两个$(l:items/amethyst)$(item)充能紫水晶/$中的$(media)媒质/$。", - "couldnt_cast.4": "只是想想都让我打颤——直到现在,我都在研究中保持了自身意识的大体完整。但这样做的结果就是,我只建立了单向而脆弱的连接。$(p)我与屏障的另一侧是相连的,其间的屏障已因我的努力而受了削弱。而在屏障的另一侧,仅是简单的操作,就能带来永恒的荣耀。$(p)我想要拥有那份力量,是否就大错特错?", + geodes: { + "1": "啊哈!在地下挖矿时,我找到了一个巨大的、满溢着能量的晶洞。那些能量压迫着我的颅骨和思维。而现在,我手里就有一块那种压迫的来源,一块固体。传说是真的。这块固体$(italic)一定/$就是传说中$(media)媒质/$累积的产物。$(br2)这些$(l:items/amethyst)$(item)紫水晶/$肯定就是$(l:items/amethyst)$(thing)一种便于使用的、固态的$(media)媒质/$。", + "2": "似乎除了我往常碰到的$(l:items/amethyst)$(item)紫水晶碎片/$,这些水晶还会掉落些许粉末状的$(l:items/amethyst)$(item)紫水晶粉/$,也有可能掉落$(l:items/amethyst)$(item)充能紫水晶/$。而且好像附有时运的镐子挖出$(l:items/amethyst)$(item)充能紫水晶/$的概率更大。", + "3": "而在欣赏这些水晶的美时,我能感受到某种连接迅速闪过我的意识。就好像空气中的$(media)媒质/$正在流入我的脑海,正给予我更强的力量,正为我启迪全新知识……这种感觉真不错。$(br2)我总算是入门了!$(p)我要再读几遍那些古老的传说,我总算能理解我在读什么了。", + }, + couldnt_cast: { + "1": "为什么我就是施不了这个法术?!$(br2)我找到的卷轴货真价实。我能$(italic)感受/$到卷轴的嗡鸣——图案是真的,真的不能再真了。法术$(italic)就在里面/$。$(p)但感觉起来它好像处在某种薄膜的另一侧。我试过召唤它——它也想要起效——但它$(italic)做不到/$。", + "2": "好像那层屏障会因我施法时用的魔力而被缓慢地削弱。但就算我用尽全力——最大程度地专注,最精致的紫水晶,最精确的图案——它$(italic)就是不肯/$跨过那个屏障。真是惹人上火。难道我对魔法的研究就$(p)$(italic)止步于此/$了吗?就因为我无力施法,我就要放弃那些力量了吗?$(br2)深呼吸。我应该仔细回顾我曾学到的知识,就算可能加起来也没多少……", + "3": "……经过仔细回顾……我发现我自己发生了改变。$(p)似乎……拜$(l:items/amethyst)$(item)紫水晶/$所赐,我能仅凭我自身的意识和生命能量来施放法术,就和传说中说的一样。$(p)我不清楚我为什么做得到。只是……获得真知的代价就在那里,而我现在知道了那个代价是什么。我要去承受它。$(br2)幸运的是,我也清楚我的极限在哪里——我的生命力最旺盛时大概就相当于两个$(l:items/amethyst)$(item)充能紫水晶/$中的$(media)媒质/$。", + "4": "只是想想都让我打颤——直到现在,我都在研究中保持了自身意识的大体完整。但这样做的结果就是,我只建立了单向而脆弱的连接。$(p)我与屏障的另一侧是相连的,其间的屏障已因我的努力而受了削弱。而在屏障的另一侧,仅是简单的操作,就能带来永恒的荣耀。$(p)我想要拥有那份力量,是否就大错特错?", + }, - "start_to_see.1": "文献没有说错。自然出手了。", - "start_to_see.2": "那……那是……$(p)……那是我所经历过的$(italic)最糟糕/$的事了。我向自然呈现了我的规划,得来的是一个坚定的笑容和一种被撕裂的感受——我的一部分破碎了,就好像雨中四散的紫水晶粉。$(p)只是$(italic)存活/$下来都是极大的幸事,更不用说有精力写下这些了。这件事该到此为止,我应该在施放$(hex)咒术/$时多算几遍,绝不能再犯这样的错误。", - "start_to_see.3": "……但是。$(br2)但是在那最为神圣的一刻,我破碎的那一部分……它$(italic)看见了/$……$(l:greatwork/the_work)$(thing)一些东西/$。一个地方——也许是一件作品?(这种定义对……那种事物来说不值一提)$(p)和一张……一个薄膜-屏障-薄层-界限,将我和单纯的思维-能流-光-能量的领域隔绝开来。我记得——我看见-想到-回忆起-感受到——那个屏障的边缘变得模糊了,略微模糊了。$(p)我想要$(italic)穿过它/$。", - "start_to_see.4": "但我不应该。我也$(italic)清楚/$我不应该。那很危险。非常非常危险。跨越屏障需要的力量……我必须仅凭$(italic)一次施法/$就让我自己濒临死亡。$(br2)但我,就是,$(italic)不甘心/$。$(p)$(italic)这/$就是我魔法的集大成之作。这就是我所追求的$(#54398a)启迪/$。$(br2)我还想知道更多。我要再看到那场景。我$(italic)必将/$再见。$(p)我脆弱的意识和永恒的荣耀相比,又算得上什么呢?", + start_to_see: { + "1": "文献没有说错。自然出手了。", + "2": "那……那是……$(p)……那是我所经历过的$(italic)最糟糕/$的事了。我向自然呈现了我的规划,得来的是一个坚定的笑容和一种被撕裂的感受——我的一部分破碎了,就好像雨中四散的紫水晶粉。$(p)只是$(italic)存活/$下来都是极大的幸事,更不用说有精力写下这些了。这件事该到此为止,我应该在施放$(hex)咒术/$时多算几遍,绝不能再犯这样的错误。", + "3": "……但是。$(br2)但是在那最为神圣的一刻,我破碎的那一部分……它$(italic)看见了/$……$(l:greatwork/the_work)$(thing)一些东西/$。一个地方——也许是一件作品?(这种定义对……那种事物来说不值一提)$(p)和一张……一个薄膜-屏障-薄层-界限,将我和单纯的思维-能流-光-能量的领域隔绝开来。我记得——我看见-想到-回忆起-感受到——那个屏障的边缘变得模糊了,略微模糊了。$(p)我想要$(italic)穿过它/$。", + "4": "但我不应该。我也$(italic)清楚/$我不应该。那很危险。非常非常危险。跨越屏障需要的力量……我必须仅凭$(italic)一次施法/$就让我自己濒临死亡。$(br2)但我,就是,$(italic)不甘心/$。$(p)$(italic)这/$就是我魔法的集大成之作。这就是我所追求的$(#54398a)启迪/$。$(br2)我还想知道更多。我要再看到那场景。我$(italic)必将/$再见。$(p)我脆弱的意识和永恒的荣耀相比,又算得上什么呢?", + }, casting: { overview: { - "1": ">>>\ - 我坚信正确的起步方向非常重要。因此,我编写了一个能在我所看的位置产生中小型爆炸的$(hex)咒术/$。相信研究其内部机理会相当有启迪性。" + "1": "我坚信正确的起步方向非常重要。因此,我编写了一个能在我所看的位置产生中小型爆炸的$(hex)咒术/$。相信研究其内部机理会相当有启迪性。" }, grid: { - "1": ">>>\ - 我通常会使用$(l:items/staff)$(item)法杖/$为自然提供图案。\ + "1": "我通常会使用$(l:items/staff)$(item)法杖/$为自然提供图案。\ 在手中持有时按下$(thing)$(k:use)/$就会在我面前产生一个六边形格点。\ 之后点击并在点间拖拽,再释放就可绘制图案。$(br2)\ 在我提交图案的同时,其就会被运行(见下一章节)。", - "2": ">>>\ - 按下$(thing)$(k:escape)/$会保存并关闭网格,下一次使用法杖时,原有的图案和 iota 都会保留。$(br2)\ + "2": "按下$(thing)$(k:escape)/$会保存并关闭网格,下一次使用法杖时,原有的图案和 iota 都会保留。$(br2)\ 如果需要重设施法状态,在潜行时打开网格即可。" }, "patterns&actions": { - "1": ">>>\ - $(thing)图案/$是沿$(media)媒质/$网格行进的路径。我相信图案的六次对称性就是这种技艺名称的由来。(译注:hex:六;咒术)$(br2)\ + "1": "$(thing)图案/$是沿$(media)媒质/$网格行进的路径。我相信图案的六次对称性就是这种技艺名称的由来。(译注:hex:六;咒术)$(br2)\ $(thing)操作/$则是图案所$(italic)做/$的事情。", - "2": ">>>\ - 两者的区别可类比为$(italic)词语/$和$(italic)意义/$的区别。\ + "2": "两者的区别可类比为$(italic)词语/$和$(italic)意义/$的区别。\ 任意的字母组合都是词语,但其中大部分(例如“xnopyt”)毫无意义。\ 相似地,沿$(media)媒质/$随意画出的任何东西都可称作图案,但其中大部分什么都做不了。", - "3": ">>>\ - 操作有点类似统领宇宙的卓伟系统规则的命令。(我曾看过有些文本将这些规则拟人化为“自然”。)\ + "3": "操作有点类似统领宇宙的卓伟系统规则的命令。(我曾看过有些文本将这些规则拟人化为“自然”。)\ 它们通常会执行如下其一:\ $(li)收集有关世界的某些信息,例如获取实体的位置。\ $(li)操纵收集到的信息,例如计算两位置间的距离。\ $(li)在世界上产生某些魔法效果,例如召唤闪电和爆炸。$(br)\ 其中最后一种操作又称“法术”,也通常是吸引人们研习这门技艺的原因。", - "4": ">>>\ - $(hex)咒术/$则是依次提供给自然的有效图案序列。\ + "4": "$(hex)咒术/$则是依次提供给自然的有效图案序列。\ 自然会依次理解这些图案,如果它能够理解,则会根据我的奇想改变世界。\ (或者说,根据它印象中我奇想的意义。)", - "5": ">>>\ - 尽管某些操作可轻松执行,但某些则需要一种凝结形态的$(media)媒质/$。\ + "5": "尽管某些操作可轻松执行,但某些则需要一种凝结形态的$(media)媒质/$。\ 我相信这种浓缩的意识能量是对自然的某种论据,作为说服其应当依照我的请求做事的报偿。\ 大部分的法术都需要这种报偿,若干非法术操作也需要。$(br2)\ 我已在各操作的介绍页记录了其消耗(若有)。" }, iotas: { - "1": ">>>\ - 自然的语言中的“名词”称作 $(thing)iota/$。\ + "1": "自然的语言中的“名词”称作 $(thing)iota/$。\ 从其最为基础的层面而言,咒法学便是操纵 iota 的技艺。$(br2)\ Iota 有许多不同类型:\ $(li)数(某些文献称之为“双精度浮点数”)。\ $(li)向量,一种可代表世界中位置、运动或方向的,由三个数组成的集合。\ $(li)布尔值(简称“布尔”),一种代表真和假的抽象概念的的 iota。\ $(li)实体,如我自己、鸡、矿车等。", - "2": ">>>\ - $(li)虚指,一种代表抽象概念的奇怪的 iota。\ + "2": "$(li)虚指,一种代表抽象概念的奇怪的 iota。\ $(li)图案,用于制作魔法物品,也用在某些烧脑的咒术中,如$(italic)能施放其他法术的法术/$。\ $(li)由上述若干种组成的列表,相当于一个 iota。", - "3": ">>>\ - 通常情况下,我会给操作提供 iota。\ + "3": "通常情况下,我会给操作提供 iota。\ 例如$(l:patterns/spells/basic#hexcasting:explode)$(action)爆炸/$。\ 此法术需要一个表示强度的数 iota,和一个表示位置的向量 iota。$(br2)\ 或者再看$(l:patterns/basic#hexcasting:get_pos)$(action)指南针之纯化/$。\ @@ -997,636 +1238,795 @@ }, // Casting - "101.1": "施放$(hex)咒术/$难度颇高,也难怪这门学问早已遗落!我必须要仔细回看我的笔记。$(br2)我可以手持$(l:items/staff)$(item)法杖/$按下$(k:use)来施放$(hex)咒术/$,而后就会浮现一个按六边形网格排列的点阵。然后便可在点阵上单击并拖动以在网格的$(media)媒质/$中绘制图案。绘制完一个图案就会立刻执行其对应的操作(详情见后)。", - "101.2": "当我绘制的图案足以施法时,网格就会消失,而累积起来的$(media)媒质/$也会被释放。按住$(k:sneak)时使用$(l:items/staff)$(item)法杖/$也能清空网格。$(br2)所以图案是如何起效的呢?简而言之:$(li)$(italic)图案/$会执行……$(li)$(italic)操作/$,其会操控……$(li)$(l:casting/stack)$(italic)栈/$,也即一列表的……$(li)$(italic)Iota/$,就是以单位计的信息。", - "101.3": "首先,$(thing)图案/$。它们是咒术的必需物,可用它们来操控周围的$(media)媒质/$。部分图案在被绘制时,会执行$(thing)操作/$。操作是$(italic)实际产生/$魔法效果的事物。所有图案都会以某种方式影响$(media)媒质/$,而当这些影响实际有用时,我们就称其为操作。$(br2)$(media)媒质/$是易变的,如果我绘制了无效的图案,栈上某处就会出现$(l:casting/influences)$(action)垃圾/$(详情见后)。", - "101.4.header": "示例", - "101.4": "有意思的是,图案整体的$(italic)方向/$完全不影响图案的功用。例如,上图中的两个图案都会执行名为$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$的操作。", - "101.5": "$(hex)咒术/$是通过按顺序绘制(有效的)图案施放的。每个操作都能完成如下几件事中的一件:$(li)获取有关环境的信息,然后将其置于栈顶。$(li)操控获取到的信息(例如加和两个数)。或者$(li)产生魔法效果,例如召唤闪电或产生爆炸。(这些操作被称为“法术”。)$(p)在开始施放$(hex)咒术/$时会自动创建一个空栈。操作会影响栈顶的若干元素。", - "101.6": "例如,$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$会创建一个代表$(italic)我/$,即施法者的 iota,并将其置于栈顶。$(l:patterns/basics#hexcasting:entity_pos/eye)$(action)指南针之纯化/$会接受栈顶的 iota(前提是该 iota 代表一个实体),并将其转换为代表该实体位置的 iota。$(br2)所以,依序绘制上述图案就会在栈顶创建一个代表我的位置的 iota。", - "101.7": "$(thing)Iota/$ 可以代表诸如我、我的位置等具体事物,也可以代表其他几种能用$(thing)操作/$进行操控的事物。如下是一份全面介绍:$(li)数(某些文献称之为“双精度浮点数”)。$(li)向量,一种可代表世界中位置、运动或方向的,由三个数组成的集合。$(li)布尔值(简称“布尔”),一种代表真和假的抽象概念的的 iota。", - "101.8": "$(li)实体,如我自己、鸡、矿车等。$(li)虚指,一种代表抽象概念的奇怪的 iota。$(li)图案,用于制作魔法物品,也用在某些烧脑的咒术中,如$(italic)能施放其他法术的法术/$。还有$(li)列表,可由上述任意类型的 iota 构成的列表,其本身相当于一个 iota。", - "101.9": "当然,天上不会掉馅饼。所有法术和一些操作会消耗$(media)媒质/$。$(br2)我个人认为,$(hex)咒术/$有点像呈现在自然面前的一个对各类操作的规划。要这么类比的话,$(media)媒质/$便是用来为这个规划提供各式参数和运行支持的能源,而自然会接受你的规划并付诸实践。", - "101.10": "除此之外,似乎没人研究过每块$(l:items/amethyst)$(item)紫水晶/$到底含有$(italic)多少/$媒质。我只能得出,一个$(l:items/amethyst)$(item)紫水晶碎片/$大概和五个$(l:items/amethyst)$(item)紫水晶粉/$相当,而一个$(l:items/amethyst)$(item)充能紫水晶/$大概与十个相当。$(br2)而且奇怪之处在于$(l:items/amethyst)$(item)紫水晶/$的其余形态均不适于施放$(hex)咒术/$。推测是因为紫水晶块和晶簇固化程度过高,导致其无法被轻易拆散为$(media)媒质/$。", - "101.11": "还需格外注意的是每次操作会在执行时立刻消耗其所需的$(media)媒质/$,而非在整个咒术结束时消耗。而且,一次操作会消耗一个物品,如只需要一个$(l:items/amethyst)$(item)紫水晶粉/$量的$(media)媒质/$的操作也会消耗一个$(l:items/amethyst)$(item)充能紫水晶/$,前提是物品栏里只有充能紫水晶。$(br2)因此,将紫水晶粉碎是个不错的点子。勤俭节约,吃穿不缺。", - "101.12": "还要注意物品栏内一定要有足够的紫水晶。一些古代文献提及,自然也会将施法者的意识用作媒质。文献也有提到那种感觉很糟糕但又奇怪地让人兴奋,“……热烈地溶解入光与能量中……”。也许这就是为何先前的研究者们最终都疯了。我完全不觉得为力量而放弃部分意识会对身体有任何$(italic)好处/$。", - "101.13": "但也许确实有东西和文献所记述的有所不同了。在我的实验中,我从没遇到过文献中提到的情况。如果$(media)媒质/$不够了,法术只是单纯地施放不了,就好像有什么屏障在防止我被伤到一样。$(br2)对此刨根问底肯定能得出些有意思的结论,但现在就暂时认为它会保护我吧。", - "101.14": "我还发现了一则趣闻,主要讲述为何许多魔法研究者都近乎疯癫,是不错的休闲趣味读物,虽然对不上我这里的世界观。$(br2)$(italic)内容警告:部分肉体恐怖与暗示类材料。/$", - "101.14.link_text": "Goblin Punch", - "101.15": "最后,法术的影响是有距离限制的,最远大约是距离我 32 格处。若试图影响该范围外的事物,法术便不会生效。$(br2)尽管如此,我可以凭借代表玩家的 iota 在任何地方影响他们。当然影响仅限于玩家本身,若玩家周围的环境超出我的影响范围,那些位置便不受影响。$(br)必须谨慎考虑要不要给别人代表我的 iota。友善的$(hex)咒术师们/$可凭此助你行事,但那些心怀鬼胎的就不好说了。", - - - "vectors.1": "如果要深入研究,就要对向量相关的知识足够熟悉。我整理了些讲解向量知识的资料,以备不理解时之需。$(br2)首先,来一段富有启发性的视频。(译注:此为 B 站官方账号$(l:https://www.bilibili.com/video/BV1ys411472E)网址/$)", - "vectors.1.link_text": "3blue1brown", - "vectors.2": "此外,似乎操控 $(thing)Psi 能量/$的魔法师们(又称“术式师”)有一些对学徒理解向量大有裨益的课程,虽然他们命名能力不强。我会在后页冒昧地提供前往他们课程的链接。$(br2)他们使用了另一套术语:$(li)“功能块”对应“操作”。$(li)“启动式”对应“法术”。$(li)“运算符”则对应不是法术的操作。", - "vectors.3": "链接在此。", - "vectors.3.link_text": "Psi Codex", - - - "mishaps.1": "不幸的是,我(还)不是一个完美的生物。我经常会在研究中和施放$(hex)咒术/$时犯错。比如说,绘制错图案,或是对错误的 iota 进行操作。而自然一般不会宽容我的错误,从而导致$(italic)事故/$。", - "mishaps.2": "导致事故的图案会在网格中发红光。根据事故的类型,我能大致推断出其造成的有害后果。同时会有一簇红色与各色混合的火花四散开去,这主要是处理不当的$(media)媒质/$凝结为某种颜色的光所致。", - "mishaps.3": "而幸运的是,虽然所有事故导致的有害效果都$(italic)很烦人/$,但也都不会导致长期毁灭性后果。在哪里跌倒,就要在哪里站起来,然后继续前进……当然也可以换一条更好走的路。$(br2)我整理的所有事故如下所述。", - "mishaps.invalid_pattern.title": "无效图案", - "mishaps.invalid_pattern": "绘制的图案不对应任何操作。$(br2)产生黄色火花,并向栈顶压入一个$(l:casting/influences)$(action)垃圾/$。", - "mishaps.not_enough_iotas.title": "Iota 过少", - "mishaps.not_enough_iotas": "该操作需要比当前栈中元素数还多的 iota。$(br2)产生淡灰色火花,并向栈顶压入缺少的参数的数量个$(l:casting/influences)$(action)垃圾/$。", - "mishaps.incorrect_iota.title": "Iota 错误", - "mishaps.incorrect_iota": "该操作需要一种特定类型的 iota 作为参数,而实际 iota 无效。如果有多个 iota 无效,错误信息只会提示最靠近栈底的错误。$(br2)产生深灰色火花,无效的 iota 会被替换为$(l:casting/influences)$(action)垃圾/$。", - "mishaps.vector_out_of_range.title": "向量越界", - "mishaps.vector_out_of_range": "该操作试图影响在我影响范围之外的某一位置。$(br2)产生品红色火花,我手中的物品将会掉落并飞向对应位置。", - "mishaps.entity_out_of_range.title": "实体越界", - "mishaps.entity_out_of_range": "该操作试图影响在我影响范围之外的某一实体。$(br2)产生粉红色火花,我手中的物品将会掉落并飞向对应实体。", - "mishaps.entity_immune.title": "实体免疫", - "mishaps.entity_immune": "该操作试图影响某不会受其影响的实体。$(br2)产生蓝色火花,我手中的物品将会掉落并飞向对应实体。", - "mishaps.math_error.title": "数学错误", - "mishaps.math_error": "该操作违背了数学规律,例如试图除以零。$(br2)产生红色火花,压入一个$(l:casting/influences)$(action)垃圾/$,并且我的意识会被销蚀,扣去我当时生命力的一半。自然似乎对这种举动深感冒犯,而后便会报复性地惩罚$(italic)我/$。", - "mishaps.incorrect_item.title": "物品错误", - "mishaps.incorrect_item": "该操作需要某种物品,而我所提供的物品不合适。$(br2)产生棕色火花。如果在手中持有对应物品,则该物品会掉落在地。如果对应物品以实体形式存在,则其会被击飞。", - "mishaps.incorrect_block.title": "方块错误", - "mishaps.incorrect_block": "该操作需在目标位置存在某种方块,而该位置实际存在的方块不合适。$(br2)产生亮绿色火花,并在对应位置产生一次爆炸。这种爆炸似乎不会伤害到我、世界或是任何其他事物。就是挺吓人的。", - "mishaps.retrospection.title": "反思过急", - "mishaps.retrospection": "试图在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$前绘制$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$。$(br2)产生橙色火花,并压入一个$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$对应的图案。", - "mishaps.too_deep.title": "钻研过深", - "mishaps.too_deep": "在一个法术内以元运行方式运行过多法术。$(br2)产生暗蓝色火花,并使我窒息。", - "mishaps.true_name.title": "违犯他人", - "mishaps.true_name": "试图在某种永久性媒介中$(l:patterns/readwrite#hexcasting:write)$(action)存储/$代表另一位玩家的 iota。$(br2)产生黑色火花,并致盲大约一分钟。", - "mishaps.disabled.title": "禁用操作", - "mishaps.disabled": "试图执行被服务器管理员禁用的操作。$(br2)产生黑色火花。", - "mishaps.other.title": "灾难性故障", - "mishaps.other": "模组中的漏洞产生的无效类型的 iota 或是其他错误导致法术失效。$(l:https://github.com/gamma-delta/HexMod/issues)请报告该漏洞!/$$(br2)产生黑色火花。", + "101": { + "1": "施放$(hex)咒术/$难度颇高,也难怪这门学问早已遗落!我必须要仔细回看我的笔记。$(br2)我可以手持$(l:items/staff)$(item)法杖/$按下$(k:use)来施放$(hex)咒术/$,而后就会浮现一个按六边形网格排列的点阵。然后便可在点阵上单击并拖动以在网格的$(media)媒质/$中绘制图案。绘制完一个图案就会立刻执行其对应的操作(详情见后)。", + "2": "当我绘制的图案足以施法时,网格就会消失,而累积起来的$(media)媒质/$也会被释放。按住$(k:sneak)时使用$(l:items/staff)$(item)法杖/$也能清空网格。$(br2)所以图案是如何起效的呢?简而言之:$(li)$(italic)图案/$会执行……$(li)$(italic)操作/$,其会操控……$(li)$(l:casting/stack)$(italic)栈/$,也即一列表的……$(li)$(italic)Iota/$,就是以单位计的信息。", + "3": "首先,$(thing)图案/$。它们是咒术的必需物,可用它们来操控周围的$(media)媒质/$。部分图案在被绘制时,会执行$(thing)操作/$。操作是$(italic)实际产生/$魔法效果的事物。所有图案都会以某种方式影响$(media)媒质/$,而当这些影响实际有用时,我们就称其为操作。$(br2)$(media)媒质/$是易变的,如果我绘制了无效的图案,栈上某处就会出现$(l:casting/influences)$(action)垃圾/$(详情见后)。", + "4.header": "示例", + "4": "有意思的是,图案整体的$(italic)方向/$完全不影响图案的功用。例如,上图中的两个图案都会执行名为$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$的操作。", + "5": "$(hex)咒术/$是通过按顺序绘制(有效的)图案施放的。每个操作都能完成如下几件事中的一件:$(li)获取有关环境的信息,然后将其置于栈顶。$(li)操控获取到的信息(例如加和两个数)。或者$(li)产生魔法效果,例如召唤闪电或产生爆炸。(这些操作被称为“法术”。)$(p)在开始施放$(hex)咒术/$时会自动创建一个空栈。操作会影响栈顶的若干元素。", + "6": "例如,$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$会创建一个代表$(italic)我/$,即施法者的 iota,并将其置于栈顶。$(l:patterns/basics#hexcasting:entity_pos/eye)$(action)指南针之纯化/$会接受栈顶的 iota(前提是该 iota 代表一个实体),并将其转换为代表该实体位置的 iota。$(br2)所以,依序绘制上述图案就会在栈顶创建一个代表我的位置的 iota。", + "7": "$(thing)Iota/$ 可以代表诸如我、我的位置等具体事物,也可以代表其他几种能用$(thing)操作/$进行操控的事物。如下是一份全面介绍:$(li)数(某些文献称之为“双精度浮点数”)。$(li)向量,一种可代表世界中位置、运动或方向的,由三个数组成的集合。$(li)布尔值(简称“布尔”),一种代表真和假的抽象概念的的 iota。", + "8": "$(li)实体,如我自己、鸡、矿车等。$(li)虚指,一种代表抽象概念的奇怪的 iota。$(li)图案,用于制作魔法物品,也用在某些烧脑的咒术中,如$(italic)能施放其他法术的法术/$。还有$(li)列表,可由上述任意类型的 iota 构成的列表,其本身相当于一个 iota。", + "9": "当然,天上不会掉馅饼。所有法术和一些操作会消耗$(media)媒质/$。$(br2)我个人认为,$(hex)咒术/$有点像呈现在自然面前的一个对各类操作的规划。要这么类比的话,$(media)媒质/$便是用来为这个规划提供各式参数和运行支持的能源,而自然会接受你的规划并付诸实践。", + "10": "除此之外,似乎没人研究过每块$(l:items/amethyst)$(item)紫水晶/$到底含有$(italic)多少/$媒质。我只能得出,一个$(l:items/amethyst)$(item)紫水晶碎片/$大概和五个$(l:items/amethyst)$(item)紫水晶粉/$相当,而一个$(l:items/amethyst)$(item)充能紫水晶/$大概与十个相当。$(br2)而且奇怪之处在于$(l:items/amethyst)$(item)紫水晶/$的其余形态均不适于施放$(hex)咒术/$。推测是因为紫水晶块和晶簇固化程度过高,导致其无法被轻易拆散为$(media)媒质/$。", + "11": "还需格外注意的是每次操作会在执行时立刻消耗其所需的$(media)媒质/$,而非在整个咒术结束时消耗。而且,一次操作会消耗一个物品,如只需要一个$(l:items/amethyst)$(item)紫水晶粉/$量的$(media)媒质/$的操作也会消耗一个$(l:items/amethyst)$(item)充能紫水晶/$,前提是物品栏里只有充能紫水晶。$(br2)因此,将紫水晶粉碎是个不错的点子。勤俭节约,吃穿不缺。", + "12": "还要注意物品栏内一定要有足够的紫水晶。一些古代文献提及,自然也会将施法者的意识用作媒质。文献也有提到那种感觉很糟糕但又奇怪地让人兴奋,“……热烈地溶解入光与能量中……”。也许这就是为何先前的研究者们最终都疯了。我完全不觉得为力量而放弃部分意识会对身体有任何$(italic)好处/$。", + "13": "但也许确实有东西和文献所记述的有所不同了。在我的实验中,我从没遇到过文献中提到的情况。如果$(media)媒质/$不够了,法术只是单纯地施放不了,就好像有什么屏障在防止我被伤到一样。$(br2)对此刨根问底肯定能得出些有意思的结论,但现在就暂时认为它会保护我吧。", + "14": "我还发现了一则趣闻,主要讲述为何许多魔法研究者都近乎疯癫,是不错的休闲趣味读物,虽然对不上我这里的世界观。$(br2)$(italic)内容警告:部分肉体恐怖与暗示类材料。/$", + "14.link_text": "Goblin Punch", + "15": "最后,法术的影响是有距离限制的,最远大约是距离我 32 格处。若试图影响该范围外的事物,法术便不会生效。$(br2)尽管如此,我可以凭借代表玩家的 iota 在任何地方影响他们。当然影响仅限于玩家本身,若玩家周围的环境超出我的影响范围,那些位置便不受影响。$(br)必须谨慎考虑要不要给别人代表我的 iota。友善的$(hex)咒术师们/$可凭此助你行事,但那些心怀鬼胎的就不好说了。", + }, + vectors: { + "1": "如果要深入研究,就要对向量相关的知识足够熟悉。我整理了些讲解向量知识的资料,以备不理解时之需。$(br2)首先,来一段富有启发性的视频。(译注:此为 B 站官方账号$(l:https://www.bilibili.com/video/BV1ys411472E)网址/$)", + "1.link_text": "3blue1brown", + "2": "此外,似乎操控 $(thing)Psi 能量/$的魔法师们(又称“术式师”)有一些对学徒理解向量大有裨益的课程,虽然他们命名能力不强。我会在后页冒昧地提供前往他们课程的链接。$(br2)他们使用了另一套术语:$(li)“功能块”对应“操作”。$(li)“启动式”对应“法术”。$(li)“运算符”则对应不是法术的操作。", + "3": "链接在此。", + "3.link_text": "Psi Codex", + }, - "stack.1": "$(thing)栈/$,又被称为“后进先出表(LIFO)”,是计算机科学中的概念。简而言之,栈是一种只能与最近交互过的事物交互的事物的集合。$(br2)想象一摞盘子,新盘子会被放在其顶部。若想要与放在这摞盘子中间的某个盘子交互,你就必须先将它上面的所有盘子拿开才行。", - "stack.2": "因为栈非常简单,所以与其的交互种类屈指可数:$(li)$(italic)向其中加入事物/$,称为“入栈”/“push”。$(li)$(italic)移除最后加入的元素/$,称为“出栈”/“pop”。$(li)$(italic)校验或修改最后加入的元素/$,称为“检视”/“peek”。$(br)我们将最后加入的元素称为“栈顶元素”,就和盘子的类比差不多。$(p)举个例子,如果向栈压入 1 号元素,然后压入 2 号元素,然后弹出一个元素,这时栈顶元素便是 1 号元素。", - "stack.3": "操作(大致)都只能与栈以如上几种方式交互。它们会弹出部分它们所期望的 iota(称为“参数”或“实参”或“形参”),对它们进行处理,然后压入一定数目的结果。$(br2)当然,某些操作(例如$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$)可能不会弹出任何元素,而某些操作(尤其是法术)可能不会压入任何元素。", - "stack.4": "更复杂的操作都可用若干次入栈、出栈或检视操作实现。例如,$(l:patterns/stackmanip#hexcasting:swap)$(action)弄臣之策略/$交换栈顶两个元素的顺序。这可认为是弹出两个 iota 并以相反顺序重新压入。又例如,$(l:patterns/stackmanip#hexcasting:duplicate)$(action)双子之分解/$会复制栈顶元素,也即其检视栈顶并压入一个一样的元素。", + mishaps: { + "1": "不幸的是,我(还)不是一个完美的生物。我经常会在研究中和施放$(hex)咒术/$时犯错。比如说,绘制错图案,或是对错误的 iota 进行操作。而自然一般不会宽容我的错误,从而导致$(italic)事故/$。", + "2": "导致事故的图案会在网格中发红光。根据事故的类型,我能大致推断出其造成的有害后果。同时会有一簇红色与各色混合的火花四散开去,这主要是处理不当的$(media)媒质/$凝结为某种颜色的光所致。", + "3": "而幸运的是,虽然所有事故导致的有害效果都$(italic)很烦人/$,但也都不会导致长期毁灭性后果。在哪里跌倒,就要在哪里站起来,然后继续前进……当然也可以换一条更好走的路。$(br2)我整理的所有事故如下所述。", + "invalid_pattern.title": "无效图案", + invalid_pattern: "绘制的图案不对应任何操作。$(br2)产生黄色火花,并向栈顶压入一个$(l:casting/influences)$(action)垃圾/$。", - "naming.1": "古人给各类操作命的名确实很奇特,但我认为其中总有某种命名逻辑。$(br2)似乎各式操作均被分入了若干组,组内的操作命名方式类似——以其要移除和加入的 iota 个数命名。", - "naming.2": "$(li)$(thing)精思/$不出栈,入栈一个 iota。$(li)$(thing)纯化/$出栈一个,入栈一个。$(li)$(thing)馏化/$出栈两个,入栈一个。$(li)$(thing)提整/$出栈三个或更多,入栈一个。$(li)$(thing)分解/$出栈一个,入栈两个。$(li)$(thing)拆解/$出栈一个,入栈三个或更多。$(li)$(thing)策略/$则对应其余出栈入栈操作(或会以某种方式重新排列栈的操作)。", - "naming.3": "法术不受此命名法约束,而是以其效用命名。毕竟,能叫它$(l:patterns/spells/basic#hexcasting:explode)$(action)爆炸/$,为何还要起个像是“$(action)爆破兵之策略/$”的名字呢?", + "not_enough_iotas.title": "Iota 过少", + not_enough_iotas: "该操作需要比当前栈中元素数还多的 iota。$(br2)产生淡灰色火花,并向栈顶压入缺少的参数的数量个$(l:casting/influences)$(action)垃圾/$。", + "incorrect_iota.title": "Iota 错误", + incorrect_iota: "该操作需要一种特定类型的 iota 作为参数,而实际 iota 无效。如果有多个 iota 无效,错误信息只会提示最靠近栈底的错误。$(br2)产生深灰色火花,无效的 iota 会被替换为$(l:casting/influences)$(action)垃圾/$。", - "influences.1": "虚指非常……奇怪,至少能这么说。大部分 iota 都代表着世界中的某个实际事物,而虚指则代表着某些更为……抽象或无形的事物。$(br2)例如,我将一种虚指命名为 $(l:casting/influences)$(thing)Null/$,它似乎代表着“无”这种状态。当一个问题没有确切的答案时就会出现一个 Null,比如对着天空执行$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$。", - "influences.2": "此外,我还发现了一组四个奇特的虚指,命名为$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$、$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$、$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$和$(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)消解/$。它们似乎同时有着图案和虚指的性质,但实际作用却和这两者都不一样。我能用它们将图案作为 iota 加到栈中,而非执行图案对应的操作。$(l:patterns/patterns_as_iotas)相关笔记在此/$。", - "influences.3": "最后,似乎还有一组无限个虚指,它们都代表着一团紊乱的$(media)媒质/$。我称其为$(l:casting/influences)$(action)垃圾/$,因为它们毫无用处。它们似乎会因$(l:casting/mishaps)$(thing)事故/$而在栈中任意位置出现,呈现出来的则是一团乱麻。", + "vector_out_of_range.title": "向量越界", + vector_out_of_range: "该操作试图影响在我影响范围之外的某一位置。$(br2)产生品红色火花,我手中的物品将会掉落并飞向对应位置。", + "entity_out_of_range.title": "实体越界", + entity_out_of_range: "该操作试图影响在我影响范围之外的某一实体。$(br2)产生粉红色火花,我手中的物品将会掉落并飞向对应实体。", - "mishaps2.1": "我发现了若干骇人的新事故。我绝不能向它们屈服。", - "mishaps2.bad_mindflay.title": "惰性剥离", - "mishaps2.bad_mindflay": "试图剥离已被剥除意识的生物的意识,或是试图剥离不适用于目标方块的生物的意识。$(br2)产生暗绿色火花,并杀死对应生物。倘若被村民看到了,他们应该不会对此有什么好评价。", - "mishaps2.no_circle.title": "缺失法术环", - "mishaps2.no_circle": "试图直接执行只能在法术环内执行的操作。$(br2)产生淡蓝色火花,并将我物品栏中所有物品散落在地。", - "mishaps2.no_record.title": "缺失阿卡夏记录", - "mishaps2.no_record": "试图在无对应方块处访问$(l:greatwork/akashiclib)$(item)阿卡夏记录/$。$(br2)产生紫色火花,并消耗部分经验。", + "entity_immune.title": "实体免疫", + entity_immune: "该操作试图影响某不会受其影响的实体。$(br2)产生蓝色火花,我手中的物品将会掉落并飞向对应实体。", + "math_error.title": "数学错误", + math_error: "该操作违背了数学规律,例如试图除以零。$(br2)产生红色火花,压入一个$(l:casting/influences)$(action)垃圾/$,并且我的意识会被销蚀,扣去我当时生命力的一半。自然似乎对这种举动深感冒犯,而后便会报复性地惩罚$(italic)我/$。", - "_comment": "Items", + "incorrect_item.title": "物品错误", + incorrect_item: "该操作需要某种物品,而我所提供的物品不合适。$(br2)产生棕色火花。如果在手中持有对应物品,则该物品会掉落在地。如果对应物品以实体形式存在,则其会被击飞。", + "incorrect_block.title": "方块错误", + incorrect_block: "该操作需在目标位置存在某种方块,而该位置实际存在的方块不合适。$(br2)产生亮绿色火花,并在对应位置产生一次爆炸。这种爆炸似乎不会伤害到我、世界或是任何其他事物。就是挺吓人的。", - "amethyst.dust": "在晶洞里破坏紫水晶会产生三种形态的紫水晶。紫水晶量最少的物品是一堆闪着光的粉末,含有较少量的$(media)媒质/$。", - "amethyst.shard": "第二种是紫水晶的碎片,也就是不是$(hex)咒术师/$的人们最为熟悉的。这种碎片大约含有 5 个$(l:items/amethyst)$(item)紫水晶粉/$量的$(media)媒质/$。", - "amethyst.crystal": "最后,偶尔能发现充盈着能量的大型水晶。它们含有大约 10 个$(l:items/amethyst)$(item)紫水晶粉/$(也即两个$(l:items/amethyst)$(item)紫水晶碎片/$)量的$(media)媒质/$。", - "amethyst.lore": "$(italic)老人叹了口气,对着火炉伸出了一只手。他回想起自己对周边山脉的记忆,从那些土地中汲取能量——就像他在泰瑞西亚城从札夫拿、河鼓、主教还有象牙塔中的其它法师身上学到的那样。他集中精神,从柴薪中升起的火焰摇摆扭动,最终形成了一抹温柔的微笑。/$", + "retrospection.title": "反思过急", + retrospection: "试图在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$前绘制$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$。$(br2)产生橙色火花,并压入一个$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$对应的图案。", + "too_deep.title": "钻研过深", + too_deep: "在一个法术内以元运行方式运行过多法术。$(br2)产生暗蓝色火花,并使我窒息。", - "staff.1": "$(l:items/staff)$(item)法杖/$是我尝试施放各类$(hex)咒术/$的起点。手持时按下$(thing)$(k:use)/$,就算开始了施放$(hex)咒术/$的过程。然后单击拖动绘制图案就可以了。$(br2)它还是和单纯把一小块$(media)媒质/$放在木棍的一端有所不同,但不管怎么说,能用就行。", - "staff.crafting.header": "法杖", - "staff.crafting.desc": "$(italic)施法不规范,自己两行泪。/$", + "true_name.title": "违犯他人", + true_name: "试图在某种永久性媒介中$(l:patterns/readwrite#hexcasting:write)$(action)存储/$代表另一位玩家的 iota。$(br2)产生黑色火花,并致盲大约一分钟。", + "disabled.title": "禁用操作", + disabled: "试图执行被服务器管理员禁用的操作。$(br2)产生黑色火花。", - "lens.1": "$(media)媒质/$在某些特殊情况下能和任何信息作用而产生奇异效果。而若是在玻璃上覆上薄薄一层媒质,就能……生出些独特的见地。$(br2)手持$(l:items/lens)$(item)探知透镜/$观察某些方块,就能给出一些额外信息。", - "lens.2": "例如,看向$(item)红石粉/$会给出其信号强度。我猜测随着研究的深入,还能发现新的额外信息。$(br2)此外,用$(l:items/staff)$(item)法杖/$施法时,在另一只手持有探知透镜就能缩短点与点的间距,从而能在网格上绘制更多图案。$(br2)我还可以把它当单片眼镜戴在头上。这样做能显示额外信息,但不会缩小网格。但没关系,总有两全其美的办法……", - "lens.crafting.desc": "$(italic)你必须学会……探知你所看到的事物。/$", + "other.title": "灾难性故障", + other: "模组中的漏洞产生的无效类型的 iota 或是其他错误导致法术失效。$(l:https://github.com/gamma-delta/HexMod/issues)请报告该漏洞!/$$(br2)产生黑色火花。", + }, + stack: { + "1": "$(thing)栈/$,又被称为“后进先出表(LIFO)”,是计算机科学中的概念。简而言之,栈是一种只能与最近交互过的事物交互的事物的集合。$(br2)想象一摞盘子,新盘子会被放在其顶部。若想要与放在这摞盘子中间的某个盘子交互,你就必须先将它上面的所有盘子拿开才行。", + "2": "因为栈非常简单,所以与其的交互种类屈指可数:$(li)$(italic)向其中加入事物/$,称为“入栈”/“push”。$(li)$(italic)移除最后加入的元素/$,称为“出栈”/“pop”。$(li)$(italic)校验或修改最后加入的元素/$,称为“检视”/“peek”。$(br)我们将最后加入的元素称为“栈顶元素”,就和盘子的类比差不多。$(p)举个例子,如果向栈压入 1 号元素,然后压入 2 号元素,然后弹出一个元素,这时栈顶元素便是 1 号元素。", + "3": "操作(大致)都只能与栈以如上几种方式交互。它们会弹出部分它们所期望的 iota(称为“参数”或“实参”或“形参”),对它们进行处理,然后压入一定数目的结果。$(br2)当然,某些操作(例如$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$)可能不会弹出任何元素,而某些操作(尤其是法术)可能不会压入任何元素。", + "4": "更复杂的操作都可用若干次入栈、出栈或检视操作实现。例如,$(l:patterns/stackmanip#hexcasting:swap)$(action)弄臣之策略/$交换栈顶两个元素的顺序。这可认为是弹出两个 iota 并以相反顺序重新压入。又例如,$(l:patterns/stackmanip#hexcasting:duplicate)$(action)双子之分解/$会复制栈顶元素,也即其检视栈顶并压入一个一样的元素。", + }, - "thought_knot.1": "健忘者常在手指上缠绕丝线以助记忆。我也坚信我的咒法技艺能活用这种做法。以特定方式绑出的绳结应该能稳定存储一个 iota,且能独立于栈存在。$(br2)我将其称为“$(item)结念绳/$”。", - "thought_knot.2": "在初合成时,它的存储空间内没有 iota。在另一只手持有$(item)结念绳/$时,绘制$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$就会将栈顶 iota 移除并存入$(item)结念绳/$。绘制$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$则会将$(item)结念绳/$中 iota 复制出来并压入栈顶。$(br2)一旦将 iota 写入$(item)结念绳/$,绳结本身便不再能解开。其中 iota 可被随意读取,但不可被清除或覆写。不过还好,这些绳结十分易得。", - "thought_knot.3": "另外,如果我在$(item)结念绳/$中写入一个实体,然后在该实体死亡或消失后尝试复制,则$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$会压入一个 $(l:casting/influences)$(thing)Null/$。", - "thought_knot.crafting.desc": "$(italic)别人要是看到你带着块牌子,上面写着“本人风度翩翩,品貌非凡”,你又会作何感想?/$", + naming: { + "1": "古人给各类操作命的名确实很奇特,但我认为其中总有某种命名逻辑。$(br2)似乎各式操作均被分入了若干组,组内的操作命名方式类似——以其要移除和加入的 iota 个数命名。", + "2": "$(li)$(thing)精思/$不出栈,入栈一个 iota。$(li)$(thing)纯化/$出栈一个,入栈一个。$(li)$(thing)馏化/$出栈两个,入栈一个。$(li)$(thing)提整/$出栈三个或更多,入栈一个。$(li)$(thing)分解/$出栈一个,入栈两个。$(li)$(thing)拆解/$出栈一个,入栈三个或更多。$(li)$(thing)策略/$则对应其余出栈入栈操作(或会以某种方式重新排列栈的操作)。", + "3": "法术不受此命名法约束,而是以其效用命名。毕竟,能叫它$(l:patterns/spells/basic#hexcasting:explode)$(action)爆炸/$,为何还要起个像是“$(action)爆破兵之策略/$”的名字呢?", + }, + influences: { + "1": "虚指非常……奇怪,至少能这么说。大部分 iota 都代表着世界中的某个实际事物,而虚指则代表着某些更为……抽象或无形的事物。$(br2)例如,我将一种虚指命名为 $(l:casting/influences)$(thing)Null/$,它似乎代表着“无”这种状态。当一个问题没有确切的答案时就会出现一个 Null,比如对着天空执行$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$。", + "2": "此外,我还发现了一组四个奇特的虚指,命名为$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$、$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$、$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$和$(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)消解/$。它们似乎同时有着图案和虚指的性质,但实际作用却和这两者都不一样。我能用它们将图案作为 iota 加到栈中,而非执行图案对应的操作。$(l:patterns/patterns_as_iotas)相关笔记在此/$。", + "3": "最后,似乎还有一组无限个虚指,它们都代表着一团紊乱的$(media)媒质/$。我称其为$(l:casting/influences)$(action)垃圾/$,因为它们毫无用处。它们似乎会因$(l:casting/mishaps)$(thing)事故/$而在栈中任意位置出现,呈现出来的则是一团乱麻。", + }, - "focus.1": "$(l:items/focus)$(item)核心/$能存储一个 iota。$(br2)合成核心时,其默认存有 $(l:casting/influences)$(thing)Null/$ 这一虚指。在另一只手持有$(l:items/focus)$(item)核心/$时,可以用$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$将栈顶元素弹出栈并写入其中。而使用$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$就会将$(l:items/focus)$(item)核心/$中的 iota 复制出来并压入栈中。", - "focus.2": "我突然想到,我可以在$(l:items/focus)$(item)核心/$中写入一个由图案组成的列表,将它们复制出来后用$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$运行就行了。这样就有了施放复杂法术和施放某法术其中一部分的简单方法,不用再在每次使用时全部重画一遍图案了。$(br2)它可以用作一个简易版$(l:items/hexcasting#artifact)$(item)造物/$,但我觉得将某些常用图案“组合”存到$(l:items/focus)$(item)核心/$中更方便,比如返回我在看哪里的图案组合。", - "focus.3": "另外,如果我在$(l:items/focus)$(item)核心/$中写入一个实体,然后在该实体死亡或消失后尝试复制,则$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$会压入一个 $(l:casting/influences)$(thing)Null/$。$(br2)最后,如果不希望$(l:items/focus)$(item)核心/$被覆写,可以将其与$(item)蜜脾/$合成来蜡封,这时对其使用$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$就会失败。$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)清除物品/$则会将蜡封和其内容物一并清除。", - "focus.crafting.desc": "$(italic)毒苹果,毒虫子。/$", + mishaps2: { + "1": "我发现了若干骇人的新事故。我绝不能向它们屈服。", + + "bad_mindflay.title": "惰性剥离", + bad_mindflay: "试图剥离已被剥除意识的生物的意识,或是试图剥离不适用于目标方块的生物的意识。$(br2)产生暗绿色火花,并杀死对应生物。倘若被村民看到了,他们应该不会对此有什么好评价。", + + "no_circle.title": "缺失法术环", + no_circle: "试图直接执行只能在法术环内执行的操作。$(br2)产生淡蓝色火花,并将我物品栏中所有物品散落在地。", + + "no_record.title": "缺失阿卡夏记录", + no_record: "试图在无对应方块处访问$(l:greatwork/akashiclib)$(item)阿卡夏记录/$。$(br2)产生紫色火花,并消耗部分经验。", + }, - "abacus.1": "虽然有$(l:patterns/numbers)$(action)对应数的图案/$,但它们确实……过于复杂。$(br2)幸运的是,从前研究这门学问的大师们发明了一个名为“$(l:items/abacus)$(item)算盘/$”的天才般的装置,它们能极为方便地表示数。只需要在其上设定好,然后用$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$把值读出即可,就和读出$(l:items/focus)$(item)核心/$中 iota 的操作一样。", - "abacus.2": "操作方法是潜行时手持算盘滚动滚轮。如果是主手持算盘,则其数值会以 1 增加或减少,按住 Control 或 Command 时则以 10。若是副手持算盘,则其数值会以 0.1 增加或减少,按住 Control 或 Command 时则以 0.001。$(br2)也可以在潜行时手持算盘右击以重设为 0。", - "abacus.crafting.desc": "$(italic)数学?那是给聪明人用的!/$", + // Items + amethyst: { + dust: "在晶洞里破坏紫水晶会产生三种形态的紫水晶。紫水晶量最少的物品是一堆闪着光的粉末,含有较少量的$(media)媒质/$。", + shard: "第二种是紫水晶的碎片,也就是不是$(hex)咒术师/$的人们最为熟悉的。这种碎片大约含有 5 个$(l:items/amethyst)$(item)紫水晶粉/$量的$(media)媒质/$。", + crystal: "最后,偶尔能发现充盈着能量的大型水晶。它们含有大约 10 个$(l:items/amethyst)$(item)紫水晶粉/$(也即两个$(l:items/amethyst)$(item)紫水晶碎片/$)量的$(media)媒质/$。", + lore: "$(italic)老人叹了口气,对着火炉伸出了一只手。他回想起自己对周边山脉的记忆,从那些土地中汲取能量——就像他在泰瑞西亚城从札夫拿、河鼓、主教还有象牙塔中的其它法师身上学到的那样。他集中精神,从柴薪中升起的火焰摇摆扭动,最终形成了一抹温柔的微笑。/$", + }, - "spellbook.1": "$(l:items/spellbook)$(item)法术书/$是我研究成果的结晶。它像是一座满是$(l:items/focus)$(item)核心/$的图书馆。准确的说是最多能存放 $(thing)64/$ 个。$(br2)每一页都能存储一个 iota。手持法术书时,可在潜行时用滚轮自由选择当前活动页(存储和复制 iota 的目标页),也可在施放$(hex)咒术/$时副手手持,并直接用滚轮改变活动页。", - "spellbook.2": "就像$(l:items/focus)$(item)核心/$一样,法术书也有防覆写机制。将其和$(item)蜜脾/$合成就能给当前页上漆,从而防止$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$改变其内容。而清除也和$(l:items/focus)$(item)核心/$一样,使用$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)清除物品/$就能同时去除漆封和当前页的内容。$(br2)也可在铁砧上改变当前书页的名字,方便查找。", - "spellbook.crafting.desc": "$(italic)巫师们喜欢阅读。大多数巫师经常阅读,而且睡前一定要读些什么确实是判断一个人是不是巫师的有效方法。/$", + staff: { + "1": "$(l:items/staff)$(item)法杖/$是我尝试施放各类$(hex)咒术/$的起点。手持时按下$(thing)$(k:use)/$,就算开始了施放$(hex)咒术/$的过程。然后单击拖动绘制图案就可以了。$(br2)它还是和单纯把一小块$(media)媒质/$放在木棍的一端有所不同,但不管怎么说,能用就行。", + "crafting.header": "法杖", + "crafting.desc": "$(italic)施法不规范,自己两行泪。/$", + }, + lens: { + "1": "$(media)媒质/$在某些特殊情况下能和任何信息作用而产生奇异效果。而若是在玻璃上覆上薄薄一层媒质,就能……生出些独特的见地。$(br2)手持$(l:items/lens)$(item)探知透镜/$观察某些方块,就能给出一些额外信息。", + "2": "例如,看向$(item)红石粉/$会给出其信号强度。我猜测随着研究的深入,还能发现新的额外信息。$(br2)此外,用$(l:items/staff)$(item)法杖/$施法时,在另一只手持有探知透镜就能缩短点与点的间距,从而能在网格上绘制更多图案。$(br2)我还可以把它当单片眼镜戴在头上。这样做能显示额外信息,但不会缩小网格。但没关系,总有两全其美的办法……", + "crafting.desc": "$(italic)你必须学会……探知你所看到的事物。/$", + }, - "scroll.1": "$(l:items/scroll)$(item)卷轴/$能让分享图案画法变得十分方便。可用$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$将图案复制上去,然后该图案就会在物品提示栏内出现。$(br2)也可以将其放在墙上用作装饰或用于教学。就和画一样,卷轴也分大小,从 1x1 到 3x3 都有。对挂在墙上的卷轴使用$(l:items/amethyst)$(item)紫水晶粉/$就能显示绘制的笔画顺序。", - "scroll.2": "此外,我还在地牢和要塞里发现了所谓$(l:items/scroll)$(item)远古卷轴/$。它们记载了一些特殊法术的笔画顺序——$(thing)卓越法术/$,传闻是强大到凡人的意识无法承受的法术……$(br2)但如果那些“凡人”施放不了,那我觉得他们就不应该知道这些法术的存在。", - "scroll.crafting.desc": "$(italic)我用锐利的笔和学生的鲜血在洁白的纸上书写,探知着他们的秘密。/$", + thought_knot: { + "1": "健忘者常在手指上缠绕丝线以助记忆。我也坚信我的咒法技艺能活用这种做法。以特定方式绑出的绳结应该能稳定存储一个 iota,且能独立于栈存在。$(br2)我将其称为“$(item)结念绳/$”。", + "2": "在初合成时,它的存储空间内没有 iota。在另一只手持有$(item)结念绳/$时,绘制$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$就会将栈顶 iota 移除并存入$(item)结念绳/$。绘制$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$则会将$(item)结念绳/$中 iota 复制出来并压入栈顶。$(br2)一旦将 iota 写入$(item)结念绳/$,绳结本身便不再能解开。其中 iota 可被随意读取,但不可被清除或覆写。不过还好,这些绳结十分易得。", + "3": "另外,如果我在$(item)结念绳/$中写入一个实体,然后在该实体死亡或消失后尝试复制,则$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$会压入一个 $(l:casting/influences)$(thing)Null/$。", + "crafting.desc": "$(italic)别人要是看到你带着块牌子,上面写着“本人风度翩翩,品貌非凡”,你又会作何感想?/$", + }, + focus: { + "1": "$(l:items/focus)$(item)核心/$能存储一个 iota。$(br2)合成核心时,其默认存有 $(l:casting/influences)$(thing)Null/$ 这一虚指。在另一只手持有$(l:items/focus)$(item)核心/$时,可以用$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$将栈顶元素弹出栈并写入其中。而使用$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$就会将$(l:items/focus)$(item)核心/$中的 iota 复制出来并压入栈中。", + "2": "我突然想到,我可以在$(l:items/focus)$(item)核心/$中写入一个由图案组成的列表,将它们复制出来后用$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$运行就行了。这样就有了施放复杂法术和施放某法术其中一部分的简单方法,不用再在每次使用时全部重画一遍图案了。$(br2)它可以用作一个简易版$(l:items/hexcasting#artifact)$(item)造物/$,但我觉得将某些常用图案“组合”存到$(l:items/focus)$(item)核心/$中更方便,比如返回我在看哪里的图案组合。", + "3": "另外,如果我在$(l:items/focus)$(item)核心/$中写入一个实体,然后在该实体死亡或消失后尝试复制,则$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$会压入一个 $(l:casting/influences)$(thing)Null/$。$(br2)最后,如果不希望$(l:items/focus)$(item)核心/$被覆写,可以将其与$(item)蜜脾/$合成来蜡封,这时对其使用$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$就会失败。$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)清除物品/$则会将蜡封和其内容物一并清除。", + "crafting.desc": "$(italic)毒苹果,毒虫子。/$", + }, - "slate.1": "$(l:items/slate)$(item)石板/$和$(l:items/scroll)$(item)卷轴/$类似,可以将图案复制上去并放置在世界中以展示该图案。$(br2)然而,我曾读到过某些粗略的故事,它们记述了一种用$(l:items/slate)$(item)石板/$组成的伟大结构,用来施放$(l:items/staff)$(item)法杖/$无法施放的$(l:greatwork/spellcircles)$(thing)伟大仪式/$。", - "slate.2": "也许我将来就会碰到这些知识。但就现在而言,我觉得它们非常适合装饰。$(br2)至少它们可被放在方块的任何一面,这点和$(l:items/scroll)$(item)卷轴/$不同。", - "slate.crafting.desc": "$(italic)这就是横竖撇捺了。要记牢。/$", - "slate.3": "我还发现了其他类型的$(l:items/slate)$(item)石板/$,它们并未刻有图案,但似乎内嵌有某种……奇怪的……异常构造。单单思考它们就让我头脑胀痛,就好像我的思维被它们的结构折弯,随着它们的回路流动,迷失在它们迷宫般的深渊中,迷失在迷失在迷失在导向到处理为——$(br2)……我的思维差点就被搅乱了。还是之后再做相关研究吧。", + abacus: { + "1": "虽然有$(l:patterns/numbers)$(action)对应数的图案/$,但它们确实……过于复杂。$(br2)幸运的是,从前研究这门学问的大师们发明了一个名为“$(l:items/abacus)$(item)算盘/$”的天才般的装置,它们能极为方便地表示数。只需要在其上设定好,然后用$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$把值读出即可,就和读出$(l:items/focus)$(item)核心/$中 iota 的操作一样。", + "2": "操作方法是潜行时手持算盘滚动滚轮。如果是主手持算盘,则其数值会以 1 增加或减少,按住 Control 或 Command 时则以 10。若是副手持算盘,则其数值会以 0.1 增加或减少,按住 Control 或 Command 时则以 0.001。$(br2)也可以在潜行时手持算盘右击以重设为 0。", + "crafting.desc": "$(italic)数学?那是给聪明人用的!/$", + }, + spellbook: { + "1": "$(l:items/spellbook)$(item)法术书/$是我研究成果的结晶。它像是一座满是$(l:items/focus)$(item)核心/$的图书馆。准确的说是最多能存放 $(thing)64/$ 个。$(br2)每一页都能存储一个 iota。手持法术书时,可在潜行时用滚轮自由选择当前活动页(存储和复制 iota 的目标页),也可在施放$(hex)咒术/$时副手手持,并直接用滚轮改变活动页。", + "2": "就像$(l:items/focus)$(item)核心/$一样,法术书也有防覆写机制。将其和$(item)蜜脾/$合成就能给当前页上漆,从而防止$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$改变其内容。而清除也和$(l:items/focus)$(item)核心/$一样,使用$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)清除物品/$就能同时去除漆封和当前页的内容。$(br2)也可在铁砧上改变当前书页的名字,方便查找。", + "crafting.desc": "$(italic)巫师们喜欢阅读。大多数巫师经常阅读,而且睡前一定要读些什么确实是判断一个人是不是巫师的有效方法。/$", + }, - "hexcasting.1": "虽然用$(l:items/staff)$(item)法杖/$直接施放$(hex)咒术/$确实足够灵活易用,但仅凭法杖重复施放同一种咒术就很烦人了。如果能将某些常用法术存储起来后续直接使用,就再方便不过了,同时也方便我与朋友分享这些$(hex)咒术/$。", - "hexcasting.2": "以下三种魔法物品就能做到这点:$(l:items/hexcasting)$(item)杂件/$,$(l:items/hexcasting)$(item)缀品/$和$(l:items/hexcasting)$(item)造物/$。所有三种物品都能存储$(hex)咒术/$对应的所有图案,且都有一个用来存储$(media)媒质/$的小电池。$(br2)手持时按下$(thing)$(k:use)/$就会消耗其内含的媒质像用法杖施法那样运行其中图案。", - "hexcasting.3": "每种物品都有自己的特点:$(br2)$(l:items/hexcasting)$(item)杂件/$很脆弱,在耗尽其内含的$(media)媒质/$后就会损坏,$(italic)不可/$重新充能。$(br2)$(l:items/hexcasting)$(item)缀品/$则只要还有剩余的$(media)媒质/$就能一直施法,但媒质耗尽后若不重新充能就无法使用。", - "hexcasting.4": "$(l:items/hexcasting)$(item)造物/$是三者之中最强力的——其内含的$(media)媒质/$耗尽后,它们还能消耗持有者物品栏内的$(l:items/amethyst)$(item)紫水晶/$来施放$(hex)咒术/$,就和用$(l:items/staff)$(item)法杖/$施法一样。不过这也意味着,一旦$(l:items/amethyst)$(item)紫水晶/$不够,继续施法可能会消耗施法者的意识。$(br2)而在工作台中合成魔法物品后,必须将$(hex)咒术/$以适合对应物品的法术写入其中。(也没什么其他办法。)$(l:patterns/spells/hexcasting)对应的图案详情见此。/$", - "hexcasting.5": "每次写入都需要栈上有一个实体和一个由图案构成的列表。这个实体必须是一个含有$(media)媒质/$的物品实体(也即掉落在地上的$(l:items/amethyst)$(item)紫水晶/$)。该实体会变成该魔法物品的内部电池。$(br2)似乎电池中的$(media)媒质/$不会像用$(l:items/staff)$(item)法杖/$施法那样以物品组为单位消耗。其中的$(media)媒质/$实际上会“溶解”入一个连续的能量池。因此,当物品中存有会消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$中媒质来施放的$(hex)咒术/$时,含有相当于 1 个$(l:items/amethyst)$(item)充能紫水晶/$中媒质的电池能支持施放该咒术 10 次。", - "hexcasting.crafting.desc": "$(italic)我们常说一句话,“魔法从不……”。它从不“就是行得通”,它不会随你操控。你不能光靠所谓魔法扔个火球,烧顿晚饭,或是把一帮劫匪变成青蛙和蜗牛。/$", + scroll: { + "1": "$(l:items/scroll)$(item)卷轴/$能让分享图案画法变得十分方便。可用$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$将图案复制上去,然后该图案就会在物品提示栏内出现。$(br2)也可以将其放在墙上用作装饰或用于教学。就和画一样,卷轴也分大小,从 1x1 到 3x3 都有。对挂在墙上的卷轴使用$(l:items/amethyst)$(item)紫水晶粉/$就能显示绘制的笔画顺序。", + "2": "此外,我还在地牢和要塞里发现了所谓$(l:items/scroll)$(item)远古卷轴/$。它们记载了一些特殊法术的笔画顺序——$(thing)卓越法术/$,传闻是强大到凡人的意识无法承受的法术……$(br2)但如果那些“凡人”施放不了,那我觉得他们就不应该知道这些法术的存在。", + "crafting.desc": "$(italic)我用锐利的笔和学生的鲜血在洁白的纸上书写,探知着他们的秘密。/$", + }, + slate: { + "1": "$(l:items/slate)$(item)石板/$和$(l:items/scroll)$(item)卷轴/$类似,可以将图案复制上去并放置在世界中以展示该图案。$(br2)然而,我曾读到过某些粗略的故事,它们记述了一种用$(l:items/slate)$(item)石板/$组成的伟大结构,用来施放$(l:items/staff)$(item)法杖/$无法施放的$(l:greatwork/spellcircles)$(thing)伟大仪式/$。", + "2": "也许我将来就会碰到这些知识。但就现在而言,我觉得它们非常适合装饰。$(br2)至少它们可被放在方块的任何一面,这点和$(l:items/scroll)$(item)卷轴/$不同。", + "crafting.desc": "$(italic)这就是横竖撇捺了。要记牢。/$", + "3": "我还发现了其他类型的$(l:items/slate)$(item)石板/$,它们并未刻有图案,但似乎内嵌有某种……奇怪的……异常构造。单单思考它们就让我头脑胀痛,就好像我的思维被它们的结构折弯,随着它们的回路流动,迷失在它们迷宫般的深渊中,迷失在迷失在迷失在导向到处理为——$(br2)……我的思维差点就被搅乱了。还是之后再做相关研究吧。", + }, - "phials.1": "我觉得……自然不愿意给我的研究留些余量的做法,令人非常不快。如果我手头只有$(l:items/amethyst)$(item)充能紫水晶/$,就算是最为基础的$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$也会消耗一整块水晶,没利用的$(media)媒质/$就被浪费了。$(br2)幸运的是,我找到了一种解决问题的方法。", - "phials.2": "我找到了记载着一种注入了$(media)媒质/$的$(item)玻璃瓶/$的卷轴。施放$(hex)咒术/$时,法术会从这种试剂瓶中汲取$(media)媒质/$。液态的$(media)媒质/$便于按量使用,不会有媒质被浪费。它就和$(l:items/hexcasting)$(item)缀品/$的内部电池差不多,也一样可以用$(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)重新充能/$补充媒质。", - "phials.3": "而不幸的是,用于$(italic)制作/$这种试剂瓶的技艺已经散佚了。我确实发现了$(l:patterns/great_spells/make_battery#hexcasting:craft/battery)$(thing)对应图案画法的提示/$,但具体绘制方法难以捉摸,怎么都画不对。不过我想只要勤学苦练就能修得真功。现在的话,浪费$(media)媒质/$是没法避免了……$(br2)但我不会一直囿于此处的。", - "phials.desc": "$(italic)玉液琼浆。/$", + // roll credits + hexcasting: { + "1": "虽然用$(l:items/staff)$(item)法杖/$直接施放$(hex)咒术/$确实足够灵活易用,但仅凭法杖重复施放同一种咒术就很烦人了。如果能将某些常用法术存储起来后续直接使用,就再方便不过了,同时也方便我与朋友分享这些$(hex)咒术/$。", + "2": "以下三种魔法物品就能做到这点:$(l:items/hexcasting)$(item)杂件/$,$(l:items/hexcasting)$(item)缀品/$和$(l:items/hexcasting)$(item)造物/$。所有三种物品都能存储$(hex)咒术/$对应的所有图案,且都有一个用来存储$(media)媒质/$的小电池。$(br2)手持时按下$(thing)$(k:use)/$就会消耗其内含的媒质像用法杖施法那样运行其中图案。", + "3": "每种物品都有自己的特点:$(br2)$(l:items/hexcasting)$(item)杂件/$很脆弱,在耗尽其内含的$(media)媒质/$后就会损坏,$(italic)不可/$重新充能。$(br2)$(l:items/hexcasting)$(item)缀品/$则只要还有剩余的$(media)媒质/$就能一直施法,但媒质耗尽后若不重新充能就无法使用。", + "4": "$(l:items/hexcasting)$(item)造物/$是三者之中最强力的——其内含的$(media)媒质/$耗尽后,它们还能消耗持有者物品栏内的$(l:items/amethyst)$(item)紫水晶/$来施放$(hex)咒术/$,就和用$(l:items/staff)$(item)法杖/$施法一样。不过这也意味着,一旦$(l:items/amethyst)$(item)紫水晶/$不够,继续施法可能会消耗施法者的意识。$(br2)而在工作台中合成魔法物品后,必须将$(hex)咒术/$以适合对应物品的法术写入其中。(也没什么其他办法。)$(l:patterns/spells/hexcasting)对应的图案详情见此。/$", + "5": "每次写入都需要栈上有一个实体和一个由图案构成的列表。这个实体必须是一个含有$(media)媒质/$的物品实体(也即掉落在地上的$(l:items/amethyst)$(item)紫水晶/$)。该实体会变成该魔法物品的内部电池。$(br2)似乎电池中的$(media)媒质/$不会像用$(l:items/staff)$(item)法杖/$施法那样以物品组为单位消耗。其中的$(media)媒质/$实际上会“溶解”入一个连续的能量池。因此,当物品中存有会消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$中媒质来施放的$(hex)咒术/$时,含有相当于 1 个$(l:items/amethyst)$(item)充能紫水晶/$中媒质的电池能支持施放该咒术 10 次。", + "crafting.desc": "$(italic)我们常说一句话,“魔法从不……”。它从不“就是行得通”,它不会随你操控。你不能光靠所谓魔法扔个火球,烧顿晚饭,或是把一帮劫匪变成青蛙和蜗牛。/$", + }, + phials: { + "1": "我觉得……自然不愿意给我的研究留些余量的做法,令人非常不快。如果我手头只有$(l:items/amethyst)$(item)充能紫水晶/$,就算是最为基础的$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$也会消耗一整块水晶,没利用的$(media)媒质/$就被浪费了。$(br2)幸运的是,我找到了一种解决问题的方法。", + "2": "我找到了记载着一种注入了$(media)媒质/$的$(item)玻璃瓶/$的卷轴。施放$(hex)咒术/$时,法术会从这种试剂瓶中汲取$(media)媒质/$。液态的$(media)媒质/$便于按量使用,不会有媒质被浪费。它就和$(l:items/hexcasting)$(item)缀品/$的内部电池差不多,也一样可以用$(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)重新充能/$补充媒质。", + "3": "而不幸的是,用于$(italic)制作/$这种试剂瓶的技艺已经散佚了。我确实发现了$(l:patterns/great_spells/make_battery#hexcasting:craft/battery)$(thing)对应图案画法的提示/$,但具体绘制方法难以捉摸,怎么都画不对。不过我想只要勤学苦练就能修得真功。现在的话,浪费$(media)媒质/$是没法避免了……$(br2)但我不会一直囿于此处的。", + desc: "$(italic)玉液琼浆。/$", + }, - "pigments.1": "咒法学的古代研究者们偶尔会用一种颜色来象征自己和自己的$(hex)咒术/$。他们的名字已不可考,但那些颜色留存至今。倘若直接向自然呈上一种特殊的染色剂,就能“……以自然乐见的方式为某人的思维涂上颜色,并使个人代表色产生奇妙的变化。”", - "pigments.2": "我不懂它们的具体原理,但我相信我已琢磨出制造不同颜色染色剂的配方了。若要使用染色剂,可手持之并以另一只手施放$(l:patterns/spells/colorize)$(action)内化染色剂/$,染色剂则会被消耗。$(br2)染色剂似乎会影响我施放$(hex)咒术/$时的$(media)媒质/$火花以及我的$(l:patterns/spells/sentinels)$(thing)哨卫/$的颜色,但影响到其他地方也完全是正常现象。", - "pigments.colored.crafting.header": "色彩染色剂", - "pigments.colored.crafting.desc": "五彩缤纷的染色剂。", - "pigments.speical": "最后还有两种特殊的染色剂。$(item)灵魂闪光染色剂/$的颜色为我所独有,而$(item)空无染色剂/$则会重置为初始状态的紫橙混色。$(br2)$(italic)以及许多还没被研究出来的内在颜色。/$", + pigments: { + "1": "咒法学的古代研究者们偶尔会用一种颜色来象征自己和自己的$(hex)咒术/$。他们的名字已不可考,但那些颜色留存至今。倘若直接向自然呈上一种特殊的染色剂,就能“……以自然乐见的方式为某人的思维涂上颜色,并使个人代表色产生奇妙的变化。”", + "2": "我不懂它们的具体原理,但我相信我已琢磨出制造不同颜色染色剂的配方了。若要使用染色剂,可手持之并以另一只手施放$(l:patterns/spells/colorize)$(action)内化染色剂/$,染色剂则会被消耗。$(br2)染色剂似乎会影响我施放$(hex)咒术/$时的$(media)媒质/$火花以及我的$(l:patterns/spells/sentinels)$(thing)哨卫/$的颜色,但影响到其他地方也完全是正常现象。", + "colored.crafting.header": "色彩染色剂", + "colored.crafting.desc": "五彩缤纷的染色剂。", - "edified.1": "用$(l:patterns/spells/blockworks#hexcasting:edify)$(action)启迪树苗/$就能将部分$(media)媒质/$注入树苗,就能造出$(l:items/edified)$(thing)启迪树/$。它们又高又尖,树皮上有特殊纹理。树叶则有三种不同颜色。", - "edified.2": "我觉得这种木材与$(hex)咒法学/$有着紧密的联系。但就算真有,我也完全找不到这联系在哪。它和普通木头如出一辙,不同只在于颜色不一样。$(br2)就现在而言,它们是很好的装饰用方块。$(br2)当然,也可用斧来去皮。", - "edified.crafting.desc": "$(italic)它们那周身洁白的巨大而光滑的树干,仅凭自己支撑起了茂密的树冠,投下绿荫与静谧。/$", + special: "最后还有两种特殊的染色剂。$(item)灵魂闪光染色剂/$的颜色为我所独有,而$(item)空无染色剂/$则会重置为初始状态的紫橙混色。$(br2)$(italic)以及许多还没被研究出来的内在颜色。/$", + }, + edified: { + "1": "用$(l:patterns/spells/blockworks#hexcasting:edify)$(action)启迪树苗/$就能将部分$(media)媒质/$注入树苗,就能造出$(l:items/edified)$(thing)启迪树/$。它们又高又尖,树皮上有特殊纹理。树叶则有三种不同颜色。", + "2": "我觉得这种木材与$(hex)咒法学/$有着紧密的联系。但就算真有,我也完全找不到这联系在哪。它和普通木头如出一辙,不同只在于颜色不一样。$(br2)就现在而言,它们是很好的装饰用方块。$(br2)当然,也可用斧来去皮。", + "crafting.desc": "$(italic)它们那周身洁白的巨大而光滑的树干,仅凭自己支撑起了茂密的树冠,投下绿荫与静谧。/$", + }, - "jeweler_hammer.1": "在无数次摧毁$(media)媒质/$来源的惨痛经历后,我设计了一把用于防止手滑的工具。$(br2)将脆弱的晶态$(media)媒质/$用作镐的固定结,就得到了$(l:items/jeweler_hammer)$(item)珠宝匠锤/$。它和$(item)铁镐/$在许多方面完全一致,但珠宝匠锤不会破坏任何完整方块。", - "jeweler_hammer.crafting.desc": "$(italic)她小心翼翼地敲开那半块红宝石,让其中的灵体逸散而出。/$", + jeweler_hammer: { + "1": "在无数次摧毁$(media)媒质/$来源的惨痛经历后,我设计了一把用于防止手滑的工具。$(br2)将脆弱的晶态$(media)媒质/$用作镐的固定结,就得到了$(l:items/jeweler_hammer)$(item)珠宝匠锤/$。它和$(item)铁镐/$在许多方面完全一致,但珠宝匠锤不会破坏任何完整方块。", + "crafting.desc": "$(italic)她小心翼翼地敲开那半块红宝石,让其中的灵体逸散而出。/$", + }, + decoration: { + "1": "我在研究过程中发现了些挺美观的建筑方块的其他装饰品。制作方法整理如下。", + "ancient_scroll.crafting.desc": "棕色染料在仿制$(l:items/scroll)$(item)远古卷轴/$这方面表现非常出色。", + "tiles.crafting.desc": "$(l:items/decoration)$(item)紫水晶瓦/$也可在切石机内制作。$(br2)$(l:items/decoration)$(item)紫水晶粉块/$(见后页)受重力影响。", + "sconce.crafting.desc": "$(l:items/decoration)$(item)紫水晶灯台/$会发出光和粒子,并会产生悦耳的“叮铃”声。", + }, - "decoration.1": "我在研究过程中发现了些挺美观的建筑方块的其他装饰品。制作方法整理如下。", - "decoration.ancient_scroll.crafting.desc": "棕色染料在仿制$(l:items/scroll)$(item)远古卷轴/$这方面表现非常出色。", - "decoration.tiles.crafting.desc": "$(l:items/decoration)$(item)紫水晶瓦/$也可在切石机内制作。$(br2)$(l:items/decoration)$(item)紫水晶粉块/$(见后页)受重力影响。", - "decoration.sconce.crafting.desc": "$(l:items/decoration)$(item)紫水晶灯台/$会发出光和粒子,并会产生悦耳的“叮铃”声。", + // The Work - "_comment": "The Work", + the_work: { + "1": "我所见甚多。不可言之物。不可数之物。仅三词就能将我的意识从里翻到外然后把我的大脑抹在头颅黑暗的内壁然后腐朽为混沌和虚无。", + "2": "我已见断续的图案与酸蚀的设计图刻入我的眼睑。它们阴燃,它们舞蹈,它们嘲弄,它们$(italic)隐隐作痛/$。我突然有种强烈的$(italic)冲动/$,去绘制它们,创造它们,写就它们。将它们从我脆弱意识的黏糊桎梏中释放,让它们在世上再度闪耀荣光。$(p)众将见。$(p)众必将见。", + }, + brainsweeping: { + "1": "我解开了一个秘密。我得知了真相。我也无法忘记真相带来的恐惧。这种想法掠过我的脑海。$(br2)我曾相信——我曾愚蠢地$(italic)相信/$——$(media)媒质/$只是思维遗留下的剩余能量。但我现在$(italic)知道/$它究竟是什么了:它是思维$(italic)含有的/$能量。", + "2": "媒质是在具有思维能力的生物思考时产生的,它的存在也使这些生物能够思考,就像是回环的绳结。我先前天真地拟人化为“自然”的实体实际上就是一个卓伟的媒质回环,又或许是所有回环的结合体,或者是……我思考它就会痛我有很多突触它们都能思考同时痛它们都能看见它们都能看见$(br2)我撑不住了。记笔记。赶快。", + "3": "这个世界中的村民还留有能被提取的感知力。将这种感知力放在方块中,扭曲它,改变它。由不同的思维模式造就的精密图案,关于他们工作和生活的抽象神经通路,都被投射到无生气的固态物质的原子中。$(br2)这就是$(l:patterns/great_spells/brainsweep)$(action)剥离意识/$的用途,那个提取过程。需将村民实体和目标方块放在栈中。扭曲意识则要消耗 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", + budding_amethyst: "如下是一种实际用途。这个剥离过程接受任何职业的村民,前提是他们足够熟练。其他配方则有更具体的要求。我再也不必为$(media)媒质/$亲身沉入地狱了。", + }, - "the_work.1": "我所见甚多。不可言之物。不可数之物。仅三词就能将我的意识从里翻到外然后把我的大脑抹在头颅黑暗的内壁然后腐朽为混沌和虚无。", - "the_work.2": "我已见断续的图案与酸蚀的设计图刻入我的眼睑。它们阴燃,它们舞蹈,它们嘲弄,它们$(italic)隐隐作痛/$。我突然有种强烈的$(italic)冲动/$,去绘制它们,创造它们,写就它们。将它们从我脆弱意识的黏糊桎梏中释放,让它们在世上再度闪耀荣光。$(p)众将见。$(p)众必将见。", + spellcircles: { + "1": "我终于知道$(l:items/slate)$(item)石板/$的用途了。早已遗落的卓伟结构。镌刻其上的图案会按顺序自动运行。思维和能量在其中穿梭,一个接一个接一个接一个接一个穿梭穿梭穿梭——我不能我不能我不能跟着它的思维应该去理解。", + "2": "我需要$(l:greatwork/impetus)$(item)促动石/$作为一种自我维持的$(media)媒质/$波源来启动仪式。而产生的波就会随着$(l:items/slate)$(item)石板/$或是其他和这种波亲和性好的方块穿梭,一个接一个地收集碰到的图案。当波最终回到$(l:greatwork/impetus)$(item)促动石/$处时,所有碰到的图案就会按顺序运行。$(br2)$(media)媒质/$流出任何方块的方向必须唯一而确定,否则法术环会在分叉处失效。", + "3": "因此,法术“环”必须是一个封闭的图形,凹多边形和凸多边形均可,方向也随意。实际上,借助某些其他方块,法术环可在所有三个维度上随意排布。这种性质可能没什么大用,但我必须给大脑一点刺激,好让研究继续下去。", + "4": "真是精妙。法术环不会从我的物品栏或我的意识中汲取$(media)媒质/$,而是要通过漏斗(或类似装置)向$(l:greatwork/impetus)$(item)促动石/$提供晶态的$(media)媒质/$。$(br2)$(l:items/lens)$(item)探知透镜/$能以紫水晶粉为单位显示$(l:greatwork/impetus)$(item)促动石/$中的$(media)媒质/$量。", + "5": "然而,用法术环施放的法术有一个限制:它无法影响环外的事物。也即,它无法影响到能将整个法术环包起的最小长方体外的事物(有凹进部分的法术环仍能影响凹进部分内的事物)。", + "6": "在媒质波减弱前它只能通过有限个方块,但这个值很大,实际不大可能超过这个值。$(br2)相反地,有部分操作只能在法术环上执行,不过它们没有一个是法术。它们似乎都是处理法术环本身性质的操作。相关笔记$(l:patterns/circle)见此/$。", + "7": "我还在笔记中找到了一份草稿,是一个古代研究者使用的法术环。另一页上就是它的重绘图(挺抽象的)。$(br2)其中的图案会按逆时针运行,以$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$开始并以$(l:patterns/great_spells/teleport#hexcasting:teleport/great)$(action)卓越传送/$结束。", + "teleport_circle.title": "传送环", + }, + impetus: { + "1": "启动法术环需要复杂的$(media)媒质/$波动。就算是眼神最好的、手最稳的的凡人也比不上能将$(media)媒质/$编织为自我维持的衔尾蛇的$(l:greatwork/impetus)$(item)促动石/$那般厉害。$(br2)问题就在于意识里有太多无用的$(italic)垃圾/$。", + "2": "从……形而上学层面上讲——我不能再有这种想法了,我不能让自己的思维被搅乱,我的思维非常重要——流动的$(media)媒质/$会推动意识,意识也必须被推动以使这一过程启动。但是,意识中的许多思维让意识变得十分$(italic)笨重/$,没法灵活行动。$(br2)就和让工匠戴着连指手套去修手表一样。", + "3": "这个难题有许多种解决方案。可以通过冥想或类似手段放空意识,尽管我不清楚放空到能启动法术环的意识还有没有足够的力量去执行那些操作。$(br2)某些不光彩的化合物也能产生类似效果,但我不了解它们也不想了解它们。我绝不能沉沦于给大脑喂化学品。", + "4": "我选择的解决方案,是特种化一个意识。将其从神经的暴政中释放,剪去除$(media)媒质/$操控装置外的一切功用件,烙封除启动信号口外的一切接收端口。$(br2)我现在已较为熟练掌握的$(l:greatwork/brainsweeping)$(action)剥离意识/$过程就能很好地做到这些。村民的意识复杂到足以启动法术环,但也还没复杂到能抵御扭曲。", + + empty_impetus: "第一步,基床。虽然和纯粹的$(l:greatwork/impetus)$(item)促动石/$不大一样,但它能让$(media)媒质/$从箭头所指方向流出。这就提供了一种改变媒质波所在平面的方法。", + impetus_rightclick: "第二步,转移意识。村民职业的不同意味着$(l:greatwork/impetus)$(item)促动石/$激活条件的不同。$(l:greatwork/impetus)$(item)工具匠促动石/$会在对其按下$(k:use)时启动。", + impetus_storedplayer: { + "1": "$(l:greatwork/impetus)$(item)牧师促动石/$必须绑定至某一玩家,对其使用存有代表玩家的 iota 的物品(例如$(l:items/focus)$(item)核心/$)即可。这之后,它会在收到红石信号时启动。", + "2": "这种$(l:greatwork/impetus)$(item)促动石/$也使得被绑定的玩家和他们周围一小块区域会一直受法术环影响。不管该玩家离法术环多远都会和站在法术环里一样。$(br2)用$(l:items/lens)$(item)探知透镜/$观察$(l:greatwork/impetus)$(item)牧师促动石/$就会显示被绑定的玩家。", + }, + impetus_look: "$(l:greatwork/impetus)$(item)制箭师促动石/$会在被注视一段时间后启动。", + }, - "brainsweeping.1": "我解开了一个秘密。我得知了真相。我也无法忘记真相带来的恐惧。这种想法掠过我的脑海。$(br2)我曾相信——我曾愚蠢地$(italic)相信/$——$(media)媒质/$只是思维遗留下的剩余能量。但我现在$(italic)知道/$它究竟是什么了:它是思维$(italic)含有的/$能量。", - "brainsweeping.2": "媒质是在具有思维能力的生物思考时产生的,它的存在也使这些生物能够思考,就像是回环的绳结。我先前天真地拟人化为“自然”的实体实际上就是一个卓伟的媒质回环,又或许是所有回环的结合体,或者是……我思考它就会痛我有很多突触它们都能思考同时痛它们都能看见它们都能看见$(br2)我撑不住了。记笔记。赶快。", - "brainsweeping.3": "这个世界中的村民还留有能被提取的感知力。将这种感知力放在方块中,扭曲它,改变它。由不同的思维模式造就的精密图案,关于他们工作和生活的抽象神经通路,都被投射到无生气的固态物质的原子中。$(br2)这就是$(l:patterns/great_spells/brainsweep)$(action)剥离意识/$的用途,那个提取过程。需将村民实体和目标方块放在栈中。扭曲意识则要消耗 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", - "brainsweeping.budding_amethyst": "如下是一种实际用途。这个剥离过程接受任何职业的村民,前提是他们足够熟练。其他配方则有更具体的要求。我再也不必为$(media)媒质/$亲身沉入地狱了。", + directrix: { + "1": "引导$(media)媒质/$比产生一个自我维持的媒质波简单许多。一般来说媒质波会在分叉处消散,但如果有一个用来指引的意识,媒质的流向就能被操控了。$(br2)这种操控所需的精度完全不比启动法术环的精度,我自己上都行……但封进一个意识实在是太方便了。", + "2": "$(l:greatwork/directrix)$(item)导向石/$会接受一个$(media)媒质/$波并决定它的流向,具体如何操控主要看其中的村民意识。$(br2)我不清楚是这个想法先找到我的,还是我的意识先产生这种想法的……如果这种想法是我的意识产生的,是我自己想出来的,那还能说是想法找到我吗?大脑是意识的容器意识是想法的容器想法思维容器思维全知思维全知——停,下。", + empty_directrix: "第一步,基床……用“基底”这个名字会准确些。倘若没有意识引导,媒质的流向是由$(media)媒质/$波的微观涨落和环境决定的,换句话说,随机的。", + directrix_redstone: "$(l:greatwork/directrix)$(item)石匠导向石/$会根据红石信号改变输出方向。没有信号的话,出口是$(media)媒质/$色的一端;有信号的话,出口是红石色的一端。", + }, - "spellcircles.1": "我终于知道$(l:items/slate)$(item)石板/$的用途了。早已遗落的卓伟结构。镌刻其上的图案会按顺序自动运行。思维和能量在其中穿梭,一个接一个接一个接一个接一个穿梭穿梭穿梭——我不能我不能我不能跟着它的思维应该去理解。", - "spellcircles.2": "我需要$(l:greatwork/impetus)$(item)促动石/$作为一种自我维持的$(media)媒质/$波源来启动仪式。而产生的波就会随着$(l:items/slate)$(item)石板/$或是其他和这种波亲和性好的方块穿梭,一个接一个地收集碰到的图案。当波最终回到$(l:greatwork/impetus)$(item)促动石/$处时,所有碰到的图案就会按顺序运行。$(br2)$(media)媒质/$流出任何方块的方向必须唯一而确定,否则法术环会在分叉处失效。", - "spellcircles.3": "因此,法术“环”必须是一个封闭的图形,凹多边形和凸多边形均可,方向也随意。实际上,借助某些其他方块,法术环可在所有三个维度上随意排布。这种性质可能没什么大用,但我必须给大脑一点刺激,好让研究继续下去。", - "spellcircles.4": "真是精妙。法术环不会从我的物品栏或我的意识中汲取$(media)媒质/$,而是要通过漏斗(或类似装置)向$(l:greatwork/impetus)$(item)促动石/$提供晶态的$(media)媒质/$。$(br2)$(l:items/lens)$(item)探知透镜/$能以紫水晶粉为单位显示$(l:greatwork/impetus)$(item)促动石/$中的$(media)媒质/$量。", - "spellcircles.5": "然而,用法术环施放的法术有一个限制:它无法影响环外的事物。也即,它无法影响到能将整个法术环包起的最小长方体外的事物(有凹进部分的法术环仍能影响凹进部分内的事物)。", - "spellcircles.6": "在媒质波减弱前它只能通过有限个方块,但这个值很大,实际不大可能超过这个值。$(br2)相反地,有部分操作只能在法术环上执行,不过它们没有一个是法术。它们似乎都是处理法术环本身性质的操作。相关笔记$(l:patterns/circle)见此/$。", - "spellcircles.7": "我还在笔记中找到了一份草稿,是一个古代研究者使用的法术环。另一页上就是它的重绘图(挺抽象的)。$(br2)其中的图案会按逆时针运行,以$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$开始并以$(l:patterns/great_spells/teleport#hexcasting:teleport)$(action)卓越传送/$结束。", - "spellcircles.teleport_circle.title": "传送环", + akashiclib: { + "1": "我所知甚多,将所知存于某处是唯一正途。信息能用书本存储但徒手书写以眼阅读非常非常非常非常$(italic)缓慢/$。我需要更好的方法。并且我必将找到。$(br2)……我的意识每况愈下……不知道我还有没有时间赶在满溢头脑的知识消散之前记下它们。", + "2": "一座图书馆。我的计划,如下。$(br2)就和图案与操作的对应关系一样,我能以我自己的方式将自创的图案与 iota 对应起来。$(l:greatwork/akashiclib)$(item)阿卡夏记录/$是图书馆的控制核心,而每个$(l:greatwork/akashiclib)$(item)阿卡夏书架/$存储一个映射。它们必须互相连接,直接贴在一起,不超过 32 格。$(l:greatwork/akashiclib)$(item)阿卡夏桥接块/$没有存储功能但被视为连接方块,从而增加图书馆的大小。", + akashic_record: "存储和分配图案非常简单但太过磨人,我还有更要紧的事要做。剥离一个精于此道的意识能省很多麻烦。", + "3": "图书馆的使用方法很简单,交给图书管理员一个图案,然后他把对应的 iota 交给你。共有两个相关图案,$(l:patterns/akashic_patterns)笔记在此/$。$(br2)对书架使用一张空白的$(l:items/scroll)$(item)卷轴/$就能将图案复制到$(l:items/scroll)$(item)卷轴/$上。潜行时右击书架就能清除其中数据。", + }, + quenching_allays: { + "1": "$(l)它们就是小块媒质。/$我怎么没早点发现呢?它们——我是一堆血肉再加上一小点……是被赐予了一小点的思维,但悦灵是能维持自稳的媒质集群,再被按到一小点血肉上去。所有东西就都说得通了——它们对媒质的趋向性,它们对音乐的种种反应,$(l)我现在理解了/$,$(l)但/$为何前人$(l)没有/$?", + "2": "理解这点后,唯一$(l)正确/$的选择就是去征服它们奇异的意识——它们奇异的自我——也是它们的全部、一个意识、一个自我、一段尾声。它们的性状似乎揭示了某些东西。我能……我能使用它们压缩$(media)媒质/$,将两束思维叠放在一起,形体与认知,多与一。$(br2)这个过程不知怎么的会自行产生$(media)媒质/$。这是怎么回事?也许——也许是$(l)我/$的缘故,是完成这项任务的过程——", + "3": "它不重要。我不重要。它们不重要,重要的只有功用。这就是了。$(br2)这肯定相当痛苦。", + "4": "所得的产物十分脆弱。直接破坏会将其打碎成碎片,$(thing)时运/$则能增加产量……如果需要获得方块本身,那要有精准采集才行。$(br2)产生的碎片相当于将 3 个$(l:items/amethyst)$(item)充能紫水晶/$拼在一起。方块则相当于 4 个碎片。", + "5": "它们变幻莫测,好像会在我的手中不断变形闪烁,若是给予它们来自另一种$(media)媒质/$形态的引导,它们便会变成对应的形态,且$(media)媒质/$总量前后不变。", + }, - "impetus.1": "启动法术环需要复杂的$(media)媒质/$波动。就算是眼神最好的、手最稳的的凡人也比不上能将$(media)媒质/$编织为自我维持的衔尾蛇的$(l:greatwork/impetus)$(item)促动石/$那般厉害。$(br2)问题就在于意识里有太多无用的$(italic)垃圾/$。", - "impetus.2": "从……形而上学层面上讲——我不能再有这种想法了,我不能让自己的思维被搅乱,我的思维非常重要——流动的$(media)媒质/$会推动意识,意识也必须被推动以使这一过程启动。但是,意识中的许多思维让意识变得十分$(italic)笨重/$,没法灵活行动。$(br2)就和让工匠戴着连指手套去修手表一样。", - "impetus.3": "这个难题有许多种解决方案。可以通过冥想或类似手段放空意识,尽管我不清楚放空到能启动法术环的意识还有没有足够的力量去执行那些操作。$(br2)某些不光彩的化合物也能产生类似效果,但我不了解它们也不想了解它们。我绝不能沉沦于给大脑喂化学品。", - "impetus.4": "我选择的解决方案,是特种化一个意识。将其从神经的暴政中释放,剪去除$(media)媒质/$操控装置外的一切功用件,烙封除启动信号口外的一切接收端口。$(br2)我现在已较为熟练掌握的$(l:greatwork/brainsweeping)$(action)剥离意识/$过程就能很好地做到这些。村民的意识复杂到足以启动法术环,但也还没复杂到能抵御扭曲。", - "impetus.empty_impetus": "第一步,基床。虽然和纯粹的$(l:greatwork/impetus)$(item)促动石/$不大一样,但它能让$(media)媒质/$从箭头所指方向流出。这就提供了一种改变媒质波所在平面的方法。", - "impetus.impetus_rightclick": "第二步,转移意识。村民职业的不同意味着$(l:greatwork/impetus)$(item)促动石/$激活条件的不同。$(l:greatwork/impetus)$(item)工具匠促动石/$会在对其按下$(k:use)时启动。", - "impetus.impetus_storedplayer.1": "$(l:greatwork/impetus)$(item)牧师促动石/$必须绑定至某一玩家,对其使用存有代表玩家的 iota 的物品(例如$(l:items/focus)$(item)核心/$)即可。这之后,它会在收到红石信号时启动。", - "impetus.impetus_storedplayer.2": "这种$(l:greatwork/impetus)$(item)促动石/$也使得被绑定的玩家和他们周围一小块区域会一直受法术环影响。不管该玩家离法术环多远都会和站在法术环里一样。$(br2)用$(l:items/lens)$(item)探知透镜/$观察$(l:greatwork/impetus)$(item)牧师促动石/$就会显示被绑定的玩家。", - "impetus.impetus_look": "$(l:greatwork/impetus)$(item)制箭师促动石/$会在被注视一段时间后启动。", + "fanciful_staves.1": "卸去无知的外壳后,更换工具——那些我亲手打磨的法杖——更是理所应当。这些全新的设计并非拥有额外属性——但它们光彩万分,光耀夺目……它们一如我视线边缘的闪烁与光耀。", - "directrix.1": "引导$(media)媒质/$比产生一个自我维持的媒质波简单许多。一般来说媒质波会在分叉处消散,但如果有一个用来指引的意识,媒质的流向就能被操控了。$(br2)这种操控所需的精度完全不比启动法术环的精度,我自己上都行……但封进一个意识实在是太方便了。", - "directrix.2": "$(l:greatwork/directrix)$(item)导向石/$会接受一个$(media)媒质/$波并决定它的流向,具体如何操控主要看其中的村民意识。$(br2)我不清楚是这个想法先找到我的,还是我的意识先产生这种想法的……如果这种想法是我的意识产生的,是我自己想出来的,那还能说是想法找到我吗?大脑是意识的容器意识是想法的容器想法思维容器思维全知思维全知——停,下。", - "directrix.empty_directrix": "第一步,基床……用“基底”这个名字会准确些。倘若没有意识引导,媒质的流向是由$(media)媒质/$波的微观涨落和环境决定的,换句话说,随机的。", - "directrix.directrix_redstone": "$(l:greatwork/directrix)$(item)石匠导向石/$会根据红石信号改变输出方向。没有信号的话,出口是$(media)媒质/$色的一端;有信号的话,出口是红石色的一端。", + // Patterns + readers_guide: { + "1": "我将我找到的所有图案根据作用分为了几类。我也记下了它们的笔画顺序,前提是我在研究中发现了确切顺序。绘制起点标记为一个稍大的红点。$(br2)如果某个操作需要绘制多个图案才能执行,我会将那些图案排在一起。", + "2": "我$(italic)没法确定/$某些图案的笔顺,不过它们的形状是确定的。我猜测它们的画法就藏在某些古代的图书馆和地牢里。$(br2)我只会记录这类图案的外形,笔顺不记。", + "3": "我也会记下操作接受或修改的 iota 的类型,后接一个“→”,再后接这些操作产生的 iota 的类型。$(p)例如,“$(n)vector, number/$ → $(n)vector/$” 意味着该操作会从栈顶移除一个向量和一个数,然后压入一个向量;或者说,移除一个数,然后修改栈顶的向量。(数需在栈顶,向量则需直接处于数下方。)", + "4": "“→ $(n)entity/$”意味着该操作只会压入一个实体。“$(n)entity, vector/$ →”意味着该操作会弹出一个实体和一个向量,而不压入任何 iota。$(br2)再提一句,如果觉得标记笔顺的小点太慢或太难看清楚,可以按下 $(thing)Control 或 Command/$ 以渐变显示图案,起始点最深,结束点最浅。卷轴和咒术网格也能这样!", + }, - "akashiclib.1": "我所知甚多,将所知存于某处是唯一正途。信息能用书本存储但徒手书写以眼阅读非常非常非常非常$(italic)缓慢/$。我需要更好的方法。并且我必将找到。$(br2)……我的意识每况愈下……不知道我还有没有时间赶在满溢头脑的知识消散之前记下它们。", - "akashiclib.2": "一座图书馆。我的计划,如下。$(br2)就和图案与操作的对应关系一样,我能以我自己的方式将自创的图案与 iota 对应起来。$(l:greatwork/akashiclib)$(item)阿卡夏记录/$是图书馆的控制核心,而每个$(l:greatwork/akashiclib)$(item)阿卡夏书架/$存储一个映射。它们必须互相连接,直接贴在一起,不超过 32 格。$(l:greatwork/akashiclib)$(item)阿卡夏桥接块/$没有存储功能但被视为连接方块,从而增加图书馆的大小。", - "akashiclib.akashic_record": "存储和分配图案非常简单但太过磨人,我还有更要紧的事要做。剥离一个精于此道的意识能省很多麻烦。", - "akashiclib.3": "图书馆的使用方法很简单,交给图书管理员一个图案,然后他把对应的 iota 交给你。共有两个相关图案,$(l:patterns/akashic_patterns)笔记在此/$。$(br2)对书架使用一张空白的$(l:items/scroll)$(item)卷轴/$就能将图案复制到$(l:items/scroll)$(item)卷轴/$上。潜行时右击书架就能清除其中数据。", + basics_pattern: { + get_caster: "返回我,也就是施法者。", + "entity_pos/eye": "将栈顶的实体变为其眼部位置。这个图案比较适用于我自己。", + "entity_pos/foot": "将栈顶的实体变为其所站位置。这个图案比较适用于其他实体。", + get_entity_look: "将栈顶的实体变为其视线方向上的单位向量。", + print: "向我展示栈顶的 iota。", + raycast: { + "1": "将两个向量组合(分别表示位置和方向)并返回如下问题的答案:若我站在该位置并看向该方向,我会看到什么方块?消耗极少量$(media)媒质/$。", + "2": "如果视线并未击中任何事物,所提供的向量会变为 $(l:casting/influences)$(thing)Null/$。$(br2)有一套常用的图案序列(常称“射线追踪曼怛罗”),由$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$、$(l:patterns/basics#hexcasting:entity_pos/eye)$(action)指南针之纯化/$、$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$、$(l:patterns/basics#hexcasting:get_entity_look)$(action)照准仪之纯化/$、$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$组成。依次绘制就能返回我所看的方块的位置向量。", + }, + "raycast/axis": { + "1": "与$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$类似,但会返回如下问题的答案:我看着的是方块的$(italic)哪一面/$?消耗极少量$(media)媒质/$。", + "2": "更确切地说,它会返回所看面的$(italic)法向量/$,也即垂直于该面的单位向量。$(li)如果我看着地面,它会返回 (0, 1, 0)。$(li)如果我看着某方块面向南方的侧面,它会返回 (0, 0, 1)。", + }, + "raycast/entity": "与$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$类似,但会返回我所看的$(italic)实体/$。消耗极少量$(media)媒质/$。", + get_entity_height: "将栈顶的实体变为其高度。", + get_entity_velocity: "将栈顶的实体变为其移动方向上的向量,其模长为实体的移动速度。", + }, + numbers: { + "1": "没有绘制数字的简单方法,这点挺烦人的。自然屈尊为我们创造的方法如下。", + "2": "首先,绘制左页两图案中的一种,默认数值为 0。然后,每一画的$(italic)方向/$会以对应方式修改该数值。$(li)前方:加 1$(li)左前方:加 5$(li)右前方:加 10$(li)左后方:乘 2$(li)右后方:除以 2$(br)顺时针绘制,也即左页右图,会在绘制完成后取相反数(如左图逆时针绘制则不取)。$(p)绘制完成后会返回对应数。", + example: { + "10.header": "例图一", + "10": "该图案会返回 10。", - "quenching_allays.1": "$(l)它们就是小块媒质。/$我怎么没早点发现呢?它们——我是一堆血肉再加上一小点……是被赐予了一小点的思维,但悦灵是能维持自稳的媒质集群,再被按到一小点血肉上去。所有东西就都说得通了——它们对媒质的趋向性,它们对音乐的种种反应,$(l)我现在理解了/$,$(l)但/$为何前人$(l)没有/$?", - "quenching_allays.2": "理解这点后,唯一$(l)正确/$的选择就是去征服它们奇异的意识——它们奇异的自我——也是它们的全部、一个意识、一个自我、一段尾声。它们的性状似乎揭示了某些东西。我能……我能使用它们压缩$(media)媒质/$,将两束思维叠放在一起,形体与认知,多与一。$(br2)这个过程不知怎么的会自行产生$(media)媒质/$。这是怎么回事?也许——也许是$(l)我/$的缘故,是完成这项任务的过程——", - "quenching_allays.3": "它不重要。我不重要。它们不重要,重要的只有功用。这就是了。$(br2)这肯定相当痛苦。", - "quenching_allays.4": "所得的产物十分脆弱。直接破坏会将其打碎成碎片,$(thing)时运/$则能增加产量……如果需要获得方块本身,那要有精准采集才行。$(br2)产生的碎片相当于将 3 个$(l:items/amethyst)$(item)充能紫水晶/$拼在一起。方块则相当于 4 个碎片。", - "quenching_allays.5": "它们变幻莫测,好像会在我的手中不断变形闪烁,若是给予它们来自另一种$(media)媒质/$形态的引导,它们便会变成对应的形态,且$(media)媒质/$总量前后不变。", + "7.header": "例图二", + "7": "该图案会返回 7:5 + 1 + 1。", + "-32.header": "例图三", + "-32": "该图案会返回 -32:(1 + 5 + 10) * 2 的相反数。", - "fanciful_staves.1": "卸去无知的外壳后,更换工具——那些我亲手打磨的法杖——更是理所应当。这些全新的设计并非拥有额外属性——但它们光彩万分,光耀夺目……它们一如我视线边缘的闪烁与光耀。", + "4.5.header": "例图四", + "4.5": "该图案会返回 4.5:5 / 2 + 1 + 1。", + }, + "3": "某些情况下用$(l:items/abacus)$(item)算盘/$会更方便。但数字的“正确”画法也要了然于心。", + }, - "_comment": "Patterns", - - - "readers_guide.1": "我将我找到的所有图案根据作用分为了几类。我也记下了它们的笔画顺序,前提是我在研究中发现了确切顺序。绘制起点标记为一个稍大的红点。$(br2)如果某个操作需要绘制多个图案才能执行,我会将那些图案排在一起。", - "readers_guide.2": "我$(italic)没法确定/$某些图案的笔顺,不过它们的形状是确定的。我猜测它们的画法就藏在某些古代的图书馆和地牢里。$(br2)我只会记录这类图案的外形,笔顺不记。", - "readers_guide.3": "我也会记下操作接受或修改的 iota 的类型,后接一个“→”,再后接这些操作产生的 iota 的类型。$(p)例如,“$(n)vector, number/$ → $(n)vector/$” 意味着该操作会从栈顶移除一个向量和一个数,然后压入一个向量;或者说,移除一个数,然后修改栈顶的向量。(数需在栈顶,向量则需直接处于数下方。)", - "readers_guide.4": "“→ $(n)entity/$”意味着该操作只会压入一个实体。“$(n)entity, vector/$ →”意味着该操作会弹出一个实体和一个向量,而不压入任何 iota。$(br2)再提一句,如果觉得标记笔顺的小点太慢或太难看清楚,可以按下 $(thing)Control 或 Command/$ 以渐变显示图案,起始点最深,结束点最浅。卷轴和咒术网格也能这样!", - - - "basics_pattern.get_caster": "返回我,也就是施法者。", - "basics_pattern.entity_pos/eye": "将栈顶的实体变为其眼部位置。这个图案比较适用于我自己。", - "basics_pattern.entity_pos/foot": "将栈顶的实体变为其所站位置。这个图案比较适用于其他实体。", - "basics_pattern.get_entity_look": "将栈顶的实体变为其视线方向上的单位向量。", - "basics_pattern.print": "向我展示栈顶的 iota。", - "basics_pattern.raycast.1": "将两个向量组合(分别表示位置和方向)并返回如下问题的答案:若我站在该位置并看向该方向,我会看到什么方块?消耗极少量$(media)媒质/$。", - "basics_pattern.raycast.2": "如果视线并未击中任何事物,所提供的向量会变为 $(l:casting/influences)$(thing)Null/$。$(br2)有一套常用的图案序列(常称“射线追踪曼怛罗”),由$(action)意识之精思/$、$(action)指南针之纯化/$、$(action)意识之精思/$、$(action)照准仪之纯化/$、$(action)弓箭手之馏化/$组成。依次绘制就能返回我所看的方块的位置向量。", - "basics_pattern.raycast/axis.1": "与$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$类似,但会返回如下问题的答案:我看着的是方块的$(italic)哪一面/$?消耗极少量$(media)媒质/$。", - "basics_pattern.raycast/axis.2": "更确切地说,它会返回所看面的$(italic)法向量/$,也即垂直于该面的单位向量。$(li)如果我看着地面,它会返回 (0, 1, 0)。$(li)如果我看着某方块面向南方的侧面,它会返回 (0, 0, 1)。", - "basics_pattern.raycast/entity": "与$(l:patterns/basics#hexcasting:raycast)$(action)弓箭手之馏化/$类似,但会返回我所看的$(italic)实体/$。消耗极少量$(media)媒质/$。", - "basics_pattern.get_entity_height": "将栈顶的实体变为其高度。", - "basics_pattern.get_entity_velocity": "将栈顶的实体变为其移动方向上的向量,其模长为实体的移动速度。", - - - "numbers.1": "没有绘制数字的简单方法,这点挺烦人的。自然屈尊为我们创造的方法如下。", - "numbers.2": "首先,绘制左页两图案中的一种,默认数值为 0。然后,每一画的$(italic)方向/$会以对应方式修改该数值。$(li)前方:加 1$(li)左前方:加 5$(li)右前方:加 10$(li)左后方:乘 2$(li)右后方:除以 2$(br)顺时针绘制,也即左页右图,会在绘制完成后取相反数(如左图逆时针绘制则不取)。$(p)绘制完成后会返回对应数。", - "numbers.example.10.header": "例图一", - "numbers.example.10": "该图案会返回 10。", - "numbers.example.7.header": "例图二", - "numbers.example.7": "该图案会返回 7:5 + 1 + 1。", - "numbers.example.-32.header": "例图三", - "numbers.example.-32": "该图案会返回 -32:(1 + 5 + 10) * 2 的相反数。", - "numbers.example.4.5.header": "例图四", - "numbers.example.4.5": "该图案会返回 4.5:5 / 2 + 1 + 1。", - "numbers.3": "某些情况下用$(l:items/abacus)$(item)算盘/$会更方便。但数字的“正确”画法也要了然于心。", - - - "math.numvec": "许多数学操作对数和向量都有效。这类参数记为“num vec”。", - "math.add.1": "执行加法。", - "math.add.2": "操作如下:$(li)若栈顶为两个数,返回其和。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相加。$(li)若为两个向量,将对应分量相加(也即 [1, 2, 3] + [0, 4, -1] = [1, 6, 2])。", - "math.sub.1": "执行减法。", - "math.sub.2": "操作如下:$(li)若栈顶为两个数,返回其差。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相减。$(li)若为两个向量,将对应分量相减。$(br2)栈顶元素或其分量为减数,栈顶往下第二元素或其分量为被减数。", - "math.mul.1": "执行乘法或点积。", - "math.mul.2": "操作如下:$(li)若栈顶为两个数,返回其积。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相乘。$(li)若为两个向量,计算其$(l:https://www.mathsisfun.com/algebra/vectors-dot-product.html)点积/$。", - "math.div.1": "执行除法或叉积。", - "math.div.2": "操作如下:$(li)若栈顶为两个数,返回其商。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相除。$(li)若为两个向量,计算其$(l:https://www.mathsisfun.com/algebra/vectors-cross-product.html)叉积/$。$(br2)第一第二种情况下,栈顶元素或其分量为除数,栈顶往下第二元素或其分量为被除数。$(p)警告:绝对不可除以零!", - "math.abs.1": "计算绝对值或模长。", - "math.abs.2": "将一个数变为其绝对值,将一个向量变为其模长。", - "math.pow.1": "执行乘方或向量射影。", - "math.pow.2": "若栈顶为两个数,返回两数的乘方。$(li)若为一个数和一个向量,移除该数并计算向量的每个分量与该数的乘方。$(li)若为两个向量,计算栈顶向量对栈顶往下第二向量的$(l:https://en.wikipedia.org/wiki/Vector_projection)向量射影/$。$(br2)第一第二种情况下,栈顶元素或其分量为指数, 栈顶往下第二元素或其分量为底数。", - "math.floor": "对一个数取底,也即去掉小数部分取整。或对向量的每个分量取底。", - "math.ceil": "对一个数取顶,也即将小数部分不为零的数换为大于其的最小整数。或对向量的每个分量取顶。", - "math.construct_vec": "将三个数作为向量的 X,Y,Z 分量组合(最下方为 X 分量)。", - "math.deconstruct_vec": "将一个向量拆分为其 X,Y,Z 分量(最下方为 X 分量)。", - "math.modulo": "取两数除法的余数。也即执行除法后$(italic)剩余/$的数。例如,5 %% 2 得 1,5 %% 3 得 2。或对向量的每个分量执行上述操作。", - "math.coerce_axial": "若栈顶为向量,则返回与其夹角最小的轴向单位向量;零向量不受影响。若栈顶为数,则返回该数的符号;所给数为正则返回 1,为负责返回 -1,0 不受影响。", - "math.random": "返回一个 0 与 1 之间的随机数。", - - - "advanced_math.sin": "计算所给角(弧度制)的正弦,也即该角在单位圆上的纵坐标。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", - "advanced_math.cos": "计算所给角(弧度制)的余弦,也即该角在单位圆上的横坐标。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", - "advanced_math.tan": "计算所给角(弧度制)的正切,也即该角在单位圆上的斜率。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", - "advanced_math.arcsin": "计算所给数(绝对值小于 1)的反正弦,也即正弦为该值的角。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", - "advanced_math.arccos": "计算所给数(绝对值小于 1)的反余弦,也即余弦为该值的角。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", - "advanced_math.arctan": "计算所给数的反正切,也即正切为该值的角。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", - "advanced_math.arctan2": "计算所给纵坐标与横坐标的反正切,也即计算 X 轴正向,与原点至所给坐标的射线间的夹角。", - "advanced_math.logarithm": "计算以栈顶元素为底的,栈顶往下第二元素为真数的对数。与 $(l:patterns/consts#hexcasting:const/double/e)$(thing)$(italic)e/$ 的值有关。", - - - "sets.numlist": "集合操作比较奇怪,部分操作只能接受两个数或两个列表,一个数一个列表就不行。这类参数记为“(num, num) (list, list)”。$(br2)当接受的是数时,它们将被视为所谓二进制的“位组”,也就是由 1 和 0、真和假、“开”和“关”组成的列表。", - "sets.or.1": "取两集合的并集。", - "sets.or.2": "操作如下:$(li)若栈顶为两个数,将其组合为在两个位组中有一个为 1 处为 1 的位组。$(li)若栈顶为两个列表,则创建一个由第一个列表中所有元素和第二个列表独有的元素组成的列表。和$(l:patterns/lists#hexcasting:concat)$(action)组合之馏化/$类似。", - "sets.and.1": "取两集合的交集。", - "sets.and.2": "操作如下:$(li)若栈顶为两个数,将其组合为仅在两个位组中$(italic)均/$为 1 处为 1 的位组。$(li)若栈顶为两个列表,则创建一个由第一个和第二个列表共有的元素组成的列表。", - "sets.xor.1": "取两集合中每个集合独有的元素集合。", - "sets.xor.2": "操作如下:$(li)若栈顶为两个数,将其组合为仅在两个位组中$(italic)仅一个/$为 1 处为 1 的位组。$(li)若栈顶为两个列表,则创建一个在两个列表中$(italic)仅出现一次/$的元素组成的列表。", - "sets.not": "对位组执行位非操作,将所有为 1 的比特换为 0,反之亦然。就我经验而言,这会使一个数变为其相反数,然后减 1。例如,0 会变成 -1,而 -100 会变成 99。", - "sets.to_set": "去除列表内重复的元素。", - - - "consts.const/null": "返回 $(l:casting/influences)$(thing)Null/$ 这一虚指。", - "consts.const/true": "返回 $(thing)True/$。", - "consts.const/false": "返回 $(thing)False/$。", - "consts.const/vec/x": "左图(逆时针绘制)返回 [1, 0, 0];右图(顺时针绘制)返回 [-1, 0, 0]。", - "consts.const/vec/y": "左图(逆时针绘制)返回 [0, 1, 0];右图(顺时针绘制)返回 [0, -1, 0]。", - "consts.const/vec/z": "左图(逆时针绘制)返回 [0, 0, 1];右图(顺时针绘制)返回 [0, 0, -1]。", - "consts.const/vec/0": "返回 [0, 0, 0]。", - "consts.const/double/tau": "返回 τ,也即圆的弧度。", - "consts.const/double/pi": "返回 π,也即半圆的弧度。", - "consts.const/double/e": "返回 $(italic)e/$,也即自然对数的底。", - - - "stackmanip.pseudo-novice.title": "初学者之策略", - "stackmanip.pseudo-novice": "移除栈顶的 iota。$(br2)这似乎是$(l:patterns/stackmanip#hexcasting:mask)$(action)簿记员之策略/$的一种特殊形式。", - "stackmanip.swap": "交换栈顶两个 iota 的位置。", - "stackmanip.rotate": "将栈顶往下第三元素拉至栈顶。[0, 1, 2] 变为 [1, 2, 0]。", - "stackmanip.rotate_reverse": "将栈顶元素沉至栈顶往下第三位处。[0, 1, 2] 变为 [2, 0, 1]。", - "stackmanip.duplicate": "复制栈顶的 iota。", - "stackmanip.over": "将栈顶往下第二元素复制至栈顶。[0, 1] 变为 [0, 1, 0]。", - "stackmanip.tuck": "将栈底元素复制至栈顶往下第二元素下方。[0, 1] 变为 [1, 0, 1]。", - "stackmanip.2dup": "复制栈顶的两个 iota。[0, 1] 变为 [0, 1, 0, 1]。", - "stackmanip.stack_len": "以数的形式压入栈中元素的个数。(例如,一个形如 [0, 1] 的栈会变为 [0, 1, 2]。)", - "stackmanip.duplicate_n": "移除栈顶的数,然后将现在的栈顶元素复制该数次。(若所给数为 2,则栈顶会有两个同一元素。)", - "stackmanip.fisherman": "提出下标为所给数的元素并将其置于栈顶。", - "stackmanip.fisherman/copy": "与$(action)渔夫之策略/$类似,但会复制 iota 而非将其提出。", - "stackmanip.mask.1": "一组无限个根据凹槽和横线的顺序来保留或移除栈中元素的操作。", - "stackmanip.mask.2": "假如从左到右绘制书吏之策略,此操作操控的 iota 个数由其横向长度决定。从靠近栈底端开始计入,一条横线代表保留该处元素,一个凹槽代表移除该处元素。$(br2)如果栈从栈底起形如 $(italic)0, 1, 2/$ ,绘制左页例图一,则栈变为 $(italic)1/$;例图二会将栈变为 $(italic)0/$;例图三会将栈变为 $(italic)0, 2/$(栈底的 0 不受影响)。", - "stackmanip.swizzle.1": "根据所给数字代码重排栈顶若干元素。", - "stackmanip.swizzle.2": "我确实不知道数字代码和重排操作的完整对应关系,但我整理了一份对应表格,其中整理了最多六个元素的重排的编码。$(br2)如果要找延伸阅读资料,可以搜索“Lehmer Code”。", - "stackmanip.swizzle.link": "编码列表", - - - "logic.bool_coerce": "将参数变换为布尔值。数 $(thing)0/$、$(l:influences#null)$(thing)Null/$,以及空列表会变为 False。其余所有则变为 True。", - "logic.bool_to_number": "将布尔值变换为数。True 变为 $(thing)1/$, False 变为 $(thing)0/$。", - "logic.not": "如果参数是 True,返回 False;如果参数是 False,返回 True。", - "logic.or": "如果至少有一个参数是 True,返回 True。否则返回 False。", - "logic.and": "如果两个参数都是 True,返回 True。否则返回 False。", - "logic.xor": "如果参数中仅一个是 True,返回 True。否则返回 False。", - "logic.if": "如果第一个参数是 True,保留第二个参数并移除第三个。否则保留第三个参数并移除第二个。", - "logic.equals": "如果第一个参数等于第二个(允许较小误差),返回 True。否则返回 False。", - "logic.not_equals": "如果第一个参数不等于第二个(允许较小误差),返回 True。否则返回 False。", - "logic.greater": "如果第一个参数大于第二个,返回 True. 否则返回 False。", - "logic.less": "如果第一个参数小于第二个,返回 True。否则返回 False。", - "logic.greater_eq": "如果第一个参数大于或等于第二个,返回 True。否则返回 False。", - "logic.less_eq": "如果第一个参数小于或等于第二个,返回 True。否则返回 False。", - - - "entities.get_entity": "将栈顶位置向量变为该处实体(若无则返回 $(l:casting/influences)$(thing)Null/$)。", - "entities.get_entity/animal": "将栈顶位置向量变为该处动物(若无则返回 $(l:casting/influences)$(thing)Null/$)。", - "entities.get_entity/monster": "将栈顶位置向量变为该处怪物(若无则返回 $(l:casting/influences)$(thing)Null/$)。", - "entities.get_entity/item": "将栈顶位置向量变为该处物品实体(若无则返回 $(l:casting/influences)$(thing)Null/$)。", - "entities.get_entity/player": "将栈顶位置向量变为该处玩家(若无则返回 $(l:casting/influences)$(thing)Null/$)。", - "entities.get_entity/living": "将栈顶位置向量变为该处生物(若无则返回 $(l:casting/influences)$(thing)Null/$)。", - "entities.zone_entity/animal": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有动物的列表。", - "entities.zone_entity/not_animal": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非动物实体的列表。", - "entities.zone_entity/monster": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有怪物的列表。", - "entities.zone_entity/not_monster": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非怪物实体的列表。", - "entities.zone_entity/item": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有掉落的物品的列表。", - "entities.zone_entity/not_item": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非物品实体的列表。", - "entities.zone_entity/player": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有玩家的列表。", - "entities.zone_entity/not_player": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非玩家实体的列表。", - "entities.zone_entity/living": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有生物的列表。", - "entities.zone_entity/not_living": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非生物实体的列表。", - "entities.zone_entity": "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有实体的列表。", - - - "lists.index": "移除栈顶的数,将栈顶的列表变为其中下标为该数(就是被移除的那个数)的元素。若该数越界,则将列表换为 $(l:casting/influences)$(thing)Null/$。", - "lists.slice": "移除栈顶的两个数,将栈顶的列表变为其中下标在两个数之间元素的子列表,包含下标下界,不含下标上界。例如,[0, 1, 2, 3, 4] 的 0, 2 子列表是 [0, 1]。", - "lists.append": "移除栈顶元素,将其加到栈顶列表的末尾。", - "lists.unappend": "移除栈顶列表末尾的元素,将其加到栈顶。", - "lists.concat": "移除栈顶列表,将其中元素加到当前栈顶列表的末尾。", - "lists.empty_list": "压入一个空列表。", - "lists.singleton": "移除栈顶元素,而后返回一个仅包含该元素的列表。", - "lists.list_size": "移除栈顶列表,而后返回该列表中元素的个数。", - "lists.reverse": "倒置栈顶列表。", - "lists.index_of": "移除栈顶元素,并将栈顶列表变为该元素在其中第一次出现的位置(从 0 开始)。若没有出现过则返回 -1。", - "lists.remove_from": "移除栈顶的数,而后移除栈顶列表中下标为该数(就是被移除的那个数)的元素。", - "lists.replace": "移除栈顶元素和栈顶的数,而后将栈顶列表中下标为该数(就是被移除的那个数)变为该元素。若该数越界则不进行操作。", - "lists.last_n_list": "移除$(italic)所给数/$个元素,并将这些元素加入列表并将该列表压入栈顶。", - "lists.splat": "移除栈顶列表,而后将其中元素全部压入栈顶。", - "lists.construct": "移除栈顶元素,将其加到栈顶列表的开头。", - "lists.deconstruct": "移除栈顶列表中的第一个元素,并将该元素压入栈顶。", - - - "patterns_as_iotas.1": "咒法学中的一个怪异之处就是$(italic)图案本身/$也可被视为 iota ——其甚至能在施法时被压到栈中。$(br2)这就产生了一个问题:我怎么把图案用作 iota 呢?如果就只是画一遍,自然大概不会将其理解为“把它加到栈里”,而只会将其与操作对应起来。", - "patterns_as_iotas.2": "幸运的是,自然提供了一组专用于此道的$(l:casting/influences)虚指/$。$(br2)简而言之,$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$使我能将一个图案加到栈中,$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$和$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$则能加入一整个列表。", - "patterns_as_iotas.escape.1": "要使用$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$,先绘制它,然后绘制任意图案。第二个图案就会被加到栈中。", - "patterns_as_iotas.escape.2": "如果对计算机科学有足够了解的话,你可能能将其与“转义”/“escape”操作联系起来。$(br2)考察的一大用途是将某一图案复制到$(l:items/scroll)$(item)卷轴/$或$(l:items/slate)$(item)石板/$上,且要和$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$配合使用。这之后卷轴和石板就能拿来装饰了。", - "patterns_as_iotas.parens.1": "绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$会让这之后绘制的图案不再与操作联系。而在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)反思/$后,之前绘制的图案就会作为一个列表加到栈中。", - "patterns_as_iotas.parens.2": "如果绘制内省后再绘制一个$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)内省/$,则它也将被加到列表中,而且需绘制$(italic)两次/$$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$才能回到正常施法模式。", - "patterns_as_iotas.parens.3": "而且,如果在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$和$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$前绘制一个$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$,就能绕过它们的特殊功能,并将它们作为普通图案加到栈中,且不会影响返回正常施法模式前要绘制的$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$个数。$(br2)如果在$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)考察中/$连续绘制两个$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$,只有第一个$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$会被加到栈中。", - "patterns_as_iotas.undo": "最后,若在$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$和$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$之间有图案绘制错误,则可绘制$(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)消解/$以移除图案列表中的最后绘制的图案。", - - - "readwrite.1": "这一章节主要记述有关将 $(thing)iota/$ 写入永久性介质中的知识。几乎所有 iota 都可被写入合适的物品中,例如$(l:items/focus)$(item)核心/$和$(l:items/spellbook)$(item)法术书/$,而后可以将它们读出来。而某些物品,例如$(l:items/abacus)$(item)算盘/$,则只能被读取。$(br2)一般可从另一只手中的物品中读取或写入 iota。但若将物品丢出为物品实体,或是放在物品展示框中,则也可读取或写入。", - "readwrite.2": "我还能对其他实体执行上述两种操作。例如,可从一张壁挂$(l:items/scroll)$(item)卷轴/$中读出图案。$(br2)然而,貌似写入代表其他玩家的 iota 是不被允许的,只有我自己的能写入。我认为这和“真名”类似。也许是自然在阻止我们的真名落入敌手。如果我想把我的真名交给朋友,做个$(l:items/focus)$(item)核心/$给他们就好了。", - "readwrite.read": "复制另一只手所持物品中 iota,并将其压入栈顶。", - "readwrite.write": "移除栈顶 iota,并将其写入另一只手中的物品中。", - "readwrite.read/entity": "与$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$类似,但会将 iota 从某实体中读出,而非手中物品。", - "readwrite.write/entity": "与$(l:patterns/readwrite#hexcasting:read)$(action)书吏之策略/$类似,但会将 iota 写入某实体,而非手中物品。$(br2)有意思的是,我似乎没法以这种手段写入我自己的真名。但我总感觉要是真这么做了我的安全就会受到严重威胁。", - "readwrite.readable": "如果另一只手中物品存有可被读取的 iota,返回 True。否则返回 False。", - "readwrite.readable/entity": "与$(l:patterns/readwrite#hexcasting:readable)$(action)审计员之精思/$类似,但会检测实体可读性,而非手中物品。", - "readwrite.writable": "如果能将 iota 写入另一只手中的物品,返回 True。否则返回 False。", - "readwrite.writable/entity": "与$(l:patterns/readwrite#hexcasting:writable)$(action)估价员之精思/$类似,但会检测实体可写性,而非手中物品。", - "readwrite.local.title": "渡鸦之思", - "readwrite.local": "物品不是唯一一个能写入信息的地方,我也可以将其存到$(hex)咒术/$自身的$(media)媒质/$里,就和栈差不多。文献将其称为$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$。它能存有一个 iota,默认为 $(l:casting/influences)$(thing)Null/$,和$(l:items/focus)$(item)核心/$差不多。它在每次使用$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$后保持不变,但也只能撑到$(hex)咒术/$结束。一旦施法结束,其值就会被清除。", - "readwrite.write/local": "移除栈顶 iota,并将其写入$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$,在施放$(hex)咒术/$的整个过程结束之前一直存在那里。", - "readwrite.read/local": "将$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$中的 iota 复制出来。(也许刚刚才用$(l:patterns/readwrite#hexcasting:write/local)$(action)福金之策略/$写进去。)", - - - "meta.eval.1": "移除栈顶的图案列表,然后就像我用$(l:items/staff)$(item)法杖/$施法一样依次运行(直到碰到$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$)。如果一个 iota 已用$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$或$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)类似手段/$作为图案加入栈中,那么该 iota 将在运行时被加到栈中。否则其将在非图案元素运行失败。", - "meta.eval.2": "若与$(l:items/focus)$(item)核心/$同时使用,它将提供$(italic)极为/$强大的操控能力。$(br2)据我找到的一张奇特卷轴所称,它还将自然的咒法体系变为了一个“图灵完备”的系统。$(br2)然而,$(hex)咒术/$能重复执行自身的次数是有限的——自然不会对失控的法术手软的!$(br2)此外,若让图案不在我的引导下操控能量,那么任何事故都可能导致后续操作不稳定甚至直接执行不了。", - "meta.for_each.1": "移除栈中的一个图案列表和一个列表,然后对后一列表中的每个元素运行前一图案列表中的图案。", - "meta.for_each.2": "更确切地说,对应后一列表中的每个元素,它将:$(li)创建一个新栈,其中包括当前栈中的所有元素和后一列表中的一个元素。$(li)绘制前一列表中的所有图案。$(li)将该栈中剩余的所有元素存进一个列表。$(br)在所有元素都运行一遍后,将该列表压入原本的栈中。$(br2)也难怪精通此操作的人都疯了。", - "meta.halt.1": "这个图案将强制停止$(hex)咒术/$的施放。它独自出现可能没什么用,我只要不绘制图案或是放下法杖就行了。", - "meta.halt.2": "但当与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$或$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$一起使用时,它就将发挥$(italic)大/$用。那些图案会碰到这个休止符,但$(hex)咒术/$本身不会停止,停止运行的是那些策略。它可以用来防止$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$将每个 iota 都运行一遍。这便是逃离疯狂的秘道。", - "meta.eval/cc.1": "此图案和$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似,也能运行图案或依次运行图案列表,但会在开始之前将一独特的“跳转” iota 压入栈中。", - "meta.eval/cc.2": "当执行至“跳转” iota 时,法术会直接跳过图案列表中剩余的图案至列表尾部。$(p)当然因为已经有了$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$,这种性质难免显得有些冗余。不过它能以可控方式退出$(italic)多层嵌套/$调用的$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$,而卡戎之策略只能退出一层。$(p)“跳转” iota 甚至会在所有策略都执行完毕后还留在栈上……真是细思恐极。", - - "circle_patterns.disclaimer": "这些图案只能在$(l:greatwork/spellcircles)$(item)法术环/$上运行。尝试用$(l:items/staff)$(item)法杖/$绘制它们会招致可怖的事故。", - "circle_patterns.circle/impetus_pos": "返回该法术环的$(l:greatwork/impetus)$(item)促动石/$的位置。", - "circle_patterns.circle/impetus_dir": "以单位向量返回该法术环的$(l:greatwork/impetus)$(item)促动石/$的面朝方向。", - "circle_patterns.circle/bounds/min": "返回该法术环影响范围的西北靠下转角的位置。", - "circle_patterns.circle/bounds/max": "返回该法术环影响范围的东南靠上转角的位置。", - - - "akashic_patterns.akashic/read": "在$(l:greatwork/akashiclib)$(item)阿卡夏记录/$处从$(l:greatwork/akashiclib)$(item)阿卡夏图书馆/$中读出所给图案对应的 iota。没有读取距离限制。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "akashic_patterns.akashic/write": "在$(l:greatwork/akashiclib)$(item)阿卡夏图书馆/$的$(l:greatwork/akashiclib)$(item)记录/$处将 iota 和所给图案对应起来。$(italic)有/$存储距离限制。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - - "_comment": "Normal Spells", - - - "itempicking.1": "某些法术,例如$(l:patterns/spells/blockworks#hexcasting:place_block)$(action)放置方块/$,会消耗物品栏内的其他物品。在这种情况下,法术会先检索要用哪个物品,然后就会消耗物品栏内所有同种物品。$(br2)这一过程被称为“挑选物品”。", - "itempicking.2": "更具体地说:$(li)首先,法术会在快捷栏内$(l:items/staff)$(item)法杖所处位置的右侧/$依次搜索可用物品,搜到最右侧后便会从最左侧开始向右搜寻。若$(l:items/staff)$(item)法杖/$在副手,则会从快捷栏一号位开始搜索。$(li)然后,法术会从$(italic)物品栏内最靠后的位置/$开始消耗同种物品,且物品栏优先于快捷栏。", - "itempicking.3": "如此,我可以在快捷栏里放一些“选择器”用来告诉法术要用哪种方块,并在物品栏内放些同种方块防止供给不足。", - - - "basic_spell.explode.1": "移除栈顶的数和向量,并在所给位置产生一次强度为所给数的爆炸。", - "basic_spell.explode.2": "强度为 3 的爆炸与苦力怕的爆炸相当,4 则与 TNT 的相当。自然倒是不让我产生强度大于 10 的爆炸。$(br2)奇怪的是,这种爆炸伤不到我。也许是因为这爆炸是$(italic)我/$引起的?$(br2)强度为 0 时消耗极少量媒质,每加一级强度多消耗 3 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "basic_spell.explode.fire.1": "移除栈顶的数和向量,并在所给位置产生一次强度为所给数的带火焰的爆炸。", - "basic_spell.explode.fire.2": "消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$,每加一级强度多消耗 3 个$(l:items/amethyst)$(item)紫水晶粉/$。就和$(l:patterns/spells/basic#hexcasting:explode)$(action)爆炸/$一模一样,除了带点火。", - "basic_spell.add_motion": "移除栈顶的实体和表示方向的向量,然后将所给实体沿所给方向推动出去。驱动力的强度由向量的模长决定。$(br)消耗向量模长的平方个$(l:items/amethyst)$(item)紫水晶粉/$。除对某实体第一次使用外,其他情况额外消耗 1 个。", - "basic_spell.blink": "移除栈顶的实体和表示长度的数,然后将所给实体沿其视线方向向前传送所给长度格。$(br)每传送两格消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", - "basic_spell.beep.1": "移除栈顶的一个向量和两个数。在指定位置以指定$(thing)乐器/$(由第一个数决定)弹奏$(thing)一个音/$(由第二个数决定)。消耗极少量$(media)媒质/$。", - "basic_spell.beep.2": "共有 16 种$(thing)乐器/$和 25 种$(thing)音高/$。两者的下标均从 0 开始。$(br2)这些乐器似乎就是$(item)音符盒/$对应的各种乐器,尽管其具体对应关系不得而知。$(br2)不管怎么说,用$(l:items/lens)$(item)探知透镜/$观察$(item)音符盒/$就能得知其乐器对应的数字。", - - - "blockworks.place_block": "移除一个位置向量,然后挑选一个方块并放在给定位置。$(br)消耗大约 1/8 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "blockworks.break_block": "移除一个位置向量,然后破坏给定位置的方块。此法术能破坏几乎所有钻石镐能破坏的方块。$(br)消耗大约 1/8 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "blockworks.create_water": "在给定位置生成一格水(或给流体容器注入至多一桶水)。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "blockworks.destroy_water": "清空给定位置的流体容器,或是清除给定位置周围的液体。消耗大约 2 个$(l:items/amethyst)$(item)充能紫水晶/$。", - "blockworks.conjure_block": "在给定位置构筑一个空灵缥缈却坚硬可触的,闪着光的方块。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "blockworks.conjure_light": "在给定位置构筑一个发着我染色剂颜色的光的魔法光源。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "blockworks.bonemeal": "使目标位置的植物或树苗更快成长,就像对其施以$(item)骨粉/$一样。消耗略多于 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "blockworks.edify": "将$(media)媒质/$强制注入目标位置的树苗,使其长为$(l:items/edified)$(thing)启迪树/$。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", - "blockworks.ignite": "在给定位置上方生火,就像在该位置使用$(item)火焰弹/$一样。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "blockworks.extinguish": "熄灭周围较大区域内的火焰。消耗大约 6 个$(l:items/amethyst)$(item)紫水晶粉/$。", - - - "nadirs.1": "此类法术会给予某一实体一个负面药水效果。它们都接受一个实体作为效果受体,和一两个数。其中第一个数是持续时间,第二个数(若有)是效果强度(以 1 起始)。$(br2)每种法术都有一个“基础消耗”,实际消耗为基础消耗乘以效果强度的平方。", - "nadirs.2": "据某些传说所言,这些法术和它们的姊妹法术——$(l:patterns/great_spells/zeniths)$(action)天顶法术/$,都是“……由另一个世界的魔法启发的。在那个世界里,强大的魔法师会从四处收集魔法并决斗至死。不幸的是,许多信息都没翻译过来……”$(br2)也许这就是它们名字怪异的原因。", - "nadirs.potion/weakness": "给予$(thing)虚弱/$。每 10 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "nadirs.potion/levitation": "给予$(thing)飘浮/$。每 5 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "nadirs.potion/wither": "给予$(thing)凋零/$。每 1 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "nadirs.potion/poison": "给予$(thing)中毒/$。每 3 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "nadirs.potion/slowness": "给予$(thing)缓慢/$。每 5 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - - - "hexcasting_spell.basics": "这三个法术都能制作$(l:items/hexcasting)$(thing)用于施放$(hex)咒术/$的物品/$。$(br)它们都要求我在另一只手上手持对应的基础物品,并且需提供两个参数:需运行的图案和一个用作电池的$(l:items/amethyst)$(item)紫水晶/$物品实体。$(br2)详情参见$(l:items/hexcasting)此条目/$。", - "hexcasting_spell.craft/cypher": "消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", - "hexcasting_spell.craft/trinket": "消耗大约 5 个$(l:items/amethyst)$(item)充能紫水晶/$。", - "hexcasting_spell.craft/artifact": "消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", - "hexcasting_spell.recharge.1": "给另一只手中的能装$(media)媒质/$的物品重新充能。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", - "hexcasting_spell.recharge.2": "此法术的施放方式和制作施法物品所用法术的类似。提供一个$(l:items/amethyst)$(item)紫水晶/$物品实体,就能给另一只手中物品的$(media)媒质/$电池重新充能。$(br2)此法术$(italic)不能/$充入超过电池大小的媒质。", - "hexcasting_spell.erase.1": "清除另一只手中写有$(hex)咒术/$的物品。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "hexcasting_spell.erase.2": "此法术也会清除物品内存储的$(media)媒质/$,将其释放给自然并将物品恢复到其初始状态。如此就能回收利用容易出错的$(l:items/hexcasting)$(item)缀品/$了。$(br2)此法术也能清除$(l:items/focus)$(item)核心/$和$(l:items/spellbook)$(item)法术书/$书页内容,同时去除其上密封。", - - - "sentinels.1": "$(italic)去吧!现在一切都已完成,$(br)只须留着一个人作哨卫。/$$(br2)$(l:patterns/spells/sentinels)$(thing)哨卫/$是一种能被$(hex)咒术/$召唤出的神秘力量,就和亲人或是侍卫一样。对我而言,它是一个旋转着的几何体,而其他人看不见它。", - "sentinels.2": "它有些有趣的性质:$(li)它似乎不可被触摸,没人摸得到它。$(li)只有我的$(hex)咒术/$才能与之交互。$(li)一旦召唤,在被驱除前它都将留在原位。$(li)只要我离它足够近,我就能透过方块看见它。", - "sentinels.sentinel/create": "在给定位置召唤哨卫$(l:patterns/spells/sentinels)$(thing)哨卫/$。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "sentinels.sentinel/destroy": "将我的$(l:patterns/spells/sentinels)$(thing)哨卫/$从世界中驱除出去。消耗极少量$(media)媒质/$。", - "sentinels.sentinel/get_pos": "将我的$(l:patterns/spells/sentinels)$(thing)哨卫/$的位置加到栈中,若并未召唤则加入一个 $(l:casting/influences)$(thing)Null/$。消耗极少量$(media)媒质/$。", - "sentinels.sentinel/wayfind": "将栈顶的位置向量变为从我的位置指向$(l:patterns/spells/sentinels)$(thing)哨卫/$的单位向量,若并未召唤则变为 $(l:casting/influences)$(thing)Null/$。消耗极少量$(media)媒质/$。", - - "colorize": "我需要在施法时在另一只手中持有$(l:items/pigments)$(item)染色剂/$。施法后,染色剂将被消耗而我意识的颜色也将永久改变(至少是在再次施法前)。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - - - "flights.1": "尽管无法掌握自由飞行的力量,我还是找到了若干能将物体滞空的方法,但各种方法各有缺陷。$(br2)所有种类的飞行法术都会产生微量多余$(media)媒质/$。在法术效果将要结束时,其会产生越来越多红色和黑色的火花。", - "flights.2": "当然,也有其他种类的飞行法术。例如,将$(l:patterns/spells/basic#hexcasting:add_motion)$(action)驱动/$和$(l:patterns/spells/nadirs#hexcasting:potion/levitation)$(action)蓝阳西沉/$结合使用的类飞行技术自古代起就多有运用。$(br2)我还听说过一种能给予滑翔能力的,可以穿在背上的薄透翼膜。研究表明,被称为“$(l:patterns/great_spells/altiora)$(action)翱翔/$”的卓越法术也许能模仿这种翼膜的功用。", - "flights.range.1": "受范围限制的飞行法术。", - "flights.range.2": "第二参数代表水平方向上的半径(以米计),在此范围内,法术能保持稳定。走出该范围就会结束该法术,滞空的物体会直接坠向地面。但只要一直呆在这个范围内,法术的效果便会无限持续。此法术还会额外产生微量$(media)媒质/$用以标记安全区域中心点。$(br2)每米安全范围消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "flights.time.1": "受时间限制的飞行法术。", - "flights.time.2": "第二参数代表持续时间(以秒计),在此限制内,法术能保持稳定。持续时间超过限制就会结束该法术,滞空的物体会直接坠向地面。$(br2)此法术相对较昂贵,每秒持续时间消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。我觉得它极其适合长途旅行。", - - "create_lava.1": "在给定位置生成一格熔岩(或给流体容器注入至多一桶熔岩)。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", - "create_lava.2": "建议不要声张自己知道这个法术。某些植物学家对此……比较敏感,至少我听说是这样。$(br2)也罢,确实没人说过探究宇宙最深层的秘密是什么好干的活。", + math: { + numvec: "许多数学操作对数和向量都有效。这类参数记为“num vec”。", + "add.1": "执行加法。", + "add.2": "操作如下:$(li)若栈顶为两个数,返回其和。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相加。$(li)若为两个向量,将对应分量相加(也即 [1, 2, 3] + [0, 4, -1] = [1, 6, 2])。", - "weather_manip.lightning": "我能命令苍穹!此法术会在我所想之处召唤一道落雷。消耗大约 3 个$(l:items/amethyst)$(item)紫水晶碎片/$。", - "weather_manip.summon_rain": "我能控制云彩!此法术会在我所处世界各处召来雨水。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。若已在下雨就无效。", - "weather_manip.dispel_rain": "召雨的反面。此法术会将我所处世界的雨水驱离。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。若未在下雨就无效。", + "sub.1": "执行减法。", + "sub.2": "操作如下:$(li)若栈顶为两个数,返回其差。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相减。$(li)若为两个向量,将对应分量相减。$(br2)栈顶元素或其分量为减数,栈顶往下第二元素或其分量为被减数。", - "altiora.1": "此法术会将一束$(media)媒质/$在我身旁塑成翅膀状,并赋予其足够物质性,从而允许施法者滑翔。", - "altiora.2": "这对翅膀的操作方式与$(item)鞘翅/$完全一致。目标(必须是玩家)会被弹起而升空,此时按下$(k:jump)就能张开翅膀。这些翅膀十分脆弱,会在触碰到任意表面时破碎消失。长距飞行则可能需要$(l:patterns/spells/basic#hexcasting:add_motion)$(action)驱动/$或者$(item)烟花火箭/$(可能稍显鲁莽)的协助。$(br2)消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + "mul.1": "执行乘法或点积。", + "mul.2": "操作如下:$(li)若栈顶为两个数,返回其积。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相乘。$(li)若为两个向量,计算其$(l:https://www.mathsisfun.com/algebra/vectors-dot-product.html)点积/$。", - "teleport/great.1": "比$(l:patterns/spells/basic#hexcasting:blink)$(action)闪现/$更为强大,此法术能让我传送到世界上几乎任何一处!当然它也有极限,但可比我熟悉的施法距离要远得$(italic)多/$。", - "teleport/great.2": "实体会按所给向量偏移出其原有位置。它似乎一直会消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$,不论传送距离。$(br2)当然这种传送也不是尽善尽美的,在传送如玩家般复杂的实体时,实体身上的物品就不会$(italic)非常/$安稳了,它们可能会散落在目的地周围。还有,传送的实体将会被强制从其所乘坐的无生命载具中卸下……但我曾读到过动物可以一起被传送,大概吧。", + "div.1": "执行除法或叉积。", + "div.2": "操作如下:$(li)若栈顶为两个数,返回其商。$(li)若为一个数和一个向量,移除该数并将向量的每个分量与其相除。$(li)若为两个向量,计算其$(l:https://www.mathsisfun.com/algebra/vectors-cross-product.html)叉积/$。$(br2)第一第二种情况下,栈顶元素或其分量为除数,栈顶往下第二元素或其分量为被除数。$(p)警告:绝对不可除以零!", + "abs.1": "计算绝对值或模长。", + "abs.2": "将一个数变为其绝对值,将一个向量变为其模长。", - "zeniths.1": "此类法术会给予某一实体一个正面药水效果,与$(l:patterns/spells/nadirs)$(action)天底法术/$类似。然而,它们的$(media)媒质/$消耗会按效果强度的$(italic)立方/$计算。", - "zeniths.potion/regeneration": "给予$(thing)生命恢复/$。每 1 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "zeniths.potion/night_vision": "给予$(thing)夜视/$。每 5 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "zeniths.potion/absorption": "给予$(thing)伤害吸收/$。每 1 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "zeniths.potion/haste": "给予$(thing)急迫/$。每 3 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "zeniths.potion/strength": "给予$(thing)力量/$。每 3 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "pow.1": "执行乘方或向量射影。", + "pow.2": "若栈顶为两个数,返回两数的乘方。$(li)若为一个数和一个向量,移除该数并计算向量的每个分量与该数的乘方。$(li)若为两个向量,计算栈顶向量对栈顶往下第二向量的$(l:https://en.wikipedia.org/wiki/Vector_projection)向量射影/$。$(br2)第一第二种情况下,栈顶元素或其分量为指数, 栈顶往下第二元素或其分量为底数。", - "greater_sentinel.1": "召唤一个比普通$(l:patterns/spells/sentinels)$(thing)哨卫/$要强大的哨卫。消耗大约 2 个$(l:items/amethyst)$(item)紫水晶粉/$。", - "greater_sentinel.2": "卓越$(l:patterns/spells/sentinels)$(thing)哨卫/$除了看上去更奇特外和不用卓越法术召唤的哨卫一样。然而,我法术的生效范围会扩展到卓越$(l:patterns/spells/sentinels)$(thing)哨卫/$周围小范围处,大概是哨卫周围 16 格内。换句话说,不管我在世界上何处,我都能与卓越$(l:patterns/spells/sentinels)$(thing)哨卫/$周围的方块交互(尽管仍会受到“区块加载”这一神秘力量的影响)。", + floor: "对一个数取底,也即去掉小数部分取整。或对向量的每个分量取底。", + ceil: "对一个数取顶,也即将小数部分不为零的数换为大于其的最小整数。或对向量的每个分量取顶。", + construct_vec: "将三个数作为向量的 X,Y,Z 分量组合(最下方为 X 分量)。", + deconstruct_vec: "将一个向量拆分为其 X,Y,Z 分量(最下方为 X 分量)。", + modulo: "取两数除法的余数。也即执行除法后$(italic)剩余/$的数。例如,5 %% 2 得 1,5 %% 3 得 2。或对向量的每个分量执行上述操作。", + coerce_axial: "若栈顶为向量,则返回与其夹角最小的轴向单位向量;零向量不受影响。若栈顶为数,则返回该数的符号;所给数为正则返回 1,为负则返回 -1,0 不受影响。", + random: "返回一个 0 与 1 之间的随机数。", + }, - "make_battery.1": "将$(media)媒质/$注入一个玻璃瓶,从而制成$(l:items/phials)$(item)试剂瓶/$。", - "make_battery.2": "和用于$(l:patterns/spells/hexcasting)$(action)制作施法物品/$的法术类似,我需要在另一只手中拿着一个$(item)玻璃瓶/$,并提供一个$(l:items/amethyst)$(item)紫水晶/$物品实体作为参数。更多信息参见$(l:items/phials)此页/$。$(br2)消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + advanced_math: { + sin: "计算所给角(弧度制)的正弦,也即该角在单位圆上的纵坐标。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", + cos: "计算所给角(弧度制)的余弦,也即该角在单位圆上的横坐标。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", + tan: "计算所给角(弧度制)的正切,也即该角在单位圆上的斜率。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", + arcsin: "计算所给数(绝对值小于 1)的反正弦,也即正弦为该值的角。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", + arccos: "计算所给数(绝对值小于 1)的反余弦,也即余弦为该值的角。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", + arctan: "计算所给数的反正切,也即正切为该值的角。与 $(l:patterns/consts#hexcasting:const/double/pi)$(thing)π/$ 和 $(l:patterns/consts#hexcasting:const/double/tau)$(thing)τ/$ 的值有关。", + arctan2: "计算所给纵坐标与横坐标的反正切,也即计算 X 轴正向,与原点至所给坐标的射线间的夹角。", + logarithm: "计算以栈顶元素为底的,栈顶往下第二元素为真数的对数。与 $(l:patterns/consts#hexcasting:const/double/e)$(thing)$(italic)e/$ 的值有关。", + }, - "brainsweep_spell.1": "我搞不懂这个法术……说实话,我也不清楚我到底想不想搞懂。", + sets: { + numlist: "集合操作比较奇怪,部分操作只能接受两个数或两个列表,一个数一个列表就不行。这类参数记为“(num, num) (list, list)”。$(br2)当接受的是数时,它们将被视为所谓二进制的“位组”,也就是由 1 和 0、真和假、“开”和“关”组成的列表。", + "or.1": "取两集合的并集。", + "or.2": "操作如下:$(li)若栈顶为两个数,将其组合为在两个位组中有一个为 1 处为 1 的位组。$(li)若栈顶为两个列表,则创建一个由第一个列表中所有元素和第二个列表独有的元素组成的列表。和$(l:patterns/lists#hexcasting:add)$(action)组合之馏化/$类似。", + "and.1": "取两集合的交集。", + "and.2": "操作如下:$(li)若栈顶为两个数,将其组合为仅在两个位组中$(italic)均/$为 1 处为 1 的位组。$(li)若栈顶为两个列表,则创建一个由第一个和第二个列表共有的元素组成的列表。", + "xor.1": "取两集合中每个集合独有的元素集合。", + "xor.2": "操作如下:$(li)若栈顶为两个数,将其组合为仅在两个位组中$(italic)仅一个/$为 1 处为 1 的位组。$(li)若栈顶为两个列表,则创建一个在两个列表中$(italic)仅出现一次/$的元素组成的列表。", + not: "对位组执行位非操作,将所有为 1 的比特换为 0,反之亦然。就我经验而言,这会使一个数变为其相反数,然后减 1。例如,0 会变成 -1,而 -100 会变成 99。", + to_set: "去除列表内重复的元素。", + }, - "lore.cardamom1.1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#1/$$(br2)亲爱的爸爸,$(br)我对你攒钱送我来大图书馆的感激之情与日俱增。在这里学到的知识真是不可思议!我实在没法把我所见所想全部描述出来……能来这里真是太棒了。", - "lore.cardamom1.2": "我写这封信时正坐在主穹顶下,它是由咒法学学生联合会维护和保养的。他们在穹顶顶部装设了某种奇特的装置,由此就能捕获从勤奋苦攻的学生的课桌中逸散出来的散在思维能量,至少我了解到的是这样。我的舍友阿曼妮塔就在钻研这门学问,她也非常愿意滔滔不绝地为我解释其中原理,尽管我得承认我听不大懂。", - "lore.cardamom1.3": "就我的理解而言,我们思考的过程——也就是驱动我写这封信和你读这封信的无形机制——并不那么有效。一小部分能量会逸散到环境中,就和马车的车轴在长途跋涉后摸起来会有点烫一样。这些散在能量叫做“媒质”。一个人的散在媒质微不足道,但主穹顶下成百上千位思考者加在一起就不得了了,说不定会按几何级数增长呢!再配上某些绝妙的装置,这些媒质就能被固化为某种紫色的水晶。", - "lore.cardamom1.4": "有关她所研究的学问就讲这么多了。我今天和地质学学生联合会进行的第一次勘探告一段落啦!出发前没能写封信对不起啦,时间过得太快了。我们去了大图书馆东边的一道裂谷里冒险,还在层层岩石和土壤底下扎营过了夜。当然,我们只探索了洞穴里光照良好且勘探完全的地方。我觉得,在洞穴里过夜比在地表要安全得多,尽管我还是被狠狠地吓到了!", - "lore.cardamom1.5": "还好夜里没发生什么坏事,之后我们就往更深的地方去勘探本地矿脉了。我们在找的是一种稀有的紫色水晶矿脉,称作“紫水晶”,它们只以痕量出现在地层中。可惜的是,我们什么都没找到,只能两手空空地返回地表。", - "lore.cardamom1.6": "现在再想,这种“紫水晶”的外观描述貌似和阿曼妮塔所讲的媒质水晶极为类似。它们要是会自然形成于地底该怎么样,光是想想都兴奋!不过想来也是不大可能的吧……", - "lore.cardamom1.7": "作为一名学生,我每三个月能在阿卡夏邮局免费送一封信。但你也知道,我们并不富裕……恐怕这是唯一一种能和你说上话的方式了。你攒钱回信我再感激不过,但我们之间的联系机会恐怕不会很多。不过我认为,我在这能学到的知识可能远超贷款上写的数字的价值。我大概会是家族中第一个不当农民的人吧!", - "lore.cardamom1.8": "我三个月后会再写封信的。$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + "consts.const/": { + "null": "返回 $(l:casting/influences)$(thing)Null/$ 这一虚指。", + "true": "返回 $(thing)True/$。", + "false": "返回 $(thing)False/$。", + "vec/": { + x: "左图(逆时针绘制)返回 [1, 0, 0];右图(顺时针绘制)返回 [-1, 0, 0]。", + y: "左图(逆时针绘制)返回 [0, 1, 0];右图(顺时针绘制)返回 [0, -1, 0]。", + z: "左图(逆时针绘制)返回 [0, 0, 1];右图(顺时针绘制)返回 [0, 0, -1]。", + "0": "返回 [0, 0, 0]。", + }, - "lore.cardamom2.1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#2/$$(br2)亲爱的爸爸,$(br)……天哪,把过去三个月的经历全写进信里真是件难事。这么难办的事居然是我免费得来的奇迹赐予的!我还真是辛苦。", - "lore.cardamom2.2": "我在地质学联合会的研究正稳步推进。我们又进行了一次实地考察,这次范围更深,深达灰色的岩石隐去而硬质的片状板岩出现的地方。那里的岩石会在脚下碎成呛人的粉末……脚下的危险已经需要打起十二分精神,更不用说对付那些藏身于黑暗的生物了。(我之前曾遇到过这种生物一两次,但我知道你会为我经受生死考验而坐立难安,所以就不提了。)", - "lore.cardamom2.3": "不过,我们确实发现了一些之前所说的紫水晶。在某次小型勘探中我们发现了个只有丁点水晶的小矿脉。我们需要严格遵守勘探规章,所以找到的紫水晶需全部取走并立刻上交给联合会中的学长。这整条规定不管怎么看都很荒诞。他们把这当做重要至极而绝密的事件,但又把考察交给来这总共还不到六个月的新生去做,还就在那么几巴掌大的地方用足足十二把探矿镐开采总共十克都不到的东西……", - "lore.cardamom2.4": "我完全想不明白为什么要这么做。一位图书管理员给我推荐了本宝石百科,其中提到紫水晶的用途接近于零。它主要用于制作某些特种玻璃和镜片,也基本算是没什么用了。$(br2)要是我猜,我会觉得紫水晶和他们口中的媒质是一种东西,就和我上次说的一样。", - "lore.cardamom2.5": "假如我的猜想属实,那那些严格的保密措施和学长们对质疑的排斥,也许就是因为这是大图书馆的原创性研究成果,而且不能让某些竞争对手知道。$(br2)然而,这个理论还是有点站不住脚。矿洞中发现的紫水晶和阿曼妮塔给我看的那些媒质水晶确实很相像,但并不完全一致。也许只有把两者放在一起才能看出端倪,不过媒质明显有种奇特的嗡鸣感和振动感,而紫水晶没有。", - "lore.cardamom2.6": "也许感受不到紫水晶的嗡鸣和振动只不过是身处地下的心理压力。我唯一一次摸到紫水晶时手一直在抖,而且触感确实很轻盈,不过对我而言两者的触感并不完全一致。两者的折射率也略有不同。$(br2)如果有机会在矿洞外碰见紫水晶,我一定要问下阿曼妮塔她能不能用紫水晶施咒。而且似乎每次我们碰面,她都新学到了些奇妙的技艺。", - "lore.cardamom2.7": "就在上周,她把我悬到了空中,而且完全没用支撑物!轻微的刺痛感,体感比空气还轻盈,但衣服又还是原本的重量……这种感觉非常奇怪。不过我确实很庆幸她在效果结束前把我拉到了床的正上方。$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + "double/": { + tau: "返回 τ,也即圆的弧度。", + pi: "返回 π,也即半圆的弧度。", + "e": "返回 $(italic)e/$,也即自然对数的底。", + }, + }, + stackmanip: { + "pseudo-novice.title": "初学者之策略", + "pseudo-novice": "移除栈顶的 iota。$(br2)这似乎是$(l:patterns/stackmanip#hexcasting:mask)$(action)簿记员之策略/$的一种特殊形式。", + + swap: "交换栈顶两个 iota 的位置。", + rotate: "将栈顶往下第三元素拉至栈顶。[0, 1, 2] 变为 [1, 2, 0]。", + rotate_reverse: "将栈顶元素沉至栈顶往下第三位处。[0, 1, 2] 变为 [2, 0, 1]。", + duplicate: "复制栈顶的 iota。", + over: "将栈顶往下第二元素复制至栈顶。[0, 1] 变为 [0, 1, 0]。", + tuck: "将栈底元素复制至栈顶往下第二元素下方。[0, 1] 变为 [1, 0, 1]。", + "2dup": "复制栈顶的两个 iota。[0, 1] 变为 [0, 1, 0, 1]。", + stack_len: "以数的形式压入栈中元素的个数。(例如,一个形如 [0, 1] 的栈会变为 [0, 1, 2]。)", + duplicate_n: "移除栈顶的数,然后将现在的栈顶元素复制该数次。(若所给数为 2,则栈顶会有两个同一元素。)", + fisherman: "提出下标为所给数的元素并将其置于栈顶。", + "fisherman/copy": "与$(l:patterns/stackmanip#hexcasting:fisherman)$(action)渔夫之策略/$类似,但会复制 iota 而非将其提出。", + + mask: { + "1": "一组无限个根据凹槽和横线的顺序来保留或移除栈中元素的操作。", + "2": "假如从左到右绘制书吏之策略,此操作操控的 iota 个数由其横向长度决定。从靠近栈底端开始计入,一条横线代表保留该处元素,一个凹槽代表移除该处元素。$(br2)如果栈从栈底起形如 $(italic)0, 1, 2/$ ,绘制左页例图一,则栈变为 $(italic)1/$;例图二会将栈变为 $(italic)0/$;例图三会将栈变为 $(italic)0, 2/$(栈底的 0 不受影响)。", + }, - "lore.cardamom3.1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第一部分/$$(br2)亲爱的爸爸,$(br)自从上次写信以来发生了两桩怪事。$(br2)第一件,负责管理入门等级咒法学联合会学生的教授失踪了。没人知道他去了哪里。他的办公室和住所都被上了锁,但里面还是那副乱糟糟的样子。", - "lore.cardamom3.2": "更奇怪的是,不管大图书馆的学生怎么激那帮冗杂官僚里管行政的人员,送去的信件都还被一一打回。连其他教授都不愿谈及他。$(br2)也正如你可能在担心的,阿曼妮塔十分沮丧。无论大图书馆派来哪位教授接任,都不如原先的教授那样善解人意和乐于助人。", - "lore.cardamom3.3": "但是,这还不是最怪的那件事。这件事——我很希望之后不要再碰到比这还骇人的事了——发生在我和地质学联合会的又一次考察中,我们计划前去某个村庄附近。", - "lore.cardamom3.4": "通常去居民点附近考察时,我们要与村庄的村长或长老进行长时间的磋商,以确定我们的行为是被允许的,并划定我们能去的地方和能做的事。但这次不一样,这次没有磋商。出发前两天我们才被告知这次要跟着咒法学联合会的一位学长去。", - "lore.cardamom3.5": "我们在村庄附近的密林中扎营,不知道为什么不选附近的平原。支帐篷的地方几乎看不到村庄。在刚到那天的晚上,我铺开睡袋时,周围是死一般的寂静。就算我们看不见村庄,我们也应该能听到村庄里的声音。但是在地表呆着的整段时间里,我却几乎什么都听不见。", - "lore.cardamom3.6": "我听到的为数不多的声音都像是劳作时发出的那种,比如锤子砸到铁砧上的响声和锄头翻土的噪声。我完全没听到说话声。$(br2)第二天早晨我们就备好灯笼进入了地下。", - "lore.cardamom3.7": "我们没被告知到底要找什么,但有学生听说我们是来找紫水晶的,这貌似说得通。我早已练出能在矿洞壁上瞄中任何一小点紫色闪光的绝技,但就在灰色岩石和黑色板岩的交界处,我面前却赫然出现了一座奇观。$(br2)那是一整个紫水晶晶洞,快有十个我那么高,并随着灯光闪着紫色光芒,洞壁的每一面都被尖锐的紫色水晶覆盖。那些紫水晶比我来大图书馆之后整个探险组挖到的所有加起来还多。", - "lore.cardamom3.8": "我们每人被发了一副手套并被告知加紧开采。和我们同行的一位学长拿出了一个奇特的淡紫色盒子,高层人员会拿这种盒子来装东西,我和其他学生则兢兢业业地把那些玻璃质水晶从墙上砸下,然后放到盒子里去。外层脆性水晶的基座后方似乎有两种更为致密的构造。一种和外层水晶类似,但另一种更为……我词穷了。", - "lore.cardamom3.9": "“重要”这词也不合适,但这是我能想到的最贴切的形容词了。它有一种特殊的……庄重感,就好像它上面的 X 形暗色深槽有某种神圣的意味。但出于某种理由,我们被严令禁止触摸它们。偶尔某名学生会不小心敲碎一块,那样的话那名学生就会被严厉责骂。尽管我全身心投入了繁复的开采工作,我还是感觉……格外的清醒。这种感受很混杂:我的思维非常清晰,但同时我感受到,如果我放下手头工作去探究那种感受的话,可能就再也探究不完了。", - "lore.cardamom3.10": "就好像每次吸气,我脑袋里就竖起一个路标,我能感受到它正坚定地为我指示正确的道路,然而实际上指向的却是一座陡崖。我甩了甩头又继续开采,甩头似乎有助于无视那些路标。$(br2)不过我成功偷藏了一小块水晶碎片。$(br2)我们采矿采了快一整天,到学长的时间计指示太阳快落山时我们几乎把剩下的水晶都挖完了。", - "lore.cardamom3.11": "就在我们要离开的时候,我又留意到先前禁止我们开采的那些水晶,它们暗色的深槽里似乎新出现了晶芽,就好像它们从中长出来了一样。我所知的地质学中有关水晶的所有知识都表明,这些水晶需要成千上万年才能长成,但仅在一天之内,新水晶就在我的眼前凭空出现了。学长们的开采禁令确实有道理,大概吧。", - "lore.cardamom3.12": "回到地表的路程中没发生什么事,我们也正好在太阳落山的时候回到了营地。非常抱歉,信纸快用完了。阿卡夏信笺只够写这些字但这故事值得两封信一起寄应该能同时到$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + swizzle: { + "1": "根据所给数字代码重排栈顶若干元素。", + "2": "我确实不知道数字代码和重排操作的完整对应关系,但我整理了一份对应表格,其中整理了最多六个元素的重排的编码。$(br2)如果要找延伸阅读资料,可以搜索“Lehmer Code”。", + link: "编码列表", + }, + }, + logic: { + bool_coerce: "将参数变换为布尔值。数 $(thing)0/$、$(l:casting/influences)$(thing)Null/$,以及空列表会变为 False。其余所有则变为 True。", + bool_to_number: "将布尔值变换为数。True 变为 $(thing)1/$, False 变为 $(thing)0/$。", + not: "如果参数是 True,返回 False;如果参数是 False,返回 True。", + or: "如果至少有一个参数是 True,返回 True。否则返回 False。", + and: "如果两个参数都是 True,返回 True。否则返回 False。", + xor: "如果参数中仅一个是 True,返回 True。否则返回 False。", + if: "如果第一个参数是 True,保留第二个参数并移除第三个。否则保留第三个参数并移除第二个。", + equals: "如果第一个参数等于第二个(允许较小误差),返回 True。否则返回 False。", + not_equals: "如果第一个参数不等于第二个(允许较小误差),返回 True。否则返回 False。", + greater: "如果第一个参数大于第二个,返回 True. 否则返回 False。", + less: "如果第一个参数小于第二个,返回 True。否则返回 False。", + greater_eq: "如果第一个参数大于或等于第二个,返回 True。否则返回 False。", + less_eq: "如果第一个参数小于或等于第二个,返回 True。否则返回 False。", + }, - "lore.cardamom4.1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第二部分/$$(br2)亲爱的爸爸,$(br)正如我所说,信纸不够了,故事剩余部分就放在这份信里了。我们正好在太阳落山时回到了营地。而那天晚上的经历是整个奇怪考察中最为骇人的。", - "lore.cardamom4.2": "我半夜醒来想去方便一下。那时云层完全把月亮遮住了,我在森林中迷了路,找不回营地。但我又害怕夜晚的那些怪物,于是就决定去村庄里找个地方睡觉。至少那里是安全的。", - "lore.cardamom4.3": "村庄倒是很好找,尽管村庄里没有哪怕一点声音。就算这么晚了,旅店不说人来人往,也绝不会悄无声息。但无论怎么看旅馆的门缝,我都没能发现任何人的踪影。$(br2)我敲了敲一间房子的门,没有回应。再敲旁边的两间,也都没有回应,甚至感觉就像是房子从来就空着一样。", - "lore.cardamom4.4": "我的心跳得越来越快,但又铆足勇气进下一间房里看看。我想不管房里住着什么人,他都会理解的。至少,能听见另一个人的声音,我就安心了,就算他们不让我在房里过夜,起码也能安心。$(br2)房子很小,只够挤下一张床和一个制图台。我看见床上躺了人,就试着安慰我自己村子里的人不过是睡得很熟罢了。然后我转头就要离开。", - "lore.cardamom4.5": "但就在这时云层散开了,月光洒到了床上的生物上。$(br2)我忍不住叫了出来,它的眼睛也应声睁开。它……长得很怪异,很明显不是人类,反倒像是某种人类的退化产物。它的额头拔得很高,它的身体矮胖而笨拙,我想拿“它”这个字形容比较合适。那个生物明显没有人类的智慧,虽然它看起来像是人类。", - "lore.cardamom4.6": "它的视线直接对准了我——它的眼睛暗淡、了无智慧,就和绵羊的一样!它开了口,但发出的声音仅是对言语的无情亵渎——是一声令人颤栗的哼叫。", - "lore.cardamom4.7": "我落荒而逃。在月光的照耀下,我透过道旁的窗户瞥见了其他镇民,他们都已被扭曲到……长得和我先前所见的那个$(italic)怪物/$一模一样。我迅速跑回森林里,一心只想逃离那些扭曲的脸孔和那恐怖的动物般的眼睛。$(br2)多亏有月光,营地好找多了。不过好像没人注意到我失踪了一段时间,还好还好。我躺回了我的睡袋,整晚一直在想方设法忘记那段经历。", - "lore.cardamom4.8": "但从这封信里也能看出,我并没能忘掉。那个扭曲的身影仍萦绕在我的梦境里。我只要想到那东西曾经可能是个人类就脊背发凉。$(br2)一回到大图书馆,我就给阿曼妮塔看了偷带回来的水晶碎片。她肯定了我的猜想:这是一块媒质水晶。但她完全无法想象地下居然有满是这种水晶的巨大晶洞。", - "lore.cardamom4.9": "她还提到了某些有意思的事情:媒质水晶和真正的紫水晶都能用于制造先前我提过的特种玻璃。媒质水晶和紫水晶的晶体构造和物理性质几乎完全一致,而这和媒质的魔法性质没有关系,她是这么说的。$(br2)我最后没把遭遇满村怪物的经历告诉她。", - "lore.cardamom4.10": "我知道我们家生活拮据,也知道从家里送一封信过来有多贵,但我求你,求你能给我一句忠告。我自从那时起一直心慌意乱,能读到你的信就是莫大的安慰。$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + entities: { + get_entity: "将栈顶位置向量变为该处实体(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + "get_entity/": { + animal: "将栈顶位置向量变为该处动物(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + monster: "将栈顶位置向量变为该处怪物(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + item: "将栈顶位置向量变为该处物品实体(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + player: "将栈顶位置向量变为该处玩家(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + living: "将栈顶位置向量变为该处生物(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + }, + zone_entity: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有实体的列表。", + "zone_entity/": { + animal: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有动物的列表。", + not_animal: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非动物实体的列表。", + monster: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有怪物的列表。", + not_monster: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非怪物实体的列表。", + item: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有掉落的物品的列表。", + not_item: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非物品实体的列表。", + player: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有玩家的列表。", + not_player: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非玩家实体的列表。", + living: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有生物的列表。", + not_living: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有非生物实体的列表。", + }, + }, + + lists: { + index: "移除栈顶的数,将栈顶的列表变为其中下标为该数(就是被移除的那个数)的元素。若该数越界,则将列表换为 $(l:casting/influences)$(thing)Null/$。", + slice: "移除栈顶的两个数,将栈顶的列表变为其中下标在两个数之间元素的子列表,包含下标下界,不含下标上界。例如,[0, 1, 2, 3, 4] 的 0, 2 子列表是 [0, 1]。", + append: "移除栈顶元素,将其加到栈顶列表的末尾。", + unappend: "移除栈顶列表末尾的元素,将其加到栈顶。", + add: "移除栈顶列表,将其中元素加到当前栈顶列表的末尾。", + empty_list: "压入一个空列表。", + singleton: "移除栈顶元素,而后返回一个仅包含该元素的列表。", + abs: "移除栈顶列表,而后返回该列表中元素的个数。", + reverse: "倒置栈顶列表。", + index_of: "移除栈顶元素,并将栈顶列表变为该元素在其中第一次出现的位置(从 0 开始)。若没有出现过则返回 -1。", + remove_from: "移除栈顶的数,而后移除栈顶列表中下标为该数(就是被移除的那个数)的元素。", + replace: "移除栈顶元素和栈顶的数,而后将栈顶列表中下标为该数(就是被移除的那个数)变为该元素。若该数越界则不进行操作。", + last_n_list: "移除$(italic)所给数/$个元素,并将这些元素加入列表并将该列表压入栈顶。", + splat: "移除栈顶列表,而后将其中元素全部压入栈顶。", + construct: "移除栈顶元素,将其加到栈顶列表的开头。", + deconstruct: "移除栈顶列表中的第一个元素,并将该元素压入栈顶。", + }, + + patterns_as_iotas: { + "1": "咒法学中的一个怪异之处就是$(italic)图案本身/$也可被视为 iota ——其甚至能在施法时被压到栈中。$(br2)这就产生了一个问题:我怎么把图案用作 iota 呢?如果就只是画一遍,自然大概不会将其理解为“把它加到栈里”,而只会将其与操作对应起来。", + "2": "幸运的是,自然提供了一组专用于此道的$(l:casting/influences)虚指/$。$(br2)简而言之,$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$使我能将一个图案加到栈中,$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$和$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$则能加入一整个列表。", + escape: { + "1": "要使用$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$,先绘制它,然后绘制任意图案。第二个图案就会被加到栈中。", + "2": "如果对计算机科学有足够了解的话,你可能能将其与“转义”/“escape”操作联系起来。$(br2)考察的一大用途是将某一图案复制到$(l:items/scroll)$(item)卷轴/$或$(l:items/slate)$(item)石板/$上,且要和$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$配合使用。这之后卷轴和石板就能拿来装饰了。", + }, + parens: { + "1": "绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$会让这之后绘制的图案不再与操作联系。而在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)反思/$后,之前绘制的图案就会作为一个列表加到栈中。", + "2": "如果绘制内省后再绘制一个$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)内省/$,则它也将被加到列表中,而且需绘制$(italic)两次/$$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$才能回到正常施法模式。", + "3": "而且,如果在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$和$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$前绘制一个$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$,就能绕过它们的特殊功能,并将它们作为普通图案加到栈中,且不会影响返回正常施法模式前要绘制的$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$个数。$(br2)如果在$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)考察中/$连续绘制两个$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$,只有第一个$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$会被加到栈中。", + }, + undo: "最后,若在$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$和$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$之间有图案绘制错误,则可绘制$(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)消解/$以移除图案列表中的最后绘制的图案。", + }, + + readwrite: { + "1": "这一章节主要记述有关将 $(thing)iota/$ 写入永久性介质中的知识。几乎所有 iota 都可被写入合适的物品中,例如$(l:items/focus)$(item)核心/$和$(l:items/spellbook)$(item)法术书/$,而后可以将它们读出来。而某些物品,例如$(l:items/abacus)$(item)算盘/$,则只能被读取。$(br2)一般可从另一只手中的物品中读取或写入 iota。但若将物品丢出为物品实体,或是放在物品展示框中,则也可读取或写入。", + "2": "我还能对其他实体执行上述两种操作。例如,可从一张壁挂$(l:items/scroll)$(item)卷轴/$中读出图案。$(br2)然而,貌似写入代表其他玩家的 iota 是不被允许的,只有我自己的能写入。我认为这和“真名”类似。也许是自然在阻止我们的真名落入敌手。如果我想把我的真名交给朋友,做个$(l:items/focus)$(item)核心/$给他们就好了。", + read: "复制另一只手所持物品中 iota,并将其压入栈顶。", + write: "移除栈顶 iota,并将其写入另一只手中的物品中。", + "read/entity": "与$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$类似,但会将 iota 从某实体中读出,而非手中物品。", + "write/entity": "与$(l:patterns/readwrite#hexcasting:read)$(action)书吏之策略/$类似,但会将 iota 写入某实体,而非手中物品。$(br2)有意思的是,我似乎没法以这种手段写入我自己的真名。但我总感觉要是真这么做了我的安全就会受到严重威胁。", + readable: "如果另一只手中物品存有可被读取的 iota,返回 True。否则返回 False。", + "readable/entity": "与$(l:patterns/readwrite#hexcasting:readable)$(action)审计员之精思/$类似,但会检测实体可读性,而非手中物品。", + writable: "如果能将 iota 写入另一只手中的物品,返回 True。否则返回 False。", + "writable/entity": "与$(l:patterns/readwrite#hexcasting:writable)$(action)估价员之精思/$类似,但会检测实体可写性,而非手中物品。", + "local.title": "渡鸦之思", + local: "物品不是唯一一个能写入信息的地方,我也可以将其存到$(hex)咒术/$自身的$(media)媒质/$里,就和栈差不多。文献将其称为$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$。它能存有一个 iota,默认为 $(l:casting/influences)$(thing)Null/$,和$(l:items/focus)$(item)核心/$差不多。它在每次使用$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$后保持不变,但也只能撑到$(hex)咒术/$结束。一旦施法结束,其值就会被清除。", + "write/local": "移除栈顶 iota,并将其写入$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$,在施放$(hex)咒术/$的整个过程结束之前一直存在那里。", + "read/local": "将$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$中的 iota 复制出来。(也许刚刚才用$(l:patterns/readwrite#hexcasting:write/local)$(action)福金之策略/$写进去。)", + }, + + meta: { + "eval.1": "移除栈顶的图案列表,然后就像我用$(l:items/staff)$(item)法杖/$施法一样依次运行(直到碰到$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$)。如果一个 iota 已用$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)考察/$或$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)类似手段/$作为图案加入栈中,那么该 iota 将在运行时被加到栈中。否则其将在非图案元素运行失败。", + "eval.2": "若与$(l:items/focus)$(item)核心/$同时使用,它将提供$(italic)极为/$强大的操控能力。$(br2)据我找到的一张奇特卷轴所称,它还将自然的咒法体系变为了一个“图灵完备”的系统。$(br2)然而,$(hex)咒术/$能重复执行自身的次数是有限的——自然不会对失控的法术手软的!$(br2)此外,若让图案不在我的引导下操控能量,那么任何事故都可能导致后续操作不稳定甚至直接执行不了。", + + "for_each.1": "移除栈中的一个图案列表和一个列表,然后对后一列表中的每个元素运行前一图案列表中的图案。", + "for_each.2": "更确切地说,对应后一列表中的每个元素,它将:$(li)创建一个新栈,其中包括当前栈中的所有元素和后一列表中的一个元素。$(li)绘制前一列表中的所有图案。$(li)将该栈中剩余的所有元素存进一个列表。$(br)在所有元素都运行一遍后,将该列表压入原本的栈中。$(br2)也难怪精通此操作的人都疯了。", + + "halt.1": "这个图案将强制停止$(hex)咒术/$的施放。它独自出现可能没什么用,我只要不绘制图案或是放下法杖就行了。", + "halt.2": "但当与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$或$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$一起使用时,它就将发挥$(italic)大/$用。那些图案会碰到这个休止符,但$(hex)咒术/$本身不会停止,停止运行的是那些策略。它可以用来防止$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$将每个 iota 都运行一遍。这便是逃离疯狂的秘道。", + + "eval/cc.1": "此图案和$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似,也能运行图案或依次运行图案列表,但会在开始之前将一独特的“跳转” iota 压入栈中。", + "eval/cc.2": "当执行至“跳转” iota 时,法术会直接跳过图案列表中剩余的图案至列表尾部。$(p)当然因为已经有了$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$,这种性质难免显得有些冗余。不过它能以可控方式退出$(italic)多层嵌套/$调用的$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$,而卡戎之策略只能退出一层。$(p)“跳转” iota 甚至会在所有策略都执行完毕后还留在栈上……真是细思恐极。", + }, + + circle_patterns: { + "disclaimer": "这些图案只能在$(l:greatwork/spellcircles)$(item)法术环/$上运行。尝试用$(l:items/staff)$(item)法杖/$绘制它们会招致可怖的事故。", + + "circle/impetus_pos": "返回该法术环的$(l:greatwork/impetus)$(item)促动石/$的位置。", + "circle/impetus_dir": "以单位向量返回该法术环的$(l:greatwork/impetus)$(item)促动石/$的面朝方向。", + "circle/bounds/min": "返回该法术环影响范围的西北靠下转角的位置。", + "circle/bounds/max": "返回该法术环影响范围的东南靠上转角的位置。", + }, + + akashic_patterns: { + "akashic/read": "在$(l:greatwork/akashiclib)$(item)阿卡夏记录/$处从$(l:greatwork/akashiclib)$(item)阿卡夏图书馆/$中读出所给图案对应的 iota。没有读取距离限制。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "akashic/write": "在$(l:greatwork/akashiclib)$(item)阿卡夏图书馆/$的$(l:greatwork/akashiclib)$(item)记录/$处将 iota 和所给图案对应起来。$(italic)有/$存储距离限制。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + }, + + // Normal Spells + + itempicking: { + "1": "某些法术,例如$(l:patterns/spells/blockworks#hexcasting:place_block)$(action)放置方块/$,会消耗物品栏内的其他物品。在这种情况下,法术会先检索要用哪个物品,然后就会消耗物品栏内所有同种物品。$(br2)这一过程被称为“挑选物品”。", + "2": "更具体地说:$(li)首先,法术会在快捷栏内$(l:items/staff)$(item)法杖所处位置的右侧/$依次搜索可用物品,搜到最右侧后便会从最左侧开始向右搜寻。若$(l:items/staff)$(item)法杖/$在副手,则会从快捷栏一号位开始搜索。$(li)然后,法术会从$(italic)物品栏内最靠后的位置/$开始消耗同种物品,且物品栏优先于快捷栏。", + "3": "如此,我可以在快捷栏里放一些“选择器”用来告诉法术要用哪种方块,并在物品栏内放些同种方块防止供给不足。", + }, + + basic_spell: { + "explode.1": "移除栈顶的数和向量,并在所给位置产生一次强度为所给数的爆炸。", + "explode.2": "强度为 3 的爆炸与苦力怕的爆炸相当,4 则与 TNT 的相当。自然倒是不让我产生强度大于 10 的爆炸。$(br2)奇怪的是,这种爆炸伤不到我。也许是因为这爆炸是$(italic)我/$引起的?$(br2)强度为 0 时消耗极少量媒质,每加一级强度多消耗 3 个$(l:items/amethyst)$(item)紫水晶粉/$。", + + "explode.fire.1": "移除栈顶的数和向量,并在所给位置产生一次强度为所给数的带火焰的爆炸。", + "explode.fire.2": "消耗 1 个$(l:items/amethyst)$(item)紫水晶粉/$,每加一级强度多消耗 3 个$(l:items/amethyst)$(item)紫水晶粉/$。就和$(l:patterns/spells/basic#hexcasting:explode)$(action)爆炸/$一模一样,除了带点火。", + + add_motion: "移除栈顶的实体和表示方向的向量,然后将所给实体沿所给方向推动出去。驱动力的强度由向量的模长决定。$(br)消耗向量模长的平方个$(l:items/amethyst)$(item)紫水晶粉/$。除对某实体第一次使用外,其他情况额外消耗 1 个。", + blink: "移除栈顶的实体和表示长度的数,然后将所给实体沿其视线方向向前传送所给长度格。$(br)每传送两格消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", + + "beep.1": "移除栈顶的一个向量和两个数。在指定位置以指定$(thing)乐器/$(由第一个数决定)弹奏$(thing)一个音/$(由第二个数决定)。消耗极少量$(media)媒质/$。", + "beep.2": "共有 16 种$(thing)乐器/$和 25 种$(thing)音高/$。两者的下标均从 0 开始。$(br2)这些乐器似乎就是$(item)音符盒/$对应的各种乐器,尽管其具体对应关系不得而知。$(br2)不管怎么说,用$(l:items/lens)$(item)探知透镜/$观察$(item)音符盒/$就能得知其乐器对应的数字。", + }, + + blockworks: { + place_block: "移除一个位置向量,然后挑选一个方块并放在给定位置。$(br)消耗大约 1/8 个$(l:items/amethyst)$(item)紫水晶粉/$。", + break_block: "移除一个位置向量,然后破坏给定位置的方块。此法术能破坏几乎所有钻石镐能破坏的方块。$(br)消耗大约 1/8 个$(l:items/amethyst)$(item)紫水晶粉/$。", + create_water: "在给定位置生成一格水(或给流体容器注入至多一桶水)。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + destroy_water: "清空给定位置的流体容器,或是清除给定位置周围的液体。消耗大约 2 个$(l:items/amethyst)$(item)充能紫水晶/$。", + conjure_block: "在给定位置构筑一个空灵缥缈却坚硬可触的,闪着光的方块。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + conjure_light: "在给定位置构筑一个发着我染色剂颜色的光的魔法光源。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + bonemeal: "使目标位置的植物或树苗更快成长,就像对其施以$(item)骨粉/$一样。消耗略多于 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + edify: "将$(media)媒质/$强制注入目标位置的树苗,使其长为$(l:items/edified)$(thing)启迪树/$。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + ignite: "在给定位置上方生火,就像在该位置使用$(item)火焰弹/$一样。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + extinguish: "熄灭周围较大区域内的火焰。消耗大约 6 个$(l:items/amethyst)$(item)紫水晶粉/$。", + }, + + nadirs: { + "1": "此类法术会给予某一实体一个负面药水效果。它们都接受一个实体作为效果受体,和一两个数。其中第一个数是持续时间,第二个数(若有)是效果强度(以 1 起始)。$(br2)每种法术都有一个“基础消耗”,实际消耗为基础消耗乘以效果强度的平方。", + "2": "据某些传说所言,这些法术和它们的姊妹法术——$(l:patterns/great_spells/zeniths)$(action)天顶法术/$,都是“……由另一个世界的魔法启发的。在那个世界里,强大的魔法师会从四处收集魔法并决斗至死。不幸的是,许多信息都没翻译过来……”$(br2)也许这就是它们名字怪异的原因。", + + "potion/weakness": "给予$(thing)虚弱/$。每 10 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/levitation": "给予$(thing)飘浮/$。每 5 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/wither": "给予$(thing)凋零/$。每 1 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/poison": "给予$(thing)中毒/$。每 3 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/slowness": "给予$(thing)缓慢/$。每 5 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + }, + + hexcasting_spell: { + "basics": "这三个法术都能制作$(l:items/hexcasting)$(thing)用于施放$(hex)咒术/$的物品/$。$(br)它们都要求我在另一只手上手持对应的基础物品,并且需提供两个参数:需运行的图案和一个用作电池的$(l:items/amethyst)$(item)紫水晶/$物品实体。$(br2)详情参见$(l:items/hexcasting)此条目/$。", + "craft/cypher": "消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + "craft/trinket": "消耗大约 5 个$(l:items/amethyst)$(item)充能紫水晶/$。", + "craft/artifact": "消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", + + "recharge.1": "给另一只手中的能装$(media)媒质/$的物品重新充能。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。", + "recharge.2": "此法术的施放方式和制作施法物品所用法术的类似。提供一个$(l:items/amethyst)$(item)紫水晶/$物品实体,就能给另一只手中物品的$(media)媒质/$电池重新充能。$(br2)此法术$(italic)不能/$充入超过电池大小的媒质。", + + "erase.1": "清除另一只手中写有$(hex)咒术/$的物品。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "erase.2": "此法术也会清除物品内存储的$(media)媒质/$,将其释放给自然并将物品恢复到其初始状态。如此就能回收利用容易出错的$(l:items/hexcasting)$(item)缀品/$了。$(br2)此法术也能清除$(l:items/focus)$(item)核心/$和$(l:items/spellbook)$(item)法术书/$书页内容,同时去除其上密封。", + }, - "lore.cardamom5.1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#4/$$(br2)阿曼妮塔消失了。$(br2)我完全不知道她去了哪里,爸爸。最后一次看到她是在晚饭时,她还在和其他人讨论学生失踪的情况,但那之后——", - "lore.cardamom5.2": "之后——之后她也不见了。但没人谈起她。我太害怕了,爸爸,他们是都知道些什么吗?每个人都会有个朋友突然$(italic)消失/$,消失得无影无踪。$(br2)他们都去$(italic)哪里/$了?", - "lore.cardamom5.3": "他们还一直在叫停设施和活动——我有好几周没和地质学联合会去考察了,穹顶上所有收集媒质的装置也不见了,药剂学联合会几个月没出现了……就好像大图书馆被白蚁啃到只剩了副空壳。$(br2)我觉得他们也开始审查我们写的信了……", - "lore.cardamom5.4": "写下这封信需要很大勇气,但我已没有勇气和其他人说这件事。假如学院里没人能出去的话,我希望你能把消息传出去……传到偏僻如布雷肯法尔的地方只是我的痴心妄想,但求求你了,爸爸,求求你尽你所能。爸爸,一定要记住他们……阿曼妮塔·黎博拉(Amanita Libera)、贾思敏·沃德(Jasmine Ward)、西奥多·查……(Theodore Cha...)求求你了,一定要记住他们……我把责任强加于你,只求你能原谅我的懦弱。", - "lore.cardamom5.5": "我写不了字了,手一直在抖,求你救救我们吧。", + sentinels: { + "1": "$(italic)去吧!现在一切都已完成,$(br)只须留着一个人作哨卫。/$$(br2)$(l:patterns/spells/sentinels)$(thing)哨卫/$是一种能被$(hex)咒术/$召唤出的神秘力量,就和亲人或是侍卫一样。对我而言,它是一个旋转着的几何体,而其他人看不见它。", + "2": "它有些有趣的性质:$(li)它似乎不可被触摸,没人摸得到它。$(li)只有我的$(hex)咒术/$才能与之交互。$(li)一旦召唤,在被驱除前它都将留在原位。$(li)只要我离它足够近,我就能透过方块看见它。", + "sentinel/create": "在给定位置召唤哨卫$(l:patterns/spells/sentinels)$(thing)哨卫/$。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "sentinel/destroy": "将我的$(l:patterns/spells/sentinels)$(thing)哨卫/$从世界中驱除出去。消耗极少量$(media)媒质/$。", + "sentinel/get_pos": "将我的$(l:patterns/spells/sentinels)$(thing)哨卫/$的位置加到栈中,若并未召唤则加入一个 $(l:casting/influences)$(thing)Null/$。消耗极少量$(media)媒质/$。", + "sentinel/wayfind": "将栈顶的位置向量变为从我的位置指向$(l:patterns/spells/sentinels)$(thing)哨卫/$的单位向量,若并未召唤则变为 $(l:casting/influences)$(thing)Null/$。消耗极少量$(media)媒质/$。", + }, - "lore.inventory.1": "39 号牢房,回收日志 #72,监禁中心 β 座$(br2)囚犯名称:拉斐尔·巴尔$(br)罪行:知晓“毡障”计划$(br)牢房空置原因:死亡$(br)备注:牢房墙壁上大片区域涂写有如下文字。", - "lore.inventory.2": "我闭眼时能看见六边形。$(br2)那些图案,它们侵入我的眼睑、我的意识、我的梦境。我的意识在清醒和混乱中反复,就像挂在绳上摇晃的水晶,有时随光闪烁,有时被光吞噬。", - "lore.inventory.3": "我今天更清醒了。也许。我不知道。我都不知道我还算不算累。长时间的疲劳早已使我麻木,甚至有东西来刺我眼睛我都感觉不到了。我感受不到疲劳。但疲劳是真实的。$(br2)我的骨头脆弱易折。我的关节粗糙而尖锐。", - "lore.inventory.4": "有时我能想起我来这的原因。我记得我对某些我所知的过于张扬了……我记得我在某间很亮的房间中被告知了些什么。我记得我的思维被凝成玻璃,被粉碎,被融化,又重新结晶,然后重复重复重复重复重复就像有人想让我忘记比那还糟是想让我活着同时杀死我,我的自我,我的 iota 没了意义因为没有观察者只有躯体但我瞒过了他们我居然做到了", - "lore.inventory.5": "他们觉得他们把我摧毁得能用毛毡盖眼哄骗我但我是清醒的清醒到能感到痛苦$(br2)我不睡觉但我醒来时我不敢把硬壳从我眼睛上搓掉不然会割破皮而且我不想看见紫色闪光", - "lore.inventory.6": "他们没杀我,因为我丈夫有我的核心,我死了他会知道。但他不是咒术师所以他没法凭他自己找到我。我走投无$(br2)思考很甬苦。真的很痛苦。思维是累赘累赘印在无数细小水晶上", - "lore.inventory.7": "我记得那个明亮房间里的医生强迫我吸入某种类似沙子的东西,但更锐利还非常痛。一开始只是黏膜试图吸住玻璃渣的物理性创伤但之后他们把指甲插到我的刺激反应里他们说几句话就能做到$(br2)我记得去露营时看到联合会成员围着一个村庄铺设法术环然后地面就开始震动", - "lore.inventory.8": "没了时间观念。有时我觉得我能看到未来,因为那些场景好像说得通但现在不可能发生因为我知道我余生就呆在这了因为亮房里的人这么说了。我能看到我整个人倒了过来我的颅骨裂成两半里面都是长矛样的淌着血的不是紫水晶的东西扎穿一块满是皱纹还幻想自己是蝴蝶的三磅重的脂肪和肉", - "lore.inventory.9": "我希望我的学生们还好。我为什么会这么想?累赘。他们告诉我我是累赘,他们不满足于摧毁我,他们还想让我觉得这是我应得的。不用棍棒摧毁身体,而以言语击垮精神。就算他们把我放出去也没人会信我因为我看起来就像一个沉溺于过度施法的瘾君子$(br2)但他们还是把我琐着我不知道这算不算仁慈", - "lore.inventory.10": "周围这么多媒质我试过好多次施法逃出去或是至少减轻痛苦但那些扫过我的意识的图案在我试着绘制时不停窃笑溶解。我似乎记得我被迫忘记它们,我记得卓伟的互相连接的知识体系被凿空并在刻意忽视的重压下碎裂但回忆起忘记你曾记得你学过的东西再痛苦不过", - "lore.inventory.11": "也许我已在过度施法依赖症的晚期中的晚期了,我听见图案裁进我眼睛和眼睑间的空间,我神经的紫色边缘。强迫自己相信什么是真实的和我没在受折磨有意义吗。我该受折磨。如果我再也不能和其他人谈这件事为什么还要尝试呢", - "lore.inventory.12": "他们要吧世界上所有人都杀了不是吗大图书馆要吃东西和我一……我上次乞东西是什么时候$(br2)所有人都要吃东西但他们做不到如果所有农夫都死了并且所有农耕知识都被埋到地底下去他们就做不到也许有人能发现真相并把那窝人沾沾自喜的破脸熔成蜡油", - "lore.inventory.13": "也许某天醒来会疑惑我们留给他们的冬西会疑惑为何地底有无数洞穴隧道但没人聪明到去开采$(br2)我能看见他们在读这些东西 。他们 …… 会不屑一顾", + colorize: "我需要在施法时在另一只手中持有$(l:items/pigments)$(item)染色剂/$。施法后,染色剂将被消耗而我意识的颜色也将永久改变(至少是在再次施法前)。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + flights: { + "1": "尽管无法掌握自由飞行的力量,我还是找到了若干能将物体滞空的方法,但各种方法各有缺陷。$(br2)所有种类的飞行法术都会产生微量多余$(media)媒质/$。在法术效果将要结束时,其会产生越来越多红色和黑色的火花。", + "2": "当然,也有其他种类的飞行法术。例如,将$(l:patterns/spells/basic#hexcasting:add_motion)$(action)驱动/$和$(l:patterns/spells/nadirs#hexcasting:potion/levitation)$(action)蓝阳西沉/$结合使用的类飞行技术自古代起就多有运用。$(br2)我还听说过一种能给予滑翔能力的,可以穿在背上的薄透翼膜。研究表明,被称为“$(l:patterns/great_spells/altiora)$(action)翱翔/$”的卓越法术也许能模仿这种翼膜的功用。", - "lore.experiment1.1": "$(italic)我只从这份日志中找到了如下五份记录。/$$(br2)质震 #26$(li)位置:北卡彭特镇$(li)人口:174$(li)形成节点数:3$(li)节点距质源距离:垂直距离 55-80 m,水平距离 85-156 m$(li)媒质生成速率:1320 uθ/min", - "lore.experiment1.2": "质震 #27$(li)位置:布雷肯法尔$(li)人口:79$(li)形成节点数:1$(li)节点距质源距离:垂直距离 95 m,水平距离 67 m$(li)媒质生成速率:412 uθ/min", - "lore.experiment1.3": "质震 #28$(li)位置:格雷斯顿$(li)人口:大约 1000$(li)形成节点数:18$(li)节点距质源距离:垂直距离 47-110 m,水平距离 59-289 m$(li)媒质生成速率:8478 uθ/min", - "lore.experiment1.4": "质震 #29$(li)位置:无名村庄,格雷斯顿以西两天路程$(li)人口:35$(li)形成节点数:0$(li)节点距质源距离:N/A$(li)媒质生成速率:N/A$(br2)注:居民仍以正常形式被影响", - "lore.experiment1.5": "质震 #30$(li)位置:沸溪镇$(li)人口:231$(li)形成节点数:4$(li)节点距质源距离:垂直距离 61-89 m,水平距离 78-191 m$(li)媒质生成速率:1862 uθ/min", - "lore.experiment1.6": "总结:一个节点需要大约 60 单位。数量过少时其仍将被消耗,但不会生成足以形成节点的能量。输入个数与垂直水平距离之间相关性很小。$(br2)对群体居民的影响效果(身体机能尤甚)仍比单目标测试时的强,一如往常。", + "range.1": "受范围限制的飞行法术。", + "range.2": "第二参数代表水平方向上的半径(以米计),在此范围内,法术能保持稳定。走出该范围就会结束该法术,滞空的物体会直接坠向地面。但只要一直呆在这个范围内,法术的效果便会无限持续。此法术还会额外产生微量$(media)媒质/$用以标记安全区域中心点。$(br2)每米安全范围消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "time.1": "受时间限制的飞行法术。", + "time.2": "第二参数代表持续时间(以秒计),在此限制内,法术能保持稳定。持续时间超过限制就会结束该法术,滞空的物体会直接坠向地面。$(br2)此法术相对较昂贵,每秒持续时间消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。我觉得它极其适合长途旅行。", + }, - "lore.experiment2.1": "$(italic)这些文件中许多内容都已被编辑。剩余可读文本如下。/$$(br2)对象 #1 “A.E.”$(br)执行程序后立刻停止挣扎。面部与四肢松弛,但可不受协助站立。当不受看管时,对象会出神地做其先前职业(场地管理员)中常做的动作。", - "lore.experiment2.2": "实验程序执行后较短时间内心率极高,但由于对象在此之前处于极度恐慌状态,该现象是非决定性的。所得晶芽生成速率为 35 uθ/min。$(br)……$(br)对象 #4 “P.I.”$(br)对 P.I. 进行心理测试。对象理解物体恒存性,具有空间感知力,有基础数学逻辑推理能力。难以完成全新任务。$(br2)……", - "lore.experiment2.3": "对象 #7 “T.C.”$(br)对象同意对其执行程序。程序执行几小时后结果与其他对象类似:能站立,能执行简单任务。$(br2)……$(br2)对象 #11 “R.S.”$(br)执行程序前接受镇定,其剂量控制为能使对象在执行程序时醒来……$(br2)……", - "lore.experiment2.4": "对象 #23 “A.L.”$(br)相较其他对象,其保有更强的语言能力。在几小时内,其语言能力退化至只能组织混乱的句子,而后则至仅能说出“卡”这一个字。$(br2)待进一步测试:实验程序分别如何影响咒术师和非咒术师?$(br2)……", + create_lava: { + "1": "在给定位置生成一格熔岩(或给流体容器注入至多一桶熔岩)。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + "2": "建议不要声张自己知道这个法术。某些植物学家对此……比较敏感,至少我听说是这样。$(br2)也罢,确实没人说过探究宇宙最深层的秘密是什么好干的活。", + }, + + weather_manip: { + lightning: "我能命令苍穹!此法术会在我所想之处召唤一道落雷。消耗大约 3 个$(l:items/amethyst)$(item)紫水晶碎片/$。", + summon_rain: "我能控制云彩!此法术会在我所处世界各处召来雨水。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。若已在下雨就无效。", + dispel_rain: "召雨的反面。此法术会将我所处世界的雨水驱离。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。若未在下雨就无效。", + }, + altiora: { + "1": "此法术会将一束$(media)媒质/$在我身旁塑成翅膀状,并赋予其足够物质性,从而允许施法者滑翔。", + "2": "这对翅膀的操作方式与$(item)鞘翅/$完全一致。目标(必须是玩家)会被弹起而升空,此时按下$(k:jump)就能张开翅膀。这些翅膀十分脆弱,会在触碰到任意表面时破碎消失。长距飞行则可能需要$(l:patterns/spells/basic#hexcasting:add_motion)$(action)驱动/$或者$(item)烟花火箭/$(可能稍显鲁莽)的协助。$(br2)消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + }, + "teleport/great": { + "1": "比$(l:patterns/spells/basic#hexcasting:blink)$(action)闪现/$更为强大,此法术能让我传送到世界上几乎任何一处!当然它也有极限,但可比我熟悉的施法距离要远得$(italic)多/$。", + "2": "实体会按所给向量偏移出其原有位置。它似乎一直会消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$,不论传送距离。$(br2)当然这种传送也不是尽善尽美的,在传送如玩家般复杂的实体时,实体身上的物品就不会$(italic)非常/$安稳了,它们可能会散落在目的地周围。还有,传送的实体将会被强制从其所乘坐的无生命载具中卸下……但我曾读到过动物可以一起被传送,大概吧。", + }, - "interop.1": "$(hex)咒法学/$是一门多用途的学问。如果世界能被某些其他力量$(italic)改变/$,那么有可能$(hex)咒法学/$可以和它们和谐相处,协同使用。", - "interop.2": "应当谨记,自然似乎在这些方面耗费的精力较少,可能会出现奇怪的现象和漏洞。我相信模组制作者们会尽他们所能来纠正这些错误,但也必须理解这只是他们的业余爱好。$(br2)也许我会发现某些协同力量带来的法术在平衡性上表现不佳。我想我应该有足够的自控力不去滥用。", - "interop.3": "最后,如果对剧情和故事感兴趣,就应理解试验这些协同力量时所做的笔记只会是些琐事。", + zeniths: { + "1": "此类法术会给予某一实体一个正面药水效果,与$(l:patterns/spells/nadirs)$(action)天底法术/$类似。然而,它们的$(media)媒质/$消耗会按效果强度的$(italic)立方/$计算。", + "potion/regeneration": "给予$(thing)生命恢复/$。每 1 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/night_vision": "给予$(thing)夜视/$。每 5 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/absorption": "给予$(thing)伤害吸收/$。每 1 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/haste": "给予$(thing)急迫/$。每 3 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "potion/strength": "给予$(thing)力量/$。每 3 秒持续时间的基础消耗为 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + }, - "interop.gravity.1": "我发现了获取与改变实体所受引力的操作。挺有趣,也挺让人头晕。$(br2)有趣的是,虽然$(l:patterns/great_spells/flight)$(action)飞行/$是一种卓越法术,且也能操控引力,但这些法术似乎不是这样操控的。我不能理解……也许模组制作者们只是想让玩家们玩得开心。", - "interop.gravity.get": "获取所给实体的所受引力的主方向上的单位向量。对大多数实体而言,此向量会是向下的:<0, -1, 0>。", - "interop.gravity.set": "设置所给实体所受引力的主方向。所给向量会被转换为与其夹角最小的轴向单位向量,如同$(l:patterns/math#hexcasting:coerce_axial)$(action)轴向之纯化/$那样。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + greater_sentinel: { + "1": "召唤一个比普通$(l:patterns/spells/sentinels)$(thing)哨卫/$要强大的哨卫。消耗大约 2 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "2": "卓越$(l:patterns/spells/sentinels)$(thing)哨卫/$除了看上去更奇特外和不用卓越法术召唤的哨卫一样。然而,我法术的生效范围会扩展到卓越$(l:patterns/spells/sentinels)$(thing)哨卫/$周围小范围处,大概是哨卫周围 16 格内。换句话说,不管我在世界上何处,我都能与卓越$(l:patterns/spells/sentinels)$(thing)哨卫/$周围的方块交互(尽管仍会受到“区块加载”这一神秘力量的影响)。", + }, + make_battery: { + "1": "将$(media)媒质/$注入一个玻璃瓶,从而制成$(l:items/phials)$(item)试剂瓶/$。", + "2": "和用于$(l:patterns/spells/hexcasting)$(action)制作施法物品/$的法术类似,我需要在另一只手中拿着一个$(item)玻璃瓶/$,并提供一个$(l:items/amethyst)$(item)紫水晶/$物品实体作为参数。更多信息参见$(l:items/phials)此页/$。$(br2)消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + }, - "interop.pehkui.1": "我发现了改变实体大小,和得知它们相较原本究竟变了多少的方法。", - "interop.pehkui.get": "获取实体的大小倍数,也即当前大小和原本大小的比值。对大多数实体而言,此值为 1。", - "interop.pehkui.set": "设置实体的大小倍数,需传入一个与其原本大小的比值。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。" - } + "brainsweep_spell.1": "我搞不懂这个法术……说实话,我也不清楚我到底想不想搞懂。", + + + lore: { + cardamom1: { + "1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#1/$$(br2)亲爱的爸爸,$(br)我对你攒钱送我来大图书馆的感激之情与日俱增。在这里学到的知识真是不可思议!我实在没法把我所见所想全部描述出来……能来这里真是太棒了。", + "2": "我写这封信时正坐在主穹顶下,它是由咒法学学生联合会维护和保养的。他们在穹顶顶部装设了某种奇特的装置,由此就能捕获从勤奋苦攻的学生的课桌中逸散出来的散在思维能量,至少我了解到的是这样。我的舍友阿曼妮塔就在钻研这门学问,她也非常愿意滔滔不绝地为我解释其中原理,尽管我得承认我听不大懂。", + "3": "就我的理解而言,我们思考的过程——也就是驱动我写这封信和你读这封信的无形机制——并不那么有效。一小部分能量会逸散到环境中,就和马车的车轴在长途跋涉后摸起来会有点烫一样。这些散在能量叫做“媒质”。一个人的散在媒质微不足道,但主穹顶下成百上千位思考者加在一起就不得了了,说不定会按几何级数增长呢!再配上某些绝妙的装置,这些媒质就能被固化为某种紫色的水晶。", + "4": "有关她所研究的学问就讲这么多了。我今天和地质学学生联合会进行的第一次勘探告一段落啦!出发前没能写封信对不起啦,时间过得太快了。我们去了大图书馆东边的一道裂谷里冒险,还在层层岩石和土壤底下扎营过了夜。当然,我们只探索了洞穴里光照良好且勘探完全的地方。我觉得,在洞穴里过夜比在地表要安全得多,尽管我还是被狠狠地吓到了!", + "5": "还好夜里没发生什么坏事,之后我们就往更深的地方去勘探本地矿脉了。我们在找的是一种稀有的紫色水晶矿脉,称作“紫水晶”,它们只以痕量出现在地层中。可惜的是,我们什么都没找到,只能两手空空地返回地表。", + "6": "现在再想,这种“紫水晶”的外观描述貌似和阿曼妮塔所讲的媒质水晶极为类似。它们要是会自然形成于地底该怎么样,光是想想都兴奋!不过想来也是不大可能的吧……", + "7": "作为一名学生,我每三个月能在阿卡夏邮局免费送一封信。但你也知道,我们并不富裕……恐怕这是唯一一种能和你说上话的方式了。你攒钱回信我再感激不过,但我们之间的联系机会恐怕不会很多。不过我认为,我在这能学到的知识可能远超贷款上写的数字的价值。我大概会是家族中第一个不当农民的人吧!", + "8": "我三个月后会再写封信的。$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + }, + + cardamom2: { + "1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#2/$$(br2)亲爱的爸爸,$(br)……天哪,把过去三个月的经历全写进信里真是件难事。这么难办的事居然是我免费得来的奇迹赐予的!我还真是辛苦。", + "2": "我在地质学联合会的研究正稳步推进。我们又进行了一次实地考察,这次范围更深,深达灰色的岩石隐去而硬质的片状板岩出现的地方。那里的岩石会在脚下碎成呛人的粉末……脚下的危险已经需要打起十二分精神,更不用说对付那些藏身于黑暗的生物了。(我之前曾遇到过这种生物一两次,但我知道你会为我经受生死考验而坐立难安,所以就不提了。)", + "3": "不过,我们确实发现了一些之前所说的紫水晶。在某次小型勘探中我们发现了个只有丁点水晶的小矿脉。我们需要严格遵守勘探规章,所以找到的紫水晶需全部取走并立刻上交给联合会中的学长。这整条规定不管怎么看都很荒诞。他们把这当做重要至极而绝密的事件,但又把考察交给来这总共还不到六个月的新生去做,还就在那么几巴掌大的地方用足足十二把探矿镐开采总共十克都不到的东西……", + "4": "我完全想不明白为什么要这么做。一位图书管理员给我推荐了本宝石百科,其中提到紫水晶的用途接近于零。它主要用于制作某些特种玻璃和镜片,也基本算是没什么用了。$(br2)要是我猜,我会觉得紫水晶和他们口中的媒质是一种东西,就和我上次说的一样。", + "5": "假如我的猜想属实,那那些严格的保密措施和学长们对质疑的排斥,也许就是因为这是大图书馆的原创性研究成果,而且不能让某些竞争对手知道。$(br2)然而,这个理论还是有点站不住脚。矿洞中发现的紫水晶和阿曼妮塔给我看的那些媒质水晶确实很相像,但并不完全一致。也许只有把两者放在一起才能看出端倪,不过媒质明显有种奇特的嗡鸣感和振动感,而紫水晶没有。", + "6": "也许感受不到紫水晶的嗡鸣和振动只不过是身处地下的心理压力。我唯一一次摸到紫水晶时手一直在抖,而且触感确实很轻盈,不过对我而言两者的触感并不完全一致。两者的折射率也略有不同。$(br2)如果有机会在矿洞外碰见紫水晶,我一定要问下阿曼妮塔她能不能用紫水晶施咒。而且似乎每次我们碰面,她都新学到了些奇妙的技艺。", + "7": "就在上周,她把我悬到了空中,而且完全没用支撑物!轻微的刺痛感,体感比空气还轻盈,但衣服又还是原本的重量……这种感觉非常奇怪。不过我确实很庆幸她在效果结束前把我拉到了床的正上方。$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + }, + + cardamom3: { + "1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第一部分/$$(br2)亲爱的爸爸,$(br)自从上次写信以来发生了两桩怪事。$(br2)第一件,负责管理入门等级咒法学联合会学生的教授失踪了。没人知道他去了哪里。他的办公室和住所都被上了锁,但里面还是那副乱糟糟的样子。", + "2": "更奇怪的是,不管大图书馆的学生怎么激那帮冗杂官僚里管行政的人员,送去的信件都还被一一打回。连其他教授都不愿谈及他。$(br2)也正如你可能在担心的,阿曼妮塔十分沮丧。无论大图书馆派来哪位教授接任,都不如原先的教授那样善解人意和乐于助人。", + "3": "但是,这还不是最怪的那件事。这件事——我很希望之后不要再碰到比这还骇人的事了——发生在我和地质学联合会的又一次考察中,我们计划前去某个村庄附近。", + "4": "通常去居民点附近考察时,我们要与村庄的村长或长老进行长时间的磋商,以确定我们的行为是被允许的,并划定我们能去的地方和能做的事。但这次不一样,这次没有磋商。出发前两天我们才被告知这次要跟着咒法学联合会的一位学长去。", + "5": "我们在村庄附近的密林中扎营,不知道为什么不选附近的平原。支帐篷的地方几乎看不到村庄。在刚到那天的晚上,我铺开睡袋时,周围是死一般的寂静。就算我们看不见村庄,我们也应该能听到村庄里的声音。但是在地表呆着的整段时间里,我却几乎什么都听不见。", + "6": "我听到的为数不多的声音都像是劳作时发出的那种,比如锤子砸到铁砧上的响声和锄头翻土的噪声。我完全没听到说话声。$(br2)第二天早晨我们就备好灯笼进入了地下。", + "7": "我们没被告知到底要找什么,但有学生听说我们是来找紫水晶的,这貌似说得通。我早已练出能在矿洞壁上瞄中任何一小点紫色闪光的绝技,但就在灰色岩石和黑色板岩的交界处,我面前却赫然出现了一座奇观。$(br2)那是一整个紫水晶晶洞,快有十个我那么高,并随着灯光闪着紫色光芒,洞壁的每一面都被尖锐的紫色水晶覆盖。那些紫水晶比我来大图书馆之后整个探险组挖到的所有加起来还多。", + "8": "我们每人被发了一副手套并被告知加紧开采。和我们同行的一位学长拿出了一个奇特的淡紫色盒子,高层人员会拿这种盒子来装东西,我和其他学生则兢兢业业地把那些玻璃质水晶从墙上砸下,然后放到盒子里去。外层脆性水晶的基座后方似乎有两种更为致密的构造。一种和外层水晶类似,但另一种更为……我词穷了。", + "9": "“重要”这词也不合适,但这是我能想到的最贴切的形容词了。它有一种特殊的……庄重感,就好像它上面的 X 形暗色深槽有某种神圣的意味。但出于某种理由,我们被严令禁止触摸它们。偶尔某名学生会不小心敲碎一块,那样的话那名学生就会被严厉责骂。尽管我全身心投入了繁复的开采工作,我还是感觉……格外的清醒。这种感受很混杂:我的思维非常清晰,但同时我感受到,如果我放下手头工作去探究那种感受的话,可能就再也探究不完了。", + "10": "就好像每次吸气,我脑袋里就竖起一个路标,我能感受到它正坚定地为我指示正确的道路,然而实际上指向的却是一座陡崖。我甩了甩头又继续开采,甩头似乎有助于无视那些路标。$(br2)不过我成功偷藏了一小块水晶碎片。$(br2)我们采矿采了快一整天,到学长的时间计指示太阳快落山时我们几乎把剩下的水晶都挖完了。", + "11": "就在我们要离开的时候,我又留意到先前禁止我们开采的那些水晶,它们暗色的深槽里似乎新出现了晶芽,就好像它们从中长出来了一样。我所知的地质学中有关水晶的所有知识都表明,这些水晶需要成千上万年才能长成,但仅在一天之内,新水晶就在我的眼前凭空出现了。学长们的开采禁令确实有道理,大概吧。", + "12": "回到地表的路程中没发生什么事,我们也正好在太阳落山的时候回到了营地。非常抱歉,信纸快用完了。阿卡夏信笺只够写这些字但这故事值得两封信一起寄应该能同时到$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + }, + + cardamom4: { + "1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#3,第二部分/$$(br2)亲爱的爸爸,$(br)正如我所说,信纸不够了,故事剩余部分就放在这份信里了。我们正好在太阳落山时回到了营地。而那天晚上的经历是整个奇怪考察中最为骇人的。", + "2": "我半夜醒来想去方便一下。那时云层完全把月亮遮住了,我在森林中迷了路,找不回营地。但我又害怕夜晚的那些怪物,于是就决定去村庄里找个地方睡觉。至少那里是安全的。", + "3": "村庄倒是很好找,尽管村庄里没有哪怕一点声音。就算这么晚了,旅店不说人来人往,也绝不会悄无声息。但无论怎么看旅馆的门缝,我都没能发现任何人的踪影。$(br2)我敲了敲一间房子的门,没有回应。再敲旁边的两间,也都没有回应,甚至感觉就像是房子从来就空着一样。", + "4": "我的心跳得越来越快,但又铆足勇气进下一间房里看看。我想不管房里住着什么人,他都会理解的。至少,能听见另一个人的声音,我就安心了,就算他们不让我在房里过夜,起码也能安心。$(br2)房子很小,只够挤下一张床和一个制图台。我看见床上躺了人,就试着安慰我自己村子里的人不过是睡得很熟罢了。然后我转头就要离开。", + "5": "但就在这时云层散开了,月光洒到了床上的生物上。$(br2)我忍不住叫了出来,它的眼睛也应声睁开。它……长得很怪异,很明显不是人类,反倒像是某种人类的退化产物。它的额头拔得很高,它的身体矮胖而笨拙,我想拿“它”这个字形容比较合适。那个生物明显没有人类的智慧,虽然它看起来像是人类。", + "6": "它的视线直接对准了我——它的眼睛暗淡、了无智慧,就和绵羊的一样!它开了口,但发出的声音仅是对言语的无情亵渎——是一声令人颤栗的哼叫。", + "7": "我落荒而逃。在月光的照耀下,我透过道旁的窗户瞥见了其他镇民,他们都已被扭曲到……长得和我先前所见的那个$(italic)怪物/$一模一样。我迅速跑回森林里,一心只想逃离那些扭曲的脸孔和那恐怖的动物般的眼睛。$(br2)多亏有月光,营地好找多了。不过好像没人注意到我失踪了一段时间,还好还好。我躺回了我的睡袋,整晚一直在想方设法忘记那段经历。", + "8": "但从这封信里也能看出,我并没能忘掉。那个扭曲的身影仍萦绕在我的梦境里。我只要想到那东西曾经可能是个人类就脊背发凉。$(br2)一回到大图书馆,我就给阿曼妮塔看了偷带回来的水晶碎片。她肯定了我的猜想:这是一块媒质水晶。但她完全无法想象地下居然有满是这种水晶的巨大晶洞。", + "9": "她还提到了某些有意思的事情:媒质水晶和真正的紫水晶都能用于制造先前我提过的特种玻璃。媒质水晶和紫水晶的晶体构造和物理性质几乎完全一致,而这和媒质的魔法性质没有关系,她是这么说的。$(br2)我最后没把遭遇满村怪物的经历告诉她。", + "10": "我知道我们家生活拮据,也知道从家里送一封信过来有多贵,但我求你,求你能给我一句忠告。我自从那时起一直心慌意乱,能读到你的信就是莫大的安慰。$(br2)你亲爱的,$(br)卡达蒙·斯蒂勒斯", + }, + + cardamom5: { + "1": "$(italic)完整标题:卡达蒙·斯蒂勒斯寄给她父亲的信,#4/$$(br2)阿曼妮塔消失了。$(br2)我完全不知道她去了哪里,爸爸。最后一次看到她是在晚饭时,她还在和其他人讨论学生失踪的情况,但那之后——", + "2": "之后——之后她也不见了。但没人谈起她。我太害怕了,爸爸,他们是都知道些什么吗?每个人都会有个朋友突然$(italic)消失/$,消失得无影无踪。$(br2)他们都去$(italic)哪里/$了?", + "3": "他们还一直在叫停设施和活动——我有好几周没和地质学联合会去考察了,穹顶上所有收集媒质的装置也不见了,药剂学联合会几个月没出现了……就好像大图书馆被白蚁啃到只剩了副空壳。$(br2)我觉得他们也开始审查我们写的信了……", + "4": "写下这封信需要很大勇气,但我已没有勇气和其他人说这件事。假如学院里没人能出去的话,我希望你能把消息传出去……传到偏僻如布雷肯法尔的地方只是我的痴心妄想,但求求你了,爸爸,求求你尽你所能。爸爸,一定要记住他们……阿曼妮塔·黎博拉(Amanita Libera)、贾思敏·沃德(Jasmine Ward)、西奥多·查……(Theodore Cha...)求求你了,一定要记住他们……我把责任强加于你,只求你能原谅我的懦弱。", + "5": "我写不了字了,手一直在抖,求你救救我们吧。", + }, + + inventory: { + "1": "39 号牢房,回收日志 #72,监禁中心 β 座$(br2)囚犯名称:拉斐尔·巴尔$(br)罪行:知晓“毡障”计划$(br)牢房空置原因:死亡$(br)备注:牢房墙壁上大片区域涂写有如下文字。", + "2": "我闭眼时能看见六边形。$(br2)那些图案,它们侵入我的眼睑、我的意识、我的梦境。我的意识在清醒和混乱中反复,就像挂在绳上摇晃的水晶,有时随光闪烁,有时被光吞噬。", + "3": "我今天更清醒了。也许。我不知道。我都不知道我还算不算累。长时间的疲劳早已使我麻木,甚至有东西来刺我眼睛我都感觉不到了。我感受不到疲劳。但疲劳是真实的。$(br2)我的骨头脆弱易折。我的关节粗糙而尖锐。", + "4": "有时我能想起我来这的原因。我记得我对某些我所知的过于张扬了……我记得我在某间很亮的房间中被告知了些什么。我记得我的思维被凝成玻璃,被粉碎,被融化,又重新结晶,然后重复重复重复重复重复就像有人想让我忘记比那还糟是想让我活着同时杀死我,我的自我,我的 iota 没了意义因为没有观察者只有躯体但我瞒过了他们我居然做到了", + "5": "他们觉得他们把我摧毁得能用毛毡盖眼哄骗我但我是清醒的清醒到能感到痛苦$(br2)我不睡觉但我醒来时我不敢把硬壳从我眼睛上搓掉不然会割破皮而且我不想看见紫色闪光", + "6": "他们没杀我,因为我丈夫有我的核心,我死了他会知道。但他不是咒术师所以他没法凭他自己找到我。我走投无$(br2)思考很甬苦。真的很痛苦。思维是累赘累赘印在无数细小水晶上", + "7": "我记得那个明亮房间里的医生强迫我吸入某种类似沙子的东西,但更锐利还非常痛。一开始只是黏膜试图吸住玻璃渣的物理性创伤但之后他们把指甲插到我的刺激反应里他们说几句话就能做到$(br2)我记得去露营时看到联合会成员围着一个村庄铺设法术环然后地面就开始震动", + "8": "没了时间观念。有时我觉得我能看到未来,因为那些场景好像说得通但现在不可能发生因为我知道我余生就呆在这了因为亮房里的人这么说了。我能看到我整个人倒了过来我的颅骨裂成两半里面都是长矛样的淌着血的不是紫水晶的东西扎穿一块满是皱纹还幻想自己是蝴蝶的三磅重的脂肪和肉", + "9": "我希望我的学生们还好。我为什么会这么想?累赘。他们告诉我我是累赘,他们不满足于摧毁我,他们还想让我觉得这是我应得的。不用棍棒摧毁身体,而以言语击垮精神。就算他们把我放出去也没人会信我因为我看起来就像一个沉溺于过度施法的瘾君子$(br2)但他们还是把我琐着我不知道这算不算仁慈", + "10": "周围这么多媒质我试过好多次施法逃出去或是至少减轻痛苦但那些扫过我的意识的图案在我试着绘制时不停窃笑溶解。我似乎记得我被迫忘记它们,我记得卓伟的互相连接的知识体系被凿空并在刻意忽视的重压下碎裂但回忆起忘记你曾记得你学过的东西再痛苦不过", + "11": "也许我已在过度施法依赖症的晚期中的晚期了,我听见图案裁进我眼睛和眼睑间的空间,我神经的紫色边缘。强迫自己相信什么是真实的和我没在受折磨有意义吗。我该受折磨。如果我再也不能和其他人谈这件事为什么还要尝试呢", + "12": "他们要吧世界上所有人都杀了不是吗大图书馆要吃东西和我一……我上次乞东西是什么时候$(br2)所有人都要吃东西但他们做不到如果所有农夫都死了并且所有农耕知识都被埋到地底下去他们就做不到也许有人能发现真相并把那窝人沾沾自喜的破脸熔成蜡油", + "13": "也许某天醒来会疑惑我们留给他们的冬西会疑惑为何地底有无数洞穴隧道但没人聪明到去开采$(br2)我能看见他们在读这些东西 。他们 …… 会不屑一顾", + }, + + experiment1: { + "1": "$(italic)我只从这份日志中找到了如下五份记录。/$$(br2)质震 #26$(li)位置:北卡彭特镇$(li)人口:174$(li)形成节点数:3$(li)节点距质源距离:垂直距离 55-80 m,水平距离 85-156 m$(li)媒质生成速率:1320 uθ/min", + "2": "质震 #27$(li)位置:布雷肯法尔$(li)人口:79$(li)形成节点数:1$(li)节点距质源距离:垂直距离 95 m,水平距离 67 m$(li)媒质生成速率:412 uθ/min", + "3": "质震 #28$(li)位置:格雷斯顿$(li)人口:大约 1000$(li)形成节点数:18$(li)节点距质源距离:垂直距离 47-110 m,水平距离 59-289 m$(li)媒质生成速率:8478 uθ/min", + "4": "质震 #29$(li)位置:无名村庄,格雷斯顿以西两天路程$(li)人口:35$(li)形成节点数:0$(li)节点距质源距离:N/A$(li)媒质生成速率:N/A$(br2)注:居民仍以正常形式被影响", + "5": "质震 #30$(li)位置:沸溪镇$(li)人口:231$(li)形成节点数:4$(li)节点距质源距离:垂直距离 61-89 m,水平距离 78-191 m$(li)媒质生成速率:1862 uθ/min", + "6": "总结:一个节点需要大约 60 单位。数量过少时其仍将被消耗,但不会生成足以形成节点的能量。输入个数与垂直水平距离之间相关性很小。$(br2)对群体居民的影响效果(身体机能尤甚)仍比单目标测试时的强,一如往常。", + }, + + experiment2: { + "1": "$(italic)这些文件中许多内容都已被编辑。剩余可读文本如下。/$$(br2)对象 #1 “A.E.”$(br)执行程序后立刻停止挣扎。面部与四肢松弛,但可不受协助站立。当不受看管时,对象会出神地做其先前职业(场地管理员)中常做的动作。", + "2": "实验程序执行后较短时间内心率极高,但由于对象在此之前处于极度恐慌状态,该现象是非决定性的。所得晶芽生成速率为 35 uθ/min。$(br)……$(br)对象 #4 “P.I.”$(br)对 P.I. 进行心理测试。对象理解物体恒存性,具有空间感知力,有基础数学逻辑推理能力。难以完成全新任务。$(br2)……", + "3": "对象 #7 “T.C.”$(br)对象同意对其执行程序。程序执行几小时后结果与其他对象类似:能站立,能执行简单任务。$(br2)……$(br2)对象 #11 “R.S.”$(br)执行程序前接受镇定,其剂量控制为能使对象在执行程序时醒来……$(br2)……", + "4": "对象 #23 “A.L.”$(br)相较其他对象,其保有更强的语言能力。在几小时内,其语言能力退化至只能组织混乱的句子,而后则至仅能说出“卡”这一个字。$(br2)待进一步测试:实验程序分别如何影响咒术师和非咒术师?$(br2)……", + }, + }, + // ^ lore + + interop: { + "1": "$(hex)咒法学/$是一门多用途的学问。如果世界能被某些其他力量$(italic)改变/$,那么有可能$(hex)咒法学/$可以和它们和谐相处,协同使用。", + "2": "应当谨记,自然似乎在这些方面耗费的精力较少,可能会出现奇怪的现象和漏洞。我相信模组制作者们会尽他们所能来纠正这些错误,但也必须理解这只是他们的业余爱好。$(br2)也许我会发现某些协同力量带来的法术在平衡性上表现不佳。我想我应该有足够的自控力不去滥用。", + "3": "最后,如果对剧情和故事感兴趣,就应理解试验这些协同力量时所做的笔记只会是些琐事。", + + gravity: { + "1": "我发现了获取与改变实体所受引力的操作。挺有趣,也挺让人头晕。$(br2)有趣的是,虽然$(l:patterns/great_spells/flight)$(action)飞行/$是一种卓越法术,且也能操控引力,但这些法术似乎不是这样操控的。我不能理解……也许模组制作者们只是想让玩家们玩得开心。", + get: "获取所给实体的所受引力的主方向上的单位向量。对大多数实体而言,此向量会是向下的:<0, -1, 0>。", + set: "设置所给实体所受引力的主方向。所给向量会被转换为与其夹角最小的轴向单位向量,如同$(l:patterns/math#hexcasting:coerce_axial)$(action)轴向之纯化/$那样。消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。", + }, + + pehkui: { + "1": "我发现了改变实体大小,和得知它们相较原本究竟变了多少的方法。", + get: "获取实体的大小倍数,也即当前大小和原本大小的比值。对大多数实体而言,此值为 1。", + set: "设置实体的大小倍数,需传入一个与其原本大小的比值。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。" + }, + }, + }, + // ^ page }, -} \ No newline at end of file + // ^ hexcasting +} diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/categories/greatwork.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/categories/greatwork.json index a178d52049..70a7c5e54d 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/categories/greatwork.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/categories/greatwork.json @@ -2,6 +2,5 @@ "name": "hexcasting.category.greatwork", "description": "hexcasting.category.greatwork.desc", "icon": "minecraft:music_disc_11", - "sortnum": 3, - "entry_color": "54398a" + "sortnum": 3 } diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/101.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/101.json index 1cf58242ea..9f217027e9 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/101.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/101.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.101", "category": "hexcasting:casting", - "icon": "hexcasting:edified_staff", + "icon": "hexcasting:staff/edified", "advancement": "hexcasting:root", "priority": true, "pages": [ diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/directrix.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/directrix.json index f4a7a0407e..7d00dd56fc 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/directrix.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/directrix.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.directrix", "category": "hexcasting:greatwork", - "icon": "hexcasting:directrix_redstone", + "icon": "hexcasting:directrix/redstone", "advancement": "hexcasting:enlightenment", "entry_color": "54398a", "sortnum": 3, @@ -16,7 +16,7 @@ }, { "type": "patchouli:crafting", - "recipe": "hexcasting:empty_directrix", + "recipe": "hexcasting:directrix/empty", "text": "hexcasting.page.directrix.empty_directrix" }, { diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/fanciful_staves.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/fanciful_staves.json index c75a43e3e0..f62fbc0013 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/fanciful_staves.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/fanciful_staves.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.fanciful_staves", "category": "hexcasting:greatwork", - "icon": "hexcasting:mindsplice_staff", + "icon": "hexcasting:staff/mindsplice", "sortnum": 6, "advancement": "hexcasting:enlightenment", "entry_color": "54398a", @@ -12,8 +12,8 @@ }, { "type": "patchouli:crafting", - "recipe": "hexcasting:quenched_staff", - "recipe2": "hexcasting:mindsplice_staff" + "recipe": "hexcasting:staff/quenched", + "recipe2": "hexcasting:staff/mindsplice" } ] } diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/impetus.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/impetus.json index 9c85e98600..c7df5a201a 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/impetus.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/impetus.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.impetus", "category": "hexcasting:greatwork", - "icon": "hexcasting:impetus_rightclick", + "icon": "hexcasting:impetus/rightclick", "advancement": "hexcasting:enlightenment", "entry_color": "54398a", "sortnum": 2, @@ -24,7 +24,7 @@ }, { "type": "patchouli:crafting", - "recipe": "hexcasting:empty_impetus", + "recipe": "hexcasting:impetus/empty", "text": "hexcasting.page.impetus.empty_impetus" }, { diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json index 93515d0ac9..9e89746d5a 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json @@ -1,6 +1,6 @@ { "name": "hexcasting.entry.staff", - "icon": "hexcasting:oak_staff", + "icon": "hexcasting:staff/oak", "category": "hexcasting:items", "priority": true, "sortnum": 1, diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/greater_sentinel.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/greater_sentinel.json index 0e26650f3a..e436b44e51 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/greater_sentinel.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/greater_sentinel.json @@ -9,6 +9,7 @@ { "type": "hexcasting:pattern", "op_id": "hexcasting:sentinel/create/great", + "anchor": "hexcasting:sentinel/create/great", "text": "hexcasting.page.greater_sentinel.1", "input": "vector", "output": "" diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json index 3a295b3232..b5899a67c3 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json @@ -3,7 +3,7 @@ "category": "hexcasting:patterns/great_spells", "icon": "minecraft:potion{Potion:'minecraft:regeneration'}", "advancement": "hexcasting:root", - "sort_num": 4, + "sortnum": 4, "read_by_default": true, "pages": [ { diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/lists.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/lists.json index 267a1a4006..8dfe25a29d 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/lists.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/lists.json @@ -40,12 +40,12 @@ }, { "type": "hexcasting:pattern", - "header": "hexcasting.action.hexcasting:concat", + "header": "hexcasting.action.hexcasting:add", "op_id": "hexcasting:add", - "anchor": "hexcasting:concat", + "anchor": "hexcasting:add", "input": "list, list", "output": "list", - "text": "hexcasting.page.lists.concat" + "text": "hexcasting.page.lists.add" }, { "type": "hexcasting:pattern", @@ -65,12 +65,12 @@ }, { "type": "hexcasting:pattern", - "header": "hexcasting.action.hexcasting:list_size", + "header": "hexcasting.action.hexcasting:abs", "op_id": "hexcasting:abs", - "anchor": "hexcasting:list_size", + "anchor": "hexcasting:abs", "input": "list", "output": "num", - "text": "hexcasting.page.lists.list_size" + "text": "hexcasting.page.lists.abs" }, { "type": "hexcasting:pattern", diff --git a/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json b/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json index fec05cd261..146a1d2642 100644 --- a/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json +++ b/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json @@ -4,7 +4,7 @@ "version": 1, "show_progress": false, "nameplate_color": "00072b", - "creative_tab": "hexcasting", + "creative_tab": "hexcasting:hexcasting", "model": "hexcasting:patchouli_book", "book_texture": "hexcasting:textures/gui/patchi_book.png", "filler_texture": "hexcasting:textures/gui/patchi_filler.png", diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 484dead704..aafe9a125d 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' // version "1.0-SNAPSHOT" + id 'fabric-loom' version "1.6-SNAPSHOT" id "at.petra-k.PKSubprojPlugin" } @@ -81,7 +81,7 @@ dependencies { implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' compileOnly project(":Common") - modImplementation "${modID}:paucal-fabric-$minecraftVersion:$paucalVersion" + modImplementation "at.petra-k.paucal:paucal-fabric-$minecraftVersion:$paucalVersion" modImplementation "vazkii.patchouli:Patchouli:$minecraftVersion-$patchouliVersion-FABRIC-SNAPSHOT" modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-base:$cardinalComponentsVersion" diff --git a/Fabric/libs/paucal-fabric-1.20.1-0.6.0.jar b/Fabric/libs/paucal-fabric-1.20.1-0.6.0.jar deleted file mode 100644 index b6a777b864..0000000000 Binary files a/Fabric/libs/paucal-fabric-1.20.1-0.6.0.jar and /dev/null differ diff --git a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 b/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 index c0de58de66..8c5031dfbe 100644 --- a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 +++ b/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 @@ -1,58 +1,58 @@ -// 1.20.1 2023-12-24T17:58:34.6074053 Hex Casting/Loot Tables -95be0cf7f277257671631929462131b6d611119a data\hexcasting\loot_tables\inject\amethyst_cluster.json -ecaeb4d5703a7aa206627ed38ee71aeb7e93d688 data\hexcasting\loot_tables\blocks\impetus\rightclick.json -a4e0194d8966a24531e43e04437cdb2a96456898 data\hexcasting\loot_tables\blocks\edified_tile.json +// 1.20.1 2024-06-13T19:17:10.5236232 Hex Casting/Loot Tables b19ac49146149555038e6d2e06200d514df1ef43 data\hexcasting\loot_tables\blocks\akashic_bookshelf.json -44658abcf122575878834d276ebcf5d8a6b7b398 data\hexcasting\loot_tables\blocks\aventurine_edified_leaves.json -d16fa9e366d48646686470c2d1f9bda4db3a1afa data\hexcasting\loot_tables\blocks\ancient_scroll_paper.json -509ecbb9731e75b63638c6012b2f986f131fd42f data\hexcasting\loot_tables\blocks\slate_amethyst_bricks_small.json -847bc3ead8a88a8f210a24e7732c28d50aa2f5dc data\hexcasting\loot_tables\blocks\edified_planks.json -a62ffbcec2aa40172e05cd9fcd8e70e295d008e9 data\hexcasting\loot_tables\blocks\edified_fence_gate.json -849afa706e7479d1c11bb40ae223ae5833e71286 data\hexcasting\loot_tables\blocks\scroll_paper_lantern.json -499af9f15cf0a7f16fd2939e5d3af60a8089cc3e data\hexcasting\loot_tables\blocks\slate_bricks.json -7c9c94d5b6b570d25eff32d4fa2ecc1e842e5231 data\hexcasting\loot_tables\blocks\quenched_allay_tiles.json -cf6ff1ed1ee6fdbb05af16468a0a0ced79ac334e data\hexcasting\loot_tables\blocks\amethyst_bricks.json -92331eb19422730ffda0a3e52427a75aa1f7aff2 data\hexcasting\loot_tables\blocks\ancient_scroll_paper_lantern.json +b6c23fdde4f2c22c81f008604d5ff1c32ca8eb61 data\hexcasting\loot_tables\blocks\amethyst_tiles.json +df5496da8e48b61a171bc7a3936495c016cc002e data\hexcasting\loot_tables\blocks\directrix\empty.json +74159c21634679a6ab1dde1c181433db8b31c6ae data\hexcasting\loot_tables\blocks\edified_log_citrine.json cc7313cc33609fe1120baa7b4db631eaa29fbba1 data\hexcasting\loot_tables\blocks\citrine_edified_leaves.json -434c2a6d2645e56e9a6ca56249ffa84645558e3b data\hexcasting\loot_tables\blocks\quenched_allay_bricks_small.json -e6ff979aa47877c1b807075c448defd249cd3484 data\hexcasting\loot_tables\blocks\slate_amethyst_pillar.json -601384d888edab27efe4a33027bb557eb7cb6ca2 data\hexcasting\loot_tables\blocks\edified_log_purple.json -2902c4dae60875a1b2daf0a948a49a3419d8ec9d data\hexcasting\loot_tables\blocks\edified_log.json +847bc3ead8a88a8f210a24e7732c28d50aa2f5dc data\hexcasting\loot_tables\blocks\edified_planks.json +49940d1cb2599212e2837d7ed66c6c66e54f80f8 data\hexcasting\loot_tables\blocks\akashic_record.json 7123b1a0469d7bd5bf8a2772182d222bf354df1a data\hexcasting\loot_tables\blocks\slate_bricks_small.json +95be0cf7f277257671631929462131b6d611119a data\hexcasting\loot_tables\inject\amethyst_cluster.json +d16fa9e366d48646686470c2d1f9bda4db3a1afa data\hexcasting\loot_tables\blocks\ancient_scroll_paper.json +2902c4dae60875a1b2daf0a948a49a3419d8ec9d data\hexcasting\loot_tables\blocks\edified_log.json b706c8a064f717c57104c48ea42aa860b45cf7a4 data\hexcasting\loot_tables\blocks\amethyst_dust_block.json -10cb1b94596ac7131efe3bd5c36c1543ddba9302 data\hexcasting\loot_tables\blocks\impetus\redstone.json -8ea8fd68719a960c2e132df441564a70c0e376a8 data\hexcasting\loot_tables\blocks\amethyst_pillar.json -df5496da8e48b61a171bc7a3936495c016cc002e data\hexcasting\loot_tables\blocks\directrix\empty.json -f1145860d80ff053970b1ad4f3b2f5d9f28e7c73 data\hexcasting\loot_tables\blocks\directrix\boolean.json -c426245d51f1e0fa0db7c4bfb454284d75506c9c data\hexcasting\loot_tables\blocks\quenched_allay_bricks.json +c81a5cb81141ab1fe09dd5dd3a0968b69dfffbd7 data\hexcasting\loot_tables\blocks\stripped_edified_log.json +0b734693c926045b60fb515814b7a6695d0295fc data\hexcasting\loot_tables\blocks\impetus\look.json +6c35afda4ca349f3506fe08f86f0afe58a6f2c44 data\hexcasting\loot_tables\blocks\quenched_allay.json +9ff760d5db5628328ea9274c98e18a08f1ab983e data\hexcasting\loot_tables\blocks\slate_block.json +ecaeb4d5703a7aa206627ed38ee71aeb7e93d688 data\hexcasting\loot_tables\blocks\impetus\rightclick.json +44658abcf122575878834d276ebcf5d8a6b7b398 data\hexcasting\loot_tables\blocks\aventurine_edified_leaves.json +4efd95d408d050c36ff21b18f3c37116491fef92 data\hexcasting\loot_tables\blocks\directrix\redstone.json +434c2a6d2645e56e9a6ca56249ffa84645558e3b data\hexcasting\loot_tables\blocks\quenched_allay_bricks_small.json bedbc2bd04f79372aedea64214ba2ea49cde9640 data\hexcasting\loot_tables\blocks\amethyst_edified_leaves.json -147e0739a712a9050856cebcad1757b3f418f647 data\hexcasting\loot_tables\blocks\edified_trapdoor.json +ab86e126a704550d3f21c0b43f99fdc2665e4b09 data\hexcasting\loot_tables\blocks\slate_amethyst_tiles.json +6eecc98b606d7ea5ec6f4c1fa4f63f7c1eba9223 data\hexcasting\loot_tables\blocks\slate_amethyst_bricks.json +2ac70e3c3600c88b2544d9755fc634216a7a523c data\hexcasting\loot_tables\blocks\edified_wood.json +92331eb19422730ffda0a3e52427a75aa1f7aff2 data\hexcasting\loot_tables\blocks\ancient_scroll_paper_lantern.json +c426245d51f1e0fa0db7c4bfb454284d75506c9c data\hexcasting\loot_tables\blocks\quenched_allay_bricks.json dc4c6d270b8e93d05ac8ddeb1b9dd1d64828ac5d data\hexcasting\loot_tables\blocks\stripped_edified_wood.json -2ad288784b0dc106ace2e6e0a40669f83476c414 data\hexcasting\loot_tables\blocks\slate.json 1dd4268edf7d6fa247013ab45541c7bfb915eef8 data\hexcasting\loot_tables\blocks\amethyst_bricks_small.json -9ff760d5db5628328ea9274c98e18a08f1ab983e data\hexcasting\loot_tables\blocks\slate_block.json -45dc91d820caa5c421fe6f2afc7f71e45d6acd4d data\hexcasting\loot_tables\blocks\slate_pillar.json -6920654f50532b5e557646e34edc4872339eb79f data\hexcasting\loot_tables\blocks\edified_log_amethyst.json -65fe724d4c4ba8b0ab7d7a11bf37687413d9119d data\hexcasting\loot_tables\blocks\edified_fence.json -9905b767be7849e02a8e4ec4170af1bdde4e7fab data\hexcasting\loot_tables\blocks\edified_stairs.json -92528799c8ee13ff26c3c505e4dfb286c30f97c7 data\hexcasting\loot_tables\blocks\akashic_connector.json +849afa706e7479d1c11bb40ae223ae5833e71286 data\hexcasting\loot_tables\blocks\scroll_paper_lantern.json 45ae0ec668a07aa5b33d491377b2978f69f9f019 data\hexcasting\loot_tables\blocks\edified_panel.json -55f265961463a89c243ec8ac1970c70185f064a6 data\hexcasting\loot_tables\blocks\edified_button.json -ab86e126a704550d3f21c0b43f99fdc2665e4b09 data\hexcasting\loot_tables\blocks\slate_amethyst_tiles.json -6eecc98b606d7ea5ec6f4c1fa4f63f7c1eba9223 data\hexcasting\loot_tables\blocks\slate_amethyst_bricks.json -1c6b077aae560e780be29e74ddcd4b0ca10ce3cf data\hexcasting\loot_tables\blocks\impetus\empty.json -0b734693c926045b60fb515814b7a6695d0295fc data\hexcasting\loot_tables\blocks\impetus\look.json -b6c23fdde4f2c22c81f008604d5ff1c32ca8eb61 data\hexcasting\loot_tables\blocks\amethyst_tiles.json -5f8d09e8c759d05cf9c2265ae28ea942cfbbe2be data\hexcasting\loot_tables\blocks\edified_pressure_plate.json -2c9af74a82ca462e5986354966d5a0a1fd5a2083 data\hexcasting\loot_tables\blocks\slate_tiles.json +e6ff979aa47877c1b807075c448defd249cd3484 data\hexcasting\loot_tables\blocks\slate_amethyst_pillar.json +65fe724d4c4ba8b0ab7d7a11bf37687413d9119d data\hexcasting\loot_tables\blocks\edified_fence.json +a4e0194d8966a24531e43e04437cdb2a96456898 data\hexcasting\loot_tables\blocks\edified_tile.json +509ecbb9731e75b63638c6012b2f986f131fd42f data\hexcasting\loot_tables\blocks\slate_amethyst_bricks_small.json +601384d888edab27efe4a33027bb557eb7cb6ca2 data\hexcasting\loot_tables\blocks\edified_log_purple.json 1a1236e54c24b5aeff05919c73c76151da2cf115 data\hexcasting\loot_tables\blocks\amethyst_sconce.json +5f8d09e8c759d05cf9c2265ae28ea942cfbbe2be data\hexcasting\loot_tables\blocks\edified_pressure_plate.json +147e0739a712a9050856cebcad1757b3f418f647 data\hexcasting\loot_tables\blocks\edified_trapdoor.json +55f265961463a89c243ec8ac1970c70185f064a6 data\hexcasting\loot_tables\blocks\edified_button.json +f1145860d80ff053970b1ad4f3b2f5d9f28e7c73 data\hexcasting\loot_tables\blocks\directrix\boolean.json 2ab674e834184b4e17dc002556d4473cac137445 data\hexcasting\loot_tables\blocks\edified_slab.json c15d3ced89c882dfe552f84435fcdd560b729567 data\hexcasting\loot_tables\blocks\scroll_paper.json -30f06db8c1ea74c9f4d95474e412336d065ac888 data\hexcasting\loot_tables\blocks\edified_door.json -49940d1cb2599212e2837d7ed66c6c66e54f80f8 data\hexcasting\loot_tables\blocks\akashic_record.json -74159c21634679a6ab1dde1c181433db8b31c6ae data\hexcasting\loot_tables\blocks\edified_log_citrine.json -4efd95d408d050c36ff21b18f3c37116491fef92 data\hexcasting\loot_tables\blocks\directrix\redstone.json -2ac70e3c3600c88b2544d9755fc634216a7a523c data\hexcasting\loot_tables\blocks\edified_wood.json -6c35afda4ca349f3506fe08f86f0afe58a6f2c44 data\hexcasting\loot_tables\blocks\quenched_allay.json 8c6c0486170537d73b923a2b9f83722107fc8716 data\hexcasting\loot_tables\blocks\edified_log_aventurine.json -c81a5cb81141ab1fe09dd5dd3a0968b69dfffbd7 data\hexcasting\loot_tables\blocks\stripped_edified_log.json +6920654f50532b5e557646e34edc4872339eb79f data\hexcasting\loot_tables\blocks\edified_log_amethyst.json +9905b767be7849e02a8e4ec4170af1bdde4e7fab data\hexcasting\loot_tables\blocks\edified_stairs.json +30f06db8c1ea74c9f4d95474e412336d065ac888 data\hexcasting\loot_tables\blocks\edified_door.json +2ad288784b0dc106ace2e6e0a40669f83476c414 data\hexcasting\loot_tables\blocks\slate.json +92528799c8ee13ff26c3c505e4dfb286c30f97c7 data\hexcasting\loot_tables\blocks\akashic_connector.json +8ea8fd68719a960c2e132df441564a70c0e376a8 data\hexcasting\loot_tables\blocks\amethyst_pillar.json +45dc91d820caa5c421fe6f2afc7f71e45d6acd4d data\hexcasting\loot_tables\blocks\slate_pillar.json +10cb1b94596ac7131efe3bd5c36c1543ddba9302 data\hexcasting\loot_tables\blocks\impetus\redstone.json +499af9f15cf0a7f16fd2939e5d3af60a8089cc3e data\hexcasting\loot_tables\blocks\slate_bricks.json +2c9af74a82ca462e5986354966d5a0a1fd5a2083 data\hexcasting\loot_tables\blocks\slate_tiles.json +cf6ff1ed1ee6fdbb05af16468a0a0ced79ac334e data\hexcasting\loot_tables\blocks\amethyst_bricks.json +7c9c94d5b6b570d25eff32d4fa2ecc1e842e5231 data\hexcasting\loot_tables\blocks\quenched_allay_tiles.json +a62ffbcec2aa40172e05cd9fcd8e70e295d008e9 data\hexcasting\loot_tables\blocks\edified_fence_gate.json +1c6b077aae560e780be29e74ddcd4b0ca10ce3cf data\hexcasting\loot_tables\blocks\impetus\empty.json diff --git a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c b/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c index 3e8de90e97..4ab33a45b7 100644 --- a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c +++ b/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c @@ -1,25 +1,25 @@ -// 1.20.1 2023-12-24T17:58:34.610406 Hex Casting/Tags for minecraft:item -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\items\planks.json -24145229528668829a1bcecf18a6377ebd07ccf8 data\hexcasting\tags\items\grants_root_advancement.json +// 1.20.1 2024-06-13T19:17:10.5291355 Hex Casting/Tags for minecraft:item +20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\buttons.json +e186f43ed06770e698c886691f91b2c6acdb5a2a data\hexcasting\tags\items\seal_materials.json +38d781b60c5c37dc025d4c7e9ec5aa680f2a5835 data\c\tags\items\gems.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs.json 5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\slabs.json c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\items\brainswept_circle_components.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\doors.json +20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\wooden_buttons.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs_that_burn.json +e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\items\planks.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\wooden_trapdoors.json e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\hexcasting\tags\items\edified_planks.json -e186f43ed06770e698c886691f91b2c6acdb5a2a data\hexcasting\tags\items\seal_materials.json c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\hexcasting\tags\items\edified_logs.json -37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\items\wooden_pressure_plates.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\trapdoors.json -bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\items\impeti.json -38d781b60c5c37dc025d4c7e9ec5aa680f2a5835 data\c\tags\items\gems.json -30780136e6469a01369d7e278998edb6d7f6a16b data\hexcasting\tags\items\staves.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\items\leaves.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs.json -20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\buttons.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\wooden_slabs.json 9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\items\directrices.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\wooden_trapdoors.json +24145229528668829a1bcecf18a6377ebd07ccf8 data\hexcasting\tags\items\grants_root_advancement.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\trapdoors.json +37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\items\wooden_pressure_plates.json 4461ef6db41a675fd077dd833cfd0ea537e755be data\c\tags\items\amethyst_dusts.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs_that_burn.json -5928bad07d3872bb60f29ef4f3c885c8e1967c20 data\hexcasting\tags\items\phial_base.json +5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\wooden_slabs.json +5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\items\leaves.json +fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\doors.json fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\wooden_doors.json -20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\wooden_buttons.json +bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\items\impeti.json +5928bad07d3872bb60f29ef4f3c885c8e1967c20 data\hexcasting\tags\items\phial_base.json +30780136e6469a01369d7e278998edb6d7f6a16b data\hexcasting\tags\items\staves.json diff --git a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c b/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c index 64f33fc657..b98bee8dbf 100644 --- a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c +++ b/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c @@ -1,4 +1,4 @@ -// 1.20.1 2023-12-24T17:58:34.6144057 Hex Casting/Tags for hexcasting:action -6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\can_start_enlighten.json -6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\per_world_pattern.json +// 1.20.1 2024-06-13T19:17:10.5351337 Hex Casting/Tags for hexcasting:action 6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\requires_enlightenment.json +6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\per_world_pattern.json +6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\can_start_enlighten.json diff --git a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 b/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 index 52d0b45004..cb9ce27405 100644 --- a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 +++ b/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 @@ -1,32 +1,32 @@ -// 1.20.1 2023-12-24T17:58:34.6084056 Hex Casting/Tags for minecraft:block -281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\stairs.json -281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\wooden_stairs.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\leaves.json -c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\blocks\brainswept_circle_components.json -7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\fence_gates.json -7acae0c88f5ead65339db1b11b16f60214434c86 data\minecraft\tags\blocks\wooden_fences.json +// 1.20.1 2024-06-13T19:17:10.5266238 Hex Casting/Tags for minecraft:block c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\blocks\logs_that_burn.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\doors.json -20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\blocks\buttons.json -bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\blocks\impeti.json -8cd7a960fd719f200b0bf38100cd17c73b66d39c data\minecraft\tags\blocks\mineable\pickaxe.json -9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\blocks\directrices.json -6f52ca5e42991af6d7b829f626010ce304277464 data\minecraft\tags\blocks\crystal_sound_blocks.json +7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\fence_gates.json +e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\hexcasting\tags\blocks\edified_planks.json +7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\unstable_bottom_center.json +357eddf3cee6f16725bed0701d57b2ca3097d74d data\minecraft\tags\blocks\mineable\shovel.json c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\blocks\logs.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\blocks\wooden_slabs.json +37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\wooden_pressure_plates.json +37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\pressure_plates.json 20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\blocks\wooden_buttons.json -357eddf3cee6f16725bed0701d57b2ca3097d74d data\minecraft\tags\blocks\mineable\shovel.json +7acae0c88f5ead65339db1b11b16f60214434c86 data\minecraft\tags\blocks\wooden_fences.json 5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\blocks\trapdoors.json -37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\wooden_pressure_plates.json +5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\blocks\wooden_slabs.json fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\wooden_doors.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\mineable\hoe.json -643994ee757a533cfb5001689e0f0263956b8a35 data\minecraft\tags\blocks\mineable\axe.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\hexcasting\tags\blocks\edified_planks.json -37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\pressure_plates.json c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\hexcasting\tags\blocks\edified_logs.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\blocks\wooden_trapdoors.json +6ae561f7399e39ffa0e97bd0569aeffa9eabff6a data\hexcasting\tags\blocks\water_plants.json e8d5ef7eabb567228b279b2419e4f042082d7491 data\minecraft\tags\blocks\fences.json +c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\blocks\brainswept_circle_components.json +8cd7a960fd719f200b0bf38100cd17c73b66d39c data\minecraft\tags\blocks\mineable\pickaxe.json +5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\mineable\hoe.json +fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\doors.json e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\blocks\planks.json -6ae561f7399e39ffa0e97bd0569aeffa9eabff6a data\hexcasting\tags\blocks\water_plants.json +5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\leaves.json +281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\stairs.json +9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\blocks\directrices.json +281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\wooden_stairs.json +6f52ca5e42991af6d7b829f626010ce304277464 data\minecraft\tags\blocks\crystal_sound_blocks.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\blocks\wooden_trapdoors.json +20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\blocks\buttons.json +bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\blocks\impeti.json 5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\blocks\slabs.json -7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\unstable_bottom_center.json +643994ee757a533cfb5001689e0f0263956b8a35 data\minecraft\tags\blocks\mineable\axe.json diff --git a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b b/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b index ddbf27457a..c07a79c63a 100644 --- a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b +++ b/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b @@ -1,218 +1,218 @@ -// 1.20.1 2023-12-24T17:58:34.6114049 Hex Casting/Recipes -45915b542d8070f2502a4047218679b08033b12d data\hexcasting\advancements\recipes\decorations\scroll_paper_lantern.json -0f2e63a9361d18aac764f6a4a4f13b9b862ac2ee data\hexcasting\recipes\compat\create\crushing\amethyst_shard.json -42b8e462de1d7006de3a7658757377450e773107 data\hexcasting\advancements\recipes\misc\dye_colorizer_blue.json -e765ee2bd324240e8ed3d625be431de3281f0070 data\hexcasting\recipes\dye_colorizer_gray.json -4a803e049915fd3c7144155ae3a1b05a917ea290 data\hexcasting\recipes\pride_colorizer_pansexual.json -c3f7b03fe184ed5e54a8ae06d130adf507b7683d data\hexcasting\recipes\staff\bamboo.json -8bea75fdc5e64c464dcf5f85166e767ff44e6dc2 data\hexcasting\advancements\recipes\misc\pride_colorizer_lesbian.json -23eff6111b0385b66d3ad5fbabfc625f426517a6 data\hexcasting\advancements\recipes\brainsweep\brainsweep\directrix_redstone.json -ea87956c49dcfabb0d39af45c016130d258181da data\hexcasting\recipes\staff\birch.json -499c5c09e3772989350f9ab3264b8692449a6dea data\hexcasting\advancements\recipes\misc\pride_colorizer_gay.json -3bf96944a8eed8b8d3f5d96b609297727c078cb7 data\hexcasting\advancements\recipes\misc\dye_colorizer_purple.json -77369113dc54d1c64b9101861dd8a1930bf1c1c4 data\hexcasting\recipes\edified_wood.json -664ce1a38c9b1c9ec21b7e078631e181fc0b2498 data\hexcasting\recipes\staff\edified.json -7e1a5a873d655e0efba80f22ae9b1de4f248e67a data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\shard.json -f347f4ce869207e62a7887df1252505a3432e12a data\hexcasting\recipes\pride_colorizer_genderfluid.json -a8d604ba059d54502837809815d3ac9bbcaa89bf data\hexcasting\advancements\recipes\redstone\akashic_bookshelf.json -7552df3fc726cc4cdaa88aa4823eff6ce069fb75 data\hexcasting\recipes\slate_block_from_slates.json -1e51cd4f527b3aea4d61d91829e47c191c9c05bb data\hexcasting\recipes\pride_colorizer_gay.json -004e0694b3bf53140be7df89a4defc255b800619 data\hexcasting\advancements\recipes\tools\focus_rotated.json -2cea013887734cbc4971bcd57e7e4f6a2b25c8e1 data\hexcasting\advancements\recipes\tools\focus.json -27dc4a1647f264c45b27f5552fd9403a02853484 data\hexcasting\advancements\recipes\tools\spellbook.json -0b951ce7b9d1bfb07ae012b12225b595d36c6e66 data\hexcasting\recipes\amethyst_dust_packing.json -63189af501442318a90c16d6951e51c0c5d6d4f3 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_purple.json -ef96ae9709ec931ce6b6af8a539f9bc483236449 data\hexcasting\recipes\scroll_medium.json -e11aeded7f5d3fdd224627c67661bbd993901703 data\hexcasting\recipes\edified_pressure_plate.json +// 1.20.1 2024-06-13T19:17:10.5301427 Hex Casting/Recipes +7522be58b09554a3f1a54d5b2343c3eab01447a3 data\hexcasting\recipes\dye_colorizer_magenta.json 8b7136c206b799a2e394aa02316b0509674ff64f data\hexcasting\advancements\recipes\tools\staff\bamboo.json -fd7c8325fcaa6a718e90c09251b447fb365523d4 data\hexcasting\recipes\pride_colorizer_demiboy.json -2eacf53894ae97712dc3874777e29dce0a0e5540 data\hexcasting\advancements\recipes\misc\pride_colorizer_asexual.json -fd2f25b0a71806c96af5a307fad76f66de6210a4 data\hexcasting\advancements\recipes\building_blocks\slate_block.json -dcc9bf721dd40724abcc69f1f7e8a1610dbf88f3 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_door.json -f4c56ea7143ce92a0ae0b663310e53644a7309f7 data\hexcasting\advancements\recipes\misc\pride_colorizer_pansexual.json -5e98cec2084f0cfbb959c3ec39bd85a3369f443b data\hexcasting\advancements\recipes\tools\abacus.json -e9166f40c8797cdbf3d8062dfa35c74f850f1000 data\hexcasting\advancements\recipes\misc\dye_colorizer_white.json -f1bae034d27d218bf262a8c777b787d232489f16 data\hexcasting\recipes\lens.json -4680e9dafcf9b60b3485609519d66eefcfd539bc data\hexcasting\recipes\staff\dark_oak.json -ea46e570a43cd3ea1cc78c51d9da45d93944730a data\hexcasting\advancements\recipes\redstone\directrix\empty.json -1b570b35288be9f6faab1536d6e45cb52eb088c0 data\hexcasting\advancements\recipes\tools\staff\dark_oak.json -c4b985635c3b1a519d7a83da65daba5bdd3a5f59 data\hexcasting\advancements\recipes\decorations\ageing_scroll_paper_lantern.json -aa7558ec1baf6070efbe448d886e20e964e33f96 data\hexcasting\advancements\recipes\brainsweep\brainsweep\quench_allay.json -4d941fc399c6b7a470513a572ecd88982823da84 data\hexcasting\advancements\recipes\building_blocks\edified_wood.json -b84c113ef5321c9df9ac9080de03e8d8639feab2 data\hexcasting\advancements\recipes\misc\pride_colorizer_genderqueer.json -7166cd4355d11c209bc7749bc862caddcfd795fb data\hexcasting\recipes\dye_colorizer_cyan.json -24c244e53c7e47b85845d2ee36b1665410cf495a data\hexcasting\recipes\edified_planks.json -c03c81dc123294472e8bb6f836c319e96f8db4f5 data\hexcasting\advancements\recipes\building_blocks\edified_fence.json -bc729ac7cf84d29a99cd34d50c152c0b9d20bd7a data\hexcasting\advancements\recipes\brainsweep\brainsweep\akashic_record.json -963d87d2738686e5398a178b8b369228ff067403 data\hexcasting\recipes\spellbook.json -7c479398bbc7185a2c3efd568ad266d8109245bf data\hexcasting\advancements\recipes\redstone\edified_door.json -b29f9d9c14e60ded1148680e2e0ef405b5a3c845 data\hexcasting\advancements\recipes\misc\uuid_colorizer.json -93ed0491548920bc75797d18501c750ef07fe3ea data\hexcasting\advancements\recipes\misc\pride_colorizer_bisexual.json -cedc2889c4f327b18755bbe8c3c595d302e2a9d0 data\hexcasting\recipes\decompose_quenched_shard\shard.json +92bdf87687d8823036fae6bd01782c653831286b data\hexcasting\recipes\brainsweep\impetus_look.json 5e28e2c352366720ce91b73f8c8c38e217f7198d data\hexcasting\recipes\edified_fence_gate.json -a366ea3750adc0d336ab8f318c40baed3f9c3eb7 data\hexcasting\recipes\brainsweep\impetus_storedplayer.json -71d38559bf455ea343ac0237a57db4d3f0833a7c data\hexcasting\advancements\recipes\misc\dye_colorizer_magenta.json -f80dbf59957be175fbcd63224005e09c4cd1a122 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_citrine.json -31ec6474ddae967a6c1dadf9be8292d375510364 data\hexcasting\advancements\recipes\building_blocks\edified_tile.json +ea63e49709bd80cb9f4cd1fe13e9bd0281101c9a data\hexcasting\recipes\slate.json +3608f0ec056f2c5d29a9a89305218497fd2c4383 data\hexcasting\recipes\stonecutting\amethyst_tiles.json +0f2e63a9361d18aac764f6a4a4f13b9b862ac2ee data\hexcasting\recipes\compat\create\crushing\amethyst_shard.json +12bd3d04c791ef16aad5e992f038d6726229a436 data\hexcasting\advancements\recipes\tools\artifact.json +45915b542d8070f2502a4047218679b08033b12d data\hexcasting\advancements\recipes\decorations\scroll_paper_lantern.json +2c292e12b5e85b1701740c222e5c5465799ad1dc data\hexcasting\recipes\pride_colorizer_aroace.json +78958099bf4337ad281580d90f434b3074ad18c8 data\hexcasting\recipes\pride_colorizer_genderqueer.json +b84c113ef5321c9df9ac9080de03e8d8639feab2 data\hexcasting\advancements\recipes\misc\pride_colorizer_genderqueer.json +c2ef04b311251b4eb22320b2f5313c54533a9974 data\hexcasting\advancements\recipes\tools\staff\birch.json +499c5c09e3772989350f9ab3264b8692449a6dea data\hexcasting\advancements\recipes\misc\pride_colorizer_gay.json +f08a0aee92b281ae325d907e6fe4a3b03980f2aa data\hexcasting\advancements\recipes\tools\staff\edified.json +42b8e462de1d7006de3a7658757377450e773107 data\hexcasting\advancements\recipes\misc\dye_colorizer_blue.json +838b91c33a72a58aa286607eaaa17cdd6b4c90ba data\hexcasting\recipes\amethyst_sconce.json +8f7b81add0153ad94900acc66cd8174ae7115f64 data\hexcasting\advancements\recipes\building_blocks\slate_block_from_slates.json b624d103d944a8a1d4d8a9e85c198a5492b476f8 data\hexcasting\advancements\recipes\redstone\edified_trapdoor.json -9b7c5220fbaf3e84fa9e81eae322eed5d37b22d3 data\hexcasting\recipes\pride_colorizer_transgender.json -5a90084c03d6e8424872870c8b65f4771b447f03 data\hexcasting\recipes\brainsweep\budding_amethyst.json -7f2f29981df2ca4464ee0250180e670f5331f65b data\hexcasting\recipes\dye_colorizer_pink.json -441f336edb635e5d8c2a7183906fed1c501f06fd data\hexcasting\recipes\pride_colorizer_bisexual.json -17a1adf747b99848381ca8e7c5e2cd9dd96c014f data\hexcasting\advancements\recipes\misc\default_colorizer.json +0e792d49c81d2164e827d1bdedaa0fa358dfc437 data\hexcasting\advancements\recipes\misc\pride_colorizer_aromantic.json 151875101066f7af5788c7a2e1c6b342971a546a data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_wood.json -49e706193bb57a957091e419bd0d8aa58135da1f data\hexcasting\recipes\dye_colorizer_green.json -3608f0ec056f2c5d29a9a89305218497fd2c4383 data\hexcasting\recipes\stonecutting\amethyst_tiles.json -b6720c1c73455ad817bac9b5ca2ca045c5c4050c data\hexcasting\recipes\pride_colorizer_agender.json -ad647a2078099344ea7f9836a68e1bf8e8119277 data\hexcasting\advancements\recipes\misc\dye_colorizer_brown.json -b20be6eb5a8b60567871444e65d773ec9a67ece1 data\hexcasting\recipes\staff\crimson.json -7baf0777533737aef68bcac36944943b77138d29 data\hexcasting\recipes\edified_button.json -8c52917fc7041c483fb6dfe8d16c90f096f2beaf data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_amethyst.json -1a9dd55a24f56a4e9467f1117e0898f7e71ade67 data\hexcasting\advancements\recipes\decorations\amethyst_sconce.json -09096a40275b6c49d4b4e6984869aa43b34712c3 data\hexcasting\recipes\dynamicseal_focus.json -d7de5d626fd799a2522af36f0c62c52fe490e6d2 data\hexcasting\recipes\edified_door.json -2c56c267e23e75d5a3b9358d424d69642e001b50 data\hexcasting\recipes\decompose_quenched_shard\dust.json -36d26f34d0405ff2d1e728e5b5174502686e3590 data\hexcasting\advancements\recipes\brainsweep\brainsweep\budding_amethyst.json -1a0d55e6824c078453c1d44e885a1c51ba707a41 data\hexcasting\recipes\dye_colorizer_white.json -71f821f5d24b0bf9ecd860d51e055628fe4af50c data\hexcasting\recipes\edified_panel.json -b94bc4dd4a63db10af86c524ba00eae157c1824b data\hexcasting\advancements\recipes\building_blocks\edified_fence_gate.json -68ab70e0b4e432a3492767c5597ecd836f106714 data\hexcasting\advancements\recipes\tools\staff\mindsplice.json +7f2f29981df2ca4464ee0250180e670f5331f65b data\hexcasting\recipes\dye_colorizer_pink.json +2fff80cd3dabd2bc1744eecd72b2364b0f91c7c1 data\hexcasting\advancements\recipes\misc\dye_colorizer_yellow.json +71d38559bf455ea343ac0237a57db4d3f0833a7c data\hexcasting\advancements\recipes\misc\dye_colorizer_magenta.json +b7084f131b0cdb9c2c698a3c5b3450d69e788d6e data\hexcasting\recipes\dye_colorizer_yellow.json +40ed21dc80d39236ca0e6d2cea60861c637cf931 data\hexcasting\advancements\recipes\misc\pride_colorizer_nonbinary.json +203b7035125390abb4ed77b3a4dca8f8f8f57bc5 data\hexcasting\recipes\dye_colorizer_light_gray.json +2003fed3aa4eb622b6b07a9e65946fb40be14420 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_rightclick.json +fb852d8e4bcfa7b75f41a6ac7dc1e76b00d95fb1 data\hexcasting\advancements\recipes\misc\dye_colorizer_red.json +e9166f40c8797cdbf3d8062dfa35c74f850f1000 data\hexcasting\advancements\recipes\misc\dye_colorizer_white.json +04902d4eca30560bc601a8196d82f74f3fa5b191 data\hexcasting\recipes\dynamicseal_spellbook.json +fb486df96798724da2fcc0df5706f19bc1ff94dc data\hexcasting\advancements\recipes\misc\dye_colorizer_light_blue.json +ed5c690324e3d9b55599f00f078ae225072a2e7f data\hexcasting\recipes\brainsweep\impetus_rightclick.json +98c0843e6a83b91820f1c720e206295eec20ff95 data\hexcasting\recipes\ancient_scroll_paper.json +9ea4fe5272ce2241d98f30359f55cfc1936c7b48 data\hexcasting\advancements\recipes\tools\staff\cherry.json +e6a592721234448f2ee7ec402bca10a9b78b4677 data\hexcasting\advancements\recipes\decorations\slate.json +775560efa36581389c0319435bda035be262ed4f data\hexcasting\advancements\recipes\building_blocks\edified_stairs.json +bc8fe4d2f55fe119b0b146a71782a3d4788380b1 data\create\recipes\crushing\amethyst_block.json +31ec6474ddae967a6c1dadf9be8292d375510364 data\hexcasting\advancements\recipes\building_blocks\edified_tile.json +5401828f85e709b5817ecc8464dc63e536a730dc data\hexcasting\recipes\staff\cherry.json 4aaefc65af5fe69d312247fdda7d983edf8dcd9a data\hexcasting\recipes\pride_colorizer_intersex.json -2a2f60fb0f63ee278b74c418acf04575304c521f data\hexcasting\advancements\recipes\tools\jeweler_hammer.json -7d71eb93bbb0856167cf4521283e39f0048078ee data\hexcasting\advancements\recipes\redstone\edified_button.json -846baaef37844216b57bb9b35e52b1bb6b56b413 data\hexcasting\advancements\recipes\decorations\scroll_small.json -e691130641b11c0a030a51c71dee0ba356f3b5bd data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_aventurine.json -a8cab28cffdf495253a320094d202fccc5aeb113 data\hexcasting\advancements\recipes\decorations\ancient_scroll_paper_lantern.json -7aa3bf4a3d6fb92743b29dfe89d50537fefc0db9 data\hexcasting\advancements\recipes\misc\pride_colorizer_intersex.json -0864e8b86bdad0bf9ab2ddeb0cd5a182808b5a0a data\hexcasting\recipes\default_colorizer.json -ea63e49709bd80cb9f4cd1fe13e9bd0281101c9a data\hexcasting\recipes\slate.json -170af3c83a45f9550827cc48e4bb5a621d06d685 data\hexcasting\advancements\recipes\misc\pride_colorizer_transgender.json +410bfde90cb977db3f13814e94484fa11fca7cfc data\hexcasting\recipes\thought_knot.json +011f8daf15148d4b77686c6d382d8f5c288a333d data\hexcasting\advancements\recipes\building_blocks\ancient_scroll_paper.json +c1541738df1ee41c362ad3b9c3a9f0e181bd5c62 data\hexcasting\recipes\pride_colorizer_plural.json +8815ea5d8d7379062e050adc5736cc579c3bdd9e data\hexcasting\recipes\edified_stairs.json 1ad54df5eaee3d1e810d2c91bd03f626084e30b6 data\hexcasting\recipes\edified_trapdoor.json -b6e762c198b9632defd7f8b11287702abecd681d data\hexcasting\recipes\staff\mindsplice.json -ee5db13cbb33d9c62bcb1eb645e2c4bea97ad44a data\hexcasting\advancements\recipes\building_blocks\amethyst_dust_unpacking.json -c6228d72ca800a7dd336e82bbb9b4f20f89de29d data\hexcasting\advancements\recipes\redstone\edified_pressure_plate.json -b90ad4cbffc2e3c01671dfe8bda5e42d9b8a685c data\hexcasting\advancements\recipes\tools\staff\crimson.json -5fab1b9c93304a53a4c305b511704458e4593444 data\hexcasting\recipes\pride_colorizer_demigirl.json -641d8c38b8109665314fccbebd9068ba10b04118 data\hexcasting\advancements\recipes\misc\dye_colorizer_gray.json -8e48c680b38666c2e7da71fbe4ceddf5d99a5cbc data\hexcasting\advancements\recipes\food\sub_sandwich.json +903cbe4d4c4e5abcd5e006f9d0237e8c596228ba data\hexcasting\recipes\edified_tile.json +5a90084c03d6e8424872870c8b65f4771b447f03 data\hexcasting\recipes\brainsweep\budding_amethyst.json +27dc4a1647f264c45b27f5552fd9403a02853484 data\hexcasting\advancements\recipes\tools\spellbook.json +09096a40275b6c49d4b4e6984869aa43b34712c3 data\hexcasting\recipes\dynamicseal_focus.json +b300f7729e75614fce412457f6717686680f81da data\hexcasting\recipes\sub_sandwich.json eb9ebf77f0daa32f665a60888fcda19c940f0b2f data\hexcasting\advancements\recipes\misc\pride_colorizer_demigirl.json -996c8361766377a70e0b5a5caff3076fc6031b0a data\hexcasting\recipes\impetus\empty.json -e536791d0c6fb48206e6e30d56879eaf0a9e4bd7 data\hexcasting\recipes\akashic_bookshelf.json +5d6d73e16a36da5f9df6a7b8ac859181d401766d data\hexcasting\recipes\uuid_colorizer.json +de38d15e7a91c77df24c1dc954b3e98ee197876f data\hexcasting\recipes\focus.json +8e48c680b38666c2e7da71fbe4ceddf5d99a5cbc data\hexcasting\advancements\recipes\food\sub_sandwich.json 0038883bd294cc8a1b324d6782478d5e37b4dbf9 data\hexcasting\advancements\recipes\misc\dye_colorizer_pink.json -417695497a95436186c1a4ed842d7975d754f9eb data\hexcasting\recipes\stripped_edified_wood.json -72f70637aea1c11683e9ee91d83c2807c6ec33a9 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_trapdoor.json -a9111ff52513200af47b79cf98b2e545699497bb data\hexcasting\advancements\recipes\building_blocks\amethyst_tiles.json -ed5c690324e3d9b55599f00f078ae225072a2e7f data\hexcasting\recipes\brainsweep\impetus_rightclick.json -8815ea5d8d7379062e050adc5736cc579c3bdd9e data\hexcasting\recipes\edified_stairs.json -e0609202271e402d8ae58e4f8eaf11dcdda10a9e data\hexcasting\recipes\brainsweep\akashic_record.json -095aeb2882c6849f10fb6536e7c780790778e5e7 data\hexcasting\recipes\staff\jungle.json -a0b87b1b21506708d09c9295b7afc13de6b1fce6 data\hexcasting\recipes\pride_colorizer_aromantic.json -c8f2ad363e4d20054f4e56fde02c8775a45a7169 data\hexcasting\recipes\artifact.json -40ed21dc80d39236ca0e6d2cea60861c637cf931 data\hexcasting\advancements\recipes\misc\pride_colorizer_nonbinary.json -c1846dd794f5cc5814b8a839291e82512a02ba12 data\hexcasting\advancements\recipes\misc\pride_colorizer_plural.json -a72a0fcc0f3a81d31b30a7a626aef537796ca73b data\hexcasting\advancements\recipes\tools\staff\quenched.json -4003f297be29810cebde4995fb2838c2c68a25ea data\hexcasting\recipes\pride_colorizer_lesbian.json -0654e70ed1ed8be20ae3dd9f4955cd14f9fa40d0 data\hexcasting\advancements\recipes\tools\staff\jungle.json -a1f9df0537c0ef33a1164cf94e8ff4b1094f889f data\hexcasting\advancements\recipes\tools\staff\warped.json +55ea553a96e1d6a54385890f7c48fe7b2bed6871 data\hexcasting\advancements\recipes\tools\trinket.json f0e71ae8c6a9170669f44096a55a875d11497c56 data\hexcasting\recipes\staff\warped.json -aa1caae7eba6aede0f179619488e2253b3b723dd data\hexcasting\recipes\focus_rotated.json -b1f8375aaf0d66035dee720ea59605f69fc0a154 data\hexcasting\recipes\edified_fence.json -55602e415fc1b797439b674050887e9e388558c9 data\hexcasting\advancements\recipes\building_blocks\edified_panel.json -51b047601368a103be166d907633b196d2d8a4e8 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log.json -2aa7d74e29a7c5ee4f1b8835cf7c6109eed81d77 data\hexcasting\recipes\brainsweep\quench_allay.json -1d1e73244fb3da633d8a5f84bad93c6022a94368 data\hexcasting\advancements\recipes\misc\pride_colorizer_demiboy.json -505eb9192df0b48867e58e09ce36b2259dc6d3e8 data\hexcasting\advancements\recipes\decorations\scroll.json -c2a0a489967db4064dfbe1ee6367e132665f3c00 data\hexcasting\recipes\edified_slab.json -72447ac69a0d85f91064180d3c852040a9e33832 data\hexcasting\recipes\pride_colorizer_asexual.json +93ed0491548920bc75797d18501c750ef07fe3ea data\hexcasting\advancements\recipes\misc\pride_colorizer_bisexual.json +49e706193bb57a957091e419bd0d8aa58135da1f data\hexcasting\recipes\dye_colorizer_green.json 648f1862fde1dd8ade80b2991b8c8e3991389e95 data\hexcasting\recipes\dye_colorizer_light_blue.json -8f7b81add0153ad94900acc66cd8174ae7115f64 data\hexcasting\advancements\recipes\building_blocks\slate_block_from_slates.json -f08a0aee92b281ae325d907e6fe4a3b03980f2aa data\hexcasting\advancements\recipes\tools\staff\edified.json -06ca609ba1a32f094cf6edbc989bc9ddaf9d342c data\hexcasting\advancements\recipes\misc\pride_colorizer_genderfluid.json -946cde51bbfc2af344b078f6b39389ffc44462f4 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_storedplayer.json -0e792d49c81d2164e827d1bdedaa0fa358dfc437 data\hexcasting\advancements\recipes\misc\pride_colorizer_aromantic.json -f482a4349786388cc8f11d5550548f7d60265438 data\hexcasting\recipes\staff\mangrove.json -8f8773a541bc6a4a6c55a23f4f98b5da4f61a031 data\hexcasting\recipes\scroll_paper.json -494aa470790ae46baebbf24ee5b76f5885c1af1a data\hexcasting\recipes\ageing_scroll_paper_lantern.json -2c292e12b5e85b1701740c222e5c5465799ad1dc data\hexcasting\recipes\pride_colorizer_aroace.json -d47352426739a0fc500a385d820d767a307e1d16 data\hexcasting\advancements\recipes\misc\dye_colorizer_black.json -30352d8ad510768770bb1b2d378959b7a502f825 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_look.json -61fafd43af83bdca6720d0993ab71f40a8bebd40 data\hexcasting\advancements\recipes\redstone\akashic_connector.json -de38d15e7a91c77df24c1dc954b3e98ee197876f data\hexcasting\recipes\focus.json -011f8daf15148d4b77686c6d382d8f5c288a333d data\hexcasting\advancements\recipes\building_blocks\ancient_scroll_paper.json -8f515bf8ccea70b3d88845ed83966dc0c66082f6 data\hexcasting\advancements\recipes\tools\staff\oak.json -2b64261bd4aefdc55d35400f25835434f88856cf data\hexcasting\recipes\amethyst_tiles.json -41a570f970c9af8229cb1140a11a5220fac00957 data\hexcasting\advancements\recipes\tools\staff\spruce.json -775560efa36581389c0319435bda035be262ed4f data\hexcasting\advancements\recipes\building_blocks\edified_stairs.json -5889e2df2fb4e1ea29f2590b96bb3aa94961a09a data\hexcasting\recipes\scroll.json -7522be58b09554a3f1a54d5b2343c3eab01447a3 data\hexcasting\recipes\dye_colorizer_magenta.json +a3130e3098e35b75afae4f31996d9ab7468e0bc3 data\hexcasting\advancements\recipes\tools\thought_knot.json +daa7b13d5370f4306f8cdf3037fc346e8918950a data\hexcasting\recipes\dye_colorizer_brown.json db5ae3a2fda235cf1c83fd83e0026a262e668217 data\hexcasting\advancements\recipes\building_blocks\edified_slab.json -5e66982df6a1074c81f381898033b521ca337695 data\hexcasting\recipes\staff\quenched.json -ce9d0b976f7cc8ad4a0815bbea6c43115addb90f data\hexcasting\advancements\recipes\building_blocks\scroll_paper.json -0bd7c9f4a9bf29c1b63b2f9378f0a7e2f594b7b7 data\hexcasting\recipes\pride_colorizer_nonbinary.json -d6b7a9392320c11866b3f139f97977dc9f55bc47 data\hexcasting\recipes\scroll_small.json -6493676f8ca93a7be8d70e25d69ddad935b3f16b data\hexcasting\advancements\recipes\tools\lens.json +0b951ce7b9d1bfb07ae012b12225b595d36c6e66 data\hexcasting\recipes\amethyst_dust_packing.json +c4b985635c3b1a519d7a83da65daba5bdd3a5f59 data\hexcasting\advancements\recipes\decorations\ageing_scroll_paper_lantern.json +095aeb2882c6849f10fb6536e7c780790778e5e7 data\hexcasting\recipes\staff\jungle.json +2c56c267e23e75d5a3b9358d424d69642e001b50 data\hexcasting\recipes\decompose_quenched_shard\dust.json +7aa3bf4a3d6fb92743b29dfe89d50537fefc0db9 data\hexcasting\advancements\recipes\misc\pride_colorizer_intersex.json +3bf96944a8eed8b8d3f5d96b609297727c078cb7 data\hexcasting\advancements\recipes\misc\dye_colorizer_purple.json +a0b87b1b21506708d09c9295b7afc13de6b1fce6 data\hexcasting\recipes\pride_colorizer_aromantic.json +e0609202271e402d8ae58e4f8eaf11dcdda10a9e data\hexcasting\recipes\brainsweep\akashic_record.json +e765ee2bd324240e8ed3d625be431de3281f0070 data\hexcasting\recipes\dye_colorizer_gray.json +dcc9bf721dd40724abcc69f1f7e8a1610dbf88f3 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_door.json +afb422ad4a918ee0161bf077f09475bb1da2b4eb data\hexcasting\recipes\amethyst_dust_unpacking.json +7baf0777533737aef68bcac36944943b77138d29 data\hexcasting\recipes\edified_button.json +a8d604ba059d54502837809815d3ac9bbcaa89bf data\hexcasting\advancements\recipes\redstone\akashic_bookshelf.json +1b570b35288be9f6faab1536d6e45cb52eb088c0 data\hexcasting\advancements\recipes\tools\staff\dark_oak.json +b6720c1c73455ad817bac9b5ca2ca045c5c4050c data\hexcasting\recipes\pride_colorizer_agender.json +c43fb770003c8d882fd9c1e7d1ecb5f196cba1ab data\hexcasting\recipes\cypher.json +3b03fdae3896212a0b8b9b3a2d4880d197e67d2d data\hexcasting\recipes\jeweler_hammer.json +7166cd4355d11c209bc7749bc862caddcfd795fb data\hexcasting\recipes\dye_colorizer_cyan.json +ef96ae9709ec931ce6b6af8a539f9bc483236449 data\hexcasting\recipes\scroll_medium.json +6f2634e5588aede8e29157ecc859652d8a9f4065 data\hexcasting\advancements\recipes\misc\dye_colorizer_orange.json +41a570f970c9af8229cb1140a11a5220fac00957 data\hexcasting\advancements\recipes\tools\staff\spruce.json +8f515bf8ccea70b3d88845ed83966dc0c66082f6 data\hexcasting\advancements\recipes\tools\staff\oak.json +30352d8ad510768770bb1b2d378959b7a502f825 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_look.json +ea46e570a43cd3ea1cc78c51d9da45d93944730a data\hexcasting\advancements\recipes\redstone\directrix\empty.json +cedc2889c4f327b18755bbe8c3c595d302e2a9d0 data\hexcasting\recipes\decompose_quenched_shard\shard.json 7ca0f9fc6e8ae1ad08ef5c29a0b279b891f7d8d4 data\hexcasting\advancements\recipes\misc\pride_colorizer_aroace.json -0ead307e47242ba140584f6bd20088a1fa7c2909 data\hexcasting\recipes\directrix\empty.json 923e7cd200518042f11474713eca9ccad126dab7 data\hexcasting\recipes\staff\spruce.json -f8ee073c1c03f1c11147e4801eeba1f86e5459ba data\hexcasting\recipes\dye_colorizer_blue.json -ae88fcdecbfbdd0a0fe778467421a3b32d7ed735 data\create\recipes\crushing\amethyst_cluster.json -b10d590e918e35b16578a8b739a1c4e7e2202e16 data\hexcasting\advancements\recipes\misc\dye_colorizer_cyan.json -157ee5fba985bbd01a87f44578890dab5489a8e5 data\hexcasting\advancements\recipes\misc\dye_colorizer_green.json -f77518b6993fe8e31de10af286c33ab72c0f9077 data\hexcasting\advancements\recipes\redstone\impetus\empty.json -410bfde90cb977db3f13814e94484fa11fca7cfc data\hexcasting\recipes\thought_knot.json -54335e0004423899ad37763a1d8456cc0a6e72a7 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\charged.json -afb422ad4a918ee0161bf077f09475bb1da2b4eb data\hexcasting\recipes\amethyst_dust_unpacking.json -97062771a426f6e4b9e3bfd6daa62b1d4b3c7039 data\hexcasting\recipes\abacus.json -f64fa00d85a9abb24e89b0d2c9f818001371f5e6 data\hexcasting\recipes\slate_block.json +6e2dc32f975d987b8dfd329507334f647bceadc0 data\hexcasting\advancements\recipes\tools\staff\mangrove.json +7552df3fc726cc4cdaa88aa4823eff6ce069fb75 data\hexcasting\recipes\slate_block_from_slates.json +5e66982df6a1074c81f381898033b521ca337695 data\hexcasting\recipes\staff\quenched.json +b94bc4dd4a63db10af86c524ba00eae157c1824b data\hexcasting\advancements\recipes\building_blocks\edified_fence_gate.json +1093cccc6b1c45eb91f7c1680ef575a7bffb2744 data\hexcasting\advancements\recipes\building_blocks\edified_planks.json +36d26f34d0405ff2d1e728e5b5174502686e3590 data\hexcasting\advancements\recipes\brainsweep\brainsweep\budding_amethyst.json +441f336edb635e5d8c2a7183906fed1c501f06fd data\hexcasting\recipes\pride_colorizer_bisexual.json +51b047601368a103be166d907633b196d2d8a4e8 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log.json +ea87956c49dcfabb0d39af45c016130d258181da data\hexcasting\recipes\staff\birch.json +0654e70ed1ed8be20ae3dd9f4955cd14f9fa40d0 data\hexcasting\advancements\recipes\tools\staff\jungle.json +846baaef37844216b57bb9b35e52b1bb6b56b413 data\hexcasting\advancements\recipes\decorations\scroll_small.json +4d941fc399c6b7a470513a572ecd88982823da84 data\hexcasting\advancements\recipes\building_blocks\edified_wood.json +5889e2df2fb4e1ea29f2590b96bb3aa94961a09a data\hexcasting\recipes\scroll.json +ce9d0b976f7cc8ad4a0815bbea6c43115addb90f data\hexcasting\advancements\recipes\building_blocks\scroll_paper.json b5946314683e5a823b577a18d13fb437a35aafd5 data\hexcasting\recipes\decompose_quenched_shard\charged.json -552c235dc58a46a3e57913c9b9faf3f21abeae32 data\hexcasting\advancements\recipes\building_blocks\stripped_edified_wood.json -daa7b13d5370f4306f8cdf3037fc346e8918950a data\hexcasting\recipes\dye_colorizer_brown.json -78958099bf4337ad281580d90f434b3074ad18c8 data\hexcasting\recipes\pride_colorizer_genderqueer.json -9269b17eaae3217422352354fc6006c9808b398c data\hexcasting\recipes\dye_colorizer_black.json -b300f7729e75614fce412457f6717686680f81da data\hexcasting\recipes\sub_sandwich.json -903cbe4d4c4e5abcd5e006f9d0237e8c596228ba data\hexcasting\recipes\edified_tile.json -2fff80cd3dabd2bc1744eecd72b2364b0f91c7c1 data\hexcasting\advancements\recipes\misc\dye_colorizer_yellow.json -e6a592721234448f2ee7ec402bca10a9b78b4677 data\hexcasting\advancements\recipes\decorations\slate.json -a85cfbd7988f5df0b18d160591605aea8e6808d2 data\hexcasting\recipes\trinket.json -fb486df96798724da2fcc0df5706f19bc1ff94dc data\hexcasting\advancements\recipes\misc\dye_colorizer_light_blue.json -5f216dbb7b89fd837e2dd73e3ed41c8d412de234 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\dust.json -bc8fe4d2f55fe119b0b146a71782a3d4788380b1 data\create\recipes\crushing\amethyst_block.json -0aaf55492e850d2bb1ec2f9986406ca61fde4cfd data\hexcasting\recipes\dye_colorizer_lime.json +97062771a426f6e4b9e3bfd6daa62b1d4b3c7039 data\hexcasting\recipes\abacus.json +f482a4349786388cc8f11d5550548f7d60265438 data\hexcasting\recipes\staff\mangrove.json +f4c56ea7143ce92a0ae0b663310e53644a7309f7 data\hexcasting\advancements\recipes\misc\pride_colorizer_pansexual.json +2aa7d74e29a7c5ee4f1b8835cf7c6109eed81d77 data\hexcasting\recipes\brainsweep\quench_allay.json +862f1a61a296a834df8a93dbd5a6cdfa2df15721 data\hexcasting\advancements\recipes\tools\staff\acacia.json +23eff6111b0385b66d3ad5fbabfc625f426517a6 data\hexcasting\advancements\recipes\brainsweep\brainsweep\directrix_redstone.json af8fe74b624df4a31727347b9826614a66092b0a data\hexcasting\advancements\recipes\misc\pride_colorizer_agender.json -1b092acfc3115702c74e141492e649d58512f259 data\hexcasting\recipes\staff\oak.json -3b03fdae3896212a0b8b9b3a2d4880d197e67d2d data\hexcasting\recipes\jeweler_hammer.json -4d5e4a6374731b2d0a90c70a5d489703fd966977 data\hexcasting\advancements\recipes\misc\dye_colorizer_lime.json +9b7c5220fbaf3e84fa9e81eae322eed5d37b22d3 data\hexcasting\recipes\pride_colorizer_transgender.json +1a9dd55a24f56a4e9467f1117e0898f7e71ade67 data\hexcasting\advancements\recipes\decorations\amethyst_sconce.json +6493676f8ca93a7be8d70e25d69ddad935b3f16b data\hexcasting\advancements\recipes\tools\lens.json +c8f2ad363e4d20054f4e56fde02c8775a45a7169 data\hexcasting\recipes\artifact.json +552c235dc58a46a3e57913c9b9faf3f21abeae32 data\hexcasting\advancements\recipes\building_blocks\stripped_edified_wood.json b6fa898369ac52cdd9d7f91e3b8a2cb881c3829f data\hexcasting\advancements\recipes\decorations\scroll_medium.json -06402fb37fe4bb05918d13dbfdb89f4c2b67f3ec data\hexcasting\advancements\recipes\tools\cypher.json -a3130e3098e35b75afae4f31996d9ab7468e0bc3 data\hexcasting\advancements\recipes\tools\thought_knot.json -838b91c33a72a58aa286607eaaa17cdd6b4c90ba data\hexcasting\recipes\amethyst_sconce.json -04902d4eca30560bc601a8196d82f74f3fa5b191 data\hexcasting\recipes\dynamicseal_spellbook.json -f81053a3269c1b371be3f8057bad4803056ee0f9 data\hexcasting\recipes\dye_colorizer_orange.json -98c0843e6a83b91820f1c720e206295eec20ff95 data\hexcasting\recipes\ancient_scroll_paper.json -071e5875b13b60aac33bc97e408d2ca710ac5d02 data\hexcasting\advancements\recipes\building_blocks\stonecutting\amethyst_tiles.json -9ea4fe5272ce2241d98f30359f55cfc1936c7b48 data\hexcasting\advancements\recipes\tools\staff\cherry.json +641d8c38b8109665314fccbebd9068ba10b04118 data\hexcasting\advancements\recipes\misc\dye_colorizer_gray.json +54335e0004423899ad37763a1d8456cc0a6e72a7 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\charged.json af9a260c24e0a65eea321f0dd9dd2fa7d648707f data\hexcasting\advancements\recipes\building_blocks\amethyst_dust_packing.json -5d6d73e16a36da5f9df6a7b8ac859181d401766d data\hexcasting\recipes\uuid_colorizer.json -5401828f85e709b5817ecc8464dc63e536a730dc data\hexcasting\recipes\staff\cherry.json +2b64261bd4aefdc55d35400f25835434f88856cf data\hexcasting\recipes\amethyst_tiles.json +b20be6eb5a8b60567871444e65d773ec9a67ece1 data\hexcasting\recipes\staff\crimson.json +fd2f25b0a71806c96af5a307fad76f66de6210a4 data\hexcasting\advancements\recipes\building_blocks\slate_block.json +5e98cec2084f0cfbb959c3ec39bd85a3369f443b data\hexcasting\advancements\recipes\tools\abacus.json +b10d590e918e35b16578a8b739a1c4e7e2202e16 data\hexcasting\advancements\recipes\misc\dye_colorizer_cyan.json +e536791d0c6fb48206e6e30d56879eaf0a9e4bd7 data\hexcasting\recipes\akashic_bookshelf.json +e11aeded7f5d3fdd224627c67661bbd993901703 data\hexcasting\recipes\edified_pressure_plate.json b16ff5314d457bc7e9e224e102d1e04ce3a62361 data\hexcasting\recipes\brainsweep\directrix_redstone.json -8c043c7f6a7911b67324e2fd42f0b3b19a792af3 data\hexcasting\recipes\ancient_scroll_paper_lantern.json -c43fb770003c8d882fd9c1e7d1ecb5f196cba1ab data\hexcasting\recipes\cypher.json -6f2634e5588aede8e29157ecc859652d8a9f4065 data\hexcasting\advancements\recipes\misc\dye_colorizer_orange.json -2003fed3aa4eb622b6b07a9e65946fb40be14420 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_rightclick.json -b7084f131b0cdb9c2c698a3c5b3450d69e788d6e data\hexcasting\recipes\dye_colorizer_yellow.json -c2ef04b311251b4eb22320b2f5313c54533a9974 data\hexcasting\advancements\recipes\tools\staff\birch.json -12bd3d04c791ef16aad5e992f038d6726229a436 data\hexcasting\advancements\recipes\tools\artifact.json +f1bae034d27d218bf262a8c777b787d232489f16 data\hexcasting\recipes\lens.json +a8cab28cffdf495253a320094d202fccc5aeb113 data\hexcasting\advancements\recipes\decorations\ancient_scroll_paper_lantern.json +157ee5fba985bbd01a87f44578890dab5489a8e5 data\hexcasting\advancements\recipes\misc\dye_colorizer_green.json +494aa470790ae46baebbf24ee5b76f5885c1af1a data\hexcasting\recipes\ageing_scroll_paper_lantern.json +a1f9df0537c0ef33a1164cf94e8ff4b1094f889f data\hexcasting\advancements\recipes\tools\staff\warped.json +d6b7a9392320c11866b3f139f97977dc9f55bc47 data\hexcasting\recipes\scroll_small.json +1d1e73244fb3da633d8a5f84bad93c6022a94368 data\hexcasting\advancements\recipes\misc\pride_colorizer_demiboy.json +f64fa00d85a9abb24e89b0d2c9f818001371f5e6 data\hexcasting\recipes\slate_block.json +0864e8b86bdad0bf9ab2ddeb0cd5a182808b5a0a data\hexcasting\recipes\default_colorizer.json +5fab1b9c93304a53a4c305b511704458e4593444 data\hexcasting\recipes\pride_colorizer_demigirl.json +72447ac69a0d85f91064180d3c852040a9e33832 data\hexcasting\recipes\pride_colorizer_asexual.json +8c52917fc7041c483fb6dfe8d16c90f096f2beaf data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_amethyst.json +d47352426739a0fc500a385d820d767a307e1d16 data\hexcasting\advancements\recipes\misc\dye_colorizer_black.json +c03c81dc123294472e8bb6f836c319e96f8db4f5 data\hexcasting\advancements\recipes\building_blocks\edified_fence.json 233aeedc73173427e7b2287772a4f914f97b072c data\hexcasting\recipes\dye_colorizer_red.json -1093cccc6b1c45eb91f7c1680ef575a7bffb2744 data\hexcasting\advancements\recipes\building_blocks\edified_planks.json -55ea553a96e1d6a54385890f7c48fe7b2bed6871 data\hexcasting\advancements\recipes\tools\trinket.json -862f1a61a296a834df8a93dbd5a6cdfa2df15721 data\hexcasting\advancements\recipes\tools\staff\acacia.json -c1541738df1ee41c362ad3b9c3a9f0e181bd5c62 data\hexcasting\recipes\pride_colorizer_plural.json -61e53f02baefd31308e99407d56403dfc18e36e1 data\hexcasting\recipes\akashic_connector.json -6e2dc32f975d987b8dfd329507334f647bceadc0 data\hexcasting\advancements\recipes\tools\staff\mangrove.json -faaa9c39dbcdd131c5fbec9ac6a26d6dc5e72053 data\hexcasting\advancements\recipes\misc\dye_colorizer_light_gray.json -203b7035125390abb4ed77b3a4dca8f8f8f57bc5 data\hexcasting\recipes\dye_colorizer_light_gray.json +7d71eb93bbb0856167cf4521283e39f0048078ee data\hexcasting\advancements\recipes\redstone\edified_button.json bd63b845e02ee4b1b9abe168a196335ccbed1ca5 data\hexcasting\recipes\scroll_paper_lantern.json -fb852d8e4bcfa7b75f41a6ac7dc1e76b00d95fb1 data\hexcasting\advancements\recipes\misc\dye_colorizer_red.json -4e7d9780689ac1412f2d37107928a59c3e6bf711 data\hexcasting\recipes\brainsweep\impetus_look.json 14f3b217e150efbbff329d67aec96f818a1da99c data\hexcasting\recipes\dye_colorizer_purple.json +170af3c83a45f9550827cc48e4bb5a621d06d685 data\hexcasting\advancements\recipes\misc\pride_colorizer_transgender.json +d7de5d626fd799a2522af36f0c62c52fe490e6d2 data\hexcasting\recipes\edified_door.json +ee5db13cbb33d9c62bcb1eb645e2c4bea97ad44a data\hexcasting\advancements\recipes\building_blocks\amethyst_dust_unpacking.json +417695497a95436186c1a4ed842d7975d754f9eb data\hexcasting\recipes\stripped_edified_wood.json +aa7558ec1baf6070efbe448d886e20e964e33f96 data\hexcasting\advancements\recipes\brainsweep\brainsweep\quench_allay.json +06402fb37fe4bb05918d13dbfdb89f4c2b67f3ec data\hexcasting\advancements\recipes\tools\cypher.json +7e1a5a873d655e0efba80f22ae9b1de4f248e67a data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\shard.json +0aaf55492e850d2bb1ec2f9986406ca61fde4cfd data\hexcasting\recipes\dye_colorizer_lime.json +1e51cd4f527b3aea4d61d91829e47c191c9c05bb data\hexcasting\recipes\pride_colorizer_gay.json +4a803e049915fd3c7144155ae3a1b05a917ea290 data\hexcasting\recipes\pride_colorizer_pansexual.json +1a0d55e6824c078453c1d44e885a1c51ba707a41 data\hexcasting\recipes\dye_colorizer_white.json +ad647a2078099344ea7f9836a68e1bf8e8119277 data\hexcasting\advancements\recipes\misc\dye_colorizer_brown.json +63189af501442318a90c16d6951e51c0c5d6d4f3 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_purple.json +06ca609ba1a32f094cf6edbc989bc9ddaf9d342c data\hexcasting\advancements\recipes\misc\pride_colorizer_genderfluid.json +f77518b6993fe8e31de10af286c33ab72c0f9077 data\hexcasting\advancements\recipes\redstone\impetus\empty.json +c3f7b03fe184ed5e54a8ae06d130adf507b7683d data\hexcasting\recipes\staff\bamboo.json +4003f297be29810cebde4995fb2838c2c68a25ea data\hexcasting\recipes\pride_colorizer_lesbian.json +505eb9192df0b48867e58e09ce36b2259dc6d3e8 data\hexcasting\advancements\recipes\decorations\scroll.json +bc729ac7cf84d29a99cd34d50c152c0b9d20bd7a data\hexcasting\advancements\recipes\brainsweep\brainsweep\akashic_record.json +4680e9dafcf9b60b3485609519d66eefcfd539bc data\hexcasting\recipes\staff\dark_oak.json +0bd7c9f4a9bf29c1b63b2f9378f0a7e2f594b7b7 data\hexcasting\recipes\pride_colorizer_nonbinary.json +963d87d2738686e5398a178b8b369228ff067403 data\hexcasting\recipes\spellbook.json +e691130641b11c0a030a51c71dee0ba356f3b5bd data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_aventurine.json +faaa9c39dbcdd131c5fbec9ac6a26d6dc5e72053 data\hexcasting\advancements\recipes\misc\dye_colorizer_light_gray.json +f8ee073c1c03f1c11147e4801eeba1f86e5459ba data\hexcasting\recipes\dye_colorizer_blue.json +77369113dc54d1c64b9101861dd8a1930bf1c1c4 data\hexcasting\recipes\edified_wood.json +f81053a3269c1b371be3f8057bad4803056ee0f9 data\hexcasting\recipes\dye_colorizer_orange.json +a366ea3750adc0d336ab8f318c40baed3f9c3eb7 data\hexcasting\recipes\brainsweep\impetus_storedplayer.json +61fafd43af83bdca6720d0993ab71f40a8bebd40 data\hexcasting\advancements\recipes\redstone\akashic_connector.json 0b172aef920da7ba63fe152903ce005c1f5df5f1 data\hexcasting\recipes\staff\acacia.json +9269b17eaae3217422352354fc6006c9808b398c data\hexcasting\recipes\dye_colorizer_black.json +7c479398bbc7185a2c3efd568ad266d8109245bf data\hexcasting\advancements\recipes\redstone\edified_door.json +071e5875b13b60aac33bc97e408d2ca710ac5d02 data\hexcasting\advancements\recipes\building_blocks\stonecutting\amethyst_tiles.json +b29f9d9c14e60ded1148680e2e0ef405b5a3c845 data\hexcasting\advancements\recipes\misc\uuid_colorizer.json +8bea75fdc5e64c464dcf5f85166e767ff44e6dc2 data\hexcasting\advancements\recipes\misc\pride_colorizer_lesbian.json +17a1adf747b99848381ca8e7c5e2cd9dd96c014f data\hexcasting\advancements\recipes\misc\default_colorizer.json +664ce1a38c9b1c9ec21b7e078631e181fc0b2498 data\hexcasting\recipes\staff\edified.json +c6228d72ca800a7dd336e82bbb9b4f20f89de29d data\hexcasting\advancements\recipes\redstone\edified_pressure_plate.json +72f70637aea1c11683e9ee91d83c2807c6ec33a9 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_trapdoor.json +b6e762c198b9632defd7f8b11287702abecd681d data\hexcasting\recipes\staff\mindsplice.json +2eacf53894ae97712dc3874777e29dce0a0e5540 data\hexcasting\advancements\recipes\misc\pride_colorizer_asexual.json +c1846dd794f5cc5814b8a839291e82512a02ba12 data\hexcasting\advancements\recipes\misc\pride_colorizer_plural.json +71f821f5d24b0bf9ecd860d51e055628fe4af50c data\hexcasting\recipes\edified_panel.json +61e53f02baefd31308e99407d56403dfc18e36e1 data\hexcasting\recipes\akashic_connector.json +8c043c7f6a7911b67324e2fd42f0b3b19a792af3 data\hexcasting\recipes\ancient_scroll_paper_lantern.json +c2a0a489967db4064dfbe1ee6367e132665f3c00 data\hexcasting\recipes\edified_slab.json +004e0694b3bf53140be7df89a4defc255b800619 data\hexcasting\advancements\recipes\tools\focus_rotated.json +8f8773a541bc6a4a6c55a23f4f98b5da4f61a031 data\hexcasting\recipes\scroll_paper.json +55602e415fc1b797439b674050887e9e388558c9 data\hexcasting\advancements\recipes\building_blocks\edified_panel.json +68ab70e0b4e432a3492767c5597ecd836f106714 data\hexcasting\advancements\recipes\tools\staff\mindsplice.json +1b092acfc3115702c74e141492e649d58512f259 data\hexcasting\recipes\staff\oak.json +aa1caae7eba6aede0f179619488e2253b3b723dd data\hexcasting\recipes\focus_rotated.json +2cea013887734cbc4971bcd57e7e4f6a2b25c8e1 data\hexcasting\advancements\recipes\tools\focus.json +5f216dbb7b89fd837e2dd73e3ed41c8d412de234 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\dust.json +b1f8375aaf0d66035dee720ea59605f69fc0a154 data\hexcasting\recipes\edified_fence.json +ae88fcdecbfbdd0a0fe778467421a3b32d7ed735 data\create\recipes\crushing\amethyst_cluster.json +0ead307e47242ba140584f6bd20088a1fa7c2909 data\hexcasting\recipes\directrix\empty.json +946cde51bbfc2af344b078f6b39389ffc44462f4 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_storedplayer.json +f80dbf59957be175fbcd63224005e09c4cd1a122 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_citrine.json +a72a0fcc0f3a81d31b30a7a626aef537796ca73b data\hexcasting\advancements\recipes\tools\staff\quenched.json +a85cfbd7988f5df0b18d160591605aea8e6808d2 data\hexcasting\recipes\trinket.json +24c244e53c7e47b85845d2ee36b1665410cf495a data\hexcasting\recipes\edified_planks.json +fd7c8325fcaa6a718e90c09251b447fb365523d4 data\hexcasting\recipes\pride_colorizer_demiboy.json +2a2f60fb0f63ee278b74c418acf04575304c521f data\hexcasting\advancements\recipes\tools\jeweler_hammer.json +f347f4ce869207e62a7887df1252505a3432e12a data\hexcasting\recipes\pride_colorizer_genderfluid.json +996c8361766377a70e0b5a5caff3076fc6031b0a data\hexcasting\recipes\impetus\empty.json +b90ad4cbffc2e3c01671dfe8bda5e42d9b8a685c data\hexcasting\advancements\recipes\tools\staff\crimson.json +a9111ff52513200af47b79cf98b2e545699497bb data\hexcasting\advancements\recipes\building_blocks\amethyst_tiles.json +4d5e4a6374731b2d0a90c70a5d489703fd966977 data\hexcasting\advancements\recipes\misc\dye_colorizer_lime.json diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json index d253e4543b..59338fc079 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json +++ b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json @@ -8,7 +8,7 @@ "entityIn": { "type": "villager", "minLevel": 2, - "profession": "toolsmith" + "profession": "fletcher" }, "result": { "name": "hexcasting:impetus/look", diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index 960ab42054..7622e7cf8f 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -174,6 +174,9 @@ public static final class Server implements HexConfig.ServerConfigAccess, Config private List circleActionDenyList = List.of(); @ConfigEntry.Gui.Tooltip private boolean villagersOffendedByMindMurder = DEFAULT_VILLAGERS_DISLIKE_MIND_MURDER; + @ConfigEntry.Gui.Tooltip + private boolean doesTrueNameHaveAmbit = DEFAULT_TRUE_NAME_HAS_AMBIT; + @ConfigEntry.Gui.Tooltip private List tpDimDenylist = DEFAULT_DIM_TP_DENYLIST; @@ -250,6 +253,11 @@ public boolean canTeleportInThisDimension(ResourceKey dimension) { return noneMatch(tpDimDenylist, dimension.location()); } + @Override + public boolean trueNameHasAmbit() { + return doesTrueNameHaveAmbit; + } + /** * Returns -1 if none is found */ diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java index 3cee0269b5..e7747fac3f 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java @@ -45,7 +45,7 @@ public void readFromNbt(CompoundTag tag) { var timeLeft = tag.getInt(TAG_TIME_LEFT); var dim = ResourceKey.create(Registries.DIMENSION, new ResourceLocation(tag.getString(TAG_DIMENSION))); - var origin = HexUtils.vecFromNBT(tag.getLongArray(TAG_ORIGIN)); + var origin = HexUtils.vecFromNBT(tag.getCompound(TAG_ORIGIN)); var radius = tag.getDouble(TAG_RADIUS); this.flight = new FlightAbility(timeLeft, dim, origin, radius); } diff --git a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/akashic_logs.json b/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/akashic_logs.json deleted file mode 100644 index bb904a3e97..0000000000 --- a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/akashic_logs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "hexcasting:item/akashic_log" -} diff --git a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/akashic_planks.json b/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/akashic_planks.json deleted file mode 100644 index 5712f2bb67..0000000000 --- a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/akashic_planks.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "hexcasting:item/akashic_planks" -} diff --git a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/phial_base.json b/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/phial_base.json deleted file mode 100644 index f69406e5d2..0000000000 --- a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/phial_base.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "hexcasting:item/phial_medium_0" -} diff --git a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/wands.json b/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/wands.json deleted file mode 100644 index ebf8b9c58b..0000000000 --- a/Fabric/src/main/resources/assets/emi/models/item/tag/hexcasting/wands.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "hexcasting:item/wand_akashic" -} diff --git a/Fabric/src/main/resources/assets/emi/recipe/defaults/hexcasting.json b/Fabric/src/main/resources/assets/emi/recipe/defaults/hexcasting.json index 775a062951..904a4f68d4 100644 --- a/Fabric/src/main/resources/assets/emi/recipe/defaults/hexcasting.json +++ b/Fabric/src/main/resources/assets/emi/recipe/defaults/hexcasting.json @@ -38,8 +38,8 @@ "hexcasting:dye_colorizer_red", "hexcasting:dye_colorizer_white", "hexcasting:dye_colorizer_yellow", - "hexcasting:empty_directrix", - "hexcasting:empty_impetus", + "hexcasting:directrix/empty", + "hexcasting:impetus/empty", "hexcasting:focus", "hexcasting:jeweler_hammer", "hexcasting:lens", diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index dffa8b4a6b..4468af2380 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -60,7 +60,8 @@ "patchouli": ">=1.20.1-80" }, "suggests": { - "pehkui": "3.7.6" + "pehkui": ">=3.7.6", + "modmenu": ">=7.0.1" }, "custom": { "cardinal-components": [ diff --git a/Forge/build.gradle b/Forge/build.gradle index 9cd4e8e1d3..c1942d6013 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -8,7 +8,7 @@ buildscript { mavenCentral() } dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '6.0.+', changing: true classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' } } @@ -69,8 +69,8 @@ dependencies { annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' - compileOnly fg.deobf("${modID}:paucal-forge-$minecraftVersion:$paucalVersion") - runtimeOnly fg.deobf("${modID}:paucal-forge-$minecraftVersion:$paucalVersion") + compileOnly fg.deobf("at.petra-k.paucal:paucal-forge-$minecraftVersion:$paucalVersion") + runtimeOnly fg.deobf("at.petra-k.paucal:paucal-forge-$minecraftVersion:$paucalVersion") compileOnly fg.deobf("vazkii.patchouli:Patchouli:$minecraftVersion-$patchouliVersion-FORGE-SNAPSHOT") runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:$minecraftVersion-$patchouliVersion-FORGE-SNAPSHOT") @@ -143,10 +143,6 @@ minecraft { property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" property 'hexcasting.xplat_datagen', 'true' - // disable the System.exit(0) at the end of the ForgeGradle datagen so Gradle stops thinking it failed - // see: https://github.com/MinecraftForge/ForgeGradle/pull/686 - forceExit false - mods { create(modID) { source sourceSets.main @@ -164,7 +160,6 @@ minecraft { property 'mixin.env.remapRefMap', 'true' property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" property 'hexcasting.forge_datagen', 'true' - forceExit false mods { create(modID) { source sourceSets.main @@ -182,34 +177,11 @@ mixin { config "hexcasting_forge.mixins.json" } -// https://discord.com/channels/313125603924639766/733055378371117127/980968358658838540 -// > It wint generate a refmap if there are jo changes source files -// > Since the last build -// > Gradle task execution avoidance breaks it that way -// > At one point i got it to work reliably bu forcing some specific task to always run i just don't remember the syntax and which task it was -// > It might have been compileJava -//task invalidateJavaForRefmap { -// doFirst { -// compileJava { -// if (!didWork) { -// outputs.upToDateWhen { false } -// } -// } -// compileKotlin { -// if (!didWork) { -// outputs.upToDateWhen { false } -// } -// } -// } -//} - compileJava { source(project(":Common").sourceSets.main.allSource) -// shouldRunAfter(invalidateJavaForRefmap) } compileKotlin { source(project(":Common").sourceSets.main.kotlin) -// shouldRunAfter(invalidateJavaForRefmap) } compileTestKotlin { source(project(":Common").sourceSets.main.kotlin) @@ -221,10 +193,6 @@ sourceSets { test.kotlin.srcDirs += 'src/main/java' } -jar { -// dependsOn(invalidateJavaForRefmap) -} - processResources { from project(":Common").sourceSets.main.resources inputs.property "version", project.version diff --git a/Forge/libs/paucal-forge-1.20.1-0.6.0.jar b/Forge/libs/paucal-forge-1.20.1-0.6.0.jar deleted file mode 100644 index 63b42b4127..0000000000 Binary files a/Forge/libs/paucal-forge-1.20.1-0.6.0.jar and /dev/null differ diff --git a/Forge/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/Forge/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index a25db98517..4750343789 100644 --- a/Forge/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/Forge/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,4 +1,4 @@ -// 1.20.1 2023-12-24T17:58:56.8955301 Recipes +// 1.20.1 2024-06-13T19:17:41.8621305 Recipes 29056d8bbc023668564ee81f4eb8b2a11411cf4a data/create/recipes/crushing/amethyst_block.json 5bb0b70967a422bfd88c01fa1af64e9b98781fd1 data/create/recipes/crushing/amethyst_cluster.json bc729ac7cf84d29a99cd34d50c152c0b9d20bd7a data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json @@ -117,7 +117,7 @@ c2a1ba123e94a114489b31063b17f7a0ec71678a data/hexcasting/recipes/ancient_scroll_ e0609202271e402d8ae58e4f8eaf11dcdda10a9e data/hexcasting/recipes/brainsweep/akashic_record.json 5a90084c03d6e8424872870c8b65f4771b447f03 data/hexcasting/recipes/brainsweep/budding_amethyst.json b16ff5314d457bc7e9e224e102d1e04ce3a62361 data/hexcasting/recipes/brainsweep/directrix_redstone.json -4e7d9780689ac1412f2d37107928a59c3e6bf711 data/hexcasting/recipes/brainsweep/impetus_look.json +92bdf87687d8823036fae6bd01782c653831286b data/hexcasting/recipes/brainsweep/impetus_look.json ed5c690324e3d9b55599f00f078ae225072a2e7f data/hexcasting/recipes/brainsweep/impetus_rightclick.json a366ea3750adc0d336ab8f318c40baed3f9c3eb7 data/hexcasting/recipes/brainsweep/impetus_storedplayer.json 2aa7d74e29a7c5ee4f1b8835cf7c6109eed81d77 data/hexcasting/recipes/brainsweep/quench_allay.json diff --git a/Forge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json b/Forge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json index d253e4543b..59338fc079 100644 --- a/Forge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json +++ b/Forge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json @@ -8,7 +8,7 @@ "entityIn": { "type": "villager", "minLevel": 2, - "profession": "toolsmith" + "profession": "fletcher" }, "result": { "name": "hexcasting:impetus/look", diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index c9d904ff87..507d1fece7 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -134,6 +134,8 @@ public static class Server implements HexConfig.ServerConfigAccess { private static ForgeConfigSpec.ConfigValue> tpDimDenyList; + private static ForgeConfigSpec.BooleanValue doesTrueNameHaveAmbit; + private static ForgeConfigSpec.ConfigValue> fewScrollTables; private static ForgeConfigSpec.ConfigValue> someScrollTables; private static ForgeConfigSpec.ConfigValue> manyScrollTables; @@ -170,6 +172,10 @@ public Server(ForgeConfigSpec.Builder builder) { tpDimDenyList = builder.comment("Resource locations of dimensions you can't Blink or Greater Teleport in.") .defineList("tpDimDenyList", DEFAULT_DIM_TP_DENYLIST, Server::isValidReslocArg); + + doesTrueNameHaveAmbit = builder.comment( + "when false makes player reference iotas behave as normal entity reference iotas") + .define("doesTrueNameHaveAmbit", DEFAULT_TRUE_NAME_HAS_AMBIT); } @Override @@ -207,6 +213,11 @@ public boolean canTeleportInThisDimension(ResourceKey dimension) { return noneMatch(tpDimDenyList.get(), dimension.location()); } + @Override + public boolean trueNameHasAmbit() { + return doesTrueNameHaveAmbit.get(); + } + private static boolean isValidReslocArg(Object o) { return o instanceof String s && ResourceLocation.isValidResourceLocation(s); } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java b/Forge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java index 5263011a81..bdba8678ca 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java @@ -19,6 +19,6 @@ public ClientCastingStack get() { public static void tickClientPlayer(TickEvent.PlayerTickEvent evt) { if (evt.side == LogicalSide.CLIENT && !evt.player.isDeadOrDying()) evt.player.getCapability(HexCapabilities.CLIENT_CASTING_STACK).resolve() - .get().get().tick(); + .ifPresent(CastingStack -> CastingStack.get().tick()); } } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java b/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java index 1e3a9bcb6a..c5ed351ea7 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.forge.datagen; import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.common.lib.HexDamageTypes; import at.petrak.hexcasting.datagen.HexAdvancements; import at.petrak.hexcasting.datagen.HexLootTables; import at.petrak.hexcasting.datagen.IXplatIngredients; @@ -8,12 +9,15 @@ import at.petrak.hexcasting.datagen.recipe.builders.FarmersDelightToolIngredient; import at.petrak.hexcasting.datagen.tag.HexActionTagProvider; import at.petrak.hexcasting.datagen.tag.HexBlockTagProvider; +import at.petrak.hexcasting.datagen.tag.HexDamageTypeTagProvider; import at.petrak.hexcasting.datagen.tag.HexItemTagProvider; import at.petrak.hexcasting.forge.datagen.xplat.HexBlockStatesAndModels; import at.petrak.hexcasting.forge.datagen.xplat.HexItemModels; import at.petrak.hexcasting.forge.recipe.ForgeModConditionalIngredient; import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.google.gson.JsonObject; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; import net.minecraft.data.DataGenerator; import net.minecraft.data.advancements.AdvancementProvider; import net.minecraft.data.loot.LootTableProvider; @@ -26,6 +30,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraftforge.common.Tags; import net.minecraftforge.common.ToolActions; +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -53,14 +58,28 @@ private static void configureXplatDatagen(GatherDataEvent ev) { var output = gen.getPackOutput(); var lookup = ev.getLookupProvider(); ExistingFileHelper efh = ev.getExistingFileHelper(); + + // https://docs.minecraftforge.net/en/latest/datagen/server/datapackregistries/ + // https://github.com/MinecraftForge/MinecraftForge/pull/9580 + var datapackProvider = new DatapackBuiltinEntriesProvider( + output, + lookup, + new RegistrySetBuilder() + .add(Registries.DAMAGE_TYPE, HexDamageTypes::bootstrap), + Set.of(HexAPI.MOD_ID) + ); + var datapackLookup = datapackProvider.getRegistryProvider(); + gen.addProvider(ev.includeClient(), new HexItemModels(output, efh)); gen.addProvider(ev.includeClient(), new HexBlockStatesAndModels(output, efh)); gen.addProvider(ev.includeServer(), new AdvancementProvider( output, lookup, List.of(new HexAdvancements()) )); + gen.addProvider(ev.includeServer(), datapackProvider); + gen.addProvider(ev.includeServer(), new HexDamageTypeTagProvider(output, datapackLookup)); } - @SuppressWarnings("DataFlowIssue") + @SuppressWarnings({"DataFlowIssue", "UnreachableCode"}) private static void configureForgeDatagen(GatherDataEvent ev) { HexAPI.LOGGER.info("Starting Forge-specific datagen"); @@ -73,6 +92,7 @@ private static void configureForgeDatagen(GatherDataEvent ev) { )); gen.addProvider(ev.includeServer(), new HexplatRecipes(output, INGREDIENTS, ForgeHexConditionsBuilder::new)); + // TODO: refactor? var xtags = IXplatAbstractions.INSTANCE.tags(); var blockTagProvider = new HexBlockTagProvider(output, lookup, xtags); ((TagsProviderEFHSetter) blockTagProvider).setEFH(efh); diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeMixinDatagenModLoader.java b/Forge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeMixinDatagenModLoader.java deleted file mode 100644 index b3cfea1a09..0000000000 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeMixinDatagenModLoader.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.petrak.hexcasting.forge.mixin; - -import net.minecraft.Util; -import net.minecraft.core.HolderLookup; -import net.minecraft.data.registries.VanillaRegistries; -import net.minecraft.server.Bootstrap; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.data.loading.DatagenModLoader; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.ModWorkManager; -import org.apache.logging.log4j.Logger; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -import java.io.File; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Set; -import java.util.concurrent.CompletableFuture; - -@Mixin(DatagenModLoader.class) -public abstract class ForgeMixinDatagenModLoader { - @Shadow(remap = false) @Final - private static Logger LOGGER; - - @Shadow(remap = false) - private static GatherDataEvent.DataGeneratorConfig dataGeneratorConfig; - @Shadow(remap = false) - private static ExistingFileHelper existingFileHelper; - @Shadow(remap = false) - private static boolean runningDataGen; - - /** - * Make it so non-vanilla registries can actually be tagged. - */ - @Overwrite(remap = false) - public static void begin(final Set mods, final Path path, final Collection inputs, Collection existingPacks, - Set existingMods, final boolean serverGenerators, final boolean clientGenerators, final boolean devToolGenerators, final boolean reportsGenerator, - final boolean structureValidator, final boolean flat, final String assetIndex, final File assetsDir) { - if (mods.contains("minecraft") && mods.size() == 1) - return; - LOGGER.info("Initializing Data Gatherer for mods {}", mods); - runningDataGen = true; - Bootstrap.bootStrap(); - ModLoader.get().gatherAndInitializeMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); - if (!mods.contains("forge")) { - // If we aren't generating data for forge, automatically add forge as an existing so mods can access forge's data - existingMods.add("forge"); - } - CompletableFuture lookupProvider = CompletableFuture.supplyAsync(VanillaRegistries::createLookup, Util.backgroundExecutor()); - dataGeneratorConfig = new GatherDataEvent.DataGeneratorConfig(mods, path, inputs, lookupProvider, serverGenerators, - clientGenerators, devToolGenerators, reportsGenerator, structureValidator, flat); - existingFileHelper = new ExistingFileHelper(existingPacks, existingMods, structureValidator, assetIndex, assetsDir); - ModLoader.get().runEventGenerator(mc -> new GatherDataEvent(mc, dataGeneratorConfig.makeGenerator(p -> dataGeneratorConfig.isFlat() ? p : p.resolve(mc.getModId()), - dataGeneratorConfig.getMods().contains(mc.getModId())), dataGeneratorConfig, existingFileHelper)); - dataGeneratorConfig.runAll(); - } -} diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java b/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java index 91070dd417..9d9188599d 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java @@ -243,7 +243,7 @@ public FlightAbility getFlight(ServerPlayer player) { boolean allowed = tag.getBoolean(TAG_FLIGHT_ALLOWED); if (allowed) { var timeLeft = tag.getInt(TAG_FLIGHT_TIME); - var origin = HexUtils.vecFromNBT(tag.getLongArray(TAG_FLIGHT_ORIGIN)); + var origin = HexUtils.vecFromNBT(tag.getCompound(TAG_FLIGHT_ORIGIN)); var radius = tag.getDouble(TAG_FLIGHT_RADIUS); var dimension = ResourceKey.create(Registries.DIMENSION, new ResourceLocation(tag.getString(TAG_FLIGHT_DIMENSION))); diff --git a/Forge/src/main/resources/META-INF/mods.toml b/Forge/src/main/resources/META-INF/mods.toml index 9142237d60..252e3f9273 100644 --- a/Forge/src/main/resources/META-INF/mods.toml +++ b/Forge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "kotlinforforge" -loaderVersion = "[3,)" +loaderVersion = "[4,)" license = "MIT" issueTrackerURL = "https://github.com/gamma-delta/HexMod/issues" @@ -41,3 +41,10 @@ mandatory = true versionRange = "[1.20.1-80,)" ordering = "NONE" side = "BOTH" + +[[dependencies.hexcasting]] +modId = "caelus" +mandatory = true +versionRange = "[3.1.0+1.20,)" +ordering = "NONE" +side = "BOTH" diff --git a/Forge/src/main/resources/hexcasting_forge.mixins.json b/Forge/src/main/resources/hexcasting_forge.mixins.json index fec29c0762..3a50c75493 100644 --- a/Forge/src/main/resources/hexcasting_forge.mixins.json +++ b/Forge/src/main/resources/hexcasting_forge.mixins.json @@ -7,7 +7,6 @@ "mixins": [ "ForgeAccessorBuiltInRegistries", "ForgeMixinCursedRecipeSerializerBase", - "ForgeMixinDatagenModLoader", "ForgeMixinTagsProvider" ], "client": [ diff --git a/Jenkinsfile b/Jenkinsfile index 5c470c0fd3..a2da4ee85f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -42,8 +42,9 @@ pipeline { } stage('Publish') { when { - anyOf { + allOf { branch 'main' + not { changeRequest() } } } stages { diff --git a/README.md b/README.md index 366505637a..7097ca8376 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,10 @@ On Fabric, it requires: ## The Branches -We are currently developing Hexcasting v1.x for 1.19.2, on the `main` branch. +We are currently developing Hexcasting v0.11.x for 1.20.1, on the `main` branch. + +The 0.10.x versions, for 1.19, are in long-term support. We probably won't be adding any new features, but we will try +to fix bugs. Those are on the `1.19` branch. The 0.9.x versions, for 1.18.2, are in long-term support. We probably won't be adding any new features, but we will try to fix bugs. Those are on the `1.18` branch. diff --git a/build.gradle b/build.gradle index 4c93acbdcc..091f594d38 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ plugins { // This needs to be in the root // https://github.com/FabricMC/fabric-loom/issues/612#issuecomment-1198444120 // Also it looks like property lookups don't work this early - id 'fabric-loom' version '1.0-SNAPSHOT' apply false + id 'fabric-loom' version '1.6-SNAPSHOT' apply false id("at.petra-k.PKPlugin") version "0.1.0-pre-87" id("at.petra-k.PKSubprojPlugin") version "0.1.0-pre-87" apply false @@ -74,7 +74,16 @@ subprojects { } } -allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xmaxerrs" << "1000" } } } +allprojects { + gradle.projectsEvaluated { + tasks.withType(JavaCompile) { + options.compilerArgs << "-Xmaxerrs" << "1000" + } + } + + // disable most javadoc warnings + javadoc.options.addStringOption('Xdoclint:none', '-quiet') +} compileKotlin { kotlinOptions { diff --git a/doc/LICENSE.txt b/doc/LICENSE.txt new file mode 100644 index 0000000000..81a0f86dd0 --- /dev/null +++ b/doc/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 object-Object, Alwinfy, gamma-delta + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000000..7bd2c42f4e --- /dev/null +++ b/doc/README.md @@ -0,0 +1,55 @@ +# hexdoc-hexcasting + +Python web book docgen and [hexdoc](https://pypi.org/project/hexdoc) plugin for Hex Casting. + +## Version scheme + +We use [hatch-gradle-version](https://pypi.org/project/hatch-gradle-version) to generate the version number based on whichever mod version the docgen was built with. + +The version is in this format: `mod-version.python-version.mod-pre.python-dev.python-post` + +For example: +* Mod version: `0.11.1-7` +* Python package version: `1.0.dev0` +* Full version: `0.11.1.1.0rc7.dev0` + +## Setup + +```sh +python3.11 -m venv venv + +.\venv\Scripts\activate # Windows +. venv/bin/activate.fish # fish +source venv/bin/activate # everything else + +# run from the repo root, not doc/ +pip install -e .[dev] +``` + +## Usage + +For local testing, create a file called `.env` in the repo root following this template: +```sh +GITHUB_REPOSITORY=gamma-delta/HexMod +GITHUB_SHA=main +GITHUB_PAGES_URL=https://gamma-delta.github.io/HexMod +``` + +Useful commands: +```sh +# show help +hexdoc -h + +# render and serve the web book in watch mode +nodemon --config doc/nodemon.json + +# render and serve the web book +hexdoc serve + +# build and merge the web book +hexdoc build +hexdoc merge + +# start the Python interpreter with some extra local variables +hexdoc repl +``` diff --git a/doc/collate_data.py b/doc/collate_data.py deleted file mode 100755 index 6fa7837bf5..0000000000 --- a/doc/collate_data.py +++ /dev/null @@ -1,598 +0,0 @@ -#!/usr/bin/env python3 -from sys import argv, stdout -from collections import namedtuple -from fnmatch import fnmatch -from html import escape -import json # codec -import re # parsing -import os # listdir - -# TO USE: put in Hexcasting root dir, collate_data.py src/main/resources hexcasting thehexbook out.html - -# extra info :( -lang = "en_us" -repo_names = { - "hexcasting": "https://raw.githubusercontent.com/gamma-delta/HexMod/main/Common/src/main/resources", -} -extra_i18n = { - "item.minecraft.amethyst_shard": "Amethyst Shard", - "item.minecraft.budding_amethyst": "Budding Amethyst", - "block.hexcasting.slate": "Blank Slate", -} - -default_macros = { - "$(obf)": "$(k)", - "$(bold)": "$(l)", - "$(strike)": "$(m)", - "$(italic)": "$(o)", - "$(italics)": "$(o)", - "$(list": "$(li", - "$(reset)": "$()", - "$(clear)": "$()", - "$(2br)": "$(br2)", - "$(p)": "$(br2)", - "/$": "$()", - "
": "$(br)", - "$(nocolor)": "$(0)", - "$(item)": "$(#b0b)", - "$(thing)": "$(#490)", -} - -colors = { - "0": None, - "1": "00a", - "2": "0a0", - "3": "0aa", - "4": "a00", - "5": "a0a", - "6": "fa0", - "7": "aaa", - "8": "555", - "9": "55f", - "a": "5f5", - "b": "5ff", - "c": "f55", - "d": "f5f", - "e": "ff5", - "f": "fff", -} -types = { - "k": "obf", - "l": "bold", - "m": "strikethrough", - "n": "underline", - "o": "italic", -} - -keys = { - "use": "Right Click", - "sneak": "Left Shift", - "jump": "Space", -} - -bind1 = (lambda: None).__get__(0).__class__ - -def slurp(filename): - with open(filename, "r") as fh: - return json.load(fh) - -FormatTree = namedtuple("FormatTree", ["style", "children"]) -Style = namedtuple("Style", ["type", "value"]) - -def parse_style(sty): - if sty == "br": - return "\n", None - if sty == "br2": - return "", Style("para", {}) - if sty == "li": - return "", Style("para", {"clazz": "fake-li"}) - if sty[:2] == "k:": - return keys[sty[2:]], None - if sty[:2] == "l:": - return "", Style("link", sty[2:]) - if sty == "/l": - return "", Style("link", None) - if sty == "playername": - return "[Playername]", None - if sty[:2] == "t:": - return "", Style("tooltip", sty[2:]) - if sty == "/t": - return "", Style("tooltip", None) - if sty[:2] == "c:": - return "", Style("cmd_click", sty[2:]) - if sty == "/c": - return "", Style("cmd_click", None) - if sty == "r" or not sty: - return "", Style("base", None) - if sty in types: - return "", Style(types[sty], True) - if sty in colors: - return "", Style("color", colors[sty]) - if sty.startswith("#") and len(sty) in [4, 7]: - return "", Style("color", sty[1:]) - # TODO more style parse - raise ValueError("Unknown style: " + sty) - -def localize(i18n, string, default=None): - return (i18n.get(string, default if default else string) if i18n else string).replace("%%", "%") - -format_re = re.compile(r"\$\(([^)]*)\)") -def format_string(root_data, string): - # resolve lang - string = localize(root_data["i18n"], string) - # resolve macros - old_string = None - while old_string != string: - old_string = string - for macro, replace in root_data["macros"].items(): - string = string.replace(macro, replace) - else: break - - # lex out parsed styles - text_nodes = [] - styles = [] - last_end = 0 - extra_text = "" - for mobj in re.finditer(format_re, string): - bonus_text, sty = parse_style(mobj.group(1)) - text = string[last_end:mobj.start()] + bonus_text - if sty: - styles.append(sty) - text_nodes.append(extra_text + text) - extra_text = "" - else: - extra_text += text - last_end = mobj.end() - text_nodes.append(extra_text + string[last_end:]) - first_node, *text_nodes = text_nodes - - # parse - style_stack = [FormatTree(Style("base", True), []), FormatTree(Style("para", {}), [first_node])] - for style, text in zip(styles, text_nodes): - tmp_stylestack = [] - if style.type == "base": - while style_stack[-1].style.type != "para": - last_node = style_stack.pop() - style_stack[-1].children.append(last_node) - elif any(tree.style.type == style.type for tree in style_stack): - while len(style_stack) >= 2: - last_node = style_stack.pop() - style_stack[-1].children.append(last_node) - if last_node.style.type == style.type: - break - tmp_stylestack.append(last_node.style) - for sty in tmp_stylestack: - style_stack.append(FormatTree(sty, [])) - if style.value is None: - if text: style_stack[-1].children.append(text) - else: - style_stack.append(FormatTree(style, [text] if text else [])) - while len(style_stack) >= 2: - last_node = style_stack.pop() - style_stack[-1].children.append(last_node) - - return style_stack[0] - -test_root = {"i18n": {}, "macros": default_macros, "resource_dir": "Common/src/main/resources", "modid": "hexcasting"} -test_str = "Write the given iota to my $(l:patterns/readwrite#hexcasting:write/local)$(#490)local$().$(br)The $(l:patterns/readwrite#hexcasting:write/local)$(#490)local$() is a lot like a $(l:items/focus)$(#b0b)Focus$(). It's cleared when I stop casting a Hex, starts with $(l:casting/influences)$(#490)Null$() in it, and is preserved between casts of $(l:patterns/meta#hexcasting:for_each)$(#fc77be)Thoth's Gambit$(). " - -def localize_pattern(root_data, op_id): - return localize(root_data["i18n"], "hexcasting.action.book." + op_id, - localize(root_data["i18n"], "hexcasting.action." + op_id)) - - -def do_localize(root_data, obj, *names): - for name in names: - if name in obj: - obj[name] = localize(root_data["i18n"], obj[name]) - -def do_format(root_data, obj, *names): - for name in names: - if name in obj: - obj[name] = format_string(root_data, obj[name]) - -def identity(x): return x - -pattern_pat = re.compile(r'make\(\s*"([a-zA-Z0-9_\/]+)",\s*(?:new )?ActionRegistryEntry\(\s*HexPattern\.fromAngles\(\s*"([aqwed]+)",\s*HexDir.(\w+)\),') -pattern_stubs = [(None, "at/petrak/hexcasting/common/lib/hex/HexActions.java"), ("Fabric", "at/petrak/hexcasting/fabric/FabricHexInitializer.kt")] -great_world_stubs = [("Fabric", "data/hexcasting/tags/action/per_world_pattern.json")] -def fetch_patterns(root_data): - registry = {} - great_names = set() - for loader, stub in great_world_stubs: - filename = f"{root_data['resource_dir'].replace('/main/', '/generated/')}/{stub}" - if loader: filename = filename.replace("Common", loader) - tag = slurp(filename) - for val in tag["values"]: - great_names.add(val.replace("hexcasting:", "")) - for loader, stub in pattern_stubs: - filename = f"{root_data['resource_dir']}/../java/{stub}" - if loader: filename = filename.replace("Common", loader) - with open(filename, "r") as fh: - pattern_data = fh.read() - for mobj in re.finditer(pattern_pat, pattern_data): - name, string, start_angle = mobj.groups() - registry[root_data["modid"] + ":" + name] = (string, start_angle, name in great_names) - return registry - -def resolve_pattern(root_data, page): - if "pattern_reg" not in root_data: - root_data["pattern_reg"] = fetch_patterns(root_data) - page["op"] = [root_data["pattern_reg"][page["op_id"]]] - page["name"] = localize_pattern(root_data, page["op_id"]) - -def fixup_pattern(do_sig, root_data, page): - patterns = page["patterns"] - if "op_id" in page: - page["header"] = localize_pattern(root_data, page["op_id"]) - if not isinstance(patterns, list): patterns = [patterns] - if do_sig: - inp = page.get("input", None) or "" - oup = page.get("output", None) or "" - pipe = f"{inp} \u2192 {oup}".strip() - suffix = f" ({pipe})" if inp or oup else "" - page["header"] += suffix - page["op"] = [(p["signature"], p["startdir"], False) for p in patterns] - -def fetch_recipe(root_data, recipe): - modid, recipeid = recipe.split(":") - gen_resource_dir = root_data["resource_dir"].replace("/main/", "/generated/").replace("Common/", "Forge/") # TODO hack - recipe_path = f"{gen_resource_dir}/data/{modid}/recipes/{recipeid}.json" - return slurp(recipe_path) -def fetch_recipe_result(root_data, recipe): - return fetch_recipe(root_data, recipe)["result"]["item"] -def fetch_bswp_recipe_result(root_data, recipe): - return fetch_recipe(root_data, recipe)["result"]["name"] - -def localize_item(root_data, item): - # TODO hack - item = re.sub("{.*", "", item.replace(":", ".")) - block = "block." + item - block_l = localize(root_data["i18n"], block) - if block_l != block: return block_l - return localize(root_data["i18n"], "item." + item) - -page_types = { - "hexcasting:pattern": resolve_pattern, - "hexcasting:manual_pattern": bind1(fixup_pattern, True), - "hexcasting:manual_pattern_nosig": bind1(fixup_pattern, False), - "hexcasting:brainsweep": lambda rd, page: page.__setitem__("output_name", localize_item(rd, fetch_bswp_recipe_result(rd, page["recipe"]))), - "patchouli:link": lambda rd, page: do_localize(rd, page, "link_text"), - "patchouli:crafting": lambda rd, page: page.__setitem__("item_name", [localize_item(rd, fetch_recipe_result(rd, page[ty])) for ty in ("recipe", "recipe2") if ty in page]), - "hexcasting:crafting_multi": lambda rd, page: page.__setitem__("item_name", [localize_item(rd, fetch_recipe_result(rd, recipe)) for recipe in page["recipes"]]), - "patchouli:spotlight": lambda rd, page: page.__setitem__("item_name", localize_item(rd, page["item"])) -} - -def walk_dir(root_dir, prefix): - search_dir = root_dir + '/' + prefix - for fh in os.scandir(search_dir): - if fh.is_dir(): - yield from walk_dir(root_dir, prefix + fh.name + '/') - elif fh.name.endswith(".json"): - yield prefix + fh.name - -def parse_entry(root_data, entry_path, ent_name): - data = slurp(f"{entry_path}") - do_localize(root_data, data, "name") - for i, page in enumerate(data["pages"]): - if isinstance(page, str): - page = {"type": "patchouli:text", "text": page} - data["pages"][i] = page - - do_localize(root_data, page, "title", "header") - do_format(root_data, page, "text") - if page["type"] in page_types: - page_types[page["type"]](root_data, page) - data["id"] = ent_name - - return data - -def parse_category(root_data, base_dir, cat_name): - data = slurp(f"{base_dir}/categories/{cat_name}.json") - do_localize(root_data, data, "name") - do_format(root_data, data, "description") - - entry_dir = f"{base_dir}/entries/{cat_name}" - entries = [] - for filename in os.listdir(entry_dir): - if filename.endswith(".json"): - basename = filename[:-5] - entries.append(parse_entry(root_data, f"{entry_dir}/{filename}", cat_name + "/" + basename)) - entries.sort(key=lambda ent: (not ent.get("priority", False), ent.get("sortnum", 0), ent["name"])) - data["entries"] = entries - data["id"] = cat_name - - return data - -def parse_sortnum(cats, name): - if '/' in name: - ix = name.rindex('/') - return parse_sortnum(cats, name[:ix]) + (cats[name].get("sortnum", 0),) - return cats[name].get("sortnum", 0), - -def parse_book(root, mod_name, book_name): - base_dir = f"{root}/data/{mod_name}/patchouli_books/{book_name}" - root_info = slurp(f"{base_dir}/book.json") - - root_info["resource_dir"] = root - root_info["modid"] = mod_name - root_info.setdefault("macros", {}).update(default_macros) - if root_info.setdefault("i18n", {}): - root_info["i18n"] = slurp(f"{root}/assets/{mod_name}/lang/{lang}.json") - root_info["i18n"].update(extra_i18n) - - book_dir = f"{base_dir}/{lang}" - - categories = [] - for filename in walk_dir(f"{book_dir}/categories", ""): - basename = filename[:-5] - categories.append(parse_category(root_info, book_dir, basename)) - cats = {cat["id"]: cat for cat in categories} - categories.sort(key=lambda cat: (parse_sortnum(cats, cat["id"]), cat["name"])) - - do_localize(root_info, root_info, "name") - do_format(root_info, root_info, "landing_text") - root_info["categories"] = categories - root_info["blacklist"] = set() - root_info["spoilers"] = set() - - return root_info - -def tag_args(kwargs): - return "".join(f" {'class' if key == 'clazz' else key.replace('_', '-')}={repr(escape(str(value)))}" for key, value in kwargs.items()) - -class PairTag: - __slots__ = ["stream", "name", "kwargs"] - def __init__(self, stream, name, **kwargs): - self.stream = stream - self.name = name - self.kwargs = tag_args(kwargs) - def __enter__(self): - print(f"<{self.name}{self.kwargs}>", file=self.stream, end="") - def __exit__(self, _1, _2, _3): - print(f"", file=self.stream, end="") - -class Empty: - def __enter__(self): pass - def __exit__(self, _1, _2, _3): pass - -class Stream: - __slots__ = ["stream", "thunks"] - def __init__(self, stream): - self.stream = stream - self.thunks = [] - - def tag(self, name, **kwargs): - keywords = tag_args(kwargs) - print(f"<{name}{keywords} />", file=self.stream, end="") - return self - - def pair_tag(self, name, **kwargs): - return PairTag(self.stream, name, **kwargs) - - def pair_tag_if(self, cond, name, **kwargs): - return self.pair_tag(name, **kwargs) if cond else Empty() - - def empty_pair_tag(self, name, **kwargs): - with self.pair_tag(name, **kwargs): pass - - def text(self, txt): - print(escape(txt), file=self.stream, end="") - return self - -def get_format(out, ty, value): - if ty == "para": - return out.pair_tag("p", **value) - if ty == "color": - return out.pair_tag("span", style=f"color: #{value}") - if ty == "link": - link = value - if "://" not in link: - link = "#" + link.replace("#", "@") - return out.pair_tag("a", href=link) - if ty == "tooltip": - return out.pair_tag("span", clazz="has-tooltip", title=value) - if ty == "cmd_click": - return out.pair_tag("span", clazz="has-cmd_click", title="When clicked, would execute: "+value) - if ty == "obf": - return out.pair_tag("span", clazz="obfuscated") - if ty == "bold": - return out.pair_tag("strong") - if ty == "italic": - return out.pair_tag("i") - if ty == "strikethrough": - return out.pair_tag("s") - if ty == "underline": - return out.pair_tag("span", style="text-decoration: underline") - raise ValueError("Unknown format type: " + ty) - -def entry_spoilered(root_info, entry): - if "advancement" not in entry: return False - return any(fnmatch(entry["advancement"], pat) for pat in root_info["spoilers"]) - -def category_spoilered(root_info, category): - return all(entry_spoilered(root_info, ent) for ent in category["entries"]) - -def write_block(out, block): - if isinstance(block, str): - first = False - for line in block.split("\n"): - if first: - out.tag("br") - first = True - out.text(line) - return - sty_type = block.style.type - if sty_type == "base": - for child in block.children: write_block(out, child) - return - tag = get_format(out, sty_type, block.style.value) - with tag: - for child in block.children: - write_block(out, child) - -def anchor_toc(out): - with out.pair_tag("a", href="#table-of-contents", clazz="permalink small", title="Jump to top"): - out.empty_pair_tag("i", clazz="bi bi-box-arrow-up") - -def permalink(out, link): - with out.pair_tag("a", href=link, clazz="permalink small", title="Permalink"): - out.empty_pair_tag("i", clazz="bi bi-link-45deg") - -# TODO modularize -def write_page(out, pageid, page): - if "anchor" in page: - anchor_id = pageid + "@" + page["anchor"] - else: anchor_id = None - - with out.pair_tag_if(anchor_id, "div", id=anchor_id): - if "header" in page or "title" in page: - with out.pair_tag("h4"): - out.text(page.get("header", page.get("title", None))) - if anchor_id: - permalink(out, "#" + anchor_id) - - ty = page["type"] - if ty == "patchouli:text": - write_block(out, page["text"]) - elif ty == "patchouli:empty": pass - elif ty == "patchouli:link": - write_block(out, page["text"]) - with out.pair_tag("h4", clazz="linkout"): - with out.pair_tag("a", href=page["url"]): - out.text(page["link_text"]) - elif ty == "patchouli:spotlight": - with out.pair_tag("h4", clazz="spotlight-title page-header"): - out.text(page["item_name"]) - if "text" in page: write_block(out, page["text"]) - elif ty == "patchouli:crafting": - with out.pair_tag("blockquote", clazz="crafting-info"): - out.text(f"Depicted in the book: The crafting recipe for the ") - first = True - for name in page["item_name"]: - if not first: out.text(" and ") - first = False - with out.pair_tag("code"): out.text(name) - out.text(".") - if "text" in page: write_block(out, page["text"]) - elif ty == "patchouli:image": - with out.pair_tag("p", clazz="img-wrapper"): - for img in page["images"]: - modid, coords = img.split(":") - out.empty_pair_tag("img", src=f"{repo_names[modid]}/assets/{modid}/{coords}") - if "text" in page: write_block(out, page["text"]) - elif ty == "hexcasting:crafting_multi": - recipes = page["item_name"] - with out.pair_tag("blockquote", clazz="crafting-info"): - out.text(f"Depicted in the book: Several crafting recipes, for the ") - with out.pair_tag("code"): out.text(recipes[0]) - for i in recipes[1:]: - out.text(", ") - with out.pair_tag("code"): out.text(i) - out.text(".") - if "text" in page: write_block(out, page["text"]) - elif ty == "hexcasting:brainsweep": - with out.pair_tag("blockquote", clazz="crafting-info"): - out.text(f"Depicted in the book: A mind-flaying recipe producing the ") - with out.pair_tag("code"): out.text(page["output_name"]) - out.text(".") - if "text" in page: write_block(out, page["text"]) - elif ty in ("hexcasting:pattern", "hexcasting:manual_pattern_nosig", "hexcasting:manual_pattern"): - if "name" in page: - with out.pair_tag("h4", clazz="pattern-title"): - inp = page.get("input", None) or "" - oup = page.get("output", None) or "" - pipe = f"{inp} \u2192 {oup}".strip() - suffix = f" ({pipe})" if inp or oup else "" - out.text(f"{page['name']}{suffix}") - if anchor_id: - permalink(out, "#" + anchor_id) - with out.pair_tag("details", clazz="spell-collapsible"): - out.empty_pair_tag("summary", clazz="collapse-spell") - for string, start_angle, per_world in page["op"]: - with out.pair_tag("canvas", clazz="spell-viz", width=216, height=216, data_string=string, data_start=start_angle.lower(), data_per_world=per_world): - out.text("Your browser does not support visualizing patterns. Pattern code: " + string) - write_block(out, page["text"]) - else: - with out.pair_tag("p", clazz="todo-note"): - out.text("TODO: Missing processor for type: " + ty) - if "text" in page: - write_block(out, page["text"]) - out.tag("br") - -def write_entry(out, book, entry): - with out.pair_tag("div", id=entry["id"]): - with out.pair_tag_if(entry_spoilered(book, entry), "div", clazz="spoilered"): - with out.pair_tag("h3", clazz="entry-title page-header"): - write_block(out, entry["name"]) - anchor_toc(out) - permalink(out, "#" + entry["id"]) - for page in entry["pages"]: - write_page(out, entry["id"], page) - -def write_category(out, book, category): - with out.pair_tag("section", id=category["id"]): - with out.pair_tag_if(category_spoilered(book, category), "div", clazz="spoilered"): - with out.pair_tag("h2", clazz="category-title page-header"): - write_block(out, category["name"]) - anchor_toc(out) - permalink(out, "#" + category["id"]) - write_block(out, category["description"]) - for entry in category["entries"]: - if entry["id"] not in book["blacklist"]: - write_entry(out, book, entry) - -def write_toc(out, book): - with out.pair_tag("h2", id="table-of-contents", clazz="page-header"): - out.text("Table of Contents") - with out.pair_tag("a", href="javascript:void(0)", clazz="permalink toggle-link small", data_target="toc-category", title="Toggle all"): - out.empty_pair_tag("i", clazz="bi bi-list-nested") - permalink(out, "#table-of-contents") - for category in book["categories"]: - with out.pair_tag("details", clazz="toc-category"): - with out.pair_tag("summary"): - with out.pair_tag("a", href="#" + category["id"], clazz="spoilered" if category_spoilered(book, category) else ""): - out.text(category["name"]) - with out.pair_tag("ul"): - for entry in category["entries"]: - with out.pair_tag("li"): - with out.pair_tag("a", href="#" + entry["id"], clazz="spoilered" if entry_spoilered(book, entry) else ""): - out.text(entry["name"]) - -def write_book(out, book): - with out.pair_tag("div", clazz="container"): - with out.pair_tag("header", clazz="jumbotron"): - with out.pair_tag("h1", clazz="book-title"): - write_block(out, book["name"]) - write_block(out, book["landing_text"]) - with out.pair_tag("nav"): - write_toc(out, book) - with out.pair_tag("main", clazz="book-body"): - for category in book["categories"]: - write_category(out, book, category) - -def main(argv): - if len(argv) < 5: - print(f"Usage: {argv[0]}