[Scummvm-git-logs] scummvm master -> 8763956bd50a72a539154fb5e3abdf8409418e66

sev- noreply at scummvm.org
Tue Sep 10 21:52:59 UTC 2024


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

Summary:
db324acd33 QDENGINE: Initial code for inv_popup.dll for shveik
190bb5db26 QDENGINE: Furhter code for inv_popup.dll used in shveik
343cba819e QDENGINE: Added more characters to transCyrillic
c08bb029d8 QDENGINE: Added sanity check to minigame interface
9e02a2977f QDENGINE: Enabled and plugged in inv_popup.dll for shveik
ff9e303a08 QDENGINE: Revert to VKEYS, since we now have the proer support for it
1e34927ea5 QDENGINE: Fixes to inv_popup.dll used in shveik. Works now
8763956bd5 QDENGINE: Set video playback volume


Commit: db324acd33a4a877af8ab1fbe68fc01e6dfbb828
    https://github.com/scummvm/scummvm/commit/db324acd33a4a877af8ab1fbe68fc01e6dfbb828
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:46+02:00

Commit Message:
QDENGINE: Initial code for inv_popup.dll for shveik

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


diff --git a/engines/qdengine/minigames/inv_popup.h b/engines/qdengine/minigames/inv_popup.h
new file mode 100644
index 00000000000..ff6879762ee
--- /dev/null
+++ b/engines/qdengine/minigames/inv_popup.h
@@ -0,0 +1,130 @@
+/* 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_INV_POPUP_H
+#define QDENGINE_MINIGAMES_INV_POPUP_H
+
+#include "common/debug.h"
+
+#include "qdengine/qd_fwd.h"
+#include "qdengine/qdcore/qd_minigame_interface.h"
+
+namespace QDEngine {
+
+class qdInvPopupMiniGame : public qdMiniGameInterface {
+public:
+	qdInvPopupMiniGame() {}
+	~qdInvPopupMiniGame() {}
+
+	bool init(const qdEngineInterface *engine_interface) {
+		debugC(1, kDebugMinigames, "InvPopup::init()");
+
+		_engine = engine_interface;
+		_scene = engine_interface->current_scene_interface();
+		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");	// "$блокировка_персонажа_флаг"
+
+			_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");	// "%оживляж Швейка разрешен"
+
+			_someFlag = false;
+			_scene->activate_personage("\xd8\xe2\xe5\xe9\xea");	// "Швейк"
+
+			// srand(time(0));
+			_shveikIsMoving = 0;
+			_time = -1.0;
+			_timeout = -1;
+  		return true;
+	}
+
+	bool quant(float dt) {
+		debugC(3, kDebugMinigames, "InvPopup::quant(%f)", dt);
+
+
+		return true;
+	}
+
+	bool finit() {
+		debugC(1, kDebugMinigames, "InvPopup::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 *_invClickObj = nullptr;
+	qdMinigameObjectInterface *_invDescObj = nullptr;
+	qdMinigameObjectInterface *_invDescCloseupObj = nullptr;
+	qdMinigameObjectInterface *_invActiveFlagObj = nullptr;
+	qdMinigameObjectInterface *_shveikObj = nullptr;
+	qdMinigameObjectInterface *_blockPersObj = nullptr;
+	qdMinigameObjectInterface *_blockPersFlagObj = nullptr;
+	qdMinigameObjectInterface *_shveikMoveObj = nullptr;
+	qdMinigameObjectInterface *_shveikMoveEnabledObj = nullptr;
+	qdMinigameObjectInterface *_shveikLookObj = nullptr;
+
+	mgVect2i _hoverObjectPos;
+	mgVect2i _invDescPos;
+	bool _someFlag = false;
+	int _direction = 0;
+	bool  _shveikIsMoving = false;
+	float _time = 0;
+	int _timeout = 0;
+	mgVect2f _oldShveikPos;
+};
+
+} // namespace QDEngine
+
+#endif // QDENGINE_MINIGAMES_INV_POPUP_H
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index 3ed70f302a6..7020adb28a0 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -46,6 +46,9 @@
 #include "qdengine/minigames/book_all.h"
 #include "qdengine/minigames/puzzle_all.h"
 
+// shveik
+#include "qdengine/minigames/inv_popup.h"
+
 
 namespace QDEngine {
 


Commit: 190bb5db26de824dd5e007b7e4286c953880d055
    https://github.com/scummvm/scummvm/commit/190bb5db26de824dd5e007b7e4286c953880d055
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:46+02:00

Commit Message:
QDENGINE: Furhter code for inv_popup.dll used in shveik

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 ff6879762ee..5445cf5b484 100644
--- a/engines/qdengine/minigames/inv_popup.h
+++ b/engines/qdengine/minigames/inv_popup.h
@@ -68,7 +68,237 @@ public:
 	bool quant(float dt) {
 		debugC(3, kDebugMinigames, "InvPopup::quant(%f)", dt);
 
+#if 0
+		if (_blockPersObj->is_state_active("включить")) {
+			_scene->activate_personage("Lock");
+		} else if (_blockPersObj->is_state_active("выключить")) {
+			_scene->activate_personage("Швейк");
+			_blockPersObj->set_state("выключена");
+		}
+
+		qdMinigameObjectInterface *obj;
+
+		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;
+
+		state = _scene->mouse_hover_object_interface()->current_state_name();
+		if (!strstr(state, "#inv#")) {
+			obj = _invDescObj;
+LABEL_20:
+			obj->set_state("00");
+			goto LABEL_21;
+		}
+
+		const char *pos = strstr(state, "#inv#");
+		char buf2[5];
+		strncpy(buf2, pos + 5, 2);
+		strncpy(buf, _invDescCloseupObj->current_state_name(), 2u);
+
+		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 = _hoverObjectPos.x;
+			}
+			_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#");
+					strncpy(buf, pos + 5, 2u);
+					buf[2] = 0;
+
+					_invDescCloseupObj->set_state(buf);
+					_invDescPos.y = 300;
+					_invDescPos.x = 400;
+					_invDescCloseupObj->set_R( _scene->screen2world_coords(_invDescPos, -1000.0));
+					_invDescObj->set_state("00");
+				}
+			}
+		}
+
+		if (Common::String(_blockPersFlagObj->current_state_name()) == "да") {
+			if (!_blockPersObj->is_state_active("включить"))
+				_blockPersObj->set_state("включить");
+		} else if (_blockPersObj->is_state_active("включить")) {
+			_blockPersObj->set_state("выключить");
+		}
+
+		_direction = -10;
+		int angle = (int)(_shveikObj->direction_angle() * 180.0 * 0.3183098865475127);
+
+		if (angle > 220 && angle < 230)
+			_direction = 1;
+		else if (angle > 265 && angle < 275)
+			_direction = 2;
+		else if (angle > 310 && angle < 320)
+			_direction = 3;
+		else if (angle > 175 && angle < 185)
+			_direction = 4;
+		else if (angle >= 0 && angle < 5)
+			_direction = 6;
+		else if (angle > 40 && angle < 50)
+			_direction = 9;
+		else if (angle > 85 && angle < 95)
+			_direction = 8;
+		else if (angle > 130 && angle < 140)
+			_direction = 7;
+
+		Common::String curState = _shveikObj->current_state_name();
+		if (curState == "#1#") {
+			_direction = 1;
+		} else if (curState == "#2#") {
+			_direction = 2;
+		} else if (curState == "#3#") {
+			_direction = 3;
+		} else if (curState == "#4#") {
+			_direction = 4;
+		} else if (curState == "#6#") {
+			_direction = 6;
+		} else if (curState == "#7#") {
+			_direction = 7;
+		} else if (curState == "#8#") {
+			_direction = 8;
+		} else if (curState == "#9#") {
+			_direction = 9;
+		}
+
+		switch (_direction) {
+		case -10:
+			_shveikLookObj->set_state("0");
+			break;
+		case 1:
+			_shveikLookObj->set_state("1");
+			break;
+		case 2:
+			_shveikLookObj->set_state("2");
+			break;
+		case 3:
+			_shveikLookObj->set_state("3");
+			break;
+		case 4:
+			_shveikLookObj->set_state("4");
+			break;
+		case 6:
+			_shveikLookObj->set_state("6");
+			break;
+		case 7:
+			_shveikLookObj->set_state("7");
+			break;
+		case 8:
+			_shveikLookObj->set_state("8");
+			break;
+		case 9:
+			_shveikLookObj->set_state("9");
+			break;
+		default:
+			break;
+		}
+
+		if (curState == "?1?") {
+			_direction = 10;
+		} else if (curState == "?2?") {
+			_direction = 20;
+		} else if (curState == "?3?") {
+			_direction = 30;
+		} else if (curState == "?4?") {
+			_direction = 40;
+		} else if (curState == "?6?") {
+			_direction = 60;
+		} else if (curState == "?7?") {
+			_direction = 70;
+		} else if (curState == "?8?") {
+			_direction = 80;
+		} else if (curState == "?9?") {
+			_direction = 90;
+		}
+
+		switch (_direction) {
+		case 10:
+			_shveikObj->set_direction_angle(5 * M_PI / 4);
+			break;
+		case 20:
+			_shveikObj->set_direction_angle(6 * M_PI / 4);
+			break;
+		case 30:
+			_shveikObj->set_direction_angle(7 * M_PI / 4);
+			break;
+		case 40:
+			_shveikObj->set_direction_angle(M_PI);
+			break;
+		case 60:
+			_shveikObj->set_direction_angle(0.0);
+			break;
+		case 70:
+			_shveikObj->set_direction_angle(3 * M_PI / 4);
+			break;
+		case 80:
+			_shveikObj->set_direction_angle(2 * M_PI / 4);
+			break;
+		case 90:
+			_shveikObj->set_direction_angle(1 * M_PI / 4);
+			break;
+		default:
+			break;
+		}
+
+		if (strstr(_shveikMoveEnabledObj->current_state_name(), "да")) {
+			if (!_shveikIsMoving) {
+				_shveikIsMoving = 1;
+				_time = 0.0;
+				_timeout = qd_rnd(10) + 5;
+			}
+
+			if (_timeout >= _time || _time == -1.0) {
+				_time = dt + _time;
+			} else {
+				_shveikIsMoving = 2;
+				_time = -1.0;
+				_shveikMoveObj->set_state("выполнить");
+			}
+		}
+
+		if ((strstr(_shveikMoveEnabledObj->current_state_name(), "нет") || _shveikMoveObj->is_state_active("отработан"))
+				&& _shveikIsMoving > 0) {
+			_shveikIsMoving = 0;
+			_time = -1.0;
+			_timeout = -1;
+			_shveikMoveObj->set_state("ожидание");
+		}
+
+		if ((_shveikObj->R().x != _oldShveikPos.x
+				|| _shveikObj->R().y != _oldShveikPos.y)
+				&& _shveikIsMoving > 0) {
+			_shveikIsMoving = 0;
+			_time = -1.0;
+			_timeout = -1;
+			_shveikMoveObj->set_state("ожидание");
+		}
 
+		_oldShveikPos = _shveikObj->R();
+#endif
 		return true;
 	}
 


Commit: 343cba819e58e749e9600efd38d60a10fef79d8e
    https://github.com/scummvm/scummvm/commit/343cba819e58e749e9600efd38d60a10fef79d8e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:46+02:00

Commit Message:
QDENGINE: Added more characters to transCyrillic

This covers shveik output

Changed paths:
    engines/qdengine/qdengine.cpp


diff --git a/engines/qdengine/qdengine.cpp b/engines/qdengine/qdengine.cpp
index a41e42549d5..e9bf5183689 100644
--- a/engines/qdengine/qdengine.cpp
+++ b/engines/qdengine/qdengine.cpp
@@ -531,7 +531,8 @@ byte *transCyrillic(const Common::String &str) {
 	static byte tmp[1024];
 
 #ifndef WIN32
-	static int trans[] = { 0xa8, 0xd081, 0xb8, 0xd191, 0xc0, 0xd090,
+	static int trans[] = {
+		0xa8, 0xd081, 0xab, 0xc2ab, 0xb8, 0xd191, 0xbb, 0xc2bb, 0xc0, 0xd090,
 		0xc1, 0xd091, 0xc2, 0xd092, 0xc3, 0xd093, 0xc4, 0xd094,
 		0xc5, 0xd095, 0xc6, 0xd096, 0xc7, 0xd097, 0xc8, 0xd098,
 		0xc9, 0xd099, 0xca, 0xd09a, 0xcb, 0xd09b, 0xcc, 0xd09c,
@@ -578,10 +579,18 @@ byte *transCyrillic(const Common::String &str) {
 				}
 			}
 
-			if (*p == 0x96) {  // "–" -- EN DASH
+			if (*p == 0x85) {  // "…" -- Horizontal Ellipsis
+				tmp[i++] = 0xE2;
+				tmp[i++] = 0x80;
+				tmp[i++] = 0xA6;
+			} else if (*p == 0x96) {  // "–" -- EN DASH
 				tmp[i++] = 0xE2;
 				tmp[i++] = 0x80;
 				tmp[i++] = 0x93;
+			} else if (*p == 0x97) {  // "–" -- EM DASH
+				tmp[i++] = 0xE2;
+				tmp[i++] = 0x80;
+				tmp[i++] = 0x94;
 			} else {
 				if (!trans[j]) {
 					warning("transCyrillic: no mapping for %d (0x%x)", *p, *p);


Commit: c08bb029d805df9c424ee9b53d583d0f9430ff2c
    https://github.com/scummvm/scummvm/commit/c08bb029d805df9c424ee9b53d583d0f9430ff2c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:47+02:00

Commit Message:
QDENGINE: Added sanity check to minigame interface

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


diff --git a/engines/qdengine/qdcore/qd_minigame_interface.cpp b/engines/qdengine/qdcore/qd_minigame_interface.cpp
index 481e56ebf59..e90d7fc6f64 100644
--- a/engines/qdengine/qdcore/qd_minigame_interface.cpp
+++ b/engines/qdengine/qdcore/qd_minigame_interface.cpp
@@ -312,6 +312,8 @@ qdMinigameObjectInterface *qdMinigameSceneInterfaceImpl::object_interface(const
 	if (qdGameObjectAnimated * p = dynamic_cast<qdGameObjectAnimated * >(_scene->get_object(object_name)))
 		return new qdMinigameObjectInterfaceImpl(p);
 
+	warning("object_interface(): Unknown object '%s'", transCyrillic(object_name));
+
 	return NULL;
 }
 
@@ -319,6 +321,8 @@ qdMinigameObjectInterface *qdMinigameSceneInterfaceImpl::personage_interface(con
 	if (qdGameObjectMoving * p = dynamic_cast<qdGameObjectMoving * >(_scene->get_object(personage_name)))
 		return new qdMinigamePersonageInterfaceImpl(p);
 
+	warning("personage_interface(): Unknown personage '%s'", transCyrillic(personage_name));
+
 	return NULL;
 }
 
@@ -391,6 +395,9 @@ const char *qdMinigameObjectInterfaceImplBase::current_state_name() const {
 }
 
 bool qdMinigameObjectInterfaceImplBase::is_state_active(const char *state_name) const {
+	if (!has_state(state_name))
+		warning("is_state_active(): Unknown state '%s'", transCyrillic(state_name));
+
 	return _object->is_state_active(state_name);
 }
 
@@ -409,6 +416,8 @@ bool qdMinigameObjectInterfaceImplBase::set_state(const char *state_name) {
 		return true;
 	}
 
+	warning("set_state(): Unknown state '%s'", transCyrillic(state_name));
+
 	return false;
 }
 
@@ -421,6 +430,8 @@ int qdMinigameObjectInterfaceImplBase::state_index(const char *state_name) const
 	if (const qdGameObjectState * p = _object->get_state(state_name))
 		return _object->get_state_index(p);
 
+	warning("state_index(): Unknown state '%s'", transCyrillic(state_name));
+
 	return -1;
 }
 


Commit: 9e02a2977f7f2d229c27a583a41f9493931d3307
    https://github.com/scummvm/scummvm/commit/9e02a2977f7f2d229c27a583a41f9493931d3307
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:47+02:00

Commit Message:
QDENGINE: Enabled and plugged in inv_popup.dll for shveik

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


diff --git a/engines/qdengine/minigames/inv_popup.h b/engines/qdengine/minigames/inv_popup.h
index 5445cf5b484..832115e39f3 100644
--- a/engines/qdengine/minigames/inv_popup.h
+++ b/engines/qdengine/minigames/inv_popup.h
@@ -43,8 +43,8 @@ public:
 			return false;
 
 			_invClickObj = _scene->object_interface("$inv_click_flag");
-			_invDescObj = _scene->object_interface("%%inv_desc");
-			_invDescCloseupObj = _scene->object_interface("%%inv_desc_closeup");
+			_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");	// "$блокировка_персонажа_флаг"
@@ -68,7 +68,6 @@ public:
 	bool quant(float dt) {
 		debugC(3, kDebugMinigames, "InvPopup::quant(%f)", dt);
 
-#if 0
 		if (_blockPersObj->is_state_active("включить")) {
 			_scene->activate_personage("Lock");
 		} else if (_blockPersObj->is_state_active("выключить")) {
@@ -87,6 +86,7 @@ public:
 
 		char buf[5];
 		const char *state;
+		const char *pos;
 
 		state = _scene->mouse_hover_object_interface()->current_state_name();
 		if (!strstr(state, "#inv#")) {
@@ -96,10 +96,10 @@ LABEL_20:
 			goto LABEL_21;
 		}
 
-		const char *pos = strstr(state, "#inv#");
+		pos = strstr(state, "#inv#");
 		char buf2[5];
 		strncpy(buf2, pos + 5, 2);
-		strncpy(buf, _invDescCloseupObj->current_state_name(), 2u);
+		strncpy(buf, _invDescCloseupObj->current_state_name(), 2);
 
 		if (buf2[0] != buf[0] || buf2[1] != buf[1]) {
 			_invDescObj->set_state(buf2);
@@ -115,8 +115,8 @@ LABEL_20:
 				} else {
 					_invDescPos.x = _hoverObjectPos.x;
 			}
-			_invDescPos.y = _invDescObj->screen_size()->y / 2 + 73;
-			_invDescObj->set_R(_scene->screen2world_coords(&_invDescPos, -1000.0));
+			_invDescPos.y = _invDescObj->screen_size().y / 2 + 73;
+			_invDescObj->set_R(_scene->screen2world_coords(_invDescPos, -1000.0));
 			_invDescCloseupObj->set_state("00");
 		}
 
@@ -127,7 +127,7 @@ LABEL_21:
 
 				if (strstr(state, "#closeup#")) {
 					pos = strstr(state, "#inv#");
-					strncpy(buf, pos + 5, 2u);
+					strncpy(buf, pos + 5, 2);
 					buf[2] = 0;
 
 					_invDescCloseupObj->set_state(buf);
@@ -298,7 +298,7 @@ LABEL_21:
 		}
 
 		_oldShveikPos = _shveikObj->R();
-#endif
+
 		return true;
 	}
 
@@ -352,7 +352,7 @@ private:
 	bool  _shveikIsMoving = false;
 	float _time = 0;
 	int _timeout = 0;
-	mgVect2f _oldShveikPos;
+	mgVect3f _oldShveikPos;
 };
 
 } // namespace QDEngine
diff --git a/engines/qdengine/qdcore/qd_minigame.cpp b/engines/qdengine/qdcore/qd_minigame.cpp
index 7020adb28a0..7cfa1163ca3 100644
--- a/engines/qdengine/qdcore/qd_minigame.cpp
+++ b/engines/qdengine/qdcore/qd_minigame.cpp
@@ -309,6 +309,9 @@ bool qdMiniGame::load_interface() {
 			return true;
 
 		// shveik
+		} else if (_dll_name == "DLL\\inv_popup.dll") {
+			_interface = new qdInvPopupMiniGame();
+			return true;
 		// ShveikPortret.dll
 		// ShveikShkatulka.dll
 		// inv_popup.dll


Commit: ff9e303a085b3be244cd2512cc92e795d916523a
    https://github.com/scummvm/scummvm/commit/ff9e303a085b3be244cd2512cc92e795d916523a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:47+02:00

Commit Message:
QDENGINE: Revert to VKEYS, since we now have the proer support for it

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


diff --git a/engines/qdengine/qdcore/qd_game_object_moving.cpp b/engines/qdengine/qdcore/qd_game_object_moving.cpp
index 6428979d552..a5316e58b60 100644
--- a/engines/qdengine/qdcore/qd_game_object_moving.cpp
+++ b/engines/qdengine/qdcore/qd_game_object_moving.cpp
@@ -1913,14 +1913,7 @@ bool qdGameObjectMoving::keyboard_move() {
 		bool keypress = false;
 		warning("STUB: qdGameObjectMoving::keyboard_move()");
 
-		static const Common::KeyCode vkeys[6] = {
-			Common::KEYCODE_DOWN,
-			Common::KEYCODE_RIGHT,
-			Common::KEYCODE_UP,
-			Common::KEYCODE_LEFT,
-			Common::KEYCODE_DOWN,
-			Common::KEYCODE_RIGHT
-		};
+		static int vkeys[6] = { VK_DOWN, VK_RIGHT, VK_UP, VK_LEFT, VK_DOWN, VK_RIGHT };
 
 		bool key_state[6];
 


Commit: 1e34927ea59d0b37704dac97c6902b56af18e245
    https://github.com/scummvm/scummvm/commit/1e34927ea59d0b37704dac97c6902b56af18e245
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:47+02:00

Commit Message:
QDENGINE: Fixes to inv_popup.dll used in shveik. Works now

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 832115e39f3..b69a83dbf35 100644
--- a/engines/qdengine/minigames/inv_popup.h
+++ b/engines/qdengine/minigames/inv_popup.h
@@ -42,10 +42,10 @@ public:
 		if (!_scene)
 			return false;
 
-			_invClickObj = _scene->object_interface("$inv_click_flag");
+			//_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");
+			//_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");	// "$блокировка_персонажа_флаг"
 
@@ -68,11 +68,11 @@ public:
 	bool quant(float dt) {
 		debugC(3, kDebugMinigames, "InvPopup::quant(%f)", dt);
 
-		if (_blockPersObj->is_state_active("включить")) {
+		if (_blockPersObj->is_state_active("\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc")) { // "включить"
 			_scene->activate_personage("Lock");
-		} else if (_blockPersObj->is_state_active("выключить")) {
-			_scene->activate_personage("Швейк");
-			_blockPersObj->set_state("выключена");
+		} else if (_blockPersObj->is_state_active("\xe2\xfb\xea\xeb\xfe\xf7\xe8\xf2\xfc")) { // "выключить"
+			_scene->activate_personage("\xd8\xe2\xe5\xe9\xea");	// "Швейк"
+			_blockPersObj->set_state("\xe2\xfb\xea\xeb\xfe\xf7\xe5\xed\xe0");	// "выключена"
 		}
 
 		qdMinigameObjectInterface *obj;
@@ -98,8 +98,8 @@ LABEL_20:
 
 		pos = strstr(state, "#inv#");
 		char buf2[5];
-		strncpy(buf2, pos + 5, 2);
-		strncpy(buf, _invDescCloseupObj->current_state_name(), 2);
+		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);
@@ -127,7 +127,7 @@ LABEL_21:
 
 				if (strstr(state, "#closeup#")) {
 					pos = strstr(state, "#inv#");
-					strncpy(buf, pos + 5, 2);
+					Common::strlcpy(buf, pos + 5, 3);
 					buf[2] = 0;
 
 					_invDescCloseupObj->set_state(buf);
@@ -139,11 +139,11 @@ LABEL_21:
 			}
 		}
 
-		if (Common::String(_blockPersFlagObj->current_state_name()) == "да") {
-			if (!_blockPersObj->is_state_active("включить"))
-				_blockPersObj->set_state("включить");
-		} else if (_blockPersObj->is_state_active("включить")) {
-			_blockPersObj->set_state("выключить");
+		if (Common::String(_blockPersFlagObj->current_state_name()) == "\xe4\xe0") { // "да"
+			if (!_blockPersObj->is_state_active("\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc")) // "включить"
+				_blockPersObj->set_state("\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc"); // "включить"
+		} else if (_blockPersObj->is_state_active("\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc")) { // "включить"
+			_blockPersObj->set_state("\xe2\xfb\xea\xeb\xfe\xf7\xe8\xf2\xfc"); // "выключить"
 		}
 
 		_direction = -10;
@@ -264,7 +264,7 @@ LABEL_21:
 			break;
 		}
 
-		if (strstr(_shveikMoveEnabledObj->current_state_name(), "да")) {
+		if (strstr(_shveikMoveEnabledObj->current_state_name(), "\xe4\xe0")) { // "да"
 			if (!_shveikIsMoving) {
 				_shveikIsMoving = 1;
 				_time = 0.0;
@@ -276,16 +276,17 @@ LABEL_21:
 			} else {
 				_shveikIsMoving = 2;
 				_time = -1.0;
-				_shveikMoveObj->set_state("выполнить");
+				_shveikMoveObj->set_state("\xe2\xfb\xef\xee\xeb\xed\xe8\xf2\xfc"); // "выполнить"
 			}
 		}
 
-		if ((strstr(_shveikMoveEnabledObj->current_state_name(), "нет") || _shveikMoveObj->is_state_active("отработан"))
+		if ((strstr(_shveikMoveEnabledObj->current_state_name(), "\xed\xe5\xf2")	// "нет"
+				|| _shveikMoveObj->is_state_active("\xee\xf2\xf0\xe0\xe1\xee\xf2\xe0\xed"))		// "отработан"
 				&& _shveikIsMoving > 0) {
 			_shveikIsMoving = 0;
 			_time = -1.0;
 			_timeout = -1;
-			_shveikMoveObj->set_state("ожидание");
+			_shveikMoveObj->set_state("\xee\xe6\xe8\xe4\xe0\xed\xe8\xe5"); // "ожидание"
 		}
 
 		if ((_shveikObj->R().x != _oldShveikPos.x
@@ -294,7 +295,7 @@ LABEL_21:
 			_shveikIsMoving = 0;
 			_time = -1.0;
 			_timeout = -1;
-			_shveikMoveObj->set_state("ожидание");
+			_shveikMoveObj->set_state("\xee\xe6\xe8\xe4\xe0\xed\xe8\xe5"); // "ожидание"
 		}
 
 		_oldShveikPos = _shveikObj->R();
@@ -334,10 +335,10 @@ private:
 	const qdEngineInterface *_engine = nullptr;
 	qdMinigameSceneInterface *_scene = nullptr;
 
-	qdMinigameObjectInterface *_invClickObj = nullptr;
+//	qdMinigameObjectInterface *_invClickObj = nullptr;
 	qdMinigameObjectInterface *_invDescObj = nullptr;
 	qdMinigameObjectInterface *_invDescCloseupObj = nullptr;
-	qdMinigameObjectInterface *_invActiveFlagObj = nullptr;
+//	qdMinigameObjectInterface *_invActiveFlagObj = nullptr;
 	qdMinigameObjectInterface *_shveikObj = nullptr;
 	qdMinigameObjectInterface *_blockPersObj = nullptr;
 	qdMinigameObjectInterface *_blockPersFlagObj = nullptr;


Commit: 8763956bd50a72a539154fb5e3abdf8409418e66
    https://github.com/scummvm/scummvm/commit/8763956bd50a72a539154fb5e3abdf8409418e66
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-10T23:52:47+02:00

Commit Message:
QDENGINE: Set video playback volume

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 67f89ab279f..64b378cf5c6 100644
--- a/engines/qdengine/qdcore/util/WinVideo.cpp
+++ b/engines/qdengine/qdcore/util/WinVideo.cpp
@@ -18,7 +18,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
+#include "common/config-manager.h"
 #include "common/file.h"
+
 #include "graphics/managed_surface.h"
 
 #include "video/mpegps_decoder.h"
@@ -100,6 +102,7 @@ bool winVideo::play() {
 		return false;
 	}
 
+	_decoder->setVolume(ConfMan.getInt("music_volume"));
 	_decoder->start();
 	return true;
 }




More information about the Scummvm-git-logs mailing list