|
Thread: A HoM&M Mini-Game, Creature Analysis and Creature Charts | This thread is pages long: 1 2 3 · «PREV / NEXT» |
|
NimoStar
Responsible
Legendary Hero
Modding the Unmoddable
|
posted June 10, 2022 12:19 AM |
|
|
ackshually, that is very smart, and does give more realistic battle outcomes :-)
On the other hand I do wonder if it would change much if stacks would be divided into 3/4 each, much like neutral monsters (or a more realistic army confrontation). Or did you think about that as well? lol
____________
|
|
Wub
Responsible
Famous Hero
|
posted June 10, 2022 10:55 PM |
|
Edited by Wub at 23:15, 14 Jun 2022.
|
Wow, louweed, that is some next-level research into the Mini-Game!
By the way, as somebody who has never played Horn of the Abyss and only to some extent Armageddon’s Blade, I don’t have the answers to your earlier questions, as my silence probably already betrayed .
Impressive to write a script that simulates all battles. My approach was rather to create all-purpose Creature Strength charts, where the Mini-Game was merely an illustration of how such charts could be a decision-making tool for gameplay decisions. But I agree with you and others that if we specifically want to make a chart with rankings for the Mini-Game, your chart is more accurate.
My analysis of which creatures would win the Mini-Game is based on me simulating what I felt is best play for both sides in several key match-ups. For a complete chart, a script is indeed a more feasible approach. Still, I have some thoughts for further improving your already quite complex algorithm and the resulting chart:
• I believe your script does not allow for draws. Yet sometimes fast creatures can indefinitely avoid slower but stronger creatures, and sometimes both creature stacks can do no better than indefinitely Defend, creating a standoff. As there is no clear attacker or defender, HotA rules should probably not apply, so we may need to count draws, too.
• Judging by, among others, the high ranking of Stone Golems and the low ranking of Faerie Dragons the script probably does not allow for Ranged and No-Retaliation creatures to outrun slower stacks to get a free attack in. To be fair, such battles can be quite complex. For example, when Zealots fight Demons, then if Demons move in Turn 1 to a distance of 10 hexes, Zealots should respond by moving to a corner. That way, once they are blocked by the Demons, they can still move out of range to get a free shot in every other turn and win the battle.
• Creature size matters. Boars, for example, can with their two-hex size actually reach Halflings in two turns, not three, when there are no obstacles. Similarly, Horned Demons, despite being equally fast as Boars, cannot reach Halflings in two turns, but they can reach Medusas.
• As you alluded to, some Creature Specialties can probably still be simulated more accurately. I imagine Mighty Gorgons – but especially Vampire Lords – may then still rank higher. It could also be a matter of instructing the script to let Vampire Lords wait but then strike first only once instead of twice against slower, living creatures, so they can profit more from their Life Drain specialty.
• Melee-Penalty shooters seem to rank quite high. I suspect, for example, that Halflings actually have quite a few losing match-ups against fast creatures.
• Morale presents another challenge. If not simulated correctly, it will inflate the ranking of Undead creatures.
• Following up on what admin noted, it seems Pit Lords and Pit Fiends switched places.
Anyway just a few thoughts on an impressive simulation. Also, it seems Sprites are now the undisputed winner. I don’t know much about Horn of the Abyss, but with Firebirds and Magic Elementals nerfed, I can imagine they have a 100% win rate. Interesting .
____________
|
|
louweed
Adventuring Hero
|
posted June 11, 2022 05:06 AM |
|
Edited by louweed at 14:55, 11 Jun 2022.
|
Wub said: I believe your script does not allow for draws. Yet sometimes fast creatures can indefinitely avoid slower but stronger creatures, and sometimes both creature stacks can do no better than indefinitely Defend, creating a standoff. As there is no clear attacker or defender, HotA rules should probably not apply, so we may need to count draws, too.
Draws do happen. I already have the situation where there's two stacks of equal strength and speed, and they both refuse to move within reach of the other, because they'll lose the advantage. Currently I'm forcing one of the stacks to break the impasse and attack - it should average out in the end, because I'm using multiple battles to compare two stacks, so each will take turns attacking/defending. This is more useful than just leaving it as a draw
Wub said: Judging by, among others, the high ranking of Stone Golems and the low ranking of Faerie Dragons the script probably does not allow for Ranged and No-Retaliation creatures to outrun slower stacks to get a free attack in. To be fair, such battles can be quite complex. For example, when Zealots fight Demons, then if Demons move in Turn 1 to a distance of 10 hexes, Zealots should respond by moving to a corner. That way, once they are blocked by the Demons, they can still move out of range to get a free shot in every other turn and win the battle.
Kiting hasn't come up yet, because the simulation doesn't use an actual battlefield, it's just a one-dimensional strip lol
Zealots are interesting: they're one of the few stacks that consistently beats the behemoths, no kiting or tricks required
Wub said: Creature size matters. Boars, for example, can with their two-hex size actually reach Halflings in two turns, not three, when there are no obstacles. Similarly, Horned Demons, despite being equally fast as Boars, cannot reach Halflings in two turns, but they can reach Medusas.
Creature size is taken into account. I think there's a bug to do with calculating distance somewhere...
Wub said: As you alluded to, some Creature Specialties can probably still be simulated more accurately. I imagine Mighty Gorgons – but especially Vampire Lords – may then still rank higher. It could also be a matter of instructing the script to let Vampire Lords wait but then strike first only once instead of twice against slower, living creatures, so they can profit more from their Life Drain specialty.
It's already complicated when two stacks are fighting each other hand-to-hand - is it better to attack, wait, or defend? I don't think this kind of logic can be explicitly programmed for, because there's too many special scenarios and exceptions. What I'm planning to do for this situation is calculate the outcome of each decision that the stack could make, by simulating the battle as if they had made that decision, and then choose the action that's most likely to result in victory. Like a chess AI
Wub said: Melee-Penalty shooters seem to rank quite high. I suspect, for example, that Halflings actually have quite a few losing match-ups against fast creatures.
Yes - after making just a few improvements to the AI, halflings are only winning 128 battles, down from 146
Wub said: Morale presents another challenge. If not simulated correctly, it will inflate the ranking of Undead creatures.
Morale & luck are both being taken into account
Wub said: Following up on what admin noted, it seems Pit Lords and Pit Fiends switched places.
This has been fixed - I had the cost entered incorrectly. Pit Lords only win 43 now
I'm going to take another week or so improving the script, and then I'll put the final results in a publicly accessible spreadsheet.
Most recent results here: https://pastebin.com/r7F8m0bV
|
|
baronus
Legendary Hero
|
posted June 11, 2022 09:56 PM |
|
|
Great work! I like maths! To have correctly result you must find the number of units that each win the same number of times. This means that all of them have achieved a perfect balance. The number of units should be increased more the lower they are in the table.
Try 1% more number for unit by each the case where an unit has fewer number of wins.
eg. Behemoths + 1% = 673
ayssid + 2%
war unicorn + 3%
leprechaun + 4% = 10400
halfling + 5%
stone golem + 5%
horned demon + 5%
etc.
It shuld give better results.
|
|
gnollking
Supreme Hero
|
posted June 11, 2022 11:41 PM |
|
|
baronus said: It shuld give better results.
Better results for what? Ignoring the point of the thread?
|
|
baronus
Legendary Hero
|
posted June 12, 2022 07:03 AM |
|
|
Better result to rate units if number o stack is unproportional result is false 1000 sprites is not the same like 1000 behemoths. You must find accurate ballance. Ballance is when each unit has the same number of wins. Because we have here fights one versus one.
|
|
Wub
Responsible
Famous Hero
|
posted June 14, 2022 11:15 PM |
|
Edited by Wub at 23:16, 14 Jun 2022.
|
Good points, louweed, and your AI in several respects already beats the AI of the actual game, so nice going .
Cool idea to draw inspiration from chess AIs. A challenge may be that morale and luck are based on chance. So are battlefield obstacles, but going for no obstacles sounds good to me too.
Regarding kiting, depending on whether you are more interested in predicting outcomes or AI development, you could consider making your life easier by hard-coding certain outcomes, rather than simulating a whole battlefield. For example, if a No-Retaliation creature has a at least Speed X, it automatically beats creatures with Speed Y (e.g., Devils vs Stone Golems). Morale may be a factor in some fights, though, especially when X is not much larger than Y.
Something similar could apply to fast Ranged creatures. Likewise, you could hard-code that Mighty Gorgons automatically beat any living creature of, say, Level 5 and higher. Or verify this by simulating some key battles yourself. Anyway, your experience with scripting beats mine, so nothing you probably hadn’t thought of already .
By the way, Behemoths do beat Zealots. Probably again a case of them taking only two full ranged hits instead of three.
Nice that you shared your data. I now also looked into Ayssids, and they indeed beat Sprites, with ease even. Interestingly, when you plug them into my Chart 4, they end up on place 59 with a score of 2782.30. That does not seem very impressive, but it is the highest of any Speed 11 creature, plus they have a strong specialty that combines nicely with their high Speed. Even more interesting is that Crusaders, which have a very similar specialty, are currently on place 60, so in terms of cost-efficiency Ayssids are a bit like Speed 11 Crusaders .
Anyway, curious to see your next analysis, even if it will probably take some time for me to respond.
Quote from baronus:
The number of units should be increased more the lower they are in the table.
Ah, a balancing act: What should be the stack size of a creature to have a win rate of exactly 50%? Not an easy question, but at least louweed’s and my charts offer some opportunity already for guesstimation .
____________
|
|
louweed
Adventuring Hero
|
posted June 16, 2022 09:18 AM |
|
Edited by louweed at 09:25, 16 Jun 2022.
|
Yeah you're right about the Zealots and the Behemoths, now I've fixed the distance bug the Behemoths win
Anyway
An update: I haven't done anything about kiting yet, but I've got the AI working, mostly, and I've been testing it on level 7 units. The AI only looks ahead 2 rounds, because - and I didn't realise this until very recently - the number of different possible scenarios just explodes after 2 rounds. In the most basic situation, there's 32 outcomes to each round - and so 32*32 = 1024 distinct outcomes to two rounds, etc. And each unit is doing this calculation before it makes a decision that doesn't have a hard-coded solution.
Even only looking ahead two rounds, the units seem to make pretty good decisions though. There are a lot of draws, e.g Gold Dragon vs Titan - the Gold Dragon attacks, then both units defend indefinitely. The Haspid I'm pretty sure would win more battles if the AI looked ahead more rounds, because it does more damage after taking damage, but apart from that I believe it's working well.
I wouldn't mind some feedback on these rankings though, this is 1 V 1 on sand:
creature # win draw lose score beaten by
arch devil x 1 8 0 1 2.24 archangel
archangel x 1 7 1 1 2.12 ancient behemoth
ancient behemoth x 1 6 1 2 1.92 titan, arch devil
haspid x 1 4 4 1 1.38 arch devil
titan x 1 4 2 3 1.61 archangel, arch devil, haspid
black dragon x 1 3 3 3 0.90 archangel, arch devil, ancient behemoth
gold dragon x 1 3 3 3 0.35 archangel, arch devil, ancient behemoth
chaos hydra x 1 2 0 7 -2.50 archangel, gold dragon, titan, arch devil, black dragon...
ghost dragon x 1 1 0 8 -3.68 archangel, titan, arch devil, gold dragon, black dragon...
phoenix x 1 0 0 9 -4.34 ancient behemoth, archangel, haspid, gold dragon, titan...
Is the Arch Devil really that good? Is the Phoenix really that bad?
|
|
baronus
Legendary Hero
|
posted June 16, 2022 10:48 AM |
|
|
Yes because all Adev abilities is only fight. AAngel has powerfull resurrection so its better unit!!! Not each unit skill is for fight.
Phoenix is worst unit so has 4 growth. To make true comparision you must find number of units when is the same wins/loses number for each unit. Fights between 2 ghost dragon and 2 angeles is nonsensible. We know result. And other unit hydra has area ability. So it can be 1 stack vs 1 stack because ability dont work. Behemot has points from hero so it cant be only unit vs unit! If heroes has 15 att points its 12 pt reduction! Behemot bonus is 60% to hit! All of it must be calcullated!
|
|
Wub
Responsible
Famous Hero
|
posted June 18, 2022 09:22 PM |
|
Edited by Wub at 21:27, 18 Jun 2022.
|
Nice chart, louweed, I think your AI gets almost all outcomes right.
Paradoxically, these 1 vs 1 Level 7 fights are most of the time far more complex than the fights between one-million-gold creature stacks. After all, in 1 vs 1 fights first strikes don’t reduce retaliation damage and Level 7s have high Defense skill, making that Defending (or even Waiting) creates new tactical opportunities.
The Archangel vs Ancient Behemoth fight illustrates this, which is also one of the few fights where I feel the AI is mistaken. An Archangel does 77 damage against an Ancient Behemoth so needs 4 hits for a win, whereas an Ancient Behemoth does 49-82 damage so needs 4-6 hits (but with average damage 4 hits) for a win. The Archangel is also much faster and can therefore, with proper Waiting, choose to deal the first and last blow, so there is no reason why he should lose.
In fact, while the Ancient Behemoth is forced to Defend to hold the draw, the Archangel can try and play for a win by attacking the Ancient Behemoth before it can Defend, and hope for positive Morale. There is an 8.3% chance this will happen, allowing the Archangel to win even if the Ancient Behemoth keeps Defending. This also means the Archangel would rank number 1 in your chart.
The Gold Dragon vs Titan matchup is another example where best play of both sides requires looking more than 2 turns ahead. Titans have an edge as they need 5 to 7 hits for a win (37 – 55 damage; 5.41 hits with average damage), whereas Gold Dragons need 6 to 7 hits (46 – 69 damage; 5.80 hits with average damage). And, indeed, if the Gold Dragon attacks the Titan and then Defends, the Titan will lose the edge if he keeps attacking. Yet, the Titan can actually break the stalemate.
To achieve this, he should simply walk away. To avoid being shot, the Gold Dragon will have to fly over and attack, as only flying over simply allows the Titan to keep walking away until he gets positive Morale. But if the Gold Dragon is forced to attack, this leads to a fight where the Titan keeps the edge and can still opt for Defending if his damage rolls turn out low. Thus, in most cases the fight will be a draw, but the Titan will be able to win more often than the Gold Dragon.
A perfect AI may thus also have to calculate who has the edge and can play for a win, based on probabilities that change with every damage roll or Morale bonus.
The good news is that the fights in the Mini-Game are in most cases really much simpler, so I think your AI will get even more outcomes right.
____________
|
|
LouWeed
Adventuring Hero
|
posted June 20, 2022 06:19 AM |
|
|
The simulation part of the script is really slowing things down - previously running all 160 creatures against each other with at least 2 battles each would take ~20 seconds. Now it takes longer than a day (I'm guessing - haven't actually left it for that long).
Wub said: An Archangel does 77 damage against an Ancient Behemoth so needs 4 hits for a win, whereas an Ancient Behemoth does 49-82 damage so needs 4-6 hits (but with average damage 4 hits) for a win. The Archangel is also much faster and can therefore, with proper Waiting, choose to deal the first and last blow, so there is no reason why he should lose.
This is a good idea - I've changed the logic so that instead of simulating every possibility 2 rounds into the future, it runs a simple calculation to see what happens if both creatures just keep attacking - who wins, and how long does it take? If it's close, and there's enough rounds to go, the archangel can assume good morale will happen too. The total simulation thing is only applied when there's less than 2 rounds of attacks required to finish the battle, and the result is in doubt.
So now the script is more efficient, and there's less draws. Also the Haspid acts more confidently, and wins most of the battles against the black dragon, and a lot more of the battles against the gold dragon.
The archangel does win more often than the ancient behemoth does, but it's still a draw most of the time.
I expect to be finished with this one way or another within the next week
|
|
Zaio-Baio
Promising
Famous Hero
|
posted June 20, 2022 09:33 AM |
|
|
LouWeed said:
The archangel does win more often than the ancient behemoth does, but it's still a draw most of the time.
People like to play rich maps and by the time they meet in the middle zone its likely that both players will have about 30 att and 30 def. So Archangels will have 60 att vs 49 def of Ancient Behemoths and each AA will deal 77,5 dmg to the ABs. ABs will attack with 49 att vs 12 def of AAs (because of ABs reduce defense ability) so each AB will deal on average 114 dmg to the AAs.
In other words under normal multiplayer conditions the Ancient Behemoths are a lot stronger than the Archangels in melee.
|
|
louweed
Adventuring Hero
|
posted June 21, 2022 05:06 AM |
|
Edited by louweed at 23:41, 21 Jun 2022.
|
OK results are here for the time being:
https://docs.google.com/spreadsheets/d/1dJx321tUnFox8FoC8PksRTuduGC0QaMAsQUwFDCrrzg
I added SoD and RoE as well as HoTA because it was easy
Looking at the SoD results, it's uncanny how similar the results of the script are to wub's original analysis
And naturally the behemoth beats all in RoE
Still haven't done the kiting yet, so the shooters are down, and the dawdlers are up
|
|
NimoStar
Responsible
Legendary Hero
Modding the Unmoddable
|
posted June 21, 2022 05:57 AM |
|
|
Quote: if a No-Retaliation creature has a at least Speed X, it automatically beats creatures with Speed Y (e.g., Devils vs Stone Golems). Morale may be a factor in some fights, though, especially when X is not much larger than Y.
Doesn't seem right to me. Speed Y can get closer to the center of the battlefield, so if it ednough to get the edge from there, there is no way Speed X may get away, no matter how fast it is ; wherever it runs, slower creature may still reach it.
____________
|
|
Wub
Responsible
Famous Hero
|
posted June 21, 2022 11:46 PM |
|
Edited by Wub at 23:48, 21 Jun 2022.
|
Another mesmerizing chart, louweed . Not having played Horn of the Abyss, I have not looked into Haspids, but as far as I can see all other win-lose-draw outcomes are correct, awesome!
One can wonder about the exact numbers, though. Based on my above analysis, I believe the draw percentage of Archangel vs Ancient Behemoth should be higher. In either case, the Health data are sometimes puzzling. For example, a Titan surely beats a Chaos Hydra, but even with good kiting it should have less than 282 Health left.
The final scores now count only wins, but if draws would be granted 50% of points too, it seems the Archangel would come out on top again, with Arch Devils on second place.
Quote from louweed:
Looking at the SoD results, it's uncanny how similar the results of the script are to wub's original analysis
Converging findings with different methods, sounds like good science to me . Except that I tried to predict only the winner, and you even the entire ranking. Unfortunately I can’t access the file, though, so I hope you can fix that at your convenience.
Quote from Zaio-Baio:
under normal multiplayer conditions the Ancient Behemoths are a lot stronger than the Archangels in melee.
Undoubtedly. The same is of course also true in singleplayer and with lower hero stats. Consistent with your analysis, for every 5 Attack and 5 Defense that both opposing heroes gain, an Archangel gains nothing, whereas an Ancient Behemoth gains on average 8 damage.
More generally, for such reasons I don’t take 1 vs 1 battles or the Mini-Game too seriously, though sometimes they yield interesting insights.
Quote from NimoStar:
Speed Y can get closer to the center of the battlefield, so if it ednough to get the edge from there, there is no way Speed X may get away, no matter how fast it is
It just depends on the values of X and Y. An Arch Devil is definitely fast enough to indefinitely hit-and-run Stone Golems, or for that matter any Speed 3 or 4 creature (as long as positive Moral does not occur). Creatures with Speed 5 are indeed too fast if controlled by a capable human player on a battlefield without obstacles. But Vampire Lords, for example, can also beat an infinite number of Stone Golems.
____________
|
|
LouWeed
Adventuring Hero
|
posted June 22, 2022 12:15 AM |
|
|
Yeah sorry I had trouble posting a link to the spreadsheet in my previous post, and ended up accidentally truncating the url somehow. I've fixed it, and here it is again:
https://docs.google.com/spreadsheets/d/1dJx321tUnFox8FoC8PksRTuduGC0QaMAsQUwFDCrrzg
|
|
baronus
Legendary Hero
|
posted June 22, 2022 07:05 AM |
|
|
Nice, big work but gives us small. Why 33333 sprites? And 25000 halfings? No logical sense. To true comparision you must find correct number of units when power each type of unit is the same. The same number of wins/loses. Then we can have Real fighting value.
|
|
gnollking
Supreme Hero
|
posted June 22, 2022 01:34 PM |
|
|
baronus said: Nice, big work but gives us small. Why 33333 sprites? And 25000 halfings? No logical sense. To true comparision you must find correct number of units when power each type of unit is the same. The same number of wins/loses. Then we can have Real fighting value.
Because the premise of the thread was to have 1 million gold to use for a unit. This is also why I asked you previously when you missed this crucial detail
|
|
baronus
Legendary Hero
|
posted June 22, 2022 02:48 PM |
|
|
But its closed. I see not only 1mln fights calcullations but ,creature strenght' calculations too. Its impossible using only 1 mln gold because prices are calcullated unproportional. If we have program for fast calculations we can make better thing than only effectivnes 1 mln gold. We can rate all creature with big precision. Harm to lost it.
|
|
LouWeed
Adventuring Hero
|
posted June 22, 2022 11:37 PM |
|
|
I think I know what you're getting at
Like, if we take peasants, sharpshooters and azure dragons:
-You need at least 82 peasants to reliably beat 1 sharpshooter, and ~1500 peasants to beat 1 azure dragon
-You need ~150 sharpshooters to beat 1 azure dragon
So we can construct a table:
PEAS SHSH AZDR
peasant 2 82 1500
sharpshooter 1 2 150
azure dragon 1 1 2
Note that we can't simply convert peasants into sharpshooters, or vice-versa - you don't need 82*150= ~16,000 peasants to defeat an azure dragon, and 1500/82 = 18 sharpshooters is not enough to a single azure dragon. So you'd have to find the tipping point for all ~12,000 match-ups.
And there's some problems too - 1 Archangel vs 1 Haspid is pretty even, but as soon as you have more than about 5 in each stack, the Haspids win every single time because of the way their revenge ability works. So the numbers won't always scale
|
|
|
|