[Scummvm-git-logs] scummvm master -> e5c9d10b13c6e2f128c7837cbbadedacd4754294

antoniou79 a.antoniou79 at gmail.com
Thu Dec 10 15:42:13 UTC 2020


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:
e5c9d10b13 BLADERUNNER: Describe Crazylegs animations


Commit: e5c9d10b13c6e2f128c7837cbbadedacd4754294
    https://github.com/scummvm/scummvm/commit/e5c9d10b13c6e2f128c7837cbbadedacd4754294
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2020-12-10T17:41:10+02:00

Commit Message:
BLADERUNNER: Describe Crazylegs animations

Also check usage and note some possible bugs for Crazylegs animation states

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/baker.cpp
    engines/bladerunner/script/ai/crazylegs.cpp


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index b12f25fac8..c7c8e74b89 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -1993,8 +1993,27 @@ enum GameModelAnimations {
 	kModelAnimationFemaleTargetWithBabyDead      = 448, // 447+1
 	kModelAnimationFemaleTargetWithGunActive     = 449,
 	kModelAnimationFemaleTargetWithGunDead       = 450, // 449+1
-	//       451: T-Pose Security Guard (unused?)
+	//       451: Baker animations (probably for debug purposes or leftover from a removed character)
+	kModelAnimationBakerTpose                    = 451, // This is a security guard T-pose (1 frame) model
 	// 452 - 469: CrazyLegs animations
+	kModelAnimationCrazylegsRollSlow             = 452,
+	kModelAnimationCrazylegsRollFast             = 453, // untriggered
+	kModelAnimationCrazylegsIdle                 = 454,
+	kModelAnimationCrazylegsHandsUpIdle          = 455, // Is this triggered for Crazylegs?
+	kModelAnimationCrazylegsMobileIdle           = 456, // Is this triggered for Crazylegs?
+	kModelAnimationCrazylegsGestureGive          = 457, // animationMode 23. Is this triggered for Crazylegs?
+	kModelAnimationCrazylegsCalmTalk             = 458,
+	kModelAnimationCrazylegsSmallHandMoveTalk    = 459,
+	kModelAnimationCrazylegsPointingAtSelfTalk   = 460,
+	kModelAnimationCrazylegsDisagreeTalk         = 461,
+	kModelAnimationCrazylegsFastTalk             = 462,
+	kModelAnimationCrazylegsProtestTalk          = 463,
+	kModelAnimationCrazylegsMobileCalmTalk       = 464, // last frame (11) seems bugged (hand snaps to bit lower and without mobile)
+	kModelAnimationCrazylegsMobileIntenseTalk    = 465,
+	kModelAnimationCrazylegsHandsUpTalk          = 466,
+	kModelAnimationCrazylegsHandsUpRaisesHands   = 467, // untriggered
+	kModelAnimationCrazylegsHandsUpLowersHands   = 468,
+	kModelAnimationCrazylegsHangsUpMobile        = 469,
 	// 470 - 486: Grigorian animations
 	// 487 - 505: Transient/Homeless animations
 	// 506 - 525: Bullet Bob animations
diff --git a/engines/bladerunner/script/ai/baker.cpp b/engines/bladerunner/script/ai/baker.cpp
index 3edbe5262c..db037bc39b 100644
--- a/engines/bladerunner/script/ai/baker.cpp
+++ b/engines/bladerunner/script/ai/baker.cpp
@@ -91,7 +91,7 @@ bool AIScriptBaker::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 }
 
 bool AIScriptBaker::UpdateAnimation(int *animation, int *frame) {
-	*animation = 451;
+	*animation = kModelAnimationBakerTpose;
 	*frame = 0;
 
 	return true;
diff --git a/engines/bladerunner/script/ai/crazylegs.cpp b/engines/bladerunner/script/ai/crazylegs.cpp
index 3c88648820..ae34a37eeb 100644
--- a/engines/bladerunner/script/ai/crazylegs.cpp
+++ b/engines/bladerunner/script/ai/crazylegs.cpp
@@ -24,14 +24,22 @@
 
 namespace BladeRunner {
 
+
+enum kCrazylegsStates {
+	kCrazylegsStateIdle       = 0,
+	kCrazylegsStateHandsUp    = 1,
+	kCrazylegsStateMobileCall = 2
+	// TODO fill in the rest of the animationStates
+};
+
 AIScriptCrazylegs::AIScriptCrazylegs(BladeRunnerEngine *vm) : AIScriptBase(vm) {
 	_resumeIdleAfterFramesetCompletesFlag = false;
 }
 
 void AIScriptCrazylegs::Initialize() {
 	_animationFrame = 0;
-	_animationState = 0;
-	_animationStateNext = 0;
+	_animationState = kCrazylegsStateIdle;
+	_animationStateNext = kCrazylegsStateIdle;
 	_animationNext = 0;
 
 	_resumeIdleAfterFramesetCompletesFlag = false;
@@ -140,195 +148,205 @@ bool AIScriptCrazylegs::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 bool AIScriptCrazylegs::UpdateAnimation(int *animation, int *frame) {
 	switch (_animationState) {
-	case 0:
-		*animation = 454;
+	case kCrazylegsStateIdle:
+		*animation = kModelAnimationCrazylegsIdle;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(454))
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsIdle))
 			_animationFrame = 0;
 		break;
 
-	case 1:
-		*animation = 455;
+	case kCrazylegsStateHandsUp:
+		*animation = kModelAnimationCrazylegsHandsUpIdle;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(455))
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsHandsUpIdle))
 			_animationFrame = 0;
 		break;
 
-	case 2:
-		*animation = 456;
+	case kCrazylegsStateMobileCall:
+		*animation = kModelAnimationCrazylegsMobileIdle;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(456))
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsMobileIdle))
 			_animationFrame = 0;
 		break;
 
 	case 3:
-		*animation = 457;
+		*animation = kModelAnimationCrazylegsGestureGive;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(457)) {
-			*animation = 454;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsGestureGive)) {
+			*animation = kModelAnimationCrazylegsIdle;
 			_animationFrame = 0;
-			_animationState = 0;
+			_animationState = kCrazylegsStateIdle;
 		}
 		break;
 
 	case 4:
-		*animation = 452;
+		*animation = kModelAnimationCrazylegsRollSlow;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(452))
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsRollSlow))
 			_animationFrame = 0;
 		break;
 
 	case 5:
-		*animation = 453;
+		*animation = kModelAnimationCrazylegsRollFast;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(453))
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsRollFast))
 			_animationFrame = 0;
 		break;
 
 	case 6:
 		if (_animationFrame == 0 && _resumeIdleAfterFramesetCompletesFlag) {
-			*animation = 454;
-			_animationState = 0;
+			*animation = kModelAnimationCrazylegsIdle;
+			_animationState = kCrazylegsStateIdle;
 			_resumeIdleAfterFramesetCompletesFlag = false;
 		} else {
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 			++_animationFrame;
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(458))
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsCalmTalk))
 				_animationFrame = 0;
 		}
 		break;
 
 	case 7:
-		*animation = 459;
+		*animation = kModelAnimationCrazylegsSmallHandMoveTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(459)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsSmallHandMoveTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 8:
-		*animation = 460;
+		*animation = kModelAnimationCrazylegsPointingAtSelfTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(460)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsPointingAtSelfTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 9:
-		*animation = 461;
+		*animation = kModelAnimationCrazylegsDisagreeTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(461)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsDisagreeTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 10:
-		*animation = 462;
+		*animation = kModelAnimationCrazylegsFastTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(462)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsFastTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 11:
-		*animation = 463;
+		*animation = kModelAnimationCrazylegsProtestTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(463)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsProtestTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 12:
-		*animation = 464;
+		*animation = kModelAnimationCrazylegsMobileCalmTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(464)) {
+		// This is probably an untriggered animation
+		// TODO This animation has a faulty last frame which "breaks" its looping consistency
+		// TODO It should not lead to kModelAnimationCrazylegsCalmTalk but to one of Crazylegs mobile animations
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsMobileCalmTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 13:
-		*animation = 465;
+		*animation = kModelAnimationCrazylegsMobileIntenseTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(465)) {
+		// This is probably an untriggered animation
+		// TODO It should not lead to kModelAnimationCrazylegsCalmTalk but to one of Crazylegs mobile animations
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsMobileIntenseTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 14:
-		*animation = 466;
+		*animation = kModelAnimationCrazylegsHandsUpTalk;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(466)) {
+		// This is probably an untriggered animation
+		// TODO It should not lead to kModelAnimationCrazylegsCalmTalk but to one of Crazylegs hands-up animations
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsHandsUpTalk)) {
 			_animationFrame = 0;
 			_animationState = 6;
-			*animation = 458;
+			*animation = kModelAnimationCrazylegsCalmTalk;
 		}
 		break;
 
 	case 15:
 		if (_animationFrame == 0 && _resumeIdleAfterFramesetCompletesFlag) {
 			Actor_Change_Animation_Mode(kActorCrazylegs, 43);
-			_animationState = 2;
+			_animationState = kCrazylegsStateMobileCall;
 			_resumeIdleAfterFramesetCompletesFlag = false;
-			*animation = 456;
+			*animation = kModelAnimationCrazylegsMobileIdle;
 		} else {
-			*animation = 456;
+			*animation = kModelAnimationCrazylegsMobileIdle;
 			++_animationFrame;
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(456))
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsMobileIdle))
 				_animationFrame = 0;
 		}
 		break;
 
 	case 16:
-		*animation = 467;
+		*animation = kModelAnimationCrazylegsHandsUpRaisesHands;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(467)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsHandsUpRaisesHands)) {
 			_animationFrame = 0;
-			_animationState = 1;
-			*animation = 455;
+			_animationState = kCrazylegsStateHandsUp;
+			*animation = kModelAnimationCrazylegsHandsUpIdle;
 		}
 		break;
 
 	case 17:
-		*animation = 468;
+		*animation = kModelAnimationCrazylegsHandsUpLowersHands;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(468)) {
-			*animation = 454;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsHandsUpLowersHands)) {
+			*animation = kModelAnimationCrazylegsIdle;
 			_animationFrame = 0;
-			_animationState = 0;
+			_animationState = kCrazylegsStateIdle;
 		}
 		break;
 
 	case 18:
-		*animation = 469;
+		// This animation plays in reverse
+		// TODO Code seems wrong (especially the if clause condition).
+		//      Probably left like this because the animation is untriggered
+		*animation = kModelAnimationCrazylegsHangsUpMobile;
 		--_animationFrame;
-		if (_animationFrame <= Slice_Animation_Query_Number_Of_Frames(469)) { // matches original
+		if (_animationFrame <= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsHangsUpMobile)) { // matches original
 			_animationFrame = 0;
-			_animationState = 2;
-			*animation = 454;
+			_animationState = kCrazylegsStateMobileCall;
+			*animation = kModelAnimationCrazylegsIdle;
 		}
 		break;
 
 	case 19:
-		*animation = 469;
+		*animation = kModelAnimationCrazylegsHangsUpMobile;
 		++_animationFrame;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(469)) {
-			*animation = 454;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsHangsUpMobile)) {
+			*animation = kModelAnimationCrazylegsIdle;
 			_animationFrame = 0;
-			_animationState = 0;
+			_animationState = kCrazylegsStateIdle;
 			if (Actor_Query_Goal_Number(kActorCrazylegs) == 10) {
 				Actor_Set_Goal_Number(kActorCrazylegs, 11);
 			}
@@ -345,33 +363,44 @@ bool AIScriptCrazylegs::UpdateAnimation(int *animation, int *frame) {
 
 bool AIScriptCrazylegs::ChangeAnimationMode(int mode) {
 	switch (mode) {
-	case 0:
+	case kAnimationModeIdle:
 		switch (_animationState) {
-		case 0:
+		case kCrazylegsStateIdle:
+			// fall through
 		case 3:
 			return true;
-		case 1:
+		case kCrazylegsStateHandsUp:
 			_animationState = 17;
 			_animationFrame = 0;
 			break;
-		case 2:
+		case kCrazylegsStateMobileCall:
 			_animationState = 19;
 			_animationFrame = 0;
 			break;
 		case 4:
+			// fall through
 		case 5:
-			_animationState = 0;
+			_animationState = kCrazylegsStateIdle;
 			_animationFrame = 0;
 			break;
 		case 6:
+			// fall through
 		case 7:
+			// fall through
 		case 8:
+			// fall through
 		case 9:
+			// fall through
 		case 10:
+			// fall through
 		case 11:
+			// fall through
 		case 12:
+			// fall through
 		case 13:
+			// fall through
 		case 14:
+			// fall through
 		case 15:
 			_resumeIdleAfterFramesetCompletesFlag = true;
 			break;
@@ -379,12 +408,12 @@ bool AIScriptCrazylegs::ChangeAnimationMode(int mode) {
 			break;
 		}
 		break;
-	case 1:
+	case kAnimationModeWalk:
 		_animationState = 4;
 		_animationFrame = 0;
 		break;
-	case 3:
-		if (_animationState == 2) {
+	case kAnimationModeTalk:
+		if (_animationState == kCrazylegsStateMobileCall) {
 			_animationState = 15;
 		} else {
 			_animationState = 6;
@@ -437,9 +466,10 @@ bool AIScriptCrazylegs::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 	case 43:
-		if (_animationState != 2) {
+		// picks up mobile phone call
+		if (_animationState != kCrazylegsStateMobileCall) {
 			_animationState = 18;
-			_animationFrame = Slice_Animation_Query_Number_Of_Frames(469) - 1;
+			_animationFrame = Slice_Animation_Query_Number_Of_Frames(kModelAnimationCrazylegsHangsUpMobile) - 1;
 		}
 		break;
 	default:




More information about the Scummvm-git-logs mailing list