[Scummvm-git-logs] scummvm master -> 299ddd6ffaf838ffc820322c579a19e2491358a9

sev- noreply at scummvm.org
Sun Oct 20 22:49:19 UTC 2024


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

Summary:
299ddd6ffa QDENGINE: Plug triangle.dll minigame in


Commit: 299ddd6ffaf838ffc820322c579a19e2491358a9
    https://github.com/scummvm/scummvm/commit/299ddd6ffaf838ffc820322c579a19e2491358a9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-21T00:48:55+02:00

Commit Message:
QDENGINE: Plug triangle.dll minigame in

Changed paths:
    engines/qdengine/minigames/adv/ExportInterface.cpp
    engines/qdengine/minigames/adv/RunTime.cpp
    engines/qdengine/minigames/adv/RunTime.h
    engines/qdengine/minigames/adv/m_triangles.cpp
    engines/qdengine/minigames/adv/m_triangles.h
    engines/qdengine/module.mk
    engines/qdengine/qdcore/qd_minigame.cpp


diff --git a/engines/qdengine/minigames/adv/ExportInterface.cpp b/engines/qdengine/minigames/adv/ExportInterface.cpp
index ab462757ab9..7ff9d1315c5 100644
--- a/engines/qdengine/minigames/adv/ExportInterface.cpp
+++ b/engines/qdengine/minigames/adv/ExportInterface.cpp
@@ -27,16 +27,16 @@
 
 namespace QDEngine {
 
-qdMiniGameInterface *open_game_interface(const char* name) {
+qdMiniGameInterface *creade_adv_minigame(const char *name, MinigameConsCallback callback) {
 	debugC(3, kDebugMinigames, "open_game_interface: %s, runtime%s", name, g_runtime ? "!=0" : "==0");
 
 	if (!g_runtime)
-		return g_runtime = new MinigameManager;
+		return g_runtime = new MinigameManager(callback);
 
-	return new MinigameManager;
+	return new MinigameManager(callback);
 }
 
-bool close_game_interface(qdMiniGameInterface* game) {
+bool close_adv_minigame(qdMiniGameInterface *game) {
 	debugC(3, kDebugMinigames, "close_game_interface, runtime%s%s", g_runtime == game ? "==game" : "!=game", g_runtime ? "!=0" : "==0");
 
 	delete game;
diff --git a/engines/qdengine/minigames/adv/RunTime.cpp b/engines/qdengine/minigames/adv/RunTime.cpp
index f18992d1d3c..e32e2cc3a18 100644
--- a/engines/qdengine/minigames/adv/RunTime.cpp
+++ b/engines/qdengine/minigames/adv/RunTime.cpp
@@ -36,8 +36,6 @@
 namespace QDEngine {
 
 MinigameManager *g_runtime = 0;
-// createGame() должна реализоваться непосредственно в КАЖДОМ проекте игры
-MinigameInterface *createGame();
 
 class TimeManager {
 	enum Direction {
@@ -68,7 +66,7 @@ private:
 	QDObject timeBar_;
 };
 
-MinigameManager::MinigameManager()
+MinigameManager::MinigameManager(MinigameConsCallback callback)
 	: currentGameIndex_(-1, -1) {
 	state_container_name_ = "Saves/minigames.dat";
 
@@ -97,6 +95,8 @@ MinigameManager::MinigameManager()
 
 	for (int idx = 0; idx < 256; ++idx)
 		lastKeyChecked_[idx] = false;
+
+	_callback = callback;
 }
 
 MinigameManager::~MinigameManager() {
@@ -233,7 +233,7 @@ bool MinigameManager::createGame() {
 	}
 
 	// Here we instantiate the specific game
-	game_ = ::createGame();
+	game_ = _callback();
 
 	if (currentGameInfo_)
 		currentGameInfo_->empty_ = false;
diff --git a/engines/qdengine/minigames/adv/RunTime.h b/engines/qdengine/minigames/adv/RunTime.h
index b76fdcb6069..78db94cafc9 100644
--- a/engines/qdengine/minigames/adv/RunTime.h
+++ b/engines/qdengine/minigames/adv/RunTime.h
@@ -24,6 +24,8 @@
 
 #include "common/hashmap.h"
 
+#include "qdengine/minigames/adv/common.h"
+
 namespace Common {
 class MemoryWriteStream;
 class SeekableWriteStream;
@@ -79,10 +81,16 @@ struct GameInfo {
 	void *gameData_;
 };
 
+typedef MinigameInterface *(*MinigameConsCallback)();
+
+qdMiniGameInterface *creade_adv_minigame(const char *name, MinigameConsCallback callback);
+
+bool close_adv_minigame(qdMiniGameInterface *game);
+
 class MinigameManager : public qdMiniGameInterface {
 	friend class TempValue;
 public:
-	MinigameManager();
+	MinigameManager(MinigameConsCallback callback);
 	~MinigameManager();
 
 	// begin MiniGame virtual interface
@@ -283,6 +291,8 @@ private:
 	QDCounter getCounter(const char* name);
 	// Освободить счетчик
 	void release(QDCounter& counter);
+
+	MinigameConsCallback _callback = nullptr;
 };
 
 } // namespace QDEngine
diff --git a/engines/qdengine/minigames/adv/m_triangles.cpp b/engines/qdengine/minigames/adv/m_triangles.cpp
index 99ec8b58f37..0a5b7ee90d2 100644
--- a/engines/qdengine/minigames/adv/m_triangles.cpp
+++ b/engines/qdengine/minigames/adv/m_triangles.cpp
@@ -29,7 +29,7 @@
 
 namespace QDEngine {
 
-MinigameInterface *createGame() {
+MinigameInterface *createMinigameTriangleGame() {
 	return new MinigameTriangle;
 }
 
diff --git a/engines/qdengine/minigames/adv/m_triangles.h b/engines/qdengine/minigames/adv/m_triangles.h
index a462dffa241..ce45e6118de 100644
--- a/engines/qdengine/minigames/adv/m_triangles.h
+++ b/engines/qdengine/minigames/adv/m_triangles.h
@@ -28,6 +28,8 @@
 
 namespace QDEngine {
 
+MinigameInterface *createMinigameTriangleGame();
+
 class MinigameTriangle : public MinigameInterface {
 	enum GameType {
 		TRIANGLE,
diff --git a/engines/qdengine/module.mk b/engines/qdengine/module.mk
index 285f9bb5e14..189e19ef08e 100644
--- a/engines/qdengine/module.mk
+++ b/engines/qdengine/module.mk
@@ -13,6 +13,7 @@ MODULE_OBJS = \
 	minigames/adv/Range.o \
 	minigames/adv/RunTime.o \
 	minigames/adv/TextManager.o \
+	minigames/adv/m_triangles.o \
 	parser/qdscr_parser.o \
 	parser/xml_parser.o \
 	parser/xml_tag_buffer.o \
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index c86ed833768..112016a6ce6 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -31,6 +31,8 @@
 #include "qdengine/qdcore/qd_minigame_interface.h"
 #include "qdengine/qdcore/qd_engine_interface.h"
 
+#include "qdengine/minigames/adv/RunTime.h"
+
 #include "qdengine/minigames/qd_empty_minigame_interface.h"
 
 // maski
@@ -61,6 +63,9 @@
 #include "qdengine/minigames/3mice2_raskr_all.h"
 #include "qdengine/minigames/3mice2_babochka.h"
 
+// dogncat
+#include "qdengine/minigames/adv/m_triangles.h"
+
 namespace QDEngine {
 
 qdMiniGame::qdMiniGame() : _dll_handle(NULL),
@@ -370,6 +375,9 @@ bool qdMiniGame::load_interface() {
 			return true;
 
 		// dogncat
+		} else if (_dll_name == "DLL\\triangles.dll") {
+			_interface = creade_adv_minigame(_dll_name.c_str(), createMinigameTriangleGame);
+			return true;
 		// scores.dll
 		// triangles.dll
 




More information about the Scummvm-git-logs mailing list