links everywhere!
spellbooks can be sealed too also add some nether wood wands
|
@ -228,21 +228,21 @@ f41fb9405b869644333872cd1ece40b1b07410d2 assets/hexcasting/models/item/dye_color
|
|||
07959b86ed25559b4960c5f4aa7bab88bf9b5bf1 assets/hexcasting/models/item/dye_colorizer_yellow.json
|
||||
2d92703e675e4e5b1c2ee6ec4e9d4ca592bf1b40 assets/hexcasting/models/item/empty_directrix.json
|
||||
0a552831b1ae261666bf1c8f76af55582becddaa assets/hexcasting/models/item/empty_impetus.json
|
||||
f7f98a306a8a0529a54446b4876e624201525a1d assets/hexcasting/models/item/focus.json
|
||||
0146e90177ed71b25d2936ff3b2d9975e47c5142 assets/hexcasting/models/item/focus_double.json
|
||||
167b8e3f3367f12f8045369bea26d7a48e59b0d0 assets/hexcasting/models/item/focus_double_sealed.json
|
||||
3ff6209fdfc13c6f5e4741a5892787cb5700a34c assets/hexcasting/models/item/focus_empty.json
|
||||
290e926221c3bc25ebd1b2c7afbbb7a934a27028 assets/hexcasting/models/item/focus_empty_sealed.json
|
||||
6363b597c6512e8e1c860f9663ea5f60036136d4 assets/hexcasting/models/item/focus_entity.json
|
||||
bbfb739e2c82c53aa488b53c79404a366b93ebdb assets/hexcasting/models/item/focus_entity_sealed.json
|
||||
9afd5b6aaf353c6fe8bda157186e37467a08decf assets/hexcasting/models/item/focus_list.json
|
||||
0886b5d6aead6b1ffc8d690560a9a2cdd87e5e37 assets/hexcasting/models/item/focus_list_sealed.json
|
||||
8aef1a7d891ddf9a71715c1da800abeb1980048e assets/hexcasting/models/item/focus_pattern.json
|
||||
a6cabea2984ed2b5b0dcd0087c762c9b9892a5fe assets/hexcasting/models/item/focus_pattern_sealed.json
|
||||
566a3b09ac71f0d91067112127ed1762665ccca3 assets/hexcasting/models/item/focus_vec3.json
|
||||
44db2dda5b3d2b7d1591804bdaaf5692c2a4cc5f assets/hexcasting/models/item/focus_vec3_sealed.json
|
||||
5228a94d6ef14d1694551d33646d3b103fdf658b assets/hexcasting/models/item/focus_widget.json
|
||||
48a791a807603d131cdf8ea16948164006a6dc6f assets/hexcasting/models/item/focus_widget_sealed.json
|
||||
8b351da7cc05de585199a0412bee84d0031009d3 assets/hexcasting/models/item/focus.json
|
||||
918b26b139eaf3fd538c2bbe73269ba0652db66f assets/hexcasting/models/item/focus_double.json
|
||||
5274e336ffae7c9d975e09b289ae9d59af0f7801 assets/hexcasting/models/item/focus_double_sealed.json
|
||||
5efbeb3c7eb1a07f07bdda216774efff266a1c87 assets/hexcasting/models/item/focus_empty.json
|
||||
3098c7033ee021b9fe7430ffc61e3784f0e2e1e7 assets/hexcasting/models/item/focus_empty_sealed.json
|
||||
52b254553abf4a696f72b97632bce4e7caec20cc assets/hexcasting/models/item/focus_entity.json
|
||||
d3dfe524d474993fd1e7a4d0ac0f5d6507bbf90d assets/hexcasting/models/item/focus_entity_sealed.json
|
||||
78c0e9b1c7aecc9a6f4f47cd2c5847c76d629047 assets/hexcasting/models/item/focus_list.json
|
||||
9685b003b3981ab6a726e1149aeeafdbab5c498b assets/hexcasting/models/item/focus_list_sealed.json
|
||||
b9cce6a08f0b1b5c40331e0e48c75311f6a4f4f7 assets/hexcasting/models/item/focus_pattern.json
|
||||
56b92e56d2896821054057ec09c06c4abc188942 assets/hexcasting/models/item/focus_pattern_sealed.json
|
||||
6c12d6c526fd85ace4a7dd04fe020aaa63dbef19 assets/hexcasting/models/item/focus_vec3.json
|
||||
898b85fbeb79346ead757002fe5b7081df90ac98 assets/hexcasting/models/item/focus_vec3_sealed.json
|
||||
1074fb64b8de8571043415349e9e57e1260a04c7 assets/hexcasting/models/item/focus_widget.json
|
||||
a1308cfa2e67684f5ba14a9726830936f76d68e2 assets/hexcasting/models/item/focus_widget_sealed.json
|
||||
991af62ccdc4c063321cc7994e0a106a432d1487 assets/hexcasting/models/item/impetus_look.json
|
||||
199a1c37b3fdb1e7da93408bbe85c5a2222e264e assets/hexcasting/models/item/impetus_rightclick.json
|
||||
458550229be6036be246e290e99b643caa8b3f8a assets/hexcasting/models/item/impetus_storedplayer.json
|
||||
|
@ -286,14 +286,21 @@ d06214a759ea5db686cdc5982baa74e1bd678815 assets/hexcasting/models/item/slate.jso
|
|||
e7aa1f9b9eaf20cbeb19eaf9cb96f3276eca6dfd assets/hexcasting/models/item/slate_blank.json
|
||||
cc66962ddeef9b9c3a623eef178b352605f1c922 assets/hexcasting/models/item/slate_block.json
|
||||
1b61e7b2d78d4c8a2f1af6fb5c69ac4ac55abd50 assets/hexcasting/models/item/slate_written.json
|
||||
7a8c14020214d280f6e74a676ce85fd34309123a assets/hexcasting/models/item/spellbook.json
|
||||
3693e033ab6a97c6daa3ef9ad874ac19a12e4830 assets/hexcasting/models/item/spellbook_double.json
|
||||
3cb2d9a21e2e563ae312122d4782f853bb02d546 assets/hexcasting/models/item/spellbook_empty.json
|
||||
2efe8bf6d19e69678947a0671eda4602f8a6e9be assets/hexcasting/models/item/spellbook_entity.json
|
||||
340f709290da53ba7df45aae868b39cc24c0ca7b assets/hexcasting/models/item/spellbook_list.json
|
||||
433e3374ba42e36c3a407bc2ab6c8a963d222946 assets/hexcasting/models/item/spellbook_pattern.json
|
||||
a217793791eba1fe7ee7512c3937a85cd1add8aa assets/hexcasting/models/item/spellbook_vec3.json
|
||||
7244ab0561bdd370cbd88c0d3dae3b49a3819b2a assets/hexcasting/models/item/spellbook_widget.json
|
||||
843e66a2b963573365f098af5723d8c4d5af37d4 assets/hexcasting/models/item/spellbook.json
|
||||
01454c1db3f6bb502511d45591ea718a5aa87f9f assets/hexcasting/models/item/spellbook_double.json
|
||||
8530c80017482ae8fb543b2f72c53849008f563d assets/hexcasting/models/item/spellbook_double_sealed.json
|
||||
c14fabc78bc9030e7e37c96437109756a3f9cfa6 assets/hexcasting/models/item/spellbook_empty.json
|
||||
98a9de7ef2263123c9adb543d441b8355d1f7454 assets/hexcasting/models/item/spellbook_empty_sealed.json
|
||||
f1d25e6bc3ec51ed55cc8d47834d61afbbb7396a assets/hexcasting/models/item/spellbook_entity.json
|
||||
8cd49e7b8bda25c958d44b9c4322b26ae020fc4a assets/hexcasting/models/item/spellbook_entity_sealed.json
|
||||
e0e05dcfdbd5e73440c1d4058c9d434e5dbbc49f assets/hexcasting/models/item/spellbook_list.json
|
||||
33aa06f5ab1060766a25bcf7418884776b7a175d assets/hexcasting/models/item/spellbook_list_sealed.json
|
||||
25754c8da888fd11806c9c4007bd1f6b44fe6b52 assets/hexcasting/models/item/spellbook_pattern.json
|
||||
ae2706f1d425a8ce4a465fcf9616fe43349ac751 assets/hexcasting/models/item/spellbook_pattern_sealed.json
|
||||
262bb5a722597a4342923da95a1fc9584ffc8a56 assets/hexcasting/models/item/spellbook_vec3.json
|
||||
30793b8eca7b185aea2c05b5848803f191926f6d assets/hexcasting/models/item/spellbook_vec3_sealed.json
|
||||
23109ba9a494cf450dd0cf941287bb4b3b9e7b9b assets/hexcasting/models/item/spellbook_widget.json
|
||||
c2c5175f20444c3e7c396509a61ba274441c0e91 assets/hexcasting/models/item/spellbook_widget_sealed.json
|
||||
4a33e6984bdf63dc4b7a5da5643bb1155b62b636 assets/hexcasting/models/item/sub_sandwich.json
|
||||
3b1f2d0b315e8117f4c5fe593bd3ae028617b413 assets/hexcasting/models/item/trinket.json
|
||||
eeaa26fe380975188cd2d6a93bd5e324dc509767 assets/hexcasting/models/item/trinket_filled.json
|
||||
|
@ -302,11 +309,13 @@ c569d7c1b2f80b76695522b0f84f7be0f3042e07 assets/hexcasting/models/item/wand_acac
|
|||
9ffee2d6957a6c5ba0472b809062516ad95d043b assets/hexcasting/models/item/wand_akashic.json
|
||||
aa9b7670c627296d8b25497e6730d1b9983e39f3 assets/hexcasting/models/item/wand_birch.json
|
||||
5fcaadc239c6b325f483a2ebf615c2ee82ed7647 assets/hexcasting/models/item/wand_bosnia.json
|
||||
8d055f78324a5a4ffbbc0c80ba32f446997bd2ad assets/hexcasting/models/item/wand_crimson.json
|
||||
3e26bd72cc6edc90e1933b4b877d88d93d69867b assets/hexcasting/models/item/wand_dark_oak.json
|
||||
2d441c1383b4268f773bc360bbca0bc699e4eddc assets/hexcasting/models/item/wand_jungle.json
|
||||
a415fc73fe80dc76885f4ba16ec81251bed93d15 assets/hexcasting/models/item/wand_oak.json
|
||||
f043370d6762b976e33dd6e9562d5e1659d32bbf assets/hexcasting/models/item/wand_old.json
|
||||
59e0a112daf74023ca10248b04fb674ae03c59f9 assets/hexcasting/models/item/wand_spruce.json
|
||||
0af04312fc4ca98dd5a7e65595f32cbfda0e93e8 assets/hexcasting/models/item/wand_warped.json
|
||||
637e118fc7c371db684d0d831a46833b5851e582 data/forge/loot_modifiers/global_loot_modifiers.json
|
||||
4d4caaea035ae4ee878843dd2455042b299b4e5e data/forge/tags/items/dusts/amethyst.json
|
||||
05e86742a71afd740f47639be62f93bc9898fcde data/forge/tags/items/gems.json
|
||||
|
@ -391,10 +400,12 @@ eb17a23e7a9543f33922c056cdf0d63def176bf2 data/hexcasting/advancements/recipes/he
|
|||
804f0e5c6c32c7310129437ccca3ffc148bb973b data/hexcasting/advancements/recipes/hexcasting/wand_acacia.json
|
||||
2d52419f3fcdc10643cdb8cef89858efc0ad4d11 data/hexcasting/advancements/recipes/hexcasting/wand_akashic.json
|
||||
f32ccb2d36d773215d91dee46bec70a20af501c3 data/hexcasting/advancements/recipes/hexcasting/wand_birch.json
|
||||
7c0107192c0e24ff9f23ab0f59834b6081ca5b33 data/hexcasting/advancements/recipes/hexcasting/wand_crimson.json
|
||||
67d4c536be3762833a4af33cd7cdfc68eb4ad629 data/hexcasting/advancements/recipes/hexcasting/wand_dark_oak.json
|
||||
318c04242e7b9c302e68b3bfe6dd11ec0fc8a863 data/hexcasting/advancements/recipes/hexcasting/wand_jungle.json
|
||||
30950c6dd31102cf145f8f7d2979df0736a7ba1e data/hexcasting/advancements/recipes/hexcasting/wand_oak.json
|
||||
f8d2872c4e692153049b6ae4879755a079954763 data/hexcasting/advancements/recipes/hexcasting/wand_spruce.json
|
||||
3b2bcffe70bb1f732f06c2560cef66de6c273d62 data/hexcasting/advancements/recipes/hexcasting/wand_warped.json
|
||||
d31956749bebbcb3f0d3c37f89b569642ac8c2fb data/hexcasting/advancements/root.json
|
||||
739cbdf7f204132f2acfab4df8d21c6197aa1456 data/hexcasting/advancements/y_u_no_cast_angy.json
|
||||
70a8f77d38affa642afbfceebe129358737b09ac data/hexcasting/loot_modifiers/amethyst_cluster_charged.json
|
||||
|
@ -482,6 +493,7 @@ fe8a7288aa27c07932a31c64ff8fadb943b278d5 data/hexcasting/recipes/dye_colorizer_p
|
|||
bc79add419b8791e68b35076355fea11dfc640c6 data/hexcasting/recipes/dye_colorizer_white.json
|
||||
c5341777604a4be5a311e300a4de89967b7caad2 data/hexcasting/recipes/dye_colorizer_yellow.json
|
||||
db8a00478e1c4b0f9b143b5946d1ba25e489591d data/hexcasting/recipes/dynamic/seal_focus.json
|
||||
3a376402af89128dc37adaa0a72b6de66d58309d data/hexcasting/recipes/dynamic/seal_spellbook.json
|
||||
a952d33cda8b805237052b602cf066683c4bf261 data/hexcasting/recipes/empty_directrix.json
|
||||
b7c248d2627c2a2b398d1c50181c1e0863612424 data/hexcasting/recipes/empty_impetus.json
|
||||
7eaf7ee280d1982ecbaf5175cea5c5a7c7804f98 data/hexcasting/recipes/focus.json
|
||||
|
@ -514,16 +526,18 @@ d14cf2f8f0895a5b6dc09b7582c0abf1c2514adf data/hexcasting/recipes/sub_sandwich.js
|
|||
2ad42dd4a4877a23cb7f45e8b75c9f53f58d12f5 data/hexcasting/recipes/wand_acacia.json
|
||||
1157a6545ece0e2b8734b8a1428f9a3c021c8b73 data/hexcasting/recipes/wand_akashic.json
|
||||
f6fab3a3296d157a2b969af0c86eb0e5a9f14df4 data/hexcasting/recipes/wand_birch.json
|
||||
0cd94b91d64a31a251eebbb37845d165c603452e data/hexcasting/recipes/wand_crimson.json
|
||||
022dc03ce6f2915459c7bf75d44ec0b8bb3e4083 data/hexcasting/recipes/wand_dark_oak.json
|
||||
2ec90cd941acad6eabfb38d21466ef8e9b9bf2c1 data/hexcasting/recipes/wand_jungle.json
|
||||
f7bbc60f547a02378ddb1f23395add4822725fed data/hexcasting/recipes/wand_oak.json
|
||||
196c49b203748e57a9b2b1259055b9de4b6be8d8 data/hexcasting/recipes/wand_spruce.json
|
||||
db09b7fc38bdaffa15b57bd361da8529c7bc943e data/hexcasting/recipes/wand_warped.json
|
||||
f3c6b6917e504e1c3d5d8875f7cce6f311e791d2 data/hexcasting/tags/blocks/akashic_logs.json
|
||||
b596d96eebb4f7bad5930f4eebc589f292b59c98 data/hexcasting/tags/blocks/akashic_planks.json
|
||||
f3c6b6917e504e1c3d5d8875f7cce6f311e791d2 data/hexcasting/tags/items/akashic_logs.json
|
||||
b596d96eebb4f7bad5930f4eebc589f292b59c98 data/hexcasting/tags/items/akashic_planks.json
|
||||
fe60c763bfe0afa0a266b7390edfc62bde8941b7 data/hexcasting/tags/items/phial_base.json
|
||||
3c004e7bc6a3560c8ace5d7e775497f3e342157e data/hexcasting/tags/items/wands.json
|
||||
d1b8725bbfc01e2d9a02ef84c911fef89b3636a9 data/hexcasting/tags/items/wands.json
|
||||
5f3e3813757d8300acad523d45ac7c4d85728399 data/minecraft/tags/blocks/buttons.json
|
||||
1dc89dff5d4fadb95d9b5a2a5a910f63ea4b02bf data/minecraft/tags/blocks/crystal_sound_blocks.json
|
||||
556d2e6068965e90c307a435b372ae761cd1c606 data/minecraft/tags/blocks/doors.json
|
||||
|
|
|
@ -2,85 +2,99 @@
|
|||
"overrides": [
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": -0.01
|
||||
"hexcasting:datatype": 0.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_empty"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 0.99
|
||||
"hexcasting:datatype": 1.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_entity"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 1.99
|
||||
"hexcasting:datatype": 2.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_double"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 2.99
|
||||
"hexcasting:datatype": 3.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_vec3"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 3.99
|
||||
"hexcasting:datatype": 4.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_widget"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 4.99
|
||||
"hexcasting:datatype": 5.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_list"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 5.99
|
||||
"hexcasting:datatype": 6.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_pattern"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 99.99
|
||||
"hexcasting:datatype": 0.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_empty_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 100.99
|
||||
"hexcasting:datatype": 1.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_entity_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 101.99
|
||||
"hexcasting:datatype": 2.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_double_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 102.99
|
||||
"hexcasting:datatype": 3.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_vec3_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 103.99
|
||||
"hexcasting:datatype": 4.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_widget_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 104.99
|
||||
"hexcasting:datatype": 5.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_list_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 105.99
|
||||
"hexcasting:datatype": 6.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/focus_pattern_sealed"
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_double"
|
||||
"layer0": "hexcasting:item/focus/double"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_double_sealed"
|
||||
"layer0": "hexcasting:item/focus/double_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_empty"
|
||||
"layer0": "hexcasting:item/focus/empty"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_empty_sealed"
|
||||
"layer0": "hexcasting:item/focus/empty_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_entity"
|
||||
"layer0": "hexcasting:item/focus/entity"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_entity_sealed"
|
||||
"layer0": "hexcasting:item/focus/entity_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_list"
|
||||
"layer0": "hexcasting:item/focus/list"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_list_sealed"
|
||||
"layer0": "hexcasting:item/focus/list_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_pattern"
|
||||
"layer0": "hexcasting:item/focus/pattern"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_pattern_sealed"
|
||||
"layer0": "hexcasting:item/focus/pattern_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_vec3"
|
||||
"layer0": "hexcasting:item/focus/vec3"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_vec3_sealed"
|
||||
"layer0": "hexcasting:item/focus/vec3_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_widget"
|
||||
"layer0": "hexcasting:item/focus/widget"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/focus_widget_sealed"
|
||||
"layer0": "hexcasting:item/focus/widget_sealed"
|
||||
}
|
||||
}
|
|
@ -2,45 +2,101 @@
|
|||
"overrides": [
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": -0.01
|
||||
"hexcasting:datatype": 0.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_empty"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 0.99
|
||||
"hexcasting:datatype": 1.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_entity"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 1.99
|
||||
"hexcasting:datatype": 2.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_double"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 2.99
|
||||
"hexcasting:datatype": 3.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_vec3"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 3.99
|
||||
"hexcasting:datatype": 4.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_widget"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 4.99
|
||||
"hexcasting:datatype": 5.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_list"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 5.99
|
||||
"hexcasting:datatype": 6.0,
|
||||
"hexcasting:sealed": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_pattern"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 0.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_empty_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 1.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_entity_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 2.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_double_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 3.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_vec3_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 4.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_widget_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 5.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_list_sealed"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:datatype": 6.0,
|
||||
"hexcasting:sealed": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/spellbook_pattern_sealed"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook_double"
|
||||
"layer0": "hexcasting:item/spellbook/double"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook/double_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook_empty"
|
||||
"layer0": "hexcasting:item/spellbook/empty"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook/empty_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook_entity"
|
||||
"layer0": "hexcasting:item/spellbook/entity"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook/entity_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook_list"
|
||||
"layer0": "hexcasting:item/spellbook/list"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook/list_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook_pattern"
|
||||
"layer0": "hexcasting:item/spellbook/pattern"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook/pattern_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook_vec3"
|
||||
"layer0": "hexcasting:item/spellbook/vec3"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook/vec3_sealed"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook_widget"
|
||||
"layer0": "hexcasting:item/spellbook/widget"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/spellbook/widget_sealed"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"parent": "minecraft:item/handheld_rod",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/wands/crimson"
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:funny_level": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/wand_crimson"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:funny_level": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/wand_old"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:funny_level": 2.0
|
||||
},
|
||||
"model": "hexcasting:item/wand_bosnia"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"parent": "minecraft:item/handheld_rod",
|
||||
"textures": {
|
||||
"layer0": "hexcasting:item/wands/warped"
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:funny_level": 0.0
|
||||
},
|
||||
"model": "hexcasting:item/wand_warped"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:funny_level": 1.0
|
||||
},
|
||||
"model": "hexcasting:item/wand_old"
|
||||
},
|
||||
{
|
||||
"predicate": {
|
||||
"hexcasting:funny_level": 2.0
|
||||
},
|
||||
"model": "hexcasting:item/wand_bosnia"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"hexcasting:wand_crimson"
|
||||
]
|
||||
},
|
||||
"criteria": {
|
||||
"has_item": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"hexcasting:charged_amethyst"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"trigger": "minecraft:recipe_unlocked",
|
||||
"conditions": {
|
||||
"recipe": "hexcasting:wand_crimson"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_item",
|
||||
"has_the_recipe"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"hexcasting:wand_warped"
|
||||
]
|
||||
},
|
||||
"criteria": {
|
||||
"has_item": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"hexcasting:charged_amethyst"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"trigger": "minecraft:recipe_unlocked",
|
||||
"conditions": {
|
||||
"recipe": "hexcasting:wand_warped"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_item",
|
||||
"has_the_recipe"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"type": "hexcasting:seal_spellbook"
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
" SA",
|
||||
" WS",
|
||||
"S "
|
||||
],
|
||||
"key": {
|
||||
"W": {
|
||||
"item": "minecraft:crimson_planks"
|
||||
},
|
||||
"S": {
|
||||
"item": "minecraft:stick"
|
||||
},
|
||||
"A": {
|
||||
"item": "hexcasting:charged_amethyst"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "hexcasting:wand_crimson"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
" SA",
|
||||
" WS",
|
||||
"S "
|
||||
],
|
||||
"key": {
|
||||
"W": {
|
||||
"item": "minecraft:warped_planks"
|
||||
},
|
||||
"S": {
|
||||
"item": "minecraft:stick"
|
||||
},
|
||||
"A": {
|
||||
"item": "hexcasting:charged_amethyst"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "hexcasting:wand_warped"
|
||||
}
|
||||
}
|
|
@ -7,6 +7,8 @@
|
|||
"hexcasting:wand_jungle",
|
||||
"hexcasting:wand_acacia",
|
||||
"hexcasting:wand_dark_oak",
|
||||
"hexcasting:wand_crimson",
|
||||
"hexcasting:wand_warped",
|
||||
"hexcasting:wand_akashic"
|
||||
]
|
||||
}
|
|
@ -70,9 +70,9 @@ public record FrozenColorizer(ItemStack item, UUID owner) {
|
|||
var r = FastColor.ARGB32.red(raw);
|
||||
var g = FastColor.ARGB32.green(raw);
|
||||
var b = FastColor.ARGB32.blue(raw);
|
||||
double luminance = 0.2126 * r / 0xFF + 0.7152 * g / 0xFF + 0.0722 * b / 0xFF; // Standard relative luminance calculation
|
||||
double luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 0xFF; // Standard relative luminance calculation
|
||||
|
||||
if (luminance < 0.1) {
|
||||
if (luminance < 0.05) {
|
||||
int rawMod = Colorizer.morphBetweenColors(MINIMUM_LUMINANCE_COLOR_WHEEL, new Vec3(0.1, 0.1, 0.1), time / 20 / 20, position);
|
||||
|
||||
r += FastColor.ARGB32.red(rawMod);
|
||||
|
|
|
@ -82,7 +82,7 @@ public class HexAdditionalRenderers {
|
|||
RenderSystem.disableCull();
|
||||
RenderSystem.lineWidth(5f);
|
||||
|
||||
var colorizer = HexPlayerDataHelper.getColorizer(mc.player);
|
||||
var colorizer = HexPlayerDataHelper.getColorizer(owner);
|
||||
BiConsumer<float[], float[]> v = (l, r) -> {
|
||||
int lcolor = colorizer.getColor(time, new Vec3(l[0], l[1], l[2])),
|
||||
rcolor = colorizer.getColor(time, new Vec3(r[0], r[1], r[2]));
|
||||
|
|
|
@ -3,9 +3,11 @@ package at.petrak.hexcasting.client;
|
|||
import at.petrak.hexcasting.api.circle.BlockAbstractImpetus;
|
||||
import at.petrak.hexcasting.api.circle.BlockEntityAbstractImpetus;
|
||||
import at.petrak.hexcasting.api.client.ScryingLensOverlayRegistry;
|
||||
import at.petrak.hexcasting.api.item.DataHolderItem;
|
||||
import at.petrak.hexcasting.api.item.ManaHolderItem;
|
||||
import at.petrak.hexcasting.api.mod.HexConfig;
|
||||
import at.petrak.hexcasting.api.spell.SpellDatum;
|
||||
import at.petrak.hexcasting.api.spell.Widget;
|
||||
import at.petrak.hexcasting.client.be.BlockEntityAkashicBookshelfRenderer;
|
||||
import at.petrak.hexcasting.client.be.BlockEntitySlateRenderer;
|
||||
import at.petrak.hexcasting.client.entity.WallScrollRenderer;
|
||||
|
@ -53,46 +55,27 @@ public class RegisterClientStuff {
|
|||
@SubscribeEvent
|
||||
public static void init(FMLClientSetupEvent evt) {
|
||||
evt.enqueueWork(() -> {
|
||||
ItemProperties.register(HexItems.FOCUS.get(), ItemFocus.DATATYPE_PRED,
|
||||
(stack, level, holder, holderID) -> {
|
||||
var tag = stack.getOrCreateTag();
|
||||
var isSealed = tag.getBoolean(ItemFocus.TAG_SEALED);
|
||||
var baseNum = isSealed ? 100f : 0f;
|
||||
var datum = HexItems.FOCUS.get().readDatumTag(stack);
|
||||
if (datum != null) {
|
||||
var typename = datum.getAllKeys().iterator().next();
|
||||
return baseNum + switch (typename) {
|
||||
case SpellDatum.TAG_ENTITY -> 1f;
|
||||
case SpellDatum.TAG_DOUBLE -> 2f;
|
||||
case SpellDatum.TAG_VEC3 -> 3f;
|
||||
case SpellDatum.TAG_WIDGET -> 4f;
|
||||
case SpellDatum.TAG_LIST -> 5f;
|
||||
case SpellDatum.TAG_PATTERN -> 6f;
|
||||
default -> 0f; // uh oh
|
||||
};
|
||||
} else {
|
||||
return baseNum;
|
||||
}
|
||||
});
|
||||
ItemProperties.register(HexItems.SPELLBOOK.get(), ItemSpellbook.DATATYPE_PRED,
|
||||
(stack, level, holder, holderID) -> {
|
||||
var tag = stack.getOrCreateTag();
|
||||
var datum = HexItems.SPELLBOOK.get().readDatumTag(stack);
|
||||
if (datum != null) {
|
||||
var typename = datum.getAllKeys().iterator().next();
|
||||
return switch (typename) {
|
||||
case SpellDatum.TAG_ENTITY -> 1f;
|
||||
case SpellDatum.TAG_DOUBLE -> 2f;
|
||||
case SpellDatum.TAG_VEC3 -> 3f;
|
||||
case SpellDatum.TAG_WIDGET -> 4f;
|
||||
case SpellDatum.TAG_LIST -> 5f;
|
||||
case SpellDatum.TAG_PATTERN -> 6f;
|
||||
default -> 0f; // uh oh
|
||||
};
|
||||
} else {
|
||||
for (DataHolderItem dataHolder : new DataHolderItem[]{ HexItems.FOCUS.get(), HexItems.SPELLBOOK.get() }) {
|
||||
ItemProperties.register((Item) dataHolder, ItemFocus.DATATYPE_PRED,
|
||||
(stack, level, holder, holderID) -> {
|
||||
var datum = dataHolder.readDatumTag(stack);
|
||||
if (datum != null) {
|
||||
var typename = datum.getAllKeys().iterator().next();
|
||||
return switch (typename) {
|
||||
case SpellDatum.TAG_ENTITY -> 1f;
|
||||
case SpellDatum.TAG_DOUBLE -> 2f;
|
||||
case SpellDatum.TAG_VEC3 -> 3f;
|
||||
case SpellDatum.TAG_WIDGET -> 4f;
|
||||
case SpellDatum.TAG_LIST -> 5f;
|
||||
case SpellDatum.TAG_PATTERN -> 6f;
|
||||
default -> 0f; // uh oh
|
||||
};
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
});
|
||||
});
|
||||
ItemProperties.register((Item) dataHolder, ItemFocus.SEALED_PRED,
|
||||
(stack, level, holder, holderID) -> dataHolder.canWrite(stack, SpellDatum.make(Widget.NULL)) ? 0f : 1f);
|
||||
}
|
||||
for (ItemPackagedSpell packager : new ItemPackagedSpell[]{
|
||||
HexItems.CYPHER.get(),
|
||||
HexItems.TRINKET.get(),
|
||||
|
|
|
@ -20,8 +20,7 @@ class OpErase : SpellOperator {
|
|||
val datumHolder = it.getCapability(HexCapabilities.DATUM).resolve()
|
||||
|
||||
(spellHolder.isPresent && spellHolder.get().patterns != null) ||
|
||||
(datumHolder.isPresent && datumHolder.get().readDatum(ctx.world) != null &&
|
||||
datumHolder.get().writeDatum(null, true))
|
||||
(datumHolder.isPresent && datumHolder.get().writeDatum(null, true))
|
||||
}
|
||||
val spellHolder = handStack.getCapability(HexCapabilities.SPELL).resolve()
|
||||
val datumHolder = handStack.getCapability(HexCapabilities.DATUM).resolve()
|
||||
|
@ -42,8 +41,7 @@ class OpErase : SpellOperator {
|
|||
val datumHolder = it.getCapability(HexCapabilities.DATUM).resolve()
|
||||
|
||||
(spellHolder.isPresent && spellHolder.get().patterns != null) ||
|
||||
(datumHolder.isPresent && datumHolder.get().readDatum(ctx.world) != null &&
|
||||
datumHolder.get().writeDatum(null, true))
|
||||
(datumHolder.isPresent && datumHolder.get().writeDatum(null, true))
|
||||
}
|
||||
val spellHolder = handStack.getCapability(HexCapabilities.SPELL).resolve()
|
||||
val datumHolder = handStack.getCapability(HexCapabilities.DATUM).resolve()
|
||||
|
@ -51,8 +49,7 @@ class OpErase : SpellOperator {
|
|||
if (spellHolder.isPresent && spellHolder.get().patterns != null)
|
||||
spellHolder.get().clearPatterns()
|
||||
|
||||
if (datumHolder.isPresent && datumHolder.get().readDatum(ctx.world) != null &&
|
||||
datumHolder.get().writeDatum(null, true))
|
||||
if (datumHolder.isPresent && datumHolder.get().writeDatum(null, true))
|
||||
datumHolder.get().writeDatum(null, false)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,6 +56,10 @@ public class HexItems {
|
|||
() -> new ItemWand(unstackable()));
|
||||
public static final RegistryObject<ItemWand> WAND_DARK_OAK = ITEMS.register("wand_dark_oak",
|
||||
() -> new ItemWand(unstackable()));
|
||||
public static final RegistryObject<ItemWand> WAND_CRIMSON = ITEMS.register("wand_crimson",
|
||||
() -> new ItemWand(unstackable()));
|
||||
public static final RegistryObject<ItemWand> WAND_WARPED = ITEMS.register("wand_warped",
|
||||
() -> new ItemWand(unstackable()));
|
||||
public static final RegistryObject<ItemWand> WAND_AKASHIC = ITEMS.register("wand_akashic",
|
||||
() -> new ItemWand(unstackable()));
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@ import java.util.List;
|
|||
|
||||
public class ItemFocus extends Item implements DataHolderItem {
|
||||
public static final ResourceLocation DATATYPE_PRED = new ResourceLocation(HexMod.MOD_ID, "datatype");
|
||||
public static final ResourceLocation SEALED_PRED = new ResourceLocation(HexMod.MOD_ID, "sealed");
|
||||
|
||||
public static final String TAG_DATA = "data";
|
||||
public static final String TAG_SEALED = "sealed";
|
||||
|
||||
|
@ -45,19 +47,18 @@ public class ItemFocus extends Item implements DataHolderItem {
|
|||
|
||||
@Override
|
||||
public boolean canWrite(ItemStack stack, SpellDatum<?> datum) {
|
||||
return !stack.hasTag() || !stack.getTag().getBoolean(TAG_SEALED);
|
||||
return datum == null || !stack.hasTag() || !stack.getTag().getBoolean(TAG_SEALED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeDatum(ItemStack stack, SpellDatum<?> datum) {
|
||||
CompoundTag tag = stack.getOrCreateTag();
|
||||
|
||||
if (!tag.getBoolean(TAG_SEALED)) {
|
||||
if (datum == null)
|
||||
tag.remove(TAG_DATA);
|
||||
else
|
||||
tag.put(TAG_DATA, datum.serializeToNBT());
|
||||
}
|
||||
if (datum == null) {
|
||||
tag.remove(TAG_DATA);
|
||||
tag.remove(TAG_SEALED);
|
||||
} else if (!tag.getBoolean(TAG_SEALED))
|
||||
tag.put(TAG_DATA, datum.serializeToNBT());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package at.petrak.hexcasting.common.items;
|
||||
|
||||
import at.petrak.hexcasting.HexMod;
|
||||
import at.petrak.hexcasting.api.item.DataHolderItem;
|
||||
import at.petrak.hexcasting.api.spell.SpellDatum;
|
||||
import at.petrak.hexcasting.api.spell.Widget;
|
||||
|
@ -10,7 +9,6 @@ import net.minecraft.nbt.Tag;
|
|||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.TextComponent;
|
||||
import net.minecraft.network.chat.TranslatableComponent;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
@ -22,8 +20,6 @@ import java.util.List;
|
|||
import java.util.stream.Stream;
|
||||
|
||||
public class ItemSpellbook extends Item implements DataHolderItem {
|
||||
public static final ResourceLocation DATATYPE_PRED = new ResourceLocation(HexMod.MOD_ID, "datatype");
|
||||
|
||||
public static String TAG_SELECTED_PAGE = "page_idx";
|
||||
// this is a CompoundTag of string numerical keys to SpellData
|
||||
// it is 1-indexed, so that 0/0 can be the special case of "it is empty"
|
||||
|
@ -33,6 +29,10 @@ public class ItemSpellbook extends Item implements DataHolderItem {
|
|||
// it is 1-indexed, and the 0-case for TAG_PAGES will be treated as 1
|
||||
public static String TAG_PAGE_NAMES = "page_names";
|
||||
|
||||
// this stores the sealed status of each page, to be restored when you scroll
|
||||
// it is 1-indexed, and the 0-case for TAG_PAGES will be treated as 1
|
||||
public static String TAG_SEALED = "sealed_pages";
|
||||
|
||||
public ItemSpellbook(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
@ -46,9 +46,9 @@ public class ItemSpellbook extends Item implements DataHolderItem {
|
|||
int highest = HighestPage(stack);
|
||||
if (highest != 0) {
|
||||
tooltip.add(new TranslatableComponent("hexcasting.tooltip.spellbook.page",
|
||||
new TextComponent(String.valueOf(pageIdx)).withStyle(ChatFormatting.WHITE),
|
||||
new TextComponent(String.valueOf(highest)).withStyle(ChatFormatting.WHITE))
|
||||
.withStyle(ChatFormatting.GRAY));
|
||||
new TextComponent(String.valueOf(pageIdx)).withStyle(ChatFormatting.WHITE),
|
||||
new TextComponent(String.valueOf(highest)).withStyle(ChatFormatting.WHITE))
|
||||
.withStyle(ChatFormatting.GRAY));
|
||||
} else {
|
||||
tooltip.add(new TranslatableComponent("hexcasting.tooltip.spellbook.empty").withStyle(ChatFormatting.GRAY));
|
||||
}
|
||||
|
@ -127,11 +127,14 @@ public class ItemSpellbook extends Item implements DataHolderItem {
|
|||
|
||||
@Override
|
||||
public boolean canWrite(ItemStack stack, SpellDatum<?> datum) {
|
||||
return true;
|
||||
return datum == null || !IsSealed(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeDatum(ItemStack stack, SpellDatum<?> datum) {
|
||||
if (datum != null && IsSealed(stack))
|
||||
return;
|
||||
|
||||
CompoundTag tag = stack.getOrCreateTag();
|
||||
|
||||
int idx;
|
||||
|
@ -146,17 +149,60 @@ public class ItemSpellbook extends Item implements DataHolderItem {
|
|||
}
|
||||
var key = String.valueOf(idx);
|
||||
if (tag.contains(TAG_PAGES, Tag.TAG_COMPOUND)) {
|
||||
if (datum == null)
|
||||
if (datum == null) {
|
||||
tag.getCompound(TAG_PAGES).remove(key);
|
||||
else
|
||||
tag.getCompound(TAG_SEALED).remove(key);
|
||||
} else
|
||||
tag.getCompound(TAG_PAGES).put(key, datum.serializeToNBT());
|
||||
} else if (datum != null) {
|
||||
var pagesTag = new CompoundTag();
|
||||
pagesTag.put(key, datum.serializeToNBT());
|
||||
tag.put(TAG_PAGES, pagesTag);
|
||||
} else {
|
||||
tag.getCompound(TAG_SEALED).remove(key);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetSealed(ItemStack stack, boolean sealed) {
|
||||
CompoundTag tag = stack.getOrCreateTag();
|
||||
|
||||
int index = 1;
|
||||
if (!ArePagesEmpty(stack) && tag.contains(TAG_SELECTED_PAGE, Tag.TAG_ANY_NUMERIC)) {
|
||||
index = tag.getInt(TAG_SELECTED_PAGE);
|
||||
if (index == 0) index = 1;
|
||||
}
|
||||
|
||||
String nameKey = String.valueOf(index);
|
||||
CompoundTag names = tag.getCompound(TAG_SEALED);
|
||||
|
||||
if (!sealed)
|
||||
names.remove(nameKey);
|
||||
else
|
||||
names.putBoolean(nameKey, true);
|
||||
|
||||
if (names.isEmpty())
|
||||
tag.remove(TAG_SEALED);
|
||||
else
|
||||
tag.put(TAG_SEALED, names);
|
||||
|
||||
}
|
||||
|
||||
public static boolean IsSealed(ItemStack stack) {
|
||||
if (!stack.hasTag())
|
||||
return false;
|
||||
CompoundTag tag = stack.getOrCreateTag();
|
||||
|
||||
int index = 1;
|
||||
if (!ArePagesEmpty(stack) && tag.contains(TAG_SELECTED_PAGE, Tag.TAG_ANY_NUMERIC)) {
|
||||
index = tag.getInt(TAG_SELECTED_PAGE);
|
||||
if (index == 0) index = 1;
|
||||
}
|
||||
|
||||
String nameKey = String.valueOf(index);
|
||||
CompoundTag names = tag.getCompound(TAG_SEALED);
|
||||
return names.getBoolean(nameKey);
|
||||
}
|
||||
|
||||
public static int HighestPage(ItemStack stack) {
|
||||
if (!stack.hasTag())
|
||||
return 0;
|
||||
|
|
|
@ -12,4 +12,6 @@ public class HexCustomRecipes {
|
|||
|
||||
public static final RegistryObject<RecipeSerializer<SealFocusRecipe>> SEAL_FOCUS = RECIPES.register("seal_focus",
|
||||
() -> SealFocusRecipe.SERIALIZER);
|
||||
public static final RegistryObject<RecipeSerializer<SealSpellbookRecipe>> SEAL_SPELLBOOK = RECIPES.register("seal_spellbook",
|
||||
() -> SealSpellbookRecipe.SERIALIZER);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package at.petrak.hexcasting.common.recipe;
|
||||
|
||||
import at.petrak.hexcasting.common.items.HexItems;
|
||||
import at.petrak.hexcasting.common.items.ItemFocus;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.inventory.CraftingContainer;
|
||||
|
@ -26,8 +27,7 @@ public class SealFocusRecipe extends CustomRecipe {
|
|||
for (int i = 0; i < inv.getContainerSize(); i++) {
|
||||
var stack = inv.getItem(i);
|
||||
if (!stack.isEmpty()) {
|
||||
var item = stack.getItem();
|
||||
if (item instanceof ItemFocus) {
|
||||
if (stack.is(HexItems.FOCUS.get())) {
|
||||
if (foundOkFocus) {
|
||||
return false;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class SealFocusRecipe extends CustomRecipe {
|
|||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (item == Items.HONEYCOMB) {
|
||||
} else if (stack.is(Items.HONEYCOMB)) {
|
||||
if (foundWax) {
|
||||
return false;
|
||||
}
|
||||
|
@ -56,17 +56,21 @@ public class SealFocusRecipe extends CustomRecipe {
|
|||
|
||||
@Override
|
||||
public ItemStack assemble(CraftingContainer inv) {
|
||||
ItemStack out = null;
|
||||
ItemStack out = ItemStack.EMPTY;
|
||||
|
||||
for (int i = 0; i < inv.getContainerSize(); i++) {
|
||||
var stack = inv.getItem(i);
|
||||
if (!stack.isEmpty() && stack.getItem() != Items.HONEYCOMB) {
|
||||
if (stack.is(HexItems.FOCUS.get())) {
|
||||
out = stack.copy();
|
||||
break;
|
||||
}
|
||||
}
|
||||
out.getTag().putBoolean(ItemFocus.TAG_SEALED, true);
|
||||
out.setCount(1);
|
||||
|
||||
if (!out.isEmpty()) {
|
||||
out.getOrCreateTag().putBoolean(ItemFocus.TAG_SEALED, true);
|
||||
out.setCount(1);
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
package at.petrak.hexcasting.common.recipe;
|
||||
|
||||
import at.petrak.hexcasting.common.items.HexItems;
|
||||
import at.petrak.hexcasting.common.items.ItemSpellbook;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.inventory.CraftingContainer;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.CustomRecipe;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.item.crafting.SimpleRecipeSerializer;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
public class SealSpellbookRecipe extends CustomRecipe {
|
||||
public static final SimpleRecipeSerializer<SealSpellbookRecipe> SERIALIZER =
|
||||
new SimpleRecipeSerializer<>(SealSpellbookRecipe::new);
|
||||
|
||||
public SealSpellbookRecipe(ResourceLocation id) {
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CraftingContainer inv, Level world) {
|
||||
var foundWax = false;
|
||||
var foundOkSpellbook = false;
|
||||
|
||||
for (int i = 0; i < inv.getContainerSize(); i++) {
|
||||
var stack = inv.getItem(i);
|
||||
if (!stack.isEmpty()) {
|
||||
if (stack.is(HexItems.SPELLBOOK.get())) {
|
||||
if (foundOkSpellbook) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ItemSpellbook.IsSealed(stack)) {
|
||||
foundOkSpellbook = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (stack.is(Items.HONEYCOMB)) {
|
||||
if (foundWax) {
|
||||
return false;
|
||||
}
|
||||
foundWax = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return foundWax && foundOkSpellbook;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack assemble(CraftingContainer inv) {
|
||||
ItemStack out = ItemStack.EMPTY;
|
||||
|
||||
for (int i = 0; i < inv.getContainerSize(); i++) {
|
||||
var stack = inv.getItem(i);
|
||||
if (stack.is(HexItems.SPELLBOOK.get())) {
|
||||
out = stack.copy();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!out.isEmpty()) {
|
||||
ItemSpellbook.SetSealed(out, true);
|
||||
out.setCount(1);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCraftInDimensions(int width, int height) {
|
||||
return width * height >= 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecipeSerializer<?> getSerializer() {
|
||||
return SERIALIZER;
|
||||
}
|
||||
}
|
||||
|
|
@ -57,10 +57,12 @@ public class HexItemModels extends PaucalItemModelProvider {
|
|||
HexItems.WAND_JUNGLE.get(),
|
||||
HexItems.WAND_DARK_OAK.get(),
|
||||
HexItems.WAND_ACACIA.get(),
|
||||
HexItems.WAND_CRIMSON.get(),
|
||||
HexItems.WAND_WARPED.get(),
|
||||
HexItems.WAND_AKASHIC.get(),
|
||||
};
|
||||
var wandKeys = new String[]{
|
||||
"oak", "birch", "spruce", "jungle", "dark_oak", "acacia", "akashic"
|
||||
"oak", "birch", "spruce", "jungle", "dark_oak", "acacia", "crimson", "warped", "akashic"
|
||||
};
|
||||
for (int i = 0; i < wands.length; i++) {
|
||||
Item wand = wands[i];
|
||||
|
@ -91,28 +93,30 @@ public class HexItemModels extends PaucalItemModelProvider {
|
|||
for (int i = 0, stringsLength = datumStoredTypes.length; i < stringsLength; i++) {
|
||||
var type = datumStoredTypes[i];
|
||||
|
||||
var focusName = "focus_" + type + (sealed ? "_sealed" : "");
|
||||
simpleItem(modLoc(focusName));
|
||||
var suffix = type + (sealed ? "_sealed" : "");
|
||||
|
||||
var focusName = "focus_" + suffix;
|
||||
singleTexture(focusName, new ResourceLocation("item/generated"),
|
||||
"layer0", modLoc("item/focus/" + suffix));
|
||||
getBuilder(HexItems.FOCUS.get().getRegistryName().getPath())
|
||||
.override()
|
||||
.predicate(ItemFocus.DATATYPE_PRED, -0.01f + i + (sealed ? 100 : 0))
|
||||
.predicate(ItemFocus.DATATYPE_PRED, i)
|
||||
.predicate(ItemFocus.SEALED_PRED, sealed ? 1f : 0f)
|
||||
.model(new ModelFile.UncheckedModelFile(modLoc("item/" + focusName)))
|
||||
.end();
|
||||
|
||||
var spellbookName = "spellbook_" + type + (sealed ? "_sealed" : "");
|
||||
singleTexture(spellbookName, new ResourceLocation("item/generated"),
|
||||
"layer0", modLoc("item/spellbook/" + suffix));
|
||||
getBuilder(HexItems.SPELLBOOK.get().getRegistryName().getPath())
|
||||
.override()
|
||||
.predicate(ItemFocus.DATATYPE_PRED, i)
|
||||
.predicate(ItemFocus.SEALED_PRED, sealed ? 1f : 0f)
|
||||
.model(new ModelFile.UncheckedModelFile(modLoc("item/" + spellbookName)))
|
||||
.end();
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0, stringsLength = datumStoredTypes.length; i < stringsLength; i++) {
|
||||
var type = datumStoredTypes[i];
|
||||
|
||||
var spellbookName = "spellbook_" + type;
|
||||
simpleItem(modLoc(spellbookName));
|
||||
getBuilder(HexItems.SPELLBOOK.get().getRegistryName().getPath())
|
||||
.override()
|
||||
.predicate(ItemSpellbook.DATATYPE_PRED, -0.01f + i)
|
||||
.model(new ModelFile.UncheckedModelFile(modLoc("item/" + spellbookName)))
|
||||
.end();
|
||||
}
|
||||
|
||||
Pair<RegistryObject<Item>, String>[] packagers = new Pair[]{
|
||||
new Pair(HexItems.CYPHER, "cypher"),
|
||||
new Pair(HexItems.TRINKET, "trinket"),
|
||||
|
|
|
@ -26,7 +26,7 @@ public class HexItemTagProvider extends ItemTagsProvider {
|
|||
tag(HexItemTags.AMETHYST_DUST).add(HexItems.AMETHYST_DUST.get());
|
||||
tag(HexItemTags.WANDS).add(HexItems.WAND_OAK.get(), HexItems.WAND_SPRUCE.get(), HexItems.WAND_BIRCH.get(),
|
||||
HexItems.WAND_JUNGLE.get(), HexItems.WAND_ACACIA.get(), HexItems.WAND_DARK_OAK.get(),
|
||||
HexItems.WAND_AKASHIC.get());
|
||||
HexItems.WAND_CRIMSON.get(), HexItems.WAND_WARPED.get(), HexItems.WAND_AKASHIC.get());
|
||||
tag(HexItemTags.PHIAL_BASE).add(Items.GLASS_BOTTLE);
|
||||
|
||||
this.copy(HexBlockTags.AKASHIC_LOGS, HexItemTags.AKASHIC_LOGS);
|
||||
|
|
|
@ -2,10 +2,11 @@ package at.petrak.hexcasting.datagen;
|
|||
|
||||
import at.petrak.hexcasting.HexMod;
|
||||
import at.petrak.hexcasting.api.advancements.OvercastTrigger;
|
||||
import at.petrak.hexcasting.common.blocks.HexBlocks;
|
||||
import at.petrak.hexcasting.api.mod.HexItemTags;
|
||||
import at.petrak.hexcasting.common.blocks.HexBlocks;
|
||||
import at.petrak.hexcasting.common.items.HexItems;
|
||||
import at.petrak.hexcasting.common.recipe.SealFocusRecipe;
|
||||
import at.petrak.hexcasting.common.recipe.SealSpellbookRecipe;
|
||||
import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper;
|
||||
import at.petrak.hexcasting.common.recipe.ingredient.VillagerIngredient;
|
||||
import at.petrak.hexcasting.datagen.recipebuilders.BrainsweepRecipeBuilder;
|
||||
|
@ -41,6 +42,7 @@ public class HexRecipes extends PaucalRecipeProvider {
|
|||
@Override
|
||||
protected void buildCraftingRecipes(Consumer<FinishedRecipe> recipes) {
|
||||
specialRecipe(recipes, SealFocusRecipe.SERIALIZER);
|
||||
specialRecipe(recipes, SealSpellbookRecipe.SERIALIZER);
|
||||
|
||||
var wands = new Item[]{
|
||||
HexItems.WAND_OAK.get(),
|
||||
|
@ -49,6 +51,8 @@ public class HexRecipes extends PaucalRecipeProvider {
|
|||
HexItems.WAND_JUNGLE.get(),
|
||||
HexItems.WAND_DARK_OAK.get(),
|
||||
HexItems.WAND_ACACIA.get(),
|
||||
HexItems.WAND_CRIMSON.get(),
|
||||
HexItems.WAND_WARPED.get(),
|
||||
HexItems.WAND_AKASHIC.get(),
|
||||
};
|
||||
var woods = new Item[]{
|
||||
|
@ -58,6 +62,8 @@ public class HexRecipes extends PaucalRecipeProvider {
|
|||
Items.JUNGLE_PLANKS,
|
||||
Items.DARK_OAK_PLANKS,
|
||||
Items.ACACIA_PLANKS,
|
||||
Items.CRIMSON_PLANKS,
|
||||
Items.WARPED_PLANKS,
|
||||
HexBlocks.AKASHIC_PLANKS.get().asItem(),
|
||||
};
|
||||
for (int i = 0; i < wands.length; i++) {
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
"item.hexcasting.wand_jungle": "Jungle Staff",
|
||||
"item.hexcasting.wand_acacia": "Acacia Staff",
|
||||
"item.hexcasting.wand_dark_oak": "Dark Oak Staff",
|
||||
"item.hexcasting.wand_crimson": "Crimson Staff",
|
||||
"item.hexcasting.wand_warped": "Warped Staff",
|
||||
"item.hexcasting.wand_akashic": "Edified Staff",
|
||||
"item.hexcasting.focus": "Focus",
|
||||
"item.hexcasting.spellbook": "Spellbook",
|
||||
|
@ -129,8 +131,8 @@
|
|||
"advancement.hexcasting:opened_eyes": "Opened Eyes",
|
||||
"advancement.hexcasting:opened_eyes.desc": "Have nature take just a little of your mind as payment for a hexcasting.",
|
||||
|
||||
"stat.hexcasting.mana_used": "Media consumed (in dusts)",
|
||||
"stat.hexcasting.mana_overcasted": "Media overcasted (in dusts)",
|
||||
"stat.hexcasting.mana_used": "Media consumed (in dust)",
|
||||
"stat.hexcasting.mana_overcasted": "Media overcast (in dust)",
|
||||
"stat.hexcasting.patterns_drawn": "Patterns Drawn",
|
||||
"stat.hexcasting.spells_cast": "Spells Cast",
|
||||
|
||||
|
@ -376,13 +378,13 @@
|
|||
|
||||
|
||||
"hexcasting.entry.basics": "Getting Started",
|
||||
"hexcasting.entry.basics.desc": "The practitioners of this art would cast their so-called Hexes by drawing strange patterns in the air with a staff-- or craft powerful magical items to do the casting for them. How might I do the same?",
|
||||
"hexcasting.entry.basics.desc": "The practitioners of this art would cast their so-called _Hexes by drawing strange patterns in the air with a $(l:items/staff)$(item)staff/$-- or craft $(l:items/hexcasting)$(item)powerful magical items/$ to do the casting for them. How might I do the same?",
|
||||
|
||||
"hexcasting.entry.casting": "Hex Casting",
|
||||
"hexcasting.entry.casting.desc": "I've started to understand how the old masters cast their Hexes! It's a bit complicated, but I'm sure I can figure it out. Let's see...",
|
||||
"hexcasting.entry.casting.desc": "I've started to understand how the old masters cast their _Hexes! It's a bit complicated, but I'm sure I can figure it out. Let's see...",
|
||||
|
||||
"hexcasting.entry.items": "Items",
|
||||
"hexcasting.entry.items.desc": "I devote this section to the magical and mysterious items I might encounter in my studies.$(br2)It seems like many of these items have uses when held alongside my staff. I suppose I will have to choose what goes in my other hand carefully.",
|
||||
"hexcasting.entry.items.desc": "I devote this section to the magical and mysterious items I might encounter in my studies.$(br2)It seems like many of these items have uses when held alongside my $(l:items/staff)$(item)staff/$. I suppose I will have to choose what goes in my other hand carefully.",
|
||||
|
||||
"hexcasting.entry.greatwork": "The Great Work",
|
||||
"hexcasting.entry.greatwork.desc": "I have seen... so much. I have... experienced... annihilation and deconstruction and reconstruction. I have seen the atoms of the world screaming as they were inverted and subverted and demoted to energy. I have seen I have seen I have s$(k)get stick bugged lmao/$",
|
||||
|
@ -405,28 +407,28 @@
|
|||
"hexcasting.page.media.3": "Sadly, even a fully sentient being (like myself, presumably) can only generate miniscule amounts of _media. It would be quite impractical to try and use my own brainpower to cast Hexes.$(br2)But legend has it that there are underground deposits where _media slowly accumulates, growing into crystalline forms.$(p)If I could just find one of those...",
|
||||
|
||||
"hexcasting.entry.geodes": "Geodes",
|
||||
"hexcasting.page.geodes.1": "Aha! While mining deep underground, I found an enormous geode resonating with energy-- energy which pressed against my skull and my thoughts. This $(italic)must/$ be the place spoken about in legends where _media accumulates.$(br2)These amethyst crystals must contain a $(thing)convenient, solidified form of _Media/$.",
|
||||
"hexcasting.page.geodes.2": "It appears that, in addition to the $(item)Amethyst Shards/$ I usually see, these crystals can also drop $(item)Amethyst Dust/$ and $(item)Charged Amethyst Crystals/$. It looks like I'll have a better chance of finding $(item)Charged Amethyst Crystals/$ by using a Fortune pickaxe.",
|
||||
"hexcasting.page.geodes.1": "Aha! While mining deep underground, I found an enormous geode resonating with energy-- energy which pressed against my skull and my thoughts. This $(italic)must/$ be the place spoken about in legends where _media accumulates.$(br2)These $(l:items/amethyst)$(item)amethyst crystals/$ must contain a $(l:items/amethyst)$(thing)convenient, solidified form of _Media/$.",
|
||||
"hexcasting.page.geodes.2": "It appears that, in addition to the $(l:items/amethyst)$(item)Amethyst Shards/$ I usually see, these crystals can also drop $(l:items/amethyst)$(item)Amethyst Dust/$ and $(l:items/amethyst)$(item)Charged Amethyst Crystals/$. It looks like I'll have a better chance of finding $(l:items/amethyst)$(item)Charged Amethyst Crystals/$ by using a Fortune pickaxe.",
|
||||
"hexcasting.page.geodes.3": "As I take the beauty of the geode in, I can feel connections flashing wildly in my mind. It's like the _media in the air is entering me, empowering me, elucidating me... It feels wonderful.$(br2)Finally, my study into the arcane is starting to make some sense!$(p)Let me reread those old legends again, now that I know what I'm looking at.",
|
||||
|
||||
"hexcasting.entry.couldnt_cast": "A Frustration",
|
||||
"hexcasting.page.couldnt_cast.1": "Argh! Why won't it let me cast the spell?!$(br2)The scroll I found rings with authenticity. I can $(italic)feel/$ it humming in the scroll-- the pattern is true, or as true as it can be. The spell is $(italic)right there/$.$(p)But it feels if it's on the other side of some thin membrane. I called it-- it tried to manifest-- yet it $(italic)COULD NOT/$.",
|
||||
"hexcasting.page.couldnt_cast.2": "It felt like the barrier may have weakened ever so slightly from the force that I exerted on the spell; yet despite my greatest efforts-- my deepest focus, my finest amethyst, my precisest drawings-- it $(italic)refuses/$ to cross the barrier. It's maddening.$(p)$(italic)This/$ is where my arcane studies end? Cursed by impotence, cursed to lose my rightful powers?$(br2)I should take a deep breath. I should meditate on what I have learned, even if it wasn't very much...",
|
||||
"hexcasting.page.couldnt_cast.3": "...After careful reflection... I have discovered a change in myself.$(p)It seems... in lieu of $(item)amethyst/$, I've unlocked the ability to cast spells using my own mind and life energy-- just as I read of in the legends of old.$(p)I'm not sure why I can now. It's just... the truth-knowledge-burden was always there, and I see it now. I know it. I bear it.$(br2)Fortunately, I feel my limits as well-- I would get approximately two $(item)Charged Amethyst/$'s worth of _media out of my health at its prime.",
|
||||
"hexcasting.page.couldnt_cast.3": "...After careful reflection... I have discovered a change in myself.$(p)It seems... in lieu of $(l:items/amethyst)$(item)amethyst/$, I've unlocked the ability to cast spells using my own mind and life energy-- just as I read of in the legends of old.$(p)I'm not sure why I can now. It's just... the truth-knowledge-burden was always there, and I see it now. I know it. I bear it.$(br2)Fortunately, I feel my limits as well-- I would get approximately two $(l:items/amethyst)$(item)Charged Amethyst/$'s worth of _media out of my health at its prime.",
|
||||
"hexcasting.page.couldnt_cast.4": "I shudder to even consider it-- I've kept my mind mostly intact so far, in my studies. But the fact is-- I form one side of a tenuous link.$(p)I'm connected to some other side-- a side whose boundary has thinned from that trauma. A place where simple actions spell out eternal glory.$(p)Is it so wrong, to want it for myself?",
|
||||
|
||||
"hexcasting.entry.start_to_see": "WHAT DID I SEE",
|
||||
"hexcasting.page.start_to_see.1": "The texts weren't lying. Nature took its due.",
|
||||
"hexcasting.page.start_to_see.2": "That... that was...$(p)...that was one of the $(italic)worst/$ things I've $(italic)ever/$ experienced. I offered my plan to Nature, and got a firm smile and a tearing sensation in return-- a piece of myself breaking away, like amethyst dust in the rain.$(p)I feel lucky to have $(italic)survived/$, much less have the sagacity to write this-- I should declare the matter closed, double-check my math before I cast any more _Hexes, and never make such a mistake again.",
|
||||
"hexcasting.page.start_to_see.3": "...But.$(br2)But for the scarcest instant, that part of myself... it $(italic)saw/$... something. A place-- a design, perhaps? (Such distinctions didn't seem to matter in the face of... that.)$(p)And a... a membrane-barrier-skin-border, separating myself from a realm of raw thought-flow-light-energy. I remember-- I saw-thought-recalled-felt-- the barrier fuzzing at its edges, just so slightly.$(p)I wanted $(italic)through./$",
|
||||
"hexcasting.page.start_to_see.3": "...But.$(br2)But for the scarcest instant, that part of myself... it $(italic)saw/$... $(l:greatwork/the_work)$(thing)something/$. A place-- a design, perhaps? (Such distinctions didn't seem to matter in the face of... that.)$(p)And a... a membrane-barrier-skin-border, separating myself from a realm of raw thought-flow-light-energy. I remember-- I saw-thought-recalled-felt-- the barrier fuzzing at its edges, just so slightly.$(p)I wanted $(italic)through./$",
|
||||
"hexcasting.page.start_to_see.4": "I shouldn't. I $(italic)know/$ I shouldn't. It's dangerous. It's too dangerous. I'd have to bring myself within a hair's breadth of Death itself.$(br2)But I'm. So. $(italic)Close/$.$(p)$(italic)This/$ is the culmination of my art. This is the $(#54398a)Enlightenment/$ I've been seeking. $(br2)I want more. I need to see it again. I $(italic)will/$ see it.$(p)What is my mortal mind against immortal glory?",
|
||||
|
||||
|
||||
"_comment": "Casting",
|
||||
|
||||
"hexcasting.entry.101": "Hexing 101",
|
||||
"hexcasting.page.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 $(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).",
|
||||
"hexcasting.page.101.2": "Once I've drawn enough patterns to cast a spell, the grid will disappear as the _media I've stored up is released. Holding $(k:sneak) while using my staff will also clear the grid, if I don't mind the chance of mishap. (It seems that the more _media I've built up, the more likely I'll meet misfortune.)$(br2)So how do patterns work? In short:$(li)$(italic)Patterns/$ will execute...$(li)$(italic)Actions/$, which manipulate...$(li)$(italic)The Stack/$, which is a list of...$(li)$(italic)Iotas/$, which are simply units of information.",
|
||||
"hexcasting.page.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).",
|
||||
"hexcasting.page.101.2": "Once I've drawn enough patterns to cast a spell, the grid will disappear as the _media I've stored up is released. Holding $(k:sneak) while using my $(l:items/staff)$(item)staff/$ will also clear the grid, if I don't mind the chance of mishap. (It seems that the more _media I've built up, the more likely I'll meet misfortune.)$(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.",
|
||||
"hexcasting.page.101.3": "First, $(thing)patterns/$. These are essential-- they're what I use to manipulate the _media around me. Certain patterns, when drawn, will cause $(thing)actions/$ to happen. Actions are what actually $(italic)do/$ the magic; all patterns influence _media in particular ways, and when those influences end up doing something useful, we call it an action.$(br2)_Media can be fickle: if I draw an invalid pattern, I'll get some garbage result somewhere on my stack (read on...)",
|
||||
"hexcasting.page.101.4.header": "An 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.",
|
||||
|
@ -435,9 +437,9 @@
|
|||
"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.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.10": "That aside, it doesn't seem like anyone has done much research on exactly how $(italic)much/$ any particular piece of amethyst is valued. The best I can tell, an $(item)Amethyst Shard/$ is worth about five pieces of $(item)Amethyst Dust/$, and a $(item)Charged Amethyst Crystal/$ is worth about ten.$(br2)Strangely enough, it seems like no other form of 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.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 $(item)Amethyst Dust/$'s worth of _media will consume an entire $(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...",
|
||||
"hexcasting.page.101.12": "I should also be careful to make sure I actually have enough Amethyst in my inventory-- some old texts say that Nature is happy to use one's own mind as payment instead. They describe the feeling as awful but strangely euphoric, \"[...] an effervescent dissolution into light and energy...\"$(br)Perhaps that's why all the old practitioners of the art went mad. I can't imagine burning pieces of my mind for power is $(italic)healthy/$.",
|
||||
"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.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...",
|
||||
"hexcasting.page.101.12": "I should also be careful to make sure I actually have enough Amethyst in my inventory-- some old texts say that Nature is happy to use one's own mind as payment instead. They describe the feeling as awful but strangely euphoric, \"[...] an effervescent dissolution into light and energy...\"Perhaps that's why all the old practitioners of the art went mad. I can't imagine burning pieces of my mind for power is $(italic)healthy/$.",
|
||||
"hexcasting.page.101.13": "Maybe something's changed, though. In my experiments, I've never managed to do it; if I run out of _media, the spell will simply fail to cast, as if some barrier is blocking it from harming me. $(br2)It would be interesting to get to the bottom of that mystery, but for now I suppose it'll keep me safe.",
|
||||
"hexcasting.page.101.14": "I have also found an amusing tidbit on why so many practitioners of magic in general seem to go mad, which I may like as some light and flavorful reading not canonical to my world.$(br2)$(italic)Content Warning: some body horror and suggestive elements./$",
|
||||
"hexcasting.page.101.14.link_text": "Goblin Punch",
|
||||
|
@ -455,11 +457,11 @@
|
|||
"hexcasting.page.mishaps.2": "A pattern that causes a mishap will glow red in my grid. Depending on the type of mistake, I can also expect a certain deleterious effect and a spray of red and colorful sparks as the mishandled _media curdles into light of a given color.$(br2)I also get a helpful error message in my chat, but a nagging feeling tells that will change once the \"mod updates,\" whatever that means. I shouldn't rely on always having it.",
|
||||
"hexcasting.page.mishaps.3": "Fortunately, although the bad effects of mishaps are certainly $(italic)annoying/$, none of them are especially destructive in the long term. Nothing better to do than dust myself off and try again ... but I should strive for better anyways.$(br2)Following is a list of mishaps I have compiled.",
|
||||
"hexcasting.page.mishaps.invalid_pattern.title": "Invalid Pattern",
|
||||
"hexcasting.page.mishaps.invalid_pattern": "The pattern drawn is not associated with any action.$(br2)Causes yellow sparks, and a $(item)Garbage/$ will be pushed to the top of my stack.",
|
||||
"hexcasting.page.mishaps.invalid_pattern": "The pattern drawn is not associated with any action.$(br2)Causes yellow sparks, and a $(l:casting/influences)$(action)Garbage/$ will be pushed to the top of my stack.",
|
||||
"hexcasting.page.mishaps.not_enough_iotas.title": "Not Enough Iotas",
|
||||
"hexcasting.page.mishaps.not_enough_iotas": "The action required more iotas than were on the stack.$(br2)Causes light gray sparks, and as many $(item)Garbage/$s as would be required to fill up the argument count will be pushed.",
|
||||
"hexcasting.page.mishaps.not_enough_iotas": "The action required more iotas than were on the stack.$(br2)Causes light gray sparks, and as many $(l:casting/influences)$(action)Garbages/$ as would be required to fill up the argument count will be pushed.",
|
||||
"hexcasting.page.mishaps.incorrect_iota.title": "Incorrect Iota",
|
||||
"hexcasting.page.mishaps.incorrect_iota": "The action that was executed expected an iota of a certain type for an argument, but it got something invalid. If multiple iotas are invalid, the error message will only tell me about the error deepest in the stack.$(br2)Causes dark gray sparks, and the invalid iota will be replaced with $(item)Garbage/$.",
|
||||
"hexcasting.page.mishaps.incorrect_iota": "The action that was executed expected an iota of a certain type for an argument, but it got something invalid. If multiple iotas are invalid, the error message will only tell me about the error deepest in the stack.$(br2)Causes dark gray sparks, and the invalid iota will be replaced with $(l:casting/influences)$(action)Garbage/$.",
|
||||
"hexcasting.page.mishaps.vector_out_of_range.title": "Vector Out of Ambit",
|
||||
"hexcasting.page.mishaps.vector_out_of_range": "The action tried to affect the world at a point that was out of my range.$(br2)Causes magenta sparks, and the items in my hands will be yanked out and flung towards the offending location.",
|
||||
"hexcasting.page.mishaps.entity_out_of_range.title": "Entity Out of Ambit",
|
||||
|
@ -467,17 +469,17 @@
|
|||
"hexcasting.page.mishaps.entity_immune.title": "Entity is Immune",
|
||||
"hexcasting.page.mishaps.entity_immune": "The action tried to affect an entity that cannot be altered by it.$(br2)Causes blue sparks, and the items in my hands will be yanked out and flung towards the offending entity.",
|
||||
"hexcasting.page.mishaps.math_error.title": "Mathematical Error",
|
||||
"hexcasting.page.mishaps.math_error": "The action did something offensive to the laws of mathematics, such as dividing by zero.$(br2)Causes red sparks, pushes a $(item)Garbage/$ to my stack, and my mind will be ablated, stealing half the vigor I have remaining. It seems that Nature takes offense to such operations, and divides $(italic)me/$ in retaliation.",
|
||||
"hexcasting.page.mishaps.math_error": "The action did something offensive to the laws of mathematics, such as dividing by zero.$(br2)Causes red sparks, pushes a $(l:casting/influences)$(action)Garbage/$ to my stack, and my mind will be ablated, stealing half the vigor I have remaining. It seems that Nature takes offense to such operations, and divides $(italic)me/$ in retaliation.",
|
||||
"hexcasting.page.mishaps.incorrect_item.title": "Incorrect Item",
|
||||
"hexcasting.page.mishaps.incorrect_item": "The action requires some sort of item, but the item I supplied was not suitable.$(br2)Causes brown sparks. If the offending item was in my hand, it will be flung to the floor. If it was in entity form, it will be flung in the air.",
|
||||
"hexcasting.page.mishaps.incorrect_block.title": "Incorrect Block",
|
||||
"hexcasting.page.mishaps.incorrect_block": "The action requires some sort of block at a target location, but the block supplied was not suitable.$(br2)Causes bright green sparks, and causes an ephemeral explosion at the given location; it will harm me and others, but will not destroy any blocks.",
|
||||
"hexcasting.page.mishaps.retrospection.title": "Hasty Retrospection",
|
||||
"hexcasting.page.mishaps.retrospection": "I attempted to draw $(action)Retrospection/$ without first drawing $(action)Introspection/$.$(br2)Causes orange sparks, and pushes the pattern for $(action)Retrospection/$ to the stack as a pattern iota.",
|
||||
"hexcasting.page.mishaps.retrospection": "I attempted to draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ without first drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$.$(br2)Causes orange sparks, and pushes the pattern for $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ to the stack as a pattern iota.",
|
||||
"hexcasting.page.mishaps.too_deep.title": "Delve Too Deep",
|
||||
"hexcasting.page.mishaps.too_deep": "Evaluated too many patterns from one action.$(br2)Causes dark blue sparks, and chokes all the air out of me.",
|
||||
"hexcasting.page.mishaps.true_name.title": "Transgress Other",
|
||||
"hexcasting.page.mishaps.true_name": "I attempted to save a reference to another player to a permanent medium.$(br2)Causes black sparks, and robs me of my sight for approximately one minute.",
|
||||
"hexcasting.page.mishaps.true_name": "I attempted to $(l:patterns/readwrite#hexcasting:read)$(action)save a reference/$ to another player to a permanent medium.$(br2)Causes black sparks, and robs me of my sight for approximately one minute.",
|
||||
"hexcasting.page.mishaps.disabled.title": "Disallowed Action",
|
||||
"hexcasting.page.mishaps.disabled": "I tried to cast an action that has been disallowed by a server administrator.$(br2)Causes black sparks.",
|
||||
"hexcasting.page.mishaps.invalid_iota.title": "Invalid Iota Type",
|
||||
|
@ -492,11 +494,11 @@
|
|||
"hexcasting.entry.naming": "Naming Actions",
|
||||
"hexcasting.page.naming.1": "The names given to actions by the ancients were certainly peculiar, but I think there's a certain kind of logic to them.$(br2)There seem to be certain groups of actions with common names, named for the number of iotas they remove from and add to the stack.",
|
||||
"hexcasting.page.naming.2": "$(li)A $(thing)Reflection/$ pops nothing and pushes one iota.$(li)A $(thing)Purification/$ pops one and pushes one.$(li)A $(thing)Distillation/$ pops two and pushes one.$(li)An $(thing)Exaltation/$ pops three or more and pushes one.$(li)A $(thing)Decomposition/$ pops one argument and pushes two.$(li)A $(thing)Disintegration/$ pops one and pushes three or more.$(li)Finally, a $(thing)Gambit/$ pushes or pops some other number (or rearranges the stack in some other manner).",
|
||||
"hexcasting.page.naming.3": "Spells seem to be exempt from this nomenclature and are more or less named after what they do-- after all, why call it a $(thing)Demoman's Gambit/$ when you could just say $(thing)Explosion/$?",
|
||||
"hexcasting.page.naming.3": "Spells seem to be exempt from this nomenclature and are more or less named after what they do-- after all, why call it a $(action)Demoman's Gambit/$ when you could just say $(l:patterns/spells/basic_spell#hexcasting:explode)$(action)Explosion/$?",
|
||||
|
||||
"hexcasting.entry.influences": "Influences",
|
||||
"hexcasting.page.influences.1": "Influences are ... strange, to say the least. Whereas most iotas seem to represent something about the world, influences represent something more... abstract, or formless.$(br2)For example, one influence I've named Null seems to represent nothing at all. It's created when there isn't a suitable answer to a question asked, such as an $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$ facing the sky.",
|
||||
"hexcasting.page.influences.2": "In addition, I've discovered a curious triplet of influences I've named Consideration, Introspection, and Retrospection. 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/$.",
|
||||
"hexcasting.page.influences.1": "Influences are ... strange, to say the least. Whereas most iotas seem to represent something about the world, influences represent something more... abstract, or formless.$(br2)For example, one influence I've named $(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.",
|
||||
"hexcasting.page.influences.2": "In addition, I've discovered a curious triplet of influences I've named $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$, and $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$. 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/$.",
|
||||
"hexcasting.page.influences.3": "Finally, there seems to be an infinite family of influences that just seem to be a tangled mess of _media. I've named them $(action)Garbage/$, as they are completely useless. They seem to appear in my stack at various places in response to $(l:casting/mishaps)mishaps/$. They appear to my senses as a nonsense jumble.",
|
||||
|
||||
"hexcasting.entry.mishaps2": "Enlightened Mishaps",
|
||||
|
@ -506,65 +508,66 @@
|
|||
"hexcasting.page.mishaps2.no_circle.title": "Lack Spell Circle",
|
||||
"hexcasting.page.mishaps2.no_circle": "Tried to cast an action requiring a spell circle without a spell circle.$(br2)Causes light blue sparks, and upends my inventory onto the ground.",
|
||||
"hexcasting.page.mishaps2.no_record.title": "Lack Akashic Record",
|
||||
"hexcasting.page.mishaps2.no_record": "Tried to access an akashic record at a location where there isn't one.$(br2)Causes purple sparks, and steals away some of my experience.",
|
||||
"hexcasting.page.mishaps2.no_record": "Tried to access an $(l:greatwork/akashiclib)$(item)Akashic Record/$ at a location where there isn't one.$(br2)Causes purple sparks, and steals away some of my experience.",
|
||||
|
||||
|
||||
"_comment": "Items",
|
||||
|
||||
"hexcasting.entry.amethyst": "Amethyst",
|
||||
"hexcasting.page.amethyst.dust": "It seems that I'll find three different forms of amethyst when breaking a crystal inside a geode. The smallest denomination seems to be a small pile of shimmering dust, worth a relatively small amount of _media.",
|
||||
"hexcasting.page.amethyst.shard": "The second is a whole shard of amethyst, of the type non-_Hexcasters might be used to. This has about as much _media inside as five $(item)Amethyst Dust/$s.",
|
||||
"hexcasting.page.amethyst.crystal": "Finally, I'll rarely find a large crystal crackling with energy. This has about as much _media inside as ten units of $(item)Amethyst Dust/$s (or two $(item)Amethyst Shard/$s).",
|
||||
"hexcasting.page.amethyst.shard": "The second is a whole shard of amethyst, of the type non-_Hexcasters might be used to. This has about as much _media inside as five $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.amethyst.crystal": "Finally, I'll rarely find a large crystal crackling with energy. This has about as much _media inside as ten units of $(l:items/amethyst)$(item)Amethyst Dust/$ (or two $(l:items/amethyst)$(item)Amethyst Shards/$).",
|
||||
"hexcasting.page.amethyst.lore": "$(italic)The old man sighed and raised a hand toward the fire. He unlocked a part of his brain that held the memories of the mountains around them. He pulled the energies from those lands, as he learned to do in Terisia City with Drafna, Hurkyl, the archimandrite, and the other mages of the Ivory Towers. He concentrated, and the flames writhed as they rose from the logs, twisting upon themselves until they finally formed a soft smile./$",
|
||||
|
||||
"hexcasting.entry.staff": "Staff",
|
||||
"hexcasting.page.staff.1": "A $(item)Staff/$ is my entry point into casting all _Hexes, large and small. By holding it and pressing $(thing)$(k:use)/$, I begin casting a _Hex; then I can click and drag to draw patterns.$(br2)It's little more than a chunk of _media on the end of a stick; that's all that's needed, after all.",
|
||||
"hexcasting.page.staff.1": "A $(l:items/staff)$(item)Staff/$ is my entry point into casting all _Hexes, large and small. By holding it and pressing $(thing)$(k:use)/$, I begin casting a _Hex; then I can click and drag to draw patterns.$(br2)It's little more than a chunk of _media on the end of a stick; that's all that's needed, after all.",
|
||||
"hexcasting.page.staff.crafting.header": "Staves",
|
||||
"hexcasting.page.staff.crafting.desc": "$(italic)Don't fight; flame, light; ignite; burn bright./$",
|
||||
|
||||
"hexcasting.entry.lens": "Scrying Lens",
|
||||
"hexcasting.page.lens.1": "_Media can have peculiar effects on any type of information, in specific circumstances. Coating a glass in a thin film of it can lead to ... elucidating insights.$(br2)By holding a $(item)Scrying Lens/$ in my hand, certain blocks will display additional information when I look at them.",
|
||||
"hexcasting.page.lens.2": "For example, looking at a piece of $(item)Redstone/$ will display its signal strength. I suspect I will discover other blocks with additional insight as my studies into my art progress.$(br2)In addition, holding it while casting using a $(item)Staff/$ will shrink the spacing between dots, allowing me to draw more on my grid.$(br2)I can also wear it on my head as a strange sort of monocle. This reveals information, but won't shrink my grid. No matter. There must be a way to have both...",
|
||||
"hexcasting.page.lens.1": "_Media can have peculiar effects on any type of information, in specific circumstances. Coating a glass in a thin film of it can lead to ... elucidating insights.$(br2)By holding a $(l:items/lens)$(item)Scrying Lens/$ in my hand, certain blocks will display additional information when I look at them.",
|
||||
"hexcasting.page.lens.2": "For example, looking at a piece of $(item)Redstone/$ will display its signal strength. I suspect I will discover other blocks with additional insight as my studies into my art progress.$(br2)In addition, holding it while casting using a $(l:items/staff)$(item)Staff/$ will shrink the spacing between dots, allowing me to draw more on my grid.$(br2)I can also wear it on my head as a strange sort of monocle. This reveals information, but won't shrink my grid. No matter. There must be a way to have both...",
|
||||
"hexcasting.page.lens.crafting.desc": "$(italic)You must learn... to see what you are looking at./$",
|
||||
|
||||
"hexcasting.entry.focus": "Focus",
|
||||
"hexcasting.page.focus.1": "A $(item)Focus/$ can store a single iota.$(br2)When I craft it, it holds the Null influence by default. Using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ while holding a $(item)Focus/$ in my other hand will remove the top of the stack and save it into the $(item)Focus/$. Using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$ will copy whatever iota's in the $(item)Focus/$ and add it to the stack.",
|
||||
"hexcasting.page.focus.2": "It occurs to me that I could conceivably store a whole list of patterns in a $(item)Focus/$, then recall them and evaluate them with $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$. This way I can cast complex spells, or parts of spells, without having to draw them over and over.$(br2)I could use this like a slightly less convenient $(l:items/hexcasting#artifact)$(item)Artifact/$, but I think I could get much better dividends by putting common \"phrases\" in a $(item)Focus/$, like the patterns for figuring out where I'm looking.",
|
||||
"hexcasting.page.focus.3": "Also, if I store an entity in a $(item)Focus/$ and try to recall it after the referenced entity has died or otherwise disappeared, the $(action)Scribe's Reflection/$ will add Null to the stack instead.$(br2)Finally, it seems if I wish to protect a focus from accidentally being overwritten, I can seal it with wax by crafting it with a $(item)Honeycomb/$. Attempting to use $(action)Scribe's Gambit/$ on a sealed focus will fail.",
|
||||
"hexcasting.page.focus.1": "A $(l:items/focus)$(item)Focus/$ can store a single iota.$(br2)When I craft it, it holds the $(l:casting/influences)$(thing)Null/$ influence by default. Using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ while holding a $(l:items/focus)$(item)Focus/$ in my other hand will remove the top of the stack and save it into the $(l:items/focus)$(item)Focus/$. Using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$ will copy whatever iota's in the $(l:items/focus)$(item)Focus/$ and add it to the stack.",
|
||||
"hexcasting.page.focus.2": "It occurs to me that I could conceivably store a whole list of patterns in a $(l:items/focus)$(item)Focus/$, then recall them and evaluate them with $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$. This way I can cast complex spells, or parts of spells, without having to draw them over and over.$(br2)I could use this like a slightly less convenient $(l:items/hexcasting#artifact)$(item)Artifact/$, but I think I could get much better dividends by putting common \"phrases\" in a $(l:items/focus)$(item)Focus/$, like the patterns for figuring out where I'm looking.",
|
||||
"hexcasting.page.focus.3": "Also, if I store an entity in a $(l:items/focus)$(item)Focus/$ 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.$(br2)Finally, it seems if I wish to protect a $(l:items/focus)$(item)focus/$ from accidentally being overwritten, I can seal it with wax by crafting it with a $(item)Honeycomb/$. Attempting to use $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ on a sealed focus will fail. $(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove this seal along with the contents.",
|
||||
"hexcasting.page.focus.crafting.desc": "$(italic)Poison apples, poison worms./$",
|
||||
|
||||
"hexcasting.entry.abacus": "Abacus",
|
||||
"hexcasting.page.abacus.1": "Although there are $(l:patterns/numbers)$(action)patterns for drawing numbers/$, I find them ... cumbersome, to say the least.$(br2)Fortunately, the old masters of my craft invented an ingenious device called an $(item)Abacus/$ to provide numbers to my casting. I simply set the number to what I want, then read the value using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, just like I would read a $(item)Focus/$.",
|
||||
"hexcasting.page.abacus.1": "Although there are $(l:patterns/numbers)$(action)patterns for drawing numbers/$, I find them ... cumbersome, to say the least.$(br2)Fortunately, the old masters of my craft invented an ingenious device called an $(l:items/abacus)$(item)Abacus/$ to provide numbers to my casting. I simply set the number to what I want, then read the value using $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, just like I would read a $(l:items/focus)$(item)Focus/$.",
|
||||
"hexcasting.page.abacus.2": "To operate one, I simply hold it, sneak, and scroll. If in my main hand, the number will increment or decrement by 1, or 10 if I am also holding Control/Command. If in my off hand, the number will increment or decrement by 0.1, or 0.001 if I am also holding Control/Command.$(br2)I can shake the abacus to reset it to zero by sneak-right-clicking.",
|
||||
"hexcasting.page.abacus.crafting.desc": "$(italic)Mathematics? That's for eggheads!/$",
|
||||
|
||||
"hexcasting.entry.spellbook": "Spellbook",
|
||||
"hexcasting.page.spellbook.1": "A $(item)Spellbook/$ is the culmination of my art-- it acts like an entire library of $(l:items/focus)$(item)Foci/$.$(br2)Each page can hold a single iota, and I can select the active page (the page that iotas are saved to and copied from) by sneak-scrolling while holding it, or simply holding it in my off-hand and scrolling while casting a _Hex.",
|
||||
"hexcasting.page.spellbook.1": "A $(l:items/spellbook)$(item)Spellbook/$ is the culmination of my art-- it acts like an entire library of $(l:items/focus)$(item)Foci/$.$(br2)Each page can hold a single iota, and I can select the active page (the page that iotas are saved to and copied from) by sneak-scrolling while holding it, or simply holding it in my off-hand and scrolling while casting a _Hex.",
|
||||
"hexcasting.page.spellbook.2": "Like a $(l:items/focus)$(item)Focus/$, there exists a simple method to prevent accidental overwriting. Crafting it with a $(item)Honeycomb/$ will lacquer the current page, preventing $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ from modifying its contents. Also like a $(l:items/focus)$(item)Focus/$, using $(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove the lacquer along with the page's contents.",
|
||||
"hexcasting.page.spellbook.crafting.desc": "$(italic)Wizards love words. Most of them read a great deal, and indeed one strong sign of a potential wizard is the inability to get to sleep without reading something first.",
|
||||
|
||||
"hexcasting.entry.scroll": "Scrolls",
|
||||
"hexcasting.page.scroll.1": "A $(item)Scroll/$ is a convenient method of sharing a pattern with others. I can copy a pattern onto one with $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, after which it will display in a tooltip.$(br2)I can also place them on the wall as decoration, like a Painting. Using $(item)Amethyst Dust/$ on such a scroll will have it display the stroke order.",
|
||||
"hexcasting.page.scroll.2": "In addition, I can also find so-called $(item)Ancient Scrolls/$ in the dungeons and strongholds of the world. These contain the stroke order of Great Spells, powerful magicks rumored to be too powerful for the hands and minds of mortals...$(br2)If those \"mortals\" couldn't cast them, I'm not sure they deserve to know them.",
|
||||
"hexcasting.page.scroll.1": "A $(l:items/scroll)$(item)Scroll/$ is a convenient method of sharing a pattern with others. I can copy a pattern onto one with $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, after which it will display in a tooltip.$(br2)I can also place them on the wall as decoration, like a Painting. Using $(l:items/amethyst)$(item)Amethyst Dust/$ on such a scroll will have it display the stroke order.",
|
||||
"hexcasting.page.scroll.2": "In addition, I can also find so-called $(l:items/scroll)$(item)Ancient Scrolls/$ in the dungeons and strongholds of the world. These contain the stroke order of $(thing)Great Spells/$, powerful magicks rumored to be too powerful for the hands and minds of mortals...$(br2)If those \"mortals\" couldn't cast them, I'm not sure they deserve to know them.",
|
||||
"hexcasting.page.scroll.crafting.desc": "$(italic)I write upon clean white parchment with a sharp quill and the blood of my students, divining their secrets./$",
|
||||
|
||||
"hexcasting.entry.slate": "Slates",
|
||||
"hexcasting.page.slate.1": "$(item)Slate/$s are similar to $(l:items/scroll)$(item)Scroll/$s; I can copy a pattern to them and place them in the world to display the pattern.$(br2)However, I have read vague tales of grand assemblies of $(item)Slate/$s, used to cast great rituals more powerful than can be handled by a $(item)Staff/$.",
|
||||
"hexcasting.page.slate.2": "Perhaps this knowledge will be revealed to me with time. But for now, I suppose they make a quaint piece of decor.$(br2)At the least, they can be placed on any side of a block, unlike $(item)Scroll/$s.",
|
||||
"hexcasting.page.slate.1": "$(l:items/slate)$(item)Slates/$ are similar to $(l:items/scroll)$(item)Scrolls/$; I can copy a pattern to them and place them in the world to display the pattern.$(br2)However, I have read vague tales of grand assemblies of $(l:items/slate)$(item)Slates/$, used to cast $(l:greatwork/spellcircles)$(thing)great rituals/$ more powerful than can be handled by a $(l:items/staff)$(item)Staff/$.",
|
||||
"hexcasting.page.slate.2": "Perhaps this knowledge will be revealed to me with time. But for now, I suppose they make a quaint piece of decor.$(br2)At the least, they can be placed on any side of a block, unlike $(l:items/scroll)$(item)Scrolls/$.",
|
||||
"hexcasting.page.slate.crafting.desc": "$(italic)This is the letter \"a.\" Learn it./$",
|
||||
"hexcasting.page.slate.3": "I'm also aware of other types of $(item)Slate/$s, slates that do not contain patterns but seem to be inlaid with other ... strange ... oddities. It hurts my brain to think about them, as if my thoughts get bent around their designs, following their pathways, bending and wefting through their labyrinthine depths, through and through and through channeled through and processed and--$(br2)... I almost lost myself. Maybe I should postpone my studies of those.",
|
||||
"hexcasting.page.slate.3": "I'm also aware of other types of $(l:items/slate)$(item)Slates/$, slates that do not contain patterns but seem to be inlaid with other ... strange ... oddities. It hurts my brain to think about them, as if my thoughts get bent around their designs, following their pathways, bending and wefting through their labyrinthine depths, through and through and through channeled through and processed and--$(br2)... I almost lost myself. Maybe I should postpone my studies of those.",
|
||||
|
||||
"hexcasting.entry.hexcasting": "Hexcasting Items",
|
||||
"hexcasting.entry.hexcasting": "Casting Items",
|
||||
"hexcasting.page.hexcasting.1": "Although the flexibility that casting _Hexes \"on the go\" with my $(l:items/staff)$(item)Staff/$ is quite helpful, it's a huge pain to have to wave it around repeatedly just to accomplish a common task. If I could save a common spell for later reuse, it would simplify things a lot-- and allow me to share my _Hexes with friends, too.",
|
||||
"hexcasting.page.hexcasting.2": "To do this, I can craft one of three types of magic items: $(item)Cypher/$s, $(item)Trinket/$s, or $(item)Artifact/$s. All of them hold the patterns of a given _Hex inside, along with a small battery containing _media.$(br2)Simply holding one and pressing $(thing)$(k:use)/$ will cast the patterns inside, as if the holder had cast them out of a staff, using its internal battery.",
|
||||
"hexcasting.page.hexcasting.3": "Each item has its own quirks:$(br2)$(item)Cypher/$s are fragile, destroyed after their internal _media reserves are gone, and cannot be recharged;$(br2)$(item)Trinket/$s can be cast as much as the holder likes, as long as there's enough _media left, but become useless afterwards until recharged;",
|
||||
"hexcasting.page.hexcasting.4": "$(item)Artifact/$s are the most powerful of all-- after their _media is depleted, they can use $(l:items/amethyst)$(item)Amethyst/$ from the holder's inventory to pay for the _Hex, just as I do when casting with a $(item)Staff/$. Of course, this also means the spell might consume their mind if there's not enough $(item)Amethyst/$.$(br2)Once I've made an empty magic item in a mundane crafting bench, I infuse the _Hex into it using (what else but) a spell appropriate to the item. $(l:patterns/spells/hexcasting)I've catalogued the patterns here./$",
|
||||
"hexcasting.page.hexcasting.5": "Each infusion spell requires an entity and a list of patterns on the stack. The entity must be a _media-holding item entity (i.e. amethyst crystals, dropped on the ground); the entity is consumed and forms the battery.$(br2)Usefully, it seems that the _media in the battery is not consumed in chunks as it is when casting with a $(item)Staff/$-- rather, the _media \"melts down\" into one continuous pool. Thus, if I store a _Hex that only costs one $(item)Amethyst Dust/$'s worth of mana, a $(item)Charged Crystal/$ used as the battery will allow me to cast it 10 times.",
|
||||
"hexcasting.page.hexcasting.2": "To do this, I can craft one of three types of magic items: $(l:items/hexcasting)$(item)Cyphers/$, $(l:items/hexcasting)$(item)Trinkets/$, or $(l:items/hexcasting)$(item)Artifacts/$. All of them hold the patterns of a given _Hex inside, along with a small battery containing _media.$(br2)Simply holding one and pressing $(thing)$(k:use)/$ will cast the patterns inside, as if the holder had cast them out of a staff, using its internal battery.",
|
||||
"hexcasting.page.hexcasting.3": "Each item has its own quirks:$(br2)$(item)Cyphers/$ are fragile, destroyed after their internal _media reserves are gone, and $(italic)cannot/$ be recharged;$(br2)$(item)Trinkets/$ can be cast as much as the holder likes, as long as there's enough _media left, but become useless afterwards until recharged;",
|
||||
"hexcasting.page.hexcasting.4": "$(l:items/hexcasting)$(item)Artifacts/$ are the most powerful of all-- after their _media is depleted, they can use $(l:items/amethyst)$(item)Amethyst/$ from the holder's inventory to pay for the _Hex, just as I do when casting with a $(l:items/staff)$(item)Staff/$. Of course, this also means the spell might consume their mind if there's not enough $(l:items/amethyst)$(item)Amethyst/$.$(br2)Once I've made an empty magic item in a mundane crafting bench, I infuse the _Hex into it using (what else but) a spell appropriate to the item. $(l:patterns/spells/hexcasting)I've catalogued the patterns here./$",
|
||||
"hexcasting.page.hexcasting.5": "Each infusion spell requires an entity and a list of patterns on the stack. The entity must be a _media-holding item entity (i.e. $(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 mana, a $(l:items/amethyst)$(item)Charged Crystal/$ used as the battery will allow me to cast it 10 times.",
|
||||
"hexcasting.page.hexcasting.crafting.desc": "$(italic)We have a saying in our field: \"Magic isn't\". It doesn't \"just work,\" it doesn't respond to your thoughts, you can't throw fireballs or create a roast dinner from thin air or turn a bunch of muggers into frogs and snails./$",
|
||||
|
||||
"hexcasting.entry.phials": "Phials of Media",
|
||||
"hexcasting.page.phials.1": "I find it quite ... irritating, how Nature refuses to give me change for my work. If all I have on hand is $(item)Charged Crystal/$s, even the tiniest $(action)Archer's Purification/$ will consume the entire crystal, wasting the remaining _media.$(br2)Fortunately, it seems I've found a way somewhat allay this problem.",
|
||||
"hexcasting.page.phials.2": "I've found old scrolls describing a $(item)Glass Bottle/$ infused with _media. When casting _Hexes, my spells would then draw _media out of the phial. The liquid form of the _media would let me take exact change, so to speak; nothing would be wasted. It's quite like the internal battery of a $(item)Trinket/$, or similar; I can even $(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)Recharge/$ them in the same manner.",
|
||||
"hexcasting.page.phials.3": "Unfortunately, the art of actually $(italic)making/$ the things seems to have been lost to time. I've found a hint at the pattern used to craft it, but the technique is irritatingly elusive, and I can't seem to do it successfully. I suspect I will figure it out with study and practice, though. For now, I will simply deal with the wasted _media...$(br2)But I won't settle for it forever.",
|
||||
"hexcasting.page.phials.1": "I find it quite ... irritating, how Nature refuses to give me change for my work. If all I have on hand is $(l:items/amethyst)$(item)Charged Crystals/$, even the tiniest $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Purification/$ will consume the entire crystal, wasting the remaining _media.$(br2)Fortunately, it seems I've found a way to somewhat allay this problem.",
|
||||
"hexcasting.page.phials.2": "I've found old scrolls describing a $(item)Glass Bottle/$ infused with _media. When casting _Hexes, my spells would then draw _media out of the phial. The liquid form of the _media would let me take exact change, so to speak; nothing would be wasted. It's quite like the internal battery of a $(l:items/hexcasting)$(item)Trinket/$, or similar; I can even $(l:patterns/spells/hexcasting#hexcasting:recharge)$(action)Recharge/$ them in the same manner.",
|
||||
"hexcasting.page.phials.3": "Unfortunately, the art of actually $(italic)making/$ the things seems to have been lost to time. I've found a $(l:patterns/great_spells/make_battery#hexcasting:craft/battery)$(thing)hint at the pattern used to craft it/$, but the technique is irritatingly elusive, and I can't seem to do it successfully. I suspect I will figure it out with study and practice, though. For now, I will simply deal with the wasted _media...$(br2)But I won't settle for it forever.",
|
||||
"hexcasting.page.phials.desc": "$(italic)Drink the milk./$",
|
||||
|
||||
"hexcasting.entry.pigments": "Pigments",
|
||||
|
@ -581,9 +584,9 @@
|
|||
|
||||
"hexcasting.entry.decoration": "Decorative Blocks",
|
||||
"hexcasting.page.decoration.1": "In the course of my studies I have discovered some building blocks and trifles that I may find aesthetically pleasing. I've compiled the methods of making them here.",
|
||||
"hexcasting.page.decoration.ancient_scroll.crafting.desc": "Brown dye works well enough to simulate the look of an ancient scroll.",
|
||||
"hexcasting.page.decoration.tiles.crafting.desc": "$(item)Amethyst Tile/$s can also be made in a Stonecutter.$(br2)$(item)Blocks of Amethyst Dust/$ (next page) will fall like sand.",
|
||||
"hexcasting.page.decoration.sconce.crafting.desc": "$(item)Amethyst Sconce/$s emit light and particles, as well as a pleasing chiming sound.",
|
||||
"hexcasting.page.decoration.ancient_scroll.crafting.desc": "Brown dye works well enough to simulate the look of an $(l:items/scroll)$(item)ancient scroll/$.",
|
||||
"hexcasting.page.decoration.tiles.crafting.desc": "$(l:items/decoration)$(item)Amethyst Tiles/$ can also be made in a Stonecutter.$(br2)$(item)Blocks of Amethyst Dust/$ (next page) will fall like sand.",
|
||||
"hexcasting.page.decoration.sconce.crafting.desc": "$(l:items/decoration)$(item)Amethyst Sconces/$ emit light and particles, as well as a pleasing chiming sound.",
|
||||
|
||||
|
||||
"_comment": "The Work",
|
||||
|
@ -593,43 +596,43 @@
|
|||
"hexcasting.page.the_work.2": "I have seen staccato-needle patterns and acid-etched schematics written on the inside of my eyelids. They smolder there-- they dance, they taunt, they $(italic)ache/$. I'm possessed by an intense $(italic)need/$ to draw them, create them. Form them. Liberate them from the gluey shackles of my mortal mind-- present them in their Glory to the world for all to see.$(p)All shall see.$(p)All will see.",
|
||||
|
||||
"hexcasting.entry.brainsweeping": "On the Flaying of Minds",
|
||||
"hexcasting.page.brainsweeping.1": "A secret was revealed to me. I saw it. I cannot forget its horror. The idea skitters across my brain.$(br2)I belived-- oh, foolishly, I $(italic)believed/$ --that _Media is the spare energy left over by thought. But now I $(italic)know/$ what it is: the energy $(italic)of/$ thought.",
|
||||
"hexcasting.page.brainsweeping.1": "A secret was revealed to me. I saw it. I cannot forget its horror. The idea skitters across my brain.$(br2)I believed-- oh, foolishly, I $(italic)believed/$ --that _Media is the spare energy left over by thought. But now I $(italic)know/$ what it is: the energy $(italic)of/$ thought.",
|
||||
"hexcasting.page.brainsweeping.2": "It is produced by thinking sentience and allows sentience to think. It is a knot tying that braids into its own string. The Entity I naively anthromorphized as Nature is simply a grand such tangle, or perhaps the set of all tangles, or ... if I think it hurts I have so many synapses and all of them can think pain at once ALL OF THEM CAN SEE$(br2)I am not holding on. My notes. Quickly.",
|
||||
"hexcasting.page.brainsweeping.3": "The villagers of this world have enough consciousness left to be extracted. Place it into a block, warp it, change it. Intricate patterns caused by different patterns of thought, the abstract neural pathways of their jobs and lives mapped into the cold physic of solid atoms.$(br2)This is what $(l:patterns/great_spells/brainsweep)$(action)Flay Mind/$ does, the extraction. Target the villager entity and the destination block. Ten $(item)Charged Crystals/$ for this perversion of will.",
|
||||
"hexcasting.page.brainsweeping.3": "The villagers of this world have enough consciousness left to be extracted. Place it into a block, warp it, change it. Intricate patterns caused by different patterns of thought, the abstract neural pathways of their jobs and lives mapped into the cold physic of solid atoms.$(br2)This is what $(l:patterns/great_spells/brainsweep)$(action)Flay Mind/$ does, the extraction. Target the villager entity and the destination block. Ten $(l:items/amethyst)$(item)Charged Crystals/$ for this perversion of will.",
|
||||
"hexcasting.page.brainsweeping.budding_amethyst": "And an application. For this flaying, any sort of villager will do, if it has developed enough. Other recipes require more specific types. NO MORE must I descend into the hellish earth for my _media.",
|
||||
|
||||
"hexcasting.entry.spellcircles": "Spell Circles",
|
||||
"hexcasting.page.spellcircles.1": "I KNOW what the $(item)slates/$ are for. The grand assemblies lost to time. The patterns scribed on them can be actuated in sequence, automatically. Thought and power ricocheting through, one by one by one by one by one by through and through and THROUGH AND -- I must not I must not I should know better than to think that way.",
|
||||
"hexcasting.page.spellcircles.2": "To start the ritual I need an $(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(item)slate/$s or other blocks suitable for the energies, one by one, collecting any patterns it finds. Once the wave circles back around to the $(item)Impetus/$, all the patterns encountered are cast in order.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.",
|
||||
"hexcasting.page.spellcircles.1": "I KNOW what the $(l:items/slate)$(item)slates/$ are for. The grand assemblies lost to time. The patterns scribed on them can be actuated in sequence, automatically. Thought and power ricocheting through, one by one by one by one by one by through and through and THROUGH AND -- I must not I must not I should know better than to think that way.",
|
||||
"hexcasting.page.spellcircles.2": "To start the ritual I need an $(l:greatwork/impetus)$(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(l:items/slate)$(item)slates/$ or other blocks suitable for the energies, one by one, collecting any patterns it finds. Once the wave circles back around to the $(l:greatwork/impetus)$(item)Impetus/$, all the patterns encountered are cast in order.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.",
|
||||
"hexcasting.page.spellcircles.3": "As a result, the outline of the spell \"circle\" may be any closed shape, concave or convex, and it may face any direction. In fact, with the application of certain other blocks it is possible to make a spell circle that spans all three dimensions. I doubt such an oddity has very much use, but I must allocate myself a bit of vapid levity to encourage my crude mind to continue my work.",
|
||||
"hexcasting.page.spellcircles.4": "Miracle of miracles, the circle will withdraw _media neither from my inventory nor my mind. Instead, crystallized shards of _media must be provided to the $(item)Impetus/$ via hopper, or other such artifice.$(br2)The application of a $(item)Scrying Lens/$ will show how much _media is inside an $(item)Impetus/$, in units of dust.",
|
||||
"hexcasting.page.spellcircles.4": "Miracle of miracles, the circle will withdraw _media neither from my inventory nor my mind. Instead, crystallized shards of _media must be provided to the $(l:greatwork/impetus)$(item)Impetus/$ via hopper, or other such artifice.$(br2)The application of a $(l:items/lens)$(item)Scrying Lens/$ will show how much _media is inside an $(l:greatwork/impetus)$(item)Impetus/$, in units of dust.",
|
||||
"hexcasting.page.spellcircles.5": "However, a spell cast from a circle does have one major limitation: it is unable to affect anything outside of the circle's bounds. That is, it cannot interact with anything outside of the cuboid of minimum size which encloses every block composing it (so a concave spell circle can still affect things in the concavity).",
|
||||
"hexcasting.page.spellcircles.6": "There is also a limit on the number of blocks the wave can travel through before it disintegrates, but it is large enough I doubt I will have any trouble.$(br2)Conversely, there are some actions that can only be cast from a circle. Fortunately, none of them are spells; they all seem to deal with components of the circle itself. My notes on the subject are $(l:patterns/circle)here/$.",
|
||||
"hexcasting.page.spellcircles.7": "I also found a sketch of a spell circle used by the ancients buried in my notes. Facing this page is my (admittedly poor) copy of it.$(br2)The patterns there would have been executed counter-clockwise, starting with $(action)Mind's Reflection/$ and ending with $(action)Greater Teleport/$.",
|
||||
"hexcasting.page.spellcircles.7": "I also found a sketch of a spell circle used by the ancients buried in my notes. Facing this page is my (admittedly poor) copy of it.$(br2)The patterns there would have been executed counter-clockwise, starting with $(l:patterns/basics#hexcasting:get_caster)$(action)Mind's Reflection/$ and ending with $(l:patterns/great_spells/teleport#hexcasting:teleport)$(action)Greater Teleport/$.",
|
||||
"hexcasting.page.spellcircles.teleport_circle.title": "Teleportation Circle",
|
||||
|
||||
"hexcasting.entry.impetus": "Impetuses",
|
||||
"hexcasting.page.impetus.1": "The fluctuation of _media required to actuate a spell circle is complex. Even the mortal with sharpest eyes and steadiest hands could not serve as an $(item)Impetus/$ and weave _media into the self-sustaining ourobouros required.$(br2)The problem is that the mind is too full of other useless $(italics)garbage/$.",
|
||||
"hexcasting.page.impetus.1": "The fluctuation of _media required to actuate a spell circle is complex. Even the mortal with sharpest eyes and steadiest hands could not serve as an $(l:greatwork/impetus)$(item)Impetus/$ and weave _media into the self-sustaining oroboros required.$(br2)The problem is that the mind is too full of other useless $(italics)garbage/$.",
|
||||
"hexcasting.page.impetus.2": "At a ... metaphysical level-- I must be careful with these thoughts, I cannot lose myself, I have become too valuable --moving _media moves the mind, and the mind must be moved for the process to work. But, the mind is simply too $(italic)heavy/$ with other thoughts to move nimbly enough.$(br2)It is like an artisan trying to repair a watch while wearing mittens.",
|
||||
"hexcasting.page.impetus.3": "There are several solutions to this conundrum: through meditative techniques one can learn to blank the mind, although I am not certain a mind free enough to actuate a circle can concentrate hard enough to do the motions.$(br2)Certain unsavory compounds can create a similar effect, but I know nothing of them and do not plan to learn. I must not rely on the chemicals of my brain.",
|
||||
"hexcasting.page.impetus.4": "The solution I aim for, then, is to specialize a mind. Remove it from the tyranny of nerves, clip all outputs but delicate splays of _media-manipulating apparati, cauterize all inputs but the signal to start its work.$(br2)The process of $(action)mindflaying/$ I am now familiar with will do excellently; the mind of a villager is complex enough to do the work, but not so complex as to resist its reformation.",
|
||||
"hexcasting.page.impetus.empty_impetus": "First, the cradle. Although it does not work as an $(item)Impetus/$, the flow of _media in a circle will only exit out the side pointed to by the arrows. This allows me to change the plane in which the wave flows, for example.",
|
||||
"hexcasting.page.impetus.impetus_rightclick": "Then, to transpose the mind. Villagers of different professions will lend different actuation conditions to the resulting $(item)Impetus/$. A Toolsmith's activates on a simple $(k:use).",
|
||||
"hexcasting.page.impetus.impetus_storedplayer.1": "A Cleric Impetus must be bound to a player by using an item with a reference to that player, like a $(item)Focus/$, on the block. Then, it activates when receiving a redstone signal.$(br2)",
|
||||
"hexcasting.page.impetus.impetus_storedplayer.2": "Peculiarly to this Impetus, the bound player, as well as a small region around them, are always accessible to the spell circle. It's as if they were standing within the bounds of the circle, no matter how far away they might stand.$(br2)The bound player is shown when looking at a Cleric Impetus through a $(item)Scrying Lens/$.",
|
||||
"hexcasting.page.impetus.impetus_look": "A Fletcher Impetus activates when looked at for a short time.",
|
||||
"hexcasting.page.impetus.4": "The solution I aim for, then, is to specialize a mind. Remove it from the tyranny of nerves, clip all outputs but delicate splays of _media-manipulating apparati, cauterize all inputs but the signal to start its work.$(br2)The process of $(l:greatwork/brainsweeping)$(action)mindflaying/$ I am now familiar with will do excellently; the mind of a villager is complex enough to do the work, but not so complex as to resist its reformation.",
|
||||
"hexcasting.page.impetus.empty_impetus": "First, the cradle. Although it does not work as an $(l:greatwork/impetus)$(item)Impetus/$, the flow of _media in a circle will only exit out the side pointed to by the arrows. This allows me to change the plane in which the wave flows, for example.",
|
||||
"hexcasting.page.impetus.impetus_rightclick": "Then, to transpose the mind. Villagers of different professions will lend different actuation conditions to the resulting $(l:greatwork/impetus)$(item)Impetus/$. A $(l:greatwork/impetus)$(item)Toolsmith Impetus/$ activates on a simple $(k:use).",
|
||||
"hexcasting.page.impetus.impetus_storedplayer.1": "A $(l:greatwork/impetus)$(item)Cleric Impetus/$ must be bound to a player by using an item with a reference to that player, like a $(l:items/focus)$(item)Focus/$, on the block. Then, it activates when receiving a redstone signal.",
|
||||
"hexcasting.page.impetus.impetus_storedplayer.2": "Peculiarly to this $(l:greatwork/impetus)$(item)Impetus/$, the bound player, as well as a small region around them, are always accessible to the spell circle. It's as if they were standing within the bounds of the circle, no matter how far away they might stand.$(br2)The bound player is shown when looking at a $(l:greatwork/impetus)$(item)Cleric Impetus/$ through a $(l:items/lens)$(item)Scrying Lens/$.",
|
||||
"hexcasting.page.impetus.impetus_look": "A $(l:greatwork/impetus)$(item)Fletcher Impetus/$ activates when looked at for a short time.",
|
||||
|
||||
"hexcasting.entry.directrix": "Directrices",
|
||||
"hexcasting.page.directrix.1": "Simpler than the task of creating a self-sustaining wave of _media is the task of directing it. Ordinarily the wave disintegrates when coming upon a crossroads, but with a mind to guide it, an exit direction can be controlled.$(br2)This manipulation is not nearly so fine as the delicacy of actuating a spell circle. In fact, it might be possible to do it by hand... but the packaged minds I have access to now would be so very convenient.",
|
||||
"hexcasting.page.directrix.2": "A Directrix accepts a wave of _media and determines to which of the arrows it will exit from, depending on the villager mind inside.$(br2)I am not certain if this idea was bestowed upon me, or if my mind is bent around the barrier enough to splint off its own ideas now... but if the idea came from my own mind, if I thought it, can it be said it was bestowed? The brain is a vessel for the mind and the mind is a vessel for ideas and the ideas vessel thought and thought sees all and knows all-- I MUST N O T",
|
||||
"hexcasting.page.directrix.2": "A $(l:greatwork/directrix)$(item)Directrix/$ accepts a wave of _media and determines to which of the arrows it will exit from, depending on the villager mind inside.$(br2)I am not certain if this idea was bestowed upon me, or if my mind is bent around the barrier enough to splint off its own ideas now... but if the idea came from my own mind, if I thought it, can it be said it was bestowed? The brain is a vessel for the mind and the mind is a vessel for ideas and the ideas vessel thought and thought sees all and knows all-- I MUST N O T",
|
||||
"hexcasting.page.directrix.empty_directrix": "Firstly, a design for the cradle ... although, perhaps \"substrate\" would be more accurate a word. Without a mind guiding it, the output direction is determined by microscopic fluctuations in the _media wave and surroundings, making it effectively random.",
|
||||
"hexcasting.page.directrix.directrix_redstone": "A Mason Directrix switches output side based on a redstone signal. Without a signal, the exit is the _media-color side; with a signal, the exit is the redstone-color side.",
|
||||
"hexcasting.page.directrix.directrix_redstone": "A $(l:greatwork/directrix)$(item)Mason Directrix/$ switches output side based on a redstone signal. Without a signal, the exit is the _media-color side; with a signal, the exit is the redstone-color side.",
|
||||
|
||||
"hexcasting.entry.akashiclib": "Akashic Libraries",
|
||||
"hexcasting.page.akashiclib.1": "I KNOW SO MUCH it is ONLY RIGHT to have a place to store it all. Information can be stored in books but it is oh so so so so $(italic)slow/$ to write by hand and read by eye. I demand BETTER. And so I shall MAKE better.$(br2)... I am getting worse ... do not know if I have time to write everything bursting through my head before expiring.",
|
||||
"hexcasting.page.akashiclib.2": "The library. Here. My plans.$(br2)Like how patterns are associated with actions, I can associate my own patterns with iotas in any way I choose. An $(item)Akashic Record/$ controls the library, and each $(item)Akashic Bookshelf/$ stores one pattern mapped to one iota. These must all be directly connected together, touching. An $(item)Akashic Ligature/$ doesn't do anything but count as a connecting block, to extend the size of my library.",
|
||||
"hexcasting.page.akashiclib.2": "The library. Here. My plans.$(br2)Like how patterns are associated with actions, I can associate my own patterns with iotas in any way I choose. An $(l:greatwork/akashiclib)$(item)Akashic Record/$ controls the library, and each $(l:greatwork/akashiclib)$(item)Akashic Bookshelf/$ stores one pattern mapped to one iota. These must all be directly connected together, touching. An $(l:greatwork/akashiclib)$(item)Akashic Ligature/$ doesn't do anything but count as a connecting block, to extend the size of my library.",
|
||||
"hexcasting.page.akashiclib.akashic_record": "Allocating and assigning patterns is simple but oh so boring. I have better things to do. I will need a mind well-used to its work for the extraction to stay sound.",
|
||||
"hexcasting.page.akashiclib.3": "Then to operate the library is simple, the patterns are routed through the librarian and it looks them up and returns the iota to you. Two actions do the work. $(l:patterns/akashic_patterns)Notes here/$.$(br2)Using an empty scroll on a bookshelf copies the pattern there onto the scroll. Sneaking and using an empty hand clears the datum in the shelf.",
|
||||
"hexcasting.page.akashiclib.3": "Then to operate the library is simple, the patterns are routed through the librarian and it looks them up and returns the iota to you. Two actions do the work. $(l:patterns/akashic_patterns)Notes here/$.$(br2)Using an empty $(l:items/scroll)$(item)scroll/$ on a bookshelf copies the pattern there onto the $(l:items/scroll)$(item)scroll/$. Sneaking and using an empty hand clears the datum in the shelf.",
|
||||
|
||||
"_comment": "Patterns",
|
||||
|
||||
|
@ -647,9 +650,9 @@
|
|||
"hexcasting.page.basics_pattern.get_entity_velocity": "Transforms an entity on the stack into the direction in which it's moving, with the speed of that movement as that direction's magnitude.",
|
||||
"hexcasting.page.basics_pattern.print": "Displays the top iota of the stack to me.",
|
||||
"hexcasting.page.basics_pattern.raycast.1": "Combines two vectors (a position and a direction) into the answer to the question: If I stood at the position and looked in the direction, what block would I be looking at?",
|
||||
"hexcasting.page.basics_pattern.raycast.2": "For example, casting this with my own position and look vectors will return the coordinates of the block I am looking at.$(br2)If it doesn't hit anything, the vectors will combine into Null.",
|
||||
"hexcasting.page.basics_pattern.raycast.2": "For example, casting this with my own position and look vectors will return the coordinates of the block I am looking at.$(br2)If it doesn't hit anything, the vectors will combine into $(l:casting/influences)$(thing)Null/$.",
|
||||
"hexcasting.page.basics_pattern.raycast/axis.1": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation$(/l), but instead returns a vector representing the answer to the question: Which $(italic)side/$ of the block am I looking at?",
|
||||
"hexcasting.page.basics_pattern.raycast/axis.2": "More specifically, it returns the $(italic)normal vector/$ of the face hit, or a unit vector pointing perpendicular to the face.$(li)If I am looking at a floor, it will return (0, 1, 0).$(li)If I am looking at the south face of a block, it will return (0, 0, 1).$(br)",
|
||||
"hexcasting.page.basics_pattern.raycast/axis.2": "More specifically, it returns the $(italic)normal vector/$ of the face hit, or a unit vector pointing perpendicular to the face.$(li)If I am looking at a floor, it will return (0, 1, 0).$(li)If I am looking at the south face of a block, it will return (0, 0, 1).",
|
||||
"hexcasting.page.basics_pattern.raycast/entity": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation$(/l), but instead returns the $(italic)entity/$ I am looking at.",
|
||||
|
||||
"hexcasting.entry.numbers": "Number Literals",
|
||||
|
@ -702,7 +705,7 @@
|
|||
"hexcasting.page.consts.const/double/tau": "Adds τ, the radial representation of a complete circle, to the stack.",
|
||||
"hexcasting.page.consts.const/double/pi": "Adds π, the radial representation of half a circle, to the stack.",
|
||||
"hexcasting.page.consts.const/double/e": "Adds $(italic)e/$, the base of natural logarithms, to the stack.",
|
||||
"hexcasting.page.consts.const/null": "Adds the Null influence to the top of the stack.",
|
||||
"hexcasting.page.consts.const/null": "Adds the $(l:casting/influences)$(thing)Null/$ influence to the top of the stack.",
|
||||
|
||||
"hexcasting.entry.stackmanip": "Stack Manipulation",
|
||||
"hexcasting.page.stackmanip.swap": "Swaps the top two iotas of the stack.",
|
||||
|
@ -723,161 +726,161 @@
|
|||
"hexcasting.page.logic.less_eq": "If the first argument is less than or equal to the second, return 1. Otherwise, return 0.",
|
||||
"hexcasting.page.logic.equals": "If the first argument equals the second (within a small tolerance), return 1. Otherwise, return 0.",
|
||||
"hexcasting.page.logic.not_equals": "If the first argument does not equal the second (outside a small tolerance), return 1. Otherwise, return 0.",
|
||||
"hexcasting.page.logic.not": "If the argument is 0 or Null, return 1. Otherwise, return 0.",
|
||||
"hexcasting.page.logic.identity": "If the argument is 0, return Null. If it's Null, return 0. Otherwise, return the argument",
|
||||
"hexcasting.page.logic.or": "If the first argument is not Null, return it. Otherwise, return the second argument.",
|
||||
"hexcasting.page.logic.and": "If the first argument is Null, return Null. Otherwise, return the second argument.",
|
||||
"hexcasting.page.logic.xor": "If either argument (but not both) is Null, return the non-Null argument. Otherwise, return Null.",
|
||||
"hexcasting.page.logic.not": "If the argument is 0 or $(l:casting/influences)$(thing)Null/$, return 1. Otherwise, return 0.",
|
||||
"hexcasting.page.logic.identity": "If the argument is 0, return $(l:casting/influences)$(thing)Null/$. If it's $(l:casting/influences)$(thing)Null/$, return 0. Otherwise, return the argument",
|
||||
"hexcasting.page.logic.or": "If the first argument is not $(l:casting/influences)$(thing)Null/$, return it. Otherwise, return the second argument.",
|
||||
"hexcasting.page.logic.and": "If the first argument is $(l:casting/influences)$(thing)Null/$, return $(l:casting/influences)$(thing)Null/$. Otherwise, return the second argument.",
|
||||
"hexcasting.page.logic.xor": "If either argument (but not both) is $(l:casting/influences)$(thing)Null/$, return the non-$(l:casting/influences)$(thing)Null/$ argument. Otherwise, return $(l:casting/influences)$(thing)Null/$.",
|
||||
|
||||
"hexcasting.entry.entities": "Entities",
|
||||
"hexcasting.page.entities.get_entity": "Transform the position on the stack into the entity at that location (or null if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/animal": "Transform the position on the stack into the animal at that location (or null if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/monster": "Transform the position on the stack into the monster at that location (or null if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/item": "Transform the position on the stack into the dropped item at that location (or null if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/player": "Transform the position on the stack into the player at that location (or null if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/living": "Transform the position on the stack into the living creature at that location (or null if there isn't one).",
|
||||
"hexcasting.page.entities.zone_entity/animal": "$(br)Take a position and maximum distance on the stack, and combine them into a list of animals near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_animal": "$(br)Take a position and maximum distance on the stack, and combine them into a list of non-animal entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity/monster": "$(br)Take a position and maximum distance on the stack, and combine them into a list of monsters near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_monster": "$(br)Take a position and maximum distance on the stack, and combine them into a list of non-monster entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity/item": "$(br)Take a position and maximum distance on the stack, and combine them into a list of dropped items near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_item": "$(br)Take a position and maximum distance on the stack, and combine them into a list of non-dropped-item entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity/player": "$(br)Take a position and maximum distance on the stack, and combine them into a list of players near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_player": "$(br)Take a position and maximum distance on the stack, and combine them into a list of non-player characters near the position.",
|
||||
"hexcasting.page.entities.zone_entity/living": "$(br)Take a position and maximum distance on the stack, and combine them into a list of living creatures near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_living": "$(br)Take a position and maximum distance on the stack, and combine them into a list of non-living entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity": "$(br)Take a position and maximum distance on the stack, and combine them into a list of all entities near the position.",
|
||||
"hexcasting.page.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).",
|
||||
"hexcasting.page.entities.get_entity/animal": "Transform the position on the stack into the animal at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/monster": "Transform the position on the stack into the monster at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/item": "Transform the position on the stack into the dropped item at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/player": "Transform the position on the stack into the player at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).",
|
||||
"hexcasting.page.entities.get_entity/living": "Transform the position on the stack into the living creature at that location (or $(l:casting/influences)$(thing)Null/$ if there isn't one).",
|
||||
"hexcasting.page.entities.zone_entity/animal": "Take a position and maximum distance on the stack, and combine them into a list of animals near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_animal": "Take a position and maximum distance on the stack, and combine them into a list of non-animal entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity/monster": "Take a position and maximum distance on the stack, and combine them into a list of monsters near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_monster": "Take a position and maximum distance on the stack, and combine them into a list of non-monster entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity/item": "Take a position and maximum distance on the stack, and combine them into a list of dropped items near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_item": "Take a position and maximum distance on the stack, and combine them into a list of non-dropped-item entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity/player": "Take a position and maximum distance on the stack, and combine them into a list of players near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_player": "Take a position and maximum distance on the stack, and combine them into a list of non-player characters near the position.",
|
||||
"hexcasting.page.entities.zone_entity/living": "Take a position and maximum distance on the stack, and combine them into a list of living creatures near the position.",
|
||||
"hexcasting.page.entities.zone_entity/not_living": "Take a position and maximum distance on the stack, and combine them into a list of non-living entities near the position.",
|
||||
"hexcasting.page.entities.zone_entity": "Take a position and maximum distance on the stack, and combine them into a list of all entities near the position.",
|
||||
|
||||
"hexcasting.entry.lists": "List Manipulation",
|
||||
"hexcasting.page.lists.1": "Remove the number at the top of the stack, then replace the list at the top with the nth element of that list (where n is the number you removed). Replaces the list with Null if the number is out of bounds.",
|
||||
"hexcasting.page.lists.1": "Remove the number at the top of the stack, then replace the list at the top with the nth element of that list (where n is the number you removed). Replaces the list with $(l:casting/influences)$(thing)Null/$ if the number is out of bounds.",
|
||||
"hexcasting.page.lists.2": "Remove the top of the stack, then add it to the end of the list at the top of the stack.",
|
||||
"hexcasting.page.lists.3": "Remove the list at the top of the stack, then add all its elements to the end of the list at the top of the stack.",
|
||||
"hexcasting.page.lists.4": "Push an empty list to the top of the stack.",
|
||||
"hexcasting.page.lists.5": "Remove the top of the stack, then push a list containing only that element.",
|
||||
"hexcasting.page.lists.6": "Remove num elements from the stack, then add them to a list at the top of the stack.",
|
||||
"hexcasting.page.lists.6": "Remove $(italic)num/$ elements from the stack, then add them to a list at the top of the stack.",
|
||||
"hexcasting.page.lists.7": "Remove the list at the top of the stack, then push its contents to the stack.",
|
||||
"hexcasting.page.lists.8": "Remove the list at the top of the stack, then push the number of elements in the list to the stack.",
|
||||
"hexcasting.page.lists.9": "Reverse the list at the top of the stack.",
|
||||
"hexcasting.page.lists.10": "Remove the iota at the top of the stack, then replace the list at the top with the index of that iota within the list (starting from 0). Replaces the list with -1 if the iota doesn't exist in the list.",
|
||||
"hexcasting.page.lists.10": "Remove the iota at the top of the stack, then replace the list at the top with the first index of that iota within the list (starting from 0). Replaces the list with -1 if the iota doesn't exist in the list.",
|
||||
"hexcasting.page.lists.11": "Remove the number at the top of the stack, then remove the nth element of the list at the top of the stack (where n is the number you removed).",
|
||||
|
||||
"hexcasting.entry.patterns_as_iotas": "Patterns as Iotas",
|
||||
"hexcasting.page.patterns_as_iotas.1": "One of the many peculiarities of this art is that $(italic)patterns themselves/$ can act as iotas-- I can even put them onto my stack when casting.$(br2)This raises a fairly obvious question: how do I express them? If I simply drew a pattern, it would hardly tell Nature to add it to my stack-- rather, it would simply be matched to an action.",
|
||||
"hexcasting.page.patterns_as_iotas.2": "Fortunately, Nature has provided me with a set of $(l:casting/influences)influences/$ that I can use to work with patterns directly.$(br2)In short, $(action)Consideration/$ lets me add one pattern to the stack, and $(action)Introspection/$ and $(action)Retrospection/$ let me add a whole list.",
|
||||
"hexcasting.page.patterns_as_iotas.3": "To use $(action)Consideration/$, I draw it, then another arbitrary pattern. That second pattern is added to the stack.",
|
||||
"hexcasting.page.patterns_as_iotas.4": "One may find it helpful to think of this as \"escaping\" the pattern onto the stack, if they happen to be familiar with the science of computers.$(br2)The usual use for this is to copy the pattern to a $(l:items/scroll)$(item)Scroll/$ or $(l:items/slate)$(item)Slate/$ using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, and then perhaps decorating with them.",
|
||||
"hexcasting.page.patterns_as_iotas.5": "Drawing $(action)Introspection/$ makes my drawing of patterns act differently, for a time. Until I draw $(action)Retrospection/$, the patterns I draw are saved. Then, when I draw $(action)Retrospection/$, they are added to the stack as a list iota.",
|
||||
"hexcasting.page.patterns_as_iotas.6": "If I draw another $(action)Introspection/$, it'll still be saved to the list, but I'll then have to draw $(italic)two/$ $(action)Retrospection/$s to get back to normal casting.",
|
||||
"hexcasting.page.patterns_as_iotas.7": "Also, I can escape the special behavior of $(action)Intro-/$ and $(action)Retrospection/$ by drawing a $(action)Consideration/$ before them, which will simply add them to the list without affecting which the number of Retrospections I need to return to casting.$(br2)If I draw two $(action)Consideration/$s in a row while introspecting, it will add a single $(action)Consideration/$ to the list.",
|
||||
"hexcasting.page.patterns_as_iotas.2": "Fortunately, Nature has provided me with a set of $(l:casting/influences)influences/$ that I can use to work with patterns directly.$(br2)In short, $(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.",
|
||||
"hexcasting.page.patterns_as_iotas.escape.1": "To use $(l:patterns/patterns_as_iotas#hexcasting:escape)$(action)Consideration/$, I draw it, then another arbitrary pattern. That second pattern is added to the stack.",
|
||||
"hexcasting.page.patterns_as_iotas.escape.2": "One may find it helpful to think of this as \"escaping\" the pattern onto the stack, if they happen to be familiar with the science of computers.$(br2)The usual use for this is to copy the pattern to a $(l:items/scroll)$(item)Scroll/$ or $(l:items/slate)$(item)Slate/$ using $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, and then perhaps decorating with them.",
|
||||
"hexcasting.page.patterns_as_iotas.parens.1": "Drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$ makes my drawing of patterns act differently, for a time. Until I draw $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Retrospection/$, the patterns I draw are saved. Then, when I draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$, they are added to the stack as a list iota.",
|
||||
"hexcasting.page.patterns_as_iotas.parens.2": "If I draw another $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Introspection/$, it'll still be saved to the list, but I'll then have to draw $(italic)two/$ $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospections/$ to get back to normal casting.",
|
||||
"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.page.readwrite.read": "Copy the iota stored in the item (such as a $(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.read/entity": "Like $(action)Scribe's Reflection/$, but the iota is read out of an item entity instead of my other hand.",
|
||||
"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.read/entity": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is read out of an item entity instead of 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.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)Scroll/$s or $(l:items/slate)$(item)Slate/$s 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 $(item)Focus/$ for them.",
|
||||
"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.entry.meta": "Meta-evaluation",
|
||||
"hexcasting.page.meta.eval.1": "Remove a list of patterns from the stack, then cast them sequentially, as if I had drawn them myself with my $(item)Staff/$.$(br)Costs about one $(item)Amethyst Shard/$.",
|
||||
"hexcasting.page.meta.eval.2": "This can be $(italic)very/$ powerful in tandem with $(l:items/focus)$(item)Foci/$.$(br2)It also makes the bureaucracy of Nature a \"Turing-complete\" system, according to one esoteric scroll I found.$(br2)However, it seems there's a limit to how many times a _Hex can cast itself-- Nature doesn't look kindly on runaway spells!$(br2)In addition, with the energies of the patterns occuring without me to guide them, any mishap will cause the remaining actions to become too unstable and immediately unravel.",
|
||||
"hexcasting.page.meta.for_each.1": "Remove a list of patterns and a list from the stack, then cast the given pattern over each element of the second list.$(br)Costs about one $(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.meta.eval.1": "Remove a list of patterns from the stack, then cast them sequentially, as if I had drawn them myself with my $(l:items/staff)$(item)Staff/$.$(br)Costs about one $(l:items/amethyst)$(item)Amethyst Shard/$.",
|
||||
"hexcasting.page.meta.eval.2": "This can be $(italic)very/$ powerful in tandem with $(l:items/focus)$(item)Foci/$.$(br2)It also makes the bureaucracy of Nature a \"Turing-complete\" system, according to one esoteric scroll I found.$(br2)However, it seems there's a limit to how many times a _Hex can cast itself-- Nature doesn't look kindly on runaway spells!$(br2)In addition, with the energies of the patterns occurring without me to guide them, any mishap will cause the remaining actions to become too unstable and immediately unravel.",
|
||||
"hexcasting.page.meta.for_each.1": "Remove a list of patterns and a list from the stack, then cast the given pattern over each element of the second list.$(br)Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.meta.for_each.2": "More specifically, for each element in the second list, it will:$(li)Create a new stack, with everything on the current stack plus that element$(li)Draw all the patterns in the first list$(li)Save all the iotas remaining on the stack to a list$(br)Then, after all is said and done, pushes the list of saved iotas onto the main stack.$(br2)No wonder all the practitioners of this art go mad.",
|
||||
|
||||
"hexcasting.entry.circle_patterns": "Spell Circle Patterns",
|
||||
"hexcasting.page.circle_patterns.disclaimer": "These patterns must be cast from a $(item)Spell Circle/$; trying to cast them through a $(item)Staff/$ will fail rather spectacularly.",
|
||||
"hexcasting.page.circle_patterns.circle/impetus_pos": "Returns the position of the $(item)Impetus/$ of this spell circle.",
|
||||
"hexcasting.page.circle_patterns.circle/impetus_dir": "Returns the direction the $(item)Impetus/$ of this spell circle is facing as a unit vector.",
|
||||
"hexcasting.page.circle_patterns.disclaimer": "These patterns must be cast from a $(l:greatwork/spellcircles)$(item)Spell Circle/$; trying to cast them through a $(l:items/staff)$(item)Staff/$ will fail rather spectacularly.",
|
||||
"hexcasting.page.circle_patterns.circle/impetus_pos": "Returns the position of the $(l:greatwork/impetus)$(item)Impetus/$ of this spell circle.",
|
||||
"hexcasting.page.circle_patterns.circle/impetus_dir": "Returns the direction the $(l:greatwork/impetus)$(item)Impetus/$ of this spell circle is facing as a unit vector.",
|
||||
"hexcasting.page.circle_patterns.circle/bounds/min": "Returns the position of the lower-north-west corner of the bounds of this spell circle.",
|
||||
"hexcasting.page.circle_patterns.circle/bounds/max": "Returns the position of the upper-south-east corner of the bounds of this spell circle.",
|
||||
|
||||
"hexcasting.entry.akashic_patterns": "Akashic Patterns",
|
||||
"hexcasting.page.akashic_patterns.akashic/read": "Read the iota associated with the given pattern out of the akashic library with its record at the given position. This has no range limit. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.akashic_patterns.akashic/write": "Associate the iota with the given pattern in the akashic library with its record at the given position. This $(italic)does/$ have a range limit. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.akashic_patterns.akashic/read": "Read the iota associated with the given pattern out of the $(l:greatwork/akashiclib)$(item)Akashic Library/$ with its $(l:greatwork/akashiclib)$(item)Record/$ at the given position. This has no range limit. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.akashic_patterns.akashic/write": "Associate the iota with the given pattern in the $(l:greatwork/akashiclib)$(item)Akashic Library/$ with its $(l:greatwork/akashiclib)$(item)Record/$ at the given position. This $(italic)does/$ have a range limit. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
|
||||
"_comment": "Normal Spells",
|
||||
|
||||
"hexcasting.entry.itempicking": "Working with Items",
|
||||
"hexcasting.page.itempicking.1": "Certain spells, such as $(l:hexcasting:patterns/spells/blockworks#hexcasting:place_block)$(action)Place Block/$, will consume additional items from my inventory. When this happens, the spell will first look for the item to use, and then draw from all such items in my inventory.$(br2)This process is called \"picking an item.\"",
|
||||
"hexcasting.page.itempicking.2": "More specifically:$(li)First, the spell will search for the first valid item in my hotbar to the $(italic)right of my staff/$, wrapping around at the right-hand side, and starting at the first slot if my staff is in my off-hand.$(li)Second, the spell will draw that item from as $(italic)far back in my inventory/$ as possible, prioritizing the main inventory over the hotbar.",
|
||||
"hexcasting.page.itempicking.1": "Certain spells, such as $(l:patterns/spells/blockworks#hexcasting:place_block)$(action)Place Block/$, will consume additional items from my inventory. When this happens, the spell will first look for the item to use, and then draw from all such items in my inventory.$(br2)This process is called \"picking an item.\"",
|
||||
"hexcasting.page.itempicking.2": "More specifically:$(li)First, the spell will search for the first valid item in my hotbar to the $(italic)right of my $(l:items/staff)$(item)staff/$, wrapping around at the right-hand side, and starting at the first slot if my $(l:items/staff)$(item)staff/$ is in my off-hand.$(li)Second, the spell will draw that item from as $(italic)far back in my inventory/$ as possible, prioritizing the main inventory over the hotbar.",
|
||||
"hexcasting.page.itempicking.3": "This way, I can keep a \"chooser\" item on my hotbar to tell the spell what to use, and fill the rest of my inventory with that item to keep the spell well-stocked.",
|
||||
|
||||
"hexcasting.entry.basic_spell": "Basic Spells",
|
||||
"hexcasting.page.basic_spell.explode.1": "Remove a number and vector from the stack, then create an explosion at the given location with the given power.",
|
||||
"hexcasting.page.basic_spell.explode.2": "A power of 3 is about as much as a Creeper's blast; 4 is about as much as a TNT blast. Nature refuses to give me a blast of more than 10 power, though.$(br2)Strangely, this explosion doesn't seem to harm me. Perhaps it's because $(italic)I/$ am the one exploding?$(br2)Costs about one $(item)Amethyst Shard/$, plus an extra $(item)Amethyst Shard/$ per point of explosion power.",
|
||||
"hexcasting.page.basic_spell.explode.2": "A power of 3 is about as much as a Creeper's blast; 4 is about as much as a TNT blast. Nature refuses to give me a blast of more than 10 power, though.$(br2)Strangely, this explosion doesn't seem to harm me. Perhaps it's because $(italic)I/$ am the one exploding?$(br2)Costs about one $(l:items/amethyst)$(item)Amethyst Shard/$, plus an extra $(l:items/amethyst)$(item)Amethyst Shard/$ per point of explosion power.",
|
||||
"hexcasting.page.basic_spell.explode.fire.1": "Remove a number and vector from the stack, then create a fiery explosion at the given location with the given power.",
|
||||
"hexcasting.page.basic_spell.explode.fire.2": "Costs three $(item)Amethyst Shards/$, plus about one extra $(item)Amethyst Shard/$ per point of explosion power. Otherwise, the same as $(l:patterns/spells/basic_spell#hexcasting:explode)$(action)Explosion/$, except with fire.",
|
||||
"hexcasting.page.basic_spell.add_motion": "Remove an entity and direction from the stack, then give a shove to the given entity in the given direction. The strength of the impulse is determined by the length of the vector.$(br)Costs units of $(item)Amethyst Dust/$ equal to the square of the length of the vector.",
|
||||
"hexcasting.page.basic_spell.blink": "Remove an entity and length from the stack, then teleport the given entity along its look vector by the given length.$(br)Costs about 1 $(item)Amethyst Shard/$ per block travelled.",
|
||||
"hexcasting.page.basic_spell.explode.fire.2": "Costs three $(l:items/amethyst)$(item)Amethyst Shards/$, plus about one extra $(l:items/amethyst)$(item)Amethyst Shard/$ per point of explosion power. Otherwise, the same as $(l:patterns/spells/basic#hexcasting:explode)$(action)Explosion/$, except with fire.",
|
||||
"hexcasting.page.basic_spell.add_motion": "Remove an entity and direction from the stack, then give a shove to the given entity in the given direction. The strength of the impulse is determined by the length of the vector.$(br)Costs units of $(l:items/amethyst)$(item)Amethyst Dust/$ equal to the square of the length of the vector.",
|
||||
"hexcasting.page.basic_spell.blink": "Remove an entity and length from the stack, then teleport the given entity along its look vector by the given length.$(br)Costs about 1 $(l:items/amethyst)$(item)Amethyst Shard/$ per block travelled.",
|
||||
"hexcasting.page.basic_spell.beep.1": "Remove a vector and two numbers from the stack. Plays a instrument defined by the first number at the given location, with a note defined by the second number. Costs a negligible amount of _media.",
|
||||
"hexcasting.page.basic_spell.beep.2": "There appear to be 16 different instruments and 25 different notes. Both are indexed by zero.",
|
||||
"hexcasting.page.basic_spell.beep.2": "There appear to be 16 different instruments and 25 different notes. Both are indexed by zero.$(br2)These seem to be the same instruments I can produce with a $(item)Note Block/$, though the reason for each instrument's number being what it is eludes me.",
|
||||
|
||||
"hexcasting.entry.blockworks": "Blockworks",
|
||||
"hexcasting.page.blockworks.place_block": "Remove a location from the stack, then pick a block item and place it at the given location.$(br)Costs about 1 $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.break_block": "Remove a location from the stack, then break the block at the given location. This spell can break nearly anything a Diamond Pickaxe can break.$(br)Costs about 3 $(item)Amethyst Dust/$s.",
|
||||
"hexcasting.page.blockworks.create_water": "Summon a block of water (or insert a bucket's worth) into a block at the given position. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.destroy_water": "Destroy a great deal of liquid (not just water) around the given position. Costs about two $(item)Amethyst Crystal/$s.",
|
||||
"hexcasting.page.blockworks.conjure_block": "Conjure an ethereal, but solid, block that sparkles with my pigment at the given position. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.conjure_light": "Conjure a magical light that softly glows with my pigment at the given position. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.bonemeal": "Encourage a plant or sapling at the target position to grow, as if $(item)Bonemeal/$ was applied. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.edify": "Forcibly infuse _media into the sapling at the target position, causing it to grow into an $(thing)Edified Tree/$. Costs about one $(item)Charged Crystal/$.",
|
||||
"hexcasting.page.blockworks.ignite": "Start a fire on top of the given location, as if a $(item)Fire Charge/$ was applied. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.extinguish": "Extinguish blocks in a large area. Costs about two $(item)Charged Crystal/$s.",
|
||||
"hexcasting.page.blockworks.place_block": "Remove a location from the stack, then pick a block item and place it at the given location.$(br)Costs about 1 $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.break_block": "Remove a location from the stack, then break the block at the given location. This spell can break nearly anything a Diamond Pickaxe can break.$(br)Costs about 3 $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.create_water": "Summon a block of water (or insert a bucket's worth) into a block at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.destroy_water": "Destroy a great deal of liquid (not just water) around the given position. Costs about two $(l:items/amethyst)$(item)Charged Crystals/$.",
|
||||
"hexcasting.page.blockworks.conjure_block": "Conjure an ethereal, but solid, block that sparkles with my pigment at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.conjure_light": "Conjure a magical light that softly glows with my pigment at the given position. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.bonemeal": "Encourage a plant or sapling at the target position to grow, as if $(item)Bonemeal/$ was applied. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.edify": "Forcibly infuse _media into the sapling at the target position, causing it to grow into an $(l:items/edified)$(thing)Edified Tree/$. Costs about one $(l:items/amethyst)$(item)Charged Crystal/$.",
|
||||
"hexcasting.page.blockworks.ignite": "Start a fire on top of the given location, as if a $(item)Fire Charge/$ was applied. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.blockworks.extinguish": "Extinguish blocks in a large area. Costs about two $(l:items/amethyst)$(item)Charged Crystals/$.",
|
||||
|
||||
"hexcasting.entry.nadirs": "Nadirs",
|
||||
"hexcasting.page.nadirs.1": "This family of spells all impart a negative potion effect upon an entity. They all take an entity, the recipient, and one or two numbers, the first being the duration and the second, if present, being the potency (starting at 1).$(br2)Each one has a \"base cost;\" the actual cost is equal to that base cost, multiplied by the potency squared.",
|
||||
"hexcasting.page.nadirs.2": "According to certain legends, these spells and their sisters, the $(l:patterns/great_spells/zeniths)$(action)Zeniths/$, were \"[...] inspired by a world near to this one, where powerful wizards would gather magic from the land and hold duels to the death. Unfortunately, much was lost in translation...\"$(br2)Perhaps that is the reason for their peculiar names.",
|
||||
"hexcasting.page.nadirs.potion/weakness": "Inflicts weakness. Base cost is one $(item)Amethyst Dust/$ per 10 seconds.",
|
||||
"hexcasting.page.nadirs.potion/levitation": "Inflicts levitation. Base cost is one $(item)Amethyst Dust/$ per 5 seconds.",
|
||||
"hexcasting.page.nadirs.potion/wither": "Inflicts withering. Base cost is one $(item)Amethyst Dust/$ per second.",
|
||||
"hexcasting.page.nadirs.potion/poison": "Inflicts poison. Base cost is one $(item)Amethyst Dust/$ per 3 seconds.",
|
||||
"hexcasting.page.nadirs.potion/slowness": "Inflicts slowness. Base cost is one $(item)Amethyst Dust/$ per 5 seconds.",
|
||||
"hexcasting.page.nadirs.potion/weakness": "Inflicts $(thing)weakness/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 10 seconds.",
|
||||
"hexcasting.page.nadirs.potion/levitation": "Inflicts $(thing)levitation/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.",
|
||||
"hexcasting.page.nadirs.potion/wither": "Inflicts $(thing)withering/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.",
|
||||
"hexcasting.page.nadirs.potion/poison": "Inflicts $(thing)poison/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.",
|
||||
"hexcasting.page.nadirs.potion/slowness": "Inflicts $(thing)slowness/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.",
|
||||
|
||||
"hexcasting.entry.hexcasting_spell": "Crafting Hexcasting Items",
|
||||
"hexcasting.page.hexcasting_spell.basics": "These three spells each create an 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 $(item)Amethyst/$ to form the item's battery.$(br2)See $(l:items/hexcasting)this entry/$ for more information.",
|
||||
"hexcasting.page.hexcasting_spell.craft/cypher": "Costs about one $(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.hexcasting_spell.craft/trinket": "Costs about five $(item)Charged Amethyst/$s.",
|
||||
"hexcasting.page.hexcasting_spell.craft/artifact": "Costs about ten $(item)Charged Amethyst/$s.",
|
||||
"hexcasting.page.hexcasting_spell.recharge.1": "Recharge a _media-containing item in my other hand. Costs about one $(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.hexcasting_spell.recharge.2": "This spell is cast in a similar method to the crafting spells; an entity representing a dropped stack of $(item)Amethyst/$ is provided, and recharges the _media battery of the item in my other hand.$(br2)This spell $(italic)cannot/$ recharge the item farther than its original battery size.",
|
||||
"hexcasting.page.hexcasting_spell.erase.1": "Clear a _Hex-containing item in my other hand. Costs about one $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.hexcasting_spell.erase.2": "The spell will also void all the _media stored inside the item, releasing it back to Nature and returning the item to a perfectly clean slate. This way, I can re-use $(item)Trinket/$s I have put an erroneous spell into, for example.$(br2)This also works to clear a $(item)Focus/$ or $(item)Spellbook/$.",
|
||||
"hexcasting.entry.hexcasting_spell": "Crafting Casting Items",
|
||||
"hexcasting.page.hexcasting_spell.basics": "These three spells each create an $(l:items/hexcasting)$(thing)item that casts a _Hex./$$(br)They all require me to hold the empty item in my off-hand, and require two things: the list of patterns to be cast, and an entity representing a dropped stack of $(l:items/amethyst)$(item)Amethyst/$ to form the item's battery.$(br2)See $(l:items/hexcasting)this entry/$ for more information.",
|
||||
"hexcasting.page.hexcasting_spell.craft/cypher": "Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.hexcasting_spell.craft/trinket": "Costs about five $(l:items/amethyst)$(item)Charged Amethysts/$.",
|
||||
"hexcasting.page.hexcasting_spell.craft/artifact": "Costs about ten $(l:items/amethyst)$(item)Charged Amethysts/$.",
|
||||
"hexcasting.page.hexcasting_spell.recharge.1": "Recharge a _media-containing item in my other hand. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.hexcasting_spell.recharge.2": "This spell is cast in a similar method to the crafting spells; an entity representing a dropped stack of $(l:items/amethyst)$(item)Amethyst/$ is provided, and recharges the _media battery of the item in my other hand.$(br2)This spell $(italic)cannot/$ recharge the item farther than its original battery size.",
|
||||
"hexcasting.page.hexcasting_spell.erase.1": "Clear a _Hex-containing item in my other hand. Costs about one $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.hexcasting_spell.erase.2": "The spell will also void all the _media stored inside the item, releasing it back to Nature and returning the item to a perfectly clean slate. This way, I can re-use $(l:items/hexcasting)$(item)Trinkets/$ I have put an erroneous spell into, for example.$(br2)This also works to clear a $(l:items/focus)$(item)Focus/$ or $(l:items/spellbook)$(item)Spellbook/$, unsealing them in the process.",
|
||||
|
||||
"hexcasting.entry.sentinels": "Sentinels",
|
||||
"hexcasting.page.sentinels.1": "$(italic)Hence, away! Now all is well,$(br)One aloof stand sentinel./$$(br2)A $(thing)Sentinel/$ is a mysterious force I can summon to assist in the casting of _Hexes, like a familiar or guardian spirit. It appears as a spinning geometric shape to my eyes, but is invisible to everyone else.",
|
||||
"hexcasting.page.sentinels.2": "It has several interesting properties:$(li)It does not appear to be tangible; no one else can interact with it.$(li)Once summoned, it stays in place until banished.$(li)I am always able to see it, even through solid objects.",
|
||||
"hexcasting.page.sentinels.sentinel/create": "Summon my sentinel at the given position. Costs about 1 $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.sentinels.sentinel/destroy": "Banish my sentinel, and remove it from the world. Costs a negligible amount of _media.",
|
||||
"hexcasting.page.sentinels.sentinel/get_pos": "Add the position of my sentinel to the stack, or Null if it isn't summoned. Costs a negligible amount of _media.",
|
||||
"hexcasting.page.sentinels.sentinel/wayfind": "Transform the position vector on the top of the stack into a unit vector pointing from that position to my sentinel, or Null if it isn't summoned. Costs a negligible amount of _media.",
|
||||
"hexcasting.page.sentinels.sentinel/create": "Summons my $(thing)sentinel/$ at the given position. Costs about 1 $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.sentinels.sentinel/destroy": "Banish my $(thing)sentinel/$, and remove it from the world. Costs a negligible amount of _media.",
|
||||
"hexcasting.page.sentinels.sentinel/get_pos": "Add the position of my $(thing)sentinel/$ to the stack, or $(l:casting/influences)$(thing)Null/$ if it isn't summoned. Costs a negligible amount of _media.",
|
||||
"hexcasting.page.sentinels.sentinel/wayfind": "Transform the position vector on the top of the stack into a unit vector pointing from that position to my $(thing)sentinel/$, or $(l:casting/influences)$(thing)Null/$ if it isn't summoned. Costs a negligible amount of _media.",
|
||||
|
||||
"hexcasting.page.colorize": "I must be holding a $(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 1 $(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.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 1 $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
|
||||
"hexcasting.page.create_lava.1": "Summon a block of lava or insert a bucket's worth into a block at the given position. Costs about one $(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.create_lava.1": "Summon a block of lava or insert a bucket's worth into a block at the given position. Costs about one $(l:items/amethyst)$(item)Charged Amethyst/$.",
|
||||
"hexcasting.page.create_lava.2": "It may be advisable to keep my knowledge of this spell secret. A certain faction of botanists get... touchy about it, or so I've heard.$(br2)Well, no one said tracing the deep secrets of the universe was going to be an easy time.",
|
||||
|
||||
"hexcasting.entry.weather_manip": "Weather Manipulation",
|
||||
"hexcasting.page.weather_manip.lightning": "I command the heavens! This spell will summon a bolt of lightning to strike the earth where I direct it. Costs about 3 $(item)Amethyst Shard/$s.",
|
||||
"hexcasting.page.weather_manip.summon_rain": "I control the clouds! This spell will summon rain across the world I cast it upon. Costs about 2 $(item)Amethyst Shard/$s. Does nothing if it is already raining.",
|
||||
"hexcasting.page.weather_manip.dispel_rain": "A counterpart to summoning rain. This spell will dispel rain across the world I cast it upon. Costs about 1 $(item)Amethyst Shard/$. Does nothing if the skies are already clear.",
|
||||
"hexcasting.page.weather_manip.lightning": "I command the heavens! This spell will summon a bolt of lightning to strike the earth where I direct it. Costs about 3 $(l:items/amethyst)$(item)Amethyst Shards/$.",
|
||||
"hexcasting.page.weather_manip.summon_rain": "I control the clouds! This spell will summon rain across the world I cast it upon. Costs about 2 $(l:items/amethyst)$(item)Amethyst Shards/$. Does nothing if it is already raining.",
|
||||
"hexcasting.page.weather_manip.dispel_rain": "A counterpart to summoning rain. This spell will dispel rain across the world I cast it upon. Costs about 1 $(l:items/amethyst)$(item)Amethyst Shard/$. Does nothing if the skies are already clear.",
|
||||
|
||||
"hexcasting.page.flight.1": "The power of flight! I have wrestled Nature to its knees. But Nature is vengeful, and itches for me to break its contract so it may break my shins.",
|
||||
"hexcasting.page.flight.2": "The entity (which must be a player) will be endowed with flight. The first number is the number of seconds they may fly for, and the second number is the radius of the zone they may fly in. If the recipient exits that zone, or their timer runs out while midair, the gravity that they spurned will get its revenge. Painfully.$(br2)It costs approximately 1 $(item)Amethyst Dust/$ multiplied by the radius, per second of flight.",
|
||||
"hexcasting.page.flight.2": "The entity (which must be a player) will be endowed with flight. The first number is the number of seconds they may fly for, and the second number is the radius of the zone they may fly in. If the recipient exits that zone, or their timer runs out while midair, the gravity that they spurned will get its revenge. Painfully.$(br2)It costs approximately 1 $(l:items/amethyst)$(item)Amethyst Dust/$ multiplied by the radius per second of flight.",
|
||||
|
||||
"hexcasting.page.teleport.1": "Far more powerful than $(l:patterns/spells/basic#OpBlink)$(action)Blink/$, this spell lets me teleport nearly anywhere in the entire world! There does seem to be a limit, but it is $(italic)much/$ greater than the normal radius of influence I am used to.",
|
||||
"hexcasting.page.teleport.2": "The entity will be teleported by the given vector, which is an offset from its given position. No matter the distance, it always seems to cost about ten $(item)Charged Crystal/$s.$(br2)The transference is not perfect, and it seems when teleporting something as complex as a player, their inventory doesn't $(italic)quite/$ stay attached, and tends to splatter everywhere at the destination.",
|
||||
"hexcasting.page.teleport.1": "Far more powerful than $(l:patterns/spells/basic#hexcasting:blink)$(action)Blink/$, this spell lets me teleport nearly anywhere in the entire world! There does seem to be a limit, but it is $(italic)much/$ greater than the normal radius of influence I am used to.",
|
||||
"hexcasting.page.teleport.2": "The entity will be teleported by the given vector, which is an offset from its given position. No matter the distance, it always seems to cost about ten $(l:items/amethyst)$(item)Charged Crystals/$.$(br2)The transference is not perfect, and it seems when teleporting something as complex as a player, their inventory doesn't $(italic)quite/$ stay attached, and tends to splatter everywhere at the destination.",
|
||||
|
||||
"hexcasting.entry.zeniths": "Zeniths",
|
||||
"hexcasting.page.zeniths.1": "This family of spells all impart a positive potion effect upon an entity, similar to the $(l:patterns/spells/nadirs)$(action)Nadirs/$. However, these have their _media costs increase with the $(italic)cube/$ of the potency.",
|
||||
"hexcasting.page.zeniths.potion/regeneration": "Bestows regeneration. Base cost is one $(item)Amethyst Dust/$ per second.",
|
||||
"hexcasting.page.zeniths.potion/night_vision": "Bestows night vision. Base cost is one $(item)Amethyst Dust/$ per 5 seconds.",
|
||||
"hexcasting.page.zeniths.potion/absorption": "Bestows absorption. Base cost is one $(item)Amethyst Dust/$ per second.",
|
||||
"hexcasting.page.zeniths.potion/haste": "Bestows haste. Base cost is one $(item)Amethyst Dust/$ per 3 seconds.",
|
||||
"hexcasting.page.zeniths.potion/strength": "Bestows strength. Base cost is one $(item)Amethyst Dust/$ per 3 seconds.",
|
||||
"hexcasting.page.zeniths.potion/regeneration": "Bestows $(thing)regeneration/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.",
|
||||
"hexcasting.page.zeniths.potion/night_vision": "Bestows $(thing)night vision/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 5 seconds.",
|
||||
"hexcasting.page.zeniths.potion/absorption": "Bestows $(thing)absorption/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per second.",
|
||||
"hexcasting.page.zeniths.potion/haste": "Bestows $(thing)haste/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.",
|
||||
"hexcasting.page.zeniths.potion/strength": "Bestows $(thing)strength/$. Base cost is one $(l:items/amethyst)$(item)Amethyst Dust/$ per 3 seconds.",
|
||||
|
||||
"hexcasting.page.greater_sentinel.1": "Summon a greater version of my $(l:patterns/sentinels)$(thing)Sentinel/$. Costs about 2 $(item)Amethyst Dust/$s.",
|
||||
"hexcasting.page.greater_sentinel.2": "The stronger sentinel acts like the normal one I can summon without the use of a Great Spell, if a little more visually interesting. However, the range in which my spells can work is extended to a small region around my greater sentinel, about 16 blocks. In other words, no matter where in the world I am, I can interact with things around my sentinel (the mysterious forces of chunkloading notwithstanding).",
|
||||
"hexcasting.page.greater_sentinel.1": "Summon a greater version of my $(l:patterns/spells/sentinels)$(thing)Sentinel/$. Costs about 2 $(l:items/amethyst)$(item)Amethyst Dust/$.",
|
||||
"hexcasting.page.greater_sentinel.2": "The stronger $(l:patterns/spells/sentinels)$(thing)sentinel/$ acts like the normal one I can summon without the use of a Great Spell, if a little more visually interesting. However, the range in which my spells can work is extended to a small region around my greater $(l:patterns/spells/sentinels)$(thing)sentinel/$, about 16 blocks. In other words, no matter where in the world I am, I can interact with things around my $(l:patterns/spells/sentinels)$(thing)sentinel/$ (the mysterious forces of chunkloading notwithstanding).",
|
||||
|
||||
"hexcasting.page.make_battery.1": "Infuse a bottle with _media to form a $(item)Phial./$",
|
||||
"hexcasting.page.make_battery.2": "Similarly to the spells for $(l:patterns/spells/hexcasting)$(action)Crafting Hexcasting Items/$, I must hold a $(item)Glass Bottle/$ in my other hand, and provide the spell with a dropped stack of $(item)Amethyst/$. See $(l:items/phials)this page/$ for more information.$(br2)Costs about 1 $(item)Charged Amethyst Crystal/$.",
|
||||
"hexcasting.page.make_battery.1": "Infuse a bottle with _media to form a $(l:items/phials)$(item)Phial./$",
|
||||
"hexcasting.page.make_battery.2": "Similarly to the spells for $(l:patterns/spells/hexcasting)$(action)Crafting Casting Items/$, I must hold a $(item)Glass Bottle/$ in my other hand, and provide the spell with a dropped stack of $(l:items/amethyst)$(item)Amethyst/$. See $(l:items/phials)this page/$ for more information.$(br2)Costs about 1 $(l:items/amethyst)$(item)Charged Amethyst/$.",
|
||||
|
||||
"hexcasting.page.brainsweep_spell.1": "I cannot make heads or tails of this spell... To be honest, I'm not sure I want to know what it does."
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 455 B After Width: | Height: | Size: 455 B |
Before Width: | Height: | Size: 474 B After Width: | Height: | Size: 474 B |
Before Width: | Height: | Size: 415 B After Width: | Height: | Size: 415 B |
Before Width: | Height: | Size: 402 B After Width: | Height: | Size: 402 B |
Before Width: | Height: | Size: 460 B After Width: | Height: | Size: 460 B |
Before Width: | Height: | Size: 471 B After Width: | Height: | Size: 471 B |
Before Width: | Height: | Size: 464 B After Width: | Height: | Size: 464 B |
Before Width: | Height: | Size: 461 B After Width: | Height: | Size: 461 B |
Before Width: | Height: | Size: 466 B After Width: | Height: | Size: 466 B |
Before Width: | Height: | Size: 487 B After Width: | Height: | Size: 487 B |
Before Width: | Height: | Size: 454 B After Width: | Height: | Size: 454 B |
Before Width: | Height: | Size: 480 B After Width: | Height: | Size: 480 B |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 371 B After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 554 B |
After Width: | Height: | Size: 568 B |
After Width: | Height: | Size: 562 B |
After Width: | Height: | Size: 569 B |
After Width: | Height: | Size: 554 B |
After Width: | Height: | Size: 566 B |
After Width: | Height: | Size: 553 B |
After Width: | Height: | Size: 570 B |
After Width: | Height: | Size: 518 B |
After Width: | Height: | Size: 572 B |
After Width: | Height: | Size: 535 B |
After Width: | Height: | Size: 566 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 542 B |
Before Width: | Height: | Size: 444 B |
Before Width: | Height: | Size: 528 B |
Before Width: | Height: | Size: 542 B |
Before Width: | Height: | Size: 542 B |
Before Width: | Height: | Size: 564 B |
Before Width: | Height: | Size: 560 B |
After Width: | Height: | Size: 2 KiB |
After Width: | Height: | Size: 1.6 KiB |
|
@ -13,7 +13,7 @@
|
|||
"$(action)": "$(#fc77be)",
|
||||
"_Media": "$(#74b3f2)Media/$",
|
||||
"_media": "$(#74b3f2)media/$",
|
||||
"_Hex": "$(#b38ef3)Hex/$",
|
||||
"_Hexes": "$(#b38ef3)Hexes/$"
|
||||
"_Hexes": "$(#b38ef3)Hexes/$",
|
||||
"_Hex": "$(#b38ef3)Hex/$"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,13 +75,13 @@
|
|||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "hexcasting.page.mishaps.disabled.title",
|
||||
"text": "hexcasting.page.mishaps.disabled"
|
||||
"title": "hexcasting.page.mishaps.true_name.title",
|
||||
"text": "hexcasting.page.mishaps.true_name"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "hexcasting.page.mishaps.true_name.title",
|
||||
"text": "hexcasting.page.mishaps.true_name"
|
||||
"title": "hexcasting.page.mishaps.disabled.title",
|
||||
"text": "hexcasting.page.mishaps.disabled"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
|
|
|
@ -27,12 +27,12 @@
|
|||
{
|
||||
"type": "patchouli:crafting",
|
||||
"recipe": "hexcasting:ageing_scroll_paper_lantern",
|
||||
"text": "hexcasting.page.decoration.ancient_scroll.crafting.des"
|
||||
"text": "hexcasting.page.decoration.ancient_scroll.crafting.desc"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:crafting",
|
||||
"recipe": "hexcasting:amethyst_tiles",
|
||||
"text": "hexcasting.page.decoration.tiles.crafting.des"
|
||||
"text": "hexcasting.page.decoration.tiles.crafting.desc"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:crafting",
|
||||
|
@ -42,7 +42,7 @@
|
|||
{
|
||||
"type": "patchouli:crafting",
|
||||
"recipe": "hexcasting:amethyst_sconce",
|
||||
"text": "hexcasting.page.decoration.sconce.crafting.des"
|
||||
"text": "hexcasting.page.decoration.sconce.crafting.desc"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -9,6 +9,10 @@
|
|||
"type": "patchouli:text",
|
||||
"text": "hexcasting.page.spellbook.1"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"text": "hexcasting.page.spellbook.2"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:crafting",
|
||||
"recipe": "hexcasting:spellbook",
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
"hexcasting:wand_jungle",
|
||||
"hexcasting:wand_acacia",
|
||||
"hexcasting:wand_dark_oak",
|
||||
"hexcasting:wand_crimson",
|
||||
"hexcasting:wand_warped",
|
||||
"hexcasting:wand_akashic"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -18,27 +18,27 @@
|
|||
"type": "hexcasting:pattern",
|
||||
"op_id": "hexcasting:escape",
|
||||
"anchor": "hexcasting:escape",
|
||||
"text": "hexcasting.page.patterns_as_iotas.3"
|
||||
"text": "hexcasting.page.patterns_as_iotas.escape.1"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"text": "hexcasting.page.patterns_as_iotas.4"
|
||||
"text": "hexcasting.page.patterns_as_iotas.escape.2"
|
||||
},
|
||||
{
|
||||
"type": "hexcasting:pattern",
|
||||
"op_id": "hexcasting:open_paren",
|
||||
"anchor": "hexcasting:open_paren",
|
||||
"text": "hexcasting.page.patterns_as_iotas.5"
|
||||
"text": "hexcasting.page.patterns_as_iotas.parens.1"
|
||||
},
|
||||
{
|
||||
"type": "hexcasting:pattern",
|
||||
"op_id": "hexcasting:close_paren",
|
||||
"anchor": "hexcasting:close_paren",
|
||||
"text": "hexcasting.page.patterns_as_iotas.6"
|
||||
"text": "hexcasting.page.patterns_as_iotas.parens.2"
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"text": "hexcasting.page.patterns_as_iotas.7"
|
||||
"text": "hexcasting.page.patterns_as_iotas.parens.3"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|