Add support for our custom SJIS font.
svn-id: r42813
This commit is contained in:
parent
712e0c80ea
commit
0a612f40eb
2 changed files with 66 additions and 0 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue