[Scummvm-git-logs] scummvm master -> 7c0baadc056e780f3785858567ad35e06163afa8

Strangerke Strangerke at scummvm.org
Tue Jun 29 21:17:51 UTC 2021


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
11ceeeebf7 TRECISION: Change the signature of characterTalk
7c0baadc05 TRECISION: rewrite font loading


Commit: 11ceeeebf75a6396e8d426131188ae2d8e25c488
    https://github.com/scummvm/scummvm/commit/11ceeeebf75a6396e8d426131188ae2d8e25c488
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2021-06-29T22:17:28+01:00

Commit Message:
TRECISION: Change the signature of characterTalk

Changed paths:
    engines/trecision/text.cpp
    engines/trecision/text.h


diff --git a/engines/trecision/text.cpp b/engines/trecision/text.cpp
index dc066b9f74..fc8f3dacb2 100644
--- a/engines/trecision/text.cpp
+++ b/engines/trecision/text.cpp
@@ -111,7 +111,7 @@ void TextManager::formattingOneString() {
 	_subStringAgain = false;
 }
 
-void TextManager::characterTalk(const char *s) {
+void TextManager::characterTalk(Common::String s) {
 	_vm->_flagSomeoneSpeaks = true;
 	_vm->_flagCharacterSpeak = true;
 	_vm->_flagSkipTalk = false;
diff --git a/engines/trecision/text.h b/engines/trecision/text.h
index ffd0045eef..58867f85f3 100644
--- a/engines/trecision/text.h
+++ b/engines/trecision/text.h
@@ -63,7 +63,7 @@ class TextManager {
 	Common::Point positionString(uint16 x, uint16 y, const char *string, bool characterFl);
 	void formattingSuperString();
 	void formattingOneString();
-	void characterTalk(const char *s);
+	void characterTalk(Common::String s);
 	void characterContinueTalk();
 	void characterMute();
 	void someoneContinueTalk();


Commit: 7c0baadc056e780f3785858567ad35e06163afa8
    https://github.com/scummvm/scummvm/commit/7c0baadc056e780f3785858567ad35e06163afa8
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2021-06-29T22:17:28+01:00

Commit Message:
TRECISION: rewrite font loading

Changed paths:
    engines/trecision/graphics.cpp
    engines/trecision/graphics.h


diff --git a/engines/trecision/graphics.cpp b/engines/trecision/graphics.cpp
index c3df9d2404..485872d9ab 100644
--- a/engines/trecision/graphics.cpp
+++ b/engines/trecision/graphics.cpp
@@ -39,9 +39,14 @@
 
 namespace Trecision {
 
-GraphicsManager::GraphicsManager(TrecisionEngine *vm) : _vm(vm),  _font(nullptr) {	
+GraphicsManager::GraphicsManager(TrecisionEngine *vm) : _vm(vm) {	
 	for (int i = 0; i < 3; ++i)
 		_bitMask[i] = 0;
+
+	for (int i = 0; i < 256; ++i) {
+		_fonts[i]._width = 0;
+		_fonts[i]._data = nullptr;
+	}
 }
 
 GraphicsManager::~GraphicsManager() {
@@ -54,7 +59,8 @@ GraphicsManager::~GraphicsManager() {
 	_saveSlotThumbnails.free();
 	_textureMat.free();
 
-	delete[] _font;
+	for (int i = 0; i < 256; ++i)
+		delete[] _fonts[i]._data;
 }
 
 bool GraphicsManager::init() {
@@ -274,7 +280,7 @@ void GraphicsManager::loadData() {
 	readSurface(iconsDataFile, &_inventoryIcons, ICONDX, ICONDY, READICON);
 	delete iconsDataFile;
 
-	_font = _vm->readData("nlfont.fnt");
+	loadFont();
 }
 
 void GraphicsManager::setSaveSlotThumbnail(byte iconSlot, const Graphics::Surface *thumbnail) {
@@ -643,12 +649,11 @@ void GraphicsManager::paintObjAnm(uint16 curBox) {
 }
 
 uint16 GraphicsManager::getCharWidth(byte character) {
-	return _font[character * 3 + 2];
+	return _fonts[character]._width;
 }
 
 void GraphicsManager::drawChar(byte curChar, uint16 textColor, uint16 line, Common::Rect rect, Common::Rect subtitleRect, uint16 inc, Graphics::Surface *externalSurface) {
-	const uint16 charOffset = _font[curChar * 3] + (uint16)(_font[curChar * 3 + 1] << 8);
-	uint16 fontDataOffset = 768;
+	uint16 fontDataOffset = 0;
 	const uint16 charWidth = getCharWidth(curChar);
 
 	for (uint16 y = line * CARHEI; y < (line + 1) * CARHEI; ++y) {
@@ -657,9 +662,9 @@ void GraphicsManager::drawChar(byte curChar, uint16 textColor, uint16 line, Comm
 
 		while (curPos <= charWidth - 1) {
 			if (y >= subtitleRect.top && y < subtitleRect.bottom) {
-				if (curColor != MASKCOL && (_font[charOffset + fontDataOffset])) {
+				if (curColor != MASKCOL && _fonts[curChar]._data[fontDataOffset]) {
 					const uint16 charLeft = inc + curPos;
-					const uint16 charRight = charLeft + _font[charOffset + fontDataOffset];
+					const uint16 charRight = charLeft + _fonts[curChar]._data[fontDataOffset];
 					drawCharPixel(
 						y,
 						charLeft,
@@ -672,7 +677,7 @@ void GraphicsManager::drawChar(byte curChar, uint16 textColor, uint16 line, Comm
 				}
 			}
 
-			curPos += _font[charOffset + fontDataOffset];
+			curPos += _fonts[curChar]._data[fontDataOffset];
 			++fontDataOffset;
 
 			if (curColor == MASKCOL)
@@ -739,6 +744,37 @@ void GraphicsManager::hideCursor() {
 	CursorMan.showMouse(false);
 }
 
+void GraphicsManager::loadFont() {
+	Common::String fileName = "nlfont.fnt";
+	Common::SeekableReadStream *fontStream = _vm->_dataFile.createReadStreamForMember(fileName);
+	if (fontStream == nullptr)
+		error("readData(): File %s not found", fileName.c_str());
+
+	uint16 fontDataOffset = 768;
+
+	for (int i = 0; i < 256; ++i) {
+		uint16 offset = fontStream->readSint16LE();
+		_fonts[i]._width = fontStream->readByte();
+
+		int tmpPos = fontStream->pos();
+		fontStream->seek(offset + fontDataOffset);
+
+		int cpt = 0;
+		for (uint16 y = 0; y < CARHEI; ++y) {
+			uint16 curPos = 0;
+			while (curPos <= _fonts[i]._width - 1) {
+				curPos += fontStream->readByte();
+				++cpt;
+			}
+		}
+
+		fontStream->seek(offset + fontDataOffset);
+		_fonts[i]._data = new int8[cpt];
+		fontStream->read(_fonts[i]._data, cpt);
+		fontStream->seek(tmpPos);
+	}
+}
+
 bool GraphicsManager::isCursorVisible() {
 	return CursorMan.isVisible();
 }
diff --git a/engines/trecision/graphics.h b/engines/trecision/graphics.h
index e5ade43297..3137788ce1 100644
--- a/engines/trecision/graphics.h
+++ b/engines/trecision/graphics.h
@@ -35,6 +35,11 @@ class SeekableReadStream;
 namespace Trecision {
 class TrecisionEngine;
 
+struct Font {
+	int8 *_data;
+	uint16 _width;
+};
+
 class GraphicsManager {
 	TrecisionEngine *_vm;
 
@@ -49,7 +54,7 @@ class GraphicsManager {
 
 	Graphics::PixelFormat _screenFormat;
 	uint16 _bitMask[3];
-	uint8 *_font;
+	Font _fonts[256];
 
 	Common::List<Common::Rect> _dirtyRects;
 
@@ -100,8 +105,10 @@ public:
 	void showCursor();
 	void hideCursor();
 
+	void loadFont();
 	void loadData();
 	void showDemoPic();
+	
 };
 
 } // End of namespace Trecision




More information about the Scummvm-git-logs mailing list