Hi all,
During the GSoC reunion I had another project idea. It was based on
the fact that it is difficult to fine-tune the strength of the units.
For example, recently the Footpad and the Dwarvish Lord have been
weakened a bit from their original spec.

I wonder if some automatic analysis can show us units that are
potentially too strong/too weak?

I see a couple of ways to analyze the strength of units automatically:

(1) The Great Tournament:

The idea is to have units stand right next to each other and fight to
the death. This is done for each possible terrain a unit can stand on.
The result (chance of survival) gives us an indication of the relative
strength of a unit against another one.
To be fair, the results have to be weighed with the frequency a unit
appears in a scenario using that terrain.

(a) Duels (1 on 1 fights).

This is the most straightforward version. We would of course run this
outside the Wesnoth engine, without any GUI and animations. For each
possible terrain tile, a battle would be generated for each possible
pairing of units. Of course each battle would have to be run twice
(each unit comes first in one battle). Each round would involve the
best attack, and typically generate a histogram of outcomes. For each
of the possible outcomes in that histogram the next round would again
generate a histogram; histograms can be merged after each round.

This would then give us a percentage of cases where each unit
eventually survives or dies. For example, if we take an Iron Mauler on
a castle tile vs. a Shaman in water, the outcome is probably 99%/1%.
Maybe on a different setting, the Shaman has 2 % survival :-)
This shows us that the Shaman is a weak fighter (which is obvious but
automating this shows us such stats for each pairing of units).

(b) Group battles (one unit each from a faction?)

Maybe something similar can be done for a group of units, fighting in
a hedgehog formation against each other. However, the number of tile
combinations is very big then (maybe all units of one faction would
stand on the same type of tile each time). We would also have to move
units when a unit dies, to continue the fight.

(c) Weighting.

Dwarvish units do poorly in forests, unlike elves; but dwarves appear
often in scenarios with mountains and caves, so the result of a dwarf
fighting on such terrain would be given much greater weight. This will
avoid giving the impression that dwarves are weak because they have
trouble in water/forests, etc.

(2) The Great Race:

Similar idea, but the idea is to reach a far-away point across lots of
tiles (again not using the GUI). The tiles would again by weighted by
appearances of a given unit in maps with a given tile. We can then
count how many turns it takes for a unit to cross, say, 1000 tiles.

(3) Result:

We can compare the overall scores of (1) and (2) against the
recruitment and XP costs. Maybe we can see a trend? Maybe we can get a
better intuition how much special abilities like heal, poison, ambush,
charge, etc. are worth?

I think it would be interesting to get some insight on whether we can
find possibly overpowered/underpowered units in such a way.

In terms of programming, I think this is very feasible for a summer project:

(1) Extraction of unit stats.

(2) Extraction of map stats for all built-in maps and campaigns
(together with the recruit list). This may be tricky for cases where
the recruit list in a campaign grows over time. Maybe the WML can be
analyzed for such changes?

(3) Implementing the virtual fights/races. Perhaps the Wesnoth engine
can be used in that way, as long as we don't use the GUI for millions
of simulations, as that would be too slow.

(4) Analysis/visualization of the results. This may be non-trivial as
there are hundreds of units so this generates a lot of data.
-- 
Regards,
Cyrille Artho

_______________________________________________
Wesnoth-dev mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-dev

Reply via email to