[Scummvm-git-logs] scummvm master -> e7cb21bc6c9cb7d343fb2d0770abdffe55d2e2d8
sev-
noreply at scummvm.org
Wed Aug 28 03:14:16 UTC 2024
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0f4d038334 JANITORIAL: Fix indentation
19207e9e65 QDENGINE: Fixed loading minigame inis
b254e7a172 QDENGINE: Implement scroll.dll minigame for maski
031cf48eb9 QDENGINE: Initial code for MaskyOrder.dll from maski
c5f504ccbc QDENGINE: Fix MaskyOrder minigame
5e261f55ec QDENGINE: Added EN DASH to transCyrillic
e7cb21bc6c QDENGINE: Improved debug output
Commit: 0f4d038334ddc0223934e8a266001741dd1176ba
https://github.com/scummvm/scummvm/commit/0f4d038334ddc0223934e8a266001741dd1176ba
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-28T05:13:46+02:00
Commit Message:
JANITORIAL: Fix indentation
Changed paths:
engines/qdengine/minigames/tetris.h
diff --git a/engines/qdengine/minigames/tetris.h b/engines/qdengine/minigames/tetris.h
index 36c613fbe6a..b191be0d3cb 100644
--- a/engines/qdengine/minigames/tetris.h
+++ b/engines/qdengine/minigames/tetris.h
@@ -67,7 +67,7 @@ public:
_lastRowObj = _scene->object_interface(_scene->minigame_parameter("last_row"));
- return true;
+ return true;
}
bool quant(float dt) {
@@ -124,7 +124,7 @@ public:
}
private:
- int getActiveColumn() {
+ int getActiveColumn() {
if (_lastRowObj->is_state_active("0"))
return 0;
if (_lastRowObj->is_state_active("1"))
@@ -177,7 +177,7 @@ private:
return 24;
return 0;
- }
+ }
private:
const qdEngineInterface *_engine = nullptr;
Commit: 19207e9e65a7f15712a6fe6d61c7dcc9e615fcd8
https://github.com/scummvm/scummvm/commit/19207e9e65a7f15712a6fe6d61c7dcc9e615fcd8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-28T05:13:46+02:00
Commit Message:
QDENGINE: Fixed loading minigame inis
Changed paths:
engines/qdengine/qdcore/qd_minigame.cpp
engines/qdengine/qdcore/qd_minigame.h
engines/qdengine/qdcore/qd_minigame_config.cpp
engines/qdengine/qdcore/qd_minigame_config.h
engines/qdengine/qdcore/qd_setup.cpp
engines/qdengine/qdcore/qd_setup.h
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index 719f913cb84..fd12f5e05eb 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -140,7 +140,7 @@ bool qdMiniGame::load_script(const xml::tag *p) {
set_game_name(it->data());
break;
case QDSCR_MINIGAME_CONFIG_FILE:
- set_config_file_name(it->data());
+ set_config_file_name(Common::Path(it->data(), '\\'));
load_config();
_config.reserve(_config.size() + config_size);
break;
@@ -179,7 +179,7 @@ bool qdMiniGame::save_script(Common::WriteStream &fh, int indent) const {
}
if (!_config_file_name.empty()) {
- fh.writeString(Common::String::format(" config_file=\"%s\"", qdscr_XML_string(config_file_name())));
+ fh.writeString(Common::String::format(" config_file=\"%s\"", qdscr_XML_string(config_file_name().toString('\\'))));
}
if (!_dll_name.empty()) {
diff --git a/engines/qdengine/qdcore/qd_minigame.h b/engines/qdengine/qdcore/qd_minigame.h
index 7bcf73e8368..04170dd4b7a 100644
--- a/engines/qdengine/qdcore/qd_minigame.h
+++ b/engines/qdengine/qdcore/qd_minigame.h
@@ -47,10 +47,10 @@ public:
//! ÐниÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, вÑзÑваеÑÑÑ Ð¿Ñи ÑÑаÑÑе и пеÑезапÑÑке оÑновной игÑÑ.
bool init();
- const char *config_file_name() const {
- return _config_file_name.c_str();
+ const Common::Path config_file_name() const {
+ return _config_file_name;
}
- void set_config_file_name(const char *file_name) {
+ void set_config_file_name(const Common::Path file_name) {
_config_file_name = file_name;
}
bool has_config_file() const {
@@ -115,7 +115,7 @@ private:
//! ÐÐ¼Ñ Ð¿Ð¾Ð´Ð³ÑÑжаемой Ð´Ð»Ñ Ð¸Ð³ÑÑ dll.
Common::String _dll_name;
//! .ini Ñайл Ñ Ð½Ð°ÑÑÑойками игÑÑ.
- Common::String _config_file_name;
+ Common::Path _config_file_name;
//! ÐÐ¼Ñ Ð¸Ð³ÑÑ, по коÑоÑÐ¾Ð¼Ñ Ð¾Ð½Ð° иÑеÑÑÑ Ð² dll.
Common::String _game_name;
//! Ð¥Ñндл подгÑÑженной dll.
diff --git a/engines/qdengine/qdcore/qd_minigame_config.cpp b/engines/qdengine/qdcore/qd_minigame_config.cpp
index 40ae9d5e8fb..94b47422b20 100644
--- a/engines/qdengine/qdcore/qd_minigame_config.cpp
+++ b/engines/qdengine/qdcore/qd_minigame_config.cpp
@@ -92,30 +92,30 @@ bool qdMinigameConfigParameter::validate_data() {
return true;
}
-bool qdMinigameConfigParameter::load_ini(const char *ini_file, const char *ini_section) {
+bool qdMinigameConfigParameter::load_ini(const Common::Path ini_file, const char *ini_section) {
set_name(ini_section);
- const char *str = getIniKey(ini_file, ini_section, "type");
- if (strlen(str)) {
- if (!scumm_stricmp(str, "string"))
+ Common::String str = getIniKey(ini_file, ini_section, "type");
+ if (!str.empty()) {
+ if (str.equalsIgnoreCase("string"))
set_data_type(PRM_DATA_STRING);
- else if (!scumm_stricmp(str, "file"))
+ else if (str.equalsIgnoreCase("file"))
set_data_type(PRM_DATA_FILE);
- else if (!scumm_stricmp(str, "object"))
+ else if (str.equalsIgnoreCase("object"))
set_data_type(PRM_DATA_OBJECT);
}
str = getIniKey(ini_file, ini_section, "count");
- if (strlen(str))
- set_data_count(atoi(str));
+ if (!str.empty())
+ set_data_count(atoi(str.c_str()));
str = getIniKey(ini_file, ini_section, "value");
- if (strlen(str)) {
- set_data_string(str);
+ if (!str.empty()) {
+ set_data_string(str.c_str());
}
str = getIniKey(ini_file, ini_section, "comment");
- if (strlen(str))
- set_comment(str);
+ if (!str.empty())
+ set_comment(str.c_str());
return true;
}
diff --git a/engines/qdengine/qdcore/qd_minigame_config.h b/engines/qdengine/qdcore/qd_minigame_config.h
index 8542257e57d..9873be043f4 100644
--- a/engines/qdengine/qdcore/qd_minigame_config.h
+++ b/engines/qdengine/qdcore/qd_minigame_config.h
@@ -22,6 +22,8 @@
#ifndef QDENGINE_QDCORE_QD_MINIGAME_CONFIG_H
#define QDENGINE_QDCORE_QD_MINIGAME_CONFIG_H
+#include "common/path.h"
+
namespace QDEngine {
/// ÐонÑигÑÑаÑионнÑе даннÑе Ð´Ð»Ñ Ð¼Ð¸Ð½Ð¸Ð¸Ð³ÑÑ.
/**
@@ -117,7 +119,7 @@ public:
bool save_script(Common::WriteStream &fh, int indent = 0) const;
//! ÐагÑÑзка даннÑÑ
из .ini Ñайла.
- bool load_ini(const char *ini_file, const char *ini_section);
+ bool load_ini(const Common::Path ini_file, const char *ini_section);
private:
diff --git a/engines/qdengine/qdcore/qd_setup.cpp b/engines/qdengine/qdcore/qd_setup.cpp
index 1d14807524f..8058754cdb0 100644
--- a/engines/qdengine/qdcore/qd_setup.cpp
+++ b/engines/qdengine/qdcore/qd_setup.cpp
@@ -26,10 +26,11 @@
namespace QDEngine {
-bool enumerateIniSections(const char *fname, Common::INIFile::SectionList §ionList) {
+bool enumerateIniSections(const Common::Path fname, Common::INIFile::SectionList §ionList) {
Common::INIFile ini;
Common::Path iniFilePath(fname);
+ ini.allowNonEnglishCharacters();
ini.loadFromFile(iniFilePath);
sectionList = ini.getSections();
int size = sectionList.size();
@@ -41,10 +42,11 @@ bool enumerateIniSections(const char *fname, Common::INIFile::SectionList §i
return true;
}
-const char *getIniKey(const char *fname, const char *section, const char *key) {
+const Common::String getIniKey(const Common::Path fname, const char *section, const char *key) {
Common::INIFile ini;
Common::String buf;
+ ini.allowNonEnglishCharacters();
ini.loadFromFile(fname);
bool hasValue = ini.getKey(key, section, buf);
@@ -52,7 +54,7 @@ const char *getIniKey(const char *fname, const char *section, const char *key) {
return "";
}
- return buf.c_str();
+ return buf;
}
} // namespace QDEngine
diff --git a/engines/qdengine/qdcore/qd_setup.h b/engines/qdengine/qdcore/qd_setup.h
index f3e15857542..bd947ccd66b 100644
--- a/engines/qdengine/qdcore/qd_setup.h
+++ b/engines/qdengine/qdcore/qd_setup.h
@@ -26,8 +26,8 @@
namespace QDEngine {
-const char *getIniKey(const char *fname, const char *section, const char *key);
-bool enumerateIniSections(const char *fname, Common::INIFile::SectionList §ion_list);
+const Common::String getIniKey(const Common::Path fname, const char *section, const char *key);
+bool enumerateIniSections(const Common::Path fname, Common::INIFile::SectionList §ion_list);
} // namespace QDEngine
Commit: b254e7a172bc0664c87642fbcd8e1dd1e9e04f4a
https://github.com/scummvm/scummvm/commit/b254e7a172bc0664c87642fbcd8e1dd1e9e04f4a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-28T05:13:46+02:00
Commit Message:
QDENGINE: Implement scroll.dll minigame for maski
Changed paths:
A engines/qdengine/minigames/scroll.h
engines/qdengine/qdcore/qd_minigame.cpp
diff --git a/engines/qdengine/minigames/scroll.h b/engines/qdengine/minigames/scroll.h
new file mode 100644
index 00000000000..7eaa4e1fcc9
--- /dev/null
+++ b/engines/qdengine/minigames/scroll.h
@@ -0,0 +1,105 @@
+/* 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_SCROLL_H
+#define QDENGINE_MINIGAMES_SCROLL_H
+
+#include "common/debug.h"
+
+#include "qdengine/qd_fwd.h"
+#include "qdengine/qdcore/qd_minigame_interface.h"
+
+namespace QDEngine {
+
+class qdScrollMiniGame : public qdMiniGameInterface {
+public:
+ qdScrollMiniGame() {}
+ ~qdScrollMiniGame() {}
+
+ bool init(const qdEngineInterface *engine_interface) {
+ debugC(1, kDebugMinigames, "Scroll::init()");
+
+ _engine = engine_interface;
+ _scene = engine_interface->current_scene_interface();
+ if (!_scene)
+ return false;
+
+ _commandObj = _scene->object_interface(_scene->minigame_parameter("command_object"));
+
+ return true;
+ }
+
+ bool quant(float dt) {
+ debugC(3, kDebugMinigames, "Scroll::quant(%f)", dt);
+
+ mgVect2i pos = _engine->mouse_cursor_position();
+
+ if (pos.x < 25)
+ _commandObj->set_state("\xe2\xeb\xe5\xe2\xee"); // "влево"
+
+ if (pos.x > 775)
+ _commandObj->set_state("\xe2\xef\xf0\xe0\xe2\xee"); // "впÑаво"
+
+ if (pos.x > 25 && pos.x < 775)
+ _commandObj->set_state("\xed\xe5\xf2"); // "неÑ"
+
+ return true;
+ }
+
+ bool finit() {
+ debugC(1, kDebugMinigames, "Scroll::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 = 99 };
+ int version() const {
+ return INTERFACE_VERSION;
+ }
+
+private:
+ const qdEngineInterface *_engine = nullptr;
+ qdMinigameSceneInterface *_scene = nullptr;
+
+ qdMinigameObjectInterface *_commandObj = nullptr;
+
+};
+
+} // namespace QDEngine
+
+#endif // QDENGINE_MINIGAMES_SCROLL_H
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index fd12f5e05eb..7f9e505ab7b 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -35,6 +35,7 @@
// maski
#include "qdengine/minigames/kartiny.h"
+#include "qdengine/minigames/scroll.h"
#include "qdengine/minigames/tetris.h"
// 2mice1
@@ -269,9 +270,12 @@ bool qdMiniGame::load_interface() {
// maski_21_random.dll
// orchestra.dll
// scroll.dll
- if (_dll_name == "DLL\\tetris.dll") {
+ if (_dll_name == "Resource\\DLL\\tetris.dll") {
_interface = new qdTetrisMiniGame();
return true;
+ } else if (_dll_name == "Resource\\DLL\\scroll.dll") {
+ _interface = new qdScrollMiniGame();
+ return true;
// 3mice1
} else if (_dll_name == "DLL\\Book_gusenica.dll" || _dll_name == "DLL\\Book_les.dll"
Commit: 031cf48eb932d443a225f6fa7b54d622c63f6501
https://github.com/scummvm/scummvm/commit/031cf48eb932d443a225f6fa7b54d622c63f6501
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-28T05:13:46+02:00
Commit Message:
QDENGINE: Initial code for MaskyOrder.dll from maski
Changed paths:
A engines/qdengine/minigames/masky_order.h
engines/qdengine/qdcore/qd_minigame.cpp
diff --git a/engines/qdengine/minigames/masky_order.h b/engines/qdengine/minigames/masky_order.h
new file mode 100644
index 00000000000..9427b63f5fd
--- /dev/null
+++ b/engines/qdengine/minigames/masky_order.h
@@ -0,0 +1,334 @@
+/* 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_MASKY_ORDER_H
+#define QDENGINE_MINIGAMES_MASKY_ORDER_H
+
+#include "common/debug.h"
+
+#include "qdengine/qd_fwd.h"
+#include "qdengine/qdcore/qd_minigame_interface.h"
+
+namespace QDEngine {
+
+const int pieceCoordsFront[24] = {
+ 280, 93, 284, 163, 394, 140, 505, 120, 511, 225,
+ 392, 255, 296, 288, 444, 369, 309, 406, 446, 479,
+ 289, 478, 548, 420,
+};
+
+const int pieceCoordsBack[24] = {
+ 516, 94, 511, 162, 398, 139, 293, 120, 286, 227,
+ 404, 247, 500, 287, 353, 363, 488, 407, 354, 476,
+ 508, 478, 247, 420,
+};
+
+
+class qdMaskyOrderMiniGame : public qdMiniGameInterface {
+public:
+ qdMaskyOrderMiniGame() {
+ for (uint i = 0; i < ARRAYSIZE(_pieces); i++)
+ _pieces[i] = nullptr;
+ }
+ ~qdMaskyOrderMiniGame() {};
+
+ //! ÐниÑиализаÑÐ¸Ñ Ð¸Ð³ÑÑ.
+ bool init(const qdEngineInterface *engine_interface) {
+ debugC(1, kDebugMinigames, "MaskyOrder::init(), dll: %s lang: %d", _dll.c_str(), _language);
+
+ _engine = engine_interface;
+ _scene = _engine->current_scene_interface();
+ if (!_scene)
+ return false;
+
+ for (int i = 0; i < _numPieces; i++)
+ _pieces[i] = _scene->object_interface(_scene->minigame_parameter(Common::String::format("object_%i", i + 1).c_str()));
+
+ _finalObj = _scene->object_interface(_scene->minigame_parameter("final"));
+ _doneObj = _scene->object_interface(_scene->minigame_parameter("done_object"));
+ _object3Flag = _scene->object_interface(_scene->minigame_parameter("object_3_flag"));
+ _loadGameObj = _scene->object_interface(_scene->minigame_parameter("loadgame"));
+
+ _wasInited = false;
+
+ _isFinal = false;
+ _minDepthPiece = findMinDepthPiece();
+
+ return true;
+ }
+
+ //! ÐбÑÑÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ¸ игÑÑ, паÑамеÑÑ - вÑемÑ, коÑоÑое должно пÑойÑи в игÑе (в ÑекÑндаÑ
).
+ bool quant(float dt) {
+ debugC(3, kDebugMinigames, "MaskyOrder::quant(%f)", dt);
+
+ if (!_wasInited && _loadGameObj->is_state_active("\xed\xe5\xf2")) { // "неÑ"
+ _rotatingPiece = -1;
+ _currentPieceState = -1;
+ _pieceIsPut = false;
+ _isFinal = false;
+ _flipped = false;
+ _wasInited = true;
+ _loadGameObj->set_state("\xe4\xe0"); // "да"
+ }
+
+ if ( _object3Flag->is_state_active("\xe4\xe0")) { // "да"
+ _flipped = true;
+ _pieces[2]->set_state("back");
+ _object3Flag->set_state("\xed\xe5\xf2"); // "неÑ"
+
+ _minDepthPiece = findMinDepthPiece();
+
+ mgVect3f coords = _scene->screen2world_coords(_pieces[2]->screen_R(), _minDepthPiece);
+ _pieces[2]->set_R(coords);
+ }
+
+ if (_isFinal)
+ return true;
+
+ if (!checkSolution() || _scene->mouse_object_interface()) {
+ qdMinigameObjectInterface *mouseObj = _scene->mouse_object_interface();
+
+ if (_pieceIsPut) {
+ for (int i = 0; i < 12; i++) {
+ if (_pieces[i]->is_state_active("to_inv_flag_back")
+ || _pieces[i]->is_state_active("to_inv_flag_front")) {
+
+ if (_pieces[i]->is_state_active("to_inv_flag_back"))
+ _currentPieceState = _pieces[i]->state_index("inv_back");
+ else if (_pieces[i]->is_state_active("to_inv_flag_front"))
+ _currentPieceState = _pieces[i]->state_index("inv_front");
+
+ _rotatingPiece = i;
+ _pieces[i]->set_state("to_inv");
+ _pieceIsPut = false;
+ }
+ }
+ }
+
+ if (mouseObj) {
+ if (_rotatingPiece != -1) {
+ _pieces[_rotatingPiece]->set_state(_currentPieceState);
+ _currentPieceState = -1;
+ _rotatingPiece = -1;
+ }
+ }
+
+ if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_LEFT_DOWN)) {
+ mgVect2i mousePos = _engine->mouse_cursor_position();
+ qdMinigameObjectInterface *obj = _scene->mouse_object_interface();
+
+ if (obj) {
+ if (obj->is_state_active("inv_back"))
+ obj->set_state("back");
+ else if (obj->is_state_active("inv_front"))
+ obj->set_state("front");
+
+ _minDepthPiece -= 60.0;
+
+ mgVect3f coords = _scene->screen2world_coords(mousePos, _minDepthPiece);
+ obj->set_R(coords);
+
+ snapPieces();
+ } else {
+ _pieceIsPut = true;
+ }
+ }
+ }
+
+ if (_engine->is_mouse_event_active(qdmg::qdEngineInterfaceImpl::MOUSE_EV_RIGHT_DOWN)) {
+ qdMinigameObjectInterface *obj = _scene->mouse_object_interface();
+
+ if (obj) {
+ if (obj->is_state_active("inv_back"))
+ obj->set_state("inv_front");
+ else if (obj->is_state_active("inv_front"))
+ obj->set_state("inv_back");
+ }
+ }
+
+ return true;
+ }
+
+ bool checkSolution() {
+ if (_scene->mouse_object_interface())
+ return false;
+
+ if (_pieces[0]->is_state_active("front"))
+ for (int i = 0; i < 12; i++)
+ if (!_pieces[0]->is_state_active("front"))
+ return false;
+
+ if (_pieces[0]->is_state_active("back"))
+ for (int i = 0; i < 12; i++)
+ if (!_pieces[0]->is_state_active("back"))
+ return false;
+
+ mgVect2i piecePos;
+
+ if (_pieces[0]->is_state_active("front"))
+ for (int i = 0; i < _numPieces; i++) {
+ piecePos = _pieces[i]->screen_R();
+
+ if (ABS(pieceCoordsFront[i * 2 + 0] - piecePos.x) > 10 ||
+ ABS(pieceCoordsFront[i * 2 + 1] - piecePos.y) > 10)
+ return false;
+ }
+
+ if (_pieces[0]->is_state_active("back"))
+ for (int i = 0; i < _numPieces; i++) {
+ piecePos = _pieces[i]->screen_R();
+
+ if (ABS(pieceCoordsBack[i * 2 + 0] - piecePos.x) > 10 ||
+ ABS(pieceCoordsBack[i * 2 + 1] - piecePos.y) > 10)
+ return false;
+ }
+
+ _isFinal = true;
+ _finalObj->set_state("\xe4\xe0"); // "да"
+
+ setPiecePositions();
+
+ return true;
+ }
+
+ void snapPieces() {
+ mgVect2i piecePos;
+ mgVect3f newPiecePos;
+
+ for (int i = 0; i < 12; i++) {
+ piecePos = _pieces[i]->screen_R();
+ float depth = _scene->screen_depth(_pieces[i]->R());
+ bool modified = false;
+
+ if (_pieces[i]->is_state_active("front")) {
+ if (ABS(pieceCoordsFront[i * 2 + 0] - piecePos.x) <= 10 &&
+ ABS(pieceCoordsFront[i * 2 + 1] - piecePos.y) <= 10) {
+ piecePos.x = pieceCoordsFront[i * 2 + 0];
+ piecePos.y = pieceCoordsFront[i * 2 + 1];
+
+ modified = true;
+ }
+ }
+
+ if (_pieces[i]->is_state_active("back")) {
+ if (ABS(pieceCoordsBack[i * 2 + 0] - piecePos.x) <= 10 &&
+ ABS(pieceCoordsBack[i * 2 + 1] - piecePos.y) <= 10) {
+ piecePos.x = pieceCoordsBack[i * 2 + 0];
+ piecePos.y = pieceCoordsBack[i * 2 + 1];
+
+ modified = true;
+ }
+ }
+
+ if (modified) {
+ newPiecePos = _scene->screen2world_coords(piecePos, depth);
+ _pieces[i]->set_R(newPiecePos);
+ }
+ }
+ }
+
+ //! ÐеиниÑиализаÑÐ¸Ñ Ð¸Ð³ÑÑ.
+ bool finit() {
+ debugC(1, kDebugMinigames, "MaskyOrder::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:
+ float findMinDepthPiece() {
+ float min = 100000.0;
+
+ for (int i = 0; i < 12; i++) {
+ float depth = _scene->screen_depth(_pieces[i]->R());
+
+ if (min > depth)
+ min = depth;
+ }
+
+ return min;
+ }
+
+ void setPiecePositions() {
+ mgVect3f coords(1000.0, 1000.0, 0.0);
+
+ for (int i = 0; i < 12; i++) {
+ _pieces[i]->set_R(coords);
+ }
+
+ if (_pieces[0]->is_state_active("back"))
+ _doneObj->set_state("back");
+ else
+ _doneObj->set_state("front");
+ }
+
+private:
+ const qdEngineInterface *_engine = nullptr;
+ qdMinigameSceneInterface *_scene = nullptr;
+
+ qdMinigameObjectInterface *_pieces[12];
+
+ qdMinigameObjectInterface *_finalObj = nullptr;
+ qdMinigameObjectInterface *_doneObj = nullptr;
+ qdMinigameObjectInterface *_object3Flag = nullptr;
+ qdMinigameObjectInterface *_loadGameObj = nullptr;
+
+ bool _wasInited = false;
+ bool _isFinal = false;
+ bool _flipped = false;
+
+ float _minDepthPiece = 0.0;
+ int _rotatingPiece = -1;
+ bool _pieceIsPut = true;
+ int _currentPieceState = 0;
+
+ int _numPieces = 12;
+
+ Common::String _dll;
+ Common::Language _language;
+};
+
+} // namespace QDEngine
+
+#endif // QDENGINE_MINIGAMES_MASKY_ORDER_H
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index 7f9e505ab7b..31c9a62e33e 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -35,6 +35,7 @@
// maski
#include "qdengine/minigames/kartiny.h"
+#include "qdengine/minigames/masky_order.h"
#include "qdengine/minigames/scroll.h"
#include "qdengine/minigames/tetris.h"
@@ -276,6 +277,9 @@ bool qdMiniGame::load_interface() {
} else if (_dll_name == "Resource\\DLL\\scroll.dll") {
_interface = new qdScrollMiniGame();
return true;
+ } else if (_dll_name == "Resource\\DLL\\MaskyOrder.dll") {
+ _interface = new qdMaskyOrderMiniGame();
+ return true;
// 3mice1
} else if (_dll_name == "DLL\\Book_gusenica.dll" || _dll_name == "DLL\\Book_les.dll"
Commit: c5f504ccbc562b03f8f88d9af348d0d44fd8a55a
https://github.com/scummvm/scummvm/commit/c5f504ccbc562b03f8f88d9af348d0d44fd8a55a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-28T05:13:46+02:00
Commit Message:
QDENGINE: Fix MaskyOrder minigame
Changed paths:
engines/qdengine/minigames/masky_order.h
diff --git a/engines/qdengine/minigames/masky_order.h b/engines/qdengine/minigames/masky_order.h
index 9427b63f5fd..14da589368c 100644
--- a/engines/qdengine/minigames/masky_order.h
+++ b/engines/qdengine/minigames/masky_order.h
@@ -59,7 +59,7 @@ public:
if (!_scene)
return false;
- for (int i = 0; i < _numPieces; i++)
+ for (int i = 0; i < 12; i++)
_pieces[i] = _scene->object_interface(_scene->minigame_parameter(Common::String::format("object_%i", i + 1).c_str()));
_finalObj = _scene->object_interface(_scene->minigame_parameter("final"));
@@ -171,20 +171,22 @@ public:
if (_scene->mouse_object_interface())
return false;
- if (_pieces[0]->is_state_active("front"))
+ if (_pieces[0]->is_state_active("front")) {
for (int i = 0; i < 12; i++)
if (!_pieces[0]->is_state_active("front"))
return false;
-
- if (_pieces[0]->is_state_active("back"))
+ } else if (_pieces[0]->is_state_active("back")) {
for (int i = 0; i < 12; i++)
if (!_pieces[0]->is_state_active("back"))
return false;
+ } else {
+ return false;
+ }
mgVect2i piecePos;
if (_pieces[0]->is_state_active("front"))
- for (int i = 0; i < _numPieces; i++) {
+ for (int i = 0; i < 12; i++) {
piecePos = _pieces[i]->screen_R();
if (ABS(pieceCoordsFront[i * 2 + 0] - piecePos.x) > 10 ||
@@ -193,7 +195,7 @@ public:
}
if (_pieces[0]->is_state_active("back"))
- for (int i = 0; i < _numPieces; i++) {
+ for (int i = 0; i < 12; i++) {
piecePos = _pieces[i]->screen_R();
if (ABS(pieceCoordsBack[i * 2 + 0] - piecePos.x) > 10 ||
@@ -323,8 +325,6 @@ private:
bool _pieceIsPut = true;
int _currentPieceState = 0;
- int _numPieces = 12;
-
Common::String _dll;
Common::Language _language;
};
Commit: 5e261f55ec190e36b0aad62e7228c53242e1f740
https://github.com/scummvm/scummvm/commit/5e261f55ec190e36b0aad62e7228c53242e1f740
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-28T05:13:46+02:00
Commit Message:
QDENGINE: Added EN DASH to transCyrillic
Used in maski in some messages
Changed paths:
engines/qdengine/qdengine.cpp
diff --git a/engines/qdengine/qdengine.cpp b/engines/qdengine/qdengine.cpp
index 061611234ff..6c5874ace12 100644
--- a/engines/qdengine/qdengine.cpp
+++ b/engines/qdengine/qdengine.cpp
@@ -202,10 +202,16 @@ byte *transCyrillic(const Common::String &str) {
}
}
- if (!trans[j]) {
- warning("transCyrillic: no mapping for %d (0x%x)", *p, *p);
- tmp[i++] = '?';
- tmp[i++] = '?';
+ if (*p == 0x96) { // "â" -- EN DASH
+ tmp[i++] = 0xE2;
+ tmp[i++] = 0x80;
+ tmp[i++] = 0x93;
+ } else {
+ if (!trans[j]) {
+ warning("transCyrillic: no mapping for %d (0x%x)", *p, *p);
+ tmp[i++] = '?';
+ tmp[i++] = '?';
+ }
}
}
#endif
Commit: e7cb21bc6c9cb7d343fb2d0770abdffe55d2e2d8
https://github.com/scummvm/scummvm/commit/e7cb21bc6c9cb7d343fb2d0770abdffe55d2e2d8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-28T05:13:46+02:00
Commit Message:
QDENGINE: Improved debug output
Changed paths:
engines/qdengine/qdcore/util/WinVideo.cpp
diff --git a/engines/qdengine/qdcore/util/WinVideo.cpp b/engines/qdengine/qdcore/util/WinVideo.cpp
index 8a1a57eb3f6..840ccd75a69 100644
--- a/engines/qdengine/qdcore/util/WinVideo.cpp
+++ b/engines/qdengine/qdcore/util/WinVideo.cpp
@@ -76,7 +76,7 @@ bool winVideo::open_file(const Common::Path fname) {
_videostream = new Common::File();
if (!_videostream->open(fname)) {
- warning("WinVideo::open: Failed to open file %s", fname.toString().c_str());
+ warning("WinVideo::open: Failed to open file %s", transCyrillic(fname.toString()));
delete _videostream;
return false;
}
More information about the Scummvm-git-logs
mailing list