| Readme File: |
[B]Revolution Mod Pack[/B]
[COLOR="Green"][B]Game Ready Components:[/B][/COLOR]
[COLOR="Yellow"][B]In Testing/Further Development:[/B][/COLOR]
The goal of this modpack is to make Civ4 more dynamic. New empires will rise in the middle of the game, over-extended empires may crumble, or colonies break away from oppressive rulers. Not all of these features are working as of now.
Currently the BarbarianCiv and AIAutoPlay components are working well. Briefly, BarbarianCiv allows Barbarian cities to "settle down" and spawn new full-fledged civs. AIAutoPlay is more of a tool than a gameplay enhancement, allowing the player to turn over the reigns of their civ temporarily to the AI. These components are enabled by default.
[B]What's in testing[/B]
These are components that are largely functional, but may have some rough edges or features are missing. Rebellion is a modification of Trip's Rebellion mod component, where cities with certain negative properties will spawn "rebel" units. The new version of this component is vastly superior to previous incarnations. This component is enabled by default. ChangePlayer is primarily a tool, allowing the player to switch which civ they control and the leader or civ type of any civ. This component is disabled by default, but can be enabled in Revolution.ini.
[B]What's in initial development[/B]
These are still being thought out. This version of Revolution allows Civ1/2 style empire splits when the capital is captured. Future versions will replace the current culture flipping mechanism with the option to let them go or they revolt, and also allow unhappy colonies or conquered lands to rise up and attempt to break-away as a block. When Warlords comes out and the Vassal state option becomes available, the options here are very interesting. Pirates will simply add pirate Frigates plowing the oceans in the age of sails. These components are disabled by default, and I do not recommend you enable them.
[B]New SDK features[/B] - Updated!
There are two main additions/modifications to the SDK, for creating new players/changing existing players and AI auto play. For creating players, the following function has been added (exposed to Python in CyGame()):
bool CvGame::createNewPlayer( int playerIdx, int newCivType, int newLeader, int teamIdx, bool doGive, int ix, int iy )
This creates a new player in a closed slot, or reincarnates a dead slot (playerIdx is the slot number). If there are seven civs in the game, they fill slots 0 through 6. The civ and leader types come from the xml, and you can specify any leader for any civ if you want. To have the civ be on its own or previous team, pass -1 for teamIdx, otherwise pass the index of the team you want them to join. If doGive is set to true, the new civ is given the city at ix,iy or given a settler if there is no city there (this works now!). If doGive is set to false, then the player is simply set up, and you can give them cities or units with the normal Python commands. This function can be used for creating new players who have not been in the game before! This function appears to be fully functional (ha).
For changing existing, alive players the following function was added (exposed to Python in CyGame()):
bool CvGame::changePlayer( int playerIdx, int newCivType, int newLeader, int teamIdx, bool bIsHuman, bool bChangeGraphics )
This function is still undergoing testing, but will change the civ type, leader, and team of a player (see descriptions above). The flag bIsHuman sets the slot type of the civ between taken (ie Human) and computer, while bChangeGraphics indicates whether to update the color/flag of the civ. This function could be used to change the leader or civ type of an existing civ, to say simulate the takeover of Hitler and the Nazis in Germany. Note: setting the human to control the Barbarian State (and no other civ) will end your game. The function now does change traits and personality, but does not change the flags of units visible to the human player (working on that).
Finally, the following functions have been exposed to Python in CyGame:
int getAIAutoPlay() const;
void setAIAutoPlay(int iNewValue);
void changeAIAutoPlay(int iChange);
The set function turns control over to the AI for iNewValue number of turns, the others get or change that value. To facilitate this functionality, the isHuman() check in CvPlayer is disabled (ie always returns false) while autoplay is on.
Many options and tweaks are available in Revolution.ini, including enabling and disabling each individual component. For specifics on what can be changed, check out the ini file. Note that yes, you can enable or disable a component, or change one of the other features, and continue with an in progress game. However, you will probably need to save, exit, and reload.
I believe you can continue a game from version 0.2 with this new version without any problems. However, I haven't fully tested this.
All components are designed to be as compatible with other mods as possible. It will work with any mod that simply adds new units/techs/civs, as it searches through the XML data for the best buildable units of a certain class or with a certain AI type and spawns new civs by searching for unused civs. However, it may not work properly if you have removed unit classes or removed some techs (like Horseback riding) or removed the minor or barbarian civs from the XML.
I have not tried this in multiplayer, but some components should work fine while others (ChangePlayer) don't make any sense.
[B]Note to Modders[/B]
This mod uses DrElmerGiggles custom event manager, many thanks to him for putting it together! It should be very easy to merge the Python portion with other mods that also use this convention.
Thanks to DrElmerGiggles, TheLopez, Kael, Rhye, and others for their answers to questions and code I browsed for implementation ideas.
Sources for the SDK code are included in the download as is an FAQ that contains descriptions/answers to how to use the SDK sources for your own mod.
Added config settings for all components
Created "Development" and "Planning" python code directories
- Fixed traits changing not changing with new leader on changePlayer
- Force graphics engine to rerender changed flags, colors, etc (still issue with existing unit flags)
- createNewPlayer now takes a team index to join (-1 for no change to team)
- changePlayer now takes a team index to join (-1 for no change to team)
- createNewPlayer will now successfully create a settler if passed a usable, empty land plot
- createNewPlayer can now be set to only initialize, and leave all giving of units for later
- created new function to handle reinitialization of players instead of using built in init
- exposed CvUnit::gift() to Python in CyUnit
- Now odds of barb settling scale with game speed
- Barb settling odds increase by era
- Increased average population of settled barb cities
- New civs now get more defensive units
- Buiders type now get granaries
- Military type get more units in later eras
- Added Viking style for militaristic barbs who settle on their own island[/SPOILER]
- New default behavior: Cities must now be unhappy for a rebellion to occur
- Added option to allow not unhappy cities to also rebel
- New default behavior: Rebels spawn as new civs
- Added option to spawn rebels as Barbarians
- No rebellion just after city conquest
- Rebels won't spawn on neighboring islands
- If multiple cities rise up against a player, the rebellions will join forces
- Nationality factor now uses plot culture (ie Nationality), instead of city culture
- City size factor now affects fringe cities far more than core cities
- Added option to buyoff would be rebels[/SPOILER]
- Initial implementation ideas
- Implementation of "classic" Civ1 style empire split on capital capture
- Improved popup, now with Cancel button
- Improved popups
- Several graphics update fixes
- Can now switch player's team
- unit flags of units visible to human do not change when civ changes