[Scummvm-git-logs] scummvm master -> 8a5adecce19e04e7466aee0a4fd3dc60c279d917
sev-
noreply at scummvm.org
Tue Aug 27 10:15:44 UTC 2024
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
cc5cbe47bc QDENGINE: Initial code for kartiny.dll used in maski
a9dcaa48bd QDENGINE: Documented minigame_interface_version
8f9637b368 QDENGINE: More work on kartiny.dll
b4aa12bbaf QDENGINE: Implemented qdKartinyMiniGameInterface::quant()
8a5adecce1 QDENGINE: Implemented rest of kartiny.dll
Commit: cc5cbe47bcef8d22557b6f3f45b751007a3b762c
https://github.com/scummvm/scummvm/commit/cc5cbe47bcef8d22557b6f3f45b751007a3b762c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-27T12:15:28+02:00
Commit Message:
QDENGINE: Initial code for kartiny.dll used in maski
Changed paths:
A engines/qdengine/minigames/kartiny.h
engines/qdengine/qdcore/qd_minigame.cpp
diff --git a/engines/qdengine/minigames/kartiny.h b/engines/qdengine/minigames/kartiny.h
new file mode 100644
index 00000000000..7d6436d9a91
--- /dev/null
+++ b/engines/qdengine/minigames/kartiny.h
@@ -0,0 +1,121 @@
+/* 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_KARTINY_H
+#define QDENGINE_MINIGAMES_KARTINY_H
+
+#include "common/debug.h"
+
+#include "qdengine/qd_fwd.h"
+#include "qdengine/qdcore/qd_minigame_interface.h"
+
+namespace QDEngine {
+
+class qdKartinyMiniGameInterface : public qdMiniGameInterface {
+public:
+ qdKartinyMiniGameInterface() {}
+ ~qdKartinyMiniGameInterface() {}
+
+ //! ÐниÑиализаÑÐ¸Ñ Ð¸Ð³ÑÑ.
+ bool init(const qdEngineInterface *engine_interface) {
+ debugC(1, kDebugMinigames, "Kartiny::init()");
+
+ _engine = engine_interface;
+ _scene = engine_interface->current_scene_interface();
+ if (!_scene)
+ return 0;
+
+ _bg_clickObj = _scene->object_interface(_scene->minigame_parameter("zad_click_flag_name"));
+ _bg1_l2Obj = _scene->object_interface(_scene->minigame_parameter("zad1_l2_object_name"));
+ _bg2_l2Obj = _scene->object_interface(_scene->minigame_parameter("zad2_l2_object_name"));
+ _bg3_l2Obj = _scene->object_interface(_scene->minigame_parameter("zad3_l2_object_name"));
+ _bg4_l2Obj = _scene->object_interface(_scene->minigame_parameter("zad4_l2_object_name"));
+ _doneObj = _scene->object_interface(_scene->minigame_parameter("done"));
+ _startObj = _scene->object_interface(_scene->minigame_parameter("start"));
+ _activateObj = _scene->object_interface(_scene->minigame_parameter("activate"));
+ _zFlagObj = _scene->object_interface(_scene->minigame_parameter("z_flag"));
+ _startObj2 = _scene->object_interface(_scene->minigame_parameter("start"));
+
+ _wasInited = 0;
+ _artDepth = -1.0;
+ return true;
+ }
+
+ //! ÐбÑÑÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ¸ игÑÑ, паÑамеÑÑ - вÑемÑ, коÑоÑое должно пÑойÑи в игÑе (в ÑекÑндаÑ
).
+ bool quant(float dt) {
+ debugC(3, kDebugMinigames, "Kartiny::quant(%f)", dt);
+
+ return true;
+ }
+
+ //! ÐеиниÑиализаÑÐ¸Ñ Ð¸Ð³ÑÑ.
+ bool finit() {
+ debugC(1, kDebugMinigames, "Kartiny::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 *_bg_clickObj = nullptr;
+ qdMinigameObjectInterface *_bg1_l2Obj = nullptr;
+ qdMinigameObjectInterface *_bg2_l2Obj = nullptr;
+ qdMinigameObjectInterface *_bg3_l2Obj = nullptr;
+ qdMinigameObjectInterface *_bg4_l2Obj = nullptr;
+ qdMinigameObjectInterface *_doneObj = nullptr;
+ qdMinigameObjectInterface *_startObj = nullptr;
+ qdMinigameObjectInterface *_activateObj = nullptr;
+ qdMinigameObjectInterface *_zFlagObj = nullptr;
+ qdMinigameObjectInterface *_startObj2 = nullptr;
+
+ bool _wasInited = false;
+ float _artDepth = -1.0;
+};
+
+} // namespace QDEngine
+
+#endif // QDENGINE_MINIGAMES_KARTINY_H
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index afaeef6d09e..b3473d650f4 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -32,6 +32,11 @@
#include "qdengine/qdcore/qd_engine_interface.h"
#include "qdengine/minigames/qd_empty_minigame_interface.h"
+
+// maski
+#include "qdengine/minigames/kartiny.h"
+
+// 2mice1
#include "qdengine/minigames/book_all.h"
#include "qdengine/minigames/puzzle_all.h"
Commit: a9dcaa48bdf4f7029d879e50a83e57eb748c6b3b
https://github.com/scummvm/scummvm/commit/a9dcaa48bdf4f7029d879e50a83e57eb748c6b3b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-27T12:15:31+02:00
Commit Message:
QDENGINE: Documented minigame_interface_version
Changed paths:
engines/qdengine/qd_runtime.cpp
engines/qdengine/qdcore/qd_minigame_interface.h
diff --git a/engines/qdengine/qd_runtime.cpp b/engines/qdengine/qd_runtime.cpp
index 0ba801b200d..f53c8a02723 100644
--- a/engines/qdengine/qd_runtime.cpp
+++ b/engines/qdengine/qd_runtime.cpp
@@ -112,9 +112,9 @@ void searchTagMap(int id, int targetVal) {
static int detectVersion(Common::String gameID) {
if (gameID == "karliknos") {
- return 20030919; // QDSCR_GAME_TITLE = 182, 06b1cf45d
+ return 20030919; // QDSCR_GAME_TITLE = 182, 06b1cf45d (repo-vss)
} else if (gameID == "nupogodi3" && g_engine->getLanguage() == Common::RU_RUS) {
- return 20031014; // QDSCR_TEXT_DB = 184, d864cc279
+ return 20031014; // QDSCR_TEXT_DB = 184, d864cc279 (repo-vss)
} else if (gameID == "nupogodi3" && g_engine->getLanguage() == Common::LT_LTU) {
return 20031206; // QDSCR_TEXT_DB = 185
} else if (gameID == "pilots3") {
@@ -128,7 +128,7 @@ static int detectVersion(Common::String gameID) {
} else if (gameID == "mng") {
return 20050101; // QDSCR_GLOBAL_DEPEND = 214
} else if (gameID == "maski") {
- return 20060129; // QDSCR_GAME_TITLE = 214
+ return 20060129; // QDSCR_GAME_TITLE = 214, 54bcf92 (repo-git)
} else if (gameID == "3mice1") {
return 20060715; // QDSCR_SCREEN_TRANSFORM = 232
} else if (gameID == "shveik") {
diff --git a/engines/qdengine/qdcore/qd_minigame_interface.h b/engines/qdengine/qdcore/qd_minigame_interface.h
index 2b51b309821..ebaa157aef8 100644
--- a/engines/qdengine/qdcore/qd_minigame_interface.h
+++ b/engines/qdengine/qdcore/qd_minigame_interface.h
@@ -102,7 +102,20 @@ public:
return 0;
}
- /// ÐеÑÑÐ¸Ñ Ð¸Ð½ÑеÑÑейÑа игÑÑ, ÑÑогаÑÑ Ð½Ðµ надо.
+ // maski, 20060129, no version yet
+ // version 100, 20060414, qdMinigameCounterInterface added, version added, no other changes
+ // version 101, 20060607
+ // version 102, 20060629
+ // version 103, 20060715
+ // version 104, never released
+ // version 105, 20061026
+ // version 106, 20070214
+ // version 107, 20070404 09:13
+ // version 108, 20070404 10:12
+ // version 109, 20070416
+ // version 110, 20070419
+ // version 111, 20070420
+ // version 112, 20070507
enum { INTERFACE_VERSION = 112 };
virtual int version() const {
return INTERFACE_VERSION;
Commit: 8f9637b36823843044a5e7bd07a716a159e0b170
https://github.com/scummvm/scummvm/commit/8f9637b36823843044a5e7bd07a716a159e0b170
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-27T12:15:31+02:00
Commit Message:
QDENGINE: More work on kartiny.dll
Changed paths:
engines/qdengine/minigames/kartiny.h
diff --git a/engines/qdengine/minigames/kartiny.h b/engines/qdengine/minigames/kartiny.h
index 7d6436d9a91..fbe9b5ff2ed 100644
--- a/engines/qdengine/minigames/kartiny.h
+++ b/engines/qdengine/minigames/kartiny.h
@@ -92,11 +92,102 @@ public:
}
/// ÐеÑÑÐ¸Ñ Ð¸Ð½ÑеÑÑейÑа игÑÑ, ÑÑогаÑÑ Ð½Ðµ надо.
- enum { INTERFACE_VERSION = 112 };
+ enum { INTERFACE_VERSION = 99 };
int version() const {
return INTERFACE_VERSION;
}
+private:
+ void snapPieces() {
+ mgVect2i piecePos;
+ mgVect3f newPiecePos;
+ float depth;
+
+ piecePos = _bg1_l2Obj->screen_R();
+ depth = _scene->screen_depth(_bg1_l2Obj->R());
+
+ if (ABS(399 - ABS(piecePos.x)) <= 10 && ABS(278 - ABS(piecePos.y)) <= 10) {
+ piecePos.x = 399;
+ piecePos.y = 278;
+
+ newPiecePos = _scene->screen2world_coords(piecePos, depth);
+ _bg1_l2Obj->set_R(newPiecePos);
+ }
+
+ piecePos = _bg2_l2Obj->screen_R();
+ depth = _scene->screen_depth(_bg2_l2Obj->R());
+
+ if (piecePos.x >= 387 && piecePos.x <= 440 && ABS(267 - ABS(piecePos.y)) <= 20) {
+ piecePos.x = 408;
+ piecePos.y = 267;
+
+ newPiecePos = _scene->screen2world_coords(piecePos, depth);
+ _bg2_l2Obj->set_R(newPiecePos);
+ }
+
+ piecePos = _bg3_l2Obj->screen_R();
+ depth = _scene->screen_depth(_bg3_l2Obj->R());
+
+ if (ABS(ABS(piecePos.x) - 413) < 25 && ABS(ABS(piecePos.y) - 43) < 40) {
+ piecePos.x = 406;
+ piecePos.y = -43;
+
+ newPiecePos = _scene->screen2world_coords(piecePos, depth);
+ _bg3_l2Obj->set_R(newPiecePos);
+ }
+ }
+
+ void moveDown(qdMinigameObjectInterface *obj) {
+ int speed = MAX(10, _keyDownCounter / 10 + 1);
+ int maxCoords;
+
+ if (obj == _bg1_l2Obj)
+ maxCoords = 279;
+ else if (obj == _bg2_l2Obj)
+ maxCoords = 267;
+ else if (obj == _bg3_l2Obj)
+ maxCoords = 258;
+ else
+ maxCoords = 258;
+
+ mgVect2i objPos = obj->screen_R();
+
+ if (objPos.y + speed < maxCoords)
+ objPos.y += speed;
+
+ obj->set_R(_scene->screen2world_coords(objPos, _artDepth));
+ }
+
+ void moveUp(qdMinigameObjectInterface *obj) {
+ int speed = MAX(10, _keyDownCounter / 10 + 1);
+ mgVect2i objPos = obj->screen_R();
+
+ if (objPos.y > -100)
+ objPos.y -= speed;
+
+ obj->set_R(_scene->screen2world_coords(objPos, _artDepth));
+ }
+
+ void moveRight(qdMinigameObjectInterface *obj) {
+ int speed = MAX(10, _keyDownCounter / 10 + 1);
+ mgVect2i objPos = obj->screen_R();
+
+ if (objPos.x < 900)
+ objPos.x += speed;
+
+ obj->set_R(_scene->screen2world_coords(objPos, _artDepth));
+ }
+
+ void moveLeft(qdMinigameObjectInterface *obj) {
+ int speed = MAX(10, _keyDownCounter / 10 + 1);
+ mgVect2i objPos = obj->screen_R();
+
+ if (objPos.x > -100)
+ objPos.x -= speed;
+
+ obj->set_R(_scene->screen2world_coords(objPos, _artDepth));
+ }
+
private:
const qdEngineInterface *_engine = nullptr;
qdMinigameSceneInterface *_scene = nullptr;
@@ -114,6 +205,7 @@ private:
bool _wasInited = false;
float _artDepth = -1.0;
+ int _keyDownCounter = 0;
};
} // namespace QDEngine
Commit: b4aa12bbaf9bea1a49e969f14ca5216d6ca5a7eb
https://github.com/scummvm/scummvm/commit/b4aa12bbaf9bea1a49e969f14ca5216d6ca5a7eb
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-27T12:15:31+02:00
Commit Message:
QDENGINE: Implemented qdKartinyMiniGameInterface::quant()
Changed paths:
engines/qdengine/minigames/kartiny.h
diff --git a/engines/qdengine/minigames/kartiny.h b/engines/qdengine/minigames/kartiny.h
index fbe9b5ff2ed..176e3439faa 100644
--- a/engines/qdengine/minigames/kartiny.h
+++ b/engines/qdengine/minigames/kartiny.h
@@ -34,7 +34,6 @@ public:
qdKartinyMiniGameInterface() {}
~qdKartinyMiniGameInterface() {}
- //! ÐниÑиализаÑÐ¸Ñ Ð¸Ð³ÑÑ.
bool init(const qdEngineInterface *engine_interface) {
debugC(1, kDebugMinigames, "Kartiny::init()");
@@ -59,14 +58,251 @@ public:
return true;
}
- //! ÐбÑÑÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ¸ игÑÑ, паÑамеÑÑ - вÑемÑ, коÑоÑое должно пÑойÑи в игÑе (в ÑекÑндаÑ
).
bool quant(float dt) {
debugC(3, kDebugMinigames, "Kartiny::quant(%f)", dt);
+ mgVect3f newPiecePos;
+ mgVect2i piecePos;
+
+ float depth1 = _scene->screen_depth(_bg1_l2Obj->R());
+ float depth2 = _scene->screen_depth(_bg2_l2Obj->R());
+ float depth3 = _scene->screen_depth(_bg3_l2Obj->R());
+ float depth4 = _scene->screen_depth(_bg4_l2Obj->R());
+
+ if (depth4 >= depth3 || depth3 >= depth2 || depth2 >= depth1)
+ _zFlagObj->set_state("\xed\xe5\xf2"); // "неÑ"
+ else
+ _zFlagObj->set_state("\xe4\xe0"); // "да"
+
+ if (!_wasInited) {
+ if (_startObj->is_state_active("\xe7\xe0\xe4\xed\xeb\xea\xeb \xee\xef\xf3\xf9\xe5\xed\xfb")) // "задники опÑÑенÑ"
+ _wasInited = 1;
+
+ if (!_wasInited) {
+ if (_startObj->is_state_active("\xed\xe5\xf2")) { // "неÑ"
+ piecePos.x = 400;
+ piecePos.y = -300;
+ _bg1_l2Obj->set_R(_scene->screen2world_coords(piecePos, 600.0));
+
+ piecePos.x = 200;
+ piecePos.y = -300;
+ _bg2_l2Obj->set_R(_scene->screen2world_coords(piecePos, 400.0));
+
+ piecePos.x = 400;
+ piecePos.y = -300;
+ _bg3_l2Obj->set_R(_scene->screen2world_coords(piecePos, 200.0));
+
+ piecePos.x = 600;
+ piecePos.y = -300;
+ _bg3_l2Obj->set_R(_scene->screen2world_coords(piecePos, 0.0));
+
+ _stage = 4;
+ _artDepth = -50.0;
+
+ _activateObj->set_state("\xe7\xe0\xe4\xed\xe8\xea\x34"); // "задник4"
+ _startObj->set_state("\xe4\xe0"); // "да"
+ } else {
+ if (_startObj->is_state_active("\xe4\xe0")) { // "да"
+ if (_bg1_l2Obj->screen_R().y < 100) {
+ piecePos.x = 400;
+ piecePos.y = _bg1_l2Obj->screen_R().y + 3;
+ _bg1_l2Obj->set_R(_scene->screen2world_coords(piecePos, 600.0));
+ }
+
+ if (_bg2_l2Obj->screen_R().y < 50) {
+ piecePos.x = 200;
+ piecePos.y = _bg2_l2Obj->screen_R().y + 2;
+ _bg2_l2Obj->set_R(_scene->screen2world_coords(piecePos, 400.0));
+ }
+
+ if (_bg3_l2Obj->screen_R().y < 85) {
+ piecePos.x = 400;
+ piecePos.y = _bg3_l2Obj->screen_R().y + 2;
+ _bg3_l2Obj->set_R(_scene->screen2world_coords(piecePos, 200.0));
+ }
+
+ if (_bg4_l2Obj->screen_R().y < 0) {
+ piecePos.x = 600;
+ piecePos.y = _bg4_l2Obj->screen_R().y + 2;
+ _bg4_l2Obj->set_R(_scene->screen2world_coords(piecePos, 0.0));
+ }
+
+ if (_bg1_l2Obj->screen_R().y >= 100
+ && _bg2_l2Obj->screen_R().y >= 50
+ && _bg3_l2Obj->screen_R().y >= 85
+ && _bg4_l2Obj->screen_R().y >= 0) {
+ _wasInited = 1;
+ _startObj->set_state("\xe7\xe0\xe4\xed\xeb\xea\xeb \xee\xef\xf3\xf9\xe5\xed\xfb"); // "задники опÑÑенÑ"
+ }
+ }
+
+ if (_startObj->is_state_active("\xe7\xe0\xe4\xed\xeb\xea\xeb \xee\xef\xf3\xf9\xe5\xed\xfb") // "задники опÑÑенÑ"
+ && _artDepth == -1.0) {
+ _artState[0].depth = _scene->screen_depth(_bg1_l2Obj->R());
+ _artState[0].num = 1;
+ _artState[1].depth = _scene->screen_depth(_bg2_l2Obj->R());
+ _artState[1].num = 2;
+ _artState[2].depth = _scene->screen_depth(_bg3_l2Obj->R());
+ _artState[2].num = 3;
+ _artState[3].depth = _scene->screen_depth(_bg4_l2Obj->R());
+ _artState[3].num = 4;
+
+ // Sort
+ for (int i = 0; i < 3; i++) {
+ while (_artState[i + 1].depth < _artState[i].depth) {
+ int num = _artState[i].num;
+ float depth = _artState[i].depth;
+
+ _artState[i].depth = _artState[i + 1].depth;
+ _artState[i].num = _artState[i + 1].num;
+ _artState[i + 1].depth = depth;
+ _artState[i + 1].num = num;
+
+ i = 0;
+ }
+ }
+
+ _wasInited = 1;
+
+ _stage = _artState[0].num;
+ _artDepth = _artState[0].depth;
+ }
+ }
+ }
+ }
+
+ if (!checkSolution() && _wasInited) {
+ _doneObj->set_state("false");
+
+ if (_engine->is_key_pressed(Common::KEYCODE_LEFT)
+ || _engine->is_key_pressed(Common::KEYCODE_RIGHT)
+ || _engine->is_key_pressed(Common::KEYCODE_UP)
+ || _engine->is_key_pressed(Common::KEYCODE_DOWN)) {
+ ++_keyDownCounter;
+ } else {
+ _keyDownCounter = 0;
+ }
+
+ if (_engine->is_key_pressed(Common::KEYCODE_LEFT)) {
+ switch (_stage) {
+ case 1:
+ moveLeft(_bg1_l2Obj);
+ break;
+ case 2:
+ moveLeft(_bg2_l2Obj);
+ break;
+ case 3:
+ moveLeft(_bg3_l2Obj);
+ break;
+ case 4:
+ moveLeft(_bg4_l2Obj);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (_engine->is_key_pressed(Common::KEYCODE_RIGHT)) {
+ switch (_stage) {
+ case 1:
+ moveRight(_bg1_l2Obj);
+ break;
+ case 2:
+ moveRight(_bg2_l2Obj);
+ break;
+ case 3:
+ moveRight(_bg3_l2Obj);
+ break;
+ case 4:
+ moveRight(_bg4_l2Obj);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (_engine->is_key_pressed(Common::KEYCODE_UP)) {
+ switch (_stage) {
+ case 1:
+ moveUp(_bg1_l2Obj);
+ break;
+ case 2:
+ moveUp(_bg2_l2Obj);
+ break;
+ case 3:
+ moveUp(_bg3_l2Obj);
+ break;
+ case 4:
+ moveUp(_bg4_l2Obj);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (_engine->is_key_pressed(Common::KEYCODE_DOWN)) {
+ switch (_stage) {
+ case 1:
+ moveDown(_bg1_l2Obj);
+ break;
+ case 2:
+ moveDown(_bg2_l2Obj);
+ break;
+ case 3:
+ moveDown(_bg3_l2Obj);
+ break;
+ case 4:
+ moveDown(_bg4_l2Obj);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if ((_bg_clickObj->is_state_active("zad1_level2")
+ || _activateObj->is_state_active("\xe7\xe0\xe4\xed\xe8\xea\x31")) && _stage != 1) { // "задник1"
+ _stage = 1;
+ _activateObj->set_state("\xe7\xe0\xe4\xed\xe8\xea\x31"); // "задник1"
+ _artDepth -= 200.0;
+ _bg1_l2Obj->set_R(_scene->screen2world_coords(_bg1_l2Obj->screen_R(), _artDepth));
+
+ snapPieces();
+ }
+
+ if ((_bg_clickObj->is_state_active("zad2_level2")
+ || _activateObj->is_state_active("\xe7\xe0\xe4\xed\xe8\xea\x32")) && _stage != 2) { // "задник2"
+ _stage = 2;
+ _activateObj->set_state("\xe7\xe0\xe4\xed\xe8\xea\x32"); // "задник2"
+ _artDepth -= 200.0;
+ _bg2_l2Obj->set_R(_scene->screen2world_coords(_bg2_l2Obj->screen_R(), _artDepth));
+
+ snapPieces();
+ }
+
+ if ((_bg_clickObj->is_state_active("zad3_level2")
+ || _activateObj->is_state_active("\xe7\xe0\xe4\xed\xe8\xea\x33")) && _stage != 3) { // "задник3"
+ _stage = 3;
+ _activateObj->set_state("\xe7\xe0\xe4\xed\xe8\xea\x33"); // "задник3"
+ _artDepth -= 200.0;
+ _bg3_l2Obj->set_R(_scene->screen2world_coords(_bg3_l2Obj->screen_R(), _artDepth));
+
+ snapPieces();
+ }
+
+ if ((_bg_clickObj->is_state_active("zad4_level2")
+ || _activateObj->is_state_active("\xe7\xe0\xe4\xed\xe8\xea\x34")) && _stage != 4) { // "задник4"
+ _stage = 4;
+ _activateObj->set_state("\xe7\xe0\xe4\xed\xe8\xea\x34"); // "задник4"
+ _artDepth -= 200.0;
+ _bg4_l2Obj->set_R(_scene->screen2world_coords(_bg4_l2Obj->screen_R(), _artDepth));
+
+ snapPieces();
+ }
+ }
+
return true;
}
- //! ÐеиниÑиализаÑÐ¸Ñ Ð¸Ð³ÑÑ.
bool finit() {
debugC(1, kDebugMinigames, "Kartiny::finit()");
@@ -78,20 +314,18 @@ public:
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;
@@ -188,6 +422,10 @@ private:
obj->set_R(_scene->screen2world_coords(objPos, _artDepth));
}
+ bool checkSolution() {
+ return false;
+ }
+
private:
const qdEngineInterface *_engine = nullptr;
qdMinigameSceneInterface *_scene = nullptr;
@@ -206,6 +444,13 @@ private:
bool _wasInited = false;
float _artDepth = -1.0;
int _keyDownCounter = 0;
+
+ int _stage = 0;
+
+ struct {
+ float depth;
+ int num;
+ } _artState[4];
};
} // namespace QDEngine
Commit: 8a5adecce19e04e7466aee0a4fd3dc60c279d917
https://github.com/scummvm/scummvm/commit/8a5adecce19e04e7466aee0a4fd3dc60c279d917
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-08-27T12:15:31+02:00
Commit Message:
QDENGINE: Implemented rest of kartiny.dll
Changed paths:
engines/qdengine/minigames/kartiny.h
diff --git a/engines/qdengine/minigames/kartiny.h b/engines/qdengine/minigames/kartiny.h
index 176e3439faa..d2eb1dbfb7b 100644
--- a/engines/qdengine/minigames/kartiny.h
+++ b/engines/qdengine/minigames/kartiny.h
@@ -423,7 +423,49 @@ private:
}
bool checkSolution() {
- return false;
+ if (_scene->screen_depth(_bg1_l2Obj->R()) < _scene->screen_depth(_bg2_l2Obj->R()))
+ return false;
+
+ if (_scene->screen_depth(_bg2_l2Obj->R()) < _scene->screen_depth(_bg3_l2Obj->R()))
+ return false;
+
+ if (_scene->screen_depth(_bg3_l2Obj->R()) < _scene->screen_depth(_bg4_l2Obj->R()))
+ return false;
+
+ if (ABS(_bg1_l2Obj->screen_R().x - 399) > 5
+ || ABS(_bg1_l2Obj->screen_R().y - 278) > 5
+ || (ABS(_bg2_l2Obj->screen_R().x - 407) > 10
+ && ABS(_bg2_l2Obj->screen_R().x - 420) > 10)) // copy/paste error in the originaL?
+ return false;
+
+ if (ABS(_bg2_l2Obj->screen_R().y - 267) > 10)
+ return false;
+
+ if (_bg2_l2Obj->screen_R().x - _bg3_l2Obj->screen_R().x > 6)
+ return false;
+
+ if (_bg3_l2Obj->screen_R().x - _bg2_l2Obj->screen_R().x > 5)
+ return false;
+
+ if (ABS(_bg3_l2Obj->screen_R().y + 43) > 10)
+ return false;
+
+ if (_bg4_l2Obj->screen_R().x - _bg3_l2Obj->screen_R().x > 5)
+ return false;
+
+ if (_bg3_l2Obj->screen_R().x - _bg4_l2Obj->screen_R().x > 3)
+ return false;
+
+ if (ABS(_bg4_l2Obj->screen_R().y + 42) > 10)
+ return false;
+
+ if (ABS(_bg4_l2Obj->screen_R().y) - ABS(_bg3_l2Obj->screen_R().y) > 3)
+ return false;
+
+
+ _doneObj->set_state("true");
+
+ return true;
}
private:
More information about the Scummvm-git-logs
mailing list