[Scummvm-git-logs] scummvm master -> 24c83a628e7d6e1fe6736dab56c43be8abefe4f3

sev- noreply at scummvm.org
Thu May 29 19:24:02 UTC 2025


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

Summary:
dd5ec40893 QDENGINE: Remove obsolete stubs
7051946817 QDENGINE: TRIANGLES: Add quick reselect feature
9de0602807 QDENGINE: Fix condition of statement in qdAnimation::redraw_rot()
68f82519d5 QDENGINE: Add karaoke.dll minigame
fc772bcac6 QDENGINE: Fix signed/unsigned mismatch warnings
0fdfeb74a2 QDENGINE: Simulate RBUTTON as ALT+LBUTTON
24c83a628e QDENGINE: Fix text input handling


Commit: dd5ec408935895743526510cd1d930fe9adf9e0a
    https://github.com/scummvm/scummvm/commit/dd5ec408935895743526510cd1d930fe9adf9e0a
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-29T21:23:55+02:00

Commit Message:
QDENGINE: Remove obsolete stubs

Changed paths:
    engines/qdengine/minigames/adv/m_triangles.cpp


diff --git a/engines/qdengine/minigames/adv/m_triangles.cpp b/engines/qdengine/minigames/adv/m_triangles.cpp
index 9d10e24d4f4..af03eeaf861 100644
--- a/engines/qdengine/minigames/adv/m_triangles.cpp
+++ b/engines/qdengine/minigames/adv/m_triangles.cpp
@@ -346,7 +346,6 @@ void MinigameTriangle::endSwapNodes(int pos1, int pos2) {
 }
 
 bool MinigameTriangle::animate(float dt) {
-	warning("STUB: MinigameTriangle::animate()");
 
 	if (_animationState == NO_ANIMATION)
 		return false;
@@ -502,8 +501,6 @@ void MinigameTriangle::quant(float dt) {
 		}
 	}
 
-	warning("STUB: MinigameTriangle::quant()");
-
 	if (_hovered != mousePos || _selected != lastSelected) {
 		highlight(_hovered, false);
 		highlight(_selected >= 0 ? _selected : lastSelected, false);


Commit: 70519468178286e70eb36cf5874c098b593805ce
    https://github.com/scummvm/scummvm/commit/70519468178286e70eb36cf5874c098b593805ce
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-29T21:23:55+02:00

Commit Message:
QDENGINE: TRIANGLES: Add quick reselect feature

Changed paths:
    engines/qdengine/minigames/adv/m_triangles.cpp


diff --git a/engines/qdengine/minigames/adv/m_triangles.cpp b/engines/qdengine/minigames/adv/m_triangles.cpp
index af03eeaf861..98e563f158f 100644
--- a/engines/qdengine/minigames/adv/m_triangles.cpp
+++ b/engines/qdengine/minigames/adv/m_triangles.cpp
@@ -480,8 +480,11 @@ void MinigameTriangle::quant(float dt) {
 		else if (compatible(_selected, mousePos)) { // поменять фишки местами
 			startAnimation = _selected;
 			_selected = -1;
-		} else
+		} else {
 			_selected = -1;
+			if (_quickReselect)
+				_selected = mousePos;
+		}
 	}
 
 	if (_selected != lastSelected) {


Commit: 9de0602807f3bf288cac4206fcd9c328e564fce5
    https://github.com/scummvm/scummvm/commit/9de0602807f3bf288cac4206fcd9c328e564fce5
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-29T21:23:55+02:00

Commit Message:
QDENGINE: Fix condition of statement in qdAnimation::redraw_rot()

Changed paths:
    engines/qdengine/qdcore/qd_animation.cpp


diff --git a/engines/qdengine/qdcore/qd_animation.cpp b/engines/qdengine/qdcore/qd_animation.cpp
index 789bd1b4183..3e9b59eeb92 100644
--- a/engines/qdengine/qdcore/qd_animation.cpp
+++ b/engines/qdengine/qdcore/qd_animation.cpp
@@ -221,7 +221,7 @@ void qdAnimation::redraw_rot(int x, int y, int z, float angle, const Vect2f &sca
 
 	if (tileAnimation()) {
 		tileAnimation()->drawFrame(Vect2i(x, y), get_cur_frame_number(), angle, scale, mode);
-	} else if (fabs(scale.x - scale.y) < 0.01f) {
+	} else if (fabs(scale.x - scale.y) >= 0.01f) {
 		if (const qdAnimationFrame *p = get_cur_frame())
 			p->redraw_rot(x, y, z, angle, scale, mode);
 	} else {


Commit: 68f82519d535a43dba7b35691ef2f139473fb2a4
    https://github.com/scummvm/scummvm/commit/68f82519d535a43dba7b35691ef2f139473fb2a4
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-29T21:23:55+02:00

Commit Message:
QDENGINE: Add karaoke.dll minigame

Changed paths:
    engines/qdengine/minigames/adv/m_karaoke.cpp
    engines/qdengine/minigames/adv/m_karaoke.h
    engines/qdengine/module.mk
    engines/qdengine/qdcore/qd_minigame.cpp


diff --git a/engines/qdengine/minigames/adv/m_karaoke.cpp b/engines/qdengine/minigames/adv/m_karaoke.cpp
index cb690ef7e91..ede6fcfc7f3 100644
--- a/engines/qdengine/minigames/adv/m_karaoke.cpp
+++ b/engines/qdengine/minigames/adv/m_karaoke.cpp
@@ -19,6 +19,11 @@
  *
  */
 
+#include "common/debug.h"
+#include "common/file.h"
+#include "common/system.h"
+
+#include "qdengine/qdengine.h"
 #include "qdengine/minigames/adv/common.h"
 #include "qdengine/minigames/adv/m_karaoke.h"
 #include "qdengine/minigames/adv/RunTime.h"
@@ -48,7 +53,7 @@ Karaoke::Karaoke(MinigameManager *runtime) {
 		return;
 
 	struct Parse {
-		XStream &file;
+		Common::File &file;
 		Nodes &nodes;
 
 		float currentTime;
@@ -62,7 +67,7 @@ Karaoke::Karaoke(MinigameManager *runtime) {
 				Node node;
 				node.type = STRING;
 				node.time = currentTime;
-				node.text = string(begin, cur);
+				node.text = Common::String(begin, cur);
 				nodes.push_back(node);
 			} else if (putEmpty) {
 				Node node;
@@ -81,11 +86,11 @@ Karaoke::Karaoke(MinigameManager *runtime) {
 			return *cur++;
 		}
 
-		Parse(XStream&  _file, Nodes& _nodes) : file(_file), nodes(_nodes) {
+		Parse(Common::File&  _file, Nodes& _nodes) : file(_file), nodes(_nodes) {
 			currentTime = 0.f;
 			begin = cur = buf;
 			bool prevNumber = false;
-			while (!file.eof()) {
+			while (!file.eos()) {
 				switch (read()) {
 				case 0:
 					return;
@@ -98,16 +103,23 @@ Karaoke::Karaoke(MinigameManager *runtime) {
 					putLine(prevNumber);
 					prevNumber = true;
 
-					file.seek(-1, XS_CUR);
+					file.seek(-1, SEEK_CUR);
 					float tm = 0;
-					file >= tm;
+
+					char c;
+					do {
+						c = read();
+					} while ((c >= '0' && c <= '9') || c == '.');
+
+					cur = buf;
+					tm = strtod(cur, nullptr);
 
 					if (tm <= 0.f) {
 						currentTime = 0.f;
 						nodes.push_back(Node());
 					} else
 						currentTime = tm;
-					file.seek(-1, XS_CUR);
+					file.seek(-1, SEEK_CUR);
 					continue;
 				}
 				case '>':
@@ -125,9 +137,9 @@ Karaoke::Karaoke(MinigameManager *runtime) {
 	if (!fileName)
 		return;
 
-	XStream file(false);
-	if (!file.open(fileName, XS_IN)) {
-		xxassert(false, (XBuffer() < "Не удалось открыть файл \"" < fileName < "\"").c_str());
+	Common::File file;
+	if (!file.open(Common::Path((const char *)transCyrillic(fileName), '\\'))) {
+		assert(!(Common::String() + "Не удалось открыть файл \"" + fileName + "\"").c_str());
 		return;
 	}
 
@@ -137,7 +149,7 @@ Karaoke::Karaoke(MinigameManager *runtime) {
 	startScreenTag_ = 0;
 	currentTag_ = 0;
 
-	startTime_ = 0.001f * GetTickCount();
+	startTime_ = 0.001f * g_system->getMillis();
 	startTagTime_ = 0.f;
 
 	setState(MinigameInterface::RUNNING);
@@ -145,7 +157,7 @@ Karaoke::Karaoke(MinigameManager *runtime) {
 }
 
 void Karaoke::quant(float dt) {
-	float curTime = 0.001f * GetTickCount() - startTime_;
+	float curTime = 0.001f * g_system->getMillis() - startTime_;
 	if (curTime < 0.f)
 		curTime = 0.f;
 
@@ -158,35 +170,35 @@ void Karaoke::quant(float dt) {
 		return;
 	}
 
-	XBuffer outText;
-	outText < colorReaded_;
+	Common::String outText;
+	outText += colorReaded_;
 	int idx = startScreenTag_;
 	while (idx < currentTag_) {
-		xassert(idx < nodes_.size());
-		xassert(nodes_[idx].type == STRING);
-		outText < nodes_[idx].text.c_str();
+		assert(idx < nodes_.size());
+		assert(nodes_[idx].type == STRING);
+		outText += nodes_[idx].text.c_str();
 		++idx;
 	}
 
 	float phase = (curTime - startTagTime_) / node.time;
-	xassert(phase >= 0.f);
+	assert(phase >= 0.f);
 	if (phase >= 1.f) {
-		outText < node.text.c_str() < "&>";
+		outText += node.text + "&>";
 		++currentTag_;
 		startTagTime_ += node.time;
 		if (currentTag_ == nodes_.size())
 			setState(MinigameInterface::GAME_WIN);
 	} else {
 		int part = phase * node.text.size();
-		outText < string(node.text.begin(), node.text.begin() + part).c_str() < "&>";
-		outText < string(node.text.begin() + part, node.text.end()).c_str();
+		outText += Common::String(node.text.begin(), node.text.begin() + part) + "&>";
+		outText += Common::String(node.text.begin() + part, node.text.end()).c_str();
 	}
 
 	++idx;
 	while (idx < nodes_.size()) {
 		if (nodes_[idx].type == CLEAR)
 			break;
-		outText < nodes_[idx].text.c_str();
+		outText += nodes_[idx].text.c_str();
 		++idx;
 	}
 
diff --git a/engines/qdengine/minigames/adv/m_karaoke.h b/engines/qdengine/minigames/adv/m_karaoke.h
index 27e19a95e3b..a98b11e8c3e 100644
--- a/engines/qdengine/minigames/adv/m_karaoke.h
+++ b/engines/qdengine/minigames/adv/m_karaoke.h
@@ -22,10 +22,13 @@
 #ifndef QDENGINE_MINIGAMES_ADV_M_KARAOKE_H
 #define QDENGINE_MINIGAMES_ADV_M_KARAOKE_H
 
+#include "qdengine/minigames/adv/common.h"
 #include "qdengine/minigames/adv/MinigameInterface.h"
 
 namespace QDEngine {
 
+MinigameInterface *createMinigameKaraoke(MinigameManager *runtime);
+
 class Karaoke : public MinigameInterface {
 public:
 	Karaoke(MinigameManager *runtime);
@@ -44,10 +47,10 @@ private:
 		Node();
 		TagType type;
 		float time;
-		string text;
+		Common::String text;
 	};
 
-	typedef vector<Node> Nodes;
+	typedef Std::vector<Node> Nodes;
 	Nodes nodes_;
 
 	float startTime_;
diff --git a/engines/qdengine/module.mk b/engines/qdengine/module.mk
index ce254f4a28f..9f44a9c8686 100644
--- a/engines/qdengine/module.mk
+++ b/engines/qdengine/module.mk
@@ -14,6 +14,7 @@ MODULE_OBJS = \
 	minigames/adv/Range.o \
 	minigames/adv/RunTime.o \
 	minigames/adv/TextManager.o \
+	minigames/adv/m_karaoke.o \
 	minigames/adv/m_puzzle.o \
 	minigames/adv/m_scores.o \
 	minigames/adv/m_swap.o \
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index b8c3d5edecd..04c544970ca 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -72,6 +72,7 @@
 
 // klepa
 #include "qdengine/minigames/adv/m_puzzle.h"
+#include "qdengine/minigames/adv/m_karaoke.h"
 
 namespace QDEngine {
 
@@ -345,11 +346,12 @@ bool qdMiniGame::load_interface() {
 			return true;
 
 		// klepa
-		// Karaoke.dll
-		// puzzle.dll
 		} else if (_dll_name == "DLL\\puzzle.dll") {
 			_interface = create_adv_minigame(_dll_name.c_str(), createMinigamePuzzle);
 			return true;
+		} else if (_dll_name == "DLL\\Karaoke.dll") {
+			_interface = create_adv_minigame(_dll_name.c_str(), createMinigameKaraoke);
+			return true;
 
 		// 3mice2
 		} else if (_dll_name == "DLL\\3Mice2_sbor_karty.dll") {


Commit: fc772bcac626da07653e45552c26620f2524d0d1
    https://github.com/scummvm/scummvm/commit/fc772bcac626da07653e45552c26620f2524d0d1
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-29T21:23:55+02:00

Commit Message:
QDENGINE: Fix signed/unsigned mismatch warnings

Changed paths:
    engines/qdengine/minigames/adv/m_karaoke.cpp


diff --git a/engines/qdengine/minigames/adv/m_karaoke.cpp b/engines/qdengine/minigames/adv/m_karaoke.cpp
index ede6fcfc7f3..b084bba49aa 100644
--- a/engines/qdengine/minigames/adv/m_karaoke.cpp
+++ b/engines/qdengine/minigames/adv/m_karaoke.cpp
@@ -164,7 +164,7 @@ void Karaoke::quant(float dt) {
 	Node& node = nodes_[currentTag_];
 	if (node.type == CLEAR) {
 		++currentTag_;
-		if (currentTag_ == nodes_.size())
+		if ((uint)currentTag_ == nodes_.size())
 			setState(MinigameInterface::GAME_WIN);
 		startScreenTag_ = currentTag_;
 		return;
@@ -174,7 +174,7 @@ void Karaoke::quant(float dt) {
 	outText += colorReaded_;
 	int idx = startScreenTag_;
 	while (idx < currentTag_) {
-		assert(idx < nodes_.size());
+		assert((uint)idx < nodes_.size());
 		assert(nodes_[idx].type == STRING);
 		outText += nodes_[idx].text.c_str();
 		++idx;
@@ -186,7 +186,7 @@ void Karaoke::quant(float dt) {
 		outText += node.text + "&>";
 		++currentTag_;
 		startTagTime_ += node.time;
-		if (currentTag_ == nodes_.size())
+		if ((uint)currentTag_ == nodes_.size())
 			setState(MinigameInterface::GAME_WIN);
 	} else {
 		int part = phase * node.text.size();
@@ -195,7 +195,7 @@ void Karaoke::quant(float dt) {
 	}
 
 	++idx;
-	while (idx < nodes_.size()) {
+	while ((uint)idx < nodes_.size()) {
 		if (nodes_[idx].type == CLEAR)
 			break;
 		outText += nodes_[idx].text.c_str();


Commit: 0fdfeb74a2853234657f4626e5474599e5a256e7
    https://github.com/scummvm/scummvm/commit/0fdfeb74a2853234657f4626e5474599e5a256e7
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-29T21:23:55+02:00

Commit Message:
QDENGINE: Simulate RBUTTON as ALT+LBUTTON

Changed paths:
    engines/qdengine/minigames/adv/RunTime.cpp


diff --git a/engines/qdengine/minigames/adv/RunTime.cpp b/engines/qdengine/minigames/adv/RunTime.cpp
index 479aa01ae3d..8dc23dfaa1b 100644
--- a/engines/qdengine/minigames/adv/RunTime.cpp
+++ b/engines/qdengine/minigames/adv/RunTime.cpp
@@ -721,8 +721,16 @@ const char *MinigameManager::parameter(const char *name, const char *def) const
 }
 
 bool MinigameManager::mouseLeftPressed() const {
-	if (_invertMouseButtons)
+	if (_invertMouseButtons) {
+		if (keyPressed(VK_LMENU)) {
+			return _engine->is_mouse_event_active(qdEngineInterface::MOUSE_EV_LEFT_DOWN);
+		}
 		return _engine->is_mouse_event_active(qdEngineInterface::MOUSE_EV_RIGHT_DOWN);
+	}
+
+	if (keyPressed(VK_LMENU))
+		return false;
+
 	return _engine->is_mouse_event_active(qdEngineInterface::MOUSE_EV_LEFT_DOWN);
 
 }
@@ -730,6 +738,10 @@ bool MinigameManager::mouseLeftPressed() const {
 bool MinigameManager::mouseRightPressed() const {
 	if (_invertMouseButtons)
 		return _engine->is_mouse_event_active(qdEngineInterface::MOUSE_EV_LEFT_DOWN);
+
+	if (keyPressed(VK_LMENU)) {
+		return _engine->is_mouse_event_active(qdEngineInterface::MOUSE_EV_LEFT_DOWN);
+	}
 	return _engine->is_mouse_event_active(qdEngineInterface::MOUSE_EV_RIGHT_DOWN);
 
 }


Commit: 24c83a628e7d6e1fe6736dab56c43be8abefe4f3
    https://github.com/scummvm/scummvm/commit/24c83a628e7d6e1fe6736dab56c43be8abefe4f3
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-29T21:23:55+02:00

Commit Message:
QDENGINE: Fix text input handling

Changed paths:
    engines/qdengine/qdcore/qd_interface_text_window.cpp
    engines/qdengine/qdengine.cpp


diff --git a/engines/qdengine/qdcore/qd_interface_text_window.cpp b/engines/qdengine/qdcore/qd_interface_text_window.cpp
index 33d5950c482..b9559ef34d6 100644
--- a/engines/qdengine/qdcore/qd_interface_text_window.cpp
+++ b/engines/qdengine/qdcore/qd_interface_text_window.cpp
@@ -166,11 +166,8 @@ bool qdInterfaceTextWindow::keyboard_handler(Common::KeyCode vkey) {
 }
 
 bool qdInterfaceTextWindow::char_input_handler(int input) {
-	warning("STUB: qdInterfaceTextWindow::char_input_handler");
-	bool ret = false;
-#if 0
-	bool ret = __super::char_input_handler(input);
-#endif
+	bool ret = qdInterfaceElement::char_input_handler(input);
+
 	if (_windowType == WINDOW_EDIT && _isEditing) {
 		if (!_inputStringLimit || (int)_inputString.size() < _inputStringLimit) {
 			if (Common::isPrint(input) || input == '_' || input == '-' || input == ' ') {
diff --git a/engines/qdengine/qdengine.cpp b/engines/qdengine/qdengine.cpp
index e9263436adb..f0e6041585f 100644
--- a/engines/qdengine/qdengine.cpp
+++ b/engines/qdengine/qdengine.cpp
@@ -288,6 +288,7 @@ Common::Error QDEngineEngine::run() {
 				} else if (event.kbd.ascii == 'g')
 					qdGameConfig::get_config().toggle_show_grid();
 #endif
+				grDispatcher::instance()->handle_char_input(event.kbd.keycode);
 				break;
 			default:
 				break;




More information about the Scummvm-git-logs mailing list