diff --git a/src/net/torvald/imagefont/GameFontBase.kt b/src/net/torvald/imagefont/GameFontBase.kt index a09acaa8c..75b7c6b6d 100644 --- a/src/net/torvald/imagefont/GameFontBase.kt +++ b/src/net/torvald/imagefont/GameFontBase.kt @@ -58,6 +58,7 @@ open class GameFontBase : Font { private fun isAscii(c: Char) = c.toInt() >= 0x20 && c.toInt() <= 0xFF private fun isRunic(c: Char) = runicList.contains(c) private fun isExtA(c: Char) = c.toInt() >= 0x100 && c.toInt() < 0x180 + private fun isExtB(c: Char) = c.toInt() >= 0x180 && c.toInt() < 0x250 private fun isKana(c: Char) = c.toInt() >= 0x3040 && c.toInt() < 0x3100 private fun isCJKPunct(c: Char) = c.toInt() >= 0x3000 && c.toInt() < 0x3040 private fun isUniHan(c: Char) = c.toInt() >= 0x3400 && c.toInt() < 0xA000 @@ -67,8 +68,6 @@ open class GameFontBase : Font { private fun isWenQuanYi1(c: Char) = c.toInt() >= 0x33F3 && c.toInt() <= 0x69FC private fun isWenQuanYi2(c: Char) = c.toInt() >= 0x69FD && c.toInt() <= 0x9FDC private fun isGreek(c: Char) = c.toInt() >= 0x370 && c.toInt() <= 0x3CE - private fun isRomanian(c: Char) = c.toInt() >= 0x218 && c.toInt() <= 0x21A - private fun isRomanianNarrow(c: Char) = c.toInt() == 0x21B private fun isThai(c: Char) = c.toInt() >= 0xE00 && c.toInt() <= 0xE7F private fun isThaiDiacritics(c: Char) = (c.toInt() >= 0xE34 && c.toInt() <= 0xE3A) || (c.toInt() >= 0xE47 && c.toInt() <= 0xE4E) @@ -81,6 +80,9 @@ open class GameFontBase : Font { private fun extAindexX(c: Char) = (c.toInt() - 0x100) % 16 private fun extAindexY(c: Char) = (c.toInt() - 0x100) / 16 + private fun extBindexX(c: Char) = (c.toInt() - 0x180) % 16 + private fun extBindexY(c: Char) = (c.toInt() - 0x180) / 16 + private fun runicIndexX(c: Char) = runicList.indexOf(c) % 16 private fun runicIndexY(c: Char) = runicList.indexOf(c) / 16 @@ -110,9 +112,6 @@ open class GameFontBase : Font { private fun greekIndexX(c: Char) = (c.toInt() - 0x370) % 16 private fun greekIndexY(c: Char) = (c.toInt() - 0x370) / 16 - private fun romanianIndexX(c: Char) = c.toInt() - 0x218 - private fun romanianIndexY(c: Char) = 0 - private fun thaiIndexX(c: Char) = (c.toInt() - 0xE00) % 16 private fun thaiIndexY(c: Char) = (c.toInt() - 0xE00) / 16 @@ -122,9 +121,6 @@ open class GameFontBase : Font { private fun keycapIndexX(c: Char) = (c.toInt() - 0xE000) % 16 private fun keycapIndexY(c: Char) = (c.toInt() - 0xE000) / 16 - private val narrowWidthSheets = arrayOf( - SHEET_EXTB_ROMANIAN_NARROW - ) private val unihanWidthSheets = arrayOf( SHEET_UNIHAN, SHEET_FW_UNI, @@ -138,7 +134,8 @@ open class GameFontBase : Font { SHEET_ASCII_VARW, SHEET_CYRILIC_VARW, SHEET_EXTA_VARW, - SHEET_GREEK_VARW + SHEET_GREEK_VARW, + SHEET_EXTB_VARW ) @@ -163,8 +160,6 @@ open class GameFontBase : Font { } else if (zeroWidthSheets.contains(ctype)) len += 0 - else if (narrowWidthSheets.contains(ctype)) - len += W_LATIN_NARROW else if (ctype == SHEET_CJK_PUNCT) len += W_ASIAN_PUNCT else if (ctype == SHEET_HANGUL) @@ -336,6 +331,10 @@ open class GameFontBase : Font { sheetX = extAindexX(ch) sheetY = extAindexY(ch) } + SHEET_EXTB_VARW -> { + sheetX = extBindexX(ch) + sheetY = extBindexY(ch) + } SHEET_KANA -> { sheetX = kanaIndexX(ch) sheetY = kanaIndexY(ch) @@ -360,14 +359,6 @@ open class GameFontBase : Font { sheetX = greekIndexX(ch) sheetY = greekIndexY(ch) } - SHEET_EXTB_ROMANIAN_WIDE -> { - sheetX = romanianIndexX(ch) - sheetY = romanianIndexY(ch) - } - SHEET_EXTB_ROMANIAN_NARROW -> { - sheetX = 0 - sheetY = 0 - } SHEET_THAI_WIDE -> { sheetX = thaiIndexX(ch) sheetY = thaiIndexY(ch) @@ -414,10 +405,7 @@ open class GameFontBase : Font { } private fun getSheetType(c: Char): Int { - // EFs - if (isRomanianNarrow(c)) - return SHEET_EXTB_ROMANIAN_NARROW - else if (isThaiEF(c)) + if (isThaiEF(c)) return SHEET_EXTA_VARW // will use fourth glyph in EXTA_EF else if (isRunic(c)) return SHEET_RUNIC @@ -431,6 +419,8 @@ open class GameFontBase : Font { return SHEET_ASCII_VARW else if (isExtA(c)) return SHEET_EXTA_VARW + else if (isExtB(c)) + return SHEET_EXTB_VARW else if (isCyrilic(c)) return SHEET_CYRILIC_VARW else if (isUniPunct(c)) @@ -441,8 +431,6 @@ open class GameFontBase : Font { return SHEET_FW_UNI else if (isGreek(c)) return SHEET_GREEK_VARW - else if (isRomanian(c)) - return SHEET_EXTB_ROMANIAN_WIDE else if (isThai(c)) return SHEET_THAI_WIDE else if (c.isColourCode()) @@ -477,16 +465,6 @@ open class GameFontBase : Font { drawString(x + xoff, y, printedBody, color) } - private fun setBlendModeMul() { - GL11.glEnable(GL11.GL_BLEND) - GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_ONE_MINUS_SRC_ALPHA) - } - - private fun setBlendModeNormal() { - GL11.glDisable(GL11.GL_BLEND) - Terrarum.appgc.graphics.setDrawMode(Graphics.MODE_NORMAL) - } - fun Char.isColourCode() = colourKey.containsKey(this) fun buildWidthTable(sheet: SpriteSheet, codeOffset: Int, codeRange: IntRange, rows: Int = 16) { @@ -524,6 +502,7 @@ open class GameFontBase : Font { lateinit internal var runicSheet: SpriteSheet lateinit internal var extASheet: SpriteSheet + lateinit internal var extBSheet: SpriteSheet lateinit internal var kanaSheet: SpriteSheet lateinit internal var cjkPunct: SpriteSheet // static SpriteSheet uniHan; @@ -533,8 +512,6 @@ open class GameFontBase : Font { lateinit internal var wenQuanYi_1: SpriteSheet lateinit internal var wenQuanYi_2: SpriteSheet lateinit internal var greekSheet: SpriteSheet - lateinit internal var romanianSheet: SpriteSheet - lateinit internal var romanianSheetNarrow: SpriteSheet lateinit internal var thaiSheet: SpriteSheet lateinit internal var keycapSheet: SpriteSheet @@ -545,8 +522,7 @@ open class GameFontBase : Font { internal val W_HANGUL = 11 internal val W_KANA = 12 internal val W_UNIHAN = 16 - internal val W_LATIN_WIDE = 9 // width of regular letters, including m - internal val W_LATIN_NARROW = 5 // width of letter f, t, i, l + internal val W_LATIN_WIDE = 9 // width of regular letters internal val H = 20 internal val H_HANGUL = 16 @@ -559,20 +535,19 @@ open class GameFontBase : Font { internal val SHEET_HANGUL = 1 internal val SHEET_RUNIC = 2 internal val SHEET_EXTA_VARW = 3 - internal val SHEET_KANA = 4 - internal val SHEET_CJK_PUNCT = 5 - internal val SHEET_UNIHAN = 6 - internal val SHEET_CYRILIC_VARW = 7 - internal val SHEET_FW_UNI = 8 - internal val SHEET_UNI_PUNCT = 9 - internal val SHEET_WENQUANYI_1 = 10 - internal val SHEET_WENQUANYI_2 = 11 - internal val SHEET_GREEK_VARW = 12 - internal val SHEET_EXTB_ROMANIAN_WIDE = 13 - internal val SHEET_EXTB_ROMANIAN_NARROW = 14 - internal val SHEET_THAI_WIDE = 15 - internal val SHEET_THAI_NARROW = 16 - internal val SHEET_KEYCAP = 17 + internal val SHEET_EXTB_VARW = 4 + internal val SHEET_KANA = 5 + internal val SHEET_CJK_PUNCT = 6 + internal val SHEET_UNIHAN = 7 + internal val SHEET_CYRILIC_VARW = 8 + internal val SHEET_FW_UNI = 9 + internal val SHEET_UNI_PUNCT = 10 + internal val SHEET_WENQUANYI_1 = 11 + internal val SHEET_WENQUANYI_2 = 12 + internal val SHEET_GREEK_VARW = 13 + internal val SHEET_THAI_WIDE = 14 + internal val SHEET_THAI_NARROW = 15 + internal val SHEET_KEYCAP = 16 internal val SHEET_UNKNOWN = 254 internal val SHEET_COLOURCODE = 255 diff --git a/src/net/torvald/imagefont/GameFontImpl.kt b/src/net/torvald/imagefont/GameFontImpl.kt index 3a67f5ba1..43406bdd8 100644 --- a/src/net/torvald/imagefont/GameFontImpl.kt +++ b/src/net/torvald/imagefont/GameFontImpl.kt @@ -18,6 +18,8 @@ class GameFontImpl : GameFontBase() { "./assets/graphics/fonts/futhark.tga", GameFontBase.W_LATIN_WIDE, GameFontBase.H) GameFontBase.extASheet = SpriteSheet( "./assets/graphics/fonts/LatinExtA_variable.tga", 15, 19, 1) + GameFontBase.extBSheet = SpriteSheet( + "./assets/graphics/fonts/LatinExtB_variable.tga", 15, 19, 1) GameFontBase.kanaSheet = SpriteSheet( "./assets/graphics/fonts/kana.tga", GameFontBase.W_KANA, GameFontBase.H_KANA) GameFontBase.cjkPunct = SpriteSheet( @@ -45,10 +47,6 @@ class GameFontImpl : GameFontBase() { "./assets/graphics/fonts/wenquanyi_11pt_part2.tga", 16, 18, 2) GameFontBase.greekSheet = SpriteSheet( "./assets/graphics/fonts/greek_variable.tga", 15, 19, 1) - GameFontBase.romanianSheet = SpriteSheet( - "./assets/graphics/fonts/romana_wide.tga", GameFontBase.W_LATIN_WIDE, GameFontBase.H) - GameFontBase.romanianSheetNarrow = SpriteSheet( - "./assets/graphics/fonts/romana_narrow.tga", GameFontBase.W_LATIN_NARROW, GameFontBase.H) GameFontBase.thaiSheet = SpriteSheet( "./assets/graphics/fonts/thai_wide.tga", GameFontBase.W_LATIN_WIDE, GameFontBase.H) GameFontBase.keycapSheet = SpriteSheet( @@ -59,6 +57,7 @@ class GameFontImpl : GameFontBase() { GameFontBase.hangulSheet, GameFontBase.runicSheet, GameFontBase.extASheet, + GameFontBase.extBSheet, GameFontBase.kanaSheet, GameFontBase.cjkPunct, null, // Full unihan, filler because we're using WenQuanYi @@ -68,8 +67,6 @@ class GameFontImpl : GameFontBase() { GameFontBase.wenQuanYi_1, GameFontBase.wenQuanYi_2, GameFontBase.greekSheet, - GameFontBase.romanianSheet, - GameFontBase.romanianSheetNarrow, GameFontBase.thaiSheet, null, // Thai EF, filler because not being used right now GameFontBase.keycapSheet @@ -77,9 +74,10 @@ class GameFontImpl : GameFontBase() { GameFontBase.sheetKey = shk - buildWidthTable(asciiSheet, 0, 0..0xFF) - buildWidthTable(extASheet, 0x100, 0..0x7F) - buildWidthTable(cyrilic, 0x400, 0..0x5F) + buildWidthTable(asciiSheet, 0, 0..0xFF) + buildWidthTable(extASheet, 0x100, 0..0x7F) + buildWidthTable(extBSheet, 0x180, 0..0xCF) + buildWidthTable(cyrilic, 0x400, 0..0x5F) buildWidthTable(greekSheet, 0x370, 0..0x5F) } diff --git a/src/net/torvald/terrarum/StateFontTester.kt b/src/net/torvald/terrarum/StateFontTester.kt index 1b3ba322d..3a01a1ee5 100644 --- a/src/net/torvald/terrarum/StateFontTester.kt +++ b/src/net/torvald/terrarum/StateFontTester.kt @@ -109,7 +109,7 @@ nopqrstuvwxyz "", "Also supports:", "‛Unicode’ „quotation marks“—dashes…‼", - "으웽~. 얘! 위에 이 애 우유의 양 외워와! 아오~ 왜요? 어여! 예... 웬 초콜릿? 제가 원했던 건 뻥튀기 쬐끔과 의류예요. 얘야, 왜 또 불평? 퀡퇣풿횂", + "으웽~. 얘! 위에 이 애 우유의 양 외워와! 아오~ 왜요? 어여! 예... 웬 초콜릿? 제가 원했던 건 뻥튀기 쬐끔과 의류예요. 얘야, 왜 또 불평? 퀡뙔풿횂", "とりなくこゑす ゆめさませ みよあけわたる ひんかしを そらいろはえて おきつへに ほふねむれゐぬ もやのうち", "鳥啼く声す 夢覚ませ 見よ明け渡る 東を 空色栄えて 沖つ辺に 帆船群れゐぬ 靄の中", "" diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index fea5668a6..6f121b7ea 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -134,7 +134,7 @@ constructor(gamename: String) : StateBasedGame(gamename) { //addState(StateTestingLightning()) //addState(StateSplash()) //addState(StateMonitorCheck()) - //addState(StateFontTester()) + addState(StateFontTester()) //addState(StateNoiseTexGen()) //addState(StateBlurTest()) //addState(StateShaderTest())