RevDCM Specific Code Proposals

phungus420

Deity
Joined
Mar 1, 2003
Messages
6,296
This is code I've written for LoR that would be nice to incorporate into RevDCM.


Highly recommended addition for core mod. RevDCM could really use this:

Challenge- Barbarian World.
Adds starting game option where as many barbarian cities as starting players begin on the map.

Spoiler :

CvEnums.h
Code:
enum GameOptionTypes				// Exposed to Python
{
	NO_GAMEOPTION = -1,
...
	GAMEOPTION_NO_ESPIONAGE,	
//Ass: Added by Kael 07/02/2008
	[B]GAMEOPTION_CHALLENGE_BARBARIAN_WORLD,[/B]
//Ass: End Add

CvGame.h
Code:
public:
...	
	//Ass: Added by Kael 10/13/2008
    [B]void foundBarbarianCity();[/B]
	//FfH: End Add

CvGame.cpp
Code:
void CvGame::setInitialItems()
{
	PROFILE_FUNC();
...
//FfH: Added by Kael 09/16/2008
[B]    if (isOption(GAMEOPTION_CHALLENGE_BARBARIAN_WORLD))
    {
        for (int iI = 0; iI < MAX_PLAYERS; iI++)
        {
            if (GET_PLAYER((PlayerTypes)iI).isAlive() && iI != BARBARIAN_PLAYER)
            {
                foundBarbarianCity();
            }
        }
    }[/B]
//FfH: End Add

...

//Ass: Added by Kael 10/13/2008void CvGame::foundBarbarianCity()
[B]void CvGame::foundBarbarianCity()
{
    bool bValid = true;
	int iBestValue = 0;
	int iDist = 0;
	int iValue = 0;
	CvPlot* pPlotI = NULL;
	CvPlot* pBestPlot = NULL;
	CvPlot* pLoopPlot = NULL;
	for (int iPlot = 0; iPlot < GC.getMapINLINE().numPlotsINLINE(); iPlot++)
	{
		pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iPlot);
		bValid = true;
		iValue = 0;
		if (pLoopPlot->isWater())
		{
		    bValid = false;
		}
		else if (pLoopPlot->isImpassable())
		{
		    bValid = false;
		}
		else if (pLoopPlot->isCity())
		{
		    bValid = false;
		}
		else if (pLoopPlot->getImprovementType() != NO_IMPROVEMENT)
		{
		    bValid = false;
		}
		else for (int iI = 0; iI < MAX_CIV_PLAYERS; iI++)
        {
            if (GET_PLAYER((PlayerTypes)iI).isAlive())
            {
                pPlotI = GET_PLAYER((PlayerTypes)iI).getStartingPlot();
                if (pPlotI != NULL)
                {
                    iDist = GC.getMapINLINE().calculatePathDistance(pPlotI, pLoopPlot);
                    if (iDist == -1)
                    {
                        iValue += 100;
                    }
                    else if (iDist < 5)
                    {
                        bValid = false;
                    }
                    else
                    {
                        iValue += iDist * 10;
                    }
                }
            }
		}
        if (bValid)
        {
            iValue += GET_PLAYER(BARBARIAN_PLAYER).AI_foundValue(pLoopPlot->getX_INLINE(), pLoopPlot->getY_INLINE(), GC.getDefineINT("MIN_BARBARIAN_CITY_STARTING_DISTANCE"));
            iValue += pLoopPlot->area()->getNumOwnedTiles() + 10;
            iValue += getSorenRandNum(250, "Barb City Found");
			if (iValue > iBestValue)
			{
				iBestValue = iValue;
				pBestPlot = pLoopPlot;
			}
		}
	}
	if (pBestPlot != NULL)
	{
		GET_PLAYER(BARBARIAN_PLAYER).found(pBestPlot->getX_INLINE(), pBestPlot->getY_INLINE());
	}
}[/B]
//Ass: End Add

CyEnumsInterface.cpp
Code:
void CyEnumsPythonInterface()
{
	OutputDebugString("Python Extension Module - CyEnumsPythonInterface\n");
...
	python::enum_<GameOptionTypes>("GameOptionTypes")
...
		.value("GAMEOPTION_NO_ESPIONAGE", GAMEOPTION_NO_ESPIONAGE)
//Ass: Added by Kael 07/02/2008
		[B].value("GAMEOPTION_CHALLENGE_BARBARIAN_WORLD", GAMEOPTION_CHALLENGE_BARBARIAN_WORLD)[/B]
//Ass: End

XML

CIV4GameOptionInfos
Code:
		<GameOptionInfo>
			<Type>GAMEOPTION_CHALLENGE_BARBARIAN_WORLD</Type>
			<Description>TXT_KEY_GAME_OPTION_CHALLENGE_BARBARIAN_WORLD</Description>
			<Help>TXT_KEY_GAME_OPTION_CHALLENGE_BARBARIAN_WORLD_HELP</Help>
			<bDefault>0</bDefault>
			<bVisible>1</bVisible>
		</GameOptionInfo>


Civic Rev effects Exposing.
Exposes Revolution effects of Civics in the Civilopdedia.

Spoiler :

CvGameTextMgr.cpp
Code:
void CvGameTextMgr::parseCivicInfo(CvWStringBuffer &szHelpText, CivicTypes eCivic, bool bCivilopediaText, bool bPlayerContext, bool bSkipName)
{
	PROFILE_FUNC();
...
	// Start Revolution Civic Expose
	
	//  Revolution Local Civic Index Modifiers
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxLocal())
	{
		if ( GC.getCivicInfo(eCivic).getRevIdxLocal() > 0 )
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_INDEX_LOCAL_PENALTY", GC.getCivicInfo(eCivic).getRevIdxLocal()));
		}
		if ( GC.getCivicInfo(eCivic).getRevIdxLocal() < 0 )
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_INDEX_LOCAL_BONUS", 0 - GC.getCivicInfo(eCivic).getRevIdxLocal()));
		}
	}[/B]
	
	//  Revolution National Civic Index Modifiers
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxNational())
	{
		if ( GC.getCivicInfo(eCivic).getRevIdxNational() > 0 )
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_INDEX_NATIONAL_PENALTY", GC.getCivicInfo(eCivic).getRevIdxNational()));
		}
		if ( GC.getCivicInfo(eCivic).getRevIdxNational() < 0 )
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_INDEX_NATIONAL_BONUS", 0 - GC.getCivicInfo(eCivic).getRevIdxNational()));
		}
	}[/B]
	
	//  Revolution Good Holy City Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxHolyCityGood())
	{
		szHelpText.append(NEWLINE);
		szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_GOOD_HOLY_CITY", GC.getCivicInfo(eCivic).getRevIdxHolyCityGood()));
	}[/B]
	
	//  Revolution Bad Holy City Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxHolyCityBad())
	{
		szHelpText.append(NEWLINE);
		szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_BAD_HOLY_CITY", GC.getCivicInfo(eCivic).getRevIdxHolyCityBad()));
	}[/B]
	
	//  Revolution Switch to Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxSwitchTo())
	{
		if (GC.getCivicInfo(eCivic).getRevIdxSwitchTo() < 0)
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_SWITCH_TO_BONUS", GC.getCivicInfo(eCivic).getRevIdxSwitchTo()));
		}
		if (GC.getCivicInfo(eCivic).getRevIdxSwitchTo() > 0)
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_SWITCH_TO_PENALTY", GC.getCivicInfo(eCivic).getRevIdxSwitchTo()));
		}
	}[/B]
	
	//  Revolution Nationality Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxNationalityMod())
	{
		if ( GC.getCivicInfo(eCivic).getRevIdxNationalityMod() < 0)
		{
			szHelpText.append(NEWLINE);
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getCivicInfo(eCivic).getRevIdxNationalityMod());
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_NATIONALITY_REDUCTION_MOD", szTempBuffer.GetCString()));
		}
		if ( GC.getCivicInfo(eCivic).getRevIdxNationalityMod() > 0)
		{
			szHelpText.append(NEWLINE);
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getCivicInfo(eCivic).getRevIdxNationalityMod());
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_NATIONALITY_INCREASE_MOD", szTempBuffer.GetCString()));
		}
	}[/B]
	
	//  Revolution Bad Religion Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxBadReligionMod())
	{
		szHelpText.append(NEWLINE);
		CvWString szTempBuffer;
		szTempBuffer.Format(L"%.0f", 100 * GC.getCivicInfo(eCivic).getRevIdxBadReligionMod());
		szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_BAD_RELIGION_MOD", szTempBuffer.GetCString()));
	}[/B]
	
	//  Revolution Good Religion Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxGoodReligionMod())
	{
		szHelpText.append(NEWLINE);
		CvWString szTempBuffer;
		szTempBuffer.Format(L"%.0f", 100 * GC.getCivicInfo(eCivic).getRevIdxGoodReligionMod());
		szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_GOOD_RELIGION_MOD", szTempBuffer.GetCString()));
	}[/B]
	
	//  Revolution City Distance Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevIdxDistanceMod())
	{
		if ( GC.getCivicInfo(eCivic).getRevIdxDistanceMod() < 0 )
		{
			szHelpText.append(NEWLINE);
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getCivicInfo(eCivic).getRevIdxDistanceMod());
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_CITY_DISTANCE_GOOD_MOD", szTempBuffer.GetCString()));
		}
		if ( GC.getCivicInfo(eCivic).getRevIdxDistanceMod() > 0 )
		{
			szHelpText.append(NEWLINE);
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getCivicInfo(eCivic).getRevIdxDistanceMod());
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_CITY_DISTANCE_BAD_MOD", szTempBuffer.GetCString()));
		}
	}[/B]
	
	//  Revolution Religious Freedom Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevReligiousFreedom())
	{
		if ( GC.getCivicInfo(eCivic).getRevReligiousFreedom() < 0 )
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_RELIGION_OPRESSION", GC.getCivicInfo(eCivic).getRevReligiousFreedom()));
		}
		if ( GC.getCivicInfo(eCivic).getRevReligiousFreedom() > 0 )
		{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_RELIGION_FREEDOM", GC.getCivicInfo(eCivic).getRevReligiousFreedom()));
		}
	}[/B]
	
	//  Revolution Labor Modifier
[B]	if (0 != GC.getCivicInfo(eCivic).getRevLaborFreedom())
	{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_LABOR", GC.getCivicInfo(eCivic).getRevLaborFreedom()));
	}
	
	//  Revolution Environment Modifier
	if (0 != GC.getCivicInfo(eCivic).getRevEnvironmentalProtection())
	{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_ENVIRONMENT", GC.getCivicInfo(eCivic).getRevEnvironmentalProtection()));
	}
	
	//  Revolution Democracy Modifier
	if (0 != GC.getCivicInfo(eCivic).getRevDemocracyLevel())
	{
			szHelpText.append(NEWLINE);
			szHelpText.append(gDLL->getText("TXT_KEY_CIVIC_REV_DEMOCRACY", GC.getCivicInfo(eCivic).getRevDemocracyLevel()));
	}[/B]
	
	
	// End Revolution Civic Expose

XML

RevolutionText_CIV4GameText.xml
Code:
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_INDEX_LOCAL_PENALTY</Tag>
		<English>[ICON_BULLET]%D1 Local RevIdx Penalty</English>
		<French>[ICON_BULLET]%D1 Local RevIdx Penalty</French>
		<German>[ICON_BULLET]%D1 Local RevIdx Penalty</German>
		<Italian>[ICON_BULLET]%D1 Local RevIdx Penalty</Italian>
		<Spanish>[ICON_BULLET]%D1 Local RevIdx Penalty</Spanish>
		<Finnish>[ICON_BULLET]%D1 Local RevIdx Penalty</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_INDEX_LOCAL_BONUS</Tag>
		<English>[ICON_BULLET]%D1 Local RevIdx Bonus</English>
		<French>[ICON_BULLET]%D1 Local RevIdx Bonus</French>
		<German>[ICON_BULLET]%D1 Local RevIdx Bonus</German>
		<Italian>[ICON_BULLET]%D1 Local RevIdx Bonus</Italian>
		<Spanish>[ICON_BULLET]%D1 Local RevIdx Bonus</Spanish>
		<Finnish>[ICON_BULLET]%D1 Local RevIdx Bonus</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_INDEX_NATIONAL_PENALTY</Tag>
		<English>[ICON_BULLET]%D1 National RevIdx Instability Penalty</English>
		<French>[ICON_BULLET]%D1 National RevIdx Instability Penalty</French>
		<German>[ICON_BULLET]%D1 National RevIdx Instability Penalty</German>
		<Italian>[ICON_BULLET]%D1 National RevIdx Instability Penalty</Italian>
		<Spanish>[ICON_BULLET]%D1 National RevIdx Instability Penalty</Spanish>
		<Finnish>[ICON_BULLET]%D1 National RevIdx Instability Penalty</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_INDEX_NATIONAL_BONUS</Tag>
		<English>[ICON_BULLET]%D1 National RevIdx Stability Bonus</English>
		<French>[ICON_BULLET]%D1 National RevIdx Stability Bonus</French>
		<German>[ICON_BULLET]%D1 National RevIdx Stability Bonus</German>
		<Italian>[ICON_BULLET]%D1 National RevIdx Stability Bonus</Italian>
		<Spanish>[ICON_BULLET]%D1 National RevIdx Stability Bonus</Spanish>
		<Finnish>[ICON_BULLET]%D1 National RevIdx Stability Bonus</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_GOOD_HOLY_CITY</Tag>
		<English>[ICON_BULLET]%D1 RevIdx Bonus from State [ICON_RELIGION] Holy City</English>
		<French>[ICON_BULLET]%D1 RevIdx Bonus from State [ICON_RELIGION] Holy City</French>
		<German>[ICON_BULLET]%D1 RevIdx Bonus from State [ICON_RELIGION] Holy City</German>
		<Italian>[ICON_BULLET]%D1 RevIdx Bonus from State [ICON_RELIGION] Holy City</Italian>
		<Spanish>[ICON_BULLET]%D1 RevIdx Bonus from State [ICON_RELIGION] Holy City</Spanish>
		<Finnish>[ICON_BULLET]%D1 RevIdx Bonus from State [ICON_RELIGION] Holy City</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_BAD_HOLY_CITY</Tag>
		<English>[ICON_BULLET]%D1 RevIdx Penalty from Non State [ICON_RELIGION] Holy City</English>
		<French>[ICON_BULLET]%D1 RevIdx Penalty from Non State [ICON_RELIGION] Holy City</French>
		<German>[ICON_BULLET]%D1 RevIdx Penalty from Non State [ICON_RELIGION] Holy City</German>
		<Italian>[ICON_BULLET]%D1 RevIdx Penalty from Non State [ICON_RELIGION] Holy City</Italian>
		<Spanish>[ICON_BULLET]%D1 RevIdx Penalty from Non State [ICON_RELIGION] Holy City</Spanish>
		<Finnish>[ICON_BULLET]%D1 RevIdx Penalty from Non State [ICON_RELIGION] Holy City</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_SWITCH_TO_BONUS</Tag>
		<English>[ICON_BULLET]%D1 Temperary RevIdx bonus for adopting civic.</English>
		<French>[ICON_BULLET]%D1 Temperary RevIdx bonus for adopting civic.</French>
		<German>[ICON_BULLET]%D1 Temperary RevIdx bonus for adopting civic.</German>
		<Italian>[ICON_BULLET]%D1 Temperary RevIdx bonus for adopting civic.</Italian>
		<Spanish>[ICON_BULLET]%D1 Temperary RevIdx bonus for adopting civic.</Spanish>
		<Finnish>[ICON_BULLET]%D1 Temperary RevIdx bonus for adopting civic.</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_SWITCH_TO_PENALTY</Tag>
		<English>[ICON_BULLET]%D1 Temperary RevIdx penalty for adopting civic.</English>
		<French>[ICON_BULLET]%D1 Temperary RevIdx penalty for adopting civic.</French>
		<German>[ICON_BULLET]%D1 Temperary RevIdx penalty for adopting civic.</German>
		<Italian>[ICON_BULLET]%D1 Temperary RevIdx penalty for adopting civic.</Italian>
		<Spanish>[ICON_BULLET]%D1 Temperary RevIdx penalty for adopting civic.</Spanish>
		<Finnish>[ICON_BULLET]%D1 Temperary RevIdx penalty for adopting civic.</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_NATIONALITY_REDUCTION_MOD</Tag>
		<English>[ICON_BULLET]%s1% Revolutionary sentiment (Patriotism).</English>
		<French>[ICON_BULLET]%s1% Revolutionary sentiment (Patriotism).</French>
		<German>[ICON_BULLET]%s1% Revolutionary sentiment (Patriotism).</German>
		<Italian>[ICON_BULLET]%s1% Revolutionary sentiment (Patriotism).</Italian>
		<Spanish>[ICON_BULLET]%s1% Revolutionary sentiment (Patriotism).</Spanish>
		<Finnish>[ICON_BULLET]%s1% Revolutionary sentiment (Patriotism).</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_NATIONALITY_INCREASE_MOD</Tag>
		<English>[ICON_BULLET]+%s1% Revolutionary sentiment (alienation).</English>
		<French>[ICON_BULLET]+%s1% Revolutionary sentiment (alienation).</French>
		<German>[ICON_BULLET]+%s1% Revolutionary sentiment (alienation).</German>
		<Italian>[ICON_BULLET]+%s1% Revolutionary sentiment (alienation).</Italian>
		<Spanish>[ICON_BULLET]+%s1% Revolutionary sentiment (alienation).</Spanish>
		<Finnish>[ICON_BULLET]+%s1% Revolutionary sentiment (alienation).</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_BAD_RELIGION_MOD</Tag>
		<English>[ICON_BULLET]+%s1% Revolution penalty from Non State [ICON_RELIGION].</English>
		<French>[ICON_BULLET]+%s1% Revolution penalty from Non State [ICON_RELIGION].</French>
		<German>[ICON_BULLET]+%s1% Revolution penalty from Non State [ICON_RELIGION].</German>
		<Italian>[ICON_BULLET]+%s1% Revolution penalty from Non State [ICON_RELIGION].</Italian>
		<Spanish>[ICON_BULLET]+%s1% Revolution penalty from Non State [ICON_RELIGION].</Spanish>
		<Finnish>[ICON_BULLET]+%s1% Revolution penalty from Non State [ICON_RELIGION].</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_GOOD_RELIGION_MOD</Tag>
		<English>[ICON_BULLET]+%s1% Revolution bonus from State [ICON_RELIGION].</English>
		<French>[ICON_BULLET]+%s1% Revolution bonus from State [ICON_RELIGION].</French>
		<German>[ICON_BULLET]+%s1% Revolution bonus from State [ICON_RELIGION].</German>
		<Italian>[ICON_BULLET]+%s1% Revolution bonus from State [ICON_RELIGION].</Italian>
		<Spanish>[ICON_BULLET]+%s1% Revolution bonus from State [ICON_RELIGION].</Spanish>
		<Finnish>[ICON_BULLET]+%s1% Revolution bonus from State [ICON_RELIGION].</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_CITY_DISTANCE_GOOD_MOD</Tag>
		<English>[ICON_BULLET]%s1% to City Distance RevIdx penalty.</English>
		<French>[ICON_BULLET]%s1% to City Distance RevIdx penalty.</French>
		<German>[ICON_BULLET]%s1% to City Distance RevIdx penalty.</German>
		<Italian>[ICON_BULLET]%s1% to City Distance RevIdx penalty.</Italian>
		<Spanish>[ICON_BULLET]%s1% to City Distance RevIdx penalty.</Spanish>
		<Finnish>[ICON_BULLET]%s1% to City Distance RevIdx penalty.</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_CITY_DISTANCE_BAD_MOD</Tag>
		<English>[ICON_BULLET]+%s1% to City Distance RevIdx penalty.</English>
		<French>[ICON_BULLET]+%s1% to City Distance RevIdx penalty.</French>
		<German>[ICON_BULLET]+%s1% to City Distance RevIdx penalty.</German>
		<Italian>[ICON_BULLET]+%s1% to City Distance RevIdx penalty.</Italian>
		<Spanish>[ICON_BULLET]+%s1% to City Distance RevIdx penalty.</Spanish>
		<Finnish>[ICON_BULLET]+%s1% to City Distance RevIdx penalty.</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_RELIGION_FREEDOM</Tag>
		<English>[ICON_BULLET]%D1% National Stability (religious freedom).</English>
		<French>[ICON_BULLET]%D1% National Stability (religious freedom).</French>
		<German>[ICON_BULLET]%D1% National Stability (religious freedom).</German>
		<Italian>[ICON_BULLET]%D1% National Stability (religious freedom).</Italian>
		<Spanish>[ICON_BULLET]%D1% National Stability (religious freedom).</Spanish>
		<Finnish>[ICON_BULLET]%D1% National Stability (religious freedom).</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_RELIGION_OPRESSION</Tag>
		<English>[ICON_BULLET]%D1% National Stability (religious opression).</English>
		<French>[ICON_BULLET]%D1% National Stability (religious opression).</French>
		<German>[ICON_BULLET]%D1% National Stability (religious opression).</German>
		<Italian>[ICON_BULLET]%D1% National Stability (religious opression).</Italian>
		<Spanish>[ICON_BULLET]%D1% National Stability (religious opression).</Spanish>
		<Finnish>[ICON_BULLET]%D1% National Stability (religious opression).</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_LABOR</Tag>
		<English>[ICON_BULLET]%D1% National Stability (labor).</English>
		<French>[ICON_BULLET]%D1% National Stability (labor).</French>
		<German>[ICON_BULLET]%D1% National Stability (labor).</German>
		<Italian>[ICON_BULLET]%D1% National Stability (labor).</Italian>
		<Spanish>[ICON_BULLET]%D1% National Stability (labor).</Spanish>
		<Finnish>[ICON_BULLET]%D1% National Stability (labor).</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_ENVIRONMENT</Tag>
		<English>[ICON_BULLET]%D1% National Stability (Health and Safety).</English>
		<French>[ICON_BULLET]%D1% National Stability (Health and Safety).</French>
		<German>[ICON_BULLET]%D1% National Stability (Health and Safety).</German>
		<Italian>[ICON_BULLET]%D1% National Stability (Health and Safety).</Italian>
		<Spanish>[ICON_BULLET]%D1% National Stability (Health and Safety).</Spanish>
		<Finnish>[ICON_BULLET]%D1% National Stability (Health and Safety).</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_CIVIC_REV_DEMOCRACY</Tag>
		<English>[ICON_BULLET]%D1% National Stability (Suffrage).</English>
		<French>[ICON_BULLET]%D1% National Stability (Suffrage).</French>
		<German>[ICON_BULLET]%D1% National Stability (Suffrage).</German>
		<Italian>[ICON_BULLET]%D1% National Stability (Suffrage).</Italian>
		<Spanish>[ICON_BULLET]%D1% National Stability (Suffrage).</Spanish>
		<Finnish>[ICON_BULLET]%D1% National Stability (Suffrage).</Finnish>
	</TEXT>
 
Other useful code from LoR. RevDCM could use these bits of code as they add more functionality for other modders, and the code is stable. (Source and XML files in post above).


Unit Era Limit.
clones XML tag from BuildingInfos to UnitInfos, limits production of a unit to ERA and later starts:

Spoiler :

CvGameTextMgr.cpp
Code:
void CvGameTextMgr::setBasicUnitHelp(CvWStringBuffer &szBuffer, UnitTypes eUnit, bool bCivilopediaText)
{
	PROFILE_FUNC();
...
	if (bCivilopediaText)
	{	
...
		//phungus Legend Era Limit
		[B]if (GC.getUnitInfo(eUnit).getMaxStartEra() != NO_ERA)
		{
			szTempBuffer.append(NEWLINE);
			szBuffer.append(gDLL->getText("TXT_KEY_UNIT_MAX_START_ERA", GC.getEraInfo((EraTypes)GC.getUnitInfo(eUnit).getMaxStartEra()).getTextKeyWide()));
		}[/B]
		//phungus End

CvInfos.h
Code:
public:
	CvUnitInfo();
	virtual ~CvUnitInfo();
...
	int getPrereqAndTech() const;							// Exposed to Python
	[B]int getMaxStartEra() const;[/B]						// phungus Legends era Limit
Code:
protected:
...
	int m_iPrereqAndTech;	
	[B]int m_iMaxStartEra;[/B]		//phungus Legends Era Limit

CvInfos.cpp
Code:
CvUnitInfo::CvUnitInfo() :
...
m_iPrereqAndTech(NO_TECH),
[B]m_iMaxStartEra(NO_ERA),[/B]		//phungus Legends Era Limit

...

//phungus Legends Era Limit Start
[B]int CvUnitInfo::getMaxStartEra() const				
{
	return m_iMaxStartEra;
}[/B]
//phungus End
Code:
void CvUnitInfo::read(FDataStreamBase* stream)
{
	CvHotkeyInfo::read(stream);
...
	stream->Read(&m_iPrereqAndTech);
	[B]stream->Read(&m_iMaxStartEra);[/B]		//phungus Legends Era Limit
Code:
void CvUnitInfo::write(FDataStreamBase* stream)
{
	CvHotkeyInfo::write(stream);
...
	stream->Write(m_iPrereqAndTech);
	[B]stream->Write(m_iMaxStartEra);[/B]		//phungus Legends Era Limit
Code:
bool CvUnitInfo::read(CvXMLLoadUtility* pXML)
{
...
	//phungus Legends Era Limit Start
	[B]pXML->GetChildXmlValByName(szTextVal, "MaxStartEra");
	m_iMaxStartEra = pXML->FindInInfoClass(szTextVal);[/B]
	//phungus End
Code:
void CvUnitInfo::copyNonDefaults(CvUnitInfo* pClassInfo)
{	
	CvHotkeyInfo::copyNonDefaults(pClassInfo);
...
	if ( m_iPrereqAndTech == iTextDefault ) m_iPrereqAndTech = pClassInfo->getPrereqAndTech();
	[B]if ( m_iMaxStartEra == iTextDefault) m_iMaxStartEra = pClassInfo->getMaxStartEra();[/B]			//phungus Legends Era Limit

CvPlayer.cpp
Code:
bool CvPlayer::canTrain(UnitTypes eUnit, bool bContinue, bool bTestVisible, bool bIgnoreCost) const
{
	PROFILE_FUNC();
...
	//phungus Legend Era Limit
	[B]if (GC.getUnitInfo(eUnit).getMaxStartEra() != NO_ERA)
	{
		if (GC.getGameINLINE().getStartEra() > GC.getUnitInfo(eUnit).getMaxStartEra())
		{
			return false;
		}
	}[/B]
	//phungus end

XML

CIV4UnitSchema
Code:
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
...
	<ElementType name="TechTypes" content="eltOnly">
		<element type="PrereqTech" minOccurs="0" maxOccurs="*"/>
	</ElementType>
	[b]<ElementType name="MaxStartEra" content="textOnly"/>[/b]
...
	<ElementType name="UnitInfo" content="eltOnly">
...
		<element type="TechTypes" minOccurs="0"/>
		[b]<element type="MaxStartEra" minOccurs="0"/>[/b]

Civ4GameText_DCM
Code:
	<TEXT>
		<Tag>TXT_KEY_UNIT_MAX_START_ERA</Tag>
		<English>[NEWLINE][ICON_BULLET]Can only be Built on %s1_Name and Earlier Starts</English>
		<French>[NEWLINE][ICON_BULLET]Can only be Built on %s1_Name and Earlier Starts</French>
		<German>[NEWLINE][ICON_BULLET]Can only be Built on %s1_Name and Earlier Starts</German>
		<Italian>[NEWLINE][ICON_BULLET]Can only be Built on %s1_Name and Earlier Starts</Italian>
		<Spanish>[NEWLINE][ICON_BULLET]Can only be Built on %s1_Name and Earlier Starts</Spanish>
		<Finnish>[NEWLINE][ICON_BULLET]Can only be Built on %s1_Name and Earlier Starts</Finnish>
	</TEXT>



Upgrade Cost modifier.
Creates XML tag for BuildingInfos, allows modified upgrade cost (Leonardo's Workshop).

Spoiler :

CvGameTextMgr.cpp
Code:
void CvGameTextMgr::setBuildingHelp(CvWStringBuffer &szBuffer, BuildingTypes eBuilding, bool bCivilopediaText, bool bStrategyText, bool bTechChooserText, CvCity* pCity)
{
	PROFILE_FUNC();
...
	//phungus Leonardos Workshop
	[B]if (kBuilding.getUnitUpgradePriceModifier() != 0)
	{
		szBuffer.append(NEWLINE);
		szBuffer.append(gDLL->getText("TXT_KEY_BUILDING_UNIT_UPGRADE_COST_MOD", kBuilding.getUnitUpgradePriceModifier()));
	}[/B]
	//phungus end

CvInfos.h
Code:
public:

	CvBuildingInfo();
	virtual ~CvBuildingInfo();
...
	int getEspionageDefenseModifier() const;					// Exposed to Python
	[B]int getUnitUpgradePriceModifier() const;[/B]	//phungus Leonardos Workshop
Code:
protected:
...
	int m_iEspionageDefenseModifier;
	[B]int m_iUnitUpgradePriceModifier;[/B]	//phungus Leonardos Workshop

CvInfos.cpp
Code:
CvBuildingInfo::CvBuildingInfo() :
...
m_iEspionageDefenseModifier(0),
[B]m_iUnitUpgradePriceModifier(0),[/B]	//phungus Leonardos Workshop
...
//phungus Leonardos Workshop
[B]int CvBuildingInfo::getUnitUpgradePriceModifier() const	
{
	return m_iUnitUpgradePriceModifier;
}[/B]
//phungus end
Code:
void CvBuildingInfo::read(FDataStreamBase* stream)
{
	CvHotkeyInfo::read(stream);
...
	stream->Read(&m_iEspionageDefenseModifier);
	[B]stream->Read(&m_iUnitUpgradePriceModifier);[/B]	//phungus Leonardos Workshop
Code:
void CvBuildingInfo::write(FDataStreamBase* stream)
{
	CvHotkeyInfo::write(stream);
...
	stream->Write(m_iEspionageDefenseModifier);
	[B]stream->Write(m_iUnitUpgradePriceModifier);[/B]	//phungus Leonardos Workshop
Code:
bool CvBuildingInfo::read(CvXMLLoadUtility* pXML)
{
	CvString szTextVal;
...
	pXML->GetChildXmlValByName(&m_iEspionageDefenseModifier, "iEspionageDefense");
	[B]pXML->GetChildXmlValByName(&m_iUnitUpgradePriceModifier, "iUnitUpgradePriceModifier");[/B]	//phungus Leonardos Workshop

CvPlayer.h
Code:
protected:

	void uninit();

public:
...
	//phungus Leonardos Workshop
	[B]int calculateUnitUpgradePriceModifier() const;[/B]																																		// Exposed to Python[B]
	void changeUnitUpgradePriceModifier(int iChange);[/B]
	//phungus end
Code:
protected:
...
	int m_iCityDefenseModifier;
	[B]int m_iUnitUpgradePriceModifier;[/B]	//phungus Leonardos Workshop

CvPlayer.cpp
Code:
void CvPlayer::reset(PlayerTypes eID, bool bConstructorCall)
{
	int iI, iJ;
...
	m_iCityDefenseModifier = 0;
	[B]m_iUnitUpgradePriceModifier = 0;[/B]	//phungus Leonardos Workshop
Code:
void CvPlayer::processBuilding(BuildingTypes eBuilding, int iChange, CvArea* pArea)
{
	int iI, iJ;
...	changeCityDefenseModifier(GC.getBuildingInfo(eBuilding).getAllCityDefenseModifier() * iChange);
	[B]changeUnitUpgradePriceModifier(GC.getBuildingInfo(eBuilding).getUnitUpgradePriceModifier() * iChange);[/B] //phungus Leonardos Workshop
Code:
//phungus Leonardos Workshop
[B]int CvPlayer::calculateUnitUpgradePriceModifier() const
{
	return m_iUnitUpgradePriceModifier;
}

void CvPlayer::changeUnitUpgradePriceModifier(int iChange)
{
	m_iUnitUpgradePriceModifier = (m_iUnitUpgradePriceModifier + iChange);
}[/B]
//phungus end
Code:
void CvPlayer::read(FDataStreamBase* pStream)
{
...
	pStream->Read(&m_iCityDefenseModifier);
	[B]pStream->Read(&m_iUnitUpgradePriceModifier);[/B]	//phungus Leonardos Workshop
Code:
void CvPlayer::write(FDataStreamBase* pStream)
{
	int iI;
...
	pStream->Write(m_iCityDefenseModifier);
	[B]pStream->Write(m_iUnitUpgradePriceModifier);[/B]	//phungus Leonardos Workshop

CvUnit.cpp
Code:
int CvUnit::upgradePrice(UnitTypes eUnit) const
{
	int iPrice;
...
	//phungus -Leonardos Workshop
	[B]iPrice = iPrice * (100 + GET_PLAYER(getOwnerINLINE()).calculateUnitUpgradePriceModifier()) / 100;[/B]
	//phungus end

CyPlayer.h
Code:
public:
	CyPlayer();
	CyPlayer(CvPlayer* pPlayer);		// Call from C++
	CvPlayer* getPlayer() { return m_pPlayer;	}	// Call from C++
	bool isNone() { return (m_pPlayer==NULL); }
...
	int getCityDefenseModifier();
	[B]int calculateUnitUpgradePriceModifier();[/B]	//phungus Leonardos Workshop

CyPlayer.cpp
Code:
//phungus Leonardos Workshop
[B]int CyPlayer::calculateUnitUpgradePriceModifier()
{
	return m_pPlayer ? m_pPlayer->calculateUnitUpgradePriceModifier() : -1;
}[/B]
//phungus end

CyPlayerInterface1.cpp
Code:
void CyPlayerPythonInterface1(python::class_<CyPlayer>& x)
{
	OutputDebugString("Python Extension Module - CyPlayerPythonInterface1\n");
...
		.def("getCityDefenseModifier", &CyPlayer::getCityDefenseModifier, "int ()")
		[B].def("calculateUnitUpgradePriceModifier", &CyPlayer::calculateUnitUpgradePriceModifier, "int ()")[/B]	//phungus Leonardos Workshop

XML

CIV4BuildingsSchema
Code:
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
...
	<ElementType name="iEspionageDefense" content="textOnly" dt:type="int"/>
	[b]<ElementType name="iUnitUpgradePriceModifier" content="textOnly" dt:type="int"/>[/b]
...
	<ElementType name="BuildingInfo" content="eltOnly">
...
		<element type="iEspionageDefense" minOccurs="0"/>
		[b]<element type="iUnitUpgradePriceModifier" minOccurs="0"/>[/b]

CIV4GameTextInfos
Code:
	<TEXT>
		<Tag>TXT_KEY_BUILDING_UNIT_UPGRADE_COST_MOD</Tag>
		<English>[ICON_BULLET]%D1_Mod%% [ICON_GOLD] to Upgrade Units</English>
		<French>[ICON_BULLET]%D1_Mod%% [ICON_GOLD] to Upgrade Units</French>
		<German>[ICON_BULLET]%D1_Mod%% [ICON_GOLD] to Upgrade Units</German>
		<Italian>[ICON_BULLET]%D1_Mod%% [ICON_GOLD] to Upgrade Units</Italian>
		<Spanish>[ICON_BULLET]%D1_Mod%% [ICON_GOLD] to Upgrade Units</Spanish>
		<Finnish>[ICON_BULLET]%D1_Mod%% [ICON_GOLD] to Upgrade Units</Finnish>
	</TEXT>



Non State Religion Commerce Trait.
Boolean Tag that gives a trait the ability to produce culture (or other commerce types if specified by the mod, but in the default game it's always culture) from non state religions.

Spoiler :

CvCity.cpp
Code:
int CvCity::getReligionCommerceByReligion(CommerceTypes eIndex, ReligionTypes eReligion) const
{
...
	if ((GET_PLAYER(getOwnerINLINE()).getStateReligion() == eReligion) 
    || (GET_PLAYER(getOwnerINLINE()).getStateReligion() == NO_RELIGION) 
    [b]|| (GET_PLAYER(getOwnerINLINE()).isNonStateReligionCommerce()))[/b] //phungus enlightened
CvGameTextMgr.cpp
Code:
void CvGameTextMgr::parseTraits(CvWStringBuffer &szHelpString, TraitTypes eTrait, CivilizationTypes eCivilization, bool bDawnOfMan)
{
	PROFILE_FUNC();
...
		// phungus -Enlightened
		[B]if (GC.getTraitInfo(eTrait).isNonStateReligionCommerce() != 0)
		{
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_NONSTATE_RELIGIOUS_COMMERCE"));
		}[/B]
		//phungus end
Code:
if (eStateReligion == eReligion || eStateReligion == NO_RELIGION || [B](GET_PLAYER(pCity->getOwnerINLINE()).isNonStateReligionCommerce()) || bForceState)[/B]	//phungus -Enlightened

CvInfos.h
Code:
public:

	CvTraitInfo();
	virtual ~CvTraitInfo();
...
	int getMaxPlayerBuildingProductionModifier() const;				// Exposed to Python
	[B]bool isNonStateReligionCommerce() const;[/B]	//phungus -Enlightened
Code:
protected:
...
	int m_iMaxPlayerBuildingProductionModifier;	
	[B]bool m_bNonStateReligionCommerce;[/B] //phungus -Enlightened

CvInfos.cpp
Code:
CvTraitInfo::CvTraitInfo() :
...
m_iMaxPlayerBuildingProductionModifier(0),
[B]m_bNonStateReligionCommerce(false),[/B] //phungus -Enlightened
...
[B]bool CvTraitInfo::isNonStateReligionCommerce() const	//phungus -Enlightened
{
	return m_bNonStateReligionCommerce; 
}[/B]
Code:
bool CvTraitInfo::read(CvXMLLoadUtility* pXML)
{
...
	pXML->GetChildXmlValByName(&m_iMaxPlayerBuildingProductionModifier, "iMaxPlayerBuildingProductionModifier");
	[B]pXML->GetChildXmlValByName(&m_bNonStateReligionCommerce, "bNonStateReligionCommerce");[/B] //phungus -Enlightened

CvPlayer.h
Code:
protected:

	void uninit();

public:
...
	//phungus -Enlightened
	[B]bool isNonStateReligionCommerce() const;
	void setNonStateReligionCommerce(bool bNewValue);	[/B]
	//phungus -End
Code:
protected:
...
	bool m_bStrike;
	[B]bool m_bNonStateReligionCommerce;[/B]	//phungus -Enlightened

CvPlayer.cpp
Code:
		FAssertMsg((GC.getNumTraitInfos() > 0), "GC.getNumTraitInfos() is less than or equal to zero but is expected to be larger than zero in CvPlayer::init");
		for (iI = 0; iI < GC.getNumTraitInfos(); iI++)
		{
			if (hasTrait((TraitTypes)iI))
			{
				[B]setNonStateReligionCommerce(GC.getTraitInfo((TraitTypes)iI).isNonStateReligionCommerce());[/B]//phungus -Enlightened
Code:
//phungus -Enlightened
[B]bool CvPlayer::isNonStateReligionCommerce() const
{
    return m_bNonStateReligionCommerce;
}

void CvPlayer::setNonStateReligionCommerce(bool bNewValue)
{
    if (m_bNonStateReligionCommerce != bNewValue)
    {
        m_bNonStateReligionCommerce = bNewValue;
        updateReligionCommerce();
        AI_makeAssignWorkDirty();
    }
}[/B]
//phungus end
Code:
void CvPlayer::reset(PlayerTypes eID, bool bConstructorCall)
{
	int iI, iJ;
...
	m_bStrike = false;
	[B]m_bNonStateReligionCommerce =false;[/B]	//phungus -Enlightened
Code:
void CvPlayer::read(FDataStreamBase* pStream)
{
	int iI;
...
	pStream->Read(&m_bStrike);
	[B]pStream->Read(&m_bNonStateReligionCommerce);[/B]	//phungus -Enlightened
Code:
void CvPlayer::write(FDataStreamBase* pStream)
{
	int iI;
...
	pStream->Write(m_bStrike);
	[B]pStream->Write(m_bNonStateReligionCommerce);[/B] //phungus -Enlightened

XML

CIV4CivilizationsSchema
Code:
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
...
	<ElementType name="iMaxPlayerBuildingProductionModifier" content="textOnly" dt:type="int"/>
	[b]<ElementType name="bNonStateReligionCommerce" content="textOnly" dt:type="boolean"/>[/b]
...
	<ElementType name="TraitInfo" content="eltOnly">
...
		<element type="iMaxPlayerBuildingProductionModifier" minOccurs="0"/>
		[b]<element type="bNonStateReligionCommerce" minOccurs="0"/>[/b]

CIV4GameTextInfos.xml
Code:
	<TEXT>
		<Tag>TXT_KEY_TRAIT_NONSTATE_RELIGIOUS_COMMERCE</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]Non State [ICON_RELIGION] Still produces [ICON_CULTURE][NEWLINE][SPACE][SPACE][ICON_BULLET]Revolutionary Effect of Non State [ICON_RELIGION] halved.</English>
		<French>
			<Text>[NEWLINE][SPACE][SPACE][ICON_BULLET]Non State [ICON_RELIGION] Still produces [ICON_CULTURE][NEWLINE][SPACE][SPACE][ICON_BULLET]Revolutionary Effect of Non State [ICON_RELIGION] halved.</Text>
			<Gender>Male:Female:Male:Female</Gender>
			<Plural>0:0:1:1</Plural>
		</French>
		<German>
			<Text>[NEWLINE][SPACE][SPACE][ICON_BULLET]Non State [ICON_RELIGION] Still produces [ICON_CULTURE][NEWLINE][SPACE][SPACE][ICON_BULLET]Revolutionary Effect of Non State [ICON_RELIGION] halved.</Text>
			<Gender>Male:Neuter</Gender>
			<Plural>0:0</Plural>
		</German>
		<Italian>
			<Text>[NEWLINE][SPACE][SPACE][ICON_BULLET]Non State [ICON_RELIGION] Still produces [ICON_CULTURE][NEWLINE][SPACE][SPACE][ICON_BULLET]Revolutionary Effect of Non State [ICON_RELIGION] halved.</Text>
			<Gender>Male:Female</Gender>
			<Plural>0</Plural>
		</Italian>
		<Spanish>
			<Text>[NEWLINE][SPACE][SPACE][ICON_BULLET]Non State [ICON_RELIGION] Still produces [ICON_CULTURE][NEWLINE][SPACE][SPACE][ICON_BULLET]Revolutionary Effect of Non State [ICON_RELIGION] halved.</Text>
			<Gender>Male:Female</Gender>
			<Plural>0</Plural>
		</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]Muu kuin valtion [ICON_RELIGION] tuottaa kuitenkin [ICON_CULTURE][NEWLINE][SPACE][SPACE][ICON_BULLET]Muun kuin valtion [ICON_RELIGION] vallankumouksellinen vaikutus puolittuu.</Finnish>
	</TEXT>
 
The stuff in the second post is pretty much LoR code, but would be nice to have in RevDCM for other modders to use. Also would just be nice for me because it'd mean I'd no longer have to merge source and compile a new gamecore when RevDCM is updated :mischief:, and ditto for if there is a critical bug report in LoR that is caused by a RevDCM component. Since the update to BtS 3.19 that hasn't happened yet (all unforseen bugs have been caused by me, and not RevDCM), but in the earlier builds there were a few reports, so having this be default would save time in tracking down any issues that may be reported.

I also would really like to clone the Rev Civic XML tags into Trait infos, this would allow for great modding abilities for traits. But I can't figure out how to do so.

:please: :please: :please:

Please tell me how, or point me in the right direction on how to clone the XML rev tags in Civic Infos into TraitInfos. I mean I can clone the tags, but not their functionality, as they are used by RevCivicUtils.py which I have no idea how that works :sad:
 
I also, would like to propose some SDK changes, in particular, the changes Dom Pedrohas made in his recent modcomp. The changes don't alter gameplay, rather they unlock more python and XML changes. It would be very useful for all the mods that use RevDCM at its core.
 
I also, would like to propose some SDK changes, in particular, the changes Dom Pedrohas made in his recent modcomp. The changes don't alter gameplay, rather they unlock more python and XML changes. It would be very useful for all the mods that use RevDCM at its core.

The thread title is specific code proposals, not requested mod comps. What I have here is specific code that's merged with the RevDCM SDK, packaged ready to go, with the specific code highlighted. Maybe the comp you're requesting is good code and would make a valueble addition. But please follow the format I've laid out, or make your request to include a modcomp in the standard way. I'm not trying to be rude, but I spent hours laying this out here in that format and having you come in and request a modcomp that you just link to is kind of irking.


Edit: Apon reading the link it is a good idea. Have to agree. But still, please try to keep this thread limited to specific code that you've already merged, tested, packaged and is ready to go into RevDCM.
 
Rev Trait effects. Clones some of the Civic Revolution effects into Trait Infos:

Spoiler :

From CvGameTextMgr.cpp
Code:
void CvGameTextMgr::parseTraits(CvWStringBuffer &szHelpString, TraitTypes eTrait, CivilizationTypes eCivilization, bool bDawnOfMan)
{
	PROFILE_FUNC();
...
	if (!bDawnOfMan)
	{
...
		// phungus Rev Trait Effects
		[B]if (GC.getTraitInfo(eTrait).getRevIdxLocal() != 0)
		{
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_REVIDX_LOCAL", GC.getTraitInfo(eTrait).getRevIdxLocal()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxNational() != 0)
		{
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_REVIDX_NATIONAL", GC.getTraitInfo(eTrait).getRevIdxNational()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxHolyCityGood() != 0)
		{
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_REV_GOOD_HOLY_CITY", GC.getTraitInfo(eTrait).getRevIdxHolyCityGood()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxHolyCityBad() != 0)
		{
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_REV_BAD_HOLY_CITY", GC.getTraitInfo(eTrait).getRevIdxHolyCityBad()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxNationalityMod() != 0)
		{
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getTraitInfo(eTrait).getRevIdxNationalityMod() );
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_REV_NATIONALITY_MOD", szTempBuffer.GetCString()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxBadReligionMod() != 0)
		{
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getTraitInfo(eTrait).getRevIdxBadReligionMod() );
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_BAD_RELIGION_MOD", szTempBuffer.GetCString()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxGoodReligionMod() != 0)
		{
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getTraitInfo(eTrait).getRevIdxGoodReligionMod() );
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_GOOD_RELIGION_MOD", szTempBuffer.GetCString()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxDistanceMod() < 0)
		{
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getTraitInfo(eTrait).getRevIdxDistanceMod() );
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_GOOD_DISTANCE_MOD", szTempBuffer.GetCString()));
		}

		if (GC.getTraitInfo(eTrait).getRevIdxDistanceMod() > 0)
		{
			CvWString szTempBuffer;
			szTempBuffer.Format(L"%.0f", 100 * GC.getTraitInfo(eTrait).getRevIdxDistanceMod() );
			szHelpString.append(gDLL->getText("TXT_KEY_TRAIT_BAD_DISTANCE_MOD", szTempBuffer.GetCString()));
		}[/B]
		// Rev Trait End
From CvInfos.h
Code:
public:

	CvTraitInfo();
	virtual ~CvTraitInfo();
...
	int getMaxPlayerBuildingProductionModifier() const;				// Exposed to Python
	//Phungus Rev Trait Effects
    [B]DllExport int getRevIdxLocal() const;
    DllExport int getRevIdxNational() const;
    DllExport int getRevIdxHolyCityGood() const;
    DllExport int getRevIdxHolyCityBad() const;
    DllExport float getRevIdxNationalityMod() const;
    DllExport float getRevIdxBadReligionMod() const;
    DllExport float getRevIdxGoodReligionMod() const;
    DllExport float getRevIdxDistanceMod() const;[/B]
	//Phungus Rev Traits End
Code:
protected:
...
	int m_iMaxPlayerBuildingProductionModifier;	
	//Phungus Rev Trait Effects
[B]    int m_iRevIdxLocal;
    int m_iRevIdxNational;
    int m_iRevIdxHolyCityGood;
    int m_iRevIdxHolyCityBad;
    float m_fRevIdxNationalityMod;
    float m_fRevIdxGoodReligionMod;
    float m_fRevIdxBadReligionMod;
    float m_fRevIdxDistanceMod;[/B]
	//Phungus Rev Traits End
From CvInfos.cpp
Code:
CvTraitInfo::CvTraitInfo() :
...
m_iMaxPlayerBuildingProductionModifier(0),
//Phungus Rev Trait Effects
[B]m_iRevIdxLocal(0),
m_iRevIdxNational(0),
m_iRevIdxHolyCityGood(0),
m_iRevIdxHolyCityBad(0),
m_fRevIdxNationalityMod(0),
m_fRevIdxGoodReligionMod(0),
m_fRevIdxBadReligionMod(0),
m_fRevIdxDistanceMod(0),[/B]
//Phungs Rev Traits End
Code:
CvTraitInfo::~CvTraitInfo()
...
int CvTraitInfo::getMaxPlayerBuildingProductionModifier() const	
{
	return m_iMaxPlayerBuildingProductionModifier; 
}

//Phungus rev Trait Effects

[B]int CvTraitInfo::getRevIdxLocal() const
{
    return m_iRevIdxLocal;
}

int CvTraitInfo::getRevIdxNational() const
{
    return m_iRevIdxNational;
}

int CvTraitInfo::getRevIdxHolyCityGood() const
{
    return m_iRevIdxHolyCityGood;
}

int CvTraitInfo::getRevIdxHolyCityBad() const
{
    return m_iRevIdxHolyCityBad;
}

float CvTraitInfo::getRevIdxNationalityMod() const
{
    return m_fRevIdxNationalityMod;
}

float CvTraitInfo::getRevIdxBadReligionMod() const
{
    return m_fRevIdxBadReligionMod;
}

float CvTraitInfo::getRevIdxGoodReligionMod() const
{
    return m_fRevIdxGoodReligionMod;
}

float CvTraitInfo::getRevIdxDistanceMod() const
{
    return m_fRevIdxDistanceMod;
}[/B]

//Phungus Rev Traits End
Code:
bool CvTraitInfo::read(CvXMLLoadUtility* pXML)
{
...
	pXML->GetChildXmlValByName(&m_iMaxPlayerBuildingProductionModifier, "iMaxPlayerBuildingProductionModifier");
	//phungus Rev Trait Effects
    [B]pXML->GetChildXmlValByName(&m_iRevIdxLocal, "iRevIdxLocal");
    pXML->GetChildXmlValByName(&m_iRevIdxNational, "iRevIdxNational");
    pXML->GetChildXmlValByName(&m_iRevIdxHolyCityGood, "iRevIdxHolyCityGood");
    pXML->GetChildXmlValByName(&m_iRevIdxHolyCityBad, "iRevIdxHolyCityBad");
    pXML->GetChildXmlValByName(&m_fRevIdxNationalityMod, "fRevIdxNationalityMod");
    pXML->GetChildXmlValByName(&m_fRevIdxBadReligionMod, "fRevIdxBadReligionMod");
    pXML->GetChildXmlValByName(&m_fRevIdxGoodReligionMod, "fRevIdxGoodReligionMod");
    pXML->GetChildXmlValByName(&m_fRevIdxDistanceMod, "fRevIdxDistanceMod");[/B]
	//phungus Rev Traits End
From CvInfoInterface3.cpp
Code:
	python::class_<CvTraitInfo, python::bases<CvInfoBase> >("CvTraitInfo")
...
		.def("getMaxPlayerBuildingProductionModifier", &CvTraitInfo::getMaxPlayerBuildingProductionModifier, "int ()")
		//phungus Rev Trait Effects
		[B].def("getRevIdxLocal", &CvTraitInfo::getRevIdxLocal, "int ()")
		.def("getRevIdxNational", &CvTraitInfo::getRevIdxNational, "int ()")
		.def("getRevIdxHolyCityGood", &CvTraitInfo::getRevIdxHolyCityGood, "int ()")
		.def("getRevIdxHolyCityBad", &CvTraitInfo::getRevIdxHolyCityBad, "int ()")
		.def("getRevIdxNationalityMod", &CvTraitInfo::getRevIdxNationalityMod, "float ()")
		.def("getRevIdxBadReligionMod", &CvTraitInfo::getRevIdxBadReligionMod, "float ()")
		.def("getRevIdxGoodReligionMod", &CvTraitInfo::getRevIdxGoodReligionMod, "float ()")
		.def("getRevIdxDistanceMod", &CvTraitInfo::getRevIdxDistanceMod, "float ()")[/B]
		//phungus Rev Traits End

RevTraitUtils.py
Code:
# Traits functions for Revolution Mod
#
# by jdog5000
# Version 1.5

from CvPythonExtensions import *
import CvUtil
import PyHelpers
import pickle
# --------- Revolution mod -------------
import RevDefs
import RevData
import SdToolKitCustom
import RevInstances


# globals
gc = CyGlobalContext()
PyPlayer = PyHelpers.PyPlayer
PyInfo = PyHelpers.PyInfo
game = CyGame()
localText = CyTranslator()


########################## Traits effect helper functions #####################

def getTraitsRevIdxLocal( iPlayer ) :
	pPlayer = gc.getPlayer(iPlayer)

	if( pPlayer.isNone() ) :
		return [0,list(),list()]

	if( pPlayer.getNumCities() == 0 ) :
		return [0,list(),list()]

	localRevIdx = 0
	posList = list()
	negList = list()

	for i in range(gc.getNumTraitInfos()):
		if pPlayer.hasTrait(i):
			traitInfo = gc.getTraitInfo(i)
			traitEffect = traitInfo.getRevIdxLocal()
			if( traitEffect > 0 ) :
				negList.append( (traitEffect, traitInfo.getDescription()) )
			elif( traitEffect < 0 ) :
				posList.append( (traitEffect, traitInfo.getDescription()) )

			#CvUtil.pyPrint("  Rev - %s local effect: %d"%(traitInfo.getDescription(),traitEffect))

			localRevIdx += traitEffect

	return [localRevIdx,posList,negList]


def getTraitsRevIdxNational( iPlayer ) :
	pPlayer = gc.getPlayer(iPlayer)

	if( pPlayer.isNone() ) :
		return [0,list(),list()]

	if( pPlayer.getNumCities() == 0 ) :
		return [0,list(),list()]

	localRevIdx = 0
	posList = list()
	negList = list()

	for i in range(gc.getNumTraitInfos()):
		if pPlayer.hasTrait(i):
			traitInfo = gc.getTraitInfo(i)
			traitEffect = traitInfo.getRevIdxNational()
			if( traitEffect > 0 ) :
				negList.append( (traitEffect, traitInfo.getDescription()) )
			elif( traitEffect < 0 ) :
				posList.append( (traitEffect, traitInfo.getDescription()) )

			#CvUtil.pyPrint("  Rev - %s local effect: %d"%(traitInfo.getDescription(),traitEffect))

			localRevIdx += traitEffect

	return [localRevIdx,posList,negList]


def getTraitsHolyCityEffects( iPlayer ) :

	pPlayer = gc.getPlayer(iPlayer)

	if( pPlayer.isNone() ) :
		return [0,0]

	if( pPlayer.getNumCities() == 0 ) :
		return [0,0]

	goodEffect = 0
	badEffect = 0

	for i in range(gc.getNumTraitInfos()):
		if pPlayer.hasTrait(i):
			traitInfo = gc.getTraitInfo(i)
			goodEffect += traitInfo.getRevIdxHolyCityGood()
			badEffect += traitInfo.getRevIdxHolyCityBad()

	return [goodEffect,badEffect]


def getTraitsNationalityMod( iPlayer ) :

	pPlayer = gc.getPlayer(iPlayer)

	if( pPlayer.isNone() ) :
		return 0

	if( pPlayer.getNumCities() == 0 ) :
		return 0

	natMod = 0

	for i in range(gc.getNumTraitInfos()):
		if pPlayer.hasTrait(i):
			traitInfo = gc.getTraitInfo(i)
			natMod += traitInfo.getRevIdxNationalityMod()

	return natMod


def getTraitsReligionMods( iPlayer ) :

	pPlayer = gc.getPlayer(iPlayer)

	if( pPlayer.isNone() ) :
		return [0,0]

	if( pPlayer.getNumCities() == 0 ) :
		return [0,0]

	goodMod = 0
	badMod = 0

	for i in range(gc.getNumTraitInfos()):
		if pPlayer.hasTrait(i):
			traitInfo = gc.getTraitInfo(i)
			goodMod += traitInfo.getRevIdxGoodReligionMod()
			badMod += traitInfo.getRevIdxBadReligionMod()

	return [goodMod,badMod]


def getTraitsDistanceMod( iPlayer ) :

	pPlayer = gc.getPlayer(iPlayer)

	if( pPlayer.isNone() ) :
		return 0

	if( pPlayer.getNumCities() == 0 ) :
		return 0

	distMod = 0

	for i in range(gc.getNumTraitInfos()):
		if pPlayer.hasTrait(i):
			traitInfo = gc.getTraitInfo(i)
			distMod += traitInfo.getRevIdxDistanceMod()

	return distMod

RevUtils.py
Code:
from CvPythonExtensions import *
import CvUtil
import PyHelpers
import pickle
# --------- Revolution mod -------------
import RevDefs
import RevData
import SdToolKitCustom
import RevInstances
# Other Util files
from RevCivicsUtils import *
#phungus Rev Trait Effects
[B]from RevTraitsUtils import *[/B]
#Rev Trait End

Revolution.py
Code:
            distMod = 1.0 + RevUtils.getCivicsDistanceMod( iPlayer )
            [B]distMod += RevUtils.getTraitsDistanceMod( iPlayer )[/B]	#phungus Rev Trait Effects
            distMod *= self.distToCapModifier
Code:
                                if( (not holyCityGood == 0) and (holyCityOwnerID == iPlayer) ) :
                                    #phungus Rev Trait Effects
                                    [B][traitHolyCityGood, traitHolyCityBad] = RevUtils.getTraitsHolyCityEffects(iPlayer)
                                    if ( traitHolyCityGood != 0 ) :
                                        holyCityGood += traitHolyCityGood[/B]
                                    #Rev Trait End
                                    posList.append( (-holyCityGood, localText.getText("TXT_KEY_REV_WATCH_HOLY_CITY",())) )
                                    relGoodIdx += holyCityGood
                                elif( (not holyCityBad == 0) and (not gc.getPlayer(holyCityOwnerID).getStateReligion() == stateRel) ) :
                                    #phungus Rev Trait Effects
                                    [B][traitHolyCityGood, traitHolyCityBad] = RevUtils.getTraitsHolyCityEffects(iPlayer)
                                    if ( traitHolyCityBad != 0 ) :
                                        holyCityBad += traitHolyCityBad[/B]
                                    #Rev Trait End
                                    negList.append( (holyCityBad, localText.getText("TXT_KEY_REV_WATCH_HEATHENS",())) )
                                    localRevIdx += holyCityBad

                    #phungus Rev Trait Effects
                    [civicsRelGoodMod,civicsRelBadMod] = RevUtils.getCivicsReligionMods(iPlayer)
                    relGoodMod += civicRelGoodMod
                    relBadMod += civicRelBadMod
                    [B][traitRelGoodMod,traitRelBadMod] = RevUtils.getTraitsReligionMods(iPlayer)
                    relGoodMod += traitRelGoodMod
                    relBadMod += traitRelBadMod[/B]
					#Rev Trait End
Code:
            if( natIdx > 0 ) :
                natMod = RevUtils.getCivicsNationalityMod( iPlayer )
                [B]natMod += RevUtils.getTraitsNationalityMod( iPlayer )[/B]	#phungus Rev Trait Effect
                natIdx = int(math.floor( natIdx*(1.0 + natMod) + .5 ))
Code:
        [civicIdx,civicPosList,civicNegList] = RevUtils.getCivicsCivStabilityIndex( iPlayer )
        civStabilityIdx += -civicIdx

        posList.extend( civicPosList )
        negList.extend( civicNegList )


		#Phungus Rev Trait Effect
        [B][traitIdx,traitPosList,traitNegList] = RevUtils.getTraitsRevIdxLocal( iPlayer )
        civRevIdx += traitIdx

        [traitIdx,traitPosList,traitNegList] = RevUtils.getTraitsRevIdxNational( iPlayer )
        civRevIdx += -traitIdx

        posList.extend( traitPosList )
        negList.extend( traitNegList )[/B]
		#Phungus Rev Traits End

CIV4CivilizationsSchema.xml
Code:
	<ElementType name="iMaxPlayerBuildingProductionModifier" content="textOnly" dt:type="int"/>
	<!-- Phungus Rev Trait Effects -->
	[B]<ElementType name="iRevIdxLocal" content= "textOnly" dt:type="int"/>
	<ElementType name="iRevIdxNational" content= "textOnly" dt:type="int"/>
	<ElementType name="iRevIdxHolyCityGood" content="textOnly" dt:type="int"/>
	<ElementType name="iRevIdxHolyCityBad" content="textOnly" dt:type="int"/>
	<ElementType name="fRevIdxNationalityMod" content="textOnly"/>
	<ElementType name="fRevIdxBadReligionMod" content="textOnly"/>
	<ElementType name="fRevIdxGoodReligionMod" content="textOnly"/>
	<ElementType name="fRevIdxDistanceMod" content="textOnly"/>
	<ElementType name="bNonStateReligionCommerce" content="textOnly" dt:type="boolean"/>[/B]
	<!-- End Phungus Traits -->
Code:
	<ElementType name="TraitInfo" content="eltOnly">
		<element type="Type"/>
...
		<element type="iMaxPlayerBuildingProductionModifier" minOccurs="0"/>
		<!-- Phungus Rev Trait Effects -->
		[B]<element type="iRevIdxLocal" minOccurs="0"/>
		<element type="iRevIdxNational" minOccurs="0"/>
		<element type="iRevIdxHolyCityGood" minOccurs="0"/>
		<element type="iRevIdxHolyCityBad" minOccurs="0"/>
		<element type="fRevIdxNationalityMod" minOccurs="0"/>
		<element type="fRevIdxBadReligionMod" minOccurs="0"/>
		<element type="fRevIdxGoodReligionMod" minOccurs="0"/>
		<element type="fRevIdxDistanceMod" minOccurs="0"/>
		<element type="bNonStateReligionCommerce" minOccurs="0"/>[/B]
		<!-- End Phungus Traits -->
CIV4GameTextInfos.xml
Code:
	<TEXT>
		<Tag>TXT_KEY_TRAIT_REVIDX_LOCAL</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to local RevIdx Penalty</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to local RevIdx Penalty</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to local RevIdx Penalty</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to local RevIdx Penalty</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to local RevIdx Penalty</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to local RevIdx Penalty</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_REVIDX_NATIONAL</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to National Revolution Stability Penalty</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to National Revolution Stability Penalty</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to National Revolution Stability Penalty</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to National Revolution Stability Penalty</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to National Revolution Stability Penalty</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to National Revolution Stability Penalty</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_REV_GOOD_HOLY_CITY</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to RevIdx bonus from State [ICON_RELIGION] Holy City</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to RevIdx bonus from State [ICON_RELIGION] Holy City</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to RevIdx bonus from State [ICON_RELIGION] Holy City</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to RevIdx bonus from State [ICON_RELIGION] Holy City</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to RevIdx bonus from State [ICON_RELIGION] Holy City</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 to RevIdx bonus from State [ICON_RELIGION] Holy City</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_REV_BAD_HOLY_CITY</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 reduction to RevIdx penalty from Non State [ICON_RELIGION] Holy City</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 reduction to RevIdx penalty from Non State [ICON_RELIGION] Holy City</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 reduction to RevIdx penalty from Non State [ICON_RELIGION] Holy City</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 reduction to RevIdx penalty from Non State [ICON_RELIGION] Holy City</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 reduction to RevIdx penalty from Non State [ICON_RELIGION] Holy City</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%D1 reduction to RevIdx penalty from Non State [ICON_RELIGION] Holy City</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_REV_NATIONALITY_MOD</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]%s1% Change to Nationality Based Revolution Effects</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Nationality Based Revolution Effects</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Nationality Based Revolution Effects</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Nationality Based Revolution Effects</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Nationality Based Revolution Effects</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Nationality Based Revolution Effects</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_BAD_RELIGION_MOD</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]%s1% Change to Revolution Penalty from Non State [ICON_RELIGION]</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Revolution Penalty from Non State [ICON_RELIGION]</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Revolution Penalty from Non State [ICON_RELIGION]</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Revolution Penalty from Non State [ICON_RELIGION]</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Revolution Penalty from Non State [ICON_RELIGION]</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% Change to Revolution Penalty from Non State [ICON_RELIGION]</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_GOOD_RELIGION_MOD</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%s1% to Revolution Bonus from State [ICON_RELIGION]</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to Revolution Bonus from State [ICON_RELIGION]</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to Revolution Bonus from State [ICON_RELIGION]</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to Revolution Bonus from State [ICON_RELIGION]</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to Revolution Bonus from State [ICON_RELIGION]</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to Revolution Bonus from State [ICON_RELIGION]</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_GOOD_DISTANCE_MOD</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]%s1% to RevIdx Penalty from City Distance</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% to RevIdx Penalty from City Distance</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% to RevIdx Penalty from City Distance</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% to RevIdx Penalty from City Distance</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% to RevIdx Penalty from City Distance</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]%S1% to RevIdx Penalty from City Distance</Finnish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_TRAIT_BAD_DISTANCE_MOD</Tag>
		<English>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%s1% to RevIdx Penalty from City Distance</English>
		<French>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to RevIdx Penalty from City Distance</French>
		<German>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to RevIdx Penalty from City Distance</German>
		<Italian>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to RevIdx Penalty from City Distance</Italian>
		<Spanish>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to RevIdx Penalty from City Distance</Spanish>
		<Finnish>[NEWLINE][SPACE][SPACE][ICON_BULLET]+%S1% to RevIdx Penalty from City Distance</Finnish>
	</TEXT>
 
The RevTrait effects would be nice to have for mod modders because it adds more utility and allows us to modify Revolution effects for traits, for instance I use it to give a good bonus against the distance penalty for the Imperialist trait. Granted I originally (and other mod modders as well can) hard code these functions in Revolution.py itself, but the thing is it's nicer and allows for easier tweaks when effects are softcoded into the XML, it's a long term moding tool. Also if you include Rev Trait effects by default in RevDCM it would mean you could check my code and make sure I've set everything up properly :mischief:
 
Wow, nice work phungus420. It looks like I can use your code to get the effect I am looking for, which is -25% chance of revolutions occuring. I think I can use your local and national rev index modifiers to do this, correct? I understand that the way things are calculated that it may not exactly work out this way, but am I correct that in using those two tags would approximate the effect I am looking for?

Cheers,
ripple01
 
There is an error that causes an exception in the religion part of the code, I've got it fixed, but probably wol't upload it until the next RevDCM release, as it sounds like there will be some significant changes, and also I'm hoping that Rev Trait effects gets incorporated into the RevDCM core :mischief:
 
Note adding a Revolution check using:

if (GC.getGameINLINE().isOption(GAMEOPTION_REVOLUTION))

to the game text manager stuff that exposes the Rev effects for civics and traits looks much better, as it stops displaying this stuff when players don't have revolutions on. Interestingly enough though, it does keep it displayed if a player was using revolutions before. So if you fire up the game and you normally play with revolutions, in the opening game menu it'll display the rev stuff, but if you don't ever play with this option on, it wol't display. I suppose this is because the game options are carried over from the last game you played into the start menu, but anyway it makes the displaying of information work well.
 
I'm not trying to be a pain, but are you sure? I think phungus's modifiers are percentages, so that a -3 would only lower the the national rev index by 3%. I am surprised to hear that this would have a noticeable effect, but maybe I am totally ignorant when understanding how these rev indexes are calculated...

Cheers,
ripple01
 
Just checked the latest SVN source, and none of this was included :(

It wouldn't take any time to add Barbarian World to RevDCM with how it's laid out here. And the rev trait effects would be awesome to have as well. I can see why you wouldn't include the unit upgrade code or the nonstatereligioncommerce code, since it's not helpful to RevDCM itself, only for other moders (but it wouldn't hurt anything). The rest of the code (exposing Revolution civic effects to the civilopedia, adding Barbarian World, and adding Revolution modifiers to trait infos) would be very handy to have. Bumping this in the hopes the code gets added.
 
Top Bottom