diff --git a/changelog b/changelog index 59b7969023ee..88d6c8c5da8d 100644 --- a/changelog +++ b/changelog @@ -31,6 +31,9 @@ Version 1.13.0+dev: (bug #20337). * Hide mod options from the user command prompt dialog in the MP lobby when not authenticated as a mod. + * Fixed unit bars, ellipses, and orbs disappearing for individual units in + replay mode when using Skip Animations/Quick Replays if they moved without + attacking or otherwise switching to a new animation. * WML engine: * Added support for [object] duration=turn end * New or updated image path functions: diff --git a/players_changelog b/players_changelog index 26ffa3958fe0..381b5f22adf2 100644 --- a/players_changelog +++ b/players_changelog @@ -25,6 +25,9 @@ Version 1.13.0+dev: * Force uniform font rendering settings across X11 and Apple OS X, avoiding color glitches resulting from incorrect applications of subpixel hinting (bug #20337). + * Fixed unit bars, ellipses, and orbs disappearing for individual units in + replay mode when using Skip Animations/Quick Replays if they moved without + attacking or otherwise switching to a new animation. * Miscellaneous and bug fixes: * Fixed a segfault in [move_units_fake] diff --git a/src/actions/move.cpp b/src/actions/move.cpp index cf9ce91aa8ca..e80967fd0eb2 100644 --- a/src/actions/move.cpp +++ b/src/actions/move.cpp @@ -504,6 +504,9 @@ namespace { // Private helpers for move_unit() // Update the moving unit. move_it_ = move_result.first; move_it_->set_facing(step_from->get_relative_dir(*step_to)); + // Disable bars. The expectation here is that the animation + // unit_mover::finish() will clean after us at a later point. Ugly, + // but it works. move_it_->anim_comp().set_standing(false); disp.invalidate_unit_after_move(*move_loc_, *step_to); disp.invalidate(*step_to); diff --git a/src/unit_display.cpp b/src/unit_display.cpp index b4bb012e71ff..bb532e651fc9 100644 --- a/src/unit_display.cpp +++ b/src/unit_display.cpp @@ -415,8 +415,13 @@ void unit_mover::wait_for_anims() void unit_mover::finish(unit_ptr u, map_location::DIRECTION dir) { // Nothing to do here if the display is not valid. - if ( !can_draw_ ) + if ( !can_draw_ ) { + // Make sure to reset the unit's animation to deal with a quirk in the + // action engine where it leaves it to us to reenable bars even if the + // display is initially locked. + u->anim_comp().set_standing(true); return; + } const map_location & end_loc = path_[current_]; const map_location::DIRECTION final_dir = current_ == 0 ?