[Scummvm-git-logs] scummvm master -> 4e0eec203df9bf66031390e424f01fcc4a445970

whiterandrek whiterandrek at gmail.com
Thu Jul 9 20:44:28 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:
4e0eec203d PETKA: properly draw heroes


Commit: 4e0eec203df9bf66031390e424f01fcc4a445970
    https://github.com/scummvm/scummvm/commit/4e0eec203df9bf66031390e424f01fcc4a445970
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-07-09T23:44:16+03:00

Commit Message:
PETKA: properly draw heroes

Changed paths:
    engines/petka/objects/heroes.cpp
    engines/petka/objects/heroes.h


diff --git a/engines/petka/objects/heroes.cpp b/engines/petka/objects/heroes.cpp
index c0fe784ff3..4fa6d5ba05 100644
--- a/engines/petka/objects/heroes.cpp
+++ b/engines/petka/objects/heroes.cpp
@@ -42,10 +42,10 @@ QObjectPetka::QObjectPetka() {
 	_x = 574;
 	_y = 44;
 	_z = 200;
-	_surfId  = -5;
+	// _surfId  = -5;
 	_surfH = 0;
 	_surfW = 0;
-	_field98 = 1.0;
+	_k = 1.0;
 }
 
 void QObjectPetka::processMessage(const QMessage &arg) {
@@ -53,6 +53,11 @@ void QObjectPetka::processMessage(const QMessage &arg) {
 	if (msg.opcode == kImage) {
 		msg.opcode = kSet;
 		_imageId = msg.arg1;
+		// delete _walkObj;
+		// _walkObj = new Walk(_imageId + 10);
+		// int backgroundId = g_vm->resMgr()->findResourceName(g_vm->getQSystem()->_room->_resourceId)
+		// _walkObj->setBackground(backgroundId);
+
 	}
 	if (msg.opcode == kSaid || msg.opcode == kStand) {
 		msg.opcode = kSet;
@@ -86,10 +91,8 @@ void QObjectPetka::processMessage(const QMessage &arg) {
 void QObjectPetka::initSurface() {
 	QManager *resMgr = g_vm->resMgr();
 	FlicDecoder *flc = resMgr->loadFlic(_resourceId);
-	resMgr->removeResource(_surfId);
-	resMgr->findOrCreateSurface(_surfId, flc->getWidth(), flc->getHeight());
-	_surfW = flc->getWidth() * _field98;
-	_surfH = flc->getHeight() * _field98;
+	_surfW = flc->getWidth() * _k;
+	_surfH = flc->getHeight() * _k;
 }
 
 void QObjectPetka::walk(int x, int y) {
@@ -142,18 +145,16 @@ void QObjectPetka::draw() {
 	}
 
 	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
-	Graphics::Surface *surf = g_vm->resMgr()->loadBitmap(_surfId);
-	if (!flc || !surf) {
+	if (!flc) {
 		return;
 	}
 	Graphics::Surface *conv = flc->getCurrentFrame()->convertTo(g_system->getScreenFormat(), flc->getPalette());
-	surf->copyRectToSurface(*conv, 0, 0, Common::Rect(0, 0, flc->getWidth() - 1, flc->getHeight() - 1));
 
-	Common::Rect srcRect(0, 0, _surfW, _surfH);
-	Common::Rect dstRect(srcRect);
+	Common::Rect srcRect(0, 0, conv->w, conv->h);
+	Common::Rect dstRect(0, 0, _surfW, _surfH);
 	dstRect.translate(_x, _y);
 
-	g_vm->videoSystem()->transBlitFrom(*surf, srcRect, dstRect, flc->getTransColor(surf->format));
+	g_vm->videoSystem()->transBlitFrom(*conv, srcRect, dstRect, flc->getTransColor(conv->format));
 	conv->free();
 	delete conv;
 }
@@ -162,10 +163,10 @@ void QObjectPetka::setPos(Common::Point p, bool) {
 	p.y = MIN<int16>(p.y, 480);
 	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
 
-	_field98 = calcSmth(p.y);
+	_k = calcPerspective(p.y);
 
-	_surfH = flc->getHeight() * _field98;
-	_surfW = flc->getWidth() * _field98;
+	_surfH = flc->getHeight() * _k;
+	_surfW = flc->getWidth() * _k;
 
 	_x_ = p.x;
 	_y_ = p.y;
@@ -176,7 +177,7 @@ void QObjectPetka::setPos(Common::Point p, bool) {
 	g_vm->videoSystem()->makeAllDirty();
 }
 
-double QObjectPetka::calcSmth(int y) {
+double QObjectPetka::calcPerspective(int y) {
 	QSystem *qsys = g_vm->getQSystem();
 
 	y = MIN(y, 480);
@@ -290,8 +291,8 @@ void QObjectPetka::update(int time) {
 			updateWalk();
 			flc = g_vm->resMgr()->loadFlic(_resourceId);
 
-			_surfH = flc->getHeight() * _field98;
-			_surfW = flc->getWidth() * _field98;
+			_surfH = flc->getHeight() * _k;
+			_surfW = flc->getWidth() * _k;
 
 			_time -= flc->getDelay();
 
@@ -304,21 +305,32 @@ bool QObjectPetka::isInPoint(Common::Point p) {
 	if (!_isActive)
 		return false;
 	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
-	Graphics::Surface *s = g_vm->resMgr()->loadBitmap(_surfId);
-	if (!s)
-		return false;
+	const Graphics::Surface *flcSurface = flc->getCurrentFrame();
 	Common::Rect bounds(_surfW, _surfH);
+	Graphics::ManagedSurface s(_surfW, _surfH, flcSurface->format);
+	s.transBlitFrom(*flcSurface, Common::Rect(0, 0, flcSurface->w, flcSurface->h), bounds);
 	p.x -= _x;
 	p.y -= _y;
 	if (!bounds.contains(p.x, p.y))
 		return false;
-	return *(uint16 *)s->getBasePtr(p.x, p.y) != flc->getTransColor(s->format);
+	return *(uint16 *)s.getBasePtr(p.x, p.y) != 0;
+}
+
+void QObjectPetka::updateZ() {
+	if (_animate && _isShown && _updateZ) {
+		FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+		if (_isWalking) {
+			// _z = _walkObj->currPos().y
+		} else {
+			_z = _y + flc->getHeight() * _k;
+		}
+	}
 }
 
 QObjectChapayev::QObjectChapayev() {
 	_x = 477;
 	_y = 350;
-	_surfId = -6;
+	// _surfId = -6;
 	_isPetka = false;
 }
 
diff --git a/engines/petka/objects/heroes.h b/engines/petka/objects/heroes.h
index 468d28acbc..8a2e8d41fe 100644
--- a/engines/petka/objects/heroes.h
+++ b/engines/petka/objects/heroes.h
@@ -43,8 +43,9 @@ public:
 	void update(int time) override;
 	void setPos(Common::Point p, bool ) override;
 
-	double calcSmth(int y);
+	double calcPerspective(int y);
 
+	void updateZ() override;
 
 public:
 	int _field7C;
@@ -52,9 +53,9 @@ public:
 	int _surfH;
 	int _x_;
 	int _y_;
-	int _surfId;
+	// int _surfId;
 	int _imageId;
-	double _field98;
+	double _k;
 	// walkObj
 	int _destX;
 	int _destY;




More information about the Scummvm-git-logs mailing list