[Scummvm-git-logs] scummvm master -> f8f43eb2b852aeb897ad1550c116e860f5ea68b0

sev- noreply at scummvm.org
Fri Oct 11 13:12:35 UTC 2024


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

Summary:
22d5d14597 QDENGINE: Fix typo in class name
ff54d345ed QDENGINE: Initial code for 3mice2_kovrik.dll minigame
67dd88f89b QDENGINE: Complete 3mice2_kovrik.dll minigame
4035d9d74c QDENGINE: Initial code for 3mice2_sudoku.dll minigame
bde8bfbb9c QDENGINE: Reduced code duplication
0c56541fa3 QDENGINE: Further work on 3mice2_sudoku.dll minigame
eab3f92705 QDENGINE: String and logic fixes in 3mice2_sudoku.dll
f8f43eb2b8 QDENGINE: Complete 3mice2_sudoku.dll minigame


Commit: 22d5d14597a1d2c105885be592c6511d579baaa0
    https://github.com/scummvm/scummvm/commit/22d5d14597a1d2c105885be592c6511d579baaa0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:24+02:00

Commit Message:
QDENGINE: Fix typo in class name

Changed paths:
    engines/qdengine/minigames/3mice2_sbor_karty.h
    engines/qdengine/qdcore/qd_minigame.cpp


diff --git a/engines/qdengine/minigames/3mice2_sbor_karty.h b/engines/qdengine/minigames/3mice2_sbor_karty.h
index ca5484bf65b..eb84da083b7 100644
--- a/engines/qdengine/minigames/3mice2_sbor_karty.h
+++ b/engines/qdengine/minigames/3mice2_sbor_karty.h
@@ -29,13 +29,13 @@
 
 namespace QDEngine {
 
-class qd3mince2SborKartyMiniGame : public qdMiniGameInterface {
+class qd3mice2SborKartyMiniGame : public qdMiniGameInterface {
 public:
-	qd3mince2SborKartyMiniGame() {}
-	~qd3mince2SborKartyMiniGame() {}
+	qd3mice2SborKartyMiniGame() {}
+	~qd3mice2SborKartyMiniGame() {}
 
 	bool init(const qdEngineInterface *engine_interface) {
-		debugC(1, kDebugMinigames, "3mince2SborKarty::init()");
+		debugC(1, kDebugMinigames, "3mice2SborKarty::init()");
 
 		_engine = engine_interface;
 		_scene = engine_interface->current_scene_interface();
@@ -56,7 +56,7 @@ public:
 	}
 
 	bool quant(float dt) {
-		debugC(3, kDebugMinigames, "3mince2SborKarty::quant(%f)", dt);
+		debugC(3, kDebugMinigames, "3mice2SborKarty::quant(%f)", dt);
 
 		char tmp[20];
 
@@ -154,7 +154,7 @@ public:
 	}
 
 	bool finit() {
-		debugC(1, kDebugMinigames, "3mince2SborKarty::finit()");
+		debugC(1, kDebugMinigames, "3mice2SborKarty::finit()");
 
 		if (_scene)  {
 			_engine->release_scene_interface(_scene);
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index 0304909ea04..bf008cf58c1 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -337,7 +337,7 @@ bool qdMiniGame::load_interface() {
 		// 3Mice2_raskr3.dll
 		// 3Mice2_raskr4.dll
 		} else if (_dll_name == "DLL\\3Mice2_sbor_karty.dll") {
-			_interface = new qd3mince2SborKartyMiniGame();
+			_interface = new qd3mice2SborKartyMiniGame();
 			return true;
 		// 3Mice2_states.dll
 		// 3Mice2_sudoku.dll


Commit: ff54d345edaee14d5f5ec572cfb8602657d5abf8
    https://github.com/scummvm/scummvm/commit/ff54d345edaee14d5f5ec572cfb8602657d5abf8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:24+02:00

Commit Message:
QDENGINE: Initial code for 3mice2_kovrik.dll minigame

Changed paths:
  A engines/qdengine/minigames/3mice2_kovrik.h
    engines/qdengine/qdcore/qd_minigame.cpp


diff --git a/engines/qdengine/minigames/3mice2_kovrik.h b/engines/qdengine/minigames/3mice2_kovrik.h
new file mode 100644
index 00000000000..eafd9715896
--- /dev/null
+++ b/engines/qdengine/minigames/3mice2_kovrik.h
@@ -0,0 +1,221 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef QDENGINE_MINIGAMES_3MICE2_KOVRIK_H
+#define QDENGINE_MINIGAMES_3MICE2_KOVRIK_H
+
+#include "common/debug.h"
+
+#include "qdengine/qd_fwd.h"
+#include "qdengine/qdcore/qd_minigame_interface.h"
+
+namespace QDEngine {
+
+class qd3mice2KovrikMiniGame : public qdMiniGameInterface {
+public:
+	qd3mice2KovrikMiniGame() {}
+	~qd3mice2KovrikMiniGame() {}
+
+	bool init(const qdEngineInterface *engine_interface) {
+		debugC(1, kDebugMinigames, "3mice2Kovrik::init()");
+
+		_engine = engine_interface;
+		_scene = engine_interface->current_scene_interface();
+		if (!_scene)
+			return false;
+
+		for (int i = 1; i <= 41; i++)
+			_objects[i] = _scene->object_interface(Common::String::format("object@%i#", i).c_str());
+
+		for (int i = 1; i <= 41; i++)
+			_objects[42 + i] = _scene->object_interface(Common::String::format("inv_object@%i#", i).c_str());
+
+		_objDone = _scene->object_interface("$done");
+		_objSound = _scene->object_interface("$sound");
+		_timePassed = 0.0;
+
+		return true;
+	}
+
+	bool quant(float dt) {
+		debugC(3, kDebugMinigames, "3mice2Kovrik::quant(%f)", dt);
+
+		char tmp[20];
+
+		_timePassed += dt;
+
+		qdMinigameObjectInterface *obj = _scene->mouse_click_object_interface();
+
+		if (obj) {
+			const char *name = obj->name();
+
+			if (strstr(name, "object@") && obj->is_state_active("base") && !_scene->mouse_object_interface()) {
+				const char *from = strstr(name, "@");
+				const char *to = strstr(name, "#");
+
+				Common::strlcpy(tmp, from + 1, to - from);
+
+				obj->set_state("hide");
+
+				int num = atol(tmp);
+				debugC(4, kDebugMinigames, "to_inv: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+				_objects[num + 42]->set_state("to_inv");
+			}
+
+			_scene->release_object_interface(obj);
+		}
+
+		if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_RIGHT_DOWN)) {
+			obj = _scene->mouse_object_interface();
+
+			if (obj) {
+				const char *name = obj->name();
+				const char *from = strstr(name, "@");
+				const char *to = strstr(name, "#");
+
+				Common::strlcpy(tmp, from + 1, to - from);
+
+				obj->set_state("del");
+
+				int num = atol(tmp);
+				debugC(4, kDebugMinigames, "base: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+
+				_objects[num]->set_state("base");
+
+				_scene->release_object_interface(obj);
+			}
+		}
+
+		if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_LEFT_DOWN)) {
+			obj = _scene->mouse_object_interface();
+
+			if (obj) {
+				qdMinigameObjectInterface *obj2 = _scene->mouse_hover_object_interface();
+
+				if (obj2) {
+					const char *name = obj->name();
+					const char *from = strstr(name, "@");
+
+					if (from && !_objSound->is_state_active("\xed\xe5\xf2") // "нет"
+							 && !_objSound->is_state_active("\xed\xe5\xf2\x31")) { // "нет1"
+
+						const char *to = strstr(name, "#");
+
+						Common::strlcpy(tmp, from + 1, to - from);
+
+						int num = atol(tmp);
+						debugC(4, kDebugMinigames, "part1: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+
+						name = obj2->name();
+						from = strstr(name, "@");
+						to = strstr(name, "#");
+
+						Common::strlcpy(tmp, from + 1, to - from);
+
+						int num2 = atol(tmp);
+						debugC(4, kDebugMinigames, "part2: num2 is: %d  tmp: '%s' for name: '%s'", num2, tmp, name);
+
+						if (num == num2) {
+							obj->set_state("del");
+							_objects[num]->set_state("kovrik");
+						}
+
+						if ((num == 29 && num2 == 31) || (num == 31 && num2 == 29) ||
+							(num == 26 && (num2 == 31 || num2 == 29)) ||
+							(num == 3  && num2 == 4) ||
+							(num == 21 && num2 == 22) ||
+							(num == 1  && num2 == 2) ||
+							(num == 37 && (num2 == 35 || num2 == 32 || num2 == 34 || num2 == 38))) {
+							obj->set_state("del");
+							_objects[num]->set_state("kovrik");
+						}
+
+						_scene->release_object_interface(obj);
+					}
+
+					if (_objSound->is_state_active("\xed\xe5\xf2") // "нет"
+							|| _objSound->is_state_active("\xed\xe5\xf2\x31")); // "нет1"
+						_objSound->set_state("\xe4\xe0");	// "да"
+				}
+			}
+		}
+
+		if (_timePassed > 1.0) {
+			if (checkSolution())
+				_objDone->set_state("\xe4\xe0");	// "да"
+
+			_timePassed = 0.0;
+		}
+
+		return true;
+	}
+
+	bool finit() {
+		debugC(1, kDebugMinigames, "3mice2Kovrik::finit()");
+
+		if (_scene)  {
+			_engine->release_scene_interface(_scene);
+			_scene = 0;
+		}
+
+ 		return true;
+	}
+
+	bool new_game(const qdEngineInterface *engine_interface) {
+		return true;
+	}
+
+	int save_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, char *buffer, int buffer_size) {
+		return 0;
+	}
+
+	int load_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, const char *buffer, int buffer_size) {
+		return 0;
+	}
+
+	enum { INTERFACE_VERSION = 112 };
+	int version() const {
+		return INTERFACE_VERSION;
+	}
+
+private:
+	bool checkSolution() {
+		for (int i = 1; i <= 41; i++)
+			if (!_objects[i]->is_state_active("kovrik"))
+				return false;
+
+		return true;
+	}
+
+private:
+	const qdEngineInterface *_engine = nullptr;
+	qdMinigameSceneInterface *_scene = nullptr;
+
+	qdMinigameObjectInterface *_objects[84];
+	qdMinigameObjectInterface *_objDone = nullptr;
+	qdMinigameObjectInterface *_objSound = nullptr;
+
+	float _timePassed;
+};
+
+} // namespace QDEngine
+
+#endif // QDENGINE_MINIGAMES_3MICE2_KOVRIK_H
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index bf008cf58c1..1867c33ba5c 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -53,6 +53,7 @@
 
 // 3mice2
 #include "qdengine/minigames/3mice2_sbor_karty.h"
+#include "qdengine/minigames/3mice2_kovrik.h"
 
 
 namespace QDEngine {
@@ -339,6 +340,9 @@ bool qdMiniGame::load_interface() {
 		} else if (_dll_name == "DLL\\3Mice2_sbor_karty.dll") {
 			_interface = new qd3mice2SborKartyMiniGame();
 			return true;
+		} else if (_dll_name == "DLL\\3Mice2_kovrik.dll") {
+			_interface = new qd3mice2KovrikMiniGame();
+			return true;
 		// 3Mice2_states.dll
 		// 3Mice2_sudoku.dll
 		// 3Mice2_testo.dll


Commit: 67dd88f89b867f35215bdef1ffd058a8cc0b59cc
    https://github.com/scummvm/scummvm/commit/67dd88f89b867f35215bdef1ffd058a8cc0b59cc
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:24+02:00

Commit Message:
QDENGINE: Complete 3mice2_kovrik.dll minigame

Changed paths:
    engines/qdengine/minigames/3mice2_kovrik.h


diff --git a/engines/qdengine/minigames/3mice2_kovrik.h b/engines/qdengine/minigames/3mice2_kovrik.h
index eafd9715896..ed308416f98 100644
--- a/engines/qdengine/minigames/3mice2_kovrik.h
+++ b/engines/qdengine/minigames/3mice2_kovrik.h
@@ -114,15 +114,13 @@ public:
 					const char *name = obj->name();
 					const char *from = strstr(name, "@");
 
-					if (from && !_objSound->is_state_active("\xed\xe5\xf2") // "нет"
-							 && !_objSound->is_state_active("\xed\xe5\xf2\x31")) { // "нет1"
-
+					if (from && strstr(obj2->name(), "@")) {
 						const char *to = strstr(name, "#");
 
 						Common::strlcpy(tmp, from + 1, to - from);
 
 						int num = atol(tmp);
-						debugC(4, kDebugMinigames, "part1: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+						debugC(2, kDebugMinigames, "part1: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
 
 						name = obj2->name();
 						from = strstr(name, "@");
@@ -131,19 +129,20 @@ public:
 						Common::strlcpy(tmp, from + 1, to - from);
 
 						int num2 = atol(tmp);
-						debugC(4, kDebugMinigames, "part2: num2 is: %d  tmp: '%s' for name: '%s'", num2, tmp, name);
+						debugC(2, kDebugMinigames, "part2: num2 is: %d  tmp: '%s' for name: '%s'", num2, tmp, name);
 
 						if (num == num2) {
 							obj->set_state("del");
 							_objects[num]->set_state("kovrik");
 						}
 
-						if ((num == 29 && num2 == 31) || (num == 31 && num2 == 29) ||
-							(num == 26 && (num2 == 31 || num2 == 29)) ||
-							(num == 3  && num2 == 4) ||
-							(num == 21 && num2 == 22) ||
-							(num == 1  && num2 == 2) ||
-							(num == 37 && (num2 == 35 || num2 == 32 || num2 == 34 || num2 == 38))) {
+						if ((num2 == 29 && num == 31) ||
+							(num2 == 31 && num == 29) ||
+							(num2 == 26 && (num == 31 || num == 29)) ||
+							(num2 == 3  && num == 4) ||
+							(num2 == 22 && num == 21) ||
+							(num2 == 1  && num == 2) ||
+							(num2 == 37 && (num == 35 || num == 32 || num == 34 || num == 38))) {
 							obj->set_state("del");
 							_objects[num]->set_state("kovrik");
 						}


Commit: 4035d9d74c5eb48290fe653122eb4ec2079938db
    https://github.com/scummvm/scummvm/commit/4035d9d74c5eb48290fe653122eb4ec2079938db
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:24+02:00

Commit Message:
QDENGINE: Initial code for 3mice2_sudoku.dll minigame

Changed paths:
  A engines/qdengine/minigames/3mice2_sudoku.h
    engines/qdengine/qdcore/qd_minigame.cpp


diff --git a/engines/qdengine/minigames/3mice2_sudoku.h b/engines/qdengine/minigames/3mice2_sudoku.h
new file mode 100644
index 00000000000..e3617de7d6d
--- /dev/null
+++ b/engines/qdengine/minigames/3mice2_sudoku.h
@@ -0,0 +1,175 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef QDENGINE_MINIGAMES_3MICE2_SUDOKU_H
+#define QDENGINE_MINIGAMES_3MICE2_SUDOKU_H
+
+#include "common/debug.h"
+
+#include "qdengine/qd_fwd.h"
+#include "qdengine/qdcore/qd_minigame_interface.h"
+
+namespace QDEngine {
+
+class qd3mice2SudokuMiniGame : public qdMiniGameInterface {
+public:
+	qd3mice2SudokuMiniGame() {}
+	~qd3mice2SudokuMiniGame() {}
+
+	bool init(const qdEngineInterface *engine_interface) {
+		debugC(1, kDebugMinigames, "3mice2Sudoku::init()");
+
+		_engine = engine_interface;
+		_scene = engine_interface->current_scene_interface();
+		if (!_scene)
+			return false;
+
+		_figures[0] = _scene->object_interface("figure at 1#");
+		_figures[1] = _scene->object_interface("figure at 2#");
+		_figures[2] = _scene->object_interface("figure at 3#");
+		_figures[3] = _scene->object_interface("figure at 4#");
+		_figures[4] = _scene->object_interface("figure at 5#");
+		_figures[5] = _scene->object_interface("figure at 6#");
+		_figures[6] = _scene->object_interface("figure at 7#");
+		_figures[7] = _scene->object_interface("figure at 8#");
+		_figures[8] = _scene->object_interface("figure at 9#");
+		_figures[9] = _scene->object_interface("figure at 10#");
+		_figures[10] = _scene->object_interface("figure at 11#");
+		_figures[11] = _scene->object_interface("figure at 12#");
+		_figures[12] = _scene->object_interface("figure at 13#");
+
+		_figures[13] = _scene->object_interface("figure at 1#inv");
+		_figures[14] = _scene->object_interface("figure at 2#inv");
+		_figures[15] = _scene->object_interface("figure at 3#inv");
+		_figures[16] = _scene->object_interface("figure at 4#inv");
+		_figures[17] = _scene->object_interface("figure at 5#inv");
+		_figures[18] = _scene->object_interface("figure at 6#inv");
+		_figures[19] = _scene->object_interface("figure at 7#inv");
+		_figures[20] = _scene->object_interface("figure at 8#inv");
+		_figures[21] = _scene->object_interface("figure at 9#inv");
+		_figures[22] = _scene->object_interface("figure at 10#inv");
+		_figures[23] = _scene->object_interface("figure at 11#inv");
+		_figures[24] = _scene->object_interface("figure at 12#inv");
+		_figures[25] = _scene->object_interface("figure at 13#inv");
+
+		_pos[0] = 20;
+		_pos[1] = 10;
+		_pos[2] = 26;
+		_pos[3] = 1;
+		_pos[4] = 3;
+		_pos[5] = 17;
+		_pos[6] = 8;
+		_pos[7] = 20;
+		_pos[8] = 6;
+		_pos[9] = 16;
+		_pos[10] = 17;
+		_pos[11] = 14;
+		_pos[12] = 18;
+
+		_objDone = _scene->object_interface("$done");
+		_objResult = _scene->object_interface("$результат");
+		_objSettled = _scene->object_interface("$разложено");
+		_objReset = _scene->object_interface("$обнулить");
+		_objTarget = _scene->object_interface("target");
+		_objLoading = _scene->object_interface("$загрузка");
+
+		if (_objLoading->is_state_active("no")) {
+			memset(_someArray, 0xFFu, sizeof(_someArray));
+
+			_objLoading->set_state("yes");
+
+			return true;
+		} else {
+			if (_objLoading->is_state_active("yes")) {
+				for (int i = 0; i < 13; i++) {
+					_objTarget->set_state(Common::String::format("%d", i + 1).c_str());
+					_objTarget->update_screen_R();
+
+					_pieceCoords[i] = _objTarget->screen_R();
+
+					_someArray[i] = -1;
+				}
+
+				for (int i = 0; i < 13; i++) {
+					if (_figures[i]->screen_R().x != _pieceCoords[i].x &&
+						_figures[i]->screen_R().y != _pieceCoords[i].y)
+						_someArray[i] = i;
+				}
+			}
+		}
+
+		return true;
+	}
+
+	bool quant(float dt) {
+		debugC(3, kDebugMinigames, "3mice2Sudoku::quant(%f)", dt);
+
+		return true;
+	}
+
+	bool finit() {
+		debugC(1, kDebugMinigames, "3mice2Sudoku::finit()");
+
+		if (_scene)  {
+			_engine->release_scene_interface(_scene);
+			_scene = 0;
+		}
+
+ 		return true;
+	}
+
+	bool new_game(const qdEngineInterface *engine_interface) {
+		return true;
+	}
+
+	int save_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, char *buffer, int buffer_size) {
+		return 0;
+	}
+
+	int load_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, const char *buffer, int buffer_size) {
+		return 0;
+	}
+
+	enum { INTERFACE_VERSION = 112 };
+	int version() const {
+		return INTERFACE_VERSION;
+	}
+
+private:
+	const qdEngineInterface *_engine = nullptr;
+	qdMinigameSceneInterface *_scene = nullptr;
+
+	qdMinigameObjectInterface *_figures[26];
+	int _pos[13];
+	mgVect2i _pieceCoords[13];
+	int _someArray[13];
+
+	qdMinigameObjectInterface *_objDone = nullptr;
+	qdMinigameObjectInterface *_objResult = nullptr;
+	qdMinigameObjectInterface *_objSettled = nullptr;
+	qdMinigameObjectInterface *_objReset = nullptr;
+	qdMinigameObjectInterface *_objTarget = nullptr;
+	qdMinigameObjectInterface *_objLoading = nullptr;
+};
+
+} // namespace QDEngine
+
+#endif // QDENGINE_MINIGAMES_3MICE2_SUDOKU_H
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index 1867c33ba5c..aed27409212 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -54,6 +54,7 @@
 // 3mice2
 #include "qdengine/minigames/3mice2_sbor_karty.h"
 #include "qdengine/minigames/3mice2_kovrik.h"
+#include "qdengine/minigames/3mice2_sudoku.h"
 
 
 namespace QDEngine {


Commit: bde8bfbb9c3ccad40a3261d07ecbce638eefb882
    https://github.com/scummvm/scummvm/commit/bde8bfbb9c3ccad40a3261d07ecbce638eefb882
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:25+02:00

Commit Message:
QDENGINE: Reduced code duplication

Changed paths:
    engines/qdengine/minigames/3mice2_kovrik.h
    engines/qdengine/minigames/3mice2_sbor_karty.h


diff --git a/engines/qdengine/minigames/3mice2_kovrik.h b/engines/qdengine/minigames/3mice2_kovrik.h
index ed308416f98..6d80ebbb3ff 100644
--- a/engines/qdengine/minigames/3mice2_kovrik.h
+++ b/engines/qdengine/minigames/3mice2_kovrik.h
@@ -58,8 +58,6 @@ public:
 	bool quant(float dt) {
 		debugC(3, kDebugMinigames, "3mice2Kovrik::quant(%f)", dt);
 
-		char tmp[20];
-
 		_timePassed += dt;
 
 		qdMinigameObjectInterface *obj = _scene->mouse_click_object_interface();
@@ -68,15 +66,10 @@ public:
 			const char *name = obj->name();
 
 			if (strstr(name, "object@") && obj->is_state_active("base") && !_scene->mouse_object_interface()) {
-				const char *from = strstr(name, "@");
-				const char *to = strstr(name, "#");
-
-				Common::strlcpy(tmp, from + 1, to - from);
-
 				obj->set_state("hide");
 
-				int num = atol(tmp);
-				debugC(4, kDebugMinigames, "to_inv: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+				int num = getObjNum(name);
+				debugC(4, kDebugMinigames, "to_inv: num is: %d for name: '%s'", num, name);
 				_objects[num + 42]->set_state("to_inv");
 			}
 
@@ -88,15 +81,10 @@ public:
 
 			if (obj) {
 				const char *name = obj->name();
-				const char *from = strstr(name, "@");
-				const char *to = strstr(name, "#");
-
-				Common::strlcpy(tmp, from + 1, to - from);
-
 				obj->set_state("del");
 
-				int num = atol(tmp);
-				debugC(4, kDebugMinigames, "base: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+				int num = getObjNum(name);
+				debugC(4, kDebugMinigames, "base: num is: %d for name: '%s'", num, name);
 
 				_objects[num]->set_state("base");
 
@@ -112,24 +100,14 @@ public:
 
 				if (obj2) {
 					const char *name = obj->name();
-					const char *from = strstr(name, "@");
-
-					if (from && strstr(obj2->name(), "@")) {
-						const char *to = strstr(name, "#");
-
-						Common::strlcpy(tmp, from + 1, to - from);
 
-						int num = atol(tmp);
-						debugC(2, kDebugMinigames, "part1: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+					if (strstr(name, "@") && strstr(obj2->name(), "@")) {
+						int num = getObjNum(name);
+						debugC(2, kDebugMinigames, "part1: num is: %d for name: '%s'", num, name);
 
 						name = obj2->name();
-						from = strstr(name, "@");
-						to = strstr(name, "#");
-
-						Common::strlcpy(tmp, from + 1, to - from);
-
-						int num2 = atol(tmp);
-						debugC(2, kDebugMinigames, "part2: num2 is: %d  tmp: '%s' for name: '%s'", num2, tmp, name);
+						int num2 = getObjNum(name);
+						debugC(2, kDebugMinigames, "part2: num2 is: %d for name: '%s'", num2, name);
 
 						if (num == num2) {
 							obj->set_state("del");
@@ -204,6 +182,16 @@ private:
 		return true;
 	}
 
+	int getObjNum(const char *name) {
+		const char *from = strstr(name, "@");
+		const char *to = strstr(name, "#");
+		char tmp[20];
+
+		Common::strlcpy(tmp, from + 1, to - from);
+
+		return atol(tmp);
+	}
+
 private:
 	const qdEngineInterface *_engine = nullptr;
 	qdMinigameSceneInterface *_scene = nullptr;
diff --git a/engines/qdengine/minigames/3mice2_sbor_karty.h b/engines/qdengine/minigames/3mice2_sbor_karty.h
index eb84da083b7..6e5d969948a 100644
--- a/engines/qdengine/minigames/3mice2_sbor_karty.h
+++ b/engines/qdengine/minigames/3mice2_sbor_karty.h
@@ -58,8 +58,6 @@ public:
 	bool quant(float dt) {
 		debugC(3, kDebugMinigames, "3mice2SborKarty::quant(%f)", dt);
 
-		char tmp[20];
-
 		_timePassed += dt;
 
 		qdMinigameObjectInterface *obj = _scene->mouse_click_object_interface();
@@ -68,15 +66,10 @@ public:
 			const char *name = obj->name();
 
 			if (strstr(name, "object@") && obj->is_state_active("base") && !_scene->mouse_object_interface()) {
-				const char *from = strstr(name, "@");
-				const char *to = strstr(name, "#");
-
-				Common::strlcpy(tmp, from + 1, to - from);
-
 				obj->set_state("hide");
 
-				int num = atol(tmp);
-				debugC(4, kDebugMinigames, "to_inv: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+				int num = getObjNum(name);
+				debugC(4, kDebugMinigames, "to_inv: num is: %d for name: '%s'", num, name);
 				_objects[num + 11]->set_state("to_inv");
 			}
 
@@ -88,15 +81,11 @@ public:
 
 			if (obj) {
 				const char *name = obj->name();
-				const char *from = strstr(name, "@");
-				const char *to = strstr(name, "#");
-
-				Common::strlcpy(tmp, from + 1, to - from);
 
 				obj->set_state("del");
 
-				int num = atol(tmp);
-				debugC(4, kDebugMinigames, "base: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+				int num = getObjNum(name);
+				debugC(4, kDebugMinigames, "base: num is: %d for name: '%s'", num, name);
 
 				_objects[num]->set_state("base");
 
@@ -113,24 +102,14 @@ public:
 
 				if (obj2) {
 					const char *name = obj->name();
-					const char *from = strstr(name, "@");
-
-					if (from) {
-						const char *to = strstr(name, "#");
-
-						Common::strlcpy(tmp, from + 1, to - from);
 
-						int num = atol(tmp);
-						debugC(4, kDebugMinigames, "part1: num is: %d  tmp: '%s' for name: '%s'", num, tmp, name);
+					if (strstr(name, "@")) {
+						int num = getObjNum(name);
+						debugC(4, kDebugMinigames, "part1: num is: %d for name: '%s'", num, name);
 
 						name = obj2->name();
-						from = strstr(name, "@");
-						to = strstr(name, "#");
-
-						Common::strlcpy(tmp, from + 1, to - from);
-
-						int num2 = atol(tmp);
-						debugC(4, kDebugMinigames, "part2: num2 is: %d  tmp: '%s' for name: '%s'", num2, tmp, name);
+						int num2 = getObjNum(name);
+						debugC(4, kDebugMinigames, "part2: num2 is: %d for name: '%s'", num2, name);
 
 						if (num == num2) {
 							obj->set_state("del");
@@ -190,6 +169,16 @@ private:
 		return true;
 	}
 
+	int getObjNum(const char *name) {
+		const char *from = strstr(name, "@");
+		const char *to = strstr(name, "#");
+		char tmp[20];
+
+		Common::strlcpy(tmp, from + 1, to - from);
+
+		return atol(tmp);
+	}
+
 private:
 	const qdEngineInterface *_engine = nullptr;
 	qdMinigameSceneInterface *_scene = nullptr;


Commit: 0c56541fa32fae5f8e2428c806e52a01e95cd952
    https://github.com/scummvm/scummvm/commit/0c56541fa32fae5f8e2428c806e52a01e95cd952
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:25+02:00

Commit Message:
QDENGINE: Further work on 3mice2_sudoku.dll minigame

Changed paths:
    engines/qdengine/minigames/3mice2_sudoku.h


diff --git a/engines/qdengine/minigames/3mice2_sudoku.h b/engines/qdengine/minigames/3mice2_sudoku.h
index e3617de7d6d..786b4682201 100644
--- a/engines/qdengine/minigames/3mice2_sudoku.h
+++ b/engines/qdengine/minigames/3mice2_sudoku.h
@@ -92,7 +92,7 @@ public:
 		_objLoading = _scene->object_interface("$загрузка");
 
 		if (_objLoading->is_state_active("no")) {
-			memset(_someArray, 0xFFu, sizeof(_someArray));
+			memset(_pieceTargets, 0xFFu, sizeof(_pieceTargets));
 
 			_objLoading->set_state("yes");
 
@@ -105,14 +105,16 @@ public:
 
 					_pieceCoords[i] = _objTarget->screen_R();
 
-					_someArray[i] = -1;
+					_pieceTargets[i] = -1;
 				}
 
-				for (int i = 0; i < 13; i++) {
-					if (_figures[i]->screen_R().x != _pieceCoords[i].x &&
-						_figures[i]->screen_R().y != _pieceCoords[i].y)
-						_someArray[i] = i;
-				}
+				for (int j = 0; j < 13; j++) {
+					for (int i = 0; i < 13; i++) {
+						if (_figures[i]->screen_R().x - _pieceCoords[j].x < 2 &&
+							_figures[i]->screen_R().y - _pieceCoords[j].y < 2)
+							_pieceTargets[i] = j;
+					}
+					}
 			}
 		}
 
@@ -122,6 +124,99 @@ public:
 	bool quant(float dt) {
 		debugC(3, kDebugMinigames, "3mice2Sudoku::quant(%f)", dt);
 
+		if (_objReset->is_state_active("да")) {
+			for (int i = 0; i < 13; i++) {
+				_pieceTargets[i] = -1;
+				_figures[i]->set_state("base");
+			}
+
+			_objReset->set_state("нет");
+		}
+
+		if (checkSolution()) {
+			_objDone->set_state("да");
+			_objResult->set_state("правильно");
+		} else {
+			_objDone->set_state("нет");
+			_objResult->set_state("не правильно");
+		}
+
+		if (checkInitPos())
+			_objSettled->set_state("да");
+		else
+			_objSettled->set_state("нет");
+
+		qdMinigameObjectInterface *mouseObj = _scene->mouse_object_interface();
+		qdMinigameObjectInterface *clickObj = _scene->mouse_click_object_interface();
+		qdMinigameObjectInterface *hoverObj = _scene->mouse_hover_object_interface();
+
+		if (mouseObj) {
+			int num = getObjNum(mouseObj->name());
+
+			if (hoverObj) {
+				int num2 = -1;
+
+				if (strstr(hoverObj->name(), "zone@"))
+					num2 = getObjNum(hoverObj->name());
+
+				if (num2 == -1 || posIsSet(num2 - 1))
+					_figures[num + 12]->set_state("inv");
+				else
+					_figures[num + 12]->set_state("inv_active");
+
+			} else {
+				_figures[num + 12]->set_state("inv");
+			}
+		}
+
+		if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_LEFT_DOWN) && clickObj && !mouseObj) {
+			int num = -1;
+
+			if (strstr(clickObj->name(), "figure")) {
+				num = getObjNum(clickObj->name());
+
+				if (num > -1) {
+					_figures[num]->set_state("hide");
+					_figures[num + 12]->set_state("to_inv");
+				}
+			}
+
+			resetFigure(num - 1);
+		}
+
+		if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_LEFT_DOWN) &&
+			mouseObj &&
+			clickObj &&
+			strstr(mouseObj->name(), "figure") &&
+			strstr(mouseObj->name(), "inv") &&
+			strstr(clickObj->name(), "zone@")) {
+
+			int num = getObjNum(clickObj->name());
+			int num2 =getObjNum(mouseObj->name());
+
+			if (num > -1 && num2 > -1 && !posIsSet(num - 1)) {
+				_objTarget->set_state(Common::String::format("%d", num).c_str());
+				_objTarget->update_screen_R();
+
+				_figures[num2 + 12]->set_state("del");
+				_figures[num2]->set_state("target");
+
+				mgVect2i pos = _objTarget->screen_R();
+				pos.y += _pos[num2 - 1];
+
+				_figures[num2 - 1]->set_R(_scene->screen2world_coords(pos, 0));
+
+				_pos[num + 12] = num2 - 1;
+			}
+		}
+
+		if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_RIGHT_DOWN) && mouseObj) {
+			int num = getObjNum(mouseObj->name());
+
+			_figures[num]->set_state("base");
+			_figures[num + 12]->set_state("del");
+		}
+
 		return true;
 	}
 
@@ -153,6 +248,43 @@ public:
 		return INTERFACE_VERSION;
 	}
 
+private:
+	bool checkSolution() {
+		for (int i = 0; i < 13; i++)
+			if (_pieceTargets[i] != i)
+				return false;
+
+		return true;
+	}
+
+	bool checkInitPos() {
+		for (int i = 0; i < 13; i++)
+			if (_pieceTargets[i] == -1)
+				return false;
+
+		return true;
+	}
+
+	void resetFigure(int pos) {
+		for (int i = 0; i < 13; i++)
+			if (_pieceTargets[i] == pos)
+				_pieceTargets[i] = -1;
+	}
+
+	bool posIsSet(int pos) {
+		return _pieceTargets[pos] != -1;
+	}
+
+	int getObjNum(const char *name) {
+		const char *from = strstr(name, "@");
+		const char *to = strstr(name, "#");
+		char tmp[20];
+
+		Common::strlcpy(tmp, from + 1, to - from);
+
+		return atol(tmp);
+	}
+
 private:
 	const qdEngineInterface *_engine = nullptr;
 	qdMinigameSceneInterface *_scene = nullptr;
@@ -160,7 +292,7 @@ private:
 	qdMinigameObjectInterface *_figures[26];
 	int _pos[13];
 	mgVect2i _pieceCoords[13];
-	int _someArray[13];
+	int _pieceTargets[13];
 
 	qdMinigameObjectInterface *_objDone = nullptr;
 	qdMinigameObjectInterface *_objResult = nullptr;


Commit: eab3f9270561467c67a91d9689bb4e90395e79f6
    https://github.com/scummvm/scummvm/commit/eab3f9270561467c67a91d9689bb4e90395e79f6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:25+02:00

Commit Message:
QDENGINE: String and logic fixes in 3mice2_sudoku.dll

Changed paths:
    engines/qdengine/minigames/3mice2_sudoku.h
    engines/qdengine/qdcore/qd_minigame.cpp


diff --git a/engines/qdengine/minigames/3mice2_sudoku.h b/engines/qdengine/minigames/3mice2_sudoku.h
index 786b4682201..bd1559535d9 100644
--- a/engines/qdengine/minigames/3mice2_sudoku.h
+++ b/engines/qdengine/minigames/3mice2_sudoku.h
@@ -85,14 +85,15 @@ public:
 		_pos[12] = 18;
 
 		_objDone = _scene->object_interface("$done");
-		_objResult = _scene->object_interface("$результат");
-		_objSettled = _scene->object_interface("$разложено");
-		_objReset = _scene->object_interface("$обнулить");
+		_objResult = _scene->object_interface("$\xf0\xe5\xe7\xf3\xeb\xfc\xf2\xe0\xf2"); // "$результат"
+		_objSettled = _scene->object_interface("$\xf0\xe0\xe7\xeb\xee\xe6\xe5\xed\xee"); // "$разложено"
+		_objReset = _scene->object_interface("$\xee\xe1\xed\xf3\xeb\xe8\xf2\xfc"); // "$обнулить"
 		_objTarget = _scene->object_interface("target");
-		_objLoading = _scene->object_interface("$загрузка");
+		_objLoading = _scene->object_interface("$\xe7\xe0\xe3\xf0\xf3\xe7\xea\xe0"); // "$загрузка"
 
 		if (_objLoading->is_state_active("no")) {
-			memset(_pieceTargets, 0xFFu, sizeof(_pieceTargets));
+			for (int i = 0; i < 13; i++)
+				_pieceTargets[i] = -1;
 
 			_objLoading->set_state("yes");
 
@@ -124,27 +125,27 @@ public:
 	bool quant(float dt) {
 		debugC(3, kDebugMinigames, "3mice2Sudoku::quant(%f)", dt);
 
-		if (_objReset->is_state_active("да")) {
+		if (_objReset->is_state_active("\xe4\xe0")) {	// "да"
 			for (int i = 0; i < 13; i++) {
 				_pieceTargets[i] = -1;
 				_figures[i]->set_state("base");
 			}
 
-			_objReset->set_state("нет");
+			_objReset->set_state("\xed\xe5\xf2"); // "нет"
 		}
 
 		if (checkSolution()) {
-			_objDone->set_state("да");
-			_objResult->set_state("правильно");
+			_objDone->set_state("\xe4\xe0");	// "да"
+			_objResult->set_state("\xef\xf0\xe0\xe2\xe8\xeb\xfc\xed\xee"); // "правильно"
 		} else {
-			_objDone->set_state("нет");
-			_objResult->set_state("не правильно");
+			_objDone->set_state("\xed\xe5\xf2"); // "нет"
+			_objResult->set_state("\xed\xe5\x20\xef\xf0\xe0\xe2\xe8\xeb\xfc\xed\xee"); // "не правильно"
 		}
 
 		if (checkInitPos())
-			_objSettled->set_state("да");
+			_objSettled->set_state("\xe4\xe0");	// "да"
 		else
-			_objSettled->set_state("нет");
+			_objSettled->set_state("\xed\xe5\xf2"); // "нет"
 
 		qdMinigameObjectInterface *mouseObj = _scene->mouse_object_interface();
 		qdMinigameObjectInterface *clickObj = _scene->mouse_click_object_interface();
@@ -174,9 +175,10 @@ public:
 
 			if (strstr(clickObj->name(), "figure")) {
 				num = getObjNum(clickObj->name());
+				debugC(2, kDebugMinigames, "clickObj: zone is: %d for name: '%s'", num, clickObj->name());
 
 				if (num > -1) {
-					_figures[num]->set_state("hide");
+					_figures[num - 1]->set_state("hide");
 					_figures[num + 12]->set_state("to_inv");
 				}
 			}
@@ -194,12 +196,15 @@ public:
 			int num = getObjNum(clickObj->name());
 			int num2 =getObjNum(mouseObj->name());
 
+			debugC(2, kDebugMinigames, "clickObj: zone is: %d for name: '%s'", num, clickObj->name());
+			debugC(2, kDebugMinigames, "mouseObj: zone is: %d for name: '%s'", num2, mouseObj->name());
+
 			if (num > -1 && num2 > -1 && !posIsSet(num - 1)) {
 				_objTarget->set_state(Common::String::format("%d", num).c_str());
 				_objTarget->update_screen_R();
 
 				_figures[num2 + 12]->set_state("del");
-				_figures[num2]->set_state("target");
+				_figures[num2 - 1]->set_state("target");
 
 				mgVect2i pos = _objTarget->screen_R();
 				pos.y += _pos[num2 - 1];
@@ -213,7 +218,9 @@ public:
 		if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_RIGHT_DOWN) && mouseObj) {
 			int num = getObjNum(mouseObj->name());
 
-			_figures[num]->set_state("base");
+			debugC(2, kDebugMinigames, "mouseObj: zone is: %d for name: '%s'", num, mouseObj->name());
+
+			_figures[num - 1]->set_state("base");
 			_figures[num + 12]->set_state("del");
 		}
 
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index aed27409212..ba71895d19d 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -331,6 +331,15 @@ bool qdMiniGame::load_interface() {
 		// puzzle.dll
 
 		// 3mice2
+		} else if (_dll_name == "DLL\\3Mice2_sbor_karty.dll") {
+			_interface = new qd3mice2SborKartyMiniGame();
+			return true;
+		} else if (_dll_name == "DLL\\3Mice2_kovrik.dll") {
+			_interface = new qd3mice2KovrikMiniGame();
+			return true;
+		} else if (_dll_name == "DLL\\3Mice2_sudoku.dll") {
+			_interface = new qd3mice2SudokuMiniGame();
+			return true;
 		// 3Mice2_babochka.dll
 		// 3Mice2_kovrik.dll
 		// 3Mice2_plate.dll
@@ -338,14 +347,7 @@ bool qdMiniGame::load_interface() {
 		// 3Mice2_raskr2.dll
 		// 3Mice2_raskr3.dll
 		// 3Mice2_raskr4.dll
-		} else if (_dll_name == "DLL\\3Mice2_sbor_karty.dll") {
-			_interface = new qd3mice2SborKartyMiniGame();
-			return true;
-		} else if (_dll_name == "DLL\\3Mice2_kovrik.dll") {
-			_interface = new qd3mice2KovrikMiniGame();
-			return true;
 		// 3Mice2_states.dll
-		// 3Mice2_sudoku.dll
 		// 3Mice2_testo.dll
 
 		// dogncat


Commit: f8f43eb2b852aeb897ad1550c116e860f5ea68b0
    https://github.com/scummvm/scummvm/commit/f8f43eb2b852aeb897ad1550c116e860f5ea68b0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-11T15:12:25+02:00

Commit Message:
QDENGINE: Complete 3mice2_sudoku.dll minigame

Changed paths:
    engines/qdengine/minigames/3mice2_sudoku.h


diff --git a/engines/qdengine/minigames/3mice2_sudoku.h b/engines/qdengine/minigames/3mice2_sudoku.h
index bd1559535d9..e309f758eed 100644
--- a/engines/qdengine/minigames/3mice2_sudoku.h
+++ b/engines/qdengine/minigames/3mice2_sudoku.h
@@ -211,7 +211,7 @@ public:
 
 				_figures[num2 - 1]->set_R(_scene->screen2world_coords(pos, 0));
 
-				_pos[num + 12] = num2 - 1;
+				_pieceTargets[num - 1] = num2 - 1;
 			}
 		}
 




More information about the Scummvm-git-logs mailing list