aboutsummaryrefslogtreecommitdiff
path: root/scumm/scummvm.cpp
diff options
context:
space:
mode:
authorMax Horn2003-06-04 14:37:43 +0000
committerMax Horn2003-06-04 14:37:43 +0000
commit6fd0e4a07f7502cf88e0d65a7030836196c15852 (patch)
tree15622623c1b5e89dea1ae57d208101cf93d4d3e3 /scumm/scummvm.cpp
parent97aaab94108c3ddbac82a130ddb4f4050867a880 (diff)
downloadscummvm-rg350-6fd0e4a07f7502cf88e0d65a7030836196c15852.tar.gz
scummvm-rg350-6fd0e4a07f7502cf88e0d65a7030836196c15852.tar.bz2
scummvm-rg350-6fd0e4a07f7502cf88e0d65a7030836196c15852.zip
Patch #747021: DIG&CMI 2 byte charset support (very heavily modified by me; still needs more cleanup but already works well enough)
svn-id: r8293
Diffstat (limited to 'scumm/scummvm.cpp')
-rw-r--r--scumm/scummvm.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp
index 47ec05c74d..e08e4e5de5 100644
--- a/scumm/scummvm.cpp
+++ b/scumm/scummvm.cpp
@@ -56,6 +56,26 @@ extern void drawError(char*);
Scumm *g_scumm = 0;
ScummDebugger *g_debugger;
+byte *_2byteFontPtr;
+int _2byteWidth;
+int _2byteHeight;
+bool _CJKMode;
+
+byte *Scumm::get2byteCharPtr(int idx) {
+ /*
+ switch(language)
+ case korean:
+ return ( (idx % 256) - 0xb0) * 94 + (idx / 256) - 0xa1;
+ case japanese:
+ ...
+ case taiwan:
+ ...
+ */
+ idx = ( (idx % 256) - 0xb0) * 94 + (idx / 256) - 0xa1; // only for korean
+ return _2byteFontPtr + 2 * _2byteHeight * idx;
+}
+
+
extern NewGui *g_gui;
extern uint16 _debugLevel;
@@ -636,6 +656,52 @@ Scumm::Scumm (GameDetector *detector, OSystem *syst)
_saveLoadCompatible = false;
}
loadLanguageBundle();
+
+ // Load CJK font
+ if((_gameId == GID_DIG || _gameId == GID_CMI) && (_language == KO_KOR || _language == JA_JPN || _language == ZH_TWN)) {
+ File fp;
+ const char *fontFile = NULL;
+ _CJKMode = false;
+ switch(_language) {
+ case KO_KOR:
+ _CJKMode = true;
+ fontFile = "korean.fnt";
+ break;
+ case JA_JPN:
+ _CJKMode = true;
+ fontFile = (_gameId == GID_DIG) ? "kanji16.fnt" : "japanese.fnt";
+ break;
+ case ZH_TWN:
+ if(_gameId == GID_CMI) {
+ _CJKMode = true;
+ fontFile = "chinese.fnt";
+ }
+ break;
+ }
+ if(_CJKMode && fp.open(fontFile, getGameDataPath(), 1)) {
+ debug(2, "Loading CJK Font");
+ fp.seek(2,SEEK_CUR);
+ _2byteWidth = fp.readByte(); //FIXME: is this correct?
+ _2byteHeight = fp.readByte();
+
+ int numChar = 0;
+ switch(_language) {
+ case KO_KOR:
+ numChar = 2350;
+ break;
+ case JA_JPN:
+ numChar = (_gameId == GID_DIG) ? 1 : 1; //FIXME
+ break;
+ case ZH_TWN:
+ numChar = 1; //FIXME
+ break;
+ }
+ _2byteFontPtr = new byte[2 * _2byteHeight * numChar];
+ fp.read(_2byteFontPtr, 2 * _2byteHeight * numChar);
+ fp.close();
+ }
+ }
+
_audioNames = NULL;
}
@@ -643,6 +709,7 @@ Scumm::~Scumm ()
{
delete [] _actors;
+ delete _2byteFontPtr;
delete _charset;
delete _pauseDialog;
delete _optionsDialog;