mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-04 01:46:42 +00:00
VCRUISE: Add some more handling of unusual animations
This commit is contained in:
parent
fa2dfbcd7b
commit
b66044f2e7
@ -549,7 +549,7 @@ void AD2044MapLoader::unload() {
|
||||
|
||||
|
||||
ScriptEnvironmentVars::ScriptEnvironmentVars() : lmb(false), lmbDrag(false), esc(false), exitToMenu(false), animChangeSet(false), isEntryScript(false), puzzleWasSet(false),
|
||||
panInteractionID(0), fpsOverride(0), lastHighlightedItem(0), animChangeFrameOffset(0), animChangeNumFrames(0) {
|
||||
panInteractionID(0), clickInteractionID(0), fpsOverride(0), lastHighlightedItem(0), animChangeFrameOffset(0), animChangeNumFrames(0) {
|
||||
}
|
||||
|
||||
OSEvent::OSEvent() : type(kOSEventTypeInvalid), keyCode(static_cast<Common::KeyCode>(0)), keymappedEvent(kKeymappedEventNone), timestamp(0) {
|
||||
@ -4154,7 +4154,9 @@ bool Runtime::dischargeIdleMouseMove() {
|
||||
Common::SharedPtr<Script> script = findScriptForInteraction(interactionID);
|
||||
|
||||
if (script) {
|
||||
activateScript(script, false, ScriptEnvironmentVars());
|
||||
ScriptEnvironmentVars envVars;
|
||||
envVars.clickInteractionID = interactionID;
|
||||
activateScript(script, false, envVars);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -4186,6 +4188,7 @@ bool Runtime::dischargeIdleMouseDown() {
|
||||
if (script) {
|
||||
ScriptEnvironmentVars vars;
|
||||
vars.lmbDrag = true;
|
||||
vars.clickInteractionID = _idleInteractionID;
|
||||
|
||||
activateScript(script, false, vars);
|
||||
return true;
|
||||
@ -4233,6 +4236,7 @@ bool Runtime::dischargeIdleClick() {
|
||||
if (script) {
|
||||
ScriptEnvironmentVars vars;
|
||||
vars.lmb = true;
|
||||
vars.clickInteractionID = _idleInteractionID;
|
||||
|
||||
activateScript(script, false, vars);
|
||||
return true;
|
||||
|
@ -179,6 +179,7 @@ struct ScriptEnvironmentVars {
|
||||
ScriptEnvironmentVars();
|
||||
|
||||
uint panInteractionID;
|
||||
uint clickInteractionID;
|
||||
uint fpsOverride;
|
||||
uint lastHighlightedItem;
|
||||
uint animChangeFrameOffset;
|
||||
|
@ -34,6 +34,7 @@ struct AD2044UnusualAnimationRules {
|
||||
enum Type {
|
||||
kTypeLoop, // Loop the animation
|
||||
kTypePlayFirstFrameOnly,
|
||||
kTypeSkip,
|
||||
};
|
||||
|
||||
uint roomNumber;
|
||||
@ -44,7 +45,10 @@ struct AD2044UnusualAnimationRules {
|
||||
};
|
||||
|
||||
AD2044UnusualAnimationRules g_unusualAnimationRules[] = {
|
||||
{87, 0x69, 0xa3, 0xa5, AD2044UnusualAnimationRules::kTypePlayFirstFrameOnly},
|
||||
// Room, screen, interaction, animation lookup ID, rule
|
||||
{87, 0x24, 0xa4, 0xa7, AD2044UnusualAnimationRules::kTypePlayFirstFrameOnly}, // Taking cigarette, don't play box spin
|
||||
{87, 0x68, 0xa3, 0xa5, AD2044UnusualAnimationRules::kTypeLoop}, // Loop lit cigarette animation
|
||||
{87, 0x69, 0xa3, 0xa5, AD2044UnusualAnimationRules::kTypeSkip}, // Taking lit cigarette, don't play cycling animation
|
||||
};
|
||||
|
||||
#ifdef PEEK_STACK
|
||||
@ -2120,6 +2124,19 @@ void Runtime::scriptOpAnimAD2044(bool isForward) {
|
||||
animDef.firstFrame = animRangeIt->_value.firstFrame;
|
||||
animDef.lastFrame = animRangeIt->_value.lastFrame;
|
||||
|
||||
for (const AD2044UnusualAnimationRules &unusualAnimRule : g_unusualAnimationRules) {
|
||||
if (static_cast<StackInt_t>(unusualAnimRule.animLookupID) == stackArgs[0] && unusualAnimRule.interactionID == _scriptEnv.clickInteractionID && unusualAnimRule.roomNumber == _roomNumber && unusualAnimRule.screenNumber == _screenNumber) {
|
||||
switch (unusualAnimRule.ruleType) {
|
||||
case AD2044UnusualAnimationRules::kTypePlayFirstFrameOnly:
|
||||
animDef.lastFrame = animDef.firstFrame;
|
||||
break;
|
||||
default:
|
||||
error("Unknown unusual animation rule");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
changeAnimation(animDef, animDef.firstFrame, true, _animSpeedDefault);
|
||||
|
||||
_gameState = kGameStateWaitingForAnimation;
|
||||
|
Loading…
x
Reference in New Issue
Block a user