[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