From: Stian G. <sti...@st...> - 2022-10-12 19:10:59
|
Hi! I have been looking into the correct tile production formula, and have arrived at this result after verifying a lot of different outputs: normal production = ( base production + additive expert production + additive resource production + additive expert resource production ) * multiplier resource * multiplier expert tile improvement production = additive tile improvements (plow, road, minor river, major river) * multiplier expert colony efficiency bonus = MAX(rebel bonus number, ( rebel bonus number * multiplier resource * IF(expert at producing goodstype, 2, 1) )) total production = normal production + tile improvement production + colony efficiency bonus Note that the colony efficiency bonus gets multiplied even for expert types that only have additive bonuses (Expert Farmer). The current production numbers in FreeCol deviates rather heavily from this formula, and I have built an acceptance test based on the above formula and verified a few hundred production variations in the original game as well. Best wishes, Stian Grenborgen ___________________________________ From: Stian Grenborgen Sent: 03 September 2022 10:51 Hi again, I have found that getPotentialProduction/getMaximumPotential for Tile/BuildingType produces different results than the actual production (ColonyTile/Building) even when the results should be the same. When looking into the code I have noticed all sorts of issues with modifiers not being applied. Some of these issues only affect methods used by the AI, while other issues affect the actual production. For example, an expert farmer never gets the additional (expert) bonus from the grain resource. I think the best solution for these problems is having a separate class for calculating production/consumption -- and that this class gets the list of modifiers for the colony and player as parameters. This way, we can use the same code everywhere (potential, maximum and actual production) and Tile+ColonyTile+Building+Colony gets simplified. The main problem with the rewrite is lack of tests for the correct tile production values ... so it would be really helpful if someone would make tables/lists with the correct values for each combination of: * Tile type * Resource * Tile improvements (plow, minor river, major river and/or road) * Worker type (unattended, petty criminal, indentured servant, colonist, convert, expert) * Liberty bonuses (-2, -1, 0, +1, +2) That's lots of combinations and numbers ... but only having a complete set for one resource (grain) would help immensely. Please do tell if you can help make these tables/lists :-) Best wishes, Stian Grenborgen |