Author Topic: Ye Ol' Armor Debate  (Read 31672 times)

Offline Wanderer

  • Master Member Mark II
  • *****
  • Posts: 1,579
  • If you're not drunk you're doing it wrong.
Re: Ye Ol' Armor Debate
« Reply #135 on: July 16, 2012, 05:06:17 pm »
I'm not sure how to respond.  What do you mean by separate?  It sounds like you do get it, but you say you don't so I'm confused :) .

There are TWO source of effective Armor Piercing.  One is derived from a ship type's attack damage (let's call this AM for Armor Mod).  The other is a stat assigned to the ship type, called Armor Piercing (let's call this AP).  How exactly they combine is a little unclear.  I originally proposed: Actual Armor = Armor * AM - AP.  Keith's write up might be indicating this instead: Actual Armor = Armor - AM - AP.

In Keith's write up there is no AM component, thus our confusion.
... and then we'll have cake.

Offline Diazo

  • Master Member Mark II
  • *****
  • Posts: 1,717
  • I love/hate Diff 10
Re: Ye Ol' Armor Debate
« Reply #136 on: July 16, 2012, 05:06:27 pm »
Yes, that is my confusion.

I was thinking there would be a single armor reduction mechanic called Armor Piercing.

All units would get a small value of armor piercing based on their shot damage and then units such as Anti-Armor would get their Armor Piercing ability manually boosted to fit their specialty.

At this point, I'm going to wait for Keith to post the actual mechanics and formulas he is looking at using, we've kind of gone and scattered the thread all over the place (again).

D.

Offline keith.lamothe

  • Arcen Games Staff
  • Arcen Staff
  • Zenith Council Member Mark III
  • *****
  • Posts: 19,505
Re: Ye Ol' Armor Debate
« Reply #137 on: July 16, 2012, 06:58:14 pm »
To re-express things in hopefully more concrete terms, here's what would happen in what I'm proposing when computing how much shot a damage does to a target (like one of those "how a bill becomes a law" presentations in gradeschool, or more appropriately "how my boot becomes your face") :

1) Calculate Defender_Armor_Percent, starting from zero:
1.a) Add the defender's base armor rating. (this is just the literal number like you see it now, but somewhat fewer ships would have it, and the values would be different)
1.b) Subtract armor rotter damage
1.c) Multiply according to armor boosting (or zero out if there's one of those armor-negaters around). 
- We may also have armor boosting add some base amount to help that mechanic work on armorless ships, but that's not core to this.
1.d) Set to 1000/(1000+number_computed_thus_far) to yield a number between 0 and 1.
- A simple change would be to let armor rot exceed armor by some margin, making this actually able to yield a number somewhat larger than 1.

2) Calculate Attacker_ArmorPiercing_Percent, starting from zero:
2.a) Add the attacker's base armor piercing rating (this is just the literal number like you see it now, but fewer ships would have this and it would effectively be some number between 0 and 1)
2.b) Add someFunction(log10(damage_per_shot)), which returns some number between 0 and 1
- Note that it's a function _using_ the log10, not just the log10.  I'm also open to using sqrt or whatever makes sense. 
- Also, note that damage_per_shot is literally the base attack power per shot, so something firing 10 shots per salvo doing 1,000 per shot is very different than something firing 1 shot per salvo doing 10,000 per shot.
- While I'm noting things: this whole "2" step is done during game-initialization for each ship type and stored as a literal value (probably actually 0 to 100 instead of 0 to 1 so I can use int instead of FInt), but that doesn't impact the game rules.
2.c) If greater than Defender_Armor_Percent, set to Defender_Armor_Percent

3) Calculate Effective_Armor_Multiplier, starting from One:
3.a) Subtract (1-Defender_Armor_Percent)
3.b) Add Attacker_ArmorPiercing_Percent
(edit, forgot: ) 3.c) If < 0.1, set to 0.1 (the minimum 10% damage rule)

4) Calculate actual damage, starting from zero:
4.a) Add attacker's damage-per-shot
4.b) Multiply by hull-type bonuses (if any)
4.c) Mulitply by Effective_Armor_Multiplier

Done :)  There's probably some other things that can happen that I'm forgetting, but that's all that's relevant to armor.
« Last Edit: July 16, 2012, 07:41:29 pm by keith.lamothe »
Have ideas or bug reports for one of our games? Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

Offline Wanderer

  • Master Member Mark II
  • *****
  • Posts: 1,579
  • If you're not drunk you're doing it wrong.
Re: Ye Ol' Armor Debate
« Reply #138 on: July 16, 2012, 07:21:53 pm »
To re-express things in hopefully more concrete terms
Thank you, I think my brain is broken today.  *Whap*whap*whap*Here! is about what I think I needed to understand this.

A curiousity and a question.
Quote
2.b) Add someFunction(log10(damage_per_shot)), which returns some number between 0 and 1
- Note that it's a function _using_ the log10, not just the log10.  I'm also open to using sqrt or whatever makes sense. 
- Also, note that damage_per_shot is literally the base attack power per shot, so something firing 10 shots per salvo doing 1,000 per shot is very different than something firing 1 shot per salvo doing 10,000 per shot.
Interesting, so even if the AP is overwhelmed by the armor, you'll still get better damage out of larger hits.  I assume somewhere down in #4 is the minimum 10% rule?

Quote
- While I'm noting things: this whole "2" step is done during game-initialization for each ship type and stored as a literal value (probably actually 0 to 100 instead of 0 to 1 so I can use int instead of FInt), but that doesn't impact the game rules.
Which ends up tossed out the window as soon as an armor rotter comes into play, dynamic x is always fun for real time optimization, ain't it?
... and then we'll have cake.

Offline Hearteater

  • Core Member
  • *****
  • Posts: 2,334
Re: Ye Ol' Armor Debate
« Reply #139 on: July 16, 2012, 07:28:20 pm »
I'm not sure how to respond.  What do you mean by separate?  It sounds like you do get it, but you say you don't so I'm confused :) .

There are TWO source of effective Armor Piercing.  One is derived from a ship type's attack damage (let's call this AM for Armor Mod).  The other is a stat assigned to the ship type, called Armor Piercing (let's call this AP).  How exactly they combine is a little unclear.  I originally proposed: Actual Armor = Armor * AM - AP.  Keith's write up might be indicating this instead: Actual Armor = Armor - AM - AP.

In Keith's write up there is no AM component, thus our confusion.
2.b is AM, and he picked the second option which I expressed as Actual Armor = Armor - AM - AP.

I wish 2.b didn't add to 2.a and was instead multiplied the value from 3.a in a step between 3.a and 3.b.  This would make it function like Last Whisper in League of Legends which creates a much cleaner effect on high attack damage ships.  It would be unfortunate if high attack power granted so much inherent armor piercing (via 2.b) that actual armor piercing (2.a) was devalued.

Offline TechSY730

  • Core Member Mark V
  • *****
  • Posts: 4,570
Re: Ye Ol' Armor Debate
« Reply #140 on: July 16, 2012, 08:59:35 pm »
2.b is AM, and he picked the second option which I expressed as Actual Armor = Armor - AM - AP.

I wish 2.b didn't add to 2.a and was instead multiplied the value from 3.a in a step between 3.a and 3.b.  This would make it function like Last Whisper in League of Legends which creates a much cleaner effect on high attack damage ships.  It would be unfortunate if high attack power granted so much inherent armor piercing (via 2.b) that actual armor piercing (2.a) was devalued.

Keep in mind, the relation of AP due to damage is reliant on a function that has not been determined yet. It will be proportional to a sublinear function (log10 currently, but Kieth mentioned sqrt is also a possibility). But there will be another function "wrapping" it, which has not been determined yet. Depending on how he scales it with that "outer" function, be that it may take 1,000,000 damage before armor peircing matches even an equivalent of 50% armor piercing.

Offline keith.lamothe

  • Arcen Games Staff
  • Arcen Staff
  • Zenith Council Member Mark III
  • *****
  • Posts: 19,505
Re: Ye Ol' Armor Debate
« Reply #141 on: July 16, 2012, 09:04:38 pm »
Yea, for the inherent AP from damage-per-shot, basically whatever makes sense works for me :)
Have ideas or bug reports for one of our games? Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

Offline PokerChen

  • Hero Member Mark III
  • *****
  • Posts: 1,088
Re: Ye Ol' Armor Debate
« Reply #142 on: July 17, 2012, 02:42:20 am »
So we want something that will be relevant across a range of damages from:

- 10^2 (Neinzul Viral Swarmer, Polarizers, IRE-I & Vulture-I)
- 10^3 (Laser Gatlings, Autocannon Minpods, other 1 sec-cooldowns)
- 10^4 (Fighter-II+, Bomber-II+, etc., standard fleetships, weak starships [Light/Flagship] )
- 10^5 (Zenith Bombards, strong starships [Bomber/Raid], Fortresses, etc.)
- 10^6 (Mini-rams, Armored Golems, Orbital Mass drivers, etc.)
- 10^7 & above (Spire Main Cannons, Artillery Golems, etc.)

Toying around with the log10 function, here are some preliminary values. I figured that a square of the log may "look" better. The functions below aim at introducing >~20% auto-AP for damages that break 100K per shot - essentially things that start to OHKO triangle ships.

Most of the core-game weapons sit in the 10^3 to 10^5 region.
 - Fleetships in general do not exceed 50K damage/hit. Long cool down vessels have 10K~100K , and short cool-down vessels have 1K~10K, with special cases Vultures/IRE/Polarizers starting below 1000.
 - We may want to introduce a cut-off below which no auto-AP will ever occur. This can be delineated between Neinzuls and most ships, or between most fleetships and stuff like Bomber starships. Starting at 10K will neatly give Bomber-Is no piercing and higher ranks a tiny bit.

...if we want to give auto-AP only to big hitters... These round to 1% during the fleet-ship mark-upgrades. Bomber-Vs and M.Frig.-Vs will get 2%.

0.15 * ( log10(  max[ x/30000, 1 ] ) ) : : 0% @ 10^3 -- 0% @ 10^4 --- 8% @ 10^5 -- 23% @ 10^6 -- 38% @ 10^7 -- 53% @ 10^8.

0.05 * ( log10(  max[ x/10000, 1 ] ) )^2 : 0% @ 10^3 -- 0% @ 10^4 --- 5% @ 10^5 -- 20% @ 10^6 -- 45% @ 10^7 -- 80% @ 10^8.


...if we want to give fleet ships some auto-AP as well... Bombers I-V get 3%~8%, while Fighters I-V get 1~6%.
 0.03* ( log10(  max[ x/1000, 1 ] )  ) ^2 : 0% @ 10^3 -- 3% @ 10^4 -- 12% @ 10^5 -- 27% @ 10^6 -- 48% @ 10^7 -- 75% @ 10^8.
« Last Edit: July 17, 2012, 03:06:58 am by zharmad »

Offline Hearteater

  • Core Member
  • *****
  • Posts: 2,334
Re: Ye Ol' Armor Debate
« Reply #143 on: July 17, 2012, 09:56:46 am »
Good looking formulas, but they honestly probably get too high given it is subtracted from Armor.  An Artillery Golem with 75-80% inherent Armor Piercing doesn't leave a lot of room in the design space for a future Armor Piercing 100 million damage attack.  I'd prefer it to be 0% - 25% range I think.  Enough to give them a touch of Armor Piercing, but enough room to make an Armor Piercing version that is meaningful.

Or make this inherent Armor Piercing multiply Armor, and give it a range of 0.75 (10^7) to 1.25 (10^2) :) .

Offline Diazo

  • Master Member Mark II
  • *****
  • Posts: 1,717
  • I love/hate Diff 10
Re: Ye Ol' Armor Debate
« Reply #144 on: July 17, 2012, 10:55:45 am »
Overall things look decent to me.

However, Armor Boosters should now boost a flat amount, say 100 armor per mark level?

On the armor piercing equation, keep in mind that units can get added Armor Piercing as a bonus ability, this is just what the 'basic' armor piercing a ship gets based on it's armor value.

I can see something like the Artillery golem getting the max 'basic' armor piercing, then an additional 30% 'bonus' armor piercing as an ability for instance.

What the maximum 'basic' armor piercing should be is up for debate, my first thought is 35%? (May change as I look at numbers more.)

I also like the idea of a minimum damage cutoff that you have to meet to get any 'basic' armor piercing at all. Maybe 1000 damage? (Again, requires more looking at the numbers.)

D.

Offline keith.lamothe

  • Arcen Games Staff
  • Arcen Staff
  • Zenith Council Member Mark III
  • *****
  • Posts: 19,505
Re: Ye Ol' Armor Debate
« Reply #145 on: July 17, 2012, 11:04:52 am »
Yea, something like:

< 1,000: no innate armor piercing
>= 500,000: max innate armor piercing (35% sounds like a good starting value)
In between: some function returning a value between 0 and 0.35 (It'll be a fixed-point datatype, but that doesn't really matter to this discussion)

That function could even be linear, for all I care, log10 was just what came to mind.

Bear in mind that this will all be based off the base damge-per-shot with no boosting of a ship of that type on high-caps since that's where the code starts from.  That doesn't really impact the concept (except the boosting bit), just clarifying.  As far as the player is concerned, they won't know that "more damage => more armor piercing", unless they've been reading this, they'll just see a % of armor piercing which may have come from innate, special bonus, or both.
Have ideas or bug reports for one of our games? Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

Offline Diazo

  • Master Member Mark II
  • *****
  • Posts: 1,717
  • I love/hate Diff 10
Re: Ye Ol' Armor Debate
« Reply #146 on: July 17, 2012, 01:12:22 pm »
Okay, so the next question is what is the max innate AP (armor piercing) and at what damage should that be hit?

Bombers are 9,600 damage at mk I, how much innate AP should they get?

I've been messing around with a graphing calculator and I'm actually thinking a sqrt function.

The current formula I have is... erm...

Here, have a picture.



The blue line is my current formula, it ends up (assuming standard rounding practices to the nearest percent):

0-1200 Dmg: 0% AP
1200-3600 Dmg: 1% AP
12000-15000 Dmg: 5% AP
28500-32500 Dmg: 10% AP
73500-78500 Dmg: 20% AP
140000 Dmg: 30% AP
220000 Dmg: 40% AP

Now, these numbers are not quite right, I think the AP rise in the 1000 - 10000 range should be a little higher, but it's where I'm coming from at the moment.

D.
« Last Edit: July 17, 2012, 01:20:55 pm by Diazo »

Offline Hearteater

  • Core Member
  • *****
  • Posts: 2,334
Re: Ye Ol' Armor Debate
« Reply #147 on: July 17, 2012, 02:11:01 pm »
Comparing Log10, Pow2, Pow1.5 and Sqrt, I'm finding Pow2 seems the best fit.  Mapping it to 0%-35% for 1000 to 500k damage gets:

Penetration = [ MAX(1, MIN(500000, Damage) / 1000) ^ 2 - 1 ] / (24,999,900 / 35)

EDIT: Just change the 35 at the end to whatever you want the top-end of the range to be.  So 25 makes it 25%.  Also, this formula yields 0.25 for 25%, not 25.

Offline Diazo

  • Master Member Mark II
  • *****
  • Posts: 1,717
  • I love/hate Diff 10
Re: Ye Ol' Armor Debate
« Reply #148 on: July 17, 2012, 02:29:20 pm »
I took a loot at Pow2 and did not like it because it is so flat at the start.

Bombers only have 9,600 damage, with Pow2 I could not get bombers even 5% AP without hitting 35% at like 30000 damage.

That's why I like the SqrRt function, it starts by going up fast then leveling off, as compared to Pow2 which starts flat then spikes upwards as the numbers get bigger.

I think we need to decide on a couple example units and decide what they get, then fit the function.

Bombers are 9.600 damage, 5% AP?
Spirecraft Siege Tower is 40,000 damage, 25% AP?
35% AP Cap (Should the cap even be 35%?) at 50,000 damage?
Or a 50% AP cap at 100,000 damage?

D.

Offline Hearteater

  • Core Member
  • *****
  • Posts: 2,334
Re: Ye Ol' Armor Debate
« Reply #149 on: July 17, 2012, 02:33:43 pm »
Better to be too low than too high for low damage values because you can always add AP to units if needed, which is why I like Pow2.