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
