View Issue Details

IDProjectCategoryView StatusLast Update
0004530Spring engineGeneralpublic2016-02-05 00:40
ReporterGoogle_Frog Assigned ToKloot  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionno change required 
Product Version97.0.1+git 
Summary0004530: 97.0.1-360 Low turnrate units oversteer significantly
DescriptionUnits with high speed compared to their turnrate oversteer when given move orders while they are already moving. This is because their path is calculated when the order is given but continue moving and miss their waypoint. They then turn around to try to reach the start of their path. Their attempt to reach the start of their path causes them to turn too far such that they then need to turn back in order to face their goal.

This problem is obvious when units already in motion are given short move orders through a pathable area. This is an important case because common unit control consists of giving short move orders. Players want their units to move towards the move order as soon as they turn to face it. Noticeable overshoot has caused reports of units being very hard to control and not listening to orders properly.

To fix this units need to consider part of their red pathfinder path reached if they are facing it and there is nothing in the way. In terms of the debug view the red arrow which reaches out and destroys the end of the red line needs to be longer. There is less of a problem in 91.0 and the required distance to destroy the red path seems to be larger.

The effect can be seen with fast turning units such as Glaive (armpw). It is still annoying in this case that the Glaive wastes time turning too far.
Steps To ReproduceThe attached replay has examples of Dart (corfav) and Skeeter (shipscout) oversteering when told to move around a flat area. Skeeter is quite an extreme example and can oversteer twice in one move order.
Game: Zero-K v1.2.9.0
Additional InformationSkeeters throughout this game do a lot of unnecessary turning while trying to follow their path. They are configured to never turn in place so acts as a good example.
http://zero-k.info/Battles/Detail/291396

0:36 - Skeeter in the middle of the map ducks into the middle island. A Skeeter in the South is told to move slightly South West and first turns to face in the opposite direction.

1:04 - Skeeter in North West.
TagsNo tags attached.
Attached Files
20140903_231939_ScorpioBattleground_97.0.1-360-ge3d46de develop.sdf (Attachment missing)
Checked infolog.txt for Errors

Activities

Google_Frog

2014-09-06 18:34

reporter   ~0013610

I bisected the issue to between 96.0.1-300 and 96.0.1-342. The cause seems to be this commit:
https://github.com/spring/spring/commit/7d1154b47dfdb34c9b43e250d34351e248d09c09

* model rotational inertia for ground units; make a call
  to MoveCtrl.SetGroundMoveTypeData with key "turnAccel"
  to change per-unit behavior
  turnAccel defaults to 0.333*turnRate for all ground
  units except ships which use a more realistic default
  of 0.0333*turnRate

The special multiplier for ships explains why sea behaviour was particularly bad. I do not want to look into using this new feature yet so I set turn inertia to a larger value with this gadget:
https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Gadgets/unit_turn_without_interia.lua

Units with increased turnAccel seem to avoid oversteering as well as they did before the change (which is not perfect but matches 91.0 and nobody complains there). I will have to test it on people to be sure but I think that this ticket can be closed.

If there is a bug it is that path following does not take turnAccel into account properly. I do not intend to use low turnAccel so I do not mind.

Kloot

2016-02-05 00:40

developer   ~0015620

not so much "bug" as "missing feature"; proper inertia-aware pathfinding will (probably) never happen

Issue History

Date Modified Username Field Change
2014-09-03 15:55 Google_Frog New Issue
2014-09-03 15:55 Google_Frog File Added: 20140903_231939_ScorpioBattleground_97.0.1-360-ge3d46de develop.sdf
2014-09-06 18:34 Google_Frog Note Added: 0013610
2016-02-05 00:40 Kloot Note Added: 0015620
2016-02-05 00:40 Kloot Status new => closed
2016-02-05 00:40 Kloot Assigned To => Kloot
2016-02-05 00:40 Kloot Resolution open => no change required