[Scummvm-git-logs] scummvm master -> 1d5060c9d18f45065ccbcac4b95f8cffddf822ce

whiterandrek whiterandrek at gmail.com
Mon May 25 22:35:20 UTC 2020


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
03aaeb3c56 PETKA: implemented QMessageObject::processReaction
3d3e0a745d PETKA: moved handling cursor opcode to cursor object
80c1f80168 PETKA: named constant in cursor object
1d5060c9d1 PETKA: implemented QObjectCursor::setAction


Commit: 03aaeb3c5683a3e0a64cb818fbb309cb485726a7
    https://github.com/scummvm/scummvm/commit/03aaeb3c5683a3e0a64cb818fbb309cb485726a7
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00

Commit Message:
PETKA: implemented QMessageObject::processReaction

Changed paths:
    engines/petka/interfaces/dialog_interface.cpp
    engines/petka/objects/heroes.cpp
    engines/petka/objects/object.cpp
    engines/petka/objects/object.h


diff --git a/engines/petka/interfaces/dialog_interface.cpp b/engines/petka/interfaces/dialog_interface.cpp
index 69a55db425..3e57b6c38c 100644
--- a/engines/petka/interfaces/dialog_interface.cpp
+++ b/engines/petka/interfaces/dialog_interface.cpp
@@ -143,7 +143,7 @@ void DialogInterface::onEndOpcode() {
 	if (_reaction) {
 		QReaction *reaction = _reaction;
 		_reaction = nullptr;
-		processSavedReaction(reaction, _sender);
+		_sender->processReaction(reaction);
 	}
 	_sender = nullptr;
 }
diff --git a/engines/petka/objects/heroes.cpp b/engines/petka/objects/heroes.cpp
index 2d52c0d11b..49b5f124ec 100644
--- a/engines/petka/objects/heroes.cpp
+++ b/engines/petka/objects/heroes.cpp
@@ -66,7 +66,7 @@ void QObjectPetka::processMessage(const QMessage &arg) {
 		if (msg.opcode == kWalked && _heroReaction) {
 			QReaction *reaction = _heroReaction;
 			_heroReaction = nullptr;
-			processSavedReaction(reaction, _sender);
+			_sender->processReaction(reaction);
 		}
 		QMessageObject::processMessage(msg);
 		if (msg.opcode == kSet || msg.opcode == kPlay) {
diff --git a/engines/petka/objects/object.cpp b/engines/petka/objects/object.cpp
index b3b50f1b50..0e3b96913c 100644
--- a/engines/petka/objects/object.cpp
+++ b/engines/petka/objects/object.cpp
@@ -70,41 +70,6 @@ QMessageObject::QMessageObject() {
 	_reaction = nullptr;
 }
 
-void processSavedReaction(QReaction *reaction, QMessageObject *sender) {
-	for (uint i = 0; i < reaction->messages.size(); ++i) {
-		QMessage &msg = reaction->messages[i];
-		if (msg.opcode == kCheck && g_vm->getQSystem()->findObject(msg.objId)->_status != msg.arg1) {
-			break;
-		}
-		g_vm->getQSystem()->addMessage(msg.objId, msg.opcode, msg.arg1, msg.arg2, msg.arg3, 0, sender);
-		bool processed = true;
-		switch (msg.opcode) {
-		case kDialog: {
-			g_vm->getQSystem()->_mainInterface->_dialog.setReaction(createReaction(reaction->messages.data() + i + 1, reaction->messages.end()));
-			break;
-		}
-		case kPlay: {
-			QMessageObject *obj = g_vm->getQSystem()->findObject(msg.objId);
-			obj->setReaction(msg.arg1, createReaction(reaction->messages.data() + i + 1, reaction->messages.end()));
-			break;
-		}
-		case kWalk:
-		case kWalkTo:
-			g_vm->getQSystem()->_petka->setReactionAfterWalk(i, reaction, sender, true);
-			return;
-		case kWalkVich:
-			g_vm->getQSystem()->_chapayev->setReactionAfterWalk(i, reaction, sender, true);
-			return;
-		default:
-			processed = false;
-			break;
-		}
-		if (processed)
-			break;
-	}
-	delete reaction;
-}
-
 void QMessageObject::processMessage(const QMessage &msg) {
 	bool reacted = false;
 	for (uint i = 0; i < _reactions.size(); ++i) {
@@ -119,47 +84,7 @@ void QMessageObject::processMessage(const QMessage &msg) {
 			g_vm->getBigDialogue()->setHandler(_id, msg.opcode);
 			g_vm->getQSystem()->_mainInterface->_dialog.setSender(this);
 		}
-		for (uint j = 0; j < r->messages.size(); ++j) {
-			QMessage &rMsg = r->messages[j];
-			if (rMsg.opcode == kCheck && g_vm->getQSystem()->findObject(rMsg.objId)->_status != rMsg.arg1) {
-				break;
-			}
-			if (rMsg.opcode == kIf &&
-				((rMsg.arg1 != 0xffff && rMsg.arg1 != msg.arg1) ||
-			    (rMsg.arg2 != -1 && rMsg.arg2 != msg.arg2) ||
-			    (rMsg.arg3 != -1 && rMsg.arg3 != msg.arg3))) {
-				break;
-			}
-			if (rMsg.opcode == kRandom && rMsg.arg2 != -1) {
-				rMsg.arg1 = (int16) g_vm->getRnd().getRandomNumber((uint) (rMsg.arg2 - 1));
-			}
-			g_vm->getQSystem()->addMessage(rMsg.objId, rMsg.opcode, rMsg.arg1, rMsg.arg2, rMsg.arg3, rMsg.unk,
-										   rMsg.sender);
-			bool processed = true;
-			switch (rMsg.opcode) {
-			case kDialog: {
-				g_vm->getQSystem()->_mainInterface->_dialog.setReaction(createReaction(r->messages.data() + j + 1, r->messages.end()));
-				break;
-			}
-			case kPlay: {
-				QMessageObject *obj = g_vm->getQSystem()->findObject(rMsg.objId);
-				obj->setReaction(rMsg.arg1, createReaction(r->messages.data() + j + 1, r->messages.end()));
-				break;
-			}
-			case kWalk:
-			case kWalkTo:
-				g_vm->getQSystem()->_petka->setReactionAfterWalk(j, r, this, false);
-				break;
-			case kWalkVich:
-				g_vm->getQSystem()->_chapayev->setReactionAfterWalk(j, r, this, false);
-				break;
-			default:
-				processed = false;
-				break;
-			}
-			if (processed)
-				break;
-		}
+		processReaction(r, &msg);
 		reacted = true;
 	}
 
@@ -247,7 +172,7 @@ void QMessageObject::processMessage(const QMessage &msg) {
 			if (_reaction && _reactionId == msg.arg1) {
 				QReaction *reaction = _reaction;
 				_reaction = nullptr;
-				processSavedReaction(reaction, this);
+				processReaction(reaction);
 			}
 			break;
 		case kStatus:
@@ -387,6 +312,53 @@ void QMessageObject::setReaction(int16 id, QReaction *reaction) {
 	_reactionId = id;
 }
 
+void QMessageObject::processReaction(QReaction *r, const QMessage *msg) {
+	bool deleteReaction = (msg == nullptr);
+	for (uint j = 0; j < r->messages.size(); ++j) {
+		QMessage &rMsg = r->messages[j];
+		if (rMsg.opcode == kCheck && g_vm->getQSystem()->findObject(rMsg.objId)->_status != rMsg.arg1) {
+			break;
+		}
+		if (msg && rMsg.opcode == kIf &&
+			((rMsg.arg1 != 0xffff && rMsg.arg1 != msg->arg1) ||
+			 (rMsg.arg2 != -1 && rMsg.arg2 != msg->arg2) ||
+			 (rMsg.arg3 != -1 && rMsg.arg3 != msg->arg3))) {
+			break;
+		}
+		if (msg && rMsg.opcode == kRandom && rMsg.arg2 != -1) {
+			rMsg.arg1 = (int16) g_vm->getRnd().getRandomNumber((uint) (rMsg.arg2 - 1));
+		}
+		g_vm->getQSystem()->addMessage(rMsg.objId, rMsg.opcode, rMsg.arg1, rMsg.arg2, rMsg.arg3, rMsg.unk,
+									   rMsg.sender);
+		bool processed = true;
+		switch (rMsg.opcode) {
+		case kDialog: {
+			g_vm->getQSystem()->_mainInterface->_dialog.setReaction(createReaction(r->messages.data() + j + 1, r->messages.end()));
+			break;
+		}
+		case kPlay: {
+			QMessageObject *obj = g_vm->getQSystem()->findObject(rMsg.objId);
+			obj->setReaction(rMsg.arg1, createReaction(r->messages.data() + j + 1, r->messages.end()));
+			break;
+		}
+		case kWalk:
+		case kWalkTo:
+			g_vm->getQSystem()->_petka->setReactionAfterWalk(j, r, this, deleteReaction);
+			return;
+		case kWalkVich:
+			g_vm->getQSystem()->_chapayev->setReactionAfterWalk(j, r, this, deleteReaction);
+			return;
+		default:
+			processed = false;
+			break;
+		}
+		if (processed)
+			break;
+	}
+	if (deleteReaction)
+		delete r;
+}
+
 QObject::QObject() {
 	_animate = true;
 	_updateZ = true;
diff --git a/engines/petka/objects/object.h b/engines/petka/objects/object.h
index 1b5bdcb098..ea439dc654 100644
--- a/engines/petka/objects/object.h
+++ b/engines/petka/objects/object.h
@@ -27,8 +27,6 @@
 
 namespace Petka {
 
-extern void processSavedReaction(QReaction *reaction, QMessageObject *sender);
-
 class QVisibleObject {
 public:
 	QVisibleObject();
@@ -57,6 +55,7 @@ public:
 	void show(bool v) override;
 	void setReaction(int16 id, QReaction *reaction);
 	virtual void processMessage(const QMessage &msg);
+	void processReaction(QReaction *reaction, const QMessage *msg = nullptr);
 
 public:
 	int32 _x;


Commit: 3d3e0a745d75306551660764009ac846eb101db6
    https://github.com/scummvm/scummvm/commit/3d3e0a745d75306551660764009ac846eb101db6
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00

Commit Message:
PETKA: moved handling cursor opcode to cursor object

Changed paths:
    engines/petka/objects/object.cpp
    engines/petka/objects/object_cursor.cpp
    engines/petka/objects/object_cursor.h


diff --git a/engines/petka/objects/object.cpp b/engines/petka/objects/object.cpp
index 0e3b96913c..d5770fbb1d 100644
--- a/engines/petka/objects/object.cpp
+++ b/engines/petka/objects/object.cpp
@@ -108,19 +108,7 @@ void QMessageObject::processMessage(const QMessage &msg) {
 			g_vm->getQSystem()->_mainInterface->_dialog.endUserMsg();
 			break;
 		case kCursor:
-			if (msg.arg1 == 0xffff) {
-				g_vm->getQSystem()->_cursor->returnInvItem();
-				g_vm->getQSystem()->_cursor->_resourceId = 5002;
-				g_vm->getQSystem()->_cursor->_actionType = 0;
-				g_vm->getQSystem()->_cursor->_invObj = nullptr;
-			} else {
-				g_vm->getQSystem()->_cursor->returnInvItem();
-				g_vm->getQSystem()->_cursor->_resourceId = msg.arg1;
-				g_vm->getQSystem()->_cursor->_actionType = kActionObjUse;
-				g_vm->getQSystem()->_cursor->_invObj = this;
-				_isShown = 0;
-				_isActive = 0;
-			}
+			g_vm->getQSystem()->_cursor->setInvItem(this, msg.arg1);
 			g_vm->videoSystem()->makeAllDirty();
 			break;
 		case kDialog:
diff --git a/engines/petka/objects/object_cursor.cpp b/engines/petka/objects/object_cursor.cpp
index 5ddf0f2847..a64bb079e1 100644
--- a/engines/petka/objects/object_cursor.cpp
+++ b/engines/petka/objects/object_cursor.cpp
@@ -116,4 +116,19 @@ void QObjectCursor::returnInvItem() {
 	}
 }
 
+void QObjectCursor::setInvItem(QMessageObject *item, uint16 resourceId) {
+	returnInvItem();
+	if (resourceId != 0xffff) {
+		_resourceId = resourceId;
+		_actionType = kActionObjUse;
+		_invObj = item;
+		item->_isShown = false;
+		item->_isActive = false;
+	} else {
+		_resourceId = 5002;
+		_actionType = 0;
+		_invObj = nullptr;
+	}
+}
+
 }
diff --git a/engines/petka/objects/object_cursor.h b/engines/petka/objects/object_cursor.h
index b007564859..297ff4bc20 100644
--- a/engines/petka/objects/object_cursor.h
+++ b/engines/petka/objects/object_cursor.h
@@ -46,6 +46,7 @@ public:
 	void draw() override;
 	void show(bool v) override;
 	bool isInPoint(int x, int y) override { return 0; }
+	void setInvItem(QMessageObject *item, uint16 resourceId);
 	void returnInvItem();
 
 public:


Commit: 80c1f80168257f8866fdd64f042d6a0d4c70b265
    https://github.com/scummvm/scummvm/commit/80c1f80168257f8866fdd64f042d6a0d4c70b265
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00

Commit Message:
PETKA: named constant in cursor object

Changed paths:
    engines/petka/objects/object_cursor.cpp


diff --git a/engines/petka/objects/object_cursor.cpp b/engines/petka/objects/object_cursor.cpp
index a64bb079e1..4c9ddca301 100644
--- a/engines/petka/objects/object_cursor.cpp
+++ b/engines/petka/objects/object_cursor.cpp
@@ -37,15 +37,17 @@
 
 namespace Petka {
 
+const int kResourceIdLook = 5002;
+
 QObjectCursor::QObjectCursor() {
 	_id = 4097;
 	_z = 1000;
-	_resourceId = 5002;
+	_resourceId = kResourceIdLook;
 	Common::Point pos = g_vm->getEventManager()->getMousePos();
 	_x = pos.x;
 	_y = pos.y;
-	g_vm->resMgr()->loadFlic(5002);
-	_actionType = kLook;
+	g_vm->resMgr()->loadFlic(kResourceIdLook);
+	_actionType = kActionLook;
 	_invObj = nullptr;
 	_name = "Cursor";
 }
@@ -125,8 +127,8 @@ void QObjectCursor::setInvItem(QMessageObject *item, uint16 resourceId) {
 		item->_isShown = false;
 		item->_isActive = false;
 	} else {
-		_resourceId = 5002;
-		_actionType = 0;
+		_resourceId = kResourceIdLook;
+		_actionType = kActionLook;
 		_invObj = nullptr;
 	}
 }


Commit: 1d5060c9d18f45065ccbcac4b95f8cffddf822ce
    https://github.com/scummvm/scummvm/commit/1d5060c9d18f45065ccbcac4b95f8cffddf822ce
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00

Commit Message:
PETKA: implemented QObjectCursor::setAction

Changed paths:
    engines/petka/interfaces/main.cpp
    engines/petka/objects/object_cursor.cpp
    engines/petka/objects/object_cursor.h
    engines/petka/objects/object_star.cpp


diff --git a/engines/petka/interfaces/main.cpp b/engines/petka/interfaces/main.cpp
index 69cf150927..a02431a3aa 100644
--- a/engines/petka/interfaces/main.cpp
+++ b/engines/petka/interfaces/main.cpp
@@ -214,14 +214,8 @@ void InterfaceMain::onRightButtonDown(const Common::Point p) {
 	QObjectCursor *cursor = g_vm->getQSystem()->_cursor.get();
 	if (!star->_isActive)
 		return;
-	if (g_vm->getQSystem()->_case.get()->_isShown && cursor->_actionType == 6) {
-		cursor->show(0);
-		cursor->_resourceId = 5005;
-		cursor->returnInvItem();
-		cursor->_actionType = 3;
-		cursor->_invObj = nullptr;
-		cursor->setCursorPos(p.x, p.y, 1);
-		cursor->show(1);
+	if (g_vm->getQSystem()->_case.get()->_isShown && cursor->_actionType == kActionObjUse) {
+		cursor->setAction(kActionTake);
 	} else {
 		if (!star->_isShown) {
 			FlicDecoder *flc = g_vm->resMgr()->loadFlic(star->_resourceId);
diff --git a/engines/petka/objects/object_cursor.cpp b/engines/petka/objects/object_cursor.cpp
index 4c9ddca301..4e0f823be6 100644
--- a/engines/petka/objects/object_cursor.cpp
+++ b/engines/petka/objects/object_cursor.cpp
@@ -37,16 +37,16 @@
 
 namespace Petka {
 
-const int kResourceIdLook = 5002;
+const int kCursorLook = 5002;
 
 QObjectCursor::QObjectCursor() {
 	_id = 4097;
 	_z = 1000;
-	_resourceId = kResourceIdLook;
+	_resourceId = kCursorLook;
 	Common::Point pos = g_vm->getEventManager()->getMousePos();
 	_x = pos.x;
 	_y = pos.y;
-	g_vm->resMgr()->loadFlic(kResourceIdLook);
+	g_vm->resMgr()->loadFlic(kCursorLook);
 	_actionType = kActionLook;
 	_invObj = nullptr;
 	_name = "Cursor";
@@ -127,10 +127,19 @@ void QObjectCursor::setInvItem(QMessageObject *item, uint16 resourceId) {
 		item->_isShown = false;
 		item->_isActive = false;
 	} else {
-		_resourceId = kResourceIdLook;
+		_resourceId = kCursorLook;
 		_actionType = kActionLook;
 		_invObj = nullptr;
 	}
 }
 
+void QObjectCursor::setAction(int actionType) {
+	show(false);
+	returnInvItem();
+	_resourceId = kCursorLook + actionType;
+	_actionType = actionType;
+	_invObj = nullptr;
+	show(true);
+}
+
 }
diff --git a/engines/petka/objects/object_cursor.h b/engines/petka/objects/object_cursor.h
index 297ff4bc20..842c27d17c 100644
--- a/engines/petka/objects/object_cursor.h
+++ b/engines/petka/objects/object_cursor.h
@@ -46,6 +46,7 @@ public:
 	void draw() override;
 	void show(bool v) override;
 	bool isInPoint(int x, int y) override { return 0; }
+	void setAction(int actionType);
 	void setInvItem(QMessageObject *item, uint16 resourceId);
 	void returnInvItem();
 
diff --git a/engines/petka/objects/object_star.cpp b/engines/petka/objects/object_star.cpp
index 23069dc915..53e9b99c61 100644
--- a/engines/petka/objects/object_star.cpp
+++ b/engines/petka/objects/object_star.cpp
@@ -75,11 +75,7 @@ void QObjectStar::onClick(int x, int y) {
 		g_vm->getQSystem()->_case->show(1);
 	} else {
 		QObjectCursor *cursor = g_vm->getQSystem()->_cursor.get();
-		cursor->show(0);
-		cursor->returnInvItem();
-		cursor->_resourceId = button + kFirstCursorId;
-		cursor->_actionType = button - 1;
-		cursor->show(1);
+		cursor->setAction(button - 1);
 	}
 	show(0);
 }




More information about the Scummvm-git-logs mailing list