[Scummvm-git-logs] scummvm master -> febc95d4869485ab06d1adbac5d288dde3324d93
bluegr
bluegr at gmail.com
Sat Jul 3 07:45:22 UTC 2021
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
1266dcab77 TRECISION: Fix logic for walking into room 23A
5f98c7c323 TRECISION: Renaming and cleanup
febc95d486 TRECISION: Clean up drawSmkBackgroundFrame()
Commit: 1266dcab775b8ac2fd3da437bcf479f3759b978d
https://github.com/scummvm/scummvm/commit/1266dcab775b8ac2fd3da437bcf479f3759b978d
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-07-03T10:44:48+03:00
Commit Message:
TRECISION: Fix logic for walking into room 23A
Changed paths:
engines/trecision/logic.cpp
diff --git a/engines/trecision/logic.cpp b/engines/trecision/logic.cpp
index 5a06586a61..68715682cb 100644
--- a/engines/trecision/logic.cpp
+++ b/engines/trecision/logic.cpp
@@ -308,11 +308,14 @@ void LogicManager::startCharacterAnimations() {
_vm->_actor->_lim[2] = 240;
} else if (_vm->_curRoom == kRoom1B && _vm->_oldRoom == kRoom18 && (_vm->_animMgr->_animTab[aBKG1B]._flag & SMKANIM_OFF1))
_vm->startCharacterAction(a1B12SCAPPATOPO, 0, 0, 0);
- else if (_vm->_curRoom == kRoom2B && (_vm->_oldRoom == kRoom2A))
+ else if (_vm->_curRoom == kRoom2B && _vm->_oldRoom == kRoom2A)
_vm->startCharacterAction(a2B2ESCEPOZZO, 0, 2, 0);
- else if (_vm->_curRoom == kRoom23A && (_vm->_oldRoom == kRoom21) && _vm->_room[kRoom23A].isDone())
- _vm->startCharacterAction(aWALKIN, 0, 0, _vm->_room[kRoom23A].isDone() ? 0 : 361);
- else if (_vm->_curRoom == kRoom33 && _vm->_oldRoom == kRoom32) {
+ else if (_vm->_curRoom == kRoom23A && _vm->_oldRoom == kRoom21) {
+ if (_vm->_room[kRoom23A].isDone())
+ _vm->startCharacterAction(aWALKIN, 0, 0, 0);
+ else
+ _vm->_flagShowCharacter = false;
+ } else if (_vm->_curRoom == kRoom33 && _vm->_oldRoom == kRoom32) {
const uint16 roofAction = _vm->isObjectVisible(oBRUCIATURA33) ? a3311SALESCALE : a3313CHIUDEBOTOLA;
_vm->startCharacterAction(roofAction, 0, 0, 0);
} else if (_vm->_curRoom == kRoom54 && (_vm->_oldRoom == kRoom53)) {
@@ -467,6 +470,9 @@ void LogicManager::endChangeRoom() {
} else if (_vm->_curRoom == kRoom13CU) {
const uint16 closeupObjectId = _vm->isObjectVisible(oLETTERA13) ? oLETTERA13 : oPENPADA13;
_vm->_textMgr->characterSay(_vm->_obj[closeupObjectId]._examine);
+ } else if (_vm->_curRoom == kRoom23A && _vm->_oldRoom == kRoom21 && !_vm->_room[kRoom23A].isDone()) {
+ _vm->_flagShowCharacter = true;
+ _vm->startCharacterAction(aWALKIN, 0, 0, 361);
} else if (_vm->_curRoom == kRoom24 && !_vm->_room[kRoom24].isDone())
_vm->_textMgr->characterSay(381);
else if (_vm->_curRoom == kRoom2G && !_vm->_room[kRoom2G].isDone())
Commit: 5f98c7c323f2685b8acc2695c262631a6c98ab7b
https://github.com/scummvm/scummvm/commit/5f98c7c323f2685b8acc2695c262631a6c98ab7b
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-07-03T10:44:49+03:00
Commit Message:
TRECISION: Renaming and cleanup
Changed paths:
engines/trecision/graphics.cpp
diff --git a/engines/trecision/graphics.cpp b/engines/trecision/graphics.cpp
index 51a8d60416..6ddb1f5aeb 100644
--- a/engines/trecision/graphics.cpp
+++ b/engines/trecision/graphics.cpp
@@ -120,33 +120,34 @@ void GraphicsManager::drawObj(int index, bool mask, Common::Rect drawRect, Commo
uint8 *maskPtr = _vm->_objectGraphics[index].mask;
for (uint16 y = drawRect.top; y < drawRect.bottom; ++y) {
- uint16 sco = 0;
- uint16 c = 0;
- while (sco < drawRect.width()) {
- if (c == 0) { // jump
- sco += *maskPtr;
+ uint16 x = 0;
+ bool copyBytes = false;
+ while (x < drawRect.width()) {
+ if (!copyBytes) { // jump
+ x += *maskPtr;
++maskPtr;
- c = 1;
+ copyBytes = true;
} else { // copy
const uint16 maskOffset = *maskPtr;
if (maskOffset != 0 && y >= drawRect.top + drawObjRect.top && y < drawRect.top + drawObjRect.bottom) {
- if (sco >= drawObjRect.left && sco + maskOffset < drawObjRect.right)
- memcpy(_screenBuffer.getBasePtr(sco + drawRect.left, y), buf, maskOffset * 2);
-
- else if (sco < drawObjRect.left && sco + maskOffset < drawObjRect.right && sco + maskOffset >= drawObjRect.left)
- memcpy(_screenBuffer.getBasePtr(drawObjRect.left + drawRect.left, y), buf + drawObjRect.left - sco, (maskOffset + sco - drawObjRect.left) * 2);
-
- else if (sco >= drawObjRect.left && sco + maskOffset >= drawObjRect.right && sco < drawObjRect.right)
- memcpy(_screenBuffer.getBasePtr(sco + drawRect.left, y), buf, (drawObjRect.right - sco) * 2);
-
- else if (sco < drawObjRect.left && sco + maskOffset >= drawObjRect.right)
- memcpy(_screenBuffer.getBasePtr(drawObjRect.left + drawRect.left, y), buf + drawObjRect.left - sco, (drawObjRect.right - drawObjRect.left) * 2);
+ const void *src = (x >= drawObjRect.left) ? buf : buf + drawObjRect.left - x;
+ int offset = (x >= drawObjRect.left) ? x : drawObjRect.left;
+ void *dst = _screenBuffer.getBasePtr(offset + drawRect.left, y);
+
+ if (x >= drawObjRect.left && x + maskOffset < drawObjRect.right)
+ memcpy(dst, src, maskOffset * 2);
+ else if (x < drawObjRect.left && x + maskOffset < drawObjRect.right && x + maskOffset >= drawObjRect.left)
+ memcpy(dst, src, (maskOffset + x - drawObjRect.left) * 2);
+ else if (x >= drawObjRect.left && x + maskOffset >= drawObjRect.right && x < drawObjRect.right)
+ memcpy(dst, src, (drawObjRect.right - x) * 2);
+ else if (x < drawObjRect.left && x + maskOffset >= drawObjRect.right)
+ memcpy(dst, src, (drawObjRect.right - drawObjRect.left) * 2);
}
- sco += *maskPtr;
+ x += *maskPtr;
buf += *maskPtr++;
- c = 0;
+ copyBytes = false;
}
}
}
Commit: febc95d4869485ab06d1adbac5d288dde3324d93
https://github.com/scummvm/scummvm/commit/febc95d4869485ab06d1adbac5d288dde3324d93
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-07-03T10:44:49+03:00
Commit Message:
TRECISION: Clean up drawSmkBackgroundFrame()
Changed paths:
engines/trecision/video.cpp
engines/trecision/video.h
diff --git a/engines/trecision/video.cpp b/engines/trecision/video.cpp
index 944ec00d96..674d1f9c3c 100644
--- a/engines/trecision/video.cpp
+++ b/engines/trecision/video.cpp
@@ -472,6 +472,20 @@ static bool rectsIntersect(Common::Rect r1, Common::Rect r2) {
return (r1.left <= r2.right) && (r1.right >= r2.left) && (r1.top <= r2.bottom) && (r1.bottom >= r2.top);
}
+bool AnimManager::shouldShowAnim(int animation, Common::Rect curRect) {
+ bool hideAnim = false;
+
+ for (int32 i = 0; i < MAXCHILD; i++) {
+ const bool intersect = rectsIntersect(_animTab[animation]._lim[i], curRect);
+ const bool animAreaEnabled = !(_animTab[animation]._flag & (SMKANIM_OFF1 << i));
+ hideAnim = intersect && !animAreaEnabled;
+ if (hideAnim)
+ break;
+ }
+
+ return !hideAnim;
+}
+
void AnimManager::drawSmkBackgroundFrame(int animation) {
NightlongSmackerDecoder *smkDecoder = _smkAnims[kSmackerBackground];
if (smkDecoder == nullptr)
@@ -483,31 +497,11 @@ void AnimManager::drawSmkBackgroundFrame(int animation) {
const Common::Rect *lastRect = smkDecoder->getNextDirtyRect();
const byte *palette = smkDecoder->getPalette();
- if (smkDecoder->getCurFrame() == 0 && !_bgAnimRestarted) {
- bool drawFrameFlag = true;
-
- for (int32 i = 0; i < MAXCHILD; i++) {
- if ((_animTab[animation]._flag & (SMKANIM_OFF1 << i))) {
- drawFrameFlag = false;
- break;
- }
- }
-
- if (drawFrameFlag)
- _vm->_graphicsMgr->blitToScreenBuffer(frame, 0, TOP, palette, true);
+ if (smkDecoder->getCurFrame() == 0 && shouldShowAnim(animation, *lastRect) && !_bgAnimRestarted) {
+ _vm->_graphicsMgr->blitToScreenBuffer(frame, 0, TOP, palette, true);
} else {
while (lastRect) {
- bool drawDirtyRect = true;
-
- for (int32 i = 0; i < MAXCHILD; i++) {
- const bool intersect = rectsIntersect(_animTab[animation]._lim[i], *lastRect);
- if ((_animTab[animation]._flag & (SMKANIM_OFF1 << i)) && intersect) {
- drawDirtyRect = false;
- break;
- }
- }
-
- if (smkDecoder->getCurFrame() > 0 && drawDirtyRect) {
+ if (smkDecoder->getCurFrame() > 0 && shouldShowAnim(animation, *lastRect)) {
Graphics::Surface anim = frame->getSubArea(*lastRect);
_vm->_graphicsMgr->blitToScreenBuffer(&anim, lastRect->left, lastRect->top + TOP, palette, true);
}
diff --git a/engines/trecision/video.h b/engines/trecision/video.h
index 1e0925b38c..e8c52ff5f4 100644
--- a/engines/trecision/video.h
+++ b/engines/trecision/video.h
@@ -86,6 +86,7 @@ private:
void setVideoRange(NightlongSmackerDecoder *smkDecoder, int &startFrame, int &endFrame);
void refreshSmkAnim(uint16 animation);
void handleEndOfVideo(int animation, int slot);
+ bool shouldShowAnim(int animation, Common::Rect curRect);
void drawSmkBackgroundFrame(int animation);
void drawSmkIconFrame(uint16 startIcon, uint16 iconNum);
More information about the Scummvm-git-logs
mailing list