[Scummvm-git-logs] scummvm master -> 20e9aac9072cc8b945669cd3e037047448e33f96

whiterandrek whiterandrek at gmail.com
Thu May 21 20:39:24 UTC 2020


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

Summary:
4680781692 PETKA: implemented GoTo opcode
20e9aac907 PETKA: fix comparison between signed and unsigned


Commit: 4680781692bac8dd78581b80ba6e1e605acbfe1d
    https://github.com/scummvm/scummvm/commit/4680781692bac8dd78581b80ba6e1e605acbfe1d
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-21T23:37:47+03:00

Commit Message:
PETKA: implemented GoTo opcode

Changed paths:
    engines/petka/objects/object_bg.cpp
    engines/petka/objects/object_bg.h
    engines/petka/q_system.h


diff --git a/engines/petka/objects/object_bg.cpp b/engines/petka/objects/object_bg.cpp
index 66cca0e5d5..1b559e730b 100644
--- a/engines/petka/objects/object_bg.cpp
+++ b/engines/petka/objects/object_bg.cpp
@@ -69,20 +69,17 @@ void QObjectBG::processMessage(const QMessage &msg) {
 	case kNoMap:
 		_showMap = 0;
 		break;
-	case kGoTo: {
-		g_vm->getQSystem()->_mainInterface->loadRoom(_id, false);
-		g_vm->videoSystem()->makeAllDirty();
-		QMessageObject *obj = g_vm->getQSystem()->findObject(_id);
-		g_vm->getQSystem()->_petka->setPos(obj->_walkX, obj->_walkY);
-		g_vm->getQSystem()->_chapayev->setPos(obj->_walkX, obj->_walkY - 2);
+	case kGoTo:
+		goTo();
 		break;
-	}
 	case kSetSeq:
 		g_vm->getQSystem()->_sequenceInterface->start(_id);
 		break;
 	case kEndSeq:
 		g_vm->getQSystem()->_sequenceInterface->stop();
 		break;
+	default:
+		break;
 	}
 
 }
@@ -97,4 +94,51 @@ void QObjectBG::draw() {
 	}
 }
 
+void QObjectBG::goTo() {
+	QSystem *sys = g_vm->getQSystem();
+
+	sys->_petka->stopWalk();
+	sys->_chapayev->stopWalk();
+
+	int oldRoomId = sys->_mainInterface->_roomId;
+	sys->_mainInterface->loadRoom(_id, false);
+
+	QMessageObject *oldRoom = sys->findObject(oldRoomId);
+
+	Common::ScopedPtr<Common::SeekableReadStream> bgsStream(g_vm->openFile("BGs.ini", false));
+	Common::INIFile bgsIni;
+	bgsIni.allowNonEnglishCharacters();
+	bgsIni.loadFromStream(*bgsStream);
+
+	Common::String entranceName;
+	if (bgsIni.getKey(oldRoom->_name, _name, entranceName)) {
+		setEntrance(entranceName);
+		return;
+	}
+
+	Common::Array<QObjectBG> &bgs = sys->_bgs;
+	for (uint i = 0; i < bgs.size(); ++i) {
+		if (bgsIni.getKey(bgs[i]._name, _name, entranceName)) {
+			setEntrance(entranceName);
+			break;
+		}
+	}
+}
+
+void QObjectBG::setEntrance(const Common::String &name) {
+	QSystem *sys = g_vm->getQSystem();
+	QMessageObject *entrance = sys->findObject(name);
+	if (entrance) {
+		sys->_petka->_z = 0;
+		sys->_chapayev->_z = 0;
+
+		sys->_petka->setPos(entrance->_walkX, entrance->_walkY);
+		sys->_chapayev->setPos(entrance->_walkX, entrance->_walkY - 2);
+
+		sys->_xOffset = CLIP(entrance->_walkX - 320, 0, sys->_sceneWidth - 640);
+		sys->_field6C = sys->_xOffset;
+	}
+	g_vm->videoSystem()->makeAllDirty();
+}
+
 }
diff --git a/engines/petka/objects/object_bg.h b/engines/petka/objects/object_bg.h
index 2e654d0ed6..948428e956 100644
--- a/engines/petka/objects/object_bg.h
+++ b/engines/petka/objects/object_bg.h
@@ -32,6 +32,8 @@ public:
 	QObjectBG();
 	void processMessage(const QMessage &msg) override;
 	void draw() override;
+	void goTo();
+	void setEntrance(const Common::String &name);
 
 public:
 	int _showMap;
diff --git a/engines/petka/q_system.h b/engines/petka/q_system.h
index 2b57084b71..1a1f8f2968 100644
--- a/engines/petka/q_system.h
+++ b/engines/petka/q_system.h
@@ -103,6 +103,11 @@ public:
 	int _fxId;
 	int _musicId;
 
+	int _sceneWidth;
+	int _xOffset;
+
+	int _field6C;
+
 	QObjectBG *_room;
 };
 


Commit: 20e9aac9072cc8b945669cd3e037047448e33f96
    https://github.com/scummvm/scummvm/commit/20e9aac9072cc8b945669cd3e037047448e33f96
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-21T23:38:56+03:00

Commit Message:
PETKA: fix comparison between signed and unsigned

Changed paths:
    engines/petka/video.cpp


diff --git a/engines/petka/video.cpp b/engines/petka/video.cpp
index 276dc7f7ae..9d55054e3d 100644
--- a/engines/petka/video.cpp
+++ b/engines/petka/video.cpp
@@ -118,7 +118,7 @@ void VideoSystem::setShake(bool shake) {
 void VideoSystem::sort() {
 	Common::Array<QVisibleObject *> &objs = g_vm->getQSystem()->_currInterface->_objs;
 	for (uint i = 0; i < objs.size() - 1; ++i) {
-		int minIndex = i;
+		uint minIndex = i;
 		for (uint j = i + 1; j < objs.size(); ++j) {
 			if (objs[j]->_z < objs[minIndex]->_z) {
 				minIndex = j;




More information about the Scummvm-git-logs mailing list