Civ4 BTS v3.19 Patch

Joined
Dec 5, 2005
Messages
3,663
Does anybody know if there are any XML changes in the 3.19 patch?

As in "are any of the changes in assets/xml/mumble?" Yes, I know that there are some (Barrage promotion for Armor, at least one new setting in GlobalDefines.xml, some text changes....)
 

r_rolo1

King of myself
Joined
May 19, 2006
Messages
13,818
Location
Lisbon, Portugal
You can see a list of the changed files in here . Special thanks to ruff_hi ;)

The XML files that were changed are
Code:
Beyond the Sword\Assets\XML\Text\CIV4GameText_BTS_Fixed.xml          
Beyond the Sword\Assets\XML\Text\CIV4GameTextChanged_BTS.xml         
Beyond the Sword\Assets\XML\Units\CIV4PromotionInfos.xml             
Beyond the Sword\Assets\XML\Units\CIV4UnitInfos.xml                  
Beyond the Sword\Assets\XML\GlobalDefines.xml
 

Woody1

Prince
Joined
Feb 19, 2002
Messages
468
Location
Texas
I think people were complaining about all their improvements being blown up. Thus the 'No EP' option. It would have been easier to just put in an option that gimped what you can do with EPs (no sabotage, etc).

Yeah, I think I would have preferred that too. I like the passive aspects of espionage (seeing research, city visibility), but don't the the MM involved with the sabotage missions, especially since there's no way to completely defend against it.
 

Speaker

Deity
Joined
Nov 4, 2002
Messages
2,097
Location
Section 1
BTW its impossible now to ad someone to the budylist. This will spoil all the passworded games by time.
You do have the option to modify the name you are sending a buddy list request to. Simply remove the "tk-tk2" before you hit submit. In addition, you cannot double click on their name in the lobby to send them a message, as the chat program gets confused by the "tk-tk2," so you must double click to message them through your buddy list. Yes, it is not optimal, and I wish they did not add that addendum, but I guess it was a necessary evil to fix this:

Fixed loophole where you could use a Gamespy emulator to log on as any user
 

Dom Pedro II

Modder For Life
Joined
Apr 3, 2002
Messages
6,811
Location
Exit 16, New Jersey
EDIT: My overall impressions is that there's a lot of new functionality for modifying game sounds, some new functionality for messing with the interface, but nothing particularly earth-shattering beyond that. The top item on my wishlist was more of the trade screen exposed, followed by some of the interface stuff from Colonization such as the spin boxes, drag-and-drop ability, and the ability to allow popups appear with the city screen up. I'm sad we didn't get that, but there's still enough here that the hearts of many a modder should be warmed.

Here's a more comprehensive list of the stuff that's been moved to the DLL:

CvCity

getBuildingArtInfo
getBuildingVisibilityPriority

These two give you greater control over how cities look. Haven't really thought of any great applications for them... will probably be mod-specific.

getMusicScriptId
getSoundscapeScriptId

These affect city sounds. I'd like to tweak these myself because I want there to be a distinction between the sounds of coastal and inland cities. When you open a coastal city screen, you might hear seagulls, a boat horn, etc.

getBuildQueue

Not sure why you'd want to mess with this, but there it is.

CvPlayer

getIntroMusicScriptId
getMusicScriptId

With these two, I think you could actually now have different music play under different circumstances. It already does it based on peace/war and era, but you could make it so that it'll play different music based on the other player's state religion, civic, or anything else you can think of. Maybe not extremely useful in the standard game, but could be interesting for specialized mods.

getGlobeLayerColors
getTradeLayerColors
getUnitLayerColors
getResourceLayerColors
getReligionLayerColors
getCultureLayerColors

Controls the colors for different things on the maps.. Not sure why you'd want to mess with this, but there it is anyway.

getUnitArtInfo

This'll provide a fairly easy and straightforward way to have units look different based on religion or civics among other things.

CvPlot

getSoundScriptId

Controls the tile's sound. Takes the improvement sound first, if there's none, goes to feature, if no feature, it goes to terrain. Could be modified to have culture-specific sounds I guess.

get3DAudioScriptFootstepIndex

You can use this to set conditions for what kind of footstep noises should play.

getAqueductSourceWeight

Tweaking this would make the aqueduct appear in more rational or more insane positions I think

shouldDisplayBridge

Pretty self-explanatory. The only reason why I might think one would want to mess with this is if you wanted to make bridges something that had to be specifically built and thus open to targetting by pillaging, bombing or sabotage. I'm seriously considering it ;)

checkLateEra

This is obviously some kind of graphical display thing. It might be used to control the appearance of improvements?

CvUnit

getSelectionSoundScript

Want your Roman unit to shout in Latin when you click on him in the ancient era and in Italian when you click on him in the modern era? This is where you'd code that.

getLayerAnimationPaths

The greatest unexploited feature in BtS... the Layer Animation Paths. No Unit Maker that I know of has ever actually made units to take advantage of this fantastic feature. Previously, changing the layer animation paths was strictly reserved for promotions, but with this function exposed you can have it based on virtually any criteria you want.

isCombatVisible

Basically controls quick combat. Could use it to have certain types of units skip battle scenes even if the Quick Combat option isn't turned on

CvDLLInterfaceIFaceBase

setInterfaceMode
getInterfaceMode
getShowInterface
getMouseOverPlot

There some potential for some good interface changes with these... Being able to get the plot the mouse is currently over can be quite handy. I've already got some ideas about what I might do with this.

CvGameInterface

This file and the CvGameTextMgr have most changes made to them, and has potentially the most interesting new functionality.

getGlobeLayers
startFlyoutMenu
applyFlyoutMenu

Not sure, but I think the flyout menu concerns the bottom part of the screen... so the list of stuff you can build, draft buttons, hurry buttons, selecting units, etc.

getNewHighlightPlot
getPlotHighlightColor

More map stuff

getWidgetShow
There's two of these. One determines if a model should be shown in the civilopedia for a particular resource (prevents Hit Singles, Movies, etc. from showing on terrain). And the second determines if a water improvement is to be shown in water.

nextActivePlayer
Moves the next player in line to be the new active player.

getNextSoundtrack
getSoundtrackSpace
isSoundtrackOverride

More sound control

initSelection

Picks which unit to select first such as at the start of a new turn

shouldDisplayFlag

Controls when your player flag should appear at the bottom of the screen.

shouldDisplayUnitModel

Controls when your selected unit's model should appear at the bottom of the screen

shouldShowResearchButtons

Controls when your research options should appear at the top (like when you've finished research a tech)

shouldCenterMinimap

Controls when the map should be centered.

handleCityScreenPlotPicked
handleCityScreenPlotDoublePicked
handleCityScreenPlotRightPicked
handleMiddleMouse

This deals with mouse clicks on plots when the city screen is up. For me, this is very handy since I plan to make changes to how players manage their cities. Just how useful these functions will be I haven't determined yet.

handleDiplomacySetAIComment

Concerns diplomacy... not sure why you'd mess with this

CvGameTextMgr

getFontSymbols
assignFontIds

This is the meat and potatoes of the gamefont changes. If you want to add new stuff that will have a little icon associated with it that you want to appear in text, this is where you're going to mod it in. This does not pertain to adding new religions, corporations, yields, commerces, or general buttons like :strength:, :move:, or :gp:. That you've always been able to do. These functions would only need to be modified if you wanted totally new stuff like civilization languages, or political ideologies, or something along those lines.

getPlotHelp
getRebasePlotHelp
getNukePlotHelp

This provides a bit more flexibility for modders in determining what text they want to appear on the left-hand side of the screen when a player mouses over a plot. THis could be very useful if you want to provide more info to players when they're using interface modes (such as when you select an air mission and you see the air range and the target cursor appear). So if you wanted to, you could program it to tell you the odds of being intercepted on that particular tile if you wanted.

getInterfaceCenterText

This controls the text that appears in the middle of the screen when a player wins.

getTurnTimerText

Looks like this controls the game turn info? Thought that was done in python...

There's also a bunch of functions controlling text when in Advanced Start mode or World Builder, but I decided not to list them all/
 

JTMacc99

That's a paddlin'
Joined
Jan 10, 2008
Messages
892
- AI uses Warlords to make super-medic units
Bastards!

- Build-specific production modifiers are no longer counted for overflow gold calculations
Is this referring to the thing people do where they chop/whip walls as a protective civ with stone and somehow end up with 380 extra gold?

Also, just so I understand correctly, with this patch I will no longer need to have the disc in the PC to play?

Now I'll just sit around an wait for somebody else to figure out if BUG will still work.
 

r_rolo1

King of myself
Joined
May 19, 2006
Messages
13,818
Location
Lisbon, Portugal
BUG seems to work ok ;)

That part of the overflow... yes, it is about what you said, but it seems that the 3.19 code is not doing what it was intended to do .... :(
 

nbcman

King
Joined
May 10, 2007
Messages
896
Is this referring to the thing people do where they chop/whip walls as a protective civ with stone and somehow end up with 380 extra gold?

Also, just so I understand correctly, with this patch I will no longer need to have the disc in the PC to play?

Now I'll just sit around an wait for somebody else to figure out if BUG will still work.

1. Yes-but it also appears that the overflow beyond the hammers required for the unit are LOST and are not converted to gold.

2. Correct.

3. EmperorFool has said that he has played BUG V 3.6 with 3.19 patch for over a hundred turns without seeing any problems.
 

JTMacc99

That's a paddlin'
Joined
Jan 10, 2008
Messages
892
Thanks guys! When I posted my questions, I hadn't yet noticed that there were 10 pages of comments (I read page 1) and could have answered all those questions myself. Sorry about that.

On the other hand, I stand by my bastards comment about the AI making super medics. That's the last thing I need is for them to recover from my brutal siege attacks before I can finish them off. I wonder if they'll ending up making more than one of them. If anything, I suppose this will make the Ballista Elephant a more interesting unit provided that the AI super medics are based on mounted units like the human players normally do.
 

DanF5771

Emperor
Joined
Feb 21, 2008
Messages
1,194
Wow a patch -- that's a (partially) nice surprise! ;)
And quite a lot of the UP fixes are implemented. :cool: The one change I am most curious about is this:
- Sea patrolling ships no longer attack if they have less than 50% chance of winning the battle
~~~~~~~~~~~~
(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));
[b]iOverflow = std::min(iMaxOverflow, iOverflow);[/b]
if (iOverflow > 0)
{
	changeOverflowProduction(iOverflow, getProductionModifier(eTrainUnit));
}
setUnitProduction(eTrainUnit, 0);

int iProductionGold = std::max(0, [b]iOverflow - iMaxOverflowForGold[/b]) * GC.getDefineINT("MAXED_UNIT_GOLD_PERCENT") / 100;


I tried really hard, but I just cannot see the intended logic in this piece of code.

The new variable iMaxOverflowForGold is calculated as the maximum of the current build cost (iProductionNeeded) and the number of base hammers of the city (from tiles, specialists, buildings) multiplied by its generic (=non build-specific) modifiers. In the early game with the typical low base hammers and few generic modifiers (forge, bureau) iMaxOverflowForGold will be equal to iProductionNeeded. Chops and whips have absolutely no effect on it!

The capping of iOverflow at the maximum of iProductionNeeded and the base hammers multiplied by ALL modifiers remained unchanged and will also typically result in iOverflow = iProductionNeeded in the early game, especially at slower speeds.

Thus iProductionGold = max(0, iProductionNeeded - iProductionNeeded) = 0. :(

You will gain a little overflow gold if the city has a lot of base hammers (e.g. > 17 base :hammers: for pro-stone-wall @normal speed) and then the amount of gold will be higher the more build-specific modifiers are active :crazyeye:.

The exact gold overflow = base hammers * build-specific modifiers, excess chops and whips turn into thin air. IMHO this goes against everything the change note of the patch stands for.

Solver offered his help, maybe he can shed some light on this (and perhaps tell us why the UP-code wasn't good enough)?
 

phungus420

Deity
Joined
Mar 1, 2003
Messages
6,296
Wait, so this doesn't just fix the overflow gold exploit, as is done by the UP? It removes overflow hammers over base production entirely? So there is no overflow (hammer or gold) from whips and chops at all?
 

Jean Elcard

The Flavournator
Joined
Feb 26, 2006
Messages
1,008
Location
Leipzig, Germany
Spoiler :
EDIT: My overall impressions is that there's a lot of new functionality for modifying game sounds, some new functionality for messing with the interface, but nothing particularly earth-shattering beyond that. The top item on my wishlist was more of the trade screen exposed, followed by some of the interface stuff from Colonization such as the spin boxes, drag-and-drop ability, and the ability to allow popups appear with the city screen up. I'm sad we didn't get that, but there's still enough here that the hearts of many a modder should be warmed.

Here's a more comprehensive list of the stuff that's been moved to the DLL:

CvCity

getBuildingArtInfo
getBuildingVisibilityPriority

These two give you greater control over how cities look. Haven't really thought of any great applications for them... will probably be mod-specific.

getMusicScriptId
getSoundscapeScriptId

These affect city sounds. I'd like to tweak these myself because I want there to be a distinction between the sounds of coastal and inland cities. When you open a coastal city screen, you might hear seagulls, a boat horn, etc.

getBuildQueue

Not sure why you'd want to mess with this, but there it is.

CvPlayer

getIntroMusicScriptId
getMusicScriptId

With these two, I think you could actually now have different music play under different circumstances. It already does it based on peace/war and era, but you could make it so that it'll play different music based on the other player's state religion, civic, or anything else you can think of. Maybe not extremely useful in the standard game, but could be interesting for specialized mods.

getGlobeLayerColors
getTradeLayerColors
getUnitLayerColors
getResourceLayerColors
getReligionLayerColors
getCultureLayerColors

Controls the colors for different things on the maps.. Not sure why you'd want to mess with this, but there it is anyway.

getUnitArtInfo

This'll provide a fairly easy and straightforward way to have units look different based on religion or civics among other things.

CvPlot

getSoundScriptId

Controls the tile's sound. Takes the improvement sound first, if there's none, goes to feature, if no feature, it goes to terrain. Could be modified to have culture-specific sounds I guess.

get3DAudioScriptFootstepIndex

You can use this to set conditions for what kind of footstep noises should play.

getAqueductSourceWeight

Tweaking this would make the aqueduct appear in more rational or more insane positions I think

shouldDisplayBridge

Pretty self-explanatory. The only reason why I might think one would want to mess with this is if you wanted to make bridges something that had to be specifically built and thus open to targetting by pillaging, bombing or sabotage. I'm seriously considering it ;)

checkLateEra

This is obviously some kind of graphical display thing. It might be used to control the appearance of improvements?

CvUnit

getSelectionSoundScript

Want your Roman unit to shout in Latin when you click on him in the ancient era and in Italian when you click on him in the modern era? This is where you'd code that.

getLayerAnimationPaths

The greatest unexploited feature in BtS... the Layer Animation Paths. No Unit Maker that I know of has ever actually made units to take advantage of this fantastic feature. Previously, changing the layer animation paths was strictly reserved for promotions, but with this function exposed you can have it based on virtually any criteria you want.

isCombatVisible

Basically controls quick combat. Could use it to have certain types of units skip battle scenes even if the Quick Combat option isn't turned on

CvDLLInterfaceIFaceBase

setInterfaceMode
getInterfaceMode
getShowInterface
getMouseOverPlot

There some potential for some good interface changes with these... Being able to get the plot the mouse is currently over can be quite handy. I've already got some ideas about what I might do with this.

CvGameInterface

This file and the CvGameTextMgr have most changes made to them, and has potentially the most interesting new functionality.

getGlobeLayers
startFlyoutMenu
applyFlyoutMenu

Not sure, but I think the flyout menu concerns the bottom part of the screen... so the list of stuff you can build, draft buttons, hurry buttons, selecting units, etc.

getNewHighlightPlot
getPlotHighlightColor

More map stuff

getWidgetShow
There's two of these. One determines if a model should be shown in the civilopedia for a particular resource (prevents Hit Singles, Movies, etc. from showing on terrain). And the second determines if a water improvement is to be shown in water.

nextActivePlayer
Moves the next player in line to be the new active player.

getNextSoundtrack
getSoundtrackSpace
isSoundtrackOverride

More sound control

initSelection

Picks which unit to select first such as at the start of a new turn

shouldDisplayFlag

Controls when your player flag should appear at the bottom of the screen.

shouldDisplayUnitModel

Controls when your selected unit's model should appear at the bottom of the screen

shouldShowResearchButtons

Controls when your research options should appear at the top (like when you've finished research a tech)

shouldCenterMinimap

Controls when the map should be centered.

handleCityScreenPlotPicked
handleCityScreenPlotDoublePicked
handleCityScreenPlotRightPicked
handleMiddleMouse

This deals with mouse clicks on plots when the city screen is up. For me, this is very handy since I plan to make changes to how players manage their cities. Just how useful these functions will be I haven't determined yet.

handleDiplomacySetAIComment

Concerns diplomacy... not sure why you'd mess with this

CvGameTextMgr

getFontSymbols
assignFontIds

This is the meat and potatoes of the gamefont changes. If you want to add new stuff that will have a little icon associated with it that you want to appear in text, this is where you're going to mod it in. This does not pertain to adding new religions, corporations, yields, commerces, or general buttons like :strength:, :move:, or :gp:. That you've always been able to do. These functions would only need to be modified if you wanted totally new stuff like civilization languages, or political ideologies, or something along those lines.

getPlotHelp
getRebasePlotHelp
getNukePlotHelp

This provides a bit more flexibility for modders in determining what text they want to appear on the left-hand side of the screen when a player mouses over a plot. THis could be very useful if you want to provide more info to players when they're using interface modes (such as when you select an air mission and you see the air range and the target cursor appear). So if you wanted to, you could program it to tell you the odds of being intercepted on that particular tile if you wanted.

getInterfaceCenterText

This controls the text that appears in the middle of the screen when a player wins.

getTurnTimerText

Looks like this controls the game turn info? Thought that was done in python...

There's also a bunch of functions controlling text when in Advanced Start mode or World Builder, but I decided not to list them all/

Just want to say thanks for this nice and comprehensive list. This helps a lot to get an impression and should save other modders some time, they would otherwise have to spend on figureing out, what the new methods are for.
 

PieceOfMind

Drill IV Defender
Retired Moderator
Joined
Jan 15, 2006
Messages
9,319
Location
Australia
Wow a patch -- that's a (partially) nice surprise! ;)
And quite a lot of the UP fixes are implemented. :cool: The one change I am most curious about is this:

~~~~~~~~~~~~



I tried really hard, but I just cannot see the intended logic in this piece of code.

The new variable iMaxOverflowForGold is calculated as the maximum of the current build cost (iProductionNeeded) and the number of base hammers of the city (from tiles, specialists, buildings) multiplied by its generic (=non build-specific) modifiers. In the early game with the typical low base hammers and few generic modifiers (forge, bureau) iMaxOverflowForGold will be equal to iProductionNeeded. Chops and whips have absolutely no effect on it!

The capping of iOverflow at the maximum of iProductionNeeded and the base hammers multiplied by ALL modifiers remained unchanged and will also typically result in iOverflow = iProductionNeeded in the early game, especially at slower speeds.

Thus iProductionGold = max(0, iProductionNeeded - iProductionNeeded) = 0. :(

You will gain a little overflow gold if the city has a lot of base hammers (e.g. > 17 base :hammers: for pro-stone-wall @normal speed) and then the amount of gold will be higher the more build-specific modifiers are active :crazyeye:.

The exact gold overflow = base hammers * build-specific modifiers, excess chops and whips turn into thin air. IMHO this goes against everything the change note of the patch stands for.


Solver offered his help, maybe he can shed some light on this (and perhaps tell us why the UP-code wasn't good enough)?

Ah that explains why rolo was observing gold from overflow but I was not. His demo city had high base hammers. Mine just had a massive number of forests recently chopped.
 

DanF5771

Emperor
Joined
Feb 21, 2008
Messages
1,194
Wait, so this doesn't just fix the overflow gold exploit, as is done by the UP? It removes overflow hammers over base production entirely? So there is no overflow (hammer or gold) from whips and chops at all?
The mechanics for overflow hammers remained unchanged. Only the excess hammers that go beyond the capped overflow hammers which were converted to gold previously are lost now (in most situations, see above).
 

Woody1

Prince
Joined
Feb 19, 2002
Messages
468
Location
Texas
The mechanics for overflow hammers remained unchanged. Only the excess hammers that go beyond the capped overflow hammers which were converted to gold previously are lost now (in most situations, see above).


I'm just trying to understand how serious this issue is. It sounds like a pretty minor change, except in rare circumstances. Correct?

People seem to be implying that this change is an error. From what it sounds like, maybe it's an intentional change to prevent abuses getting easy gold.

From the code, it looks like the change is intended, not an accident.
 

alexman

Ancient Geek
Joined
Feb 28, 2002
Messages
791
Location
Mohawk
It is definitely a bug, although the effect on game play is minor. Sorry about that.
 
Top Bottom