[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