From af1d720ec2c1deb6391e33ccb302a5f67c029d76 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 8 Mar 2026 01:44:17 +0900 Subject: [PATCH] anchor fixes --- CONTRIBUTING.md | 17 +++--- demo.PNG | Bin 181514 -> 181555 bytes demotext_unaligned.txt | 4 +- src/assets/cyrilic_extB_variable.tga | 2 +- src/assets/cyrilic_variable.tga | 2 +- src/assets/internal_variable.tga | 2 +- .../torvald/terrarumsansbitmap/GlyphProps.kt | 10 ++-- .../gdx/TerrarumSansBitmap.kt | 49 ++++++++---------- .../gdx/TerrarumTypewriterBitmap.kt | 12 ++--- work_files/cyrilic_extB_variable.kra | 4 +- work_files/cyrilic_variable.psd | 4 +- work_files/internal_variable.psd | 4 +- 12 files changed, 53 insertions(+), 57 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7057b47..b693b7f 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -77,7 +77,7 @@ Up&Down: SXXXXXXX SYYYYYYY 00000000 -Each X and Y numbers are Signed 8-Bit Integer. +Each X and Y numbers are TWO'S COMPLEMENT Signed 8-Bit Integer. X-positive: nudges towards left Y-positive: nudges towards down @@ -87,19 +87,22 @@ Y-positive: nudges towards down 4 Pixels are further divided as follows: | LSB | | Red | Green | Blue | -| ------------ | ------------ | ------------ | ------------ | ------------ | +| ------------ | ------------ | ------------ | ----------- | ------------ | | Y | Anchor point Y for: | undefined | undefined | undefined | | X | Anchor point X for: | undefined | undefined | undefined | -| Y | Anchor point Y for: | (unused) | (unused) | (unused) | +| Y | Anchor point Y for: | Type-0 | Type-1 | Type-2 | | X | Anchor point X for: | Type-0 | Type-1 | Type-2 | | **MSB** | | | | | - 1Y1Y1Y1Y 1Y2Y2Y2Y 1Y3Y3Y3Y - 1X1X1X1X 1X2X2X2X 1X3X3X3X + 1Y1Y1Y1Y 2Y2Y2Y2Y 3Y3Y3Y3Y + 1X1X1X1X 2X2X2X2X 3X3X3X3X where Red is first, Green is second, Blue is the third diacritics. -MSB for each word must be set so that the pixel would appear brighter on the image editor. -(the font program will only read low 7 bits for each RGB channel) + +Each X and Y numbers are SIGN AND MAGNITUDE 8-Bit Integer. + +X-positive: nudges towards left +Y-positive: nudges towards down #### Diacritics Type Bit Encoding diff --git a/demo.PNG b/demo.PNG index 664295025568a43cd5b5235fed8c1eea40830f8f..11122250948bd1f118442af9522afa3a036555e6 100644 GIT binary patch delta 160117 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