[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