[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