Jump to content

for a better unit movement


alre
 Share

Recommended Posts

Between a24 and a25, the biggest change has arguably been unit pushing. This new feature has succeeded in smoothing unit movement considerably, but has made much more than that: it has changed they way units move and look, and the way they approach and engage enemy targets.

I always felt like in this regard, mine was a minority opinion, but after discussing with a friend who was much more enthusiast than me about unit pushing, I think we can possibly agree on some way to enhance it, so I will speak out about what I think it's wrong about it.

Units interpenetrate basically every time you move them. When you have a whole bunch moving together, they form queues so tight that they look like solid worms of people. In some cases, it may be hard to tell how many soldiers there are, making it particularly difficult to predict how a battle is going to go. It is even more difficult to tell how many soldiers are getting killed, because they are so densely packed in the melee that people dying are invisible inside the mob. Rams can sometime interpenetrate so deeply that two of them may look like there is only one, while they are attacking a building.

Choke points are no longer of any real strategic relevance, you have to fit melee units into them to make them effective, and that's usually impossible/unfeasible. And the slightest gap between two buildings allows a whole cavalry army to pour in between in a couple of seconds. Any passage, narrow or large, can fit an army as large as you want.

I think it wasn't necessary to deviate so strongly from how unit movement looked before, the new pathfinder is more andanced and effective, but it went too far on this new road. It is ok if a big mass of units struggles to go trough a narrow passage, that's how things work in reality anyway. And besides that, I think the look of battles is worse now than before, less clear and more hazardous. In any case, unit interpenetration is bad and should be avoided if possible.

Thank you for bearibg my rant, let me know what you think.

  • Like 3
  • Thanks 1
  • Confused 1
Link to comment
Share on other sites

I second this with every fiber of my being. The ephemeral unit non-collision really detracts from my enjoyment of the game. In fact, I would call it a deal breaker personally; I am really not interested in engaging with any of the single or multiplayer content in the game unless this is remedied. (Luckily modding exists.) The only thing I would disagree about is that the situation was any more acceptable before alpha 25. Maybe units weren't sliding through each other quite so fluidly before, but they were still doing a lot of their fighting in infinitely dense knots where range and surface area did not matter; where you could not tell where one unit ended and the next began. It has always struck me as one of the most egregious failures of polish on this project.

I would even suggest a different interpretation: more than a gamplay choice, this is a simulation performance and optimization failure. In theory this game supports 200-300 population per player in team games. (With the amount of performance degradation on display, I'd question that assertion, but whatever.) However 95% of units spend 95% of the game sitting inside each other and acting in lockstep within these horrid little singularities. Why then is the game wasting so many resources simulating so many individual units when it could be treating them in aggregate? Why not increase the separation of units, increase their pop cost by 5-10 X make their attack proportionate to HP, and call each one a battalion? I bet the game would run loads better and most players would not notice any real difference.

 

(Here's my preferred setting in simulation\data\pathfinder.xml to ameliorate this issue. I'm sure the performance cost is horrendous, but...)

  <MaxSameTurnMoves>20</MaxSameTurnMoves>
  <Pushing>
    <Radius>1</Radius>
    <StaticExtension>2</StaticExtension>
    <MovingExtension>20</MovingExtension> <!-- This could be lower if there was a separate slider to scale the pushing force -->
    <MinimalForce>0.05</MinimalForce>
  </Pushing>

  <PassabilityClasses>
    <default>
      <Obstructions>pathfinding</Obstructions>
      <MaxWaterDepth>2</MaxWaterDepth>
      <MaxTerrainSlope>1.0</MaxTerrainSlope>
      <Clearance>1.5</Clearance>
    </default>
    <large>
      <Obstructions>pathfinding</Obstructions>
      <MaxWaterDepth>2</MaxWaterDepth>
      <MaxTerrainSlope>1.0</MaxTerrainSlope>
      <Clearance>3.0</Clearance>
    </large>

 

Edited by ChronA
  • Like 1
Link to comment
Share on other sites

On 17/09/2021 at 12:41 PM, alre said:

In any case, unit interpenetration is bad and should be avoided if possible.

I agree in general, but the question is at what cost. 

For me, a game with less lag and smoother unit movement is exponential better than a game where units don't overlap but you have more lag and choppy unit movement. So while I'm always on the side of people who like nice graphics, I don't mind the trade-off at all between unit overlap and the performance that is gained through that. 

TLDR: I am a huge fan of unit pushing. Very good improvement.

Edited by maroder
Link to comment
Share on other sites

On 17/09/2021 at 2:16 PM, ChronA said:

In theory this game supports 200-300 population per player in team games

This is something I was also thinking about lately.

On my machine the game runs smoothly until 600 units max (world population) and then the first lag appears and judging from team game youtube videos, this seems to be the case for many people. And since most of the "big" performance optimizations I know of are by now already implemented (e.g. multithreading, unit pushing, pathfinder optimizations), maybe part of the solution to solve the lag could be to say: the engine supports less units, so let's design the game and the stats accordingly (i.e. make every unit worth more as @ChronA said)

Edited by maroder
Make myself clear
  • Like 1
Link to comment
Share on other sites

On 17/09/2021 at 12:41 PM, alre said:

Units interpenetrate basically every time you move them. When you have a whole bunch moving together, they form queues so tight that they look like solid worms of people. In some cases, it may be hard to tell how many soldiers there are, making it particularly difficult to predict how a battle is going to go. It is even more difficult to tell how many soldiers are getting killed, because they are so densely packed in the melee that people dying are invisible inside the mob. Rams can sometime interpenetrate so deeply that two of them may look like there is only one, while they are attacking a building.

Choke points are no longer of any real strategic relevance, you have to fit melee units into them to make them effective, and that's usually impossible/unfeasible. And the slightest gap between two buildings allows a whole cavalry army to pour in between in a couple of seconds. Any passage, narrow or large, can fit an army as large as you want.

I think it wasn't necessary to deviate so strongly from how unit movement looked before, the new pathfinder is more andanced and effective, but it went too far on this new road. It is ok if a big mass of units struggles to go trough a narrow passage, that's how things work in reality anyway. And besides that, I think the look of battles is worse now than before, less clear and more hazardous. In any case, unit interpenetration is bad and should be avoided if possible.

I totally agree with this. What I think is probably the worst is that a group of javilineers can now occupy a very condensed space and launch death from a super small area.

Link to comment
Share on other sites

My take for now:

  • Units overlapping is not a desired outcome of the pushing logic
  • However, it is quite a bit harder to prevent it and actually make pushing work and/or pathfinding work.
  • The pathfinding benefits of pushing outweigh the cons of units overlapping

I don't know if I'll have time / how much time I'll have for A26. Possibly little. So I wouldn't expect this to get much worked on. It's possible that there could be tweaks to pathfinder.xml to improve things.

On 17/9/2021 at 2:16 PM, ChronA said:

The only thing I would disagree about is that the situation was any more acceptable before alpha 25.

Do you mean that e.g. A24 already had problems with this or are you talking about the A24-A25 SVN version?

 

  • Like 2
Link to comment
Share on other sites

I haven't tested much the feature yet, but it seems problematic for ships. Since ships do not target a particular units but spread their arrows on all the targets, overlapping units is quite problematic. If we think about 9 ships perfectly overlapping each other fighting 10 identical ships perfectly overlapping each other, the 9 ships would all die while the 10 ships would all be damaged but survive. Of course, in practice, ships do not overlap perfectly but this is just to illustrate the issue.

I was wondering whether the pathfinding problematic should be split into 2 parts: ground pathfinding and naval pathfinding?

The two problems are quite different I would guess since on water, there is usually fewer units and less obstacles. On games like Starcraft2, flying units overlap each other while ground units do not so I was wondering if something like this could make sense for 0ad and potentially help to get an easy/temporary fix at least.

Link to comment
Share on other sites

The feature can be disabled individually for ships if people prefer so.

Quote

Since ships do not target a particular units but spread their arrows on all the targets, overlapping units is quite problematic. If we think about 9 ships perfectly overlapping each other fighting 10 identical ships perfectly overlapping each other, the 9 ships would all die while the 10 ships would all be damaged but survive

I _believe_ this is incorrect, as an arrow that hits its intended target only its the intended target and not any other target that may overlap it.

Link to comment
Share on other sites

1 hour ago, wraitii said:

The feature can be disabled individually for ships if people prefer so.

I _believe_ this is incorrect, as an arrow that hits its intended target only its the intended target and not any other target that may overlap it.

Nice, worth looking what others think about it.

Not sure if I explained well my intuition.

My issue with ships is that the arrows are spread over all ships in range instead of having them used to kill one units after the other as it is the case for other units type. The first arrow goes to the first ships, the second arrow to another ships etc...( vs all arrows goes to one ship until it dies as it would be the case for another unit type). If I can put my 10 ships in the same spot, I can make sure the enemy ships will spread the arrows on the 10 of them and if I have more ships, I also have more units to split the arrows while I would at the same time fire more arrows on the enemy.

When my ships do not overlap, ships in the back will usually be out of range. They will therefore not be targeted nor fire at the enemy ships.

 

If I do a quick drawing of ships range with each color standing for a different player:schema1.jpg.8abf5288d64790b8ecf9f4a2e5d15d5c.jpg

- ship B only targets the enemy ship F;

- ship C will spread one third of his arrows on each ship D, E and F;

 - ships D and E will fire only at ship C;

 - ship F will fire at ship C and ship B, both receiving half of the dps;

If ships do not move, ships C will be the first one to die since it receive all arrows from D and E and half of the arrows from ship F. Ship F will be the second one to die since it receives all arrows from ship B and one third of the arrow from ship C. Both player loose one ship.

 

With overlapping ships:

schema2.jpg.4f5415ed99cf3c7d547b0837f42c42c6.jpg

 - B and C send one third of their arrows on each enemy ship;

 - D, E and F send half of their arrows on each enemy ship;

In this case, I would expect the blue player to loose 0 ship while the red player loose everything. Since repairing is free, the blue player may never loose a ship if he is active in repairing them and there is no possibility to ever come back. The initial number advantage can be cumulated over time.

Edited by faction02
  • Like 1
Link to comment
Share on other sites

I guess this problem could be solved if ships would use the normal attack pattern where they attack the nearest unit / the unit you task them to attack and not buildingAI which spreads the attack on all enemies in range.

But don't know what side effects that would have or what the original reason was to give ship the buildingAI.

 

Link to comment
Share on other sites

My two cents as a long time, off and on player:

Formations are the one thing I want to see really working above anything else. Formations and unit cohesion were such a big part of ancient warfare that the game really loses a lot of immersion for me in that we see wild mobs of units engaging one another as the default.

I would very much like to see formations as the default setting for groups of units. It seems to me that each formation type needs to have bonuses and tradeoffs for units within it. Directional damage would be super. I would very much like to see battlefield tactics become more important, forced even, upon players. Terrain bonuses play a big part of this too. 

The game is still fun and playable without these features, but I feel that really in the long run the game would be better served if there were more attention paid to how players field their units before, during, and even after battle. 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 1 month later...

While formations may have a great potential for changing the game, I still think that first of all, we should avoid units overlapping like breezes. I'm very convinced that the pathfinder can work perfectly without units passing trough each other all the time. I attach here a simple mod I made that tweaks the parameters of unit pushing to limit what I think are the shortcomings of this new pathfinder: wild unit overlapping and irrelevance of chokepoints. From the video below you can see that the number of units is always easy enough to guess from the size of the mob, and that cavalry slows down a bit when it has to pass trough a chockepoint. Remember that this is just a demonstration made trough the simple tweaking of some parameters, one can achieve much better results by changing the c++ script that defines unit pushing.

 

For instance, the aura that I gave to cavalry to enforce friction between units next to each others (not the same as in Res gestae mod, although I invite you to try that as well), could be integrated into the unit pushing system whitout much problem. Also I tried giving it to infantry as well, but the game wouldn't allow me because of limitations on the rendering of auras, which would not be a problem if that was made with c++. In general, it could be possible to change the game in a finer and also more effective way by tweaking the engine instead of just trough a mod, I can try it, I just don't know how to compile the engine (and my VS try license expired).

Please let me know what do you think. I believe there is no reason for not trying to change this, and I hope I convince you as well. As always, I claim no right on the mod attached, which isn't really that creative so... you can add it to the game and whatever.

stronger_pushing.pyromod

  • Like 3
Link to comment
Share on other sites

3 hours ago, alre said:

the aura can be integrated into unit pushing, for a minimal computational expense overall.

Coupling components that way seems like asking for trouble if even possible.

Vs community doesn't require payment.

Link to comment
Share on other sites

2 hours ago, alre said:

that is not really an aura, I forced into one because I couldn't put it into the engine. I originally designed it to be into the engine aside unit pushing.

Yeah sure. I'm hoping someone can help us implement some kind of friction in C++. I suppose there is a way to add it without adding a big number of range checks which is what auras do.

https://code.wildfiregames.com/rP25182 <- Pushing
https://code.wildfiregames.com/rP25219 <- MSVC Warning
https://code.wildfiregames.com/rP25686 <- OOS Fix.
https://code.wildfiregames.com/rP25708 <- Configurable pushing
https://code.wildfiregames.com/rP25747 <- Pushing glitch
https://code.wildfiregames.com/rP25748 <- Unit pushing: fix pairs of unit being allowed to overlap.

 

I'm not sure about the terminology, but I think what is implemented is static pushing.

08:41 < wraitii> Well Ideally we'd implement a weight-per-template & static-moving pushing

 

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...