diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index f357af1..54a1bad 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -8,9 +8,9 @@
-
-
-
+
+
+
@@ -30,8 +30,8 @@
-
-
+
+
@@ -52,8 +52,8 @@
-
-
+
+
@@ -64,8 +64,8 @@
-
-
+
+
@@ -74,7 +74,7 @@
-
+
@@ -106,7 +106,16 @@
fun dispoxHeinot copy
+ getColour
+ toColo
+ .094
+ ө
+ ď
+ ñ
+
+ .141
+
@@ -120,9 +129,9 @@
+
-
@@ -402,7 +411,7 @@
-
+
@@ -635,10 +644,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -647,17 +673,10 @@
-
-
-
-
-
-
-
-
-
+
+
@@ -666,15 +685,8 @@
-
-
-
-
-
-
-
-
-
+
+
diff --git a/FontTestGDX/demotext.txt b/FontTestGDX/demotext.txt
index e72967b..f3f596d 100644
--- a/FontTestGDX/demotext.txt
+++ b/FontTestGDX/demotext.txt
@@ -1,6 +1,82 @@
-Do bạch kim rất quý nên sẽ dùng để lắp vô xương
+The bitmap font for games developers who seek good font that has real multilingual support,
+for free (as in freedom and without cost)
+
+There are many bitmap fonts on the internet. You care for the multilingual support, but alas!
+most of them do not support your language, vector fonts take too much time to load, and even
+then their legibility suffers because fuck built-in antialias.
+
+You somehow found a multilingual one, and it makes your game look like an old computer, and you say:
+
+“Well, better than nothing… no, it’s ugly.”
+
+You speak japanese and you wish to support it, but then このクソなfont only goot for displaying
+Japanese, it's not even multilingual, and their English look uncanny and inconsistent as hell.
+
+Eventually you just mix different fonts together, and the results were always infuriating.
+
+No more suffering. This font has everything you need.
+
+while (isVisible(BAD_FONTS)) {
+ ripAndTear(BAD_FONTS).getByScope(GUTS);
+}
+
+How multilingual? Real multilingual!
+
+ Ианҵоуп ақьаад, нусхур аҩырала, ҩ ҽшьаҟакла, иҧшӡоу анапҩырала
+ Գրիչս վայր դրի, վեր կացա և պատրաստվում էի, որ քնեմ, երբ հանկարծ դռանս զանգակը հնչեց
+ Zəfər, jaketini də papağını da götür, bu axşam hava çox soyuq olacaq
+ Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче (BG)
+ Příliš žluťoučký kůň úpěl ďábelské ódy
+ Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Walther spillede på xylofon
+ Pack my box with five dozen liquor jugs
+ Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich
+ διαφυλάξτε γενικά τη ζωή σας από βαθειά ψυχικά τραύματα
+ ΔΙΑΦΥΛΆΞΤΕ ΓΕΝΙΚΆ ΤΗ ΖΩΉ ΣΑΣ ΑΠΌ ΒΑΘΕΙΆ ΨΥΧΙΚΆ ΤΡΑΎΜΑΤΑ
+ სწრაფი ყავისფერი მელა გადაახტა ზარმაც ძაღლს
+ Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa
+ Ċuaiġ bé ṁórṡáċ le dlúṫspád fíorḟinn trí hata mo ḋea-ṗorcáin ḃig
+ とりなくこゑす ゆめさませ みよあけわたる ひんかしを そらいろはえて おきつへに ほふねむれゐぬ もやのうち
+ 田居に出で 菜摘むわれをぞ 君召すと 求食り追ひゆく 山城の 打酔へる子ら 藻葉干せよ え舟繋けぬ
+ 정 참판 양반댁 규수 큰 교자 타고 혼례 치른 날 하얬다 도럄직한 퀡봹퉪헰
+ Četri psihi faķīri vēlu vakarā zāģēja guļbūvei durvis, fonā šņācot mežam
+ Įlinkdama fechtuotojo špaga sublykčiojusi pragręžė apvalų arbūzą
+ Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех
+ Щётканы фермд пийшин цувъя. Бөгж зогсч хэльюү
+ Pchnąć w tę łódź jeża lub ośm skrzyń fig
+ Înjurând pițigăiat, zoofobul comandă vexat whisky și tequila
+ Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства
+ Ајшо, лепото и чежњо, за љубав срца мога дођи у Хаџиће на кафу (SR)
+ Jovencillo emponzoñado de whisky: ¡qué figurota exhibe!
+ นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ
+ Pijamalı hasta yağız şoföre çabucak güvendi
+ Жебракують філософи при ґанку церкви в Гадячі, ще й шатро їхнє п’яне знаємо
+ Do bạch kim rất quý nên sẽ dùng để lắp vô xương
+ 日堀油告観観藤村抄海評業庁経賃室弁市。太撮収改売週法所何都慣次現。価紙一無三洋日話転手治稿載末替付致治。
+
+Featuring:
+
+ Ever heard of « Guillemets »? You speak „Nederlands” or „Deutsch“? ”suomi”? 「日本語」しゃべる?或《中文》?
+
+Multilingual brackets; these are the most basic things, right?
+
+ 99406 91902 59186 29182 45814 57862 34368 08240
+ 31485 65379 04348 28952 42927 26157 42615 39526
+
+Fixed-width numbers, because number-crunching matters
+
+ ᚱᛂᚴᛋᛂᛋᛏᛋᚮᚾᛔᚢᛏᛚᚮᛋ᛬ᚱᛂᚴᛋᛋᚢᚼᚾᚢᛘᚢᛚᚾᛏᚮ᛬ᛏᚮᛋᛁᚮᚵᛂᚢᛏᚮᚱᛘᛔᚱᛂᚴᛋᛏ᛭ᛋᚢᚼᚾᚢᛋᛘᚮᛁᚵᚾᛁᛂᛏᚮᛑ᛭ᚵᛂᚢᛏᚮᚱ
+
+Colour-coding that supports 65535 (semi-transparent) colours via 4 bit RGBA
+
+ За миг бях в чужд плюшен скърцащ фотьойл (Bulgarian)
+ Љубазни фењерџија чађавог лица хоће да ми покаже штос (Serbian)
+ Разъяренный чтец эгоистично бьёт пятью жердями шустрого фехтовальщика (Russian)
+
+Control characters to support Bulgarian and Serbian letter shapes on the fly
+
+Unicode References:
+
+ Basic Latin Latin-1 Latin Extension A Latin Extionsion B IPA Extension Greek Cyrillic Cyrillic Supplement
+ Armenian Thai Georgian Runic General Punctuations CJK Symbols Kana CJK Unihan Extension A CJK Unihan
+ Hangul Syllables Fullwidth Forms
-Цой жил, Цой жив, Цой будет жить
-Время его смерти в автокатастрофе известно до минуты –15.07.1990,12.28.
-20 лет назад заснувший за рулем «Москвича-2141» Цой вырулил на трассе под
-Тукумсом в Латвии на встречную полосу – прямо в автобус «Икарус»…
\ No newline at end of file
diff --git a/FontTestGDX/lib/TerrarumSansBitmap.jar b/FontTestGDX/lib/TerrarumSansBitmap.jar
index c36fbaf..c0e0a68 100644
Binary files a/FontTestGDX/lib/TerrarumSansBitmap.jar and b/FontTestGDX/lib/TerrarumSansBitmap.jar differ
diff --git a/FontTestGDX/src/FontTestGDX.kt b/FontTestGDX/src/FontTestGDX.kt
index bb3cd42..76c54e3 100644
--- a/FontTestGDX/src/FontTestGDX.kt
+++ b/FontTestGDX/src/FontTestGDX.kt
@@ -27,6 +27,108 @@ class FontTestGDX : Game() {
reader.close()
batch = SpriteBatch()
+
+
+
+
+ println("START")
+
+ val l = intArrayOf(0xF00F,
+ 0xF10F,
+ 0xF20F,
+ 0xF30F,
+ 0xF40F,
+ 0xF50F,
+ 0xF60F,
+ 0xF70F,
+ 0xF80F,
+ 0xF90F,
+ 0xFA0F,
+ 0xFB0F,
+ 0xFC0F,
+ 0xFD0F,
+ 0xFE0F,
+ 0xFF0F,
+ 0xEF0F,
+ 0xDF0F,
+ 0xCF0F,
+ 0xBF0F,
+ 0xAF0F,
+ 0x9F0F,
+ 0x8F0F,
+ 0x7F0F,
+ 0x6F0F,
+ 0x5F0F,
+ 0x4F0F,
+ 0x3F0F,
+ 0x2F0F,
+ 0x1F0F,
+ 0x0F0F,
+ 0x0F1F,
+ 0x0F2F,
+ 0x0F3F,
+ 0x0F4F,
+ 0x0F5F,
+ 0x0F6F,
+ 0x0F7F,
+ 0x0F8F,
+ 0x0F9F,
+ 0x0FAF,
+ 0x0FBF,
+ 0x0FCF,
+ 0x0FDF,
+ 0x0FEF,
+ 0x0FFF,
+ 0x0EFF,
+ 0x0DFF,
+ 0x0CFF,
+ 0x0BFF,
+ 0x0AFF,
+ 0x09FF,
+ 0x08FF,
+ 0x07FF,
+ 0x06FF,
+ 0x05FF,
+ 0x04FF,
+ 0x03FF,
+ 0x02FF,
+ 0x01FF,
+ 0x00FF,
+ 0x10FF,
+ 0x20FF,
+ 0x30FF,
+ 0x40FF,
+ 0x50FF,
+ 0x60FF,
+ 0x70FF,
+ 0x80FF,
+ 0x90FF,
+ 0xA0FF,
+ 0xB0FF,
+ 0xC0FF,
+ 0xD0FF,
+ 0xE0FF,
+ 0xF0FF)
+ val s = "ᚱᛂᚴᛋᛂᛋᛏᛋᚮᚾᛔᚢᛏᛚᚮᛋ᛬ᚱᛂᚴᛋᛋᚢᚼᚾᚢᛘᚢᛚᚾᛏᚮ᛬ᛏᚮᛋᛁᚮᚵᛂᚢᛏᚮᚱᛘᛔᚱᛂᚴᛋᛏ᛭ᛋᚢᚼᚾᚢᛋᛘᚮᛁᚵᚾᛁᛂᛏᚮᛑ᛭ᚵᛂᚢᛏᚮᚱ"
+ var lc = 0
+ var sc = 0
+
+ while (lc < l.size) {
+ print(font.toColorCode(l[lc]))
+ print(s[sc])
+
+ lc++
+ sc++
+
+ if (sc == s.length) break
+
+ if (s[sc] == ' ') {
+ print(" ")
+ sc++
+ }
+ }
+
+ println("${font.noColorCode}\nEND")
}
override fun getScreen(): Screen? {
@@ -38,7 +140,7 @@ class FontTestGDX : Game() {
override fun render() {
- Gdx.gl.glClearColor(1f - 0xBA/255f, 1f - 0xDA/255f, 1f - 0x55/255f, 1f)
+ Gdx.gl.glClearColor(.141f, .141f, .141f, 1f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D)
Gdx.gl.glEnable(GL20.GL_BLEND)
@@ -47,8 +149,8 @@ class FontTestGDX : Game() {
batch.begin()
- inputText.reversed().forEachIndexed { index, s ->
- font.draw(batch, s, 10f, 10f + index * font.lineHeight)
+ inputText.forEachIndexed { index, s ->
+ font.draw(batch, s, 10f, appConfig.height - 30f - index * font.lineHeight)
}
batch.end()
@@ -68,12 +170,14 @@ class FontTestGDX : Game() {
}
}
+lateinit var appConfig: LwjglApplicationConfiguration
+
fun main(args: Array) {
- val appConfig = LwjglApplicationConfiguration()
+ appConfig = LwjglApplicationConfiguration()
appConfig.vSyncEnabled = false
appConfig.resizable = false//true;
- appConfig.width = 1024 // photographic ratio (1.5:1)
- appConfig.height = 1024 // photographic ratio (1.5:1)
+ appConfig.width = 960
+ appConfig.height = 2048
appConfig.title = "Terrarum Sans Bitmap Test (GDX)"
LwjglApplication(FontTestGDX(), appConfig)
diff --git a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt
index 00b57fd..3e62735 100644
--- a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt
+++ b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt
@@ -59,6 +59,14 @@ import java.util.zip.GZIPInputStream
*
* Color Codes have following Unicode mapping: U+10RGBA, A must be non-zero to be visible. U+100000 reverts any colour code effects.
*
+ * ## Control Characters
+ *
+ * - U+100000: Clear colour keys
+ * - U+100001..U+10FFFF: Colour key (in RGBA order)
+ * - U+FFFF8: Charset override -- normal (incl. Russian, Ukrainian, etc.)
+ * - U+FFFF9: Charset override -- Bulgarian
+ * - U+FFFFA: Charset override -- Serbian
+ *
* @param noShadow Self-explanatory
* @param flipY If you have Y-down coord system implemented on your GDX (e.g. legacy codebase), set this to ```true``` so that the shadow won't be upside-down. For glyph getting upside-down, set ```TextureRegionPack.globalFlipY = true```.
*
@@ -818,6 +826,9 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
internal val SHEET_UNKNOWN = 254
+ fun charsetOverrideNormal() = Character.toChars( 0xFFFF8)
+ fun charsetOverrideBulgarian() = Character.toChars( 0xFFFF9)
+ fun charsetOverrideSerbian() = Character.toChars( 0xFFFFA)
fun toColorCode(rgba4444: Int): String = Character.toChars(0x100000 + rgba4444).toColCode()
fun toColorCode(r: Int, g: Int, b: Int, a: Int = 0x0F): String = toColorCode(r.shl(12) or g.shl(8) or b.shl(4) or a)
private fun CharArray.toColCode(): String = "${this[0]}${this[1]}"