The Great Apple
Big Cheese
This thread is for the first release, a download for which should be available sometime soon. If you come up against any problems with it, please post them here, and we'll see about fixing them.
Changelog for v1.61.0001a:
Changelog for v1.61.0001a:
NOTE: This is getting out of date. Please check release thread for actual changelog. It is similar to this, but all of SimCutie's changes are yet to be included.
For details of the following, please look at the changelog included with the file.
All options labled '(configurable)' will be have no effect on the default game unless enabled in the options menu.
1) AI:
Nothing
2) UI:
- Civ 4 CCP custom options screen added. Here you can cofigure which options you want enabled/disabled. (SimCutie)
- (configurable) Names of units can now be changed to display the unit type before the name instead of after the name. (SimCutie)
- (configurable) Added Great People Type and Civs name in Great People born announcement. (SimCutie)
- (configurable) Added Unit Type name in press-AltKey Combat Odd display. (SimCutie)
- Button states (show tiles/resources etc.) are now saved as user info, and will always be restored to their previous position on starting a game. (SimCutie)
3) Performance:
Nothing
4) Modding:
Note: None of these will have any impact on the normal game experience, however hopefully they will aid modders in improving the game.
a) Bugs:
- Fixed a crash when an incorrect model path was specified. (SimCutie)
- Fixed a bug where increasing the number of commerce type would cause bad things to happen. (Impaler[WrG])
- CvUnit::getNameKey() now correctly returns TXT_KEY_ entries for great people (SimCutie)
b) Changes/additions:
- New generic event manager interface to handle new events. Locates any function which returns a dictionary of events, and proccess them. Very pluggable. (SimCutie)
- All units have a unique unitID which is static throughout the unit's life. It will stay constant during upgrades/gifts. CvUnit::getUID() (c++), or CyUnit.getUID() (python) to get the unique ID. (SimCutie)
- Added CvUnit::getOldX() and CvUnit::getOldY() (c++), and CyUnit.getOldX() and CvUnit.getOldY() (python), to find the plot the unit was on before the current plot. (SimCutie)
- City name colour text can now be changed in CIV4ColorVals.xml (SimCutie)
- Scriptdata is now preserved across upgrades/gifts (SimCutie)
- Various initialization routines added (SimCutie)Spoiler :extern void CvExt_preinit();
void CyExtGC:nInit(python:bject args);
extern void CvExt_postinit();
void CvExt_GameBegin()
void CyExtGC:nLoad(python:bject args);
void CyExtGC:nGameStart(python:bject args);
void CvExt_GameEnd();
void CyExtGC:nUnInit(python:bject args);
- Fiddled with the save/load framework including backward compatibility.(SimCutie)Spoiler :Use following for global save data read/write:
extern void CvExt_read(FDataStreamBase* pStream);
extern void CvExt_write(FDataStreamBase* pStream);
- Enhanced game utils. The following checks have been incorperated into python to better control the game (12monkeys):
Spoiler New methods :
1.a.) called from CvCity.cpp
----------------------------
canCityWorkOnPlot -> if you want to prevent a certain plot to be workable
canCityHurry -> to prevent hurry production in a city
canCityConscript() -> to prevent conscripting in a city
calculateCityDistanceMaintenance() -> to change the distance maintenance for a certain city. Eg. by a special building.
calculateCityNumCitiesMaintenance() -> to change the num cities maintenance for a certain city. Eg. by a special building.
spreadReligionToCity -> to take action if a new religion is spread to y city
1.b.) called from CvUnit.cpp
----------------------------
doUnitCommand() -> be informed about all unit commands and take action if necessary
canUnitMoveInto() -> do restrict/allow a plot for unit movement
canUnitFortify -> Eg. for fantasy mods a "restless" cast
canUnitHeal -> to prevent a unit from healing (eg. for fantasy mods)
canUnitNukeAt -> to allow to nuke a friend or yourself (return TRUE to be able to nuke yourself!)
canUnitSpread() -> eg. to decide if a missionary can spread a religion
unitUpgradePrice -> to change upgrade price for certain units (due to a special building in a city?)
isUnitInvisible -> changes a units invisiblity (maybe for TheLopez' sniper mod)
canUnitJoinGroup -> to define if a unit can join a group. Eg. for limited group sizes.
1.c.) called from CvPlayer.cpp
----------------------------
canPlayerContact -> influence diplomatic abilities of a civ
canPlayerTradeItem -> influence in what players can trade.
canPlayerTradeNetworkWith -> to temporarily interrupt trade networks
canPlayerRazeCity -> have influence if a city can be razed or not
razeCity -> be informed/take action when a city is razed
canPlayerFoundCity -> influence where a city can be found
canPlayerConvert -> have influence on the religion conversion of a certain player
playerFoundReligion -> to prevent a religion being founded
1.c.) called from CvSelectionGroup.cpp
----------------------------
canGroupStartMission -> decide what group mission is allowed or not
groupStartMission -> be infromed when a group starts a mission
- New XML tags. Won't cause errors if not included. Full interface & 'pedia support (Impaler[WRG])
Spoiler New tags :
Civ4TraitInfos.xml
----------------------------
<iHappiness> - Adds set happiness in all cites. Negative values supported.
<iDiplomacy> - Any leader with Diplomacy altering traits experiences a bonus/penalty to all Diplomatic relations
<iSpecialists> - Any leader with the trait will get the perscribed number of free specialists in all cities
<iVoteModifier> - The number of Votes a player recives in the UN is multiplied by the modifer. No 'pedia support
Civ4BuildingInfo.xml
----------------------------
No AI support on these
<LocalSpecialistYieldChange> - Increases the yield of the set specialist for this city only
<LocalSpecialistCommerceChange> - As above but for commerce
Python Exports:
int CyCity::getExtraSpecialistCommerceOfType(int Commerce, int Specialist)
void CyCity::changeExtraSpecialistCommerceOfType(int Commerce, int Specialist, int Change)
void CyCity::changeExtraSpecialistYieldOfType(int Yield, int Specialist, int Change)
Pyton Alterations:
behavior of CyCity::getExtraSpecilistYieldOfType(int Yield, int Specialist)
changed to reflect local bonuses rather then just piping up to the player, and getting an all cities
modifier, to get a Bonus attactched to the player as the result of a wonder or Tech use the
new CyPlayer::getSpecilistExtraYield call described below
Civ4TechInfos.xml
----------------------------
No AI support on these
<SpecialistYieldChange> - Allows specialists of a certain type to increase their yield by the set amount on discovering the tech
<SpecialistCommerceChange> - As above but for commerce
Python Exports:
int CvTechInfo::getSpecialistYieldChange(int specialist, int yield)
int CvTechInfo::getSpecialistCommerceChange(int specialist, int Commerce)
int CvPlayer::getSpecialistTypeExtraYield(int specialist, int yield)
int CvPlayer::getSpecialistTypeExtraCommerce(int specialist, int Commerce)
void CvPlayer::changeSpecialistExtraYield(int specialist, int yield)
void CvPlayer::changeSpecialistExtraCommerce(int Specialist, int Commerce)
- 3 new forms of commerce added. Happiness, health, and experience (Impaler[WRG])
Spoiler details :
The mod will have no effect unless a modified Civ4CommerceInfos.xml is included and Civ4TechInfos is altered to give one or more Techs the <CommerceFlexable> ability to allow the user to direct funds towards the new Commerce types. Alternativly any thing in the game that adds commerce with tripple <iCommerce> tags can create the new Commerce types.
- Two new python methods: bool CyPlot.isOcean(), and bool CyCity.isConnectedToOcean() (12monkeys)
- (configurable) "combatLogCalc" event replaced with "combatBegin" event triggered at the beginning of every battle. Contains both unit pointers, and the combat odds. (SimCutie)Spoiler args :pAttackerUnit Attacking unit
pDefenderUnit Defending unit
combat_odd (probability of attacker win in per thousand (0-1000))
- "combatHit" event added. Called before the damage is done in a combat phase. (SimCutie)- "initEnd" event added - it is triggered when Civ4 application/Python initilization is finished, loading XML data before main menu is finished, font symbol is inited, and just before displaying first main game menu. (SimCutie)Spoiler args :pUnitInflictor damage-inflicting unit
pUnitSufferer damage-suffering unit
bIsAttacking inflictor is attacking(true) or defending(false)
iDamage damage percent (int)
fDamageEffective actual damage value (float)
- New CvCity method. CvCity::getNameLong() (SimCutie)Spoiler :
const CvWString CVCity::getNameLong();
Returns City name followed by Civ. name. ex) "Paris, France"
- C++ : const CvWString CvCity::getNameLong();
- Python : string CyCity.getNameLong()
- CV***Info search routines: CyExtGC::findInfoTypeForString(LPCTSTR infoKey ) - similar to GC.getInfoTypeForString(LPCTSTR infoKey ) but it will not cause Assert failure when info does not exist. See readme for details (SimCutie)
- Action routine - Executes a widget action as if the widget is clicked by mouse. See readme for details (SimCutie)
- Misc. routine - Adds text entry to Game text manager. See readme for details (SimCutie)
- 1.13 Something to do with logging - I have to go now, will update this later. Can you give me a brief description to put here SimCutie?
- Custom widget action facility. This is used to attach any python function to your widget. See readme for details (SimCutie)
- Action Button facility. This is an application of the Custom Widget Action facility described above allowing addition of action buttons. See readme for details (SimCutie)
- Debug function added for SDK. Check out mod readme for details (12monkeys)
5) Bug fixes:
- Fixed a bug where units being transported by units which get upgraded, and lose transport capacity because of being upgraded (caravels --> frigates), were still transported. Now transported units will jump to the nearest valid plot, like when you are pushed by culture. (12monkeys)
- Fixed relocation due to culture/end war for ships. They will no longer get stuck in lakes when they were originally on the ocean. (12monkeys)
- Fixed an issue where production queues could be loaded in new games allowing construction of other Civ's UUs. Production queues can still be loaded, but you can no longer build other Civ's UUs. (12monkeys)
6) Optional Gameplay Tweaks:
- (configurable) GreatPeoplePointPooling by Impaler[WRG]. Re-directs all GreatPeople Points generated in an Empire to a central Pool attached to the player.
- (configurable) RogerBacons Flying mod, AirCombat, and Defensive zoom
- (configurable) Chalids Slow Cultural Borders
NOTE: Should get some links for the above, rather busy doing other things right now