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

sev- noreply at scummvm.org
Wed Sep 11 23:50:44 UTC 2024


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

Summary:
92d05baeb4 QDENGINE: DT: Display tree in file list
73c9fda3f5 QDENGINE: Got rid of gotos in inv_popup.dll implementation
52e5e02b4a JANITORIAL: Fix indentation
06391ab725 QDENGINE: Initial code for ShveikShkatulka.dll minigame
b4bc45077b QDENGINE: Fix string literals in ShveikShkatulka.dll
fd2090b627 QDENGINE: Fix crash on startup in inv_popup.dll


Commit: 92d05baeb44b54ab3a5b57f9b97bf9bc5eed744f
    https://github.com/scummvm/scummvm/commit/92d05baeb44b54ab3a5b57f9b97bf9bc5eed744f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-12T01:50:32+02:00

Commit Message:
QDENGINE: DT: Display tree in file list

Changed paths:
    engines/qdengine/debugger/debugtools.cpp
    engines/qdengine/debugger/dt-internal.h


diff --git a/engines/qdengine/debugger/debugtools.cpp b/engines/qdengine/debugger/debugtools.cpp
index 473615e5645..f2523d39d31 100644
--- a/engines/qdengine/debugger/debugtools.cpp
+++ b/engines/qdengine/debugger/debugtools.cpp
@@ -28,6 +28,7 @@
 #include "common/compression/unzip.h"
 #include "common/debug.h"
 #include "common/path.h"
+#include "common/stack.h"
 #include "common/system.h"
 
 #include "graphics/opengl/shader.h"
@@ -159,7 +160,20 @@ void showImage(const ImGuiImage &image, const char *name, float scale) {
 	//setToolTipImage(image, name);
 }
 
+FileTree::FileTree(Common::Path *p, Common::String n, bool node, int i) {
+	id = i;
+
+	if (!node) {
+		name = (char *)transCyrillic(n);
+	} else {
+		path = *p;
+		name = (char *)transCyrillic(p->baseName());
+	}
+}
+
 void populateFileList() {
+	Common::Array<Common::Path> files;
+
 	// Iterate through the 3 resource pak files
 	for (int i = 0; i < qdFileManager::instance().get_num_packages(); i++) {
 		Common::Archive *archive = qdFileManager::instance().get_package(i);
@@ -169,10 +183,61 @@ void populateFileList() {
 			archive->listMembers(members);
 
 		for (auto &it : members)
-			_state->_files.push_back(it->getPathInArchive());
+			files.push_back(it->getPathInArchive());
 	}
 
-	Common::sort(_state->_files.begin(), _state->_files.end());
+	Common::sort(files.begin(), files.end());
+
+	// Now build a tree
+	Common::Path curr;
+	Common::Stack<FileTree *> treeStack;
+
+	_state->_files.name = "Resource";
+	treeStack.push(&_state->_files);
+
+	int id = 0;
+	for (int f = 0; f < files.size(); f++) {
+		// Skip duplicates between the archives
+		if (f && files[f] == files[f - 1])
+			continue;
+
+		Common::Path parent = files[f].getParent();
+
+		if (parent != curr) {
+			Common::StringArray curArr = curr.splitComponents();
+			Common::StringArray newArr = parent.splitComponents();
+
+			if (curArr.back().empty())
+				curArr.pop_back();
+
+			if (newArr.back().empty())
+				newArr.pop_back();
+
+			int pos = 0;
+			while (pos < curArr.size() && pos < newArr.size() && curArr[pos] == newArr[pos])
+				pos++;
+
+			// if we need to close directories
+			if (pos < curArr.size()) {
+				for (int i = pos; i < curArr.size(); i++)
+					(void)treeStack.pop();
+			}
+
+			for (; pos < newArr.size(); pos++) {
+				if (id == 0 && newArr[pos] == "Resource") // Skip the root node
+					continue;
+
+				treeStack.top()->children.push_back(new FileTree(nullptr, newArr[pos], false, ++id));
+				treeStack.push(treeStack.top()->children.back());
+			}
+
+			curr = parent;
+		}
+
+		treeStack.top()->children.push_back(new FileTree(&files[f], "", true, ++id));
+
+		id++;
+	}
 }
 
 static void displayQDA() {
@@ -232,7 +297,7 @@ static void displayQDA() {
 			ImGui::Separator();
 
 			if (!_state->_fileToDisplay.empty()) {
-				showImage(imgID, (char *)transCyrillic(_state->_fileToDisplay.toString()), 2.0);
+				showImage(imgID, (char *)transCyrillic(_state->_fileToDisplay.toString()), 1.0);
 			} else {
 				ImGui::InvisibleButton("##canvas", ImVec2(32.f, 32.f));
 			}
@@ -241,7 +306,7 @@ static void displayQDA() {
 
 			imgID = getImageID(_state->_fileToDisplay, -_state->_qdaToDisplayFrame - 1);
 
-			showImage(imgID, (char *)transCyrillic(_state->_fileToDisplay.toString()), 2.0);
+			showImage(imgID, (char *)transCyrillic(_state->_fileToDisplay.toString()), 1.0);
 
 			ImGui::EndTabItem();
 		}
@@ -274,6 +339,34 @@ static void displayTGA() {
 	showImage(imgID, (char *)transCyrillic(_state->_fileToDisplay.toString()), 1.0);
 }
 
+void displayTree(FileTree *tree) {
+	if (tree->children.empty()) { // It is a file
+		if (ImGui::Selectable(tree->name.c_str(), _state->_fileToDisplay == tree->path)) {
+			_state->_fileToDisplay = tree->path;
+
+			if (tree->name.hasSuffixIgnoreCase(".qda")) {
+				_state->_qdaToDisplayFrame = 0;
+				_state->_qdaIsPlaying = false;
+
+				_state->_displayMode = kDisplayQDA;
+			} else if (tree->name.hasSuffixIgnoreCase(".tga")) {
+				_state->_displayMode = kDisplayTGA;
+			} else {
+				_state->_displayMode = -1;
+			}
+		}
+
+		return;
+	}
+
+	if (ImGui::TreeNode((void*)(intptr_t)(tree->id), tree->name.c_str())) {
+		for (auto &it : tree->children)
+			displayTree(it);
+
+		ImGui::TreePop();
+	}
+}
+
 void showArchives() {
 	if (!_state->_showArchives)
 		return;
@@ -283,8 +376,8 @@ void showArchives() {
 
 	// Calculate the window size
 	ImVec2 windowSize = ImVec2(
-		viewportSize.x * 0.7f,
-		viewportSize.y * 0.7f
+		viewportSize.x * 0.9f,
+		viewportSize.y * 0.9f
 	);
 
 	// Calculate the centered position
@@ -298,7 +391,7 @@ void showArchives() {
 	ImGui::SetNextWindowSize(windowSize, ImGuiCond_FirstUseEver);
 
 	if (ImGui::Begin("Archives", &_state->_showArchives)) {
-		ImGui::BeginChild("ChildL", ImVec2(ImGui::GetContentRegionAvail().x * 0.3f, ImGui::GetContentRegionAvail().y), ImGuiChildFlags_None);
+		ImGui::BeginChild("ChildL", ImVec2(ImGui::GetContentRegionAvail().x * 0.4f, ImGui::GetContentRegionAvail().y), ImGuiChildFlags_None);
 
 		ImGui::Button("\uef4f"); // Filter	// filter_alt
 		ImGui::SameLine();
@@ -306,28 +399,10 @@ void showArchives() {
 		_state->_nameFilter.Draw();
 		ImGui::Separator();
 
-		if (_state->_files.empty())
+		if (_state->_files.children.empty())
 			populateFileList();
 
-		for (auto &it : _state->_files) {
-			const char *fileName = (char *)transCyrillic(it.baseName());
-			if (_state->_nameFilter.PassFilter(fileName)) {
-				if (ImGui::Selectable(fileName, _state->_fileToDisplay == it)) {
-					_state->_fileToDisplay = it;
-
-					if (it.baseName().hasSuffixIgnoreCase(".qda")) {
-						_state->_qdaToDisplayFrame = 0;
-						_state->_qdaIsPlaying = false;
-
-						_state->_displayMode = kDisplayQDA;
-					} else if (it.baseName().hasSuffixIgnoreCase(".tga")) {
-						_state->_displayMode = kDisplayTGA;
-					} else {
-						_state->_displayMode = -1;
-					}
-				}
-			}
-		}
+		displayTree(&_state->_files);
 
 		ImGui::EndChild();
 
diff --git a/engines/qdengine/debugger/dt-internal.h b/engines/qdengine/debugger/dt-internal.h
index 34be48fb577..ff0fd254c4e 100644
--- a/engines/qdengine/debugger/dt-internal.h
+++ b/engines/qdengine/debugger/dt-internal.h
@@ -35,6 +35,16 @@ enum {
 	kDisplayTGA,
 };
 
+struct FileTree {
+	Common::Path path;
+	Common::String name;
+	Common::Array<FileTree *> children;
+	int id;
+
+	FileTree(Common::Path *p, Common::String n, bool node, int i);
+	FileTree() { id = 0; }
+};
+
 typedef struct ImGuiState {
 	bool _showArchives = false;
 
@@ -49,7 +59,7 @@ typedef struct ImGuiState {
 
 	ImGuiTextFilter _nameFilter;
 
-	Common::List<Common::Path> _files;
+	FileTree _files;
 
 	int _displayMode = -1;
 } ImGuiState;


Commit: 73c9fda3f5716f6ed07b73fc28b775301fd83d7d
    https://github.com/scummvm/scummvm/commit/73c9fda3f5716f6ed07b73fc28b775301fd83d7d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-12T01:50:33+02:00

Commit Message:
QDENGINE: Got rid of gotos in inv_popup.dll implementation

Changed paths:
    engines/qdengine/minigames/inv_popup.h


diff --git a/engines/qdengine/minigames/inv_popup.h b/engines/qdengine/minigames/inv_popup.h
index 2970bd3324a..32ac4998d86 100644
--- a/engines/qdengine/minigames/inv_popup.h
+++ b/engines/qdengine/minigames/inv_popup.h
@@ -76,57 +76,48 @@ public:
 		}
 
 		qdMinigameObjectInterface *obj;
+		char buf[5];
+		const char *state = _scene->mouse_hover_object_interface()->current_state_name();
 
-		if (!_scene->mouse_hover_object_interface()
-				|| _scene->mouse_object_interface()) {
+		if (!_scene->mouse_hover_object_interface() || _scene->mouse_object_interface()) {
 			_invDescObj->set_state("00");
 			obj = _invDescCloseupObj;
-			goto LABEL_20;
-		}
-
-		char buf[5];
-		const char *state;
-		const char *pos;
-
-		state = _scene->mouse_hover_object_interface()->current_state_name();
-		if (!strstr(state, "#inv#")) {
+			obj->set_state("00");
+		} else if (!strstr(state, "#inv#")) {
 			obj = _invDescObj;
-LABEL_20:
 			obj->set_state("00");
-			goto LABEL_21;
-		}
-
-		pos = strstr(state, "#inv#");
-		char buf2[5];
-		Common::strlcpy(buf2, pos + 5, 3);
-		Common::strlcpy(buf, _invDescCloseupObj->current_state_name(), 3);
-
-		if (buf2[0] != buf[0] || buf2[1] != buf[1]) {
-			_invDescObj->set_state(buf2);
-			_hoverObjectPos = _scene->mouse_hover_object_interface()->screen_R();
-			if (_hoverObjectPos.x + _invDescObj->screen_size().x / 2 >= 800
-					|| (_hoverObjectPos.x - _invDescObj->screen_size().x / 2 <= 0)) {
-				if (_hoverObjectPos.x + _invDescObj->screen_size().x / 2 < 800) {
-					if (_hoverObjectPos.x - _invDescObj->screen_size().x / 2 <= 0)
-						_invDescPos.x = _invDescObj->screen_size().x / 2 + 10;
+		} else {
+			const char *pos = strstr(state, "#inv#");
+			char buf2[5];
+			Common::strlcpy(buf2, pos + 5, 3);
+			Common::strlcpy(buf, _invDescCloseupObj->current_state_name(), 3);
+
+			if (buf2[0] != buf[0] || buf2[1] != buf[1]) {
+				_invDescObj->set_state(buf2);
+				_hoverObjectPos = _scene->mouse_hover_object_interface()->screen_R();
+				if (_hoverObjectPos.x + _invDescObj->screen_size().x / 2 >= 800
+						|| (_hoverObjectPos.x - _invDescObj->screen_size().x / 2 <= 0)) {
+					if (_hoverObjectPos.x + _invDescObj->screen_size().x / 2 < 800) {
+						if (_hoverObjectPos.x - _invDescObj->screen_size().x / 2 <= 0)
+							_invDescPos.x = _invDescObj->screen_size().x / 2 + 10;
+						} else {
+							_invDescPos.x = 790 - _invDescObj->screen_size().x / 2;
+						}
 					} else {
-						_invDescPos.x = 790 - _invDescObj->screen_size().x / 2;
-					}
-				} else {
-					_invDescPos.x = _hoverObjectPos.x;
+						_invDescPos.x = _hoverObjectPos.x;
+				}
+				_invDescPos.y = _invDescObj->screen_size().y / 2 + 73;
+				_invDescObj->set_R(_scene->screen2world_coords(_invDescPos, -1000.0));
+				_invDescCloseupObj->set_state("00");
 			}
-			_invDescPos.y = _invDescObj->screen_size().y / 2 + 73;
-			_invDescObj->set_R(_scene->screen2world_coords(_invDescPos, -1000.0));
-			_invDescCloseupObj->set_state("00");
 		}
 
-LABEL_21:
 		if (_scene->mouse_right_click_object_interface()) {
 			if (!_scene->mouse_object_interface()) {
 				state = _scene->mouse_hover_object_interface()->current_state_name();
 
 				if (strstr(state, "#closeup#")) {
-					pos = strstr(state, "#inv#");
+					const char *pos = strstr(state, "#inv#");
 					Common::strlcpy(buf, pos + 5, 3);
 					buf[2] = 0;
 


Commit: 52e5e02b4afaa473b96284bb2602f21cb452f174
    https://github.com/scummvm/scummvm/commit/52e5e02b4afaa473b96284bb2602f21cb452f174
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-12T01:50:33+02:00

Commit Message:
JANITORIAL: Fix indentation

Changed paths:
    engines/qdengine/minigames/inv_popup.h


diff --git a/engines/qdengine/minigames/inv_popup.h b/engines/qdengine/minigames/inv_popup.h
index 32ac4998d86..63d34e85d7b 100644
--- a/engines/qdengine/minigames/inv_popup.h
+++ b/engines/qdengine/minigames/inv_popup.h
@@ -42,26 +42,27 @@ public:
 		if (!_scene)
 			return false;
 
-			//_invClickObj = _scene->object_interface("$inv_click_flag");
-			_invDescObj = _scene->object_interface("%inv_desc");
-			_invDescCloseupObj = _scene->object_interface("%inv_desc_closeup");
-			//_invActiveFlagObj = _scene->object_interface("$inv_active_flag");
-			_blockPersObj = _scene->object_interface("\x24\xe1\xeb\xee\xea\xe8\xf0\xee\xe2\xea\xe0\x5f\xef\xe5\xf0\xf1\xee\xed\xe0\xe6\xe0");	// "$блокировка_персонажа"
-			_blockPersFlagObj = _scene->object_interface("\x24\xe1\xeb\xee\xea\xe8\xf0\xee\xe2\xea\xe0\x5f\xef\xe5\xf0\xf1\xee\xed\xe0\xe6\xe0\x5f\xf4\xeb\xe0\xe3");	// "$блокировка_персонажа_флаг"
+		//_invClickObj = _scene->object_interface("$inv_click_flag");
+		_invDescObj = _scene->object_interface("%inv_desc");
+		_invDescCloseupObj = _scene->object_interface("%inv_desc_closeup");
+		//_invActiveFlagObj = _scene->object_interface("$inv_active_flag");
+		_blockPersObj = _scene->object_interface("\x24\xe1\xeb\xee\xea\xe8\xf0\xee\xe2\xea\xe0\x5f\xef\xe5\xf0\xf1\xee\xed\xe0\xe6\xe0");	// "$блокировка_персонажа"
+		_blockPersFlagObj = _scene->object_interface("\x24\xe1\xeb\xee\xea\xe8\xf0\xee\xe2\xea\xe0\x5f\xef\xe5\xf0\xf1\xee\xed\xe0\xe6\xe0\x5f\xf4\xeb\xe0\xe3");	// "$блокировка_персонажа_флаг"
 
-			_shveikObj = _scene->personage_interface("\xd8\xe2\xe5\xe9\xea");	// "Швейк"
+		_shveikObj = _scene->personage_interface("\xd8\xe2\xe5\xe9\xea");	// "Швейк"
 
-			_shveikLookObj = _scene->object_interface("\x24\xf8\xe2\xe5\xe9\xea\x20\xf1\xec\xee\xf2\xf0\xe8\xf2");	// "$швейк смотрит"
-			_shveikMoveObj = _scene->object_interface("\x25\xF3\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE8\xE5\x20\xEE\xE6\xE8\xE2\xEB\xFF\xE6\xE5\xEC\x20\xD8\xE2\xE5\xE9\xEA\xE0");	// "%управление оживляжем Швейка"
-			_shveikMoveEnabledObj = _scene->object_interface("\x25\xEE\xE6\xE8\xE2\xEB\xFF\xE6\x20\xD8\xE2\xE5\xE9\xEA\xE0\x20\xF0\xE0\xE7\xF0\xE5\xF8\xE5\xED");	// "%оживляж Швейка разрешен"
+		_shveikLookObj = _scene->object_interface("\x24\xf8\xe2\xe5\xe9\xea\x20\xf1\xec\xee\xf2\xf0\xe8\xf2");	// "$швейк смотрит"
+		_shveikMoveObj = _scene->object_interface("\x25\xF3\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE8\xE5\x20\xEE\xE6\xE8\xE2\xEB\xFF\xE6\xE5\xEC\x20\xD8\xE2\xE5\xE9\xEA\xE0");	// "%управление оживляжем Швейка"
+		_shveikMoveEnabledObj = _scene->object_interface("\x25\xEE\xE6\xE8\xE2\xEB\xFF\xE6\x20\xD8\xE2\xE5\xE9\xEA\xE0\x20\xF0\xE0\xE7\xF0\xE5\xF8\xE5\xED");	// "%оживляж Швейка разрешен"
 
-			_someFlag = false;
-			_scene->activate_personage("\xd8\xe2\xe5\xe9\xea");	// "Швейк"
+		_someFlag = false;
+		_scene->activate_personage("\xd8\xe2\xe5\xe9\xea");	// "Швейк"
+
+		// srand(time(0));
+		_shveikIsMoving = 0;
+		_time = -1.0;
+		_timeout = -1;
 
-			// srand(time(0));
-			_shveikIsMoving = 0;
-			_time = -1.0;
-			_timeout = -1;
   		return true;
 	}
 


Commit: 06391ab725041a100aa57d35f62469b50cc4a9ee
    https://github.com/scummvm/scummvm/commit/06391ab725041a100aa57d35f62469b50cc4a9ee
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-12T01:50:33+02:00

Commit Message:
QDENGINE: Initial code for ShveikShkatulka.dll minigame

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


diff --git a/engines/qdengine/minigames/shveik_shkatulka.h b/engines/qdengine/minigames/shveik_shkatulka.h
new file mode 100644
index 00000000000..b101c7bc563
--- /dev/null
+++ b/engines/qdengine/minigames/shveik_shkatulka.h
@@ -0,0 +1,148 @@
+/* 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_SHVEIK_SHKATULKA_H
+#define QDENGINE_MINIGAMES_SHVEIK_SHKATULKA_H
+
+#include "common/debug.h"
+
+#include "qdengine/qd_fwd.h"
+#include "qdengine/qdcore/qd_minigame_interface.h"
+
+namespace QDEngine {
+
+class qdShveikShkatulkaMiniGame : public qdMiniGameInterface {
+public:
+	qdShveikShkatulkaMiniGame() {}
+	~qdShveikShkatulkaMiniGame() {}
+
+	bool init(const qdEngineInterface *engine_interface) {
+		debugC(1, kDebugMinigames, "ShveikShkatulka::init()");
+
+		_engine = engine_interface;
+		_scene = engine_interface->current_scene_interface();
+		if (!_scene)
+			return false;
+
+		_stones[0] = _scene->object_interface("камень1");
+		_stones[1] = _scene->object_interface("камень2");
+		_stones[2] = _scene->object_interface("камень3");
+		_stones[3] = _scene->object_interface("камень4");
+		_stones[4] = _scene->object_interface("камень5");
+		_stones[5] = _scene->object_interface("камень6");
+		_stones[6] = _scene->object_interface("камень7");
+		_stones[7] = _scene->object_interface("камень8");
+		_stones[8] = _scene->object_interface("камень9");
+		_stones[9] = _scene->object_interface("камень10");
+		_stones[10] = _scene->object_interface("камень11");
+		_stones[11] = _scene->object_interface("камень12");
+		_stones[12] = _scene->object_interface("камень13");
+		_stones[13] = _scene->object_interface("камень14");
+
+		_cursorObj = _scene->object_interface("курсор");
+		_doneObj = _scene->object_interface("$done");
+		_startObj = _scene->object_interface("$запуск");
+		_jumpSoundObj = _scene->object_interface("звук перескока");
+
+		_someVar1 = 0;
+		_cursorTakenFlag = 0;
+		_someVar3 = 0;
+		_someVar4 = 0;
+
+		if (_startObj->is_state_active("не был")) {
+			resetStones();
+			_startObj->set_state("был");
+		}
+
+		return true;
+	}
+
+	bool quant(float dt) {
+		debugC(3, kDebugMinigames, "ShveikShkatulka::quant(%f)", dt);
+
+		return true;
+	}
+
+	bool finit() {
+		debugC(1, kDebugMinigames, "ShveikShkatulka::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:
+	void resetStones() {
+		_stones[0]->set_state("15");
+		_stones[1]->set_state("16");
+		_stones[2]->set_state("17");
+		_stones[3]->set_state("110");
+		_stones[4]->set_state("11");
+		_stones[5]->set_state("12");
+		_stones[6]->set_state("14");
+		_stones[7]->set_state("26");
+		_stones[8]->set_state("27");
+		_stones[9]->set_state("210");
+		_stones[10]->set_state("211");
+		_stones[11]->set_state("21");
+		_stones[12]->set_state("22");
+		_stones[13]->set_state("24");
+  	}
+
+private:
+	const qdEngineInterface *_engine = nullptr;
+	qdMinigameSceneInterface *_scene = nullptr;
+
+	int _someVar1 = 0;
+	bool _cursorTakenFlag = false;
+	int _someVar3 = 0;
+	int _someVar4 = 0;
+
+	qdMinigameObjectInterface *_stones[14];
+	qdMinigameObjectInterface *_cursorObj = nullptr;
+	qdMinigameObjectInterface *_doneObj = nullptr;
+	qdMinigameObjectInterface *_startObj = nullptr;
+	qdMinigameObjectInterface *_jumpSoundObj = nullptr;
+};
+
+} // namespace QDEngine
+
+#endif // QDENGINE_MINIGAMES_SHVEIK_SHKATULKA_H
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index 7cfa1163ca3..22ec3c84b5d 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -48,6 +48,7 @@
 
 // shveik
 #include "qdengine/minigames/inv_popup.h"
+#include "qdengine/minigames/shveik_shkatulka.h"
 
 
 namespace QDEngine {


Commit: b4bc45077b4b33f1b2cc8ffbb895a9603785ed6d
    https://github.com/scummvm/scummvm/commit/b4bc45077b4b33f1b2cc8ffbb895a9603785ed6d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-12T01:50:33+02:00

Commit Message:
QDENGINE: Fix string literals in ShveikShkatulka.dll

Changed paths:
    engines/qdengine/minigames/shveik_shkatulka.h


diff --git a/engines/qdengine/minigames/shveik_shkatulka.h b/engines/qdengine/minigames/shveik_shkatulka.h
index b101c7bc563..59765569771 100644
--- a/engines/qdengine/minigames/shveik_shkatulka.h
+++ b/engines/qdengine/minigames/shveik_shkatulka.h
@@ -42,34 +42,34 @@ public:
 		if (!_scene)
 			return false;
 
-		_stones[0] = _scene->object_interface("камень1");
-		_stones[1] = _scene->object_interface("камень2");
-		_stones[2] = _scene->object_interface("камень3");
-		_stones[3] = _scene->object_interface("камень4");
-		_stones[4] = _scene->object_interface("камень5");
-		_stones[5] = _scene->object_interface("камень6");
-		_stones[6] = _scene->object_interface("камень7");
-		_stones[7] = _scene->object_interface("камень8");
-		_stones[8] = _scene->object_interface("камень9");
-		_stones[9] = _scene->object_interface("камень10");
-		_stones[10] = _scene->object_interface("камень11");
-		_stones[11] = _scene->object_interface("камень12");
-		_stones[12] = _scene->object_interface("камень13");
-		_stones[13] = _scene->object_interface("камень14");
-
-		_cursorObj = _scene->object_interface("курсор");
+		_stones[0] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x31"); // "камень1"
+		_stones[1] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x32"); // "камень2"
+		_stones[2] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x33"); // "камень3"
+		_stones[3] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x34"); // "камень4"
+		_stones[4] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x35"); // "камень5"
+		_stones[5] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x36"); // "камень6"
+		_stones[6] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x37"); // "камень7"
+		_stones[7] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x38"); // "камень8"
+		_stones[8] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x39"); // "камень9"
+		_stones[9] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x31\x30"); // "камень10"
+		_stones[10] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x31\x31"); // "камень11"
+		_stones[11] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x31\x32"); // "камень12"
+		_stones[12] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x31\x33"); // "камень13"
+		_stones[13] = _scene->object_interface("\xea\xe0\xec\xe5\xed\xfc\x31\x34"); // "камень14"
+
+		_cursorObj = _scene->object_interface("\xea\xf3\xf0\xf1\xee\xf0"); // "курсор"
 		_doneObj = _scene->object_interface("$done");
-		_startObj = _scene->object_interface("$запуск");
-		_jumpSoundObj = _scene->object_interface("звук перескока");
+		_startObj = _scene->object_interface("\x24\xe7\xe0\xef\xf3\xf1\xea"); // "$запуск"
+		_jumpSoundObj = _scene->object_interface("\xe7\xe2\xf3\xea\x20\xef\xe5\xf0\xe5\xf1\xea\xee\xea\xe0"); // "звук перескока"
 
 		_someVar1 = 0;
 		_cursorTakenFlag = 0;
 		_someVar3 = 0;
 		_someVar4 = 0;
 
-		if (_startObj->is_state_active("не был")) {
+		if (_startObj->is_state_active("\xed\xe5\x20\xe1\xfb\xeb")) { // "не был"
 			resetStones();
-			_startObj->set_state("был");
+			_startObj->set_state("\xe1\xfb\xeb"); // "был"
 		}
 
 		return true;


Commit: fd2090b627b0d0b2afcbe63ab9a125cfb8c57e66
    https://github.com/scummvm/scummvm/commit/fd2090b627b0d0b2afcbe63ab9a125cfb8c57e66
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-12T01:50:33+02:00

Commit Message:
QDENGINE: Fix crash on startup in inv_popup.dll

Changed paths:
    engines/qdengine/minigames/inv_popup.h


diff --git a/engines/qdengine/minigames/inv_popup.h b/engines/qdengine/minigames/inv_popup.h
index 63d34e85d7b..7b07f7c394d 100644
--- a/engines/qdengine/minigames/inv_popup.h
+++ b/engines/qdengine/minigames/inv_popup.h
@@ -78,7 +78,10 @@ public:
 
 		qdMinigameObjectInterface *obj;
 		char buf[5];
-		const char *state = _scene->mouse_hover_object_interface()->current_state_name();
+		const char *state = nullptr;
+
+		if (_scene->mouse_hover_object_interface())
+			state = _scene->mouse_hover_object_interface()->current_state_name();
 
 		if (!_scene->mouse_hover_object_interface() || _scene->mouse_object_interface()) {
 			_invDescObj->set_state("00");




More information about the Scummvm-git-logs mailing list