[Scummvm-git-logs] scummvm master -> dc97c350d2fd4a76599cca91b070f3917af118fa
bluegr
bluegr at gmail.com
Sat Jul 3 10:24:13 UTC 2021
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:
dc97c350d2 TRECISION: Simplify the code handling animation subareas
Commit: dc97c350d2fd4a76599cca91b070f3917af118fa
https://github.com/scummvm/scummvm/commit/dc97c350d2fd4a76599cca91b070f3917af118fa
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-07-03T13:23:49+03:00
Commit Message:
TRECISION: Simplify the code handling animation subareas
Changed paths:
engines/trecision/anim.cpp
engines/trecision/defines.h
engines/trecision/dialog.cpp
engines/trecision/logic.cpp
engines/trecision/script.cpp
engines/trecision/struct.h
engines/trecision/video.cpp
engines/trecision/video.h
diff --git a/engines/trecision/anim.cpp b/engines/trecision/anim.cpp
index de645102d6..f3246c9c5e 100644
--- a/engines/trecision/anim.cpp
+++ b/engines/trecision/anim.cpp
@@ -123,7 +123,7 @@ void AnimTypeManager::executeAtFrameDoit(ATFHandle *h, int doit, uint16 objectId
break;
case fANIMOFF1:
- anim->_flag |= SMKANIM_OFF1;
+ anim->toggleAnimArea(1, false);
if (_vm->_curRoom == kRoom11 ||
_vm->_curRoom == kRoom1D ||
_vm->_curRoom == kRoom14 ||
@@ -133,35 +133,35 @@ void AnimTypeManager::executeAtFrameDoit(ATFHandle *h, int doit, uint16 objectId
_vm->_animMgr->smkToggleTrackAudio(0, 1, false);
break;
case fANIMOFF2:
- anim->_flag |= SMKANIM_OFF2;
+ anim->toggleAnimArea(2, false);
if (_vm->_curRoom == kRoom2E)
_vm->_animMgr->smkToggleTrackAudio(0, 2, false);
break;
case fANIMOFF3:
- anim->_flag |= SMKANIM_OFF3;
+ anim->toggleAnimArea(3, false);
break;
case fANIMOFF4:
- anim->_flag |= SMKANIM_OFF4;
+ anim->toggleAnimArea(4, false);
if (_vm->_curRoom == kRoom28)
_vm->_animMgr->smkToggleTrackAudio(0, 1, false);
break;
case fANIMON1:
- anim->_flag &= ~SMKANIM_OFF1;
+ anim->toggleAnimArea(1, true);
if (_vm->_curRoom == kRoom14 || _vm->_curRoom == kRoom1D || _vm->_curRoom == kRoom22 || _vm->_curRoom == kRoom48 || _vm->_curRoom == kRoom4P) {
_vm->_animMgr->smkToggleTrackAudio(0, 1, true);
}
break;
case fANIMON2:
- anim->_flag &= ~SMKANIM_OFF2;
+ anim->toggleAnimArea(2, true);
if (_vm->_curRoom == kRoom2E)
_vm->_animMgr->smkToggleTrackAudio(0, 2, true);
break;
case fANIMON3:
- anim->_flag &= ~SMKANIM_OFF3;
+ anim->toggleAnimArea(3, true);
break;
case fANIMON4:
- anim->_flag &= ~SMKANIM_OFF4;
+ anim->toggleAnimArea(4, true);
break;
case fENDDEMO:
_vm->demoOver();
@@ -329,17 +329,15 @@ void AnimTypeManager::end(int type) {
h->_lastFrame = h->_curFrame;
- uint16 flag = _vm->_animMgr->_animTab[_vm->_room[_vm->_curRoom]._bkgAnim]._flag;
-
for (int32 i = 0; i < MAXATFRAME; ++i) {
// if it's time to run this AtFrame
if (anim->_atFrame[i]._numFrame == 0 && anim->_atFrame[i]._type) {
- const uint8 child = anim->_atFrame[i]._child;
- if ( child == 0 ||
- (child == 1 && !(flag & SMKANIM_OFF1)) ||
- (child == 2 && !(flag & SMKANIM_OFF2)) ||
- (child == 3 && !(flag & SMKANIM_OFF3)) ||
- (child == 4 && !(flag & SMKANIM_OFF4)))
+ const uint8 area = anim->_atFrame[i]._area;
+ if ( area == 0 ||
+ (area == 1 && anim->isAnimAreaShown(1)) ||
+ (area == 2 && anim->isAnimAreaShown(2)) ||
+ (area == 3 && anim->isAnimAreaShown(3)) ||
+ (area == 4 && anim->isAnimAreaShown(4)))
processAtFrame(h, anim->_atFrame[i]._type, i);
}
}
@@ -366,12 +364,12 @@ void AnimTypeManager::handler(int type) {
if (anim->_atFrame[i]._numFrame > h->_lastFrame &&
anim->_atFrame[i]._numFrame <= h->_curFrame &&
anim->_atFrame[i]._numFrame != 0) {
- const uint8 child = anim->_atFrame[i]._child;
+ const uint8 child = anim->_atFrame[i]._area;
if ( child == 0 ||
- (child == 1 && !(flag & SMKANIM_OFF1)) ||
- (child == 2 && !(flag & SMKANIM_OFF2)) ||
- (child == 3 && !(flag & SMKANIM_OFF3)) ||
- (child == 4 && !(flag & SMKANIM_OFF4)))
+ (child == 1 && anim->isAnimAreaShown(1)) ||
+ (child == 2 && anim->isAnimAreaShown(2)) ||
+ (child == 3 && anim->isAnimAreaShown(3)) ||
+ (child == 4 && anim->isAnimAreaShown(4)))
processAtFrame(h, anim->_atFrame[i]._type, i);
}
}
diff --git a/engines/trecision/defines.h b/engines/trecision/defines.h
index 970014172a..64556a1c78 100644
--- a/engines/trecision/defines.h
+++ b/engines/trecision/defines.h
@@ -2338,7 +2338,7 @@ Game Structure
#define MAXTEXTSTACK 3
// define smacker animations
-#define MAXCHILD 4
+#define MAXAREA 4
#define MAXATFRAME 16
/******************************************************************************
diff --git a/engines/trecision/dialog.cpp b/engines/trecision/dialog.cpp
index 4335878e1f..d9371e8bc9 100644
--- a/engines/trecision/dialog.cpp
+++ b/engines/trecision/dialog.cpp
@@ -294,7 +294,7 @@ void DialogManager::afterChoice() {
_vm->_obj[oCHOCOLATES4A]._examine = 1105;
_vm->_obj[oCHOCOLATES4A]._action = 1106;
_vm->_obj[oDOORC4A]._action = 1118;
- _vm->_animMgr->_animTab[aBKG4A]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG4A].toggleAnimArea(1, false);
_vm->setObjectVisible(ocHELLEN4A, false);
_vm->setObjectVisible(oHELLENA4A, true);
break;
diff --git a/engines/trecision/logic.cpp b/engines/trecision/logic.cpp
index 68715682cb..e3d109fb8f 100644
--- a/engines/trecision/logic.cpp
+++ b/engines/trecision/logic.cpp
@@ -300,13 +300,13 @@ void LogicManager::startCharacterAnimations() {
_vm->startCharacterAction(a186GUARDAPIAZZA, 0, 0, 0);
} else if (_vm->_curRoom == kRoom1A && _vm->_oldRoom == kRoom18 && _vm->_room[kRoom1A].isDone()) {
_vm->startCharacterAction(a1A5ENTRA, 0, 0, 0);
- _vm->_animMgr->_animTab[aBKG1A]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG1A].toggleAnimArea(1, false);
} else if (_vm->_curRoom == kRoom1D && _vm->_oldRoom == kRoom1B) {
const uint16 cellarAction = _vm->isObjectVisible(oDONNA1D) ? a1D1SCENDESCALE : a1D12SCENDESCALA;
_vm->startCharacterAction(cellarAction, 0, 1, 0);
_vm->_actor->_lim[0] = 60;
_vm->_actor->_lim[2] = 240;
- } else if (_vm->_curRoom == kRoom1B && _vm->_oldRoom == kRoom18 && (_vm->_animMgr->_animTab[aBKG1B]._flag & SMKANIM_OFF1))
+ } else if (_vm->_curRoom == kRoom1B && _vm->_oldRoom == kRoom18 && _vm->_animMgr->_animTab[aBKG1B].isAnimAreaShown(1))
_vm->startCharacterAction(a1B12SCAPPATOPO, 0, 0, 0);
else if (_vm->_curRoom == kRoom2B && _vm->_oldRoom == kRoom2A)
_vm->startCharacterAction(a2B2ESCEPOZZO, 0, 2, 0);
@@ -381,49 +381,51 @@ bool LogicManager::startPlayDialog() {
void LogicManager::endChangeRoom() {
// Specific management of magnetic fields
if (_vm->_curRoom == kRoom2E && _vm->isObjectVisible(oPULSANTEADS2D)) {
- _vm->_animMgr->_animTab[aBKG2E]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG2E].toggleAnimArea(1, false);
_vm->setObjectVisible(oCAMPO2E, false);
_vm->setObjectVisible(oCARTELLOA2E, false);
_vm->setObjectVisible(oCARTELLOS2E, true);
} else if (_vm->_curRoom == kRoom2E && _vm->isObjectVisible(oPULSANTEADA2D)) {
- _vm->_animMgr->_animTab[aBKG2E]._flag &= ~SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG2E].toggleAnimArea(1, true);
_vm->setObjectVisible(oCAMPO2E, true);
_vm->setObjectVisible(oCARTELLOA2E, true);
_vm->setObjectVisible(oCARTELLOS2E, false);
}
if (_vm->_curRoom == kRoom2C && _vm->isObjectVisible(oPULSANTEACS2D)) {
- _vm->_animMgr->_animTab[aBKG2C]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG2C].toggleAnimArea(1, false);
_vm->setObjectVisible(oCAMPO2C, false);
_vm->setObjectVisible(oCARTELLOA2C, false);
_vm->setObjectVisible(oCARTELLOS2C, true);
} else if (_vm->_curRoom == kRoom2C && _vm->isObjectVisible(oPULSANTEACA2D)) {
- _vm->_animMgr->_animTab[aBKG2C]._flag &= ~SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG2C].toggleAnimArea(1, true);
_vm->setObjectVisible(oCAMPO2C, true);
_vm->setObjectVisible(oCARTELLOS2C, false);
_vm->setObjectVisible(oCARTELLOA2C, true);
}
if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEBBS2D)) {
- _vm->_animMgr->_animTab[aBKG28]._flag |= SMKANIM_OFF2;
+ _vm->_animMgr->_animTab[aBKG28].toggleAnimArea(2, false);
_vm->setObjectAnim(oCESPUGLIO28, a283);
_vm->setObjectVisible(oSERPENTETM28, true);
_vm->setObjectVisible(oSERPENTEAM28, true);
} else if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEBBA2D)) {
- _vm->_animMgr->_animTab[aBKG28]._flag &= ~SMKANIM_OFF2;
+ _vm->_animMgr->_animTab[aBKG28].toggleAnimArea(2, true);
_vm->setObjectAnim(oCESPUGLIO28, a282);
_vm->setObjectVisible(oSERPENTETM28, false);
_vm->setObjectVisible(oSERPENTEAM28, false);
}
if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEABS2D)) {
- _vm->_animMgr->_animTab[aBKG28]._flag |= (SMKANIM_OFF1 | SMKANIM_OFF3);
+ _vm->_animMgr->_animTab[aBKG28].toggleAnimArea(1, false);
+ _vm->_animMgr->_animTab[aBKG28].toggleAnimArea(3, false);
_vm->setObjectVisible(oCAMPO28, false);
_vm->setObjectVisible(oCARTELLOA28, false);
_vm->setObjectVisible(oCARTELLOS28, true);
_vm->read3D("282.3d");
} else if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEABA2D)) {
- _vm->_animMgr->_animTab[aBKG28]._flag &= ~(SMKANIM_OFF1 | SMKANIM_OFF3);
+ _vm->_animMgr->_animTab[aBKG28].toggleAnimArea(1, true);
+ _vm->_animMgr->_animTab[aBKG28].toggleAnimArea(3, true);
_vm->setObjectVisible(oCAMPO28, true);
_vm->setObjectVisible(oCARTELLOA28, true);
_vm->setObjectVisible(oCARTELLOS28, false);
@@ -1182,7 +1184,7 @@ void LogicManager::useInventoryWithScreen() {
_vm->read3D("1d2.3d"); // after skate
_vm->setObjectVisible(oDONNA1D, false);
_vm->_room[_vm->_curRoom].setExtra(true);
- _vm->_animMgr->_animTab[aBKG1D]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG1D].toggleAnimArea(1, false);
printSentence = false;
}
break;
@@ -1360,7 +1362,7 @@ void LogicManager::useInventoryWithScreen() {
_vm->_dialogMgr->playDialog(dF2E2);
_vm->setObjectVisible(oDINOSAURO2E, false);
_vm->setObjectAnim(oCATWALKA2E, a2E2PRIMAPALLONTANANDO);
- _vm->_animMgr->_animTab[aBKG2E]._flag |= SMKANIM_OFF2;
+ _vm->_animMgr->_animTab[aBKG2E].toggleAnimArea(2, false);
printSentence = false;
}
break;
@@ -1676,7 +1678,7 @@ void LogicManager::useInventoryWithScreen() {
_vm->setObjectVisible(oSANGUE4P, true);
_vm->_room[kRoom4P].setExtra(true);
_vm->read3D("4p2.3d"); // after werewolf
- _vm->_animMgr->_animTab[aBKG4P]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG4P].toggleAnimArea(1, false);
_vm->_dialogMgr->playDialog(dF4P2);
printSentence = false;
} else if (_vm->_useWith[WITH] == oLICANTROPO4P) {
@@ -1912,7 +1914,7 @@ bool LogicManager::useScreenWithScreen() {
if (_vm->_useWith[WITH] == oTUBO21) {
_vm->_dialogMgr->playDialog(dF211);
_vm->_logicMgr->setupAltRoom(kRoom21, true);
- _vm->_animMgr->_animTab[aBKG21]._flag &= ~SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG21].toggleAnimArea(1, true);
_vm->setObjectVisible(oRAMPINO21, false);
_vm->setObjectVisible(oTUBO21, false);
_vm->setObjectVisible(oCHAIN21, true);
@@ -2623,7 +2625,7 @@ bool LogicManager::mouseOperate(uint16 curObj) {
_vm->setObjectVisible(oSERBATOIOA2G, true);
_vm->setObjectVisible(oPANNELLOE2G, true);
_vm->_obj[oPANELM2G].setFlagExtra(true);
- _vm->_animMgr->_animTab[aBKG2G]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG2G].toggleAnimArea(1, false);
retVal = false;
} else
retVal = true;
@@ -2633,7 +2635,7 @@ bool LogicManager::mouseOperate(uint16 curObj) {
case oWHEELS2C:
if (!_vm->isObjectVisible(od2CTO2D)) {
_vm->_animMgr->smkStop(kSmackerBackground);
- _vm->_animMgr->_animTab[aBKG2C]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG2C].toggleAnimArea(1, false);
_vm->setObjectVisible(oBASEWHEELS2C, true);
_vm->setObjectVisible(omWHEELS2C, true);
_vm->setObjectVisible(oPULSANTE2C, true);
@@ -2662,7 +2664,7 @@ bool LogicManager::mouseOperate(uint16 curObj) {
_vm->_dialogMgr->playDialog(dF2E1);
_vm->setObjectVisible(oDINOSAURO2E, true);
_vm->_obj[oCATWALKA2E].setFlagExtra(true);
- _vm->_animMgr->_animTab[aBKG2E]._flag &= ~SMKANIM_OFF2;
+ _vm->_animMgr->_animTab[aBKG2E].toggleAnimArea(2, true);
retVal = false;
} else if (_vm->_obj[curObj]._anim) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
@@ -2735,7 +2737,7 @@ bool LogicManager::mouseOperate(uint16 curObj) {
_vm->_obj[oASCENSORE35].setFlagRoomOut(true);
_vm->setObjectAnim(oASCENSORE35, a3514ENTRAASCENSORE);
- _vm->_animMgr->_animTab[aBKG35]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG35].toggleAnimArea(1, false);
_vm->_dialogMgr->playDialog(dF351);
_vm->_pathFind->setPosition(7);
break;
@@ -2784,8 +2786,8 @@ bool LogicManager::mouseOperate(uint16 curObj) {
_vm->setObjectAnim(oDOORMC36, a3610APREPORTA);
_vm->setObjectAnim(oSCAFFALE36, a3615APRENDESCAFFALE);
- _vm->_animMgr->_animTab[aBKG36]._flag |= SMKANIM_OFF2;
- _vm->_animMgr->_animTab[aBKG36]._flag |= SMKANIM_OFF3;
+ _vm->_animMgr->_animTab[aBKG36].toggleAnimArea(2, false);
+ _vm->_animMgr->_animTab[aBKG36].toggleAnimArea(3, false);
_vm->setObjectVisible(oSCANNERLA36, false);
_vm->setObjectVisible(oSCANNERLS36, true);
_vm->setObjectVisible(oSCANNERMA36, false);
@@ -3625,7 +3627,7 @@ void LogicManager::handleClickSphinxPuzzle() {
_vm->_scheduler->mouseExamine(_vm->_curObj);
return;
}
- _vm->_animMgr->_animTab[aBKG2C]._flag &= ~SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG2C].toggleAnimArea(1, true);
_vm->setObjectVisible(oBASEWHEELS2C, false);
_vm->setObjectVisible(omWHEELS2C, false);
_vm->setObjectVisible(oPULSANTE2C, false);
@@ -3904,7 +3906,7 @@ void LogicManager::doSystemChangeRoom(uint16 room) {
}
if (_vm->_curRoom == kRoom12 && _vm->_oldRoom == kRoom11)
- _vm->_animMgr->_animTab[aBKG11]._flag |= SMKANIM_OFF1;
+ _vm->_animMgr->_animTab[aBKG11].toggleAnimArea(1, false);
else if (_vm->_oldRoom == kRoom2BL || _vm->_oldRoom == kRoom36F)
_vm->_oldRoom = _vm->_curRoom;
else if (_vm->_curRoom == kRoomControlPanel)
diff --git a/engines/trecision/script.cpp b/engines/trecision/script.cpp
index c521906416..22f4b9c730 100644
--- a/engines/trecision/script.cpp
+++ b/engines/trecision/script.cpp
@@ -543,7 +543,7 @@ void TrecisionEngine::doMouseTake(uint16 curObj) {
break;
if (frame->_type == ATFNONE) {
- frame->_child = 0;
+ frame->_area = 0;
frame->_numFrame = 1;
frame->_type = ATFCLR;
frame->_index = curObj;
diff --git a/engines/trecision/struct.h b/engines/trecision/struct.h
index 59b17a5e0a..210056a2df 100644
--- a/engines/trecision/struct.h
+++ b/engines/trecision/struct.h
@@ -121,17 +121,43 @@ private:
struct SAtFrame {
uint8 _type; //ATFTEXT, ATFSND, ATFEVENT
- uint8 _child; // 0 1 2 3 4
+ uint8 _area; // 0 1 2 3 4
uint16 _numFrame;
uint16 _index;
};
+// Shifted left by 1 - 4, depending on the subarea
+#define SMKANIM_OFF_BASE 16
+
struct SAnim {
char _name[14];
uint16 _flag; // 1- background 2- icon 3- action 4- active - 4bits per child
- Common::Rect _lim[MAXCHILD];
+ Common::Rect _lim[MAXAREA];
uint8 _nbox;
SAtFrame _atFrame[MAXATFRAME];
+
+ /**
+ * Toggle the animation of a subarea
+ * @param area: 1 - 4
+ * @param show: show or hide the animation area
+ */
+ void toggleAnimArea(uint8 area, bool show) {
+ assert(area >= 1 && area <= 4);
+ if (show)
+ _flag &= ~(SMKANIM_OFF_BASE << area);
+ else
+ _flag |= (SMKANIM_OFF_BASE << area);
+ }
+
+ /**
+ * Checks if an animation subarea is shown
+ * @param area: 1 - 4
+ * @return true if the subarea is shown
+ */
+ bool isAnimAreaShown(uint8 area) {
+ assert(area >= 1 && area <= 4);
+ return !(_flag & (SMKANIM_OFF_BASE << area));
+ }
};
struct SSortTable {
diff --git a/engines/trecision/video.cpp b/engines/trecision/video.cpp
index 674d1f9c3c..2deaeb77c1 100644
--- a/engines/trecision/video.cpp
+++ b/engines/trecision/video.cpp
@@ -322,32 +322,34 @@ void AnimManager::startSmkAnim(uint16 animation) {
}
void AnimManager::toggleMuteBgAnim(uint16 animation) {
- uint16 animFlag = _animTab[animation]._flag;
+ const bool area1Shown = _animTab[animation].isAnimAreaShown(1);
+ const bool area2Shown = _animTab[animation].isAnimAreaShown(2);
+ const bool area4Shown = _animTab[animation].isAnimAreaShown(4);
NightlongSmackerDecoder *decoder = _smkAnims[kSmackerBackground];
if (decoder == nullptr)
return;
// Turns off when not needed
- if (animation == aBKG11 && (animFlag & SMKANIM_OFF1))
+ if (animation == aBKG11 && !area1Shown)
decoder->muteTrack(1, true);
- else if (animation == aBKG14 && (animFlag & SMKANIM_OFF1))
+ else if (animation == aBKG14 && !area1Shown)
decoder->muteTrack(1, true);
else if (animation == aBKG1C && _vm->_obj[oFAX17].isFlagExtra()) {
- _animTab[animation]._flag |= SMKANIM_OFF1;
+ _animTab[animation].toggleAnimArea(1, false);
decoder->muteTrack(1, true);
- } else if (animation == aBKG1D && (animFlag & SMKANIM_OFF1))
+ } else if (animation == aBKG1D && !area1Shown)
decoder->muteTrack(1, true);
- else if (animation == aBKG22 && (animFlag & SMKANIM_OFF1))
+ else if (animation == aBKG22 && !area1Shown)
decoder->muteTrack(1, true);
- else if (animation == aBKG48 && (animFlag & SMKANIM_OFF1))
+ else if (animation == aBKG48 && !area1Shown)
decoder->muteTrack(1, true);
- else if (animation == aBKG4P && (animFlag & SMKANIM_OFF1))
+ else if (animation == aBKG4P && !area1Shown)
decoder->muteTrack(1, true);
- else if (animation == aBKG28 && (animFlag & SMKANIM_OFF4))
+ else if (animation == aBKG28 && area4Shown)
decoder->muteTrack(1, true);
else if (animation == aBKG37 && !_vm->_room[_vm->_curRoom].hasExtra())
decoder->muteTrack(1, true);
- else if (animation == aBKG2E && (animFlag & SMKANIM_OFF2))
+ else if (animation == aBKG2E && area2Shown)
decoder->muteTrack(2, true);
else if (animation == aBKG2G && _vm->_dialogMgr->isDialogFinished(556))
decoder->muteTrack(2, true);
@@ -441,8 +443,8 @@ void AnimManager::refreshSmkAnim(uint16 animation) {
handleEndOfVideo(animation, kSmackerAction);
}
- for (int32 i = 0; i < MAXCHILD; i++) {
- if (!(_animTab[animation]._flag & (SMKANIM_OFF1 << i)) && _animTab[animation]._lim[i].bottom != 0) {
+ for (int32 i = 0; i < MAXAREA; i++) {
+ if (_animTab[animation].isAnimAreaShown(i + 1) && _animTab[animation]._lim[i].bottom != 0) {
_vm->_graphicsMgr->addDirtyRect(_animTab[animation]._lim[i], true);
}
}
@@ -475,10 +477,9 @@ static bool rectsIntersect(Common::Rect r1, Common::Rect r2) {
bool AnimManager::shouldShowAnim(int animation, Common::Rect curRect) {
bool hideAnim = false;
- for (int32 i = 0; i < MAXCHILD; i++) {
+ for (int32 i = 0; i < MAXAREA; i++) {
const bool intersect = rectsIntersect(_animTab[animation]._lim[i], curRect);
- const bool animAreaEnabled = !(_animTab[animation]._flag & (SMKANIM_OFF1 << i));
- hideAnim = intersect && !animAreaEnabled;
+ hideAnim = intersect && !_animTab[animation].isAnimAreaShown(i + 1);
if (hideAnim)
break;
}
@@ -572,7 +573,7 @@ void AnimManager::syncGameStream(Common::Serializer &ser) {
SAnim *cur = &_animTab[i];
ser.syncBytes((byte *)cur->_name, 14);
ser.syncAsUint16LE(cur->_flag);
- for (uint8 j = 0; j < MAXCHILD; ++j) {
+ for (uint8 j = 0; j < MAXAREA; ++j) {
ser.syncAsUint16LE(cur->_lim[j].left);
ser.syncAsUint16LE(cur->_lim[j].top);
ser.syncAsUint16LE(cur->_lim[j].right);
@@ -582,7 +583,7 @@ void AnimManager::syncGameStream(Common::Serializer &ser) {
ser.skip(1, SAVE_VERSION_ORIGINAL_MIN, SAVE_VERSION_ORIGINAL_MAX);
for (uint8 j = 0; j < MAXATFRAME; ++j) {
ser.syncAsByte(cur->_atFrame[j]._type);
- ser.syncAsByte(cur->_atFrame[j]._child);
+ ser.syncAsByte(cur->_atFrame[j]._area);
ser.syncAsUint16LE(cur->_atFrame[j]._numFrame);
ser.syncAsUint16LE(cur->_atFrame[j]._index);
}
@@ -595,7 +596,7 @@ void AnimManager::loadAnimTab(Common::SeekableReadStreamEndian *stream) {
_animTab[i]._flag = stream->readUint16();
- for (uint8 j = 0; j < MAXCHILD; ++j) {
+ for (uint8 j = 0; j < MAXAREA; ++j) {
_animTab[i]._lim[j].left = stream->readUint16();
_animTab[i]._lim[j].top = stream->readUint16();
_animTab[i]._lim[j].right = stream->readUint16();
@@ -607,7 +608,7 @@ void AnimManager::loadAnimTab(Common::SeekableReadStreamEndian *stream) {
for (uint8 j = 0; j < MAXATFRAME; ++j) {
_animTab[i]._atFrame[j]._type = stream->readByte();
- _animTab[i]._atFrame[j]._child = stream->readByte();
+ _animTab[i]._atFrame[j]._area = stream->readByte();
_animTab[i]._atFrame[j]._numFrame = stream->readUint16();
_animTab[i]._atFrame[j]._index = stream->readUint16();
}
diff --git a/engines/trecision/video.h b/engines/trecision/video.h
index e8c52ff5f4..de4ba914b2 100644
--- a/engines/trecision/video.h
+++ b/engines/trecision/video.h
@@ -40,10 +40,6 @@ namespace Trecision {
#define SMKANIM_LOOP 4
#define SMKANIM_OLD 8
#define SMKANIM_ON 16
-#define SMKANIM_OFF1 32
-#define SMKANIM_OFF2 64
-#define SMKANIM_OFF3 128
-#define SMKANIM_OFF4 256
enum SmackerType {
kSmackerBackground = 0, // Scene background animations
More information about the Scummvm-git-logs
mailing list