In case any Firaxians are reading this thread I would like to request that more basic game information be exposed to Python. For example, in BUG I use this hack to find the name of the mod's folder:
Instead it should be as easy as this:
replay = CyReplayInfo()
modDir = replay.getModName().replace('\\', r'/')
# game isn't fully initialized yet, try again later
Same for the EXE and INI folders. BUG has a hack where I have a CvAltRoot.py module that the user must modify and stick into their Python folder when they use the /altroot command-line option. That means a lot of explaining to users that aren't familiar with Windows or Notepad. A simple
modFolder = CyGame().getModFolder()
would do wonders to make things easier for modders and players alike. I have added these things to BULL (the BUG DLL), but not everyone uses it so BUG must handle both cases.
iniFolder = os.path.basename(CyGame().getIniFile())
Also, the bootstrap/initialization sequence is rather complicated and differs depending on whether the user starts a new game--CvAppInterface.preGameStart()--or loads a saved game--OnLoad event. The Python layer is not fully initialized during the OnInit event that is fired before both of the above. For example, during onInit the code at the top of this post raises a C++ exception.
Finally, I would like the ability to add folders outside of the Python folder hierarchy dynamically to the Python search path and add folders that act s EntryPoints in that the DLL can call functions within the Python modules inside them. Right now you can only call Python modules that exist in the core game's EntryPoints folders (or a mod's). New files in CustomAssets/Python/EntryPoints are not accessible from the DLL, requiring BUG to include modified versions of those modules which I like to avoid.
Thanks, and I really cannot wait to get my hands on Civ5!