diff --git a/dev images/1-4.png b/dev images/1-4.png new file mode 100644 index 0000000..767346a Binary files /dev/null and b/dev images/1-4.png differ diff --git a/dev images/13-16.png b/dev images/13-16.png new file mode 100644 index 0000000..f0ca568 Binary files /dev/null and b/dev images/13-16.png differ diff --git a/dev images/17-20.png b/dev images/17-20.png new file mode 100644 index 0000000..760ceb6 Binary files /dev/null and b/dev images/17-20.png differ diff --git a/dev images/21-24.png b/dev images/21-24.png new file mode 100644 index 0000000..930add8 Binary files /dev/null and b/dev images/21-24.png differ diff --git a/dev images/25-28.png b/dev images/25-28.png new file mode 100644 index 0000000..9bf6ac7 Binary files /dev/null and b/dev images/25-28.png differ diff --git a/dev images/29-32.png b/dev images/29-32.png new file mode 100644 index 0000000..fd30b6a Binary files /dev/null and b/dev images/29-32.png differ diff --git a/dev images/33-36.png b/dev images/33-36.png new file mode 100644 index 0000000..3d4694f Binary files /dev/null and b/dev images/33-36.png differ diff --git a/dev images/37-40.png b/dev images/37-40.png new file mode 100644 index 0000000..6672065 Binary files /dev/null and b/dev images/37-40.png differ diff --git a/dev images/41-44.png b/dev images/41-44.png new file mode 100644 index 0000000..8494106 Binary files /dev/null and b/dev images/41-44.png differ diff --git a/dev images/45-48.png b/dev images/45-48.png new file mode 100644 index 0000000..019a4ee Binary files /dev/null and b/dev images/45-48.png differ diff --git a/dev images/49-52.png b/dev images/49-52.png new file mode 100644 index 0000000..dbc16a0 Binary files /dev/null and b/dev images/49-52.png differ diff --git a/dev images/5-8.png b/dev images/5-8.png new file mode 100644 index 0000000..bfb95b8 Binary files /dev/null and b/dev images/5-8.png differ diff --git a/dev images/53-56.png b/dev images/53-56.png new file mode 100644 index 0000000..fa25824 Binary files /dev/null and b/dev images/53-56.png differ diff --git a/dev images/57-60.png b/dev images/57-60.png new file mode 100644 index 0000000..54d170d Binary files /dev/null and b/dev images/57-60.png differ diff --git a/dev images/61-64.png b/dev images/61-64.png new file mode 100644 index 0000000..c1725a3 Binary files /dev/null and b/dev images/61-64.png differ diff --git a/dev images/65-68.png b/dev images/65-68.png new file mode 100644 index 0000000..c69f482 Binary files /dev/null and b/dev images/65-68.png differ diff --git a/dev images/69-72.png b/dev images/69-72.png new file mode 100644 index 0000000..d13df37 Binary files /dev/null and b/dev images/69-72.png differ diff --git a/dev images/73-76.png b/dev images/73-76.png new file mode 100644 index 0000000..1a63eeb Binary files /dev/null and b/dev images/73-76.png differ diff --git a/dev images/77-80.png b/dev images/77-80.png new file mode 100644 index 0000000..669127d Binary files /dev/null and b/dev images/77-80.png differ diff --git a/dev images/81-84.png b/dev images/81-84.png new file mode 100644 index 0000000..86668f6 Binary files /dev/null and b/dev images/81-84.png differ diff --git a/dev images/85-88.png b/dev images/85-88.png new file mode 100644 index 0000000..c1bfa61 Binary files /dev/null and b/dev images/85-88.png differ diff --git a/dev images/9-12.png b/dev images/9-12.png new file mode 100644 index 0000000..d1818e1 Binary files /dev/null and b/dev images/9-12.png differ diff --git a/dev images/Horizontal Portal.png b/dev images/Horizontal Portal.png new file mode 100644 index 0000000..c91a92c Binary files /dev/null and b/dev images/Horizontal Portal.png differ diff --git a/dev images/Pasted image (2).png b/dev images/Pasted image (2).png deleted file mode 100644 index 09ca071..0000000 Binary files a/dev images/Pasted image (2).png and /dev/null differ diff --git a/dev images/Pasted image (3).png b/dev images/Pasted image (3).png deleted file mode 100644 index e5b716f..0000000 Binary files a/dev images/Pasted image (3).png and /dev/null differ diff --git a/dev images/Pasted image (4).png b/dev images/Pasted image (4).png deleted file mode 100644 index 015d3ec..0000000 Binary files a/dev images/Pasted image (4).png and /dev/null differ diff --git a/dev images/Pasted image (5).png b/dev images/Pasted image (5).png deleted file mode 100644 index 273585a..0000000 Binary files a/dev images/Pasted image (5).png and /dev/null differ diff --git a/dev images/Pasted image (6).png b/dev images/Pasted image (6).png deleted file mode 100644 index 8fb0758..0000000 Binary files a/dev images/Pasted image (6).png and /dev/null differ diff --git a/dev images/Pasted image (7).png b/dev images/Pasted image (7).png deleted file mode 100644 index d618195..0000000 Binary files a/dev images/Pasted image (7).png and /dev/null differ diff --git a/dev images/Pasted image (8).png b/dev images/Pasted image (8).png deleted file mode 100644 index ddea2e0..0000000 Binary files a/dev images/Pasted image (8).png and /dev/null differ diff --git a/dev images/Pasted image.png b/dev images/Pasted image.png deleted file mode 100644 index b96e6ec..0000000 Binary files a/dev images/Pasted image.png and /dev/null differ diff --git a/dev images/book receptical.png b/dev images/book receptical.png new file mode 100644 index 0000000..0986319 Binary files /dev/null and b/dev images/book receptical.png differ diff --git a/docs/SYMBOL_SEMANTICS.md b/docs/SYMBOL_SEMANTICS.md index 129ef2c..fadd4e5 100644 --- a/docs/SYMBOL_SEMANTICS.md +++ b/docs/SYMBOL_SEMANTICS.md @@ -20,7 +20,7 @@ Milestone 5 issue #29 adds typed meaning to the existing data-pack symbol catalo `poem` is optional, client-safe artwork metadata: exactly four alphabetic words, ordered top, right, bottom, left. The client layers their glyphs from the shared Legacy component sheet at runtime. GUI thumbnails use the full transparent artwork over their page backgrounds; item icons use the same artwork reduced from 16 to 13 pixels across, over the page texture. Unregistered words use a stable generated component combination; when a symbol has no poem, the six original built-in IDs retain their Legacy poems and other IDs produce four stable fallback words. This affects appearance only, never Age generation. Generated images are cached up to 256 entries and discarded on resource reload. -The Writing Desk's 88 collection tabs use Legacy's number components, chiefly the bottom row of `symbolcomponents.png`, rather than word sigils. Legacy's `ModWords.constructNumber` combines four unit marks (1–4) with four five-step marks (5–20) to form 1–24 and uses a separate zero mark. Rivencraft extends these marks positionally in base 25 for tabs 25–88 (for example, 25 is 1 followed by 0). Hovering still reveals the decimal number for accessibility. The former arbitrary-word glyph generator remains useful for rendering text: on page-free Descriptive Books, the generated Age description now appears as a sequence of layered word glyphs instead of Minecraft's enchantment font. The Age name stays readable. +The Writing Desk retains 88 collection tabs, numbered from zero as in Legacy. Legacy's `ModWords.constructNumber` defines 0 as component 1 and 1–24 by overlaying a unit mark (1–4) and a five-step mark (5–20) from the bottom row of `symbolcomponents.png` in the *same square*. Legacy's Writing Desk has 25 tabs (0–24) and scrolls its four-tab window **one tab at a time**. Thus the supplied Legacy screenshots labeled 1–4, 5–8, and so on show overlapping windows, not 88 distinct numerals. Rivencraft retains its previously requested four-at-a-time navigation and 88 tabs. Its additional tab numbers use positional base 25: each place is an overlaid Legacy digit, with the places side by side (25 = 1,0). The two glyphs are sized and positioned to fit the tab. Hovering reveals the decimal tab index for accessibility. The generated-word mechanism renders page-free Descriptive Book text as layered glyphs instead of Minecraft's enchantment font. The Age name stays readable. | Role | Value type and allowed values | | --- | --- | diff --git a/gradle.properties b/gradle.properties index 88e1402..11506e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,7 +36,7 @@ mod_name=Rivencraft # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=LGPL-3.0-or-later # The mod version. Rivencraft uses the x.y.z.b policy documented in README.md. -mod_version=0.6.7.1 +mod_version=0.6.7.2 immersive_portals_version=6.0.7 terrablender_version=4.1.0.8 serene_seasons_version_id=pHEgQQUE diff --git a/src/main/java/net/dnorberg/rivencraft/client/SymbolPageTextures.java b/src/main/java/net/dnorberg/rivencraft/client/SymbolPageTextures.java index 3762547..4609632 100644 --- a/src/main/java/net/dnorberg/rivencraft/client/SymbolPageTextures.java +++ b/src/main/java/net/dnorberg/rivencraft/client/SymbolPageTextures.java @@ -196,7 +196,7 @@ public final class SymbolPageTextures { graphics.setColor(1F, 1F, 1F, 1F); } - /** Legacy's single-number marks; numbers above 24 use positional base 25. */ + /** Overlay each Legacy digit's components; place base-25 digits side by side. */ public static void drawNumeral(GuiGraphics graphics, int number, int x, int y, int size) { int[] digits = SymbolNumerals.digitsFor(number); int digitSize = digits.length == 1 ? size : Math.max(8, size * 3 / 4); diff --git a/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java b/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java index 6d0e5c6..9844aef 100644 --- a/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java +++ b/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java @@ -151,8 +151,8 @@ public final class WritingDeskScreen extends AbstractContainerScreen= 29 && localY < 177) { int tab = menu.firstVisibleTab() + (localY - 29) / 37; graphics.renderTooltip(font, Component.translatable("screen.rivencraft.writing_desk.tab_symbol", - tab + 1), mouseX, mouseY); + tab), mouseX, mouseY); } } } diff --git a/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java b/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java index 1ac7287..3940026 100644 --- a/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java +++ b/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java @@ -151,11 +151,23 @@ public final class WritingDataGameTests { "Zero must use Legacy's dedicated number mark"); helper.assertTrue(Arrays.equals(SymbolNumerals.componentsForDigit(1), new int[] {56}), "One must use Legacy's first bottom-row mark"); + helper.assertTrue(Arrays.equals(SymbolNumerals.componentsForDigit(5), new int[] {60}), + "Five must use Legacy's first five-step mark"); + helper.assertTrue(Arrays.equals(SymbolNumerals.componentsForDigit(10), new int[] {61}), + "Ten must use Legacy's second five-step mark"); + helper.assertTrue(Arrays.equals(SymbolNumerals.componentsForDigit(14), new int[] {61, 59}), + "Fourteen must overlay the ten and four marks"); + helper.assertTrue(Arrays.equals(SymbolNumerals.componentsForDigit(20), new int[] {63}), + "Twenty must use Legacy's final five-step mark"); helper.assertTrue(Arrays.equals(SymbolNumerals.componentsForDigit(24), new int[] {63, 59}), "Twenty-four must combine Legacy's five and unit marks"); helper.assertTrue(Arrays.equals(SymbolNumerals.digitsFor(25), new int[] {1, 0}), "Twenty-five must start a second base-25 place"); - helper.assertTrue(Arrays.equals(SymbolNumerals.digitsFor(88), new int[] {3, 13}), + helper.assertTrue(Arrays.equals(SymbolNumerals.digitsFor(49), new int[] {1, 24}), + "Forty-nine must use twenty-four in its ones place"); + helper.assertTrue(Arrays.equals(SymbolNumerals.digitsFor(50), new int[] {2, 0}), + "Fifty must carry into the second base-25 place"); + helper.assertTrue(Arrays.equals(SymbolNumerals.digitsFor(87), new int[] {3, 12}), "Last writing-desk tab must retain its numeric value"); String display = "\"name\":\"symbol.example.test\"," diff --git a/src/main/java/net/dnorberg/rivencraft/writing/SymbolNumerals.java b/src/main/java/net/dnorberg/rivencraft/writing/SymbolNumerals.java index 27d2b2e..510e5f7 100644 --- a/src/main/java/net/dnorberg/rivencraft/writing/SymbolNumerals.java +++ b/src/main/java/net/dnorberg/rivencraft/writing/SymbolNumerals.java @@ -1,8 +1,8 @@ package net.dnorberg.rivencraft.writing; /** - * Number components from Mystcraft Legacy's ModWords#constructNumber. - * Legacy registers 0–25; larger Rivencraft tab numbers use positional base 25. + * Positional base-25 numerals using Mystcraft Legacy's 0–24 digit components. + * Components within one digit are layered in the same square, not laid side by side. */ public final class SymbolNumerals { private SymbolNumerals() {} @@ -19,7 +19,7 @@ public final class SymbolNumerals { } public static int[] componentsForDigit(int digit) { - if (digit < 0 || digit >= 25) throw new IllegalArgumentException("Numeral digit must be in [0, 24]"); + if (digit < 0 || digit >= 25) throw new IllegalArgumentException("Base-25 digit must be in [0, 24]"); if (digit == 0) return new int[] {1}; int fifths = digit / 5; int remainder = digit % 5;