[Scummvm-git-logs] scummvm master -> ffd67acce80c1cc312e9e8105fcc85bf00a9f016
yuv422
yuv422 at users.noreply.github.com
Tue Aug 25 08:18:24 UTC 2020
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:
bc85ff1868 ILLUSIONS: Fix wide text handling logic for big endian systems. (#11236)
ffd67acce8 ILLUSIONS: code formatting
Commit: bc85ff1868f13e119b1bb1659f71b9a2fa64bc2d
https://github.com/scummvm/scummvm/commit/bc85ff1868f13e119b1bb1659f71b9a2fa64bc2d
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-25T18:18:20+10:00
Commit Message:
ILLUSIONS: Fix wide text handling logic for big endian systems. (#11236)
Changed paths:
engines/illusions/illusions.cpp
engines/illusions/illusions.h
engines/illusions/resources/scriptresource.cpp
engines/illusions/resources/scriptresource.h
engines/illusions/resources/talkresource.cpp
engines/illusions/resources/talkresource.h
engines/illusions/threads/talkthread.cpp
engines/illusions/threads/talkthread.h
engines/illusions/threads/talkthread_duckman.cpp
engines/illusions/threads/talkthread_duckman.h
diff --git a/engines/illusions/illusions.cpp b/engines/illusions/illusions.cpp
index cb89fe0fa4..413316ab06 100644
--- a/engines/illusions/illusions.cpp
+++ b/engines/illusions/illusions.cpp
@@ -61,19 +61,27 @@
namespace Illusions {
-char *debugW2I(byte *wstr) {
+char *debugW2I(uint16 *wstr) {
static char buf[65];
char *p = buf;
uint i = 0;
while (*wstr != 0 && i < sizeof(buf) - 1) {
- *p++ = *wstr;
- wstr += 2;
+ *p++ = (byte)*wstr;
+ wstr++;
i++;
}
*p = 0;
return buf;
}
+void swapBytesInWideString(byte * wstr) {
+#if defined(SCUMM_BIG_ENDIAN)
+ for (byte *ptr = wstr; *ptr != 0; ptr += 2) {
+ WRITE_UINT16(ptr, SWAP_BYTES_16(READ_UINT16(ptr)));
+ }
+#endif
+}
+
IllusionsEngine::IllusionsEngine(OSystem *syst, const IllusionsGameDescription *gd) :
Engine(syst), _gameDescription(gd) {
diff --git a/engines/illusions/illusions.h b/engines/illusions/illusions.h
index 83a3fcfab4..8d0a238c0c 100644
--- a/engines/illusions/illusions.h
+++ b/engines/illusions/illusions.h
@@ -39,7 +39,8 @@
namespace Illusions {
-char *debugW2I(byte *wstr);
+char *debugW2I(uint16 *wstr);
+void swapBytesInWideString(byte * wstr);
#define ILLUSIONS_SAVEGAME_VERSION 0
diff --git a/engines/illusions/resources/scriptresource.cpp b/engines/illusions/resources/scriptresource.cpp
index 760273c669..49bacff679 100644
--- a/engines/illusions/resources/scriptresource.cpp
+++ b/engines/illusions/resources/scriptresource.cpp
@@ -225,7 +225,8 @@ SceneInfo::~SceneInfo() {
void SceneInfo::load(byte *dataStart, Common::SeekableReadStream &stream) {
_id = stream.readUint16LE();
_unk = stream.readUint16LE();
- _name = dataStart + stream.pos();
+ _name = (uint16 *)(dataStart + stream.pos());
+ swapBytesInWideString((byte *)_name);
stream.skip(128);
_triggerObjectsCount = stream.readUint16LE();
_resourcesCount = stream.readUint16LE();
diff --git a/engines/illusions/resources/scriptresource.h b/engines/illusions/resources/scriptresource.h
index 6f777fa216..811ca42ee9 100644
--- a/engines/illusions/resources/scriptresource.h
+++ b/engines/illusions/resources/scriptresource.h
@@ -104,7 +104,7 @@ public:
protected:
uint16 _id;
uint16 _unk;
- byte *_name;
+ uint16 *_name;
uint _triggerObjectsCount;
TriggerObject *_triggerObjects;
uint _resourcesCount;
diff --git a/engines/illusions/resources/talkresource.cpp b/engines/illusions/resources/talkresource.cpp
index 4b2f67897d..83ff98a9a7 100644
--- a/engines/illusions/resources/talkresource.cpp
+++ b/engines/illusions/resources/talkresource.cpp
@@ -45,11 +45,18 @@ void TalkEntry::load(byte *dataStart, Common::SeekableReadStream &stream) {
uint32 textOffs = stream.readUint32LE();
uint32 tblOffs = stream.readUint32LE();
uint32 voiceNameOffs = stream.readUint32LE();
- _text = dataStart + textOffs;
+ _text = (uint16 *)(dataStart + textOffs);
_tblPtr = dataStart + tblOffs;
_voiceName = dataStart + voiceNameOffs;
debug(0, "TalkEntry::load() _talkId: %08X; textOffs: %08X; tblOffs: %08X; voiceNameOffs: %08X",
_talkId, textOffs, tblOffs, voiceNameOffs);
+
+#if defined(SCUMM_BIG_ENDIAN)
+ for (byte *ptr = (byte *)_text; ptr != _tblPtr; ptr += 2) {
+ WRITE_UINT16(ptr, SWAP_BYTES_16(READ_UINT16(ptr)));
+ }
+#endif
+
}
// TalkResource
diff --git a/engines/illusions/resources/talkresource.h b/engines/illusions/resources/talkresource.h
index 53e85b7b20..7181abb993 100644
--- a/engines/illusions/resources/talkresource.h
+++ b/engines/illusions/resources/talkresource.h
@@ -43,7 +43,7 @@ protected:
struct TalkEntry {
uint32 _talkId;
//field_4 dd
- byte *_text;
+ uint16 *_text;
byte *_tblPtr;
byte *_voiceName;
void load(byte *dataStart, Common::SeekableReadStream &stream);
diff --git a/engines/illusions/threads/talkthread.cpp b/engines/illusions/threads/talkthread.cpp
index e2ddde537c..f89c80d4a2 100644
--- a/engines/illusions/threads/talkthread.cpp
+++ b/engines/illusions/threads/talkthread.cpp
@@ -399,9 +399,9 @@ int TalkThread::insertText() {
WidthHeight dimensions;
_vm->getDefaultTextDimensions(dimensions);
uint16 *outTextPtr;
- _vm->_screenText->insertText((uint16*)_currEntryText, 0x120001, dimensions,
+ _vm->_screenText->insertText(_currEntryText, 0x120001, dimensions,
Common::Point(0, 0), TEXT_FLAG_CENTER_ALIGN, 0, 0, 0, 0, 0, outTextPtr);
- _entryText = (byte*)outTextPtr;
+ _entryText = outTextPtr;
Common::Point pt;
_vm->getDefaultTextPosition(pt);
_vm->_screenText->updateTextInfoPosition(pt);
diff --git a/engines/illusions/threads/talkthread.h b/engines/illusions/threads/talkthread.h
index 09945ebf0b..b6ee52e470 100644
--- a/engines/illusions/threads/talkthread.h
+++ b/engines/illusions/threads/talkthread.h
@@ -64,8 +64,8 @@ public:
uint32 _sequenceId1;
uint32 _sequenceId2;
byte *_entryTblPtr;
- byte *_entryText;
- byte *_currEntryText;
+ uint16 *_entryText;
+ uint16 *_currEntryText;
//field30 dd
uint32 _namedPointId;
uint32 _voiceStartTime;
diff --git a/engines/illusions/threads/talkthread_duckman.cpp b/engines/illusions/threads/talkthread_duckman.cpp
index 752f06f7a0..19b40a757e 100644
--- a/engines/illusions/threads/talkthread_duckman.cpp
+++ b/engines/illusions/threads/talkthread_duckman.cpp
@@ -301,9 +301,9 @@ int TalkThread_Duckman::insertText() {
WidthHeight dimensions;
_vm->getDefaultTextDimensions(dimensions);
uint16 *outTextPtr;
- _vm->_screenText->insertText((uint16*)_currEntryText, 0x120001, dimensions,
+ _vm->_screenText->insertText(_currEntryText, 0x120001, dimensions,
Common::Point(0, 0), TEXT_FLAG_CENTER_ALIGN, 0, 0, _color.r, _color.g, _color.b, outTextPtr);
- _entryText = (byte*)outTextPtr;
+ _entryText = outTextPtr;
Common::Point pt;
_vm->getDefaultTextPosition(pt);
_vm->_screenText->updateTextInfoPosition(pt);
diff --git a/engines/illusions/threads/talkthread_duckman.h b/engines/illusions/threads/talkthread_duckman.h
index ac9e20d187..f42b17346f 100644
--- a/engines/illusions/threads/talkthread_duckman.h
+++ b/engines/illusions/threads/talkthread_duckman.h
@@ -66,8 +66,8 @@ public:
uint32 _namedPointId1;
uint32 _namedPointId2;
byte *_entryTblPtr;
- byte *_entryText;
- byte *_currEntryText;
+ uint16 *_entryText;
+ uint16 *_currEntryText;
//field30 dd
uint32 _voiceStartTime;
uint32 _voiceEndTime;
Commit: ffd67acce80c1cc312e9e8105fcc85bf00a9f016
https://github.com/scummvm/scummvm/commit/ffd67acce80c1cc312e9e8105fcc85bf00a9f016
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-25T18:18:20+10:00
Commit Message:
ILLUSIONS: code formatting
Changed paths:
engines/illusions/illusions.cpp
diff --git a/engines/illusions/illusions.cpp b/engines/illusions/illusions.cpp
index 413316ab06..987d024a0b 100644
--- a/engines/illusions/illusions.cpp
+++ b/engines/illusions/illusions.cpp
@@ -74,7 +74,7 @@ char *debugW2I(uint16 *wstr) {
return buf;
}
-void swapBytesInWideString(byte * wstr) {
+void swapBytesInWideString(byte *wstr) {
#if defined(SCUMM_BIG_ENDIAN)
for (byte *ptr = wstr; *ptr != 0; ptr += 2) {
WRITE_UINT16(ptr, SWAP_BYTES_16(READ_UINT16(ptr)));
More information about the Scummvm-git-logs
mailing list