[Scummvm-git-logs] scummvm master -> 68ca79f1508a0baff87edb49f3f041c23c3c0de2

yuv422 yuv422 at users.noreply.github.com
Sun Aug 16 03:07:37 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:
9329b71dda DRAGONS: Fixed text dialog clearing
68ca79f150 DRAGONS: Fixed removal of backslash char when rendering dialog


Commit: 9329b71ddaf07801bb2a8ea5ea39170d548c2091
    https://github.com/scummvm/scummvm/commit/9329b71ddaf07801bb2a8ea5ea39170d548c2091
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-16T13:06:30+10:00

Commit Message:
DRAGONS: Fixed text dialog clearing

Changed paths:
    engines/dragons/talk.cpp


diff --git a/engines/dragons/talk.cpp b/engines/dragons/talk.cpp
index aba7ca2337..244b56bc96 100644
--- a/engines/dragons/talk.cpp
+++ b/engines/dragons/talk.cpp
@@ -86,7 +86,7 @@ void Talk::printWideText(byte *text) {
 		}
 		text += 2;
 	}
-	buf[MAX(i, 1999)] = 0;
+	buf[MIN(i, 1999)] = 0;
 	debug("TEXT: %s", buf);
 }
 
@@ -667,6 +667,8 @@ TalkDialogEntry *Talk::displayTalkDialogMenu(Common::Array<TalkDialogEntry*> dia
 
 	talkDialogEntry = nullptr;
 
+	_vm->_fontManager->clearText();
+
 	uVar8 = 0;
 	local_60 = 0;
 	local_58 = 0;
@@ -842,6 +844,7 @@ void Talk::exitTalkMenu(bool isFlag8Set, bool isFlag100Set, Common::Array<TalkDi
 		delete *it;
 	}
 	dialogEntries.clear();
+	_vm->_fontManager->clearText();
 }
 
 uint Talk::somethingTextAndSpeechAndAnimRelated(Actor *actor, int16 sequenceId1, int16 sequenceId2, uint32 textIndex,
@@ -1106,8 +1109,9 @@ void Talk::clearDialogEntries() {
 }
 
 void Talk::FUN_8001a7c4_clearDialogBoxMaybe() {
-	_vm->_fontManager->clearTextDialog((uint) _dat_8008e7e8_dialogBox_x1, (uint) _dat_8008e844_dialogBox_y1,
-					(uint) _dat_8008e848_dialogBox_x2, (uint) _dat_8008e874_dialogBox_y2);
+	_vm->_fontManager->clearText();
+//	_vm->_fontManager->clearTextDialog((uint) _dat_8008e7e8_dialogBox_x1, (uint) _dat_8008e844_dialogBox_y1,
+//					(uint) _dat_8008e848_dialogBox_x2, (uint) _dat_8008e874_dialogBox_y2);
 }
 
 void Talk::playDialogAudioDontWait(uint32 textIndex) {


Commit: 68ca79f1508a0baff87edb49f3f041c23c3c0de2
    https://github.com/scummvm/scummvm/commit/68ca79f1508a0baff87edb49f3f041c23c3c0de2
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-16T13:06:30+10:00

Commit Message:
DRAGONS: Fixed removal of backslash char when rendering dialog

Changed paths:
    engines/dragons/talk.cpp
    engines/dragons/talk.h


diff --git a/engines/dragons/talk.cpp b/engines/dragons/talk.cpp
index 244b56bc96..f57ae948ad 100644
--- a/engines/dragons/talk.cpp
+++ b/engines/dragons/talk.cpp
@@ -174,8 +174,10 @@ uint8 Talk::conversation_related_maybe(uint16 *dialogText, uint16 x, uint16 y, u
 	if (param_5 != 0) {
 		_vm->clearFlags(ENGINE_FLAG_8);
 	}
+
+	//Remove '\' chars from dialogText
 	tmpTextPtr = findCharInU16Str(dialogText, 0x5c);
-	if (tmpTextPtr != nullptr) {
+	while (tmpTextPtr != nullptr) {
 		sVar3 = tmpTextPtr[1];
 		*tmpTextPtr = sVar3;
 		while (sVar3 != 0) {
@@ -183,6 +185,7 @@ uint8 Talk::conversation_related_maybe(uint16 *dialogText, uint16 x, uint16 y, u
 			tmpTextPtr[1] = sVar3;
 			tmpTextPtr = tmpTextPtr + 1;
 		}
+		tmpTextPtr = findCharInU16Str(dialogText, 0x5c);
 	}
 	iVar5 = (uint)x << 0x10;
 	if ((short)x < 0xf) {
@@ -686,8 +689,8 @@ TalkDialogEntry *Talk::displayTalkDialogMenu(Common::Array<TalkDialogEntry*> dia
 				if (*local_386 == 0x20) {
 					_dat_80083104 = &local_386[1];
 				}
-				uVar3 = FindLastPositionOf5cChar(_dat_80083104);
-				sVar2 = FUN_80031c28(_dat_80083104, asStack512, uVar3 & 0xffff, 0x20);
+				uVar3 = findLastPositionOf5cChar(_dat_80083104);
+				sVar2 = truncateDialogText(_dat_80083104, asStack512, uVar3 & 0xffff, 0x20);
 				talkDialogEntry->xPosMaybe = (uint8)local_58;
 				local_58 = local_58 + sVar2;
 				talkDialogEntry->yPosMaybe = talkDialogEntry->yPosMaybe + (char)sVar2;
@@ -776,8 +779,8 @@ TalkDialogEntry *Talk::displayTalkDialogMenu(Common::Array<TalkDialogEntry*> dia
 					if (local_386[0] == 0x20) {
 						_dat_80083104 = &local_386[1];
 					}
-					uVar4 = FindLastPositionOf5cChar(_dat_80083104);
-					uVar4 = FUN_80031c28(_dat_80083104, local_40, uVar4 & 0xffff, 0x20);
+					uVar4 = findLastPositionOf5cChar(_dat_80083104);
+					uVar4 = truncateDialogText(_dat_80083104, local_40, uVar4 & 0xffff, 0x20);
 					_dat_80083104 = local_40;
 					if (sVar2 == uVar8) {
 						uVar7 = 0;
@@ -1039,7 +1042,7 @@ uint16 *Talk::UTF16ToUTF16Z(uint16 *dest, uint16 *src) {
 	return dest;
 }
 
-uint16 Talk::FindLastPositionOf5cChar(uint16 *text) {
+uint16 Talk::findLastPositionOf5cChar(uint16 *text) {
 	uint16 len = strlenUTF16(text);
 	for (int i = len - 1; i >= 0; i--) {
 		if (text[i] == 0x5c) {
@@ -1049,7 +1052,7 @@ uint16 Talk::FindLastPositionOf5cChar(uint16 *text) {
 	return len;
 }
 
-uint32 Talk::FUN_80031c28(uint16 *srcText, uint16 *destText, uint32 cutLength, uint16 param_4) {
+uint32 Talk::truncateDialogText(uint16 *srcText, uint16 *destText, uint32 srcLength, uint16 destLength) {
 	uint16 destCurIndex;
 	uint16 uVar1;
 	uint16 uVar2;
@@ -1066,38 +1069,39 @@ uint32 Talk::FUN_80031c28(uint16 *srcText, uint16 *destText, uint32 cutLength, u
 	destCurIndex = 0;
 	uVar4 = 1;
 	do {
-		if ((cutLength & 0xffff) <= (srcCurIndex & 0xffff)) break;
-		chr = srcText[srcCurIndex & 0xffff];
-		destText[(uint)destCurIndex] = chr;
+		if (srcLength <= srcCurIndex) break;
+		chr = srcText[srcCurIndex];
+		destText[destCurIndex] = chr;
 		uVar2 = uVar2 + 1;
 		if ((chr == 0x5c) || (chr == 0)) {
 			finished = true;
 			uVar1 = destCurIndex;
-			if ((srcText + (srcCurIndex & 0xffff))[1] == 0x5c) {
+			if (srcText[srcCurIndex + 1] == 0x5c) {
 				uVar1 = destCurIndex + 3;
-				destText[(uint)destCurIndex] = 0x2e;
-				destText[(uint)(uint16)(destCurIndex + 1)] = 0x2e;
-				destText[(uint)(uint16)(destCurIndex + 2)] = 0x2e;
+				destText[destCurIndex] = 0x2e;
+				destText[destCurIndex + 1] = 0x2e;
+				destText[destCurIndex + 2] = 0x2e;
 			}
 			destCurIndex = uVar1 - 1;
 			uVar1 = uVar3;
-			LAB_80031d3c:
 			uVar3 = uVar1;
 		} else {
 			if (((((chr != 0x20) && (chr != 0x2e)) && (chr != 0x3f)) &&
 				 ((chr != 0x21 && (uVar1 = uVar3, chr != 0x2d)))) ||
-				((uVar1 = uVar3, srcText[(srcCurIndex & 0xffff) + 1] == 0 ||
-								 (uVar1 = destCurIndex, srcText[(srcCurIndex & 0xffff) + 1] != 0x5c)))) goto LAB_80031d3c;
+				((uVar1 = uVar3, srcText[srcCurIndex + 1] == 0 ||
+								 (uVar1 = destCurIndex, srcText[srcCurIndex + 1] != 0x5c)))) {
+				uVar3 = uVar1;
+			}
 		}
 		srcCurIndex = srcCurIndex + 1;
-		if ((param_4 < uVar2) && (!finished)) {
+		if ((destLength < uVar2) && (!finished)) {
 			destText[uVar3] = 0;
 			uVar2 = destCurIndex - uVar3;
 			uVar4 = uVar4 + 1;
 		}
 		destCurIndex = destCurIndex + 1;
 	} while (!finished);
-	destText[(uint)destCurIndex] = 0;
+	destText[destCurIndex] = 0;
 	return uVar4 & 0xffff;
 }
 
diff --git a/engines/dragons/talk.h b/engines/dragons/talk.h
index aa985fd06a..ce464d70e4 100644
--- a/engines/dragons/talk.h
+++ b/engines/dragons/talk.h
@@ -103,8 +103,8 @@ private:
 	uint16 *findCharInU16Str(uint16 *text, uint16 chr);
 	void drawDialogBox(uint32 x1, uint32 y1, uint32 x2, uint32 y2, uint16 unk);
 	uint16 *UTF16ToUTF16Z(uint16 *dest, uint16 *src);
-	uint16 FindLastPositionOf5cChar(uint16 *text);
-	uint32 FUN_80031c28(uint16 *srcText, uint16 *destText, uint32 cutLength, uint16 param_4);
+	uint16 findLastPositionOf5cChar(uint16 *text);
+	uint32 truncateDialogText(uint16 *srcText, uint16 *destText, uint32 srcLength, uint16 destLength);
 
 	uint32 extractTextIndex(Common::File *fd, uint16 offset);
 };




More information about the Scummvm-git-logs mailing list