Also, a big part of learning to work the C++ in Civ IV involves figuring what the heck all those things are in the SDK. It takes a long time to get familiar with what all the files in there do, even once you get the C++ knowledge down. Here's a quick overview to get you started:
The first files you will (probably) want to look at are:
- CvPlayer - Contains all stuff related to an individual player. This includes human and AI players, altho the actual AI logic is handled elsewhere (in CvPLayerAI, which builds on class CvPlayer)
- CvTeam - Stuff related to the team. One of the things you'll need to become familiar with is the fact that every Civ player is always part of a team, even if it's a team of 1. There's lots of stuff that's on the Team level that's not immediately apparant, including all Victory conditions, espionage points, open borders agreements, and other such things.
- CvCity - Stuff that happens at the individual city level.
- CvUnit - Stuff that happens at the individual unit level. This refers to live units that are actually on the map. Be careful not to confuse it with the the class CvUnitInfos (or the other unit infos classes), which refer to static facts about the unit stored in XML files.
- CvGame - Stuff that pertains to the entire game that is currently in play.
- CvPlot - Stuff related to an individual plot on the map.
- CvInfos - While not actually a class, the CvInfos file is a good one to look through. There's a ton of stuff in it. An 'info' class means data loaded directly from XML that doesn't ever change in the live game. Examples of info classes are CivicInfos, TraitInfos, UnitInfos, ReligionInfos, etc.
-CvGameTextMgr - The central text manager that handles most of the long pieces of text that appear throughout the game. Handles the text that pops up on screen explaining civics, units, traits, etc.
Anything that starts with Cy is related to Python. You only have to fool with these if you need to share your SDK code with Python files. You will generally have to do this when you add features that will need to be displayed on the screens in the game (unless you can sneak the code into CvGameTextMgr, as I sometimes do).
-isau