Dom Pedro II
Modder For Life
Friends, the Firaxis gods have smiled upon us and graced us with another patch! This one, like others, has given us new code exposed to the DLL.
The tyranny of the Gamefonts file is finally over! Yes, you'll still have to use it, but we now have a lot more control over it from within the SDK.
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. That said, given how much we've already got, I'm not sure we NEEDED anything earth-shattering.
Here's a more comprehensive list of the stuff that's been moved to the DLL (if anybody in the know thinks I missed something big or got something wrong, feel free to post it):
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 , , or . 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.
The tyranny of the Gamefonts file is finally over! Yes, you'll still have to use it, but we now have a lot more control over it from within the SDK.
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. That said, given how much we've already got, I'm not sure we NEEDED anything earth-shattering.
Here's a more comprehensive list of the stuff that's been moved to the DLL (if anybody in the know thinks I missed something big or got something wrong, feel free to post it):
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 , , or . 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.