[Scummvm-git-logs] scummvm master -> 3801d1369a49734bf20708fcf6c2d77e44499e7d

AndywinXp noreply at scummvm.org
Thu Jul 3 20:49:49 UTC 2025


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

Summary:
3801d1369a SCUMM: HE70/FBEAR: Workaround for rare actor erase glitch


Commit: 3801d1369a49734bf20708fcf6c2d77e44499e7d
    https://github.com/scummvm/scummvm/commit/3801d1369a49734bf20708fcf6c2d77e44499e7d
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-07-03T22:49:43+02:00

Commit Message:
SCUMM: HE70/FBEAR: Workaround for rare actor erase glitch

After spending some hours of research on this class of glitches I figured I would
have to rewrite the walk code to make it work correctly.

And given how different our code is compared to the orig. HE code... no thanks. :P
At least now we have no visible glitches for this one and only game/version using
the walk code.

Changed paths:
    engines/scumm/actor.cpp
    engines/scumm/actor.h


diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index cce39fa7463..3895cada77b 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -2733,7 +2733,7 @@ void Actor::startAnimActor(int f) {
 		}
 	}
 
-	assert(f != 0x3E);
+	assert(f != CHORE_FACE_DIR);
 
 	if (isInCurrentRoom() && _costume != 0) {
 		_animProgress = 0;
@@ -3102,6 +3102,20 @@ void ScummEngine::resetActorBgs() {
 }
 
 void ScummEngine_v70he::resetActorBgs() {
+	// FIXME: This function represent the exact behavior any HE70+ game should have.
+	//        This also needs the walk code to be in a certain way. The walk code is
+	//        basically used only on Fatty Bear, all other games ditched "normal" walking
+	//        in favour of special walking animations.
+	//
+	//        In order to have a walk without a couple of rare erase glitches in Fatty Bear,
+	//        we temporarily use the old function. That is, until I rewrite the walk code,
+	//        which could potentially never happen since it's used only for this game and this
+	//        exact version...
+	if (_game.id == GID_FBEAR && _game.heversion == 70) {
+		ScummEngine::resetActorBgs();
+		return;
+	}
+
 	for (int i = 0; i < _gdi->_numStrips; i++) {
 		int strip = _screenStartStrip + i;
 		clearGfxUsageBit(strip, USAGE_BIT_DIRTY);
diff --git a/engines/scumm/actor.h b/engines/scumm/actor.h
index 01c3e82c6b9..bf53cc0c4c7 100644
--- a/engines/scumm/actor.h
+++ b/engines/scumm/actor.h
@@ -34,6 +34,9 @@ namespace Scumm {
 #define CHORE_REDIRECT_STAND       58
 #define CHORE_REDIRECT_START_TALK  59
 #define CHORE_REDIRECT_STOP_TALK   60
+#define CHORE_TURN_DIR             61
+#define CHORE_FACE_DIR             62
+#define CHORE_STOP                 63
 
 enum {
 	V12_X_MULTIPLIER = 8,




More information about the Scummvm-git-logs mailing list