Page MenuHomeWildfire Games

[gameplay] overhaul artillery attacks
ClosedPublic

Authored by Nescio on Dec 21 2019, 5:13 PM.

Details

Summary

Artillery is not that effective in 0 A.D., partly because their damage per second is unimpressive (especially compared to rams or war elephants), partly because of their splash damage.
Splash damage was added in rP11886 (nearly eight years ago). The values have changed multiple times, as has the exact calculation (see simulation/components/Attack.js). While it's quite interesting in theory, in practice it's not that effective. @fatherbushido explained how it works on the forums. It's important to understand the actual splash damage depends on the distance to the centre of entities, in contrast to ordinary attacks, which do full damage when they hit the footprint (edge).
Splash damage has some serious problems:

  • It has no effect vs entities with footprints longer than the splash radius, such as many (most?) structures and warships.
  • The AI does not take it into account.
  • It's anachronistic: exploding shells did not exist yet in 0 A.D.'s timeframe. Missiles were rigid objections, and even the very largest projectiles were well under a metre in diameter.

This patch therefore removes splash attacks from artillery and improves the normal attack. The changes are:

  • Damage:
    • Splash damage is removed from stone throwers, onagers, quinqueremes, bolt towers and artillery towers.
    • Attack damage is significantly raised in compensation. (And also to compensate for rP23285.)
    • Bolt shooters and bolt towers inflict only pierce damage, no crush.
    • Stone throwers, quinqueremes, and artillery towers inflict only crush damage, no pierce.
    • Fireraiser and fireship inflict only s all damage types equally (cf. fireship).
  • Range:
    • Bolt shooters have lower minimum range and higher maximum range, making them more effective vs soldiers.
    • Stone throwers, onagers, and quinqueremes have higher minimum range, making them less effective vs soldiers.
    • Roman artillery no longer have +8 maximum range; the +10% attack damage at no extra cost is already a great bonus.
    • Artillery and bolt towers have their minimum range increased (unlike archers, artillery can only shoot forwards or upwards, but not downwards).
    • Fireraiser has increased minimum and maximum range, because of its long footprint.
    • Fireship has increased maximum range, because of its footprint.
  • Preferred class:
    • Artillery towers no longer prefer Human; instead, they prefer non-Organic (i.e. ships, siege engines, and structures equally).
    • Bolt shooters no longer have a secondary preference for Siege.
  • Projectiles:
    • Bolt shooters have their spread lowered to 1, making them more accurate.
    • Stone throwers and quinqueremes have their spread raised to 6, making them less accurate; accuracy matters vs units (which have small footprints), but not really vs structures (which are large, convenient targets).
    • Stone throwers have their projectile speed rounded from 37.5 to 40 (still slow; archers have 100).
    • Artillery and bolt towers get the same projectile stats as their siege engine counterparts.
  • Artillery and bolt towers no longer get additional projectiles from garrisoned units.

[EDIT] For comparison the resulting damage per second values:

                                     damage / time = damage per second
boltshooter                  :   240 pierce / 6    =  40
bolt tower                   :   100 pierce / 4    =  25
champion cavalry javelineer  :    36 pierce / 1.25 =  28.8 [unchanged]
champion infantry javelineer :    26 pierce / 1    =  26   [unchanged]
basic cavalry javelineer     :    18 pierce / 1.25 =  14.4 [unchanged]
basic infantry javelineer    :    16 pierce / 1.25 =  12.8 [unchanged]

ram                          :   150 crush  / 1.5  = 100   [unchanged]
stonethrower                 :   210 crush  / 7    =  30
quinquereme                  :   150 crush  / 5    =  30
onager                       :   150 crush  / 5    =  30
artillery tower              :    90 crush  / 5    =  18

fireraiser                   : 30 + 30 + 30 / 2    =  45
fireship                     : 10 + 10 + 10 / 0.1  = 300   [unchanged]

Related: D2493, D2495, D2549.

Test Plan

Check for mistakes and omissions. Apply the patch, play-test a couple of games. Agree with the concept and the proposed values.

Diff Detail

Repository
rP 0 A.D. Public Repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
Nescio edited the summary of this revision. (Show Details)Jul 15 2020, 1:46 PM
Nescio updated this revision to Diff 12687.Jul 15 2020, 2:04 PM
Nescio edited the summary of this revision. (Show Details)
Nescio edited the test plan for this revision. (Show Details)
  • replace Human preferred class with !Organic for artillery towers
  • remove Siege preferred class from bolt-shooters
  • remove additional range of Roman ballista

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2649/display/redirect

Nescio edited the summary of this revision. (Show Details)Jul 15 2020, 3:04 PM
Nescio retitled this revision from [gameplay]: tweak artillery attacks to [gameplay] overhaul artillery attacks.Jul 15 2020, 3:07 PM
borg- added a comment.EditedJul 15 2020, 5:51 PM
  • replace Human preferred class with !Organic for artillery towers
  • remove Siege preferred class from bolt-shooter
  • remove additional range of Roman ballista

Set "siege, structure" for stone tower, since no more Splash dmg? Can be a good tower vs ram.

Set "siege, structure" for stone tower, since no more Splash dmg? Can be a good tower vs ram.

The !Organic effectively means ships, siege engines, and structures are equally preferred.

borg- added a comment.Jul 22 2020, 4:22 PM

I tested and 300 dmg to bolt and stonethrower doesn't look good. The best values for me seems to be 250 for bolt and 220 for stonethrower.

Nescio updated this revision to Diff 12854.Jul 22 2020, 5:17 PM
Nescio edited the summary of this revision. (Show Details)
  • reduce damage by 20%, per @borg-

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2751/display/redirect

borg- added a comment.Jul 27 2020, 5:53 PM

Guys more opnions pls

borg- added a comment.Aug 6 2020, 3:54 PM

This patch gives different goals to stonethrower and boltshooter.

  • Stonethrower: specific against buildings, removing splash dmg
  • boltshooter: specific against units removing crush dmg.

Same to towers.

The new max/min range values are very good.

Overall values are good.

borg- accepted this revision.Aug 6 2020, 3:54 PM
This revision is now accepted and ready to land.Aug 6 2020, 3:54 PM

(One *could* introduce a "Fire" damage type for the fireraiser and fireship.)

(One *could* introduce a "Fire" damage type for the fireraiser and fireship.)

Perhaps something for a future patch.

(Well, this is an overhaul after all ;) That being said, I don't agree with the changes here, with the only argument: "I don't like them." so I won't mix myself further into this patch.)

"I don't like them."

Could you elaborate?

Nescio removed a reviewer: Restricted Owners Package.Aug 15 2020, 9:05 PM
Nescio updated this revision to Diff 14067.Nov 19 2020, 2:13 PM
  • rebased
Nescio edited the summary of this revision. (Show Details)Dec 18 2020, 7:09 PM
Nescio added a subscriber: fatherbushido.
borg- added a comment.Mon, Jan 4, 2:17 PM

I did new tests, and I think it is better to keep the stonethrower damage from 210 to 150.

Nescio added a comment.Mon, Jan 4, 2:19 PM

I did new tests, and I think it is better to keep the stonethrower damage from 210 to 150.

210 crush / 7 s = 30 crush / s (stone-thrower)
150 crush / 5 s = 30 crush / s (quinquereme)

borg- added a comment.Mon, Jan 4, 2:42 PM

I did new tests, and I think it is better to keep the stonethrower damage from 210 to 150.

210 crush / 7 s = 30 crush / s (stone-thrower)
150 crush / 5 s = 30 crush / s (quinquereme)

Why 5s vs 7s if is bassically "same" unit? For me, make sense keep 5s for stone-thrower too.
Well, I am not comparing unity against unity, I am comparing old vs new values.
210 is more than double damage vs constructions, with some protection it can become very op. Remember that it can be surrounded by paralyzed now in neutral territory, which makes it practically invulnerable.

Nescio added a comment.Mon, Jan 4, 2:52 PM

Why 5s vs 7s if is bassically "same" unit? For me, make sense keep 5s for stone-thrower too.

Presumably because ships have different animations. If it doesn't look bad, I don't mind reducing stone-throwes to 5 s, but rP23285 specifically raised it to 7 s (though without compensating the base damage).
(For comparison, rams have 150 crush / 1.5 s = 100 crush / s.)

Nescio edited the summary of this revision. (Show Details)
Nescio removed a subscriber: Restricted Owners Package.
borg- accepted this revision.Mon, Jan 4, 4:50 PM

Ah sorry, Alpha 23 is 5s so 210 for 7s is not bad.

Stan added a comment.Mon, Jan 4, 5:47 PM

What's the rationale behind boltshooter can no longer hurt multiple units in front of them? I understand that catapult might not damage so much units around it (although the dust and stuff might slow units down, (probably something for status effects) but I don't get the logic for something that shoot straight in front of it

borg- added a comment.Mon, Jan 4, 6:16 PM
In D2494#146222, @Stan wrote:

What's the rationale behind boltshooter can no longer hurt multiple units in front of them? I understand that catapult might not damage so much units around it (although the dust and stuff might slow units down, (probably something for status effects) but I don't get the logic for something that shoot straight in front of it

I thought it was a legend, but In fact the spears could impale or incapacitate several enemies. So it seems historically accurate keep linear damage.

Nescio added a comment.Tue, Jan 5, 1:05 PM

If a projectile goes through multiple men, I'd expect each of them to be dead or at least mortally wounded; however, that's not exactly how linear splash works in 0 A.D.
I'd like to point again to the forum discussion I mentioned earlier. fatherbushido argued there bolt-shooters should inflict no base damage, only splash damage; while that might work, a problem is the AI does not take splash damage into account and won't construct any. In contrast, JC argued bolt-shooters should have no splash damage, only a very high base damage; that's also the approach taken in this patch. Either way, having a bit of both (base damage and splash damage) is suboptimal.

Stan added a comment.Tue, Jan 5, 1:20 PM

Why is it "suboptimal"

I thought the boltshooter one shotted most of what was in his path ?

Nescio added a comment.Tue, Jan 5, 1:23 PM

Keep in mind damage is reduced by resistance. A bolt-shooter can't even kill a basic pikeman with a single shot.

borg- added a comment.Tue, Jan 5, 1:43 PM

If a projectile goes through multiple men, I'd expect each of them to be dead or at least mortally wounded; however, that's not exactly how linear splash works in 0 A.D.

Not necessarily the damage must be fatal, it can be hit in the leg for example. we also hope that a hit with sword or arrow is enough to kill, but that’s not how things work in a game

borg- added a comment.Wed, Jan 6, 2:23 AM

Anyway the attack must increase as proposed by the patch, because a shot cant sometimes kill a unit like a pikeman.
we can keep the linear dmg or not, I have no preference on that (balance).
Whatever is chosen for me is good, the patch is very good anyway.

(Arrows and javelins don't have splash damage either.)

Nescio added a comment.Wed, Jan 6, 2:01 PM

a shot cant sometimes kill a unit like a pikeman.

You'll need a lot more for that. For comparison:

bolt shooter attack damage:
A23:        (150 pierce + 25 crush) / 4 s = 37.5 pierce / s + 6.125 crush / s
currently:  (150 pierce + 25 crush) / 6 s = 25 pierce / s + 4.167 crush / s
with patch: (240 pierce +  0 crush) / 6 s = 40 pierce / s

pierce damage needed to kill one infantry archer or javelineer:

 b ,  a  ,  e  ,  c  
56 ,  68 ,  83 , 204 : village phase
67 ,  82 , 100 , 204 : town phase
75 ,  91 , 111 , 226 : town phase and one armour technology
74 ,  90 , 110 , 204 : city phase
82 , 100 , 122 , 226 : city phase and one armour technology
91 , 111 , 136 , 251 : city phase and two armour technologies

pierce damage needed to kill one infantry spearman or swordsman:

  b ,  a  ,  e  ,  c  
170 , 207 , 253 , 465 : village phase
204 , 249 , 304 , 465 : town phase
226 , 276 , 338 , 517 : town phase and one armour technology
224 , 274 , 334 , 465 : city phase
249 , 304 , 372 , 517 : city phase and one armour technology
276 , 338 , 413 , 574 : city phase and two armour technologies

pierce damage needed to kill one infantry pikeman:

  b ,  a  ,  e  ,  c  
287 , 351 , 429 , 787 : village phase
345 , 421 , 515 , 787 : town phase
383 , 468 , 572 , 875 : town phase and one armour technology
379 , 463 , 566 , 787 : city phase
421 , 515 , 629 , 875 : city phase and one armour technology
468 , 572 , 699 , 972 : city phase and two armour technologies

With auras the numbers can become even higher.

(Arrows and javelins don't have splash damage either.)

But those have a lot less force behind them.

Looking at this more closely, I do think it leaves the bolt shooter in a peculiar position. I see two issues:

  • Their spread seems high, diminishing its use as a sniper unit (particularly for the given rate of fire, the effective DPS is likely much lower than the theory).
  • The lack of linear splash damage / persistence means that it can only ever damage one unit, diminishing its use as a "mass control" weapon.

I fixed the bug that splash damage used distance-to-center in rP24010, so that argument is now gone. That being said, I agree that stone-throwers probably shouldn't have splash damage (the justification in Age 2 was that they threw multiple smaller rocks instead of one big one).

I think we have a problem with the damage types: units have high crush resistance to resist rams originally (iirc), but that's kinda useless now that rams can't attack them again. So units should probably die from a big rock to the head. But I'd suggest increasing the spread of Stone Throwers a little further, so that they really can't be used efficiently against units, but remain reasonably effective against buildings (much like Age 2's trebuchets, basically).

I would suggest either lowering the spread of the bolt shooter to make it a sniper unit, or keeping the linear splash damage to make it a crowd control unit.
Keep in mind that formations are now used by default for walking, which means players are more likely to use them in general, and that would make a crowd-control unit possibly more interesting to have.

Good points, thanks for the feedback!
So bolt-shooters (and towers) a spread of 1? And raise the spread of stone-throwers (and towers) and quinqueremes, but by how much? Currently they have 4; for comparison, basic archers have 3, champions 1 (and champions have an attack range of 70).

So bolt-shooters (and towers) a spread of 1?

I think that would work yeah. Towers have 0.5 for comparison's sake, though I guess I can agree that towers should have higher precision.

And raise the spread of stone-throwers (and towers) and quinqueremes, but by how much? Currently they have 4; for comparison, basic archers have 3, champions 1 (and champions have an attack range of 70).

The smallest structures we have are, I believe, houses, which are generally at least 10 meters-long. I think you can make the spread 6, which would give a rather low chance of missing those (but really rather low) and make them basically useless against any other unit. The projectile speed also makes them easy to dodge obviously.

Nescio updated this revision to Diff 15118.Mon, Jan 11, 12:13 PM
Nescio edited the summary of this revision. (Show Details)
  • bolt-shooter spread to 1, stone-thrower to 6, per @wraitii
  • gave towers the same projectile values as their siege engine counterparts
Owners added a subscriber: Restricted Owners Package.Mon, Jan 11, 12:13 PM

Build is green

builderr-debug-macos.txt
ld: warning: text-based stub file /System/Library/Frameworks//CoreAudio.framework/CoreAudio.tbd and library file /System/Library/Frameworks//CoreAudio.framework/CoreAudio are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox.tbd and library file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback.tbd and library file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreVideo.framework/CoreVideo.tbd and library file /System/Library/Frameworks//CoreVideo.framework/CoreVideo are out of sync. Falling back to library file for linking.
ld: warning: text-based stu

See https://jenkins.wildfiregames.com/job/macos-differential/2756/display/redirect for more details.

wraitii accepted this revision.Wed, Jan 13, 11:31 AM

To be honest, I would like to remove linear splash damage. It's complex to implement (particularly in JS), gives no obvious feedback to the user graphically, and it's kind of broken (the ranges are very approximate right now). For stuff like bolt shooters, we should instead let the projectile continue its course and hit units along the way.
Of course, that would require a few other changes in general.


Therefore, in my opinion, this keeps the differentiation between the artillery types, simplifies their usage, and increases their utility -> merge.
Maybe one thing I would like to see -> your call @Nescio , is to add tooltips saying "good vs Buildings" / "good vs Units" ? Maybe too obvious?

Maybe one thing I would like to see -> your call @Nescio , is to add tooltips saying "good vs Buildings" / "good vs Units" ? Maybe too obvious?

If that's done for these two, it should also be done for other units and structures. I vaguely recall having had this discussion perhaps two years ago, but I forgot where and with whom. My main objection is that displaying more text in tooltips in game makes it less likely people will read everything, and also risks drowning more important information.
In my opinion loading screen tips are a better place for discussing the functions of structures and unit types; I'd say it's outside the scope of this patch, though.

Seems the splash damage removal is very contentious for the bolt shooters. I'm not a fan on several grounds, technical outlined above, but I'll add that it's easily countered by putting units in 'skirmish' formations when walking.
It's also really hard to balance correctly, and the unit will tend to be either useless or overpowered, which isn't great.
I would say the strongest argument in favour of linear splash damage is realism, since most likely Roman scorpio were used to pierce through several ranks of enemy troops. But our units don't really fight in formation, and walking in formation is also somewhat defeated by the skirmish formation.
Overall, I think it's better for gameplay if those units are treated as snipers than as mass-control, both being, I think, rather equally viable usage in ancient times.

As such, their usage in current gameplay would be to be microed to destroying the enemy's strongest units.

Bolt towers, in particular, should definitely be snipers & not mass-control things.

Actually I really like the splash concept. However, it has several issues (see summary and earlier posts), hence this patch.
I'd welcome giving e.g. the fireraiser or dragon linear splash and perhaps the plane a circular splash (something for a future patch), but it simply doesn't work that well in practice for trainable entities, which is why I believe this change is a real improvement.

I would say the strongest argument in favour of linear splash damage is realism, since most likely Roman scorpio were used to pierce through several ranks of enemy troops.

Source, please? I suspect that was more the exception than the rule. (Also, several means more than two but not many.)

Source, please? I suspect that was more the exception than the rule. (Also, several means more than two but not many.)

Not really an academic source but this askHistorians comment mentions this explicitly among other things, and it makes some sense that this would be a viable use of a relatively flat-trajectory piercing bolt.

As far as I can tell, we don't really have too much good factual data on field artillery use in ancient times (with even no archeological proof of stuff like gastrophetes), so I don't think it's outlandish to want piercing projectiles.
But I do think this makes for poor gameplay with respect to the bolt shooter. Might be different for a fire raiser which would actually need splash to make sense.

Nescio added a comment.EditedWed, Jan 13, 4:08 PM

Greek and Roman artillery is described in detail by various ancient authors, Philo and Hero are probably the most important, Vitruvius the most accessable (here is a translation of his section on bolt-shooters). The subject has been studied extensively in modern scholarship. While we have a fairly good idea how torsion engines worked and looked, what their dimensions were, their calibres (two-feet (0.6 m), two-span (0.9 m) and three-span (1.4 m) bolts), and occassionally even local usage, reconstructions can get you only this far. Some key ancient techniques and skills were lost; it's very easy to make a poorly performing engine, but very hard to make an excellent specimen. It's no surprise modern estimates of how powerful they were vary greatly.
Personally I think bolts could penetrate more than one person in theory, but I wonder how common that was in practice.
Anyway, while we care about realism, 0 A.D. is a game, and what should matter most is playability. I sincerely believe a higher pure damage without splash works better than a combination of the two.

To summarize, @badosu, @borg-, @wraitii, and I are in favour of this patch, but I believe @Angen, @Freagarach, @Stan are against.
While I strongly believe removing linear splash from bolt-shooters is a real improvement, if that's the only thing blocking this, how about leaving it out then? I'd rather see most of it committed than nothing at all; artillery is simply not very effective right now.
Also, D2493?

I wouldn't block anymore yeah.

binaries/data/mods/public/simulation/templates/units/theb_siege_fireraiser.xml
7–9 ↗(On Diff #15118)

I also still believe this would be nice.

Stan added a comment.Thu, Jan 14, 4:04 PM

With linear I'd be okay. Not completely fond of it but enough for it to be committed.

Nescio updated this revision to Diff 15298.Thu, Jan 14, 4:21 PM
Nescio edited the summary of this revision. (Show Details)
  • let bolt-shooters keep a linear splash, because the removal was deemed too controversial
  • give fireship and fireraiser only fire damage, instead of a combination of hack, pierce, and crush, per @Freagarach
  • raise fireship minimum range because of its footprint size

Purge 0 lines?

Build is green

builderr-debug-macos.txt
ld: warning: text-based stub file /System/Library/Frameworks//CoreAudio.framework/CoreAudio.tbd and library file /System/Library/Frameworks//CoreAudio.framework/CoreAudio are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox.tbd and library file /System/Library/Frameworks//AudioToolbox.framework/AudioToolbox are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback.tbd and library file /System/Library/Frameworks//ForceFeedback.framework/ForceFeedback are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//CoreVideo.framework/CoreVideo.tbd and library file /System/Library/Frameworks//CoreVideo.framework/CoreVideo are out of sync. Falling back to library file for linking.
ld: warning: text-based stu

See https://jenkins.wildfiregames.com/job/macos-differential/2863/display/redirect for more details.

Purge 0 lines?

D3342 (I like consistency.)

I already forgot that ^^ I actually thought that was in already ;)

wraitii accepted this revision.Thu, Jan 14, 4:33 PM

For the greater good

This revision was automatically updated to reflect the committed changes.