[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