[Scummvm-cvs-logs] CVS: scummvm/sky text.cpp,1.19,1.19.2.1 text.h,1.10,1.10.2.1 sky.cpp,1.30,1.30.2.1
Oliver Kiehl
olki at users.sourceforge.net
Sun May 11 04:56:01 CEST 2003
Update of /cvsroot/scummvm/scummvm/sky
In directory sc8-pr-cvs1:/tmp/cvs-serv2747
Modified Files:
Tag: branch-0-4-0
text.cpp text.h sky.cpp
Log Message:
merge latest sky changes into the branch (huffman trees cleanup)
Index: text.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/text.cpp,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -d -r1.19 -r1.19.2.1
--- text.cpp 3 May 2003 23:32:04 -0000 1.19
+++ text.cpp 11 May 2003 11:54:59 -0000 1.19.2.1
@@ -39,6 +39,8 @@
_language = language;
_gameVersion = gameVersion;
+ initHuffTree();
+
_mainCharacterSet.addr = _skyDisk->loadFile(CHAR_SET_FILE, NULL);
_mainCharacterSet.charHeight = MAIN_CHAR_HEIGHT;
_mainCharacterSet.charSpacing = 0;
@@ -364,2890 +366,1104 @@
}
[...3960 lines suppressed...]
- return (char)148;
-
-label_122:
- return '|';
-
-
- return '!'; //should never be reached
+char SkyText::getTextChar() {
+ int pos = 0;
+ for (;;) {
+ if (getTBit() == 0)
+ pos = _huffTree[pos].lChild;
+ else
+ pos = _huffTree[pos].rChild;
+ if (_huffTree[pos].lChild == 0 && _huffTree[pos].rChild == 0) {
+ return _huffTree[pos].value;
+ }
+ }
}
Index: text.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/text.h,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -d -r1.10 -r1.10.2.1
--- text.h 29 Apr 2003 19:52:24 -0000 1.10
+++ text.h 11 May 2003 11:54:59 -0000 1.10.2.1
@@ -24,6 +24,12 @@
#include "sky/disk.h"
+struct HuffTree {
+ char lChild;
+ char rChild;
+ char value;
+};
+
class SkyText {
public:
SkyText(SkyDisk *skyDisk, uint32 gameVersion, uint16 _language);
@@ -36,7 +42,8 @@
protected:
bool getTBit();
void fnSetFont(uint32 fontNr);
- virtual char getTextChar() = 0;
+ void initHuffTree();
+ char getTextChar();
SkyDisk *_skyDisk;
uint16 _language;
@@ -45,6 +52,8 @@
uint8 _shiftBits;
uint8 *_textItemPtr;
+ const HuffTree *_huffTree;
+
struct charSet {
uint8 *addr;
uint32 charHeight;
@@ -72,41 +81,6 @@
uint32 _dtLastWidth;
bool _dtCentre; //set for centre text
uint32 _lowTextWidth;
-};
-
-class SkyText_v00267 : public SkyText {
-public:
- SkyText_v00267(SkyDisk *skyDisk, uint32 gameVersion, uint16 language) : SkyText(skyDisk, gameVersion, language) {};
-protected:
- char getTextChar();
-};
-
-class SkyText_v00288 : public SkyText {
-public:
- SkyText_v00288(SkyDisk *skyDisk, uint32 gameVersion, uint16 language) : SkyText(skyDisk, gameVersion, language) {};
-protected:
- char getTextChar();
-};
-
-class SkyText_v00303 : public SkyText {
-public:
- SkyText_v00303(SkyDisk *skyDisk, uint32 gameVersion, uint16 language) : SkyText(skyDisk, gameVersion, language) {};
-protected:
- char getTextChar();
-};
-
-class SkyText_v00331 : public SkyText {
-public:
- SkyText_v00331(SkyDisk *skyDisk, uint32 gameVersion, uint16 language) : SkyText(skyDisk, gameVersion, language) {};
-protected:
- char getTextChar();
-};
-
-class SkyText_v00372 : public SkyText {
-public:
- SkyText_v00372(SkyDisk *skyDisk, uint32 gameVersion, uint16 language) : SkyText(skyDisk, gameVersion, language) {};
-protected:
- char getTextChar();
};
#endif
Index: sky.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.cpp,v
retrieving revision 1.30
retrieving revision 1.30.2.1
diff -u -d -r1.30 -r1.30.2.1
--- sky.cpp 5 May 2003 13:19:59 -0000 1.30
+++ sky.cpp 11 May 2003 11:54:59 -0000 1.30.2.1
@@ -128,7 +128,7 @@
}
_gameVersion = _skyDisk->determineGameVersion();
- _skyText = getSkyText();
+ _skyText = new SkyText(_skyDisk, _gameVersion, _language);
_skyMouse = new SkyMouse(_skyDisk);
initialiseScreen();
@@ -256,33 +256,6 @@
}
cur = _system->get_msecs();
} while (cur < start + amount);
-}
-
-SkyText *SkyState::getSkyText() {
-
- switch (_gameVersion) {
- case 267:
- //floppy demo
- return new SkyText_v00267(_skyDisk, _gameVersion, _language);
- case 288:
- //floppy version
- return new SkyText_v00288(_skyDisk, _gameVersion, _language);
- case 303:
- //floppy version
- return new SkyText_v00303(_skyDisk, _gameVersion, _language);
- case 331:
- //floppy version
- return new SkyText_v00331(_skyDisk, _gameVersion, _language);
- case 365:
- //cd demo, uses a slightly modified version of v00372
- case 368:
- //cd version, uses a slightly modified version of v00372
- case 372:
- //cd version
- return new SkyText_v00372(_skyDisk, _gameVersion, _language);
- default:
- error("Unknown game version");
- }
}
bool SkyState::isDemo(uint32 version) {
More information about the Scummvm-git-logs
mailing list