|
Thread: H3: How to test AI, autoplay? | |
|
Serp
Known Hero
|
posted March 11, 2019 12:26 PM |
|
|
H3: How to test AI, autoplay?
Hi, I created a map and would like to test if the AI plays as I expect.
(Hota map, playing with HD mod)
Is there any automatic way I can do this? Currently I'm sitting long time there and hitting the "next turn" button again and again.
I already tried a "ghost mouse" script, but for some reason the scripted clicks/button-press do not work ingame.
|
|
wenwell
Adventuring Hero
|
posted March 11, 2019 01:24 PM |
|
|
You can use "gosolo" cheat code (well, pseudo-cheat) instead of ghost mouse.
|
|
Serp
Known Hero
|
posted March 11, 2019 03:07 PM |
|
|
ah, did not know this chaet, works great (beside it helps/speed it up to forbid player 1 to have a hero), thank you
|
|
Hyde
Tavern Dweller
|
posted May 16, 2019 12:26 AM |
|
|
Hi all!
I have similar question - can I do many combat fight without running the game? I want to do many (like hundrets or thousands?) combat simulations and I would prefer to do it in some programming language. Is it possible to pass somehow parameters (like starting armies, stats, skills, spells, artifacts) and get the fight result: every move, damage done etc.?
|
|
wenwell
Adventuring Hero
|
posted May 16, 2019 09:20 AM |
|
|
Most close thing I know is a Damage calculator. You can check web version here - https://heroes3tools.herokuapp.com/
|
|
Maurice
Hero of Order
Part of the furniture
|
posted May 16, 2019 10:34 AM |
|
|
Hyde said: Hi all!
I have similar question - can I do many combat fight without running the game? I want to do many (like hundrets or thousands?) combat simulations and I would prefer to do it in some programming language. Is it possible to pass somehow parameters (like starting armies, stats, skills, spells, artifacts) and get the fight result: every move, damage done etc.?
Quite frankly, I think the number of permutations is astronomical. The biggest blockade here is that we don't know in detail how the AI makes its decisions during combat. You'd need to know the AI subroutines in detail to be able to program a combat simulator with any degree of reliability.
____________
The last Reasonable Steward of Good Game Design and a Responsible Hero of HC. - Verriker
|
|
Hyde
Tavern Dweller
|
posted May 16, 2019 04:12 PM |
|
Edited by Hyde at 16:13, 16 May 2019.
|
Maurice said:
Hyde said: Hi all!
I have similar question - can I do many combat fight without running the game? I want to do many (like hundrets or thousands?) combat simulations and I would prefer to do it in some programming language. Is it possible to pass somehow parameters (like starting armies, stats, skills, spells, artifacts) and get the fight result: every move, damage done etc.?
Quite frankly, I think the number of permutations is astronomical. The biggest blockade here is that we don't know in detail how the AI makes its decisions during combat. You'd need to know the AI subroutines in detail to be able to program a combat simulator with any degree of reliability.
I think I didn't express myself clearly What I need is to run auto-combat, I just want to set up everything (armies, skills etc.) using some programming language and do it many times saving the course of the battle (unit A move to hex YYY and atacks unit B with damage ZZZ, unit C move to hex YYY etc.) to file. It does not require to know how AI works.
Is it possible this way?
|
|
Maurice
Hero of Order
Part of the furniture
|
posted May 16, 2019 10:05 PM |
|
|
Yeah, that's possible, you just need to keep track of all the permutations. One thing you don't have control over, though, are the battlefield obstacles.
Also, regarding the permutations ... I think they quickly add up and will become pretty much insurmountably large within a few turns.
____________
The last Reasonable Steward of Good Game Design and a Responsible Hero of HC. - Verriker
|
|
Hyde
Tavern Dweller
|
posted May 16, 2019 10:45 PM |
|
|
Maurice said: Yeah, that's possible, you just need to keep track of all the permutations. One thing you don't have control over, though, are the battlefield obstacles.
Also, regarding the permutations ... I think they quickly add up and will become pretty much insurmountably large within a few turns.
I don't understand what do you mean by adding up permutations. Let's suppose I want to see results of 100 battles.
1. 20 pikeman vs 10 archangels
2. 40 pikeman vs 10 archangels
3. 60 pikeman vs 10 archangels
etc.
100. 2000 pikeman vs 10 archangels
As the result I would like to have 100 text files with battle outcome (similar to log during autocombat but with added position on the battlefield). Where are those permutations you mentioned?
Anyway, you said that it is possible? Can you tell me how? Do I need to know some specific programming language or can I choose one that I prefer (eg python)?
|
|
avatar
Promising
Supreme Hero
|
posted May 17, 2019 08:32 AM |
|
|
You wrote earlier that you want to set-up everything for example skills. So, results will be diffirent if attackih hero has offence skill and defending hero has advanced armorer, Luck can alter the game etc, etc.
____________
|
|
Maurice
Hero of Order
Part of the furniture
|
posted May 17, 2019 10:41 AM |
|
Edited by Maurice at 10:45, 17 May 2019.
|
Do you just want to see the outcome of them beating on eachother? Or an actual battlefield simulation?
As it is, the battlefield is made up of 165 hexes. Each time a unit gets to move, it can move to any hex within its reach - which is further augmented or hampered by buffs, debuffs and battlefield obstacles.
Let's take the Pikeman from your example, assuming it starts its own turn on the left side of the battle field, in the middle. With its speed of 4 and ignoring buffs, debuffs and battlefield obstacles, it would be able to reach 32 other hexes, or choose to defend in its position. So, right after the first turn, you already have to consider 33 different permutations. Archangels are even worse there, because they can reach just about the entire battlefield in a single turn. That's what I mean.
If you just want to simulate the units exchanging blows without actual movement or battlefield constraints, then that's doable with some basic programming skills, because all you need is a RNG to simulate the damage variance due to the damage spread of most units.
However, that's a very unreliable way to simulate a battle outcome, since it depends on much more factors - even in direct combat alone, disregarding the battlefield, you'd have to distinguish between melee and ranged attacks and that's only doable if you take battlefield movement in consideration.
____________
The last Reasonable Steward of Good Game Design and a Responsible Hero of HC. - Verriker
|
|
Hyde
Tavern Dweller
|
posted May 18, 2019 11:01 PM |
|
Edited by Hyde at 23:05, 18 May 2019.
|
Maurice said: Do you just want to see the outcome of them beating on eachother? Or an actual battlefield simulation?
As it is, the battlefield is made up of 165 hexes. Each time a unit gets to move, it can move to any hex within its reach - which is further augmented or hampered by buffs, debuffs and battlefield obstacles.
Let's take the Pikeman from your example, assuming it starts its own turn on the left side of the battle field, in the middle. With its speed of 4 and ignoring buffs, debuffs and battlefield obstacles, it would be able to reach 32 other hexes, or choose to defend in its position. So, right after the first turn, you already have to consider 33 different permutations. Archangels are even worse there, because they can reach just about the entire battlefield in a single turn. That's what I mean.
If you just want to simulate the units exchanging blows without actual movement or battlefield constraints, then that's doable with some basic programming skills, because all you need is a RNG to simulate the damage variance due to the damage spread of most units.
However, that's a very unreliable way to simulate a battle outcome, since it depends on much more factors - even in direct combat alone, disregarding the battlefield, you'd have to distinguish between melee and ranged attacks and that's only doable if you take battlefield movement in consideration.
All I need is the battle log a little bit more detailed than normal battle log (I need description of the movement that was made by every unit in every turn).
I don't want to program whole battle by myself and I understand why it is impossible.
The example I used in previous post (battles between pikemen and archangels) wasn't good, because it's true that damage calculator is all I need to predict outcome of these specific battles. But I also want to do some more complicated battles with different armies on both sides where I will not be able to predict outcome using only damage calculator (I don't now how AI works).
Regardless of whether my needs are strange or not I'm just looking for answer if it is possible to perform belowmentioned task in any programming language:
1. Set up battle parameters of both armies (heroes, army size and type, stats, artifacts etc.)
2. Run auto-combat for armies from point 1.
3. Write log of the battle (as detailed as it could be that mean normal battle log + description of units moves) to txt file.
4. Repeat points 1-3 for many times with different armies.
If it is possible - how?
|
|
Maurice
Hero of Order
Part of the furniture
|
posted May 19, 2019 10:11 PM |
|
|
So basically, you want the decisions made by the AI at every creature turn to be output to a file and parse it?
____________
The last Reasonable Steward of Good Game Design and a Responsible Hero of HC. - Verriker
|
|
Hyde
Tavern Dweller
|
posted May 19, 2019 10:21 PM |
|
|
Maurice said: So basically, you want the decisions made by the AI at every creature turn to be output to a file and parse it?
Yes, that is exactly what I need.
|
|
wenwell
Adventuring Hero
|
posted May 21, 2019 01:55 PM |
|
|
Talking about movement descriptions. You can use combat log in Oracle but it pretty much lack all other information
As example, battle in HD+, press Q in first round:
2 Crusaders [2, 2]..[2, 2] @ [3, 1]
1 Crusaders [3, 4]..[3, 4] @ [3, 2]
10 Pikemen [5, 5]..[5, 5] @ [5, 6]
1 Crusaders [2, 2]..[2, 2] @ [3, 2]
1 Griffins [3, 3]..[3, 2] @ [2, 2]
3 Swordsmen [3, 3]..[3, 3] @ [4, 3]
3 Marksmen [5, 3]..[5, 3] @ [4, 3]
1 Crusaders [5, 2]..[5, 2] @ [5, 3]
1 Crusaders [3, 2]..[3, 2] @ [2, 3]
3 Swordsmen [5, 5]..[5, 5] @ [5, 6]
1 Crusaders [5, 4]..[5, 4] @ [5, 5]
Same battle without HD+ (different obstacles and rng + some quick combat bugs possibilities):
2 Crusaders [2, 2]..[2, 2] @ [3, 1]
3 Griffins [3, 3]..[3, 2] @ [2, 2]
1 Crusaders [3, 4]..[3, 4] @ [3, 2]
3 Swordsmen [7, 3]..[7, 3] @ [8, 3]
10 Pikemen [5, 5]..[5, 5] @ [5, 6]
2 Crusaders [2, 2]..[2, 2] @ [3, 2]
1 Crusaders [5, 1]..[5, 1] @ [6, 1]
1 Crusaders [7, 1]..[7, 1] @ [6, 1]
3 Swordsmen [3, 2]..[3, 2] @ [2, 2]
14 Pikemen [5, 6]..[5, 6] @ [5, 5]
6 Pikemen [5, 5]..[5, 5] @ [5, 6]
1 Crusaders [5, 4]..[5, 4] @ [5, 5]
1 Crusaders [4, 2]..[4, 2] @ [3, 1]
1 Crusaders [6, 5]..[6, 5] @ [5, 5]
3 Swordsmen [5, 5]..[5, 5] @ [5, 6]
8 Pikemen [5, 6]..[5, 6] @ [5, 5]
2 Archers [3, 1]..[3, 1] @ [4, 2]
1 Crusaders [5, 4]..[5, 4] @ [5, 5]
1 Crusaders [6, 5]..[6, 5] @ [5, 5]
1 Swordsmen [5, 5]..[5, 5] @ [5, 6]
15 Pikemen [4, 5]..[4, 5] @ [5, 5]
Another movement description could be found in SoD_SP plugin (as D11, A3 eth.) but it is not displayed in combat log, sadly.
|
|
AlexSpl
Responsible
Supreme Hero
|
posted May 22, 2019 02:20 PM |
|
|
Quote: If it is possible - how?
The most straightforward way is to write a plugin.
Quote: You can use combat log in Oracle
Keep in mind that LMOracle doesn't interfere with the game in any way. It only reads game data periodically, therefore don't use it for quick battle logging, because the program may and will skip some turns.
|
|
Hyde
Tavern Dweller
|
posted May 22, 2019 04:50 PM |
|
|
AlexSpl said:
Quote: If it is possible - how?
The most straightforward way is to write a plugin.
And this is the straighforwad answer I needed. Not the one I prefer, but I see that there is no shortcut
|
|
|
|