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

sev- noreply at scummvm.org
Mon May 26 15:49:15 UTC 2025


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

Summary:
352fab947e QDENGINE: Fix tag dates
568ba16a65 QDENGINE: Fix character being uncontrollable in rybalka
6186e3c2a6 QDENGINE: Fix camera scrolling issue in karliknos
a5d4f6ba6c QDENGINE: Fix path straightening for older game versions


Commit: 352fab947e074685f66e004e435320f40c633e6e
    https://github.com/scummvm/scummvm/commit/352fab947e074685f66e004e435320f40c633e6e
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-26T17:49:11+02:00

Commit Message:
QDENGINE: Fix tag dates

Changed paths:
    engines/qdengine/parser/qdscr_parser.h


diff --git a/engines/qdengine/parser/qdscr_parser.h b/engines/qdengine/parser/qdscr_parser.h
index 5b9805f966c..6bdf6ee6458 100644
--- a/engines/qdengine/parser/qdscr_parser.h
+++ b/engines/qdengine/parser/qdscr_parser.h
@@ -583,13 +583,13 @@ const int idTagVersionAll[490] = {
 	20040428, QDSCR_ATTACH_SHIFT,
 	20030704, QDSCR_PERSONAGE_CONTROL,			// 155
 	20030716, QDSCR_PERSONAGE_MOVEMENT_TYPE,
-	20050101, QDSCR_ROTATION_ANGLE_PER_QUANT,
+	20041201, QDSCR_ROTATION_ANGLE_PER_QUANT,
 
 	// Inventory
 	20021114, QDSCR_INVENTORY_CELL_TYPE,
 	20021114, QDSCR_INVENTORY_CELL_SET,
 	20021114, QDSCR_INVENTORY_CELL_SET_SIZE,		// 160
-	20041201, QDSCR_INVENTORY_CELL_SET_ADDITIONAL_CELLS,
+	20050101, QDSCR_INVENTORY_CELL_SET_ADDITIONAL_CELLS,
 	20021114, QDSCR_INVENTORY_CELL_SET_POS,
 	20021114, QDSCR_INVENTORY,
 


Commit: 568ba16a6520b99aaf01ee1a1e16c1bfcc97a4c8
    https://github.com/scummvm/scummvm/commit/568ba16a6520b99aaf01ee1a1e16c1bfcc97a4c8
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-26T17:49:11+02:00

Commit Message:
QDENGINE: Fix character being uncontrollable in rybalka

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


diff --git a/engines/qdengine/qdcore/qd_game_scene.cpp b/engines/qdengine/qdcore/qd_game_scene.cpp
index 26bbca2861d..02637c47de4 100644
--- a/engines/qdengine/qdcore/qd_game_scene.cpp
+++ b/engines/qdengine/qdcore/qd_game_scene.cpp
@@ -896,6 +896,10 @@ void qdGameScene::set_active_personage(qdGameObjectMoving *p) {
 
 	_camera.set_default_object(p);
 
+	if (g_engine->_gameVersion <= 20040601) {
+		_selected_object->set_last_move_order(_selected_object->R());
+	}
+
 	if (p && p->has_camera_mode()) {
 		_camera.set_mode(p->camera_mode(), p);
 		_camera.set_default_mode(p->camera_mode());


Commit: 6186e3c2a686a4d4adec052cb3466d6f5bd4ed38
    https://github.com/scummvm/scummvm/commit/6186e3c2a686a4d4adec052cb3466d6f5bd4ed38
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-26T17:49:11+02:00

Commit Message:
QDENGINE: Fix camera scrolling issue in karliknos

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


diff --git a/engines/qdengine/qdcore/qd_game_scene.cpp b/engines/qdengine/qdcore/qd_game_scene.cpp
index 02637c47de4..ba4be37df1f 100644
--- a/engines/qdengine/qdcore/qd_game_scene.cpp
+++ b/engines/qdengine/qdcore/qd_game_scene.cpp
@@ -1723,7 +1723,7 @@ void qdGameScene::create_minigame_objects() {
 }
 
 bool qdGameScene::set_camera_mode(const qdCameraMode &mode, qdGameObjectAnimated *object) {
-	if (!_camera.can_change_mode())
+	if (g_engine->_gameVersion > 20040601 && !_camera.can_change_mode())
 		return false;
 
 	if (object && object->named_object_type() == QD_NAMED_OBJECT_MOVING_OBJ && object != _selected_object)


Commit: a5d4f6ba6cba0567584461ec52350bf5fee0afeb
    https://github.com/scummvm/scummvm/commit/a5d4f6ba6cba0567584461ec52350bf5fee0afeb
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-05-26T17:49:11+02:00

Commit Message:
QDENGINE: Fix path straightening for older game versions

Changed paths:
    engines/qdengine/qdcore/qd_game_object_moving.cpp
    engines/qdengine/qdcore/qd_game_object_moving.h
    engines/qdengine/qdcore/util/AIAStar_API.cpp


diff --git a/engines/qdengine/qdcore/qd_game_object_moving.cpp b/engines/qdengine/qdcore/qd_game_object_moving.cpp
index 92a66645ec3..f559f12e9bf 100644
--- a/engines/qdengine/qdcore/qd_game_object_moving.cpp
+++ b/engines/qdengine/qdcore/qd_game_object_moving.cpp
@@ -2305,8 +2305,8 @@ bool qdGameObjectMoving::del_coll_pts(Std::list<Vect2i> &path) const {
 }
 
 // Вспомогательная функция - пытается спрямить отрезок пути из четырех точек, начиная с cur
-/*
-bool qdGameObjectMoving::four_pts_eight_dir_straight(Std::list<Vect2i> path,
+
+bool qdGameObjectMoving::four_pts_eight_dir_straight_old(Std::list<Vect2i> path,
                                                      const Std::list<Vect2i>::iterator cur) const
 {
     // Извлекаем четыре точки
@@ -2318,6 +2318,9 @@ bool qdGameObjectMoving::four_pts_eight_dir_straight(Std::list<Vect2i> path,
         pts[i] = (*buf);
         ++buf;
     }
+
+	const double SQRT_2_DIV_2 = 0.7071067811865475244;
+
     // Проверяем - является ли четверка точек "вытянутым зигзагом"
     if ((fabs(vec_cos(pts[1] - pts[0], pts[2] - pts[1]) - SQRT_2_DIV_2) > 0.0001) ||
         (fabs(vec_cos(pts[2] - pts[1], pts[3] - pts[2]) - SQRT_2_DIV_2) > 0.0001) ||
@@ -2349,7 +2352,6 @@ bool qdGameObjectMoving::four_pts_eight_dir_straight(Std::list<Vect2i> path,
 
     return false;
 }
-*/
 
 bool qdGameObjectMoving::four_pts_eight_dir_straight(Std::list<Vect2i> &path, Std::list<Vect2i>::reverse_iterator cur) const {
 	// Извлекаем четыре точки
@@ -2390,13 +2392,27 @@ bool qdGameObjectMoving::four_pts_eight_dir_straight(Std::list<Vect2i> &path, St
 }
 
 void qdGameObjectMoving::optimize_path_eight_dirs(Std::list<Vect2i> &path) const {
-	// Спрямляем, пока спрямляется, но не более чем EIGHT_DIRS_OPT_ITER_MAX раз
+	if (g_engine->_gameVersion <= 20041201) {
+		bool changed;
+		int step = 0;
+		do {
+			step++;
+			del_coll_pts(path); // Для успешного спрямления путь не должен содержать более
+								// двух последовательных точек, лежащих на одной прямой
+			changed = false;
+			for (Std::list<Vect2i>::iterator it = path.begin(); it != path.end(); ++it)
+				if (four_pts_eight_dir_straight_old(path, it) && !changed)
+					changed = true;
+		} while (changed && (step < 2));
+	} else {
+		// Спрямляем, пока спрямляется, но не более чем EIGHT_DIRS_OPT_ITER_MAX раз
 
-	for (int i = 0; i < EIGHT_DIRS_OPT_ITER_MAX; i++) {
-		for (Std::list<Vect2i>::reverse_iterator it = path.rbegin(); it != path.rend(); ++it)
-			four_pts_eight_dir_straight(path, it);
+		for (int i = 0; i < EIGHT_DIRS_OPT_ITER_MAX; i++) {
+			for (Std::list<Vect2i>::reverse_iterator it = path.rbegin(); it != path.rend(); ++it)
+				four_pts_eight_dir_straight(path, it);
 
-		if (!del_coll_pts(path)) break;
+			if (!del_coll_pts(path)) break;
+		}
 	}
 }
 
diff --git a/engines/qdengine/qdcore/qd_game_object_moving.h b/engines/qdengine/qdcore/qd_game_object_moving.h
index 17b30c5d22d..b234a70a361 100644
--- a/engines/qdengine/qdcore/qd_game_object_moving.h
+++ b/engines/qdengine/qdcore/qd_game_object_moving.h
@@ -450,6 +450,7 @@ private:
 	// Спрямление четырех точек для пути с восемью направлениями
 	bool four_pts_eight_dir_straight(Std::list<Vect2i> &path,
 	                                 Std::list<Vect2i>::reverse_iterator cur) const;
+	bool four_pts_eight_dir_straight_old(Std::list<Vect2i> path, Std::list<Vect2i>::iterator cur) const;
 	// Удаляем точки, лежащие внутри прямых отрезков пути
 	bool del_coll_pts(Std::list<Vect2i> &path) const;
 	void optimize_path_eight_dirs(Std::list<Vect2i> &path) const;
diff --git a/engines/qdengine/qdcore/util/AIAStar_API.cpp b/engines/qdengine/qdcore/util/AIAStar_API.cpp
index 9e13081441c..5684c2c3d2c 100644
--- a/engines/qdengine/qdcore/util/AIAStar_API.cpp
+++ b/engines/qdengine/qdcore/util/AIAStar_API.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "qdengine/qdengine.h"
 #include "qdengine/qd_fwd.h"
 #include "qdengine/xmath.h"
 #include "qdengine/qdcore/qd_camera.h"
@@ -38,9 +39,12 @@ int qdHeuristic::getH(int x, int y) {
 	x -= _target.x;
 	y -= _target.y;
 
-	//return sqrt(static_cast<float>(x * x + y * y));
-	// Достаточно будет эвристики без квадратного корня, который медленный
-	return static_cast<float>(x * x + y * y);
+	if (g_engine->_gameVersion <= 20041201) {
+		return sqrt(static_cast<float>(x * x + y * y));
+	} else {
+		// Достаточно будет эвристики без квадратного корня, который медленный
+		return static_cast<float>(x * x + y * y);
+	}
 }
 
 int qdHeuristic::getG(int x1, int y1, int x2, int y2) {




More information about the Scummvm-git-logs mailing list