[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