[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