LunarMongoose
King
MongooseSDK 1.8
Based on Warlords 2.0.8, with BetterAI 2/12 fully integrated
http://forums.civfanatics.com/downloads.php?do=file&id=5984
NEW
SurfaceCombatFix (CvUnit.cpp, CvUnitAI.cpp, CvGameCoreUtils.cpp, CvGameCoreUtils.h)
Applies floating point precision to the damage calculation portion of the main combat engine (doesn't affect collateral or air strikes), and the corresponding odds generator. The difference is small and doesn't usually change fight outcomes, but for an example take a 2-vs-1 fight such as a promotionless warrior attacking a wolf: in vanilla the odds are 99.1%, and with this fix they are 98.0% (a more accurate and correct number).
Makes a small code improvement to an internal odds calculator only used by AI players to determine courses of action. The fix involves an integer division not being postponed til all multiplications in the same line are done as SDK code usually does, and may or may not have a very small effect on gameplay (it's hard to test).
Makes one final change that could be considered a mod and not a fix, but I threw it in here anyway since it affects surface combat and is hard, imo, to object to: if two defending units have exactly the same defense strength for a fight (and either both are Great-General'd or neither are), it will now pick the lower-experience one instead of the higher-experience one to take the fight. This has two advantages: since promotions get further apart the higher you go it helps get more promotions faster; and if the defender loses the fight, the player loses a lower-experience unit which is always preferrable.
CastleBypassFix (CvPlayer.cpp)
Allows buildings to still be constructed after they go obsolete if they provide a defense bonus and thus still serve a purpose. This only affects castles currently, and restores their old behavior before they got a bonus trade route that forced a tech expiration. Don't worry, they still do nothing but provide more physical defense if you build them in this manner (ie everything about them that should obsolete still does).
FortifyOnWaterMod (CvUnit.cpp)
Allows ships to fortify. Not particularly realistic but still a good gameplay improvement imo. Currently hardcoded to use 40% of the land fortify strength, so that ocean defense goes from 0% to 10% and coast defense from 10% to 20% as fortify is built up. In the future I may try to block this for ocean that's not inside your own borders.
SplashDamageMod (CvUnit.cpp)
Changes how splash (collateral) damage is handled. Actual damage done is now (global constant * output power * unit strength ratio) and splash limits are now (normal limits * Drill/Morale protection). Before, not counting dampening which I removed seperately, unit strength ratio affected the limit and Drill/Morale protection affected the damage.
RetreatMod (CvUnit.cpp, CvGameTextMgr.cpp)
I didn't feel like adding a new XML tag this time so I added functionality to the vanilla <iWithdrawalProb> one instead. It allows negative values, which have the effect of increasing the retreat chance of units that attack this unit. I currently use this with the Ironclad, which provides some survivability for people who still have wooden warships. It also makes ironclad vs ironclad battles more likely to end in withdrawal as happened historically.
BombardLimitMod (CvInfos.cpp, CvInfos.h, CvGameTextMgr.cpp, CvUnit.cpp)
In my ongoing quest to make bombardment and defense more meaningful I've installed limitations on how far certain units can bombard defenses, which shows up in-game on unit mouseovers. This mod also adds seperate tracking for physical (walls and castles) and cultural defense damage, which fixes some problems and allows the bombard limits to work correctly in all cases. Currently requires the <iBombardLimit> tag to be installed in all UnitInfos.xml entries after the <iBombardRate> tag; I will try to make it an optional tag in the future.
ShrineMod (CvCity.cpp)
Makes gold received from shrines scale with map size. It will now scale from 100% of normal on Duel, down to 50% of normal on Huge (at -10% per map level basically). This constitutes a much-needed nerf imo, as the total number of cities in the world tends to get very high on large maps.
UnitStringMod (CvGameTextMgr.cpp)
Significantly improves both versions of the unit mouseover text (there's one for Pedia/TechTree and one for actual units): things are listed in a more consistent order and text has been shortened to fit on one line in most cases. It is significantly more readable while maintaining the original format.
Also adds new information that had been sorely missing to the player, such as splash damage output power, number of targets, and limit, and air strike damage limit.
NotificationMod (CvPlot.cpp)
Event hook for displaying an in-game turnover message when a player's tile improvements upgrade. This is in addition to the highly useful city growth turnover message, and highly dubious but still fun pirate transport retasking message, that I added, all in Python.
UPDATED
MPCameraFix (CvUnit.cpp)
Removed, was being very glitchy in practice with not resetting the camera to normal after a combat.
FirstStrikeFix (CvUnit.cpp)
Removed, due to being included in the Warlords 2.0.8 official patch, without giving me credit (grr). Yes I know I've been a turkey about this but it's my call how I feel about it. Anyway, RIP my friend.
PirateModExtension (CvGame.cpp, CvTeam.cpp)
Changes the XML Difficulty Setting min-turns-before-barbs-start requirement to be different for land and sea barbs. Specifically, the latter is now defined to be 1.5 times the value of the former. This proved necessary with TheLopez's PirateMod, at least when combined with a higher-than-vanilla barb-ship-density XML setting, as the pirates dropped out of ships proved vastly more numerous and dangerous than standard land barbs and the players (AI's included) needed more time to prepare for it.
New: Preliminary attempt at getting barb ships to spawn in ocean tiles. I thought it might be working based on my current game but unfortunately I just tested it and it's definitely NOT working. This has gotta be possible, darnit... give me a few more days.
Not included but related: Rather than attempt to detect transport unload events I just wrote a Python loop that checks all barb ship transports at the end of each turn and changes their mission back from ASSAULT to ATTACK if they're not carrying anything anymore. Prevents huge numbers of empty Galleys, Kogges, Galleons and Transports from piling up in barb cities and slowing the game down, as well as having more barb ships that attack players. May try to change to the more efficient unload event detection method in the future, and will probably start including my Python in the future too for things like this, but at the moment I'm just trying to get this posted.
CityStringMod (CvGameTextMgr.cpp, CvDLLWidgetData.cpp)
Significantly improves the health and happiness mouseovers in city view: things are listed in a better, more sensible order; positive building health has been seperated into two lines for buildings and wonders (continent+global); positive building happiness has been collapsed into two lines for buildings and wonders (continent+global), with the latter no longer repeating the same text; positive building happiness has had the leading word "Some" removed to avoid running onto a second line; the two "Total Happiness" lines match the format of everything else now; the Charismatic leader effect has been given a more sensible description than "OH YEAH!", with the city.getExtraHappiness() effect seperated out and remaining on "OH YEAH!" in case it ever shows up (I don't think it's used currently but I'm not positive). The XML file with the necessary supporting text tags is included.
FIXES
TransportUpgradeFix (CvUnit.cpp)
Kicks carried units to nearest valid tile if upgrading a transport to a unit with different, incompatible cargo capabilities (if any).
InterceptDomainBlockingFix (CvUnit.cpp)
Allows things like SAM Batteries or AEGIS Cruisers with a greater-than-zero Intercept Range to still intercept things passing through their range but over a different domain type (SAM covering water tiles, AEGIS covering land tiles).
FloodPlainsFix (CvCity.cpp)
If a city is built on a flood plain and later razed, the tile will remain a flood plain rather than becoming a desert.
COMBAT MODS
DamageDampeningRemovalMod (CvUnit.cpp)
Removes the damage dampening effect from Collateral and Air Strike combat. This effect weights the strength ratio of attacker and defender by the average of the two strengths, with the end result being that a tank and warrior are far closer in relative strength than imo they should be for the above combat types.
The dampening remains in place for normal surface combat, as removing it has numerous serious consequences (first strikes become too powerful on high strength units and too weak on lower strength ones; combat odds approach zero and 100 far more quickly with any difference in strength between attacker and defender which is no fun at all; the corresponding damage to gameplay and balance suffered from that; etc).
AirLethalityMod (CvUnit.cpp, CvUnit.h, CvInfos.cpp, CvInfos.h, CyInfoInterface1.cpp, CvGameTextMgr.cpp)
Seperates damage, and thus lethality, from interception probability. In vanilla code the damage done by an intercept is based on the interception chance (actually the square of the chance if I remember correctly), which really sucks. With this mod you can specify the two independently in XML, which allows for things like WW2 fighters, battleships, and flak cannons doing a lot less damage than missile-based units while still having a high enough intercept chance to be useful, and finer tweaking of air combat stats in general. The additional stat is also displayed in the unit mouseover in-game.
The relevant tag is called iInterceptionLethality, just below iInterceptionProbability. Here are some example values and their effects. Note, values below -99 and above 100 are invalid.
-99: Intercepts do a random amount of damage between 1% and 99% of the target's max health, and can be fatal if and only if the target did not start at full health.
-50: Same as above, in range 1% to 50%.
0: Intercepts never do any damage, but still force incoming aircraft to turn back.
50: Intercepts have a 50% chance of being fatal outright; if this does not occur, a random amount of damage between 1% and 99% of the target's max health is dealt instead (which can still prove fatal as above).
100: Intercepts are always fatal.
AirCombatMod (CvUnit.cpp)
Largely untested, highly experimental attempt to implement an air superiority mission that fakes the AI players into using it *intelligently* without requiring modding of the AI itself (something which is still beyond me, though I'm hopeful I can learn enough from BetterAI to pull it off). There is no new mission; rather it changes the way air strike missions work when using air units with interception ability (generally fighters).
SiegeMod (CvCity.cpp, CvCity.h, CvPlayer.cpp, CvPlayerAI.cpp, CvUnit.cpp, CvUnitAI.cpp, CyCity.cpp)
Changes bombardment to do a fixed, absolute amount of damage rather than a % of the city's max defense in damage. City healing of bombardment damage remains percent-based so that it doesn't take forever for 100-125% defense cities to heal back from zero.
Just for reference, in the XML of my full mod (not provided) I have cities set to heal 10% per turn, land siege ranging from 3% (Catapult) to 8% (Mechanized Artillery) bombard strength with two levels of Accuracy promotion (2% each) available to land units only, fighters ranging from 0-4%, bombers ranging from 6-10%, and ships ranging from 2-10%. These constitute *very* heavy nerfs from vanilla stats, but if anything I feel bombardment is *still* too easy and fast. Oh well.
MISC MODS
UpgradeCostTraitMod (CvInfos.cpp, CvInfos.h, CvGameTextMgr.cpp, CvUnit.cpp)
Allows putting a unit upgrade cost modifier in traits like you already can with civics. I currently use this with Financial.
ExperienceNeededCappingMod (CvUnit.cpp)
Stops the experience gap between promotion levels from continuing to grow past a certain point, making further levels unreasonably and impractically expensive. That point is currently and arbitrarily set, by me, to be 145 exp and beyond, where the gap reaches a fixed 25 exp. I had had it set much lower in the past but changed my mind; this way it's still useful once in a while at least, and remains a steady comfort just knowing it's there.
PillageOwnTerritoryMod (CvUnit.cpp)
Allows you to pillage roads and railroads in your own territory. Tile improvements were/are fair game without this mod -- apologies for the slightly misleading title. Serves no real purpose most of the time, but useful for those of us who like to have roads only inside city working radii from a vanity standpoint.
AnimalMod (CvGame.cpp, CvUnitAI.cpp)
Makes animals unlikely to leave their TerrainNative and/or FeatureNative tiles, unless attacking something. In vanilla these XML tags just specify where the animals will spawn, and doesn't attempt to restrict their movement.
Prevents animals from instantly de-spawning everywhere when barbarians start. There will still be no new animals spawning after this point.
Changes the condition for the animal-barb switchover point from "total number of cities in the world times 1.5", to "times 3". XML Difficulty Setting min-turns-before-barbs-start requirements are still enforced as well.
CityTileCommerceMod (CvPlot.cpp)
Makes city tile commerce additive rather than an enforced minimum. This is mainly so that players will not be penalized for building cities on rivers, but also lessens the hit for building on resources that give commerce naturally (without their improvement). Food and hammers are still treated as enforced minimums.
LakeSizeMod (CvArea.cpp)
Makes the definition of a lake scale with map size. With an XML Globals value of 4 which is what I use, lakes will become inland seas when greater than 4 tiles in size on Duel, up through greater than 16 tiles in size on Huge.
StatisticsMod (CvUnit.cpp, CvPlayer.cpp)
Additional event hooks for my version of the StatsMod, not currently available. Will be rewritten when I do my big expansion update to move StatsMod data storage from Python to C++.
INTERFACE MODS
UnitNameMod (CvUnit.cpp)
Removes the base type in parens after renaming a unit. Designed for use with my Python code, which names things "Warrior #1", "Warrior #2", etc.
TextColorMod (CvGameTextMgr.cpp)
Adds seperate XML tags for Team Project, World Project, National Wonder and Great Wonder name colors. The XML file with the colors I'm using is included.
FlyingModExtension (CvGameTextMgr.cpp)
Allows for display of bIsFlying ability on unit mouseover in-game. Made independently and around the same time as Mexico's version, apparently.
OTHER PEOPLE'S WORK
12monkeys TeleportingIntoLakeFix (CvUnit.cpp, CvCity.cpp, CvCity.h, CvPlot.cpp, CvPlot.h)
If a naval unit is forced to "teleport to the nearest valid tile", it doesn't wind up in a lake where it will usually be stuck.
12monkeys UUTrainingValidityFix (CvPlayer.cpp)
Prevents an exploit whereby it's possible to acquire the unique units of Civs other than your own.
RogerBacon CameraZoomFix (CvUnit.cpp)
RogerBacon FlyingMod (CvInfos.cpp, CvInfos.h, CvGameTextMgr.cpp, CvUnit.cpp, CvUnitAI.cpp, CvPlot.cpp, CvPlot.h, CyInfoInterface1.cpp)
Chalid SlowCulturalBordersMod (CvCity.cpp)
TheLopez PiratesMod (CyUnit.cpp, CyUnit.h, CyUnitInterface1.cpp)
TegNavanis UnitStatisticsMod (CvUnit.cpp)
Blake/Iustus BetterAI (too many to list)
TO-DO LIST
* Rewrite barbarian tech-acquisition process so they gain techs at a fixed (and controllable) rate, and possibly in a fixed sequence as well.
* Rewrite the surface combat engine entirely, to roll a single random to determine the outcome of the fight as well as whether a retreat happens or not. Damage suffered on non-dead units afterward will have to be computed seperately using a curve that scales between exponential, linear, and logarhythmic depending on the odds going in (greater than, equal to, or less than 50%) using the existing vanilla odds generator.
* See if it's possible to revert the random functions to their pre-Warlords behavior of actually locking the random seed in multiplayer like they're supposed to. Single player works fine but in MP games you can still reload to change the outcome of a fight, or anything else, as much as you want. I mention this now because until recently I just assumed the random functions were low level and inaccessible to us modders.
* Support for some invisible units (specifically sea mines) triggering combat when their tile is entered by a hostile non-detecting unit. Currently they behave like submarines and are simply pushed aside without fighting, so I have to use visible mines for now and rely on their cheapness to make them worth building.
* Support for giving Caste System the effect I want.
* Support for requiring factories to build battleships (idea from another mod) and related changes. Currently this works but blocks civs with unique factories (ie Germany) from ever building battleships, which is obviously no good.
* Possibly adding a global promotion cost reduction modifier for AI players that would be used by higher difficulty settings. Probably unnecessary but still cool.
* Try to automate the air recon mission so it keeps scouting the same tile each turn until told to stop. May be added for me in the expansion will have to see.
* Things mentioned in the above descriptions that still need doing.
* Learn AI programming.
Based on Warlords 2.0.8, with BetterAI 2/12 fully integrated
http://forums.civfanatics.com/downloads.php?do=file&id=5984
NEW
SurfaceCombatFix (CvUnit.cpp, CvUnitAI.cpp, CvGameCoreUtils.cpp, CvGameCoreUtils.h)
Applies floating point precision to the damage calculation portion of the main combat engine (doesn't affect collateral or air strikes), and the corresponding odds generator. The difference is small and doesn't usually change fight outcomes, but for an example take a 2-vs-1 fight such as a promotionless warrior attacking a wolf: in vanilla the odds are 99.1%, and with this fix they are 98.0% (a more accurate and correct number).
Makes a small code improvement to an internal odds calculator only used by AI players to determine courses of action. The fix involves an integer division not being postponed til all multiplications in the same line are done as SDK code usually does, and may or may not have a very small effect on gameplay (it's hard to test).
Makes one final change that could be considered a mod and not a fix, but I threw it in here anyway since it affects surface combat and is hard, imo, to object to: if two defending units have exactly the same defense strength for a fight (and either both are Great-General'd or neither are), it will now pick the lower-experience one instead of the higher-experience one to take the fight. This has two advantages: since promotions get further apart the higher you go it helps get more promotions faster; and if the defender loses the fight, the player loses a lower-experience unit which is always preferrable.
CastleBypassFix (CvPlayer.cpp)
Allows buildings to still be constructed after they go obsolete if they provide a defense bonus and thus still serve a purpose. This only affects castles currently, and restores their old behavior before they got a bonus trade route that forced a tech expiration. Don't worry, they still do nothing but provide more physical defense if you build them in this manner (ie everything about them that should obsolete still does).
FortifyOnWaterMod (CvUnit.cpp)
Allows ships to fortify. Not particularly realistic but still a good gameplay improvement imo. Currently hardcoded to use 40% of the land fortify strength, so that ocean defense goes from 0% to 10% and coast defense from 10% to 20% as fortify is built up. In the future I may try to block this for ocean that's not inside your own borders.
SplashDamageMod (CvUnit.cpp)
Changes how splash (collateral) damage is handled. Actual damage done is now (global constant * output power * unit strength ratio) and splash limits are now (normal limits * Drill/Morale protection). Before, not counting dampening which I removed seperately, unit strength ratio affected the limit and Drill/Morale protection affected the damage.
RetreatMod (CvUnit.cpp, CvGameTextMgr.cpp)
I didn't feel like adding a new XML tag this time so I added functionality to the vanilla <iWithdrawalProb> one instead. It allows negative values, which have the effect of increasing the retreat chance of units that attack this unit. I currently use this with the Ironclad, which provides some survivability for people who still have wooden warships. It also makes ironclad vs ironclad battles more likely to end in withdrawal as happened historically.
BombardLimitMod (CvInfos.cpp, CvInfos.h, CvGameTextMgr.cpp, CvUnit.cpp)
In my ongoing quest to make bombardment and defense more meaningful I've installed limitations on how far certain units can bombard defenses, which shows up in-game on unit mouseovers. This mod also adds seperate tracking for physical (walls and castles) and cultural defense damage, which fixes some problems and allows the bombard limits to work correctly in all cases. Currently requires the <iBombardLimit> tag to be installed in all UnitInfos.xml entries after the <iBombardRate> tag; I will try to make it an optional tag in the future.
ShrineMod (CvCity.cpp)
Makes gold received from shrines scale with map size. It will now scale from 100% of normal on Duel, down to 50% of normal on Huge (at -10% per map level basically). This constitutes a much-needed nerf imo, as the total number of cities in the world tends to get very high on large maps.
UnitStringMod (CvGameTextMgr.cpp)
Significantly improves both versions of the unit mouseover text (there's one for Pedia/TechTree and one for actual units): things are listed in a more consistent order and text has been shortened to fit on one line in most cases. It is significantly more readable while maintaining the original format.
Also adds new information that had been sorely missing to the player, such as splash damage output power, number of targets, and limit, and air strike damage limit.
NotificationMod (CvPlot.cpp)
Event hook for displaying an in-game turnover message when a player's tile improvements upgrade. This is in addition to the highly useful city growth turnover message, and highly dubious but still fun pirate transport retasking message, that I added, all in Python.
UPDATED
MPCameraFix (CvUnit.cpp)
Removed, was being very glitchy in practice with not resetting the camera to normal after a combat.
FirstStrikeFix (CvUnit.cpp)
Removed, due to being included in the Warlords 2.0.8 official patch, without giving me credit (grr). Yes I know I've been a turkey about this but it's my call how I feel about it. Anyway, RIP my friend.
PirateModExtension (CvGame.cpp, CvTeam.cpp)
Changes the XML Difficulty Setting min-turns-before-barbs-start requirement to be different for land and sea barbs. Specifically, the latter is now defined to be 1.5 times the value of the former. This proved necessary with TheLopez's PirateMod, at least when combined with a higher-than-vanilla barb-ship-density XML setting, as the pirates dropped out of ships proved vastly more numerous and dangerous than standard land barbs and the players (AI's included) needed more time to prepare for it.
New: Preliminary attempt at getting barb ships to spawn in ocean tiles. I thought it might be working based on my current game but unfortunately I just tested it and it's definitely NOT working. This has gotta be possible, darnit... give me a few more days.
Not included but related: Rather than attempt to detect transport unload events I just wrote a Python loop that checks all barb ship transports at the end of each turn and changes their mission back from ASSAULT to ATTACK if they're not carrying anything anymore. Prevents huge numbers of empty Galleys, Kogges, Galleons and Transports from piling up in barb cities and slowing the game down, as well as having more barb ships that attack players. May try to change to the more efficient unload event detection method in the future, and will probably start including my Python in the future too for things like this, but at the moment I'm just trying to get this posted.
CityStringMod (CvGameTextMgr.cpp, CvDLLWidgetData.cpp)
Significantly improves the health and happiness mouseovers in city view: things are listed in a better, more sensible order; positive building health has been seperated into two lines for buildings and wonders (continent+global); positive building happiness has been collapsed into two lines for buildings and wonders (continent+global), with the latter no longer repeating the same text; positive building happiness has had the leading word "Some" removed to avoid running onto a second line; the two "Total Happiness" lines match the format of everything else now; the Charismatic leader effect has been given a more sensible description than "OH YEAH!", with the city.getExtraHappiness() effect seperated out and remaining on "OH YEAH!" in case it ever shows up (I don't think it's used currently but I'm not positive). The XML file with the necessary supporting text tags is included.
FIXES
TransportUpgradeFix (CvUnit.cpp)
Kicks carried units to nearest valid tile if upgrading a transport to a unit with different, incompatible cargo capabilities (if any).
InterceptDomainBlockingFix (CvUnit.cpp)
Allows things like SAM Batteries or AEGIS Cruisers with a greater-than-zero Intercept Range to still intercept things passing through their range but over a different domain type (SAM covering water tiles, AEGIS covering land tiles).
FloodPlainsFix (CvCity.cpp)
If a city is built on a flood plain and later razed, the tile will remain a flood plain rather than becoming a desert.
COMBAT MODS
DamageDampeningRemovalMod (CvUnit.cpp)
Removes the damage dampening effect from Collateral and Air Strike combat. This effect weights the strength ratio of attacker and defender by the average of the two strengths, with the end result being that a tank and warrior are far closer in relative strength than imo they should be for the above combat types.
The dampening remains in place for normal surface combat, as removing it has numerous serious consequences (first strikes become too powerful on high strength units and too weak on lower strength ones; combat odds approach zero and 100 far more quickly with any difference in strength between attacker and defender which is no fun at all; the corresponding damage to gameplay and balance suffered from that; etc).
AirLethalityMod (CvUnit.cpp, CvUnit.h, CvInfos.cpp, CvInfos.h, CyInfoInterface1.cpp, CvGameTextMgr.cpp)
Seperates damage, and thus lethality, from interception probability. In vanilla code the damage done by an intercept is based on the interception chance (actually the square of the chance if I remember correctly), which really sucks. With this mod you can specify the two independently in XML, which allows for things like WW2 fighters, battleships, and flak cannons doing a lot less damage than missile-based units while still having a high enough intercept chance to be useful, and finer tweaking of air combat stats in general. The additional stat is also displayed in the unit mouseover in-game.
The relevant tag is called iInterceptionLethality, just below iInterceptionProbability. Here are some example values and their effects. Note, values below -99 and above 100 are invalid.
-99: Intercepts do a random amount of damage between 1% and 99% of the target's max health, and can be fatal if and only if the target did not start at full health.
-50: Same as above, in range 1% to 50%.
0: Intercepts never do any damage, but still force incoming aircraft to turn back.
50: Intercepts have a 50% chance of being fatal outright; if this does not occur, a random amount of damage between 1% and 99% of the target's max health is dealt instead (which can still prove fatal as above).
100: Intercepts are always fatal.
AirCombatMod (CvUnit.cpp)
Largely untested, highly experimental attempt to implement an air superiority mission that fakes the AI players into using it *intelligently* without requiring modding of the AI itself (something which is still beyond me, though I'm hopeful I can learn enough from BetterAI to pull it off). There is no new mission; rather it changes the way air strike missions work when using air units with interception ability (generally fighters).
SiegeMod (CvCity.cpp, CvCity.h, CvPlayer.cpp, CvPlayerAI.cpp, CvUnit.cpp, CvUnitAI.cpp, CyCity.cpp)
Changes bombardment to do a fixed, absolute amount of damage rather than a % of the city's max defense in damage. City healing of bombardment damage remains percent-based so that it doesn't take forever for 100-125% defense cities to heal back from zero.
Just for reference, in the XML of my full mod (not provided) I have cities set to heal 10% per turn, land siege ranging from 3% (Catapult) to 8% (Mechanized Artillery) bombard strength with two levels of Accuracy promotion (2% each) available to land units only, fighters ranging from 0-4%, bombers ranging from 6-10%, and ships ranging from 2-10%. These constitute *very* heavy nerfs from vanilla stats, but if anything I feel bombardment is *still* too easy and fast. Oh well.
MISC MODS
UpgradeCostTraitMod (CvInfos.cpp, CvInfos.h, CvGameTextMgr.cpp, CvUnit.cpp)
Allows putting a unit upgrade cost modifier in traits like you already can with civics. I currently use this with Financial.
ExperienceNeededCappingMod (CvUnit.cpp)
Stops the experience gap between promotion levels from continuing to grow past a certain point, making further levels unreasonably and impractically expensive. That point is currently and arbitrarily set, by me, to be 145 exp and beyond, where the gap reaches a fixed 25 exp. I had had it set much lower in the past but changed my mind; this way it's still useful once in a while at least, and remains a steady comfort just knowing it's there.
PillageOwnTerritoryMod (CvUnit.cpp)
Allows you to pillage roads and railroads in your own territory. Tile improvements were/are fair game without this mod -- apologies for the slightly misleading title. Serves no real purpose most of the time, but useful for those of us who like to have roads only inside city working radii from a vanity standpoint.
AnimalMod (CvGame.cpp, CvUnitAI.cpp)
Makes animals unlikely to leave their TerrainNative and/or FeatureNative tiles, unless attacking something. In vanilla these XML tags just specify where the animals will spawn, and doesn't attempt to restrict their movement.
Prevents animals from instantly de-spawning everywhere when barbarians start. There will still be no new animals spawning after this point.
Changes the condition for the animal-barb switchover point from "total number of cities in the world times 1.5", to "times 3". XML Difficulty Setting min-turns-before-barbs-start requirements are still enforced as well.
CityTileCommerceMod (CvPlot.cpp)
Makes city tile commerce additive rather than an enforced minimum. This is mainly so that players will not be penalized for building cities on rivers, but also lessens the hit for building on resources that give commerce naturally (without their improvement). Food and hammers are still treated as enforced minimums.
LakeSizeMod (CvArea.cpp)
Makes the definition of a lake scale with map size. With an XML Globals value of 4 which is what I use, lakes will become inland seas when greater than 4 tiles in size on Duel, up through greater than 16 tiles in size on Huge.
StatisticsMod (CvUnit.cpp, CvPlayer.cpp)
Additional event hooks for my version of the StatsMod, not currently available. Will be rewritten when I do my big expansion update to move StatsMod data storage from Python to C++.
INTERFACE MODS
UnitNameMod (CvUnit.cpp)
Removes the base type in parens after renaming a unit. Designed for use with my Python code, which names things "Warrior #1", "Warrior #2", etc.
TextColorMod (CvGameTextMgr.cpp)
Adds seperate XML tags for Team Project, World Project, National Wonder and Great Wonder name colors. The XML file with the colors I'm using is included.
FlyingModExtension (CvGameTextMgr.cpp)
Allows for display of bIsFlying ability on unit mouseover in-game. Made independently and around the same time as Mexico's version, apparently.
OTHER PEOPLE'S WORK
12monkeys TeleportingIntoLakeFix (CvUnit.cpp, CvCity.cpp, CvCity.h, CvPlot.cpp, CvPlot.h)
If a naval unit is forced to "teleport to the nearest valid tile", it doesn't wind up in a lake where it will usually be stuck.
12monkeys UUTrainingValidityFix (CvPlayer.cpp)
Prevents an exploit whereby it's possible to acquire the unique units of Civs other than your own.
RogerBacon CameraZoomFix (CvUnit.cpp)
RogerBacon FlyingMod (CvInfos.cpp, CvInfos.h, CvGameTextMgr.cpp, CvUnit.cpp, CvUnitAI.cpp, CvPlot.cpp, CvPlot.h, CyInfoInterface1.cpp)
Chalid SlowCulturalBordersMod (CvCity.cpp)
TheLopez PiratesMod (CyUnit.cpp, CyUnit.h, CyUnitInterface1.cpp)
TegNavanis UnitStatisticsMod (CvUnit.cpp)
Blake/Iustus BetterAI (too many to list)
TO-DO LIST
* Rewrite barbarian tech-acquisition process so they gain techs at a fixed (and controllable) rate, and possibly in a fixed sequence as well.
* Rewrite the surface combat engine entirely, to roll a single random to determine the outcome of the fight as well as whether a retreat happens or not. Damage suffered on non-dead units afterward will have to be computed seperately using a curve that scales between exponential, linear, and logarhythmic depending on the odds going in (greater than, equal to, or less than 50%) using the existing vanilla odds generator.
* See if it's possible to revert the random functions to their pre-Warlords behavior of actually locking the random seed in multiplayer like they're supposed to. Single player works fine but in MP games you can still reload to change the outcome of a fight, or anything else, as much as you want. I mention this now because until recently I just assumed the random functions were low level and inaccessible to us modders.
* Support for some invisible units (specifically sea mines) triggering combat when their tile is entered by a hostile non-detecting unit. Currently they behave like submarines and are simply pushed aside without fighting, so I have to use visible mines for now and rely on their cheapness to make them worth building.
* Support for giving Caste System the effect I want.
* Support for requiring factories to build battleships (idea from another mod) and related changes. Currently this works but blocks civs with unique factories (ie Germany) from ever building battleships, which is obviously no good.
* Possibly adding a global promotion cost reduction modifier for AI players that would be used by higher difficulty settings. Probably unnecessary but still cool.
* Try to automate the air recon mission so it keeps scouting the same tile each turn until told to stop. May be added for me in the expansion will have to see.
* Things mentioned in the above descriptions that still need doing.
* Learn AI programming.