[Gameplay] Attack / Defense scaling with unit size

This is related to many recent threads like The Death squad dilemma  but I'm thinking of a different approach.

Currently, attack power of a unit goes up in a linear progression with it's member count. That implies that every member of a unit can simultaneously attack the enemy.
Right now the effective ATTACK of a unit is
Single.Unit.Attack * Member.Count

20 guys with warhammers simultaneously swinging at one goblin. That's... not working. (whether the attack is rolled once or Member.Count times doesn't really matter for that)
They wouldn't all fit close enough to the target. It's silly.

So I suggest that the offensive ability of a unit should be
Single.Unit.Attack * ( SQR( Max.Member.Count ) +1 )       [rounded up, obviously capped at Current.Member.Count]

The unit size would no longer be a linear modifier for offense but rather 1->1, 4->3, 8->4, 20->6.


Larger units would still have the benefit of staying power. If 2 of the front rank soldiers fall, those from the back, who could previously not attack, would step up. Even if the unit takes a counterattack, it would still be able to remain fully combat effective until the losses got really high.

Then great military minds invented the Really Long Pointy Stick(tm). (their less sohpisticated infantrymen just called it a pike)
That was pretty cool stuff because now (at least) the 2nd row in a formation could do something beyond waiting their turn.


I suggest that weapons should have a range, which at unit design time is saved with the unit as something like Weapon.Range.
This would be 1 for swords/clubs, 2 for pikes

This is related to many recent threads like The Death squad dilemma  but I'm thinking of a different approach.

Currently, attack power of a unit goes up in a linear progression with it's member count. That implies that every member of a unit can simultaneously attack the enemy.
Right now, the effective ATTACK of a unit is
Single.Unit.Attack * Member.Count

20 guys with warhammers simultaneously swinging at one goblin. That's... not working. Whether the attack is rolled once or Member.Count times doesn't really matter for that.
They wouldn't all fit close enough to the target.

So I suggest that the offensive ability of a unit should be
Single.Unit.Attack * ( SQR( Max.Member.Count ) +1 )       [rounded up, obviously capped at Current.Member.Count]

The unit size would no longer be a linear modifier for offense but rather 1->1, 4->3, 8->4, 20->6.


Larger units would still always have the benefit of staying power. If 2 of the front rank soldiers fall, those from the back, who could previously not attack, would step up. Even if the unit takes a counterattack, it would still be able to remain fully combat effective until the losses got really high.

Then great military minds invented the Really Long Pointy Stick(tm). (their less sohpisticated infantrymen just called it a pike)
That was pretty cool stuff because now (at least) the 2nd row in a formation could do something beyond waiting their turn.


I suggest that weapons should have a range, which at unit design time is saved with the unit as something like Weapon.Range.
This would be 1 for swords/clubs, 2 for pikes.
(maybe 1.5 or so for medium spears and 1.15 for 2H swords but those are details to flesh out at a later time)


To reflect that only a limited number of soldiers can attack, the effective ATTACK of a unit would be
Single.Unit.Attack * ( SQR( Max.Member.Count ) +1 ) * Weapon.Range     [rounded up, obviously capped at Current.Member.Count]

So for pikemen, the unit size modifers would be 1->1, 4->4, 8->8, 20->11.

Pikes obviously prevent the use of a shield  and should do damage around the 40 % mark between swords and hammers.

This would somewhat  even out silly spikes like the "20 warhammer company" because only 6 of them would be attacking. It wouldn't make them harmless, though.
Pikes, while doing less damage than the clumsy hammers, would be far cheaper to produce and use far less metal (it's little more than a long stick, ya know), making them a more economic weapon for larger stacks.

Also, the Weapon.Range would affect who gets to attack first. I'll call this the preemptive strike.
Preemptive.Strike.Chance = ( Defender.Combat.Speed + Def.Weapon.Range * 2 ) / ( Attacker.Combat.Speed + At.Weapon.Range * 2 ) / 3 - 0,1

So for speed 2 hammerers attacking speed 2 pikemen, the chance is 40 % while for pikemen attacking the hammerers it's 12 % and for longswords on pikemen  28 %.
(It stands to reason to give 2-handed long swords a bit of a range advantage so they might fare better than that. Besides, 2H swords were a classic counter versus pikes... by chopping off the lance points)

When a preemptive strike is rolled, the counterattack is computed first.  There is a serious advantage in range... but that also goes for very speedy flankers who can - in an abstract way - outmaneuver the attackers.

That's a very simplistic implementation of initiative and helps to counter the "glass cannon" issue a bit.

5,269 views 3 replies
Reply #1 Top

Defense stacking.

Literal stacking of defense would be ridiculous because when you fire a ballista bolt at a soldier, it wouldn't really matter if he had 10 armored buddies with him or not.
What matters is his armor and his shield.

Heavy (and large!) shields should be heavy ( =slow) but give serious defense, instead of being so-so like they are now. I'm thinking a factor of 1,5 - 2,0 of their current values.

No defense stacking at all - and no display of the then useless "combined defense".
The attacks would truly be computed in sequence.

The first attacker with an ATK of 9 can hit for 1-9 damage. He rolls a 4.
The defender has a total defense of 10 and can "defend" 1-10 points. As a bonus for shields, I further suggest to make the "shield induced armor" the minimum cap. Our soldier shall have a shield with 3 armor.
The defender now rolls 1-10 and rolls a 1. Just not his day.
Having a shield, however, this now sets the defense roll to the minimum value of 3.

4 damage - 3 defense is 1 so 1 damage is done. Just a scratch!

Damage, however, does carry over. Otherwise large units would be near invulnerable from attack by single powerful units.

Same situation. The defender (in a squad) has only 1 HP left.
The attacker rolls a 9 and the defender a 3   = 6 damage.
1 damage kills him and the next defender in line immediately rolls his defense against the remaining attack of 5.

This is necessary so that a huge golem with 30 attack can go through several wimpy units (especially unarmored glass cannons = ) with one mighty crushing attack.
Tough looking units like stone golems would need considerably higher ATK, though, to stay competitive.
It's a simple system but it's completely transparent.

Putting more emphasis on the defensive side of combat would make using shields a real option. Right now they are kinda... meh. Blocking stat or no.

Reply #2 Top

Ranged units would have to scale differently because quite obviously, being in the back row of a longbow squad isn't such a terrible disadvantage.

Generally, bows do far less damage than swords and maces, so it's heading in the right direction already.

Still, the number of "shooters" should be limited in a similiar way because 20 or 50 longbowmen would destroy practically everything before it could get into range.

Bows and other typical medieval missiles fire ballistically. If an enemy unit is too close, they can only be used in "direct fire mode"
where the back rows cant fire without putting arrows in the backs of their comrades in the front row.

At  a range of 4+, all bowmen can shoot.

At range 2-3, most can shoot, I'm thinking

     Number =  ( SQR( Max.Member.Count ) +1 ) * 1,5     [rounded up, obviously capped at Current.Member.Count]

     1->1, 4->4, 8->6, 20->9.

At range 1, only the front row can fire without hitting their comrades.

     Number =  ( SQR( Max.Member.Count ) +1 ) * 1     [rounded up, obviously capped at Current.Member.Count]

     1->1, 4->4, 8->6, 20->9.

 

And since I don't like tables of formulas becuase they make the code a maintainance to maintain:

     Number =  ( SQR( Max.Member.Count ) +1 ) * MAX ( 1 , ( range.to.target / 2 ) )    [rounded up, obviously capped at Current.Member.Count]

     At range 4 that would be 1->1, 4->4, 8->8, 20->11... and growing with more range.

 

A system like that would keep the "epic" numbers that some obviously want in check because it takes the "fighting front" into account.

It would also mean that you have to protect your bowmen. Not just because they suck in melee but because logic dictates that they cannot effectively engage units directly in front of them.

And light cavalry would actually gain more importance because "getting under the umbrella" of the enemy's bowmen quickly would be a useful tactic.

Reply #3 Top

I will admit that I did not read ALL of your work, though I liked the part I read.

The main reason I skipped to the reply was to say I agree with the intent of this post and wonder why the previous solution to this SAME issue when it came up in GalCiv2 was not implemented here.

Battles in GC2 have had this issue from day one, and they solved it by having each unit attack individually, in sequence.  Therefore, if my 10 guys have 10 attack and your 1 guy has 50 defense, odds are he is only getting scratched in this battle rather than completely obliterated.

The issue of "range" would be new to Elemental since in GC2 we were dealing with space, and everything could get "in range".  That said, range should be simply a matter of saying how many of the stack get to "enter combat", and once that number is known you can just take the GC2 calculations and plug them in.