[Scummvm-git-logs] scummvm master -> 16955a15f16a10fddef1391cfe23bb292000af21

sev- noreply at scummvm.org
Tue Aug 2 20:17:52 UTC 2022


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

Summary:
16955a15f1 SCUMM: FREDDI4: workaround lipsync issues in final scene


Commit: 16955a15f16a10fddef1391cfe23bb292000af21
    https://github.com/scummvm/scummvm/commit/16955a15f16a10fddef1391cfe23bb292000af21
Author: BLooperZ (blooperz at users.noreply.github.com)
Date: 2022-08-02T22:17:49+02:00

Commit Message:
SCUMM: FREDDI4: workaround lipsync issues in final scene

Changed paths:
    engines/scumm/akos.cpp
    engines/scumm/he/script_v72he.cpp


diff --git a/engines/scumm/akos.cpp b/engines/scumm/akos.cpp
index 87b8bb82085..81a171ee89b 100644
--- a/engines/scumm/akos.cpp
+++ b/engines/scumm/akos.cpp
@@ -1463,6 +1463,13 @@ bool ScummEngine_v6::akos_increaseAnim(Actor *a, int chan, const byte *aksq, con
 			case AKC_C0A0:
 			case AKC_C0A1:
 			case AKC_C0A2:
+				// WORKAROUND bug #3533 luther does not moves his lips on subsequent sentences (only the first one).
+				// we skip the opcode instruction until all lines are said.
+				if (_game.id == GID_FREDDI4 && _currentRoom == 43 && a->_costume == 809 && code == AKC_C0A1 && a->getAnimVar(23) > 0) {
+					a->setAnimVar(23, a->getAnimVar(23) - 1);
+					((ActorHE *)a)->_heTalking = true;
+					break;
+				}
 				curpos += 4;
 				break;
 			case AKC_ComplexChan2:
@@ -1528,6 +1535,15 @@ bool ScummEngine_v6::akos_increaseAnim(Actor *a, int chan, const byte *aksq, con
 		case AKC_JumpL:
 		case AKC_JumpNE:
 		case AKC_JumpE:
+			// WORKAROUND bug #3533 when freddi talks in multiple sentences, she moves her lips on the first sequence.
+			// then luther moves his lips on the second and the rest are disembodied.
+			// we force the comparison (loop to start of freddi's lips) until all lines are said.
+			if (_game.id == GID_FREDDI4 && _currentRoom == 43 && a->_costume == 809 && a->getAnimVar(25) > 0) {
+				a->setAnimVar(25, a->getAnimVar(25) - 1);
+				curpos = GUW(2);
+				break;
+			}
+
 			if (akos_compare(a->getAnimVar(GB(4)), GW(5), code - AKC_JumpStart) != 0) {
 				curpos = GUW(2);
 				break;
diff --git a/engines/scumm/he/script_v72he.cpp b/engines/scumm/he/script_v72he.cpp
index b12acea0205..4cfaa11893e 100644
--- a/engines/scumm/he/script_v72he.cpp
+++ b/engines/scumm/he/script_v72he.cpp
@@ -793,6 +793,12 @@ void ScummEngine_v72he::o72_actorOps() {
 		k = getStackList(args, ARRAYSIZE(args));
 		for (i = 0; i < k; ++i) {
 			a->setUserCondition(args[i] & 0x7F, args[i] & 0x80);
+			// WORKAROUND bug #3533 luther does not moves his lips on subsequent sentences (only the first one).
+			// we skip the opcode instruction until all lines are said.
+			// The animation var is set to the number of lines minus 1.
+			if (_game.id == GID_FREDDI4 && _game.heversion == 98 && _currentRoom == 43 && args[i] == 130  && vm.slot[_currentScript].offs != 84203) {
+				a->setAnimVar(23, vm.slot[_currentScript].offs == 79584 ? 2 : 1);
+			}
 		}
 		break;
 	case 24: 		// SO_TALK_CONDITION (HE 80+)
@@ -831,6 +837,13 @@ void ScummEngine_v72he::o72_actorOps() {
 		break;
 	case 76:		// SO_COSTUME
 		a->setActorCostume(pop());
+		// WORKAROUND bug #3533 when freddi talks in multiple sentences, she moves her lips on the first sequence.
+		// then luther moves his lips on the second and the rest are disembodied.
+		// we force the comparison (loop to start of freddi's lips) until all lines are said.
+		// The animation var is set to the number of lines minus 1.
+		if (_game.id == GID_FREDDI4 && _currentRoom == 43 && a->_costume == 809) {
+			a->setAnimVar(25, vm.slot[_currentScript].offs == 105213 ? 3 : 1);
+		}
 		break;
 	case 77:		// SO_STEP_DIST
 		j = pop();




More information about the Scummvm-git-logs mailing list