From 8f6b28ef34fc409afe20e176ec66cc27cf0808f8 Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:48:57 -0400 Subject: [PATCH 1/4] Reorder escaping pages --- .../hexcasting/lang/en_us.flatten.json5 | 13 ++++----- .../entries/patterns/patterns_as_iotas.json | 28 +++++++++---------- 2 files changed, 20 insertions(+), 21 deletions(-) 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 c138b18e6..8cbb787de 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 @@ -1964,20 +1964,19 @@ 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:runtime_escape)$(action)Contemplation/$ and $(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.", + runtime_escape: { + "1": "To use $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$, 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.", }, - 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.$(br)This also allows me to draw other patterns in this section literally, suppressing their usual effects.", - "1": "To use $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$, I draw it, then another arbitrary pattern. That second pattern is added to the stack.", - "2": "Behaves similarly to $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$, but acts immediately and suppresses the next pattern's special effects. The difference is noticeable when drawing between $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$.", - "3": "One may find it helpful to think of these 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.", - }, undo: "Finally, if I make a mistake while drawing 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.", + escape: "Similar to $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$, but acts even when drawn between $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$. This can \"escape\" other patterns that work between $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, putting them into the list without any other effects.", further_notes: { title: "Further Notes", - "1": "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. On the other hand, $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$ only needs to be drawn once, no matter how deep I go.", + "1": "Because $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ acts immediately within $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, I need to draw two of them if I want to actually put $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ into a pattern list. The first $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ escapes the special behavior of the second, allowing it to go into the list.$(br2)$(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$, on the other hand, only needs to be drawn once no matter the depth.", "2": "If an iota other than a pattern is present in a list to be executed by $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ or any other meta-evaluation pattern, it will normally result in a mishap. However, this can be avoided using the patterns described in this section.$(br2)Just as with pattern iotas, the patterns described here can be used to \"escape\" $(o)any other$() kind of iota, causing it to be pushed to the stack when something tries to evaluate it instead of causing a mishap.", "3": "This technique may be useful if I want a _Hex to be able to reference a specific iota, such as a complicated vector or an entity reference, without having to construct or obtain it each time.$(br2)The process of getting such an iota into a list of patterns in the first place may be somewhat involved. The simplest method would be to draw a placeholder pattern when assembling the list, and then make use of $(l:patterns/lists#hexcasting:replace)$(action)Surgeon's Exaltation/$ to replace it with my desired iota.", }, diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/patterns_as_iotas.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/patterns_as_iotas.json index 500f29689..4978f1409 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/patterns_as_iotas.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/patterns_as_iotas.json @@ -14,6 +14,16 @@ "type": "patchouli:text", "text": "hexcasting.page.patterns_as_iotas.2" }, + { + "type": "hexcasting:pattern", + "op_id": "hexcasting:runtime_escape", + "anchor": "hexcasting:runtime_escape", + "text": "hexcasting.page.patterns_as_iotas.runtime_escape.1" + }, + { + "type": "patchouli:text", + "text": "hexcasting.page.patterns_as_iotas.runtime_escape.2" + }, { "type": "hexcasting:pattern", "op_id": "hexcasting:open_paren", @@ -28,25 +38,15 @@ }, { "type": "hexcasting:pattern", - "op_id": "hexcasting:runtime_escape", - "anchor": "hexcasting:runtime_escape", - "text": "hexcasting.page.patterns_as_iotas.escape.1" + "op_id": "hexcasting:undo", + "anchor": "hexcasting:undo", + "text": "hexcasting.page.patterns_as_iotas.undo" }, { "type": "hexcasting:pattern", "op_id": "hexcasting:escape", "anchor": "hexcasting:escape", - "text": "hexcasting.page.patterns_as_iotas.escape.2" - }, - { - "type": "patchouli:text", - "text": "hexcasting.page.patterns_as_iotas.escape.3" - }, - { - "type": "hexcasting:pattern", - "op_id": "hexcasting:undo", - "anchor": "hexcasting:undo", - "text": "hexcasting.page.patterns_as_iotas.undo" + "text": "hexcasting.page.patterns_as_iotas.escape" }, { "type": "patchouli:text", From 27befbf45b63330996cd25e05ea134879c6da2ef Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:59:34 -0400 Subject: [PATCH 2/4] Remove influences entry, describe null and garbage in 101 --- .../hexcasting/lang/en_us.flatten.json5 | 7 +++---- .../en_us/entries/casting/influences.json | 21 ------------------- 2 files changed, 3 insertions(+), 25 deletions(-) delete mode 100644 Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/influences.json 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 8cbb787de..772829db3 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 @@ -1264,7 +1264,6 @@ mishaps: "Mishaps", stack: "The Stack", naming: "Naming Actions", - influences: "Influences", mishaps2: "Enlightened Mishaps", amethyst: "Amethyst", @@ -1435,7 +1434,7 @@ $(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, iotas that represent various abstract ideas such as the absence of data ($(thing)Null/$) or complete nonsense ($(thing)Garbage/$).\ $(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. \ @@ -1455,8 +1454,8 @@ "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.", + "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, iotas that represent various abstract ideas such as the absence of data ($(thing)Null/$) or complete nonsense ($(thing)Garbage/$);$(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.", "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...", diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/influences.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/influences.json deleted file mode 100644 index 73074ceec..000000000 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/influences.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "hexcasting.entry.influences", - "category": "hexcasting:casting", - "icon": "minecraft:spyglass", - "sortnum": 2, - "advancement": "hexcasting:root", - "pages": [ - { - "type": "patchouli:text", - "text": "hexcasting.page.influences.1" - }, - { - "type": "patchouli:text", - "text": "hexcasting.page.influences.2" - }, - { - "type": "patchouli:text", - "text": "hexcasting.page.influences.3" - } - ] -} From 6b1f9b282589319c19235126edf604351b67f71b Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Wed, 15 Jul 2026 16:57:43 -0400 Subject: [PATCH 3/4] Don't use "list of patterns" since escaping exists --- .../assets/hexcasting/lang/en_us.flatten.json5 | 13 ++++++------- .../thehexbook/en_us/entries/patterns/meta.json | 6 +++--- .../en_us/entries/patterns/spells/hexcasting.json | 6 +++--- 3 files changed, 12 insertions(+), 13 deletions(-) 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 772829db3..58f700a6e 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 @@ -1117,7 +1117,6 @@ numvec: "a number or vector", numlist: "an integer or list", - "list.pattern": "a list of patterns", double: { positive: { @@ -1627,7 +1626,7 @@ "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.", + "5": "Each infusion spell requires an entity and a list of iotas to cast on the stack. The entity must be a _media-holding item entity (i.e. $(l:items/amethyst)$(item)amethyst/$ 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./$", }, @@ -1999,16 +1998,16 @@ }, 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 $(l:patterns/patterns_as_iotas)$(action)escaped/$, it will be pushed to the stack. Otherwise, non-pattern iota will cause a mishap.", + "eval.1": "Remove something evaluatable (usually a pattern or list of patterns) from the stack, then cast it as if I had drawn the relevant patterns with my $(l:items/staff)$(item)Staff/$. If an iota in such a list is $(l:patterns/patterns_as_iotas)$(action)escaped/$, it will be pushed to the stack. Otherwise, non-pattern iotas will mishap.",//391 "eval.2": "This can be very powerful in tandem with $(l:items/focus)$(item)Foci/$, and according to one esoteric scroll I found it also makes the bureaucracy of Nature a \"Turing-complete\" system.$(br2)However, it seems there's a limit to how many patterns a _Hex can cast-- 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 immediately unravel.", - "for_each.1": "Remove a list of patterns and a list from the stack, then cast the given pattern-list 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.", + "for_each.1": "Remove something evaluatable from the stack, then cast it over each element of the provided list.", + "for_each.2": "More specifically, for each element in the provided list, it will:$(li)Create a new stack, with everything on the current stack plus that element$(li)Cast the evaluatable iota$(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.1": "Cast something evaluatable 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.", "thanatos.1": "Adds the number of patterns a _Hex is still capable of evaluating to the stack. This is reduced by one for each pattern cast by the _Hex." @@ -2075,7 +2074,7 @@ }, 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.", + 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 iotas (usually 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/$.", diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/meta.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/meta.json index 63e7f68c4..ca5c9b200 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/meta.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/meta.json @@ -10,7 +10,7 @@ "type": "hexcasting:pattern", "op_id": "hexcasting:eval", "anchor": "hexcasting:eval", - "input": "[pattern] | pattern", + "input": "evaluatable", "output": "many", "text": "hexcasting.page.meta.eval.1" }, @@ -22,7 +22,7 @@ "type": "hexcasting:pattern", "op_id": "hexcasting:eval/cc", "anchor": "hexcasting:eval/cc", - "input": "[pattern] | pattern", + "input": "evaluatable", "output": "many", "text": "hexcasting.page.meta.eval/cc.1" }, @@ -34,7 +34,7 @@ "type": "hexcasting:pattern", "op_id": "hexcasting:for_each", "anchor": "hexcasting:for_each", - "input": "list of patterns, list", + "input": "evaluatable, list", "output": "list", "text": "hexcasting.page.meta.for_each.1" }, diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json index 06cd64b47..fffc2e25e 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json @@ -14,7 +14,7 @@ "type": "hexcasting:pattern", "op_id": "hexcasting:craft/cypher", "anchor": "hexcasting:craft/cypher", - "input": "entity, [pattern]", + "input": "entity, list", "output": "", "text": "hexcasting.page.hexcasting_spell.craft/cypher" }, @@ -22,7 +22,7 @@ "type": "hexcasting:pattern", "op_id": "hexcasting:craft/trinket", "anchor": "hexcasting:craft/trinket", - "input": "entity, [pattern]", + "input": "entity, list", "output": "", "text": "hexcasting.page.hexcasting_spell.craft/trinket", "hex_size": 8 @@ -31,7 +31,7 @@ "type": "hexcasting:pattern", "op_id": "hexcasting:craft/artifact", "anchor": "hexcasting:craft/artifact", - "input": "entity, [pattern]", + "input": "entity, list", "output": "", "text": "hexcasting.page.hexcasting_spell.craft/artifact", "hex_size": 5 From d71e2abd62cfd6bc019b1cfdde990e35393eed66 Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Wed, 15 Jul 2026 18:32:03 -0400 Subject: [PATCH 4/4] Remove dangling references to influences entry --- .../hexcasting/lang/en_us.flatten.json5 | 50 ++++++++--------- .../hexcasting/lang/ja_jp.flatten.json5 | 49 ++++++++--------- .../hexcasting/lang/ru_ru.flatten.json5 | 47 +++++++--------- .../hexcasting/lang/zh_cn.flatten.json5 | 53 ++++++++----------- 4 files changed, 86 insertions(+), 113 deletions(-) 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 58f700a6e..4e4c2f43a 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 @@ -1448,7 +1448,7 @@ "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...)", + "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 $(thing)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.", @@ -1479,16 +1479,16 @@ "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.", + invalid_pattern: "The pattern drawn is not associated with any action.$(br2)Causes yellow sparks, and a $(thing)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.", - + not_enough_iotas: "The action required more iotas than were on the stack.$(br2)Causes light gray sparks, and as many $(thing)Garbages/$ as would be required to fill up the argument count will be pushed.", + "stack_size.title": "Too Many Iotas", - "stack_size": "I tried to cast a spell which exceeded the size limit of the stack.$(br2)Causes black sparks, and my entire stack will be replaced with a single $(l:casting/influences)$(action)Garbage/$.", + "stack_size": "I tried to cast a spell which exceeded the size limit of the stack.$(br2)Causes black sparks, and my entire stack will be replaced with a single $(thing)garbage/$.", "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/$.", + 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 $(thing)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.", @@ -1500,7 +1500,7 @@ 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.", + math_error: "The action did something offensive to the laws of mathematics, such as dividing by zero.$(br2)Causes red sparks, pushes a $(thing)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.", @@ -1537,12 +1537,6 @@ "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 quintet of influences I've named $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$, $(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.", @@ -1584,7 +1578,7 @@ 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.", + "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 $(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?\"/$", }, @@ -1762,7 +1756,7 @@ 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.", + "2": "If it doesn't hit anything, the vectors will combine into $(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.", @@ -1850,7 +1844,7 @@ }, "consts.const/": { - "null": "Adds the $(l:casting/influences)$(thing)Null/$ influence to the top of the stack.", + "null": "Adds the $(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.", @@ -1898,7 +1892,7 @@ }, logic: { - bool_coerce: "Convert an argument to a boolean. The number $(thing)0/$, $(l:casting/influences)$(thing)Null/$, False, and the empty list become False; everything else becomes True.", + bool_coerce: "Convert an argument to a boolean. The number $(thing)0/$, $(thing)Null/$, False, 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.", @@ -1916,13 +1910,13 @@ }, 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: "Transform the position on the stack into the entity at that location (or $(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).", + animal: "Transform the position on the stack into the animal at that location (or $(thing)Null/$ if there isn't one).", + monster: "Transform the position on the stack into the monster at that location (or $(thing)Null/$ if there isn't one).", + item: "Transform the position on the stack into the dropped item at that location (or $(thing)Null/$ if there isn't one).", + player: "Transform the position on the stack into the player at that location (or $(thing)Null/$ if there isn't one).", + living: "Transform the position on the stack into the living creature at that location (or $(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.", @@ -1941,7 +1935,7 @@ }, 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.", + 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 $(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.", @@ -1961,7 +1955,7 @@ 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:runtime_escape)$(action)Contemplation/$ and $(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.", + "2": "Fortunately, Nature has provided me with a set of special patterns that I can use to work with other patterns directly.$(br2)In short, $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$ and $(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.", runtime_escape: { "1": "To use $(l:patterns/patterns_as_iotas#hexcasting:runtime_escape)$(action)Contemplation/$, 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.", @@ -1992,7 +1986,7 @@ 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.", + 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 $(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/$.", }, @@ -2092,8 +2086,8 @@ "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.", + "sentinel/get_pos": "Add the position of my $(l:patterns/spells/sentinels)$(thing)sentinel/$ to the stack, or $(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 $(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/$.", diff --git a/Common/src/main/resources/assets/hexcasting/lang/ja_jp.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/ja_jp.flatten.json5 index 24ef5da61..71eb044a2 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/ja_jp.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/ja_jp.flatten.json5 @@ -1263,7 +1263,6 @@ mishaps: "変事", stack: "スタック", naming: "アクションの呼称", - influences: "作用", mishaps2: "啓示された変事", amethyst: "アメジスト", @@ -1449,7 +1448,7 @@ "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)イオタ/$、これらは単純な情報の単位だ。", - "3": "まずは$(thing)パターン/$。欠かせないものだ。これらを用いて自分の周囲の$(media)メディア/$を操作する。特定のパターンが描かれると、$(thing)アクション/$が発生する。アクションが実際に魔法を$(italic)かける/$のだ。すべてのパターンは決まった方法でメディアに影響を与え、それらの影響が最終的に有用であるとき、それをアクションと呼ぶ。$(br2)$(media)メディア/$は不安定だ。無効なパターンを描くと、スタックのどこかに$(l:casting/influences)$(action)ガベージ/$が生じる(詳細は後程)。", + "3": "まずは$(thing)パターン/$。欠かせないものだ。これらを用いて自分の周囲の$(media)メディア/$を操作する。特定のパターンが描かれると、$(thing)アクション/$が発生する。アクションが実際に魔法を$(italic)かける/$のだ。すべてのパターンは決まった方法でメディアに影響を与え、それらの影響が最終的に有用であるとき、それをアクションと呼ぶ。$(br2)$(media)メディア/$は不安定だ。無効なパターンを描くと、スタックのどこかに$(thing)ガベージ/$が生じる(詳細は後程)。", "4.header": "例", "4": "興味深いことに、パターンは$(italic)回転/$させても全く問題ないようだ。例えば、これら2つのパターンはどちらも$(l:patterns/basics#hexcasting:get_caster)$(action)精神の反射/$というアクションを果たす。", "5": "$(hex)呪紋/$は(有効な)アクションを順番に描くことで構成される。各アクションはおおむね以下のいずれかを実行する:$(li)周囲の情報を集め、それをスタックの1番上に残す。$(li)集めた情報を操作する(2つの数字を足すなど)。$(li)雷を召喚したり爆発したりといった魔法の効果を行使する(これらのアクションは「スペル」と呼ばれる)。$(p)$(hex)呪紋/$を描き始めると、空のスタックが生成される。アクションはスタックの1番上を操作する。", @@ -1480,16 +1479,16 @@ "3": "幸いなことに、変事による悪影響は確かに$(italic)迷惑/$だが、長期的な破壊を伴うものは特にない。気を取り直して再試行する他ない...が、より上手くできるように励むのが良い。$(br2)次がまとめた変事の一覧だ。", "invalid_pattern.title": "無効なパターン", - invalid_pattern: "描かれたパターンがどのアクションにも結び付いていない。$(br2)黄色の光が散り、$(l:casting/influences)$(action)ガベージ/$がスタックの1番上に入る。", + invalid_pattern: "描かれたパターンがどのアクションにも結び付いていない。$(br2)黄色の光が散り、$(thing)ガベージ/$がスタックの1番上に入る。", "not_enough_iotas.title": "イオタ不足", - not_enough_iotas: "アクションがスタック上にあるよりも多くのイオタを要していた。$(br2)薄灰色の光が散り、引数の数を満たすために必要なだけ$(l:casting/influences)$(action)ガベージ/$が入る。", + not_enough_iotas: "アクションがスタック上にあるよりも多くのイオタを要していた。$(br2)薄灰色の光が散り、引数の数を満たすために必要なだけ$(thing)ガベージ/$が入る。", "stack_size.title": "イオタ過多", - "stack_size": "スタックのサイズ制限を超えるスペルを描こうとした。$(br2)黒色の光が散り、スタック全体が単一の$(l:casting/influences)$(action)ガベージ/$に置き換えられる。", + "stack_size": "スタックのサイズ制限を超えるスペルを描こうとした。$(br2)黒色の光が散り、スタック全体が単一の$(thing)ガベージ/$に置き換えられる。", "incorrect_iota.title": "不正なイオタ", - incorrect_iota: "実行されたアクションは引数として特定のタイプのイオタを予期していたが、無効なものを取得した。複数のイオタが無効な場合、エラーメッセージはスタックの最深部のエラーについてのみ表示する。$(br2)灰色の光が散り、無効なイオタが$(l:casting/influences)$(action)ガベージ/$に置き換えられる。", + incorrect_iota: "実行されたアクションは引数として特定のタイプのイオタを予期していたが、無効なものを取得した。複数のイオタが無効な場合、エラーメッセージはスタックの最深部のエラーについてのみ表示する。$(br2)灰色の光が散り、無効なイオタが$(thing)ガベージ/$に置き換えられる。", "vector_out_of_range.title": "範囲外のベクトル", vector_out_of_range: "アクションが範囲外の地点で世界に影響を与えようとした。$(br2)赤紫色の光が散り、手に持っているアイテムが問題の位置に向かって投げ出される。", @@ -1501,7 +1500,7 @@ entity_immune: "アクションが改変できないエンティティに影響を与えようとした。$(br2)青色の光が散り、手に持っているアイテムが問題のエンティティに向かって投げ出される。", "math_error.title": "数学的エラー", - math_error: "アクションが0で割るなどの、数学の法則に反することをした。$(br2)赤色の光が散り、$(l:casting/influences)$(action)ガベージ/$がスタックに入り、精神が消耗し、残っている活力の半分が取られる。自然界はそのような演算に腹を立て、報復として$(italic)自分/$を除算するようだ。", + math_error: "アクションが0で割るなどの、数学の法則に反することをした。$(br2)赤色の光が散り、$(thing)ガベージ/$がスタックに入り、精神が消耗し、残っている活力の半分が取られる。自然界はそのような演算に腹を立て、報復として$(italic)自分/$を除算するようだ。", "incorrect_item.title": "不正なアイテム", incorrect_item: "アクションには何らかのアイテムが必要だが、指定したアイテムが適切ではなかった。$(br2)茶色の光が散る。問題のあるアイテムを手に持っている場合は、それが床に投げ出される。エンティティの形である場合は、それが空中に飛ばされる。", @@ -1538,12 +1537,6 @@ "3": "スペルはこの命名法が適用されていないようで、多かれ少なかれその動作に応じて名付けられている。結局のところ、単に$(l:patterns/spells/basic#hexcasting:explode)$(action)爆発/$と言えるのに、$(action)デモマンの仕掛/$と呼ばなくていいだろう?", }, - influences: { - "1": "作用は...控えめに言っても奇妙だ。大半のイオタは世界についての何かを示すようだが、作用はさらに...抽象的、あるいは無定形の何かを示す。$(br2)例えば、$(l:casting/influences)$(thing)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)消失/$と名付けた興味深い4つの作用を発見した。それらはパターンと他の作用の両方の特性を持っているようだが、大きく異なる動作をする。これらを使用すると、パターンをアクションに照合する代わりに、イオタとしてスタックに追加できる。$(l:patterns/patterns_as_iotas)それについてここに書き留めた/$。", - "3": "最後に、乱雑にもつれた$(media)メディア/$のように見える、無限の作用群があるようだ。まったく実用性がないため、$(l:casting/influences)$(action)ガベージ/$と名付けた。それらは$(l:casting/mishaps)$(thing)変事/$に応じてスタックのさまざまな場所に出現するようで、感覚的には無意味な寄せ集めのように見える。", - }, - mishaps2: { "1": "新たな恐ろしい失敗の形を発見した。それらに屈してはならない。", @@ -1585,7 +1578,7 @@ thought_knot: { "1": "忘れん坊はしばしば大事なことを覚えるために指に紐を結ぶ。この発想は術に利用できると思われる。特別な結び方をした紐はスタックと関係なく、単一のイオタを安定して保持できるはずだ。$(br2)この発明を$(item)念いの結び目/$と呼ぼう。", "2": "クラフトしたときには、イオタは保存されていない。$(item)念いの結び目/$を反対側の手に持ち、$(l:patterns/readwrite#hexcasting:write)$(action)筆記者の仕掛/$を使用すると、スタックの1番上が削除されて$(item)念いの結び目/$に保存される。$(l:patterns/readwrite#hexcasting:read)$(action)筆記者の反射/$を使用すると、$(item)念いの結び目/$内のイオタがコピーされ、スタックに追加される。$(br2)$(item)念いの結び目/$は1度書き込まれると消えないほどもつれ、何度でもイオタを読み込めるが、消去や上書きをする方法はない。幸いなことに、それらは高価ではない。", - "3": "また、エンティティを$(item)念いの結び目/$に保存し、参照されたエンティティが死亡または消失した後にそれを呼び出そうとすると、$(l:patterns/readwrite#hexcasting:read)$(action)筆記者の反射/$は代わりに$(l:casting/influences)$(thing)Null/$をスタックに追加する。", + "3": "また、エンティティを$(item)念いの結び目/$に保存し、参照されたエンティティが死亡または消失した後にそれを呼び出そうとすると、$(l:patterns/readwrite#hexcasting:read)$(action)筆記者の反射/$は代わりに$(thing)Null/$をスタックに追加する。", "crafting.desc": "$(italic)誰かが「私は魅力的でハンサムです」という看板を着けているあなたを見たらどう思うだろうか?/$", }, @@ -1763,7 +1756,7 @@ print: "スタックの1番上のイオタを表示する。", raycast: { "1": "2つのベクトル(位置と方向)を組み合わせて、「その位置に立ってその方向を見たら、どのブロックを見ていることになる?」という質問への答えを出す。ごく少量の$(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)射手の蒸溜/$から成る。これらにより、自分が見ているブロックのベクトル位置が返される。", + "2": "何も当てはまらなかった場合、ベクトルは$(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)メディア/$を要する。", @@ -1851,7 +1844,7 @@ }, "consts.const/": { - "null": "$(l:casting/influences)$(thing)Null/$作用をスタックの1番上に追加する。", + "null": "$(thing)Null/$作用をスタックの1番上に追加する。", "true": "$(thing)True/$をスタックの1番上に追加する。", "false": "$(thing)False/$をスタックの1番上に追加する。", @@ -1899,7 +1892,7 @@ }, logic: { - bool_coerce: "引数を論理型に変換する。数値$(thing)0/$、$(l:casting/influences)$(thing)Null/$、False、空のリストはFalseになり、その他すべてはTrueになる。", + bool_coerce: "引数を論理型に変換する。数値$(thing)0/$、$(thing)Null/$、False、空のリストはFalseになり、その他すべてはTrueになる。", bool_to_number: "論理型を数値に変換する。Trueは$(thing)1/$になり、Falseは$(thing)0/$になる。", not: "引数がTrueであればFalseを返し、FalseであればTrueを返す。", or: "少なくとも1つの引数がTrueであればTrueを返し、そうでなければFalseを返す。", @@ -1917,13 +1910,13 @@ }, entities: { - get_entity: "スタック上の位置を、その位置にいるエンティティ(存在しない場合は$(l:casting/influences)$(thing)Null/$)に変換する。", + get_entity: "スタック上の位置を、その位置にいるエンティティ(存在しない場合は$(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/$)に変換する。", + animal: "スタック上の位置を、その位置にいる動物(存在しない場合は$(thing)Null/$)に変換する。", + monster: "スタック上の位置を、その位置にいるモンスター(存在しない場合は$(thing)Null/$)に変換する。", + item: "スタック上の位置を、その位置にドロップされたアイテム(存在しない場合は$(thing)Null/$)に変換する。", + player: "スタック上の位置を、その位置にいるプレイヤー(存在しない場合は$(thing)Null/$)に変換する。", + living: "スタック上の位置を、その位置にいる生物(存在しない場合は$(thing)Null/$)に変換する。", }, zone_entity: "スタック上の位置と最大距離を取得し、その位置の近くにいるすべてのエンティティのリストに結合する。", @@ -1942,7 +1935,7 @@ }, lists: { - index: "スタックの1番上の数値を削除し、1番上のリストをそのリストのn番目の要素に置き換える(nは削除した数値)。数値が範囲外の場合はリストを$(l:casting/influences)$(thing)Null/$に置き換える。", + index: "スタックの1番上の数値を削除し、1番上のリストをそのリストのn番目の要素に置き換える(nは削除した数値)。数値が範囲外の場合はリストを$(thing)Null/$に置き換える。", slice: "スタックの上から2つの数値を削除し、それらのインデックス間の、スタックの1番上の下限を含み上限を含まないサブリストを取得する。例えば、[0, 1, 2, 3, 4]の0、 2のサブリストは[0, 1]となる。", append: "スタックの1番上を削除し、それをスタックの1番上のリストの末尾に追加する。", unappend: "スタックの1番上のリストの末尾にあるイオタを削除し、それをスタックの1番上に追加する。", @@ -1962,7 +1955,7 @@ patterns_as_iotas: { "1": "この術の多くの特徴の内の1つは$(italic)パターン自体/$がイオタとして機能できることで、描画中にそれらをスタックに加えることもできる。$(br2)ここで当然の疑問が沸く。$(br)どうやってそれらを表現すれば良い?単にパターンを描くのでは、それをスタックに追加するように自然界に伝えることは望めず、アクションに一致するだけだろう。", - "2": "幸い、自然界はパターンを直接操作するために使用できる$(l:casting/influences)作用/$一式を提供してくれた。$(br2)端的には、$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)検討/$で1つのパターンをスタックに追加し、$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$と$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)回想/$でリスト全体を追加できる。", + "2": "幸い、自然界はパターンを直接操作するために使用できる作用一式を提供してくれた。$(br2)端的には、$(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)検討/$で1つのパターンをスタックに追加し、$(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つ目のパターンがスタックに追加される。", "2": "計算機科学に精通している人であれば、パターンをスタックに「エスケープする」と考えれば分かりやすいかもしれない。$(br2)これの通常の使用法は、$(l:patterns/readwrite#hexcasting:write)$(action)筆記者の仕掛/$を使用してパターンを$(l:items/scroll)$(item)巻物/$や$(l:items/slate)$(item)石板/$にコピーし、おそらくそれらで装飾することである。", @@ -1992,7 +1985,7 @@ writable: "反対側の手にあるアイテムにイオタを保存できるならTrueを返す。そうでなければFalseを返す。", "writable/entity": "$(l:patterns/readwrite#hexcasting:writable)$(action)査定人の反射/$と似ているが、自分の反対側の手ではなくエンティティに書き込めるかどうかを確認する。", "local.title": "レイヴンマインド", - local: "とはいえ、情報を保存できる場所はアイテムだけではない。スタックと似て非なるものである、$(hex)呪紋/$自体の$(media)メディア/$に情報を保存することもできる。本文ではこれを$(l:patterns/readwrite#hexcasting:local)$(thing)レイヴンマインド/$と称する。$(l:items/focus)$(item)焦点具/$と同様に1つのイオタを保持し、同様に最初は$(l:casting/influences)$(thing)Null/$である。$(l:patterns/meta#hexcasting:for_each)$(action)トートの仕掛/$の反復間では保持されるが、直前の$(hex)呪紋/$の一部である間のみだ。描画を止めると値は消失する。", + local: "とはいえ、情報を保存できる場所はアイテムだけではない。スタックと似て非なるものである、$(hex)呪紋/$自体の$(media)メディア/$に情報を保存することもできる。本文ではこれを$(l:patterns/readwrite#hexcasting:local)$(thing)レイヴンマインド/$と称する。$(l:items/focus)$(item)焦点具/$と同様に1つのイオタを保持し、同様に最初は$(thing)Null/$である。$(l:patterns/meta#hexcasting:for_each)$(action)トートの仕掛/$の反復間では保持されるが、直前の$(hex)呪紋/$の一部である間のみだ。描画を止めると値は消失する。", "write/local": "1番上のイオタをスタックから削除し、それを$(l:patterns/readwrite#hexcasting:local)$(thing)レイヴンマインド/$に保存し、$(hex)呪紋/$の描画を止めるまで保管する。", "read/local": "$(l:patterns/readwrite#hexcasting:write/local)$(action)フギンの仕掛/$で書き込んだであろうイオタを、$(l:patterns/readwrite#hexcasting:local)$(thing)レイヴンマインド/$からコピーする。", }, @@ -2092,8 +2085,8 @@ "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": "スタックの1番上の位置ベクトルを、その位置から自分の$(l:patterns/spells/sentinels)$(thing)センチネル/$を指し示す単位ベクトルに、召喚されていなければ$(l:casting/influences)$(thing)Null/$に変換する。ごく少量の$(media)メディア/$を要する。", + "sentinel/get_pos": "自分の$(l:patterns/spells/sentinels)$(thing)センチネル/$の位置を、召喚されていなければ$(thing)Null/$をスタックに追加する。ごく少量の$(media)メディア/$を要する。", + "sentinel/wayfind": "スタックの1番上の位置ベクトルを、その位置から自分の$(l:patterns/spells/sentinels)$(thing)センチネル/$を指し示す単位ベクトルに、召喚されていなければ$(thing)Null/$に変換する。ごく少量の$(media)メディア/$を要する。", }, colorize: "このスペルを発動するには反対側の手に$(l:items/pigments)$(item)色素/$を持つ必要がある。すると色素が消費され、精神の色彩が(再度このスペルを描くまでは)恒久的に変化する。約1個の$(l:items/amethyst)$(item)アメジストダスト/$を要する。", 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 index 5502f2fee..b638f95d3 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 @@ -1204,7 +1204,6 @@ mishaps: "Провалы", stack: "Стек", naming: "Наименование", - influences: "Абстракции", mishaps2: "Просвещённые провалы", amethyst: "Аметист", @@ -1390,7 +1389,7 @@ "101": { "1": "Исполнение $(#b38ef3)Заговора/$ - немного сложный процесс-- неудивительно, что это искусство было забыто. Мне придется внимательно перечитать свои записи.$(br2)Я могу начать создание $(#b38ef3)Заговора/$ нажав $(k:use), держа в руке $(l:items/staff)$(item)Посох/$ - это приведет к появлению передо мной шестиугольной сетки из точек. Затем я могу щелкать и перетаскивать от точки к точке, чтобы начертить руны на сетке; окончив начертание руны я моментально призываю Природу исполнить соответствующее ей действе (подробнее об этом позже).", "2": "Как только я начерчу достаточно рун, чтобы произнести заклинание, сетка исчезнет, и сохраненные мною мысли будут выпущены. Я также могу очистить сетку, удерживая $(k:sneak) при использовании моего $(l:items/staff)$(item)посоха/$.$(br2)Итак, как же работают руны? Вкратце: $(italic)Руны/$ исполняют... $(italic)Действия/$, которые манипулируют... $(l:casting/stack)$(italic)Стеком/$, который представляет собой список из... $(italic)Йот/$, которые являются простыми единицами информации.", - "3": "Во-первых, $(thing)Руны/$. Это база, это то, что я использую для манипулирования мыслью вокруг меня. Некоторые узоры, будучи начерченными, вызовут выполнение определённых действий. Действия - это то, что на самом деле творит чудеса; все руны определенным образом влияют на мысли, и когда эти абстракции в конечном итоге приводят к чему-то полезному, мы называем это действием.$(br2)$(#74b3f2)Мысли/$ могут быть непостоянными: если я начерчу неверную руну, я получу некоторый $(l:casting/influences)$(action)мусор/$ в качестве результата где-нибудь на моем стеке (читайте дальше...)", + "3": "Во-первых, $(thing)Руны/$. Это база, это то, что я использую для манипулирования мыслью вокруг меня. Некоторые узоры, будучи начерченными, вызовут выполнение определённых действий. Действия - это то, что на самом деле творит чудеса; все руны определенным образом влияют на мысли, и когда эти абстракции в конечном итоге приводят к чему-то полезному, мы называем это действием.$(br2)$(#74b3f2)Мысли/$ могут быть непостоянными: если я начерчу неверную руну, я получу некоторый $(thing)мусор/$ в качестве результата где-нибудь на моем стеке (читайте дальше...)", "4.header": "Пример", "4": "Интересно отметить, что $(italic)угол/$ руны, похоже, вообще не имеет значения. Самое главное - это начальная точка руны и градус, на который вы поворачиваете линию. Например, оба этих узора выполняют действие, называемое $(l:patterns/basics#hexcasting:get_caster)$(action)Отражением Нарцисса/$.", "5": "$(#b38ef3)Заговор/$ приводится в действие путем последовательного начертания (допустимых) действий. Каждое действие может выполнять одну из нескольких задач:$(li)Собирать некоторую информацию об окружающей среде, оставляя её на вершине стека;$(li)манипулировать собранной информацией (например, складывать два числа); или$(li)выполнять какой-либо магический эффект, например вызывать молнию или взрыв. (Эти действия называются \"заклинания\")$(p)Когда я начинаю сотворять $(#b38ef3)Заговор/$, создается пустой стек. Действия управляют вершиной этого стека.", @@ -1421,16 +1420,16 @@ "3": "К счастью, хотя плохие последствия провалов, безусловно, $(italic)раздражают/$, ни одно из них не является особенно разрушительным в долгосрочной перспективе. Нужно лишь отряхнуть с себя грязь и попробовать снова... Но я все равно должен стремиться к лучшему.$(br2)Ниже приведён список провалов, который я составил.", "invalid_pattern.title": "Некорректная руна", - invalid_pattern: "Руна не связана ни с одним действием.$(br2)Вызывает желтые искры, и $(l:casting/influences)$(action)Мусор/$ будет помещен на верхушку моего стека.", + invalid_pattern: "Руна не связана ни с одним действием.$(br2)Вызывает желтые искры, и $(thing)Мусор/$ будет помещен на верхушку моего стека.", "not_enough_iotas.title": "Недостаточно йот", - not_enough_iotas: "Для действия требовалось больше йот, чем было в стеке.$(br2)Вызывает светло-серые искры, и столько $(l:casting/influences)$(action)Мусора/$, сколько потребовалось бы для заполнения количества аргументов, будет добавлено.", + not_enough_iotas: "Для действия требовалось больше йот, чем было в стеке.$(br2)Вызывает светло-серые искры, и столько $(thing)Мусора/$, сколько потребовалось бы для заполнения количества аргументов, будет добавлено.", "stack_size.title": "Слишком много йот", - "stack_size": "Я попытался исполнить заклинание, содержащее слишком много рун - их количество превысило размер стека.$(br2)Вызывает чёрные частицы, и весь мой стек превращается в единый $(l:casting/influences)$(action)Мусор/$.", + "stack_size": "Я попытался исполнить заклинание, содержащее слишком много рун - их количество превысило размер стека.$(br2)Вызывает чёрные частицы, и весь мой стек превращается в единый $(thing)Мусор/$.", "incorrect_iota.title": "Неверный тип йоты", - incorrect_iota: "Выполненное действие ожидало йоту определенного типа в качестве аргумента, но получило что-то недопустимое. Если несколько йот недопустимы, сообщение об ошибке будет указывать только на ошибку на самом глубоком уровне стека.$(br2)Вызывает темно-серые искры, и недопустимая йота будет заменена на $(l:casting/influences)$(action)Мусор/$.", + incorrect_iota: "Выполненное действие ожидало йоту определенного типа в качестве аргумента, но получило что-то недопустимое. Если несколько йот недопустимы, сообщение об ошибке будет указывать только на ошибку на самом глубоком уровне стека.$(br2)Вызывает темно-серые искры, и недопустимая йота будет заменена на $(thing)Мусор/$.", "vector_out_of_range.title": "Дальняя позиция", vector_out_of_range: "Действие пыталось повлиять на мир в точке, находящейся за пределами моего радиуса действия.$(br2)Вызывает пурпурные искры, и предметы в моих руках будут вырваны и брошены в направлении нарушающего места.", @@ -1442,7 +1441,7 @@ entity_immune: "Действие пыталось повлиять на существо, которое не может быть изменено таким образом.$(br2)Вызывает синие искры, и предметы в моих руках будут вырваны и брошены в направлении нарушающего существа.", "math_error.title": "Математический парадокс", - math_error: "Действие совершило что-то оскорбительное для законов математики, например, деление на ноль.$(br2)Вызывает красные искры, добавляет $(l:casting/influences)$(action)Мусор/$ в мой стек, и мой разум будет истощен, украв половину оставшейся у меня энергии. Похоже, что Природа возмущается подобными операциями и делит $(italic)меня/$ в ответ.", + math_error: "Действие совершило что-то оскорбительное для законов математики, например, деление на ноль.$(br2)Вызывает красные искры, добавляет $(thing)Мусор/$ в мой стек, и мой разум будет истощен, украв половину оставшейся у меня энергии. Похоже, что Природа возмущается подобными операциями и делит $(italic)меня/$ в ответ.", "incorrect_item.title": "Неправильный предмет", incorrect_item: "Действие требует какого-то предмета, но предоставленный мной предмет не подходит.$(br2)Вызывает коричневые искры. Если нарушающий предмет был в моей руке, он будет брошен на пол. Если это было существо, оно будет брошено в воздух.", @@ -1479,12 +1478,6 @@ "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)Рассмотрение/$, $(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)Исчезновение/$. Вроде они обладают свойствами как рун, так и других абстракций, но ведут себя очень по-разному. Я могу использовать их, чтобы добавлять $(italic)сами руны/$ в качестве йот на мой стек, вместо их моментального исполнения. $(l:patterns/patterns_as_iotas)Мои заметки по этому вопросу здесь/$.", - "3": "Наконец, кажется, существует бесконечное семейство абстракций, которые просто кажутся запутанным клубком $(#74b3f2)мыслей/$. Я назвал их $(l:casting/influences)$(action)Мусором/$, так как они совершенно бесполезны. Вроде бы они появляются на моем стеке в различных местах в ответ на $(l:casting/mishaps)$(thing)ошибки/$ и ощущаются мною как бессмысленная каша.", - }, - mishaps2: { "1": "Я обнаружил новые и ужасные результаты провалов. Я не должен поддаваться им.", @@ -1526,7 +1519,7 @@ 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)Ничто/$ на стек вместо нее.", + "3": "Кроме того, если я сохраню сущность в $(item)Узел мысли/$ и попытаюсь вспомнить её после того, как указанная сущность умерла или исчезла, $(l:patterns/readwrite#hexcasting:read)$(action)Отражение Писаря/$ добавит $(thing)Ничто/$ на стек вместо нее.", "crafting.desc": "$(italic)Как бы вы почувствовали, если бы кто-то увидел вас с табличкой, на которой написано: \"Я красив и привлекателен\"?/$", }, @@ -1704,7 +1697,7 @@ print: "Отображает верхнюю йоту стека в чат.", raycast: { "1": "Комбинирует два вектора (позицию и направление взгляда), отвечая на вопрос: Если я стою на позиции и смотрю в направлении, на какой блок я смотрю? Стоит незначительное количество $(#74b3f2)мысли/$.", - "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)Объединения Луча/$. Вместе они возвращают векторную позицию блока, на который я смотрю.", + "2": "Если ничего не попадается на пути руны, векторы объединятся в $(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)стороны/$ блока я смотрю? Стоит незначительное количество $(#74b3f2)мысли/$.", @@ -1792,7 +1785,7 @@ }, "consts.const/": { - "null": "Добавляет $(l:casting/influences)$(thing)Ничто/$ на верхушку стека.", + "null": "Добавляет $(thing)Ничто/$ на верхушку стека.", "true": "Добавляет $(thing)Истину/$ на верхушку стека.", "false": "Добавляет $(thing)Ложь/$ на верхушку стека.", @@ -1839,7 +1832,7 @@ }, logic: { - bool_coerce: "Преобразует аргумент в логическое значение. Число $(thing)0/$, $(l:casting/influences)$(thing)Ничто/$ и пустой список становятся Ложью; всё остальное становится Истиной.", + bool_coerce: "Преобразует аргумент в логическое значение. Число $(thing)0/$, $(thing)Ничто/$ и пустой список становятся Ложью; всё остальное становится Истиной.", bool_to_number: "Преобразует логическое значение в число; Истина становится $(thing)1/$, а Ложь становится $(thing)0/$.", not: "Если аргумент равен Истине, вернёт Ложь; если он равен Лжи, вернёт Истину.", or: "Возвращает Истину, если хотя бы один из аргументов равен Истине; в противном случае возвращает Ложь.", @@ -1855,13 +1848,13 @@ }, entities: { - get_entity: "Преобразует позицию в стеке в сущность на этом месте (или $(l:casting/influences)$(thing)Ничто/$, если её там нет).", + get_entity: "Преобразует позицию в стеке в сущность на этом месте (или $(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)Ничто/$, если его там нет).", + animal: "Преобразует позицию в стеке в животное на этом месте (или $(thing)Ничто/$, если его там нет).", + monster: "Преобразует позицию в стеке в монстра на этом месте (или $(thing)Ничто/$, если его там нет).", + item: "Преобразует позицию в стеке в выброшенный предмет на этом месте (или $(thing)Ничто/$, если его там нет).", + player: "Преобразует позицию в стеке в игрока на этом месте (или $(thing)Ничто/$, если его там нет).", + living: "Преобразует позицию в стеке в живое существо на этом месте (или $(thing)Ничто/$, если его там нет).", }, zone_entity: "Берёт позицию и радиус со стека и объединяет их в список всех сущностей, находящихся в заданном радиусе от позиции.", @@ -1880,7 +1873,7 @@ }, lists: { - index: "Удаляет число в верхней части стека, затем заменяет список на верхушке n-м элементом этого списка (где n - индекс, который вы передали). Заменяет список на $(l:casting/influences)$(thing)Ничто/$, если число выходит за границы.", + index: "Удаляет число в верхней части стека, затем заменяет список на верхушке n-м элементом этого списка (где n - индекс, который вы передали). Заменяет список на $(thing)Ничто/$, если число выходит за границы.", slice: "Удаляет два числа на вершине стека, затем возвращает подсписок списка на вершине стека между этими индексами, включая нижнюю границу и исключая верхнюю. Например, подсписок 0, 2 из [0, 1, 2, 3, 4] будет [0, 1].", append: "Удаляет верхний элемент стека, затем добавляет его в конец списка находящегося вершине стека.", unappend: "Перемещает элемент из конца списка на верхушку стека.", @@ -1900,7 +1893,7 @@ patterns_as_iotas: { "1": "Одной из многих особенностей этого искусства является то, что $(italic)сами по себе руны/$ могут действовать как йоты - я могу даже поместить их на стек при выполнении заклинания.$(br2)Это порождает довольно очевидный вопрос: как их выразить? Если я просто начерчу руну, это вряд ли скажет Природе добавить её на мой стек - скорее всего, она просто будет сопоставлена с действием.", - "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)Ретроспекция/$ позволяют мне добавить целый список.", + "2": "К счастью, Природа предоставила мне набор абстракций, которые я могу использовать для работы с рунами напрямую.$(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": "Можно рассматривать это как \"экранирование\" руны на стек.$(br2)Обычно это используется для копирование рун на $(l:items/scroll)$(item)Свиток/$ или $(l:items/slate)$(item)Скрижаль/$ с помощью $(l:patterns/readwrite#hexcasting:write)$(action)Гамбита Писаря/$, а затем, возможно, для декорирования ими чего-либо.", @@ -2030,8 +2023,8 @@ "sentinel/create": "Призывает моего $(l:patterns/spells/sentinels)$(thing)Часового/$ на указанной позиции. Стоит примерно 1 $(l:items/amethyst)$(item)аметистовую пыль/$.", "sentinel/destroy": "Изгоняет моего $(l:patterns/spells/sentinels)$(thing)Часового/$ из мира. Стоимость незначительна в $(#74b3f2)мысли/$.", - "sentinel/get_pos": "Добавляет позицию моего $(l:patterns/spells/sentinels)$(thing)Часового/$ на стек, или $(l:casting/influences)$(thing)Ничто/$, если он не призван. Стоимость незначительна в $(#74b3f2)мысли/$.", - "sentinel/wayfind": "Преобразует позицию на вершине стека в единичный вектор, равный сдвигу от этой позиции к позиции моего $(l:patterns/spells/sentinels)$(thing)Часового/$, или $(l:casting/influences)$(thing)Ничто/$, если он не призван. Стоимость незначительна в $(#74b3f2)мысли/$.", + "sentinel/get_pos": "Добавляет позицию моего $(l:patterns/spells/sentinels)$(thing)Часового/$ на стек, или $(thing)Ничто/$, если он не призван. Стоимость незначительна в $(#74b3f2)мысли/$.", + "sentinel/wayfind": "Преобразует позицию на вершине стека в единичный вектор, равный сдвигу от этой позиции к позиции моего $(l:patterns/spells/sentinels)$(thing)Часового/$, или $(thing)Ничто/$, если он не призван. Стоимость незначительна в $(#74b3f2)мысли/$.", }, colorize: "Для произнесения этого заклинания мне необходимо держать в другой руке $(l:items/pigments)$(item)Пигмент/$. Когда я это делаю, руна поглощает краситель и навсегда изменяет окраску моего разума (по крайней мере, до тех пор, пока я снова не произнесу это заклинание). Стоит примерно одну $(l:items/amethyst)$(item)аметистовую пыль/$.", 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 aa5a6c018..82206b8d8 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 @@ -1271,7 +1271,6 @@ mishaps: "事故", stack: "栈", naming: "操作命名法", - influences: "虚指", mishaps2: "启迪后事故", amethyst: "紫水晶", @@ -1457,7 +1456,7 @@ "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)垃圾/$(详情见后)。", + "3": "首先,$(thing)图案/$。它们是咒术的必需物,可用它们来操控周围的$(media)媒质/$。部分图案在被绘制时,会执行$(thing)操作/$。操作是$(italic)实际产生/$魔法效果的事物。所有图案都会以某种方式影响$(media)媒质/$,而当这些影响实际有用时,我们就称其为操作。$(br2)$(media)媒质/$是易变的,如果我绘制了无效的图案,栈上某处就会出现$(thing)垃圾/$(详情见后)。", "4.header": "示例", "4": "有意思的是,图案整体的$(italic)方向/$完全不影响图案的功用。例如,上图中的两个图案都会执行名为$(l:patterns/basics#hexcasting:get_caster)$(action)意识之精思/$的操作。", "5": "$(hex)咒术/$是通过按顺序绘制(有效的)图案施放的。每个操作都能完成如下几件事中的一件:$(li)获取有关环境的信息,然后将其置于栈顶。$(li)操控获取到的信息(例如加和两个数)。或者$(li)产生魔法效果,例如召唤闪电或产生爆炸。(这些操作被称为“法术”。)$(p)在开始施放$(hex)咒术/$时会自动创建一个空栈。操作会影响栈顶的若干元素。", @@ -1488,16 +1487,16 @@ "3": "而幸运的是,虽然所有事故导致的有害效果都$(italic)很烦人/$,但也都不会导致长期毁灭性后果。在哪里跌倒,就要在哪里站起来,然后继续前进……当然也可以换一条更好走的路。$(br2)我整理的所有事故如下所述。", "invalid_pattern.title": "无效图案", - invalid_pattern: "绘制的图案不对应任何操作。$(br2)产生黄色火花,并向栈顶压入一个$(l:casting/influences)$(action)垃圾/$。", + invalid_pattern: "绘制的图案不对应任何操作。$(br2)产生黄色火花,并向栈顶压入一个$(thing)垃圾/$。", "not_enough_iotas.title": "Iota 过少", - not_enough_iotas: "该操作需要比当前栈中元素数还多的 iota。$(br2)产生淡灰色火花,并向栈顶压入缺少的参数的数量个$(l:casting/influences)$(action)垃圾/$。", + not_enough_iotas: "该操作需要比当前栈中元素数还多的 iota。$(br2)产生淡灰色火花,并向栈顶压入缺少的参数的数量个$(thing)垃圾/$。", "stack_size.title": "Iota 过多", - "stack_size": "试图施放超出栈大小限制的法术。$(br2)产生黑色火花,我的整个栈变为仅含有单个$(l:casting/influences)$(action)垃圾/$。", + "stack_size": "试图施放超出栈大小限制的法术。$(br2)产生黑色火花,我的整个栈变为仅含有单个$(thing)垃圾/$。", "incorrect_iota.title": "Iota 错误", - incorrect_iota: "该操作需要一种特定类型的 iota 作为参数,而实际 iota 无效。如果有多个 iota 无效,错误信息只会提示最靠近栈底的错误。$(br2)产生深灰色火花,无效的 iota 会被替换为$(l:casting/influences)$(action)垃圾/$。", + incorrect_iota: "该操作需要一种特定类型的 iota 作为参数,而实际 iota 无效。如果有多个 iota 无效,错误信息只会提示最靠近栈底的错误。$(br2)产生深灰色火花,无效的 iota 会被替换为$(thing)垃圾/$。", "vector_out_of_range.title": "向量越界", vector_out_of_range: "该操作试图影响在我影响范围之外的某一位置。$(br2)产生品红色火花,我手中的物品将会掉落并飞向对应位置。", @@ -1509,7 +1508,7 @@ entity_immune: "该操作试图影响某不会受其影响的实体。$(br2)产生蓝色火花,我手中的物品将会掉落并飞向对应实体。", "math_error.title": "数学错误", - math_error: "该操作违背了数学规律,例如试图除以零。$(br2)产生红色火花,压入一个$(l:casting/influences)$(action)垃圾/$,并销蚀我的意识,扣去我当时生命力的一半。自然似乎对这种举动深感冒犯,而后便会报复性地惩罚$(italic)我/$。", + math_error: "该操作违背了数学规律,例如试图除以零。$(br2)产生红色火花,压入一个$(thing)垃圾/$,并销蚀我的意识,扣去我当时生命力的一半。自然似乎对这种举动深感冒犯,而后便会报复性地惩罚$(italic)我/$。", "incorrect_item.title": "物品错误", incorrect_item: "该操作需要某种物品,而我提供的物品不合适。$(br2)产生棕色火花。如果在手中持有对应物品,则该物品会掉落在地。如果对应物品以实体形式存在,则其会被击飞。", @@ -1546,12 +1545,6 @@ "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)事故/$而在栈中任意位置出现,呈现出来的则是一团乱麻。", - }, - mishaps2: { "1": "我发现了若干骇人的新事故。我绝不能向它们屈服。", @@ -1593,14 +1586,14 @@ 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/$。", + "3": "另外,如果我在$(item)结念绳/$中写入一个实体,然后在该实体死亡或消失后尝试复制,则$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$会压入一个 $(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 复制出来并压入栈中。", + "1": "$(l:items/focus)$(item)核心/$能存储一个 iota。$(br2)合成核心时,其默认存有 $(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)清除物品/$则会将蜡封和其内容物一并清除。", + "3": "另外,如果我在$(l:items/focus)$(item)核心/$中写入一个实体,然后在该实体死亡或消失后尝试复制,则$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$会压入一个 $(thing)Null/$。$(br2)最后,如果不希望$(l:items/focus)$(item)核心/$被覆写,可以将其与$(item)蜜脾/$合成来蜡封,这时对其使用$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$就会失败。$(l:patterns/spells/hexcasting#hexcasting:erase)$(action)清除物品/$则会将蜡封和其内容物一并清除。", "crafting.desc": "$(italic)毒苹果,毒虫子。/$", }, @@ -1771,7 +1764,7 @@ 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)弓箭手之馏化/$组成。依次绘制就能返回我所看的方块的位置向量。", + "2": "如果视线并未击中任何事物,所提供的向量会变为 $(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)媒质/$。", @@ -1859,7 +1852,7 @@ }, "consts.const/": { - "null": "返回 $(l:casting/influences)$(thing)Null/$ 这一虚指。", + "null": "返回 $(thing)Null/$ 这一虚指。", "true": "返回 $(thing)True/$。", "false": "返回 $(thing)False/$。", @@ -1907,7 +1900,7 @@ }, logic: { - bool_coerce: "将参数变换为布尔值。数 $(thing)0/$、$(l:casting/influences)$(thing)Null/$、False,以及空列表会变为 False。其余所有则变为 True。", + bool_coerce: "将参数变换为布尔值。数 $(thing)0/$、$(thing)Null/$、False,以及空列表会变为 False。其余所有则变为 True。", bool_to_number: "将布尔值变换为数。True 变为 $(thing)1/$, False 变为 $(thing)0/$。", not: "如果参数是 True,返回 False;如果参数是 False,返回 True。", or: "如果至少有一个参数是 True,返回 True。否则返回 False。", @@ -1925,13 +1918,13 @@ }, entities: { - get_entity: "将栈顶位置向量变为该处实体(若无则返回 $(l:casting/influences)$(thing)Null/$)。", + get_entity: "将栈顶位置向量变为该处实体(若无则返回 $(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/$)。", + animal: "将栈顶位置向量变为该处动物(若无则返回 $(thing)Null/$)。", + monster: "将栈顶位置向量变为该处怪物(若无则返回 $(thing)Null/$)。", + item: "将栈顶位置向量变为该处物品实体(若无则返回 $(thing)Null/$)。", + player: "将栈顶位置向量变为该处玩家(若无则返回 $(thing)Null/$)。", + living: "将栈顶位置向量变为该处生物(若无则返回 $(thing)Null/$)。", }, zone_entity: "从栈顶获取位置及最大距离,返回该位置给定距离范围内所有实体的列表。", @@ -1950,7 +1943,7 @@ }, lists: { - index: "移除栈顶的数,将栈顶的列表变为其中下标为该数(就是被移除的那个数)的元素。若该数越界,则将列表换为 $(l:casting/influences)$(thing)Null/$。", + index: "移除栈顶的数,将栈顶的列表变为其中下标为该数(就是被移除的那个数)的元素。若该数越界,则将列表换为 $(thing)Null/$。", slice: "移除栈顶的两个数,将栈顶的列表变为其中下标在两个数之间元素的子列表,包含下标下界,不含下标上界。例如,[0, 1, 2, 3, 4] 的 0, 2 子列表是 [0, 1]。", append: "移除栈顶元素,将其加到栈顶列表的末尾。", unappend: "移除栈顶列表末尾的元素,将其加到栈顶。", @@ -1970,7 +1963,7 @@ 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)反思/$则能加入一整个列表。", + "2": "幸运的是,自然提供了一组专用于此道的虚指。$(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)书吏之策略/$配合使用。这之后卷轴和石板就能拿来装饰了。", @@ -2000,7 +1993,7 @@ 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)咒术/$结束。一旦施法结束,其值就会被清除。", + local: "物品不是唯一一个能写入信息的地方,我也可以将其存到$(hex)咒术/$自身的$(media)媒质/$里,就和栈差不多。文献将其称为$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$。它能存有一个 iota,默认为 $(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)福金之策略/$写进去。)", }, @@ -2100,8 +2093,8 @@ "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)媒质/$。", + "sentinel/get_pos": "将我的$(l:patterns/spells/sentinels)$(thing)哨卫/$的位置加到栈中,若并未召唤则加入一个 $(thing)Null/$。消耗极少量$(media)媒质/$。", + "sentinel/wayfind": "将栈顶的位置向量变为从我的位置指向$(l:patterns/spells/sentinels)$(thing)哨卫/$的单位向量,若并未召唤则变为 $(thing)Null/$。消耗极少量$(media)媒质/$。", }, colorize: "施法时需要在另一只手中持有$(l:items/pigments)$(item)染色剂/$。施法后,染色剂将被消耗,而我意识的颜色也将永久改变(至少是在再次施法前)。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。",