From 0a612f40eb047fc80fafb1a7df4b8788d2c4fe66 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 26 Jul 2009 14:17:06 +0000 Subject: Add support for our custom SJIS font. svn-id: r42813 --- graphics/sjis.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'graphics/sjis.cpp') diff --git a/graphics/sjis.cpp b/graphics/sjis.cpp index 6f8979bc6e..0fad3fff94 100644 --- a/graphics/sjis.cpp +++ b/graphics/sjis.cpp @@ -27,6 +27,7 @@ #ifdef GRAPHICS_SJIS_H #include "common/debug.h" +#include "common/archive.h" namespace Graphics { @@ -194,6 +195,52 @@ const uint16 *FontTowns::getCharData(uint16 ch) const { return _fontData + (((chunk_f + chunk) * 32 + (s - base)) + cr) * 16; } +// ScummVM SJIS font + +bool FontSjisSVM::loadData() { + Common::SeekableReadStream *data = SearchMan.createReadStreamForMember("SJIS.FNT"); + if (!data) + return false; + + uint32 version = data->readUint32BE(); + if (version != 1) { + delete data; + return false; + } + uint numChars = data->readUint16BE(); + + _fontData = new uint16[numChars * 16]; + assert(_fontData); + + for (uint i = 0; i < numChars * 16; ++i) + _fontData[i] = data->readUint16BE(); + + bool retValue = !data->err(); + delete data; + return retValue; +} + +const uint16 *FontSjisSVM::getCharData(uint16 c) const { + const uint8 fB = c & 0xFF; + const uint8 sB = c >> 8; + + // We only allow 2 byte SJIS characters. + if (fB <= 0x80 || fB >= 0xF0 || (fB >= 0xA0 && fB <= 0xDF) || sB == 0x7F) + return 0; + + int base = fB; + base -= 0x81; + if (base >= 0x5F) + base -= 0x40; + + int index = sB; + index -= 0x40; + if (index >= 0x3F) + --index; + + return _fontData + (base * 0xBC + index) * 16; +} + } // end of namespace Graphics #endif // defined(GRAPHICS_SJIS_H) -- cgit v1.2.3