impl and document new read/write stuff

This commit is contained in:
gamma-delta 2022-11-06 12:09:39 -06:00
parent 2a3c234741
commit 9d77334e84
5 changed files with 118 additions and 72 deletions

View file

@ -51,6 +51,11 @@ public interface IotaHolderItem {
} }
} }
/**
* What is this considered to contain when nothing can be read?
* <p>
* TODO i'm not sure what this exists for
*/
@Nullable @Nullable
default Iota emptyIota(ItemStack stack) { default Iota emptyIota(ItemStack stack) {
return null; return null;

View file

@ -217,7 +217,8 @@ public class RegisterPatterns {
PatternRegistry.mapPattern(HexPattern.fromAngles("aqawqadaq", HexDir.SOUTH_EAST), modLoc("create_water"), PatternRegistry.mapPattern(HexPattern.fromAngles("aqawqadaq", HexDir.SOUTH_EAST), modLoc("create_water"),
new OpCreateFluid(false, MediaConstants.DUST_UNIT, new OpCreateFluid(false, MediaConstants.DUST_UNIT,
Items.WATER_BUCKET, Items.WATER_BUCKET,
Blocks.WATER_CAULDRON.defaultBlockState().setValue(LayeredCauldronBlock.LEVEL, LayeredCauldronBlock.MAX_FILL_LEVEL), Blocks.WATER_CAULDRON.defaultBlockState()
.setValue(LayeredCauldronBlock.LEVEL, LayeredCauldronBlock.MAX_FILL_LEVEL),
Fluids.WATER)); Fluids.WATER));
PatternRegistry.mapPattern(HexPattern.fromAngles("dedwedade", HexDir.SOUTH_WEST), PatternRegistry.mapPattern(HexPattern.fromAngles("dedwedade", HexDir.SOUTH_WEST),
modLoc("destroy_water"), modLoc("destroy_water"),
@ -344,20 +345,26 @@ public class RegisterPatterns {
OpEval.INSTANCE); OpEval.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("aqdee", HexDir.SOUTH_WEST), modLoc("halt"), PatternRegistry.mapPattern(HexPattern.fromAngles("aqdee", HexDir.SOUTH_WEST), modLoc("halt"),
OpHalt.INSTANCE); OpHalt.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("aqqqqq", HexDir.EAST), modLoc("read"), PatternRegistry.mapPattern(HexPattern.fromAngles("aqqqqq", HexDir.EAST), modLoc("read"),
OpRead.INSTANCE); OpRead.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("deeeee", HexDir.EAST), modLoc("write"),
OpWrite.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("aqqqqqe", HexDir.EAST), modLoc("readable"),
OpReadable.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("deeeeeq", HexDir.EAST), modLoc("writable"),
OpWritable.INSTANCE);
// lorge boyes
PatternRegistry.mapPattern(HexPattern.fromAngles("wawqwqwqwqwqw", HexDir.EAST), PatternRegistry.mapPattern(HexPattern.fromAngles("wawqwqwqwqwqw", HexDir.EAST),
modLoc("read/entity"), OpTheCoolerRead.INSTANCE); modLoc("read/entity"), OpTheCoolerRead.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("deeeee", HexDir.EAST), modLoc("write"),
OpWrite.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("wdwewewewewew", HexDir.EAST),
modLoc("write/entity"), OpTheCoolerWrite.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("aqqqqqe", HexDir.EAST), modLoc("readable"),
OpReadable.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("wawqwqwqwqwqwew", HexDir.EAST), PatternRegistry.mapPattern(HexPattern.fromAngles("wawqwqwqwqwqwew", HexDir.EAST),
modLoc("readable/entity"), OpTheCoolerReadable.INSTANCE); modLoc("readable/entity"), OpTheCoolerReadable.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("deeeeeq", HexDir.EAST), modLoc("writable"),
OpWritable.INSTANCE);
PatternRegistry.mapPattern(HexPattern.fromAngles("wdwewewewewewqw", HexDir.EAST),
modLoc("writable/entity"), OpTheCoolerWritable.INSTANCE);
// lorge boyes
PatternRegistry.mapPattern(HexPattern.fromAngles("qeewdweddw", HexDir.NORTH_EAST), PatternRegistry.mapPattern(HexPattern.fromAngles("qeewdweddw", HexDir.NORTH_EAST),
modLoc("read/local"), OpPeekLocal.INSTANCE); modLoc("read/local"), OpPeekLocal.INSTANCE);

View file

@ -0,0 +1,28 @@
package at.petrak.hexcasting.common.casting.operators
import at.petrak.hexcasting.api.spell.ConstManaAction
import at.petrak.hexcasting.api.spell.asActionResult
import at.petrak.hexcasting.api.spell.casting.CastingContext
import at.petrak.hexcasting.api.spell.getEntity
import at.petrak.hexcasting.api.spell.iota.Iota
import at.petrak.hexcasting.api.spell.iota.NullIota
import at.petrak.hexcasting.xplat.IXplatAbstractions
object OpTheCoolerWritable : ConstManaAction {
override val argc = 1
override fun execute(
args: List<Iota>,
ctx: CastingContext
): List<Iota> {
val target = args.getEntity(0, argc)
ctx.assertEntityInRange(target)
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(target)
?: return false.asActionResult
val success = datumHolder.writeIota(NullIota(), true)
return success.asActionResult
}
}

View file

@ -257,6 +257,19 @@
"hexcasting.spell.book.hexcasting:number": "Numerical Reflection", "hexcasting.spell.book.hexcasting:number": "Numerical Reflection",
"hexcasting.spell.book.hexcasting:mask": "Bookkeeper's Gambit", "hexcasting.spell.book.hexcasting:mask": "Bookkeeper's Gambit",
"hexcasting.spell.hexcasting:const/vec/px": "Vector Reflection +X",
"hexcasting.spell.hexcasting:const/vec/py": "Vector Reflection +Y",
"hexcasting.spell.hexcasting:const/vec/pz": "Vector Reflection +Z",
"hexcasting.spell.hexcasting:const/vec/nx": "Vector Reflection -X",
"hexcasting.spell.hexcasting:const/vec/ny": "Vector Reflection -Y",
"hexcasting.spell.hexcasting:const/vec/nz": "Vector Reflection -Z",
"hexcasting.spell.hexcasting:const/vec/0": "Vector Reflection Zero",
"hexcasting.spell.hexcasting:const/true": "True Reflection",
"hexcasting.spell.hexcasting:const/false": "False Reflection",
"hexcasting.spell.hexcasting:const/double/pi": "Arc's Reflection",
"hexcasting.spell.hexcasting:const/double/tau": "Circle's Reflection",
"hexcasting.spell.hexcasting:const/double/e": "Euler's Reflection",
"hexcasting.spell.hexcasting:get_caster": "Mind's Reflection", "hexcasting.spell.hexcasting:get_caster": "Mind's Reflection",
"hexcasting.spell.hexcasting:entity_pos/eye": "Compass' Purification", "hexcasting.spell.hexcasting:entity_pos/eye": "Compass' Purification",
"hexcasting.spell.hexcasting:entity_pos/foot": "Compass' Purification II", "hexcasting.spell.hexcasting:entity_pos/foot": "Compass' Purification II",
@ -274,7 +287,6 @@
"hexcasting.spell.hexcasting:append": "Integration Distillation", "hexcasting.spell.hexcasting:append": "Integration Distillation",
"hexcasting.spell.hexcasting:concat": "Combination Distillation", "hexcasting.spell.hexcasting:concat": "Combination Distillation",
"hexcasting.spell.hexcasting:index": "Selection Distillation", "hexcasting.spell.hexcasting:index": "Selection Distillation",
"hexcasting.spell.hexcasting:for_each": "Thoth's Gambit",
"hexcasting.spell.hexcasting:list_size": "Abacus Purification", "hexcasting.spell.hexcasting:list_size": "Abacus Purification",
"hexcasting.spell.hexcasting:singleton": "Single's Purification", "hexcasting.spell.hexcasting:singleton": "Single's Purification",
"hexcasting.spell.hexcasting:empty_list": "Vacant Reflection", "hexcasting.spell.hexcasting:empty_list": "Vacant Reflection",
@ -305,6 +317,7 @@
"hexcasting.spell.hexcasting:zone_entity/not_item": "Zone Distillation: Non-Item", "hexcasting.spell.hexcasting:zone_entity/not_item": "Zone Distillation: Non-Item",
"hexcasting.spell.hexcasting:zone_entity/not_player": "Zone Distillation: Non-Player", "hexcasting.spell.hexcasting:zone_entity/not_player": "Zone Distillation: Non-Player",
"hexcasting.spell.hexcasting:zone_entity/not_living": "Zone Distillation: Non-Living", "hexcasting.spell.hexcasting:zone_entity/not_living": "Zone Distillation: Non-Living",
"hexcasting.spell.hexcasting:const/null": "Nullary Reflection", "hexcasting.spell.hexcasting:const/null": "Nullary Reflection",
"hexcasting.spell.hexcasting:duplicate": "Gemini Decomposition", "hexcasting.spell.hexcasting:duplicate": "Gemini Decomposition",
"hexcasting.spell.hexcasting:duplicate_n": "Gemini Gambit", "hexcasting.spell.hexcasting:duplicate_n": "Gemini Gambit",
@ -313,14 +326,7 @@
"hexcasting.spell.hexcasting:swap": "Jester's Gambit", "hexcasting.spell.hexcasting:swap": "Jester's Gambit",
"hexcasting.spell.hexcasting:fisherman": "Fisherman's Gambit", "hexcasting.spell.hexcasting:fisherman": "Fisherman's Gambit",
"hexcasting.spell.hexcasting:swizzle": "Swindler's Gambit", "hexcasting.spell.hexcasting:swizzle": "Swindler's Gambit",
"hexcasting.spell.hexcasting:add": "Additive Distillation",
"hexcasting.spell.hexcasting:sub": "Subtractive Distillation",
"hexcasting.spell.hexcasting:mul_dot": "Multiplicative Distillation",
"hexcasting.spell.hexcasting:div_cross": "Division Distillation",
"hexcasting.spell.hexcasting:abs_len": "Length Purification",
"hexcasting.spell.hexcasting:pow_proj": "Power Distillation",
"hexcasting.spell.hexcasting:construct_vec": "Vector Exaltation",
"hexcasting.spell.hexcasting:deconstruct_vec": "Vector Disintegration",
"hexcasting.spell.hexcasting:and_bit": "Intersection Distillation", "hexcasting.spell.hexcasting:and_bit": "Intersection Distillation",
"hexcasting.spell.hexcasting:or_bit": "Unifying Distillation", "hexcasting.spell.hexcasting:or_bit": "Unifying Distillation",
"hexcasting.spell.hexcasting:xor_bit": "Exclusionary Distillation", "hexcasting.spell.hexcasting:xor_bit": "Exclusionary Distillation",
@ -329,9 +335,6 @@
"hexcasting.spell.hexcasting:and": "Conjunction Distillation", "hexcasting.spell.hexcasting:and": "Conjunction Distillation",
"hexcasting.spell.hexcasting:or": "Disjunction Distillation", "hexcasting.spell.hexcasting:or": "Disjunction Distillation",
"hexcasting.spell.hexcasting:xor": "Exclusion Distillation", "hexcasting.spell.hexcasting:xor": "Exclusion Distillation",
"hexcasting.spell.hexcasting:floor": "Floor Purification",
"hexcasting.spell.hexcasting:ceil": "Ceiling Purification",
"hexcasting.spell.hexcasting:modulo": "Modulus Distillation",
"hexcasting.spell.hexcasting:greater": "Maximus Distillation", "hexcasting.spell.hexcasting:greater": "Maximus Distillation",
"hexcasting.spell.hexcasting:less": "Minimus Distillation", "hexcasting.spell.hexcasting:less": "Minimus Distillation",
@ -349,6 +352,9 @@
"hexcasting.spell.hexcasting:div_cross": "Division Dstl.", "hexcasting.spell.hexcasting:div_cross": "Division Dstl.",
"hexcasting.spell.hexcasting:abs_len": "Length Purification", "hexcasting.spell.hexcasting:abs_len": "Length Purification",
"hexcasting.spell.hexcasting:pow_proj": "Power Distillation", "hexcasting.spell.hexcasting:pow_proj": "Power Distillation",
"hexcasting.spell.hexcasting:floor": "Floor Purification",
"hexcasting.spell.hexcasting:ceil": "Ceiling Purification",
"hexcasting.spell.hexcasting:modulo": "Modulus Distillation",
"hexcasting.spell.hexcasting:construct_vec": "Vector Exaltation", "hexcasting.spell.hexcasting:construct_vec": "Vector Exaltation",
"hexcasting.spell.hexcasting:deconstruct_vec": "Vector Disintegration", "hexcasting.spell.hexcasting:deconstruct_vec": "Vector Disintegration",
"hexcasting.spell.hexcasting:sin": "Sine Purification", "hexcasting.spell.hexcasting:sin": "Sine Purification",
@ -362,13 +368,17 @@
"hexcasting.spell.hexcasting:coerce_axial": "Axial Purification", "hexcasting.spell.hexcasting:coerce_axial": "Axial Purification",
"hexcasting.spell.hexcasting:read": "Scribe's Reflection", "hexcasting.spell.hexcasting:read": "Scribe's Reflection",
"hexcasting.spell.hexcasting:read/entity": "Chronicler's Purification",
"hexcasting.spell.hexcasting:write": "Scribe's Gambit", "hexcasting.spell.hexcasting:write": "Scribe's Gambit",
"hexcasting.spell.hexcasting:write/entity": "Chronicler's Gambit",
"hexcasting.spell.hexcasting:readable": "Auditor's Reflection", "hexcasting.spell.hexcasting:readable": "Auditor's Reflection",
"hexcasting.spell.hexcasting:writable": "Assessor's Reflection",
"hexcasting.spell.hexcasting:readable/entity": "Auditor's Purification", "hexcasting.spell.hexcasting:readable/entity": "Auditor's Purification",
"hexcasting.spell.hexcasting:writable": "Auditor's Purification II", "hexcasting.spell.hexcasting:writable/entity": "Assessor's Purification",
"hexcasting.spell.hexcasting:akashic/read": "Akasha's Distillation", "hexcasting.spell.hexcasting:akashic/read": "Akasha's Distillation",
"hexcasting.spell.hexcasting:akashic/write": "Akasha's Gambit", "hexcasting.spell.hexcasting:akashic/write": "Akasha's Gambit",
"hexcasting.spell.hexcasting:read/entity": "Scribe's Purification", "hexcasting.spell.hexcasting:read/local": "Muninn's Reflection",
"hexcasting.spell.hexcasting:write/local": "Huginn's Gambit",
"hexcasting.spell.hexcasting:print": "Reveal", "hexcasting.spell.hexcasting:print": "Reveal",
"hexcasting.spell.hexcasting:beep": "Make Note", "hexcasting.spell.hexcasting:beep": "Make Note",
@ -421,29 +431,8 @@
"hexcasting.spell.hexcasting:close_paren": "Retrospection", "hexcasting.spell.hexcasting:close_paren": "Retrospection",
"hexcasting.spell.hexcasting:escape": "Consideration", "hexcasting.spell.hexcasting:escape": "Consideration",
"hexcasting.spell.hexcasting:eval": "Hermes' Gambit", "hexcasting.spell.hexcasting:eval": "Hermes' Gambit",
"hexcasting.spell.hexcasting:for_each": "Thoth's Gambit",
"hexcasting.spell.hexcasting:halt": "Charon's Gambit", "hexcasting.spell.hexcasting:halt": "Charon's Gambit",
"hexcasting.spell.hexcasting:read/local": "Muninn's Reflection",
"hexcasting.spell.hexcasting:write/local": "Huginn's Gambit",
"hexcasting.spell.hexcasting:read": "Scribe's Reflection",
"hexcasting.spell.hexcasting:write": "Scribe's Gambit",
"hexcasting.spell.hexcasting:readable": "Auditor's Reflection",
"hexcasting.spell.hexcasting:readable/entity": "Auditor's Purification",
"hexcasting.spell.hexcasting:writable": "Auditor's Purification II",
"hexcasting.spell.hexcasting:akashic/read": "Akasha's Distillation",
"hexcasting.spell.hexcasting:akashic/write": "Akasha's Gambit",
"hexcasting.spell.hexcasting:read/entity": "Scribe's Purification",
"hexcasting.spell.hexcasting:const/vec/px": "Vector Reflection +X",
"hexcasting.spell.hexcasting:const/vec/py": "Vector Reflection +Y",
"hexcasting.spell.hexcasting:const/vec/pz": "Vector Reflection +Z",
"hexcasting.spell.hexcasting:const/vec/nx": "Vector Reflection -X",
"hexcasting.spell.hexcasting:const/vec/ny": "Vector Reflection -Y",
"hexcasting.spell.hexcasting:const/vec/nz": "Vector Reflection -Z",
"hexcasting.spell.hexcasting:const/vec/0": "Vector Reflection Zero",
"hexcasting.spell.hexcasting:const/true": "True Reflection",
"hexcasting.spell.hexcasting:const/false": "False Reflection",
"hexcasting.spell.hexcasting:const/double/pi": "Arc's Reflection",
"hexcasting.spell.hexcasting:const/double/tau": "Circle's Reflection",
"hexcasting.spell.hexcasting:const/double/e": "Euler's Reflection",
"hexcasting.spell.hexcasting:number": "Numerical Reflection: %s", "hexcasting.spell.hexcasting:number": "Numerical Reflection: %s",
"hexcasting.spell.hexcasting:mask": "Bookkeeper's Gambit: %s", "hexcasting.spell.hexcasting:mask": "Bookkeeper's Gambit: %s",
"hexcasting.spell.null": "Unknown Pattern", "hexcasting.spell.null": "Unknown Pattern",
@ -588,7 +577,7 @@
"hexcasting.page.101.4": "It's interesting to note that the $(italic)rotation/$ of a pattern doesn't seem to matter at all. These two patterns both perform an action called $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$, for example.", "hexcasting.page.101.4": "It's interesting to note that the $(italic)rotation/$ of a pattern doesn't seem to matter at all. These two patterns both perform an action called $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$, for example.",
"hexcasting.page.101.5": "A _Hex is cast by drawing (valid) actions in sequence. Each action might do one of a few things:$(li)Gather some information about the environment, leaving it on the top of the stack;$(li)manipulate the info gathered (e.g. adding two numbers); or$(li)perform some magical effect, like summoning lightning or an explosion. (These actions are called \"spells.\")$(p)When I start casting a _Hex, it creates an empty stack. Actions manipulate the top of that stack.", "hexcasting.page.101.5": "A _Hex is cast by drawing (valid) actions in sequence. Each action might do one of a few things:$(li)Gather some information about the environment, leaving it on the top of the stack;$(li)manipulate the info gathered (e.g. adding two numbers); or$(li)perform some magical effect, like summoning lightning or an explosion. (These actions are called \"spells.\")$(p)When I start casting a _Hex, it creates an empty stack. Actions manipulate the top of that stack.",
"hexcasting.page.101.6": "For example, $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$ will create an iota representing $(italic)me/$, the caster, and add it to the top of the stack. $(l:patterns/basics#hexcasting:get_entity_pos)$(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.", "hexcasting.page.101.6": "For example, $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$ will create an iota representing $(italic)me/$, the caster, and add it to the top of the stack. $(l:patterns/basics#hexcasting:get_entity_pos)$(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.",
"hexcasting.page.101.7": "$(thing)Iotas/$ can represent things like myself or my position, but there are several other types I can manipulate with $(thing)Actions$(0). 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;", "hexcasting.page.101.7": "$(thing)Iotas/$ can represent things like myself or my position, but there are several other types I can manipulate with $(thing)Actions/$. Here's a comprehensive list:$(li)Numbers (which some legends called \"doubles\");$(li)Vectors, a collection of three numbers representing a position, movement, or direction in the world;",
"hexcasting.page.101.8": "$(li)Entities, like myself, chickens, and minecarts;$(li)Influences, peculiar types of iota that seem to represent abstract ideas;$(li)Patterns themselves, used for crafting magic items and truly mind-boggling feats like $(italic)spells that cast other spells/$; and$(li)A list of several of the above, gathered into a single iota.", "hexcasting.page.101.8": "$(li)Entities, like myself, chickens, and minecarts;$(li)Influences, peculiar types of iota that seem to represent abstract ideas;$(li)Patterns themselves, used for crafting magic items and truly mind-boggling feats like $(italic)spells that cast other spells/$; and$(li)A list of several of the above, gathered into a single iota.",
"hexcasting.page.101.9": "Of course, there's no such thing as a free lunch. All spells, and certain other actions, require _media as payment.$(br2)The best I can figure, a _Hex is a little bit like a plan of action presented to Nature-- in this analogy, the _media is used to provide the arguments to back it up, so Nature will accept your plan and carry it out.", "hexcasting.page.101.9": "Of course, there's no such thing as a free lunch. All spells, and certain other actions, require _media as payment.$(br2)The best I can figure, a _Hex is a little bit like a plan of action presented to Nature-- in this analogy, the _media is used to provide the arguments to back it up, so Nature will accept your plan and carry it out.",
"hexcasting.page.101.10": "That aside, it doesn't seem like anyone has done much research on exactly how $(italic)much/$ any particular piece of $(l:items/amethyst)$(item)amethyst/$ is valued. The best I can tell, an $(l:items/amethyst)$(item)Amethyst Shard/$ is worth about five pieces of $(l:items/amethyst)$(item)Amethyst Dust/$, and a $(l:items/amethyst)$(item)Charged Amethyst Crystal/$ is worth about ten.$(br2)Strangely enough, it seems like no other form of $(l:items/amethyst)$(item)amethyst/$ is suitable to be used in the casting of a _Hex. I suspect that whole blocks or crystals are too solid to be easily unraveled into _media.", "hexcasting.page.101.10": "That aside, it doesn't seem like anyone has done much research on exactly how $(italic)much/$ any particular piece of $(l:items/amethyst)$(item)amethyst/$ is valued. The best I can tell, an $(l:items/amethyst)$(item)Amethyst Shard/$ is worth about five pieces of $(l:items/amethyst)$(item)Amethyst Dust/$, and a $(l:items/amethyst)$(item)Charged Amethyst Crystal/$ is worth about ten.$(br2)Strangely enough, it seems like no other form of $(l:items/amethyst)$(item)amethyst/$ is suitable to be used in the casting of a _Hex. I suspect that whole blocks or crystals are too solid to be easily unraveled into _media.",
@ -959,13 +948,16 @@
"hexcasting.page.patterns_as_iotas.parens.3": "Also, I can escape the special behavior of $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ by drawing a $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ before them, which will simply add them to the list without affecting which the number of $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$ I need to return to casting.$(br2)If I draw two $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Considerations/$ in a row while $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)introspecting/$, it will add a single $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ to the list.", "hexcasting.page.patterns_as_iotas.parens.3": "Also, I can escape the special behavior of $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Intro-/$ and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ by drawing a $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ before them, which will simply add them to the list without affecting which the number of $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$ I need to return to casting.$(br2)If I draw two $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Considerations/$ in a row while $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)introspecting/$, it will add a single $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$ to the list.",
"hexcasting.entry.readwrite": "Reading and Writing", "hexcasting.entry.readwrite": "Reading and Writing",
"hexcasting.page.readwrite.read": "Copy the iota stored in the item (such as a $(l:items/scroll)$(item)Scroll/$, $(l:items/focus)$(item)Focus/$, $(l:items/abacus)$(item)Abacus/$ or $(l:items/spellbook)$(item)Spellbook/$) in my other hand, and add it to the stack.", "hexcasting.page.readwrite.1": "This section deals with the storage of $(thing)Iotas/$ in a more permanent medium. Nearly any iota can be stored to a suitable item, such as a $(l:items/focus)$(item)Focus/$ or $(l:items/spellbook)$(item)Spellbook/$), and read back later. Certain items, such as an $(l:items/abacus)$(item)Abacus/$, can only be read from.$(br2)Iotas are usually read and written from the other hand, but it is also possible to read and write with an item when it is sitting on the ground as an item entity, or when in an item frame.",
"hexcasting.page.readwrite.readable": "If the item in my other hand holds an iota I can read, returns 1. Otherwise, returns 0.", "hexcasting.page.readwrite.2": "There may be other entities I can interact with in this way. For example, a $(l:items/scroll)$(item)Scroll/$ hung on the wall can have its pattern read off of it.$(br2)However, it seems I am unable to save a reference to another player, only me. I suppose an entity reference is similar to the idea of a True Name; perhaps Nature is helping to keep our Names out of the hands of enemies. If I want a friend to have my Name I can make a $(l:items/focus)$(item)Focus/$ for them.",
"hexcasting.page.readwrite.read/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is read out of an entity instead of my other hand. Pairs well with $(l:items/scroll)$(item)Scrolls/$ or $(item)Item Frames/$.", "hexcasting.page.readwrite.read": "Copy the iota stored in the item in my other hand and add it to the stack.",
"hexcasting.page.readwrite.readable/entity": "Also like $(l:patterns/readwrite#hexcasting:readable)$(action)Auditor's Reflection/$, but the status is once again read out of an entity instead of my other hand.", "hexcasting.page.readwrite.write": "Remove the top iota from the stack, and save it into the item in my other hand.",
"hexcasting.page.readwrite.write.1": "Remove the top iota from the stack, and save it into the item in my other hand.", "hexcasting.page.readwrite.read/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is read out of an entity instead of my other hand.",
"hexcasting.page.readwrite.write.2": "I can use this spell to save iotas into an (unsealed) $(l:items/focus)$(item)Focus/$ or $(l:items/spellbook)$(item)Spellbook/$, or I can copy patterns onto $(l:items/scroll)$(item)Scrolls/$ or $(l:items/slate)$(item)Slates/$ with the help of $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$.$(br2)However, it seems I am unable to save a reference to another player, only me. I suppose an entity reference is similar to the idea of a True Name; perhaps Nature is helping to keep our Names out of the hands of enemies. If I want a friend to have my Name I can make a $(l:items/focus)$(item)Focus/$ for them.", "hexcasting.page.readwrite.write/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is written to an entity instead of my other hand.",
"hexcasting.page.readwrite.writable": "If I could save the given iota into the item in my other hand, returns 1. Otherwise, returns 0.", "hexcasting.page.readwrite.readable": "If the item in my other hand holds an iota I can read, returns True. Otherwise, returns False.",
"hexcasting.page.readwrite.readable/entity": "Like $(l:patterns/readwrite#hexcasting:readable)$(action)Auditor's Reflection/$, but the readability of an entity is checked instead of my other hand.",
"hexcasting.page.readwrite.writable": "If I could save an iota into the item in my other hand, returns True. Otherwise, returns False.",
"hexcasting.page.readwrite.writable/entity": "Like $(l:patterns/readwrite#hexcasting:writable)$(action)Assessor's Reflection/$, but the writability of an entity is checked instead of my other hand.",
"hexcasting.page.readwrite.local.title": "The Ravenmind", "hexcasting.page.readwrite.local.title": "The Ravenmind",
"hexcasting.page.readwrite.local": "Items are not the only places I can store information, however. I am also able to store that information in the _media of the _Hex itself, much like the stack, but separate. Texts refer to this as the $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$. It holds a single iota, much like a $(l:items/focus)$(item)Focus/$, and begins with $(l:casting/influences)$(thing)Null/$ like the same. It is preserved between iterations of $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, but only lasts as long as the _Hex it's a part of. Once I stop casting, the value will be lost.", "hexcasting.page.readwrite.local": "Items are not the only places I can store information, however. I am also able to store that information in the _media of the _Hex itself, much like the stack, but separate. Texts refer to this as the $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$. It holds a single iota, much like a $(l:items/focus)$(item)Focus/$, and begins with $(l:casting/influences)$(thing)Null/$ like the same. It is preserved between iterations of $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, but only lasts as long as the _Hex it's a part of. Once I stop casting, the value will be lost.",
"hexcasting.page.readwrite.write/local": "Removes the top iota from the stack, and saves it to my $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$, storing it there until I stop casting the _Hex.", "hexcasting.page.readwrite.write/local": "Removes the top iota from the stack, and saves it to my $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$, storing it there until I stop casting the _Hex.",

View file

@ -6,6 +6,8 @@
"advancement": "hexcasting:root", "advancement": "hexcasting:root",
"read_by_default": true, "read_by_default": true,
"pages": [ "pages": [
"hexcasting.page.readwrite.1",
"hexcasting.page.readwrite.2",
{ {
"type": "hexcasting:pattern", "type": "hexcasting:pattern",
"op_id": "hexcasting:read", "op_id": "hexcasting:read",
@ -16,11 +18,11 @@
}, },
{ {
"type": "hexcasting:pattern", "type": "hexcasting:pattern",
"op_id": "hexcasting:readable", "op_id": "hexcasting:write",
"anchor": "hexcasting:readable", "anchor": "hexcasting:write",
"input": "", "input": "any",
"output": "num", "output": "",
"text": "hexcasting.page.readwrite.readable" "text": "hexcasting.page.readwrite.write"
}, },
{ {
"type": "hexcasting:pattern", "type": "hexcasting:pattern",
@ -32,32 +34,44 @@
}, },
{ {
"type": "hexcasting:pattern", "type": "hexcasting:pattern",
"op_id": "hexcasting:readable/entity", "op_id": "hexcasting:write/entity",
"anchor": "hexcasting:readable/entity", "anchor": "hexcasting:write/entity",
"input": "entity", "input": "any, entity",
"output": "num", "output": "",
"text": "hexcasting.page.readwrite.readable/entity" "text": "hexcasting.page.readwrite.write/entity"
}, },
{ {
"type": "hexcasting:pattern", "type": "hexcasting:pattern",
"op_id": "hexcasting:write", "op_id": "hexcasting:readable",
"anchor": "hexcasting:write", "anchor": "hexcasting:readable",
"input": "any", "input": "",
"output": "", "output": "bool",
"text": "hexcasting.page.readwrite.write.1" "text": "hexcasting.page.readwrite.readable"
}, },
{ {
"type": "patchouli:text", "type": "hexcasting:pattern",
"text": "hexcasting.page.readwrite.write.2" "op_id": "hexcasting:readable/entity",
"anchor": "hexcasting:readable/entity",
"input": "entity",
"output": "bool",
"text": "hexcasting.page.readwrite.readable/entity"
}, },
{ {
"type": "hexcasting:pattern", "type": "hexcasting:pattern",
"op_id": "hexcasting:writable", "op_id": "hexcasting:writable",
"anchor": "hexcasting:writable", "anchor": "hexcasting:writable",
"input": "any", "input": "",
"output": "num", "output": "bool",
"text": "hexcasting.page.readwrite.writable" "text": "hexcasting.page.readwrite.writable"
}, },
{
"type": "hexcasting:pattern",
"op_id": "hexcasting:writable/entity",
"anchor": "hexcasting:writable/entity",
"input": "entity",
"output": "bool",
"text": "hexcasting.page.readwrite.writable/entity"
},
{ {
"type": "patchouli:text", "type": "patchouli:text",
"anchor": "hexcasting:local", "anchor": "hexcasting:local",