Bts 3.19

jdog5000

Revolutionary
Joined
Nov 25, 2003
Messages
2,601
Location
California
Well, the new BTS patch was thoroughly unexpected!

Based on a quick perusal of the change list, I think most if not all of what they patched was already covered both here in BBAI and by the UP. Will take a careful look through soon to compare how things were addressed, but mostly this probably means a couple of changes will no longer need to be marked UP or BBAI.

I'll post an update in a couple of days ...
 
I think the real unfortunate thing is going to be the need to compare methods. They say they have the AI evac ships from cities in danger now- a change originally made here. But did they do it the same way? If not, is BBAI's better or worse?

I'm pretty sure there are a couple of things in there that aren't from UP/BBAI and aren't the amphibious desync fix, but I might be wrong. But, enough is duplicated that I for one won't be updating my Civ until all the mods are brought up to date. :)
 
There are other issues, like the fact they brought some stuff from the exe to the dll ( atleast is what the changelog says ). Hopefully that will make things easier for future modding, but it can also interfere with already done stuff....
 
Yes to be honest i'm normally happy about new patches but this time i'm struggling to see the real point as it does not really add anything thats not already out there, it seems all they have done is pick up the bug fixes already done by mod's

I don't understand why they did not just contact Jdog5000 and say can we use your mod as a patch, as then you'd get all the bug fixes + a better AI aswell
 
Yes to be honest i'm normally happy about new patches but this time i'm struggling to see the real point as it does not really add anything thats not already out there, it seems all they have done is pick up the bug fixes already done by mod's
Not everyone uses mods. In fact the vast majority of users don't. This is a good move by firaxis, because it standardizes things (especially for multiplayer), and brings community created and available fixes to every Civ4 player with an internet connection. While it is a PITA from my perspective, and for many other mod users, in the end it is a good move (especially since they exposed more code to the SDK).

I don't understand why they did not just contact Jdog5000 and say can we use your mod as a patch, as then you'd get all the bug fixes + a better AI aswell

Firstly, how do you know they didn't? This is the same company that hired Blake, the creater of BetterAI to do the AI for BtS. Secondly, they don't need to ask for permission, Firaxis has a legal right to use anything created by the modding community which uses the Civ4 engine.
 
And not all of the things that come with the patch are from BBAI, atleast judging by the changelog and the alexman comment in the patch thread. There are even some rule changes, like the no-espionage option revamp and the banning of buying obsoleted resources.
 
There has been some talk about changing the air reconnaissance mission in the UP forum and most agreed that the vision range shouldn't be influenced by the hills, forests and mountains in the terrain, however I don't think it was ever fixed. This patch did mention fixing it. Does that mean that they have been reading the threads and decided to change it or was it changed in the UP or BAI and I just never noticed?

Patch notes said:
Terrain height no longer affects aerial recon missions
 
Two things that I noticed on the list that weren't in the Unofficial patch were the banning of trades of obsolete resources & the new vote when there is an invalid AP Palace Resident to be an election. Looked to me like Better AI didn't have either of these either.

I'm really hoping 3.19 fixes everything on the Unofficial patch so there's no need for that.

It does look like Better AI will still be needed, but maybe it can have a smaller footprint if some things were incorporated into 3.19.
 
There has been some talk about changing the air reconnaissance mission in the UP forum and most agreed that the vision range shouldn't be influenced by the hills, forests and mountains in the terrain, however I don't think it was ever fixed. This patch did mention fixing it. Does that mean that they have been reading the threads and decided to change it or was it changed in the UP or BAI and I just never noticed?

They definitely read the forums here ... no doubt about that.
 
Files changed:
Spoiler :

CvArea.h
CvCity.cpp
CvCity.h
CvCityAi.cpp
CvCityAi.h
CvDeal.cpp
CvDefines.h
CvDllButtonPopup.cpp
CvDllEngineIFaceBase.h
CvDllInterfaceIFaceBase.h
CvDllPython.cpp
CvDllPythongIFaceBase.h
CvDllUtlityIFaceBase.h
CvDllWidgetData.cpp
CvEnums.h
CvGame.cpp
CvGame.h
CvGameAI.cpp
CvGameAI.h
CvGameCoreDll.vcproj
CvGameCoreUtils.cpp
CvGameCoreUtils.h
CvGameInterface.cpp
CvGameTextMgr.cpp
CvGameTextMgr.h
CvGlobals.cpp
CvGlobals.h
CvInfos.cpp
CvInfos.h
CvMap.cpp
CvMapGenerator.cpp
CvPlayer.cpp
CvPlayer.h
CvPlayerAI.cpp
CvPlayerAI.h
CvPlot.cpp
CvPlot.h
CvPlotGroup.h
CvSelectionGroup.cpp
CvStructs.h
CvTeam.cpp
CvTeam.h
CvTeamAI.cpp
CvUnit.cpp
CvUnit.h
CvUnitAI.cpp
CvUnitAI.h
CvXMLLoadUtilitySet.cpp

Python files: (probably just a mirror of interface changes above)
CyEnumsInterface.cpp
CyGame.cpp
CyGame.h
CyInfoInterface1.cpp
CyUnit.cpp
CyUnit.h
CyUnitInterface1.cpp

Currently looking at 14,000 lines of diff logs.
 
Filtered it down to 6000, then read it.

A read through of the differences between 3.17 and 3.19, using diff and some filters (so I skipped changes to const and dll export etc after a point, because they got annoying. Also ignored whitespace changes).

Spoiler :

CvArea.h:
dll export changes

CvCity.cpp:
event reporter iface support
bTestProduction flag on CvCity::updateSelectedCity()
const CvArtInfoBuilding* CvCity::getBuildingArtInfo(BuildingTypes eBuilding) const
const CvArtInfoBuilding* CvCity::getBuildingArtInfo(BuildingTypes eBuilding) const
CultureThreshold doesn't need speed threshold.
isBonusObsolete added to teams change
gold overflow change
int CvCity::getNumOrdersQueued() const
and
OrderData CvCity::getOrderData(int iIndex) const
replaces
CLLNode<OrderData>* CvCity::tailOrderQueueNode() const
Decay scaling for game scale.
bool CvCity::getFoodBarPercentages(std::vector<float>& afPercentages) const
bool CvCity::getProductionBarPercentages(std::vector<float>& afPercentages) const
NiColorA CvCity::getBarBackgroundColor() const
bool CvCity::isStarCity() const
int CvCity::getMusicScriptId() const
int CvCity::getSoundscapeScriptId() const
void CvCity::cheat(bool bCtrl, bool bAlt, bool bShift)
void CvCity::getBuildQueue(std::vector<std::string>& astrQueue) const

CvCity.h:
Dll export changes, and above interface additions

CvCityAI.cpp
No longer strips holy city of defenders during warfare(!)
Movement of AI_isFirstTech from CvGameAI to CvPlayerAI

CvCityAI.h
Interface cleanup

CvDLLPopupButton.cpp:
CvMessageControl and CvEventReporter changes.
City razing changes?
Changing things from pointers to vectors.
TXT_KEY_CITY_WARNING_ANSWER3 popup added (?)

CvDLLEngineIFaceBase.h:
added virtual CvPlot* pickPlot(int x, int y, NiPoint3& worldPoint) = 0;

CvDLLInterfaceIFaceBase.h
added 2nd argument to virtual void addSelectedCity(CvCity* pNewValue, bool bToggle = false) = 0;
added virtual void updatePythonScreens() = 0;
added virtual InterfaceModeTypes getInterfaceMode() = 0;
added virtual InterfaceVisibility getShowInterface() = 0;
added virtual CvPlot* getMouseOverPlot() = 0;
added virtual bool isExitingToMainMenu() = 0;
Removed some Espionage interfaces.
added virtual void getInterfaceScreenIdsForInput(std::vector<int>& aIds) = 0;
added virtual void doPing(int iX, int iY, PlayerTypes ePlayer) = 0;

CvDLLPythonIFaceBase.h:
Added is initialized.
Stripped out a bunch of other functions? Mabye delt with through other ways?

CvDLLUtilityIFaceBase.h:
added virtual void setSymbolID(int iID, int iValue) = 0;
added virtual PlayerTypes getFirstBadConnection() = 0;
added virtual int getConnState(PlayerTypes ePlayer) = 0;
added virtual void reportStatistics() = 0;
Removed a huge amount of stuff? (maybe moved elsewhere? Message control?)

CvDLLWidgetData.cpp:
EventReporter and MessageControl changes.

CvDeal.cpp:
Blocked trading obsolete bonuses.

CvDefines.h:
Removed TUTORIAL_MOD_NAME

New files: CvDllPythonEvents.*, CvDllTranslator.*

CvEnums.h:
Cleanup...
GlobeLayerTypes added (strategy, trade, unit, resource, religion, culture)
GlobeLayerUnitOptionTypes added (all, team, enemies in territory, enemies, domestics)
GlobeLayerResourceOptionTypes (all, strategic, happy, health)
PlotIndicatorVisibilityFlags (always, onscreen, offscreen, onglobe, never)
UnitSubEntityTypes (normal, leader, siege, count)
CivilopediaWidgetShowTypes (none, land, air)

Added files: CvEventReporter.*

CvGame.cpp:
calling python functions by string name (!), which explains the deleted python* functions in the DLL.
// add floodplains to any desert tiles the new river passes through
Added in feature seeding code to boost chosen starting location.
A secretary general timer fix? For eVoteSource? (preventing one thing spam, dunno)
Removed some message sending/recieving code
Moved the culture threshold code to here (including game timing).
added bool CvGame::pythonIsBonusIgnoreLatitudes() const

CvGame.h:
Doesn't look like much. Got bored reading it

CvGameAI.cpp:
AI_isFirstTech added (moved from elsewhere I think?)

CvGameCoreDLL.vcproj:
Added files

CvGameCoreUtils.cpp:
Some CollateralDamage change happens here.

CvGameCoreUtils.h:
Interface cleanup, and removing obsolete functions.

CvGameInterface.cpp:
MessageControl changes
added bool CvGame::selectCity(CvCity* pSelectCity, bool bCtrl, bool bAlt, bool bShift) const
added void CvGame::getGlobeLayers(std::vector<CvGlobeLayerData>& aLayers) const
added CvPlot* CvGame::getNewHighlightPlot() const
added ColorTypes CvGame::getPlotHighlightColor(CvPlot* pPlot) const
added void CvGame::loadBuildQueue(const CvString& strItem) const
added void CvGame::cheatSpaceship() const
added DomainTypes CvGame::getUnitDomain(UnitTypes eUnit) const
added const CvArtInfoBuilding* CvGame::getBuildingArtInfo(BuildingTypes eBuilding) const
added bool CvGame::isWaterBuilding(BuildingTypes eBuilding) const
added CivilopediaWidgetShowTypes CvGame::getWidgetShow(BonusTypes eBonus) const
added CivilopediaWidgetShowTypes CvGame::getWidgetShow(ImprovementTypes eImprovement) const
added VictoryTypes CvGame::getSpaceVictory() const
added void CvGame::nextActivePlayer(bool bForward)
added int CvGame::getNextSoundtrack(EraTypes eLastEra, int iLastSoundtrack) const
added int CvGame::getSoundtrackSpace() const
added bool CvGame::isSoundtrackOverride(CvString& strSoundtrack) const
added void CvGame::initSelection() const
added bool CvGame::canDoPing(CvPlot* pPlot, PlayerTypes ePlayer) const
added bool CvGame::shouldDisplayReturn() const
added bool CvGame::shouldDisplayEndTurn() const
added bool CvGame::shouldDisplayWaitingOthers() const
added bool CvGame::shouldDisplayWaitingYou() const
added bool CvGame::shouldDisplayEndTurnButton() const
added bool CvGame::shouldDisplayFlag() const
added bool CvGame::shouldDisplayUnitModel() const
added bool CvGame::shouldShowResearchButtons() const
added bool CvGame::shouldCenterMinimap() const
added EndTurnButtonStates CvGame::getEndTurnState() const
added void CvGame::handleCityScreenPlotPicked(CvCity* pCity, CvPlot* pPlot, bool bAlt, bool bShift, bool bCtrl) const
added void CvGame::handleCityScreenPlotDoublePicked(CvCity* pCity, CvPlot* pPlot, bool bAlt, bool bShift, bool bCtrl) const
added void CvGame::handleCityScreenPlotRightPicked(CvCity* pCity, CvPlot* pPlot, bool bAlt, bool bShift, bool bCtrl) const
added void CvGame::handleCityPlotRightPicked(CvCity* pCity, CvPlot* pPlot, bool bAlt, bool bShift, bool bCtrl) const
added void CvGame::handleMiddleMouse(bool bCtrl, bool bAlt, bool bShift)
added void CvGame::handleDiplomacySetAIComment(DiploCommentTypes eComment) const

CvGameTextMgr.cpp:
Collateral damage message tweak?
Added "building replaced by" text to the civopedia.
added void CvGameTextMgr::getCityBillboardFoodbarColors(CvCity* pCity, std::vector<NiColorA>& aColors)
added void CvGameTextMgr::getGlobeLayerName(GlobeLayerTypes eType, int iOption, CvWString& strName)
added void CvGameTextMgr::getPlotHelp(CvPlot* pMouseOverPlot, CvCity* pCity, CvPlot* pFlagPlot, bool bAlt, CvWStringBuffer& strHelp)
added void CvGameTextMgr::getRebasePlotHelp(CvPlot* pPlot, CvWString& strHelp)
added void CvGameTextMgr::getNukePlotHelp(CvPlot* pPlot, CvWString& strHelp)
added void CvGameTextMgr::getInterfaceCenterText(CvWString& strText)
added void CvGameTextMgr::getTurnTimerText(CvWString& strText)
added void CvGameTextMgr::getFontSymbols(std::vector< std::vector<wchar> >& aacSymbols, std::vector<int>& aiMaxNumRows)
added void CvGameTextMgr::assignFontIds(int iFirstSymbolCode, int iPadAmount)
added void CvGameTextMgr::getCityDataForAS(std::vector<CvWBData>& mapCityList, std::vector<CvWBData>& mapBuildingList, std::vector<CvWBData>& mapAutomateList)
added void CvGameTextMgr::getUnitDataForAS(std::vector<CvWBData>& mapUnitList)
added void CvGameTextMgr::getImprovementDataForAS(std::vector<CvWBData>& mapImprovementList, std::vector<CvWBData>& mapRouteList)
added void CvGameTextMgr::getVisibilityDataForAS(std::vector<CvWBData>& mapVisibilityList)
added void CvGameTextMgr::getTechDataForAS(std::vector<CvWBData>& mapTechList)
added void CvGameTextMgr::getUnitDataForWB(std::vector<CvWBData>& mapUnitData)
added void CvGameTextMgr::getBuildingDataForWB(bool bStickyButton, std::vector<CvWBData>& mapBuildingData)
added void CvGameTextMgr::getTerrainDataForWB(std::vector<CvWBData>& mapTerrainData, std::vector<CvWBData>& mapFeatureData, std::vector<CvWBData>& mapPlotData, std::vector<CvWBData>& mapRouteData)
added void CvGameTextMgr::getTerritoryDataForWB(std::vector<CvWBData>& mapTerritoryData)
added void CvGameTextMgr::getTechDataForWB(std::vector<CvWBData>& mapTechData)
added void CvGameTextMgr::getPromotionDataForWB(std::vector<CvWBData>& mapPromotionData)
added void CvGameTextMgr::getBonusDataForWB(std::vector<CvWBData>& mapBonusData)
added void CvGameTextMgr::getImprovementDataForWB(std::vector<CvWBData>& mapImprovementData)
added void CvGameTextMgr::getReligionDataForWB(bool bHolyCity, std::vector<CvWBData>& mapReligionData)
added void CvGameTextMgr::getCorporationDataForWB(bool bHeadquarters, std::vector<CvWBData>& mapCorporationData)

CvGameTextMgr.h:
Support for above additional interfaces etc.

CvGlobals.cpp:
added int CvGlobals::getNumGlobeLayers() const

CvGlobals.h:
DllExport changes

CvInfos.cpp:
"UseLSystem"?! removed?
Might be a serialization breaker.

CvMap.cpp:
Changes to how "get grid size" is called in python.
And latitude.
And wrap x/y

CvMapGenerator.cpp:
No real changes that I noticed.

Added CvMessageControl.* CvMessageData.*

CvPlayer.cpp:
FORCE_UNOWNED_CITY_TIMER constant added (used to be 2)
Some "times100" function calls cleaned up (in particular, culture).
Blocked some espionauge code when there is no espionage.
Changed the leader name when a split empire spawns
added UnitTypes CvPlayer::getTechFreeUnit(TechTypes eTech)
added int CvPlayer::getIntroMusicScriptId(PlayerTypes eForPlayer)
added int CvPlayer::getMusicScriptId(PlayerTypes eForPlayer)
added void CvPlayer::getGlobeLayerColors(GlobeLayerTypes eGlobeLayerType, int iOption, std::vector<NiColorA>& aColors, std::vector<CvPlotIndicatorData>& aIndicators)
added void CvPlayer::getTradeLayerColors(std::vector<NiColorA>& aColors, std::vector<CvPlotIndicatorData>& aIndicators)
added void CvPlayer::getUnitLayerColors(GlobeLayerUnitOptionTypes eOption, std::vector<NiColorA>& aColors, std::vector<CvPlotIndicatorData>& aIndicators)
added void CvPlayer::getResourceLayerColors(GlobeLayerResourceOptionTypes eOption, std::vector<NiColorA>& aColors, std::vector<CvPlotIndicatorData>& aIndicators)
added void CvPlayer::getReligionLayerColors(ReligionTypes eSelectedReligion, std::vector<NiColorA>& aColors, std::vector<CvPlotIndicatorData>& aIndicators)
added void CvPlayer::getCultureLayerColors(std::vector<NiColorA>& aColors, std::vector<CvPlotIndicatorData>& aIndicators)
added void CvPlayer::cheat(bool bCtrl, bool bAlt, bool bShift)
added CvArtInfoUnit* CvPlayer::getUnitArtInfo(UnitTypes eUnit, int iMeshGroup)
added bool CvPlayer::hasSpaceshipArrived()

CvPlayer.h:
Changed some functions that returned CvString references to returning CvStrings

CvPlayerAI.cpp:
getTechFreeUnit <-> getFirstFreeUnitClass fix.
AI_getAttitudeFromValue <-> AI_getAttitude bug fix(!)
Nuke banning AI added.
getCivicPercentAnger fixes (the emancipation bug?)
Fixed the "skip civic/religion changes during golden ages" bug.
Fixed "if ((iTheirValue < iOurValue) && (eBestGiveTech != NO_TECH))" -- reversed the > to a < -- in diplo (!)
Added bool CvPlayerAI::AI_isFirstTech(TechTypes eTech)

CvPlayerAI.h:
interface changes mentioned above.
const/mutable changes.

CvPlot.cpp:
Areal unit 'explore command thing' changes, I think.
Added int CvPlot::getNumVisibleUnits(PlayerTypes ePlayer)
// Building or removing a fort will now force a plotgroup update to verify resource connections.
added int CvPlot::getAreaIdForGreatWall()
added int CvPlot::getSoundScriptId()
added int CvPlot::get3DAudioScriptFootstepIndex(int iFootstepTag)
added float CvPlot::getAqueductSourceWeight()
added bool CvPlot::shouldDisplayBridge(CvPlot* pToPlot, PlayerTypes ePlayer)
added bool CvPlot::checkLateEra()

CvPlot.h:
Interface changes for above.

CvSelectionGroup.cpp:
Pure spy stacks are treated differently. Possibly involving danger calculations?
Aha! Groups respond to danger nearby them, instead of walking right by it, unless they are a spy?
aCargoGroups improved management (reducing bloat?)

Added CvStatistics.*

CvStructs.h:
added struct CvPlotIndicatorData
added struct CvGlobeLayerData
added struct CvFlyoutMenuData
added struct CvStatBase/struct CvStatInt/struct CvStatString/CvStatFloat
added struct CvWBData

CvTeam.cpp:
added bool CvTeam::isBonusObsolete(BonusTypes eBonus)
added void CvTeam::getCompletedSpaceshipProjects(std::map<ProjectTypes, int>& mapProjects)
added int CvTeam::getProjectPartNumber(ProjectTypes eProject, bool bAssert)
added bool CvTeam::hasLaunched()

CvTeam.h:
Interface changes for above.

CvTeamAI.cpp:
Closeness value is made more important. Before it was /16, now it is /4 if aggressive and /2 otherwise.
Added 'city threat bloodlust' -- if they have more endangered cities than we do, divide iValue by 3.
The AI_getAttitudeFromValue patch.

CvUnit.cpp:
added if (m_pUnitInfo->isHiddenNationality()) can enter rival territory (automatically).
canMoveInto has an "ignore load" flag.
Intercepting units _cannot withdraw_ as "they are really the defender".
added minodds to bestSeaPillageInterceptor.
A glow fix when you move a unit to NULL?
iCombatDamage is no longer used (serialization incompatibility on the '3.19->3.17' direction).
Changes to how colleteral damage is calculated.
Dead units trigger no events.
added int CvUnit::getGroupSize()
added int CvUnit::getGroupDefinitions()
added int CvUnit::getUnitGroupRequired(int i)
added bool CvUnit::isRenderAlways()
added float CvUnit::getAnimationMaxSpeed()
added float CvUnit::getAnimationPadTime()
added char* CvUnit::getFormationType()
added bool CvUnit::isMechUnit()
added bool CvUnit::isRenderBelowWater()
added int CvUnit::getRenderPriority(UnitSubEntityTypes eUnitSubEntity, int iMeshGroupType, int UNIT_MAX_SUB_TYPES)
added bool CvUnit::shouldShowEnemyGlow(TeamTypes eForTeam)
added bool CvUnit::shouldShowFoundBorders()
added void CvUnit::cheat(bool bCtrl, bool bAlt, bool bShift)
added float CvUnit::getHealthBarModifier()
added void CvUnit::getLayerAnimationPaths(std::vector<AnimationPathTypes>& aAnimationPaths)
added int CvUnit::getSelectionSoundScript()

CvUnit.h:
Interface changes for above.

CvUnitAI.cpp & .h:
Removed some worker move restrictions based on being human or 2/3 of AI workers.
At various spots, added calls to the following:
Added AI_seaRetreatFromCityDanger (and implemented)
Added AI_airAttackDamagedSkip (and implemented)
Added AI_airBombPlots (and implemented?)
Added AI_airStrike
Added AI_airRetreatFromCityDanger (and implemented)
Added Air missile plot bombing (2/3 chance if you reach that point?)
Added warlords creating super-medics
Told hurry units not to hurry other people's buildings (!)
Ai doesn't cheat against non-visible naval units?

CvXMLLoadUtilitySet.cpp:
Added SkipToNextVal() call?

...

and a bunch of python changes reflecting the above.
Including a bug around getRevoltProtection returning getExtraHillsDefensePercent() hehe.
 
and a bunch of python changes reflecting the above.
Including a bug around getRevoltProtection returning getExtraHillsDefensePercent() hehe.

lol? What is this?


By the way, in my limited tests, I have yet to see a single gold worth of overflow. It appears all hammers over the cost of the item are simply lost.
 
I already obtained some gold in a city with huge generic hammer multipliers building chariots ( IW, Beauro, factory and plant, forge..... ). But it definitely is not working as intended.

Time to open a 3.19 UP patch thread? :D
 
A while a go I asked what the bMechanized bool in the unit xml was and now there's this
added bool CvUnit::isMechUnit()
Maybe now it does something...
 
I already obtained some gold in a city with huge generic hammer multipliers building chariots ( IW, Beauro, factory and plant, forge..... ). But it definitely is not working as intended.

Time to open a 3.19 UP patch thread? :D

Absolutely!

First reference: http://forums.civfanatics.com/showpost.php?p=8163827&postcount=160

VoiceOfUnreason said:
It looks to me as though someone lost track of where the overflow is capped, and therefore the gold overflow is being compared to the wrong thing. In other words, at the point where iProductionGold is calculated, iOverflow is capped, but iMaxOverflowForGold is still huge, and therefore the difference is negative.

Also of note - there are three duplicate variations of this code, depending on whether the city is training a unit, constructing a building, or creating a project. All share the same calculation.

(From CvCity.cpp)
Code:
iProductionNeeded = getProductionNeeded(eTrainUnit);

// max overflow is the value of the item produced (to eliminate prebuild exploits)
iOverflow = getUnitProduction(eTrainUnit) - iProductionNeeded;
int iMaxOverflow = std::max(iProductionNeeded, getCurrentProductionDifference(false, false));
int iMaxOverflowForGold = std::max(iProductionNeeded, getProductionDifference(getProductionNeeded(), getProduction(), 0, isFoodProduction(), false));
iOverflow = std::min(iMaxOverflow, iOverflow);
if (iOverflow > 0)
{
	changeOverflowProduction(iOverflow, getProductionModifier(eTrainUnit));
}
setUnitProduction(eTrainUnit, 0);

int iProductionGold = std::max(0, iOverflow - iMaxOverflowForGold) * GC.getDefineINT("MAXED_UNIT_GOLD_PERCENT") / 100;
 
Here is how to generate a relatively ... clean ... list of the 'essential' changes of a 3.17 based source tree, and a 3.19 based source tree. This is reasonably technical.

The goal is to filter out as much of the pure 'code clean up' stuff (which include 2/3 of the changed lines) as possible.
Spoiler :
Do the following:

Copy both source code branches using xcopy into backup directories (don't bother with /e, there are no changes in the boost subdirectory)

Download and install cygwin, and set the bin path for cygwin to your PATH environment variable.
Run the following in both directories:
sed -e s/ *$//g -i *
sed -e s/DllExport *//g -i *
sed -e s/ *const//g -i *
sed -e s/mutable *//g -i *
to strip out all of the const-correctness and DllExport flags, and trailing ^M characters.

Then run:
diff -w 3.17_directory 3.19_directory > changes.txt
where those are the directories in question.

Changes will then have about 5-6k lines in it.

You will note, however, that most/all of the header file changes are mirrored in .cpp files (except the extra enums, etc). So you can also delete all the .h files in your 'duplicate code directories' to shorten the list of differences.

The above might work even for comparing the BetterAI source directly to the 3.19 source tree. Remember to back up both source trees, as the above strips out important code in the effort to make the diff information more useful to a human reader.
 
Top Bottom