Add support for our custom SJIS font.

svn-id: r42813
This commit is contained in:
Johannes Schickel 2009-07-26 14:17:06 +00:00
parent 712e0c80ea
commit 0a612f40eb
2 changed files with 66 additions and 0 deletions

View file

@ -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)