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

sev- noreply at scummvm.org
Tue Mar 18 17:43:46 UTC 2025


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

Summary:
58c620c69a QDENGINE: Add enum value for nonexistent movement mode
cae8bb6fd7 QDENGINE: Fix movement logic for nonexistent movement mode


Commit: 58c620c69a986b81c682555325feb96aad87a7cb
    https://github.com/scummvm/scummvm/commit/58c620c69a986b81c682555325feb96aad87a7cb
Author: Alikhan Balpykov (lowliet1990 at mail.ru)
Date: 2025-03-19T01:43:43+08:00

Commit Message:
QDENGINE: Add enum value for nonexistent movement mode

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


diff --git a/engines/qdengine/qdcore/qd_game_object_moving.cpp b/engines/qdengine/qdcore/qd_game_object_moving.cpp
index 3dc56bad7db..815a8947916 100644
--- a/engines/qdengine/qdcore/qd_game_object_moving.cpp
+++ b/engines/qdengine/qdcore/qd_game_object_moving.cpp
@@ -78,7 +78,12 @@ qdGameObjectMoving::qdGameObjectMoving() :
 	_ignore_personages = false;
 	_is_selected = false;
 	set_flag(QD_OBJ_HAS_BOUND_FLAG);
-	_movement_mode = MOVEMENT_MODE_STOP;
+
+	if (g_engine->_gameVersion <= 20030919)
+		_movement_mode = MOVEMENT_MODE_NONE_EARLY;
+	else
+		_movement_mode = MOVEMENT_MODE_STOP;
+
 	_movement_mode_time = _movement_mode_time_current = 0.f;
 }
 
@@ -116,7 +121,10 @@ qdGameObjectMoving::qdGameObjectMoving(const qdGameObjectMoving &obj) : qdGameOb
 	_is_selected = false;
 	set_flag(QD_OBJ_HAS_BOUND_FLAG);
 
-	_movement_mode = MOVEMENT_MODE_STOP;
+	if (g_engine->_gameVersion <= 20030919)
+		_movement_mode = MOVEMENT_MODE_NONE_EARLY;
+	else
+		_movement_mode = MOVEMENT_MODE_STOP;
 	_movement_mode_time = _movement_mode_time_current = 0.f;
 
 	_circuit_objs = obj.const_ref_circuit_objs();
@@ -2762,6 +2770,7 @@ static const char *movementList[] = {
 	defEnum(MOVEMENT_MODE_START),
 	defEnum(MOVEMENT_MODE_MOVE),
 	defEnum(MOVEMENT_MODE_END),
+	defEnum(MOVEMENT_MODE_NONE_EARLY),
 };
 
 Common::String qdGameObjectMoving::movement2str(int fl, bool truncate) {
diff --git a/engines/qdengine/qdcore/qd_game_object_moving.h b/engines/qdengine/qdcore/qd_game_object_moving.h
index b49fcf0dc69..17b30c5d22d 100644
--- a/engines/qdengine/qdcore/qd_game_object_moving.h
+++ b/engines/qdengine/qdcore/qd_game_object_moving.h
@@ -49,7 +49,8 @@ public:
 		MOVEMENT_MODE_TURN,
 		MOVEMENT_MODE_START,
 		MOVEMENT_MODE_MOVE,
-		MOVEMENT_MODE_END
+		MOVEMENT_MODE_END,
+		MOVEMENT_MODE_NONE_EARLY
 	};
 
 	//! режимы управления персонажем


Commit: cae8bb6fd7d439c4b133ba95a08e48b89ec1968b
    https://github.com/scummvm/scummvm/commit/cae8bb6fd7d439c4b133ba95a08e48b89ec1968b
Author: Alikhan Balpykov (lowliet1990 at mail.ru)
Date: 2025-03-19T01:43:43+08:00

Commit Message:
QDENGINE: Fix movement logic for nonexistent movement mode

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 815a8947916..4d2692689f8 100644
--- a/engines/qdengine/qdcore/qd_game_object_moving.cpp
+++ b/engines/qdengine/qdcore/qd_game_object_moving.cpp
@@ -532,26 +532,33 @@ bool qdGameObjectMoving::stop_movement() {
 		if (cur_state() == -1) return true;
 
 		qdGameObjectState *st = get_state(cur_state());
-//		if(_movement_mode == MOVEMENT_MODE_MOVE && is_movement_finished() && st->state_type() == qdGameObjectState::STATE_WALK){
-		if (is_movement_finished() && st->state_type() == qdGameObjectState::STATE_WALK) {
-			qdGameObjectStateWalk *wst = static_cast<qdGameObjectStateWalk *>(st);
-
-			if (qdAnimationSet * set = wst->animation_set()) {
-				qdAnimationInfo *inf = set->get_stop_animation_info(_direction_angle);
-				qdAnimation *anm;
-				if (inf && (anm = inf->animation())) {
-					_movement_mode = MOVEMENT_MODE_END;
-					float phase = get_animation()->cur_time_rel();
-					_movement_mode_time = anm->length() * (1.f - phase);
-					_movement_mode_time_current = 0.0f;
-					set_animation_info(inf);
-					get_animation()->set_time_rel(phase);
-					return true;
-				}
+		if (g_engine->_gameVersion <= 20030919) {
+			if (st->state_type() == qdGameObjectState::STATE_WALK) {
+				set_animation_info(static_cast<qdGameObjectStateWalk *>(st)->static_animation_info(_direction_angle));
+				st->stop_sound();
 			}
+		} else {
+	//		if(_movement_mode == MOVEMENT_MODE_MOVE && is_movement_finished() && st->state_type() == qdGameObjectState::STATE_WALK){
+			if (is_movement_finished() && st->state_type() == qdGameObjectState::STATE_WALK) {
+				qdGameObjectStateWalk *wst = static_cast<qdGameObjectStateWalk *>(st);
+
+				if (qdAnimationSet * set = wst->animation_set()) {
+					qdAnimationInfo *inf = set->get_stop_animation_info(_direction_angle);
+					qdAnimation *anm;
+					if (inf && (anm = inf->animation())) {
+						_movement_mode = MOVEMENT_MODE_END;
+						float phase = get_animation()->cur_time_rel();
+						_movement_mode_time = anm->length() * (1.f - phase);
+						_movement_mode_time_current = 0.0f;
+						set_animation_info(inf);
+						get_animation()->set_time_rel(phase);
+						return true;
+					}
+				}
 
-			set_direction(_direction_angle);
-			st->stop_sound();
+				set_direction(_direction_angle);
+				st->stop_sound();
+			}
 		}
 
 		return true;
@@ -727,11 +734,13 @@ Vect3f qdGameObjectMoving::get_future_r(float dt, bool &end_movement, bool real_
 			}
 		}
 		return R();
+	case MOVEMENT_MODE_NONE_EARLY: // _gameVersion <= 20030919
 	default:
 		break;
 	}
 
-	_movement_mode = MOVEMENT_MODE_MOVE;
+	if (_movement_mode != MOVEMENT_MODE_NONE_EARLY)
+		_movement_mode = MOVEMENT_MODE_MOVE;
 
 	float sp, a, sp_max;
 	get_speed_parameters(sp, sp_max, a);
@@ -868,7 +877,7 @@ void qdGameObjectMoving::quant(float dt) {
 		start_auto_move();
 
 	if (check_flag(QD_OBJ_MOVING_FLAG)) {
-		if (future_pos_correct(dt)) {
+		if (g_engine->_gameVersion <= 20030919 || future_pos_correct(dt)) {
 			bool end_movement = false;
 			Vect3f r = get_future_r(dt, end_movement, true);
 
@@ -886,7 +895,14 @@ void qdGameObjectMoving::quant(float dt) {
 					if (_target_angle >= 0.0f)
 						_direction_angle = _target_angle;
 
-					stop_movement();
+					if (g_engine->_gameVersion <= 20030919) {
+						drop_flag(QD_OBJ_MOVING_FLAG);
+						set_direction(_direction_angle);
+
+						if (get_cur_state())
+							get_cur_state()->stop_sound();
+					} else
+						stop_movement();
 				}
 			}
 		} else
@@ -1066,6 +1082,9 @@ bool qdGameObjectMoving::update_screen_pos() {
 				case MOVEMENT_MODE_END:
 					offs_type = qdGameObjectStateWalk::OFFSET_END;
 					break;
+				case MOVEMENT_MODE_NONE_EARLY: // _gameVersion <= 20030919
+					if (!check_flag(QD_OBJ_MOVING_FLAG))
+						offs_type = qdGameObjectStateWalk::OFFSET_STATIC;
 				}
 
 				offs += static_cast<qdGameObjectStateWalk *>(get_cur_state())->center_offset(_direction_angle, offs_type);
@@ -2023,6 +2042,7 @@ bool qdGameObjectMoving::set_walk_animation() {
 				}
 			}
 			break;
+		case MOVEMENT_MODE_NONE_EARLY: // _gameVersion <= 20030919
 		default:
 			break;
 		}
@@ -2069,6 +2089,9 @@ bool qdGameObjectMoving::movement_impulse() {
 	_impulse_direction = -1.0f;
 	_target_angle = -1.0f;
 
+	if (g_engine->_gameVersion <= 20030919)
+		set_walk_animation();
+
 	if (_movement_mode == MOVEMENT_MODE_STOP || _movement_mode == MOVEMENT_MODE_END)
 		_movement_mode = MOVEMENT_MODE_TURN;
 




More information about the Scummvm-git-logs mailing list