Quick Modding Questions Thread

So if do the following changes, it should be fine?

EDIT: Better put it into spoiler

Spoiler :


CvTeam.h

This...
C++:
// Movement Limits by 45deg - START
    int getExtendMovementLimitsCount() const;                                                                            
    bool isExtendMovementLimits() const;                                                                                                            
    void changeExtendMovementLimitsCount(int iChange);

    int getRemoveMovementLimitsCount() const;                                                                            
    bool isRemoveMovementLimits() const;                                                                                                            
    void changeRemoveMovementLimitsCount(int iChange);
// Movement Limits by 45deg - END

...to this
C++:
// Movement Limits by 45deg - START
    int getExtendMovementLimits() const;
    void setExtendMovementLimits(int iNewValue);
    void changeExtendMovementLimits(int iChange);
 
    int getRemoveMovementLimitsCount() const;                                                                            
    bool isRemoveMovementLimits() const;                                                                                                            
    void changeRemoveMovementLimitsCount(int iChange);
// Movement Limits by 45deg - END

And leave this part unchanged:
C++:
// Movement Limits by 45deg - START
    int m_iExtendMovementLimitsCount;  
    int m_iRemoveMovementLimitsCount;
// Movement Limits by 45deg - END

CvTeam.cpp

This...
C++:
// Movement Limits by 45deg - START
    if (kTech.isExtendMovementLimits())
    {
        changeExtendMovementLimitsCount(iChange);
    }

    if (kTech.isRemoveMovementLimits())
    {
        changeRemoveMovementLimitsCount(iChange);
    }
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START
    if (kTech.getExtendMovementLimits() != 0)
    {
        changeExtendMovementLimitsCount(kTech.getExtendMovementLimits() * iChange);
    }

    if (kTech.isRemoveMovementLimits())
    {
        changeRemoveMovementLimitsCount(iChange);
    }
// Movement Limits by 45deg - END

And this...
C++:
// Movement Limits by 45deg - START
bool CvTeam::isExtendMovementLimits() const                                         
{
    return (getExtendMovementLimitsCount() > 0);
}

int CvTeam::getExtendMovementLimitsCount() const
{
    return m_iExtendMovementLimitsCount;
}

void CvTeam::changeExtendMovementLimitsCount(int iChange)                       
{
    m_iExtendMovementLimitsCount = (m_iExtendMovementLimitsCount + iChange);
    FAssert(getExtendMovementLimitsCount() >= 0);
}

bool CvTeam::isRemoveMovementLimits() const                                         
{
    return (getRemoveMovementLimitsCount() > 0);
}

int CvTeam::getRemoveMovementLimitsCount() const
{
    return m_iRemoveMovementLimitsCount;
}

void CvTeam::changeRemoveMovementLimitsCount(int iChange)                       
{
    m_iRemoveMovementLimitsCount = (m_iRemoveMovementLimitsCount + iChange);
    FAssert(getRemoveMovementLimitsCount() >= 0);
}
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START

// CHANGED: Return int instead of bool
int CvTeam::getExtendMovementLimits() const
{
    return getExtendMovementLimitsCount();
}

int CvTeam::getExtendMovementLimitsCount() const
{
    return m_iExtendMovementLimitsCount;
}

void CvTeam::changeExtendMovementLimitsCount(int iChange)
{
    m_iExtendMovementLimitsCount = (m_iExtendMovementLimitsCount + iChange);
    FAssert(getExtendMovementLimitsCount() >= 0);
}

// KEPT AS-IS: Still treated as boolean
bool CvTeam::isRemoveMovementLimits() const
{
    return (getRemoveMovementLimitsCount() > 0);
}

int CvTeam::getRemoveMovementLimitsCount() const
{
    return m_iRemoveMovementLimitsCount;
}

void CvTeam::changeRemoveMovementLimitsCount(int iChange)
{
    m_iRemoveMovementLimitsCount = (m_iRemoveMovementLimitsCount + iChange);
    FAssert(getRemoveMovementLimitsCount() >= 0);
}

// Movement Limits by 45deg - END

CvInfos.cpp

This...
C++:
// Movement Limits by 45deg - START
,m_bExtendMovementLimits(false)
,m_bRemoveMovementLimits(false)
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START
,m_iExtendMovementLimits(0)  // Changed from m_bExtendMovementLimits(false)
,m_bRemoveMovementLimits(false)
// Movement Limits by 45deg - END

This...
C++:
CvGameSpeedInfo::CvGameSpeedInfo() :
m_iGrowthPercent(0),
m_iTrainPercent(0),
m_iConstructPercent(0),
m_iCreatePercent(0),
m_iResearchPercent(0),
m_iBuildPercent(0),
m_iImprovementPercent(0),
m_iGreatPeoplePercent(0),
m_iAnarchyPercent(0),
m_iBarbPercent(0),
m_iFeatureProductionPercent(0),
m_iUnitDiscoverPercent(0),
m_iUnitHurryPercent(0),
m_iUnitTradePercent(0),
m_iUnitGreatWorkPercent(0),
m_iGoldenAgePercent(0),
m_iHurryPercent(0),
m_iHurryConscriptAngerPercent(0),
m_iInflationOffset(0),
m_iInflationPercent(0),
//ls612: Begin
m_iGoldModifier(0),
m_iOccupationTimePopulationPercent(0),
//ls612: End
m_iVictoryDelayPercent(0),
m_iNumTurnIncrements(0),
m_iTraitGainPercent(0), // f1rpo: Better initialize this
m_pGameTurnInfo(NULL),
m_bEndDatesCalculated(false)
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
,m_iUnitMovementPercent(0)
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/
,m_Percent()
{
}

...to this:
C++:
CvGameSpeedInfo::CvGameSpeedInfo() :
m_iGrowthPercent(0),
m_iTrainPercent(0),
m_iConstructPercent(0),
m_iCreatePercent(0),
m_iResearchPercent(0),
m_iBuildPercent(0),
m_iImprovementPercent(0),
m_iGreatPeoplePercent(0),
m_iAnarchyPercent(0),
m_iBarbPercent(0),
m_iFeatureProductionPercent(0),
m_iUnitDiscoverPercent(0),
m_iUnitHurryPercent(0),
m_iUnitTradePercent(0),
m_iUnitGreatWorkPercent(0),
m_iGoldenAgePercent(0),
m_iHurryPercent(0),
m_iHurryConscriptAngerPercent(0),
m_iInflationOffset(0),
m_iInflationPercent(0),
//ls612: Begin
m_iGoldModifier(0),
m_iOccupationTimePopulationPercent(0),
//ls612: End
m_iVictoryDelayPercent(0),
m_iNumTurnIncrements(0),
m_iTraitGainPercent(0), // f1rpo: Better initialize this
m_pGameTurnInfo(NULL),
m_bEndDatesCalculated(false)
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
,m_iUnitMovementPercent(0)
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/
// Replace bool initialization with int initialization:
,m_iExtendMovementLimits(0)  // <<<<< CHANGED HERE
,m_Percent()
{
}

This...
C++:
CvGameSpeedInfo::~CvGameSpeedInfo()
{
    SAFE_DELETE_ARRAY(m_pGameTurnInfo);
}

int CvGameSpeedInfo::getGrowthPercent() const         
{
    return m_iGrowthPercent;
}

int CvGameSpeedInfo::getTrainPercent() const         
{
    return m_iTrainPercent;
}

int CvGameSpeedInfo::getConstructPercent() const 
{
    return m_iConstructPercent;
}

int CvGameSpeedInfo::getCreatePercent() const         
{
    return m_iCreatePercent;
}

int CvGameSpeedInfo::getResearchPercent() const     
{
    return m_iResearchPercent;
}

int CvGameSpeedInfo::getBuildPercent() const         
{
    return m_iBuildPercent;
}

int CvGameSpeedInfo::getImprovementPercent() const
{
    return m_iImprovementPercent;
}

int CvGameSpeedInfo::getGreatPeoplePercent() const
{
    return m_iGreatPeoplePercent;
}

int CvGameSpeedInfo::getAnarchyPercent() const     
{
    return m_iAnarchyPercent;
}

int CvGameSpeedInfo::getBarbPercent() const
{
    return m_iBarbPercent;
}

int CvGameSpeedInfo::getFeatureProductionPercent() const 
{
    return m_iFeatureProductionPercent;
}

int CvGameSpeedInfo::getUnitDiscoverPercent() const 
{
    return m_iUnitDiscoverPercent;
}

int CvGameSpeedInfo::getUnitHurryPercent() const
{
    return m_iUnitHurryPercent;
}

int CvGameSpeedInfo::getUnitTradePercent() const
{
    return m_iUnitTradePercent;
}

int CvGameSpeedInfo::getUnitGreatWorkPercent() const
{
    return m_iUnitGreatWorkPercent;
}

int CvGameSpeedInfo::getGoldenAgePercent() const
{
    return m_iGoldenAgePercent;
}

int CvGameSpeedInfo::getHurryPercent() const
{
    return m_iHurryPercent;
}

int CvGameSpeedInfo::getHurryConscriptAngerPercent() const
{
    return m_iHurryConscriptAngerPercent;
}

int CvGameSpeedInfo::getInflationOffset() const
{
    return m_iInflationOffset;
}

int CvGameSpeedInfo::getInflationPercent() const
{
    return m_iInflationPercent;
}

//ls612: Begin
int CvGameSpeedInfo::getGoldModifier() const
{
    return m_iGoldModifier;
}

int CvGameSpeedInfo::getOccupationTimePopulationPercent() const
{
    return m_iOccupationTimePopulationPercent;
}
//ls612: End


int CvGameSpeedInfo::getVictoryDelayPercent() const
{
    return m_iVictoryDelayPercent;
}

int CvGameSpeedInfo::getNumTurnIncrements() const
{
    return m_iNumTurnIncrements;
}

/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
int CvGameSpeedInfo::getUnitMovementPercent() const
{
    return m_iUnitMovementPercent;
}
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

...to this:
C++:
CvGameSpeedInfo::~CvGameSpeedInfo()
{
    SAFE_DELETE_ARRAY(m_pGameTurnInfo);
}

int CvGameSpeedInfo::getGrowthPercent() const         
{
    return m_iGrowthPercent;
}

int CvGameSpeedInfo::getTrainPercent() const         
{
    return m_iTrainPercent;
}

int CvGameSpeedInfo::getConstructPercent() const 
{
    return m_iConstructPercent;
}

int CvGameSpeedInfo::getCreatePercent() const         
{
    return m_iCreatePercent;
}

int CvGameSpeedInfo::getResearchPercent() const     
{
    return m_iResearchPercent;
}

int CvGameSpeedInfo::getBuildPercent() const         
{
    return m_iBuildPercent;
}

int CvGameSpeedInfo::getImprovementPercent() const
{
    return m_iImprovementPercent;
}

int CvGameSpeedInfo::getGreatPeoplePercent() const
{
    return m_iGreatPeoplePercent;
}

int CvGameSpeedInfo::getAnarchyPercent() const     
{
    return m_iAnarchyPercent;
}

int CvGameSpeedInfo::getBarbPercent() const
{
    return m_iBarbPercent;
}

int CvGameSpeedInfo::getFeatureProductionPercent() const 
{
    return m_iFeatureProductionPercent;
}

int CvGameSpeedInfo::getUnitDiscoverPercent() const 
{
    return m_iUnitDiscoverPercent;
}

int CvGameSpeedInfo::getUnitHurryPercent() const
{
    return m_iUnitHurryPercent;
}

int CvGameSpeedInfo::getUnitTradePercent() const
{
    return m_iUnitTradePercent;
}

int CvGameSpeedInfo::getUnitGreatWorkPercent() const
{
    return m_iUnitGreatWorkPercent;
}

int CvGameSpeedInfo::getGoldenAgePercent() const
{
    return m_iGoldenAgePercent;
}

int CvGameSpeedInfo::getHurryPercent() const
{
    return m_iHurryPercent;
}

int CvGameSpeedInfo::getHurryConscriptAngerPercent() const
{
    return m_iHurryConscriptAngerPercent;
}

int CvGameSpeedInfo::getInflationOffset() const
{
    return m_iInflationOffset;
}

int CvGameSpeedInfo::getInflationPercent() const
{
    return m_iInflationPercent;
}

//ls612: Begin
int CvGameSpeedInfo::getGoldModifier() const
{
    return m_iGoldModifier;
}

int CvGameSpeedInfo::getOccupationTimePopulationPercent() const
{
    return m_iOccupationTimePopulationPercent;
}
//ls612: End


int CvGameSpeedInfo::getVictoryDelayPercent() const
{
    return m_iVictoryDelayPercent;
}

int CvGameSpeedInfo::getNumTurnIncrements() const
{
    return m_iNumTurnIncrements;
}

/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
int CvGameSpeedInfo::getUnitMovementPercent() const
{
    return m_iUnitMovementPercent;
}
// Movement Limit Fix Start
int CvGameSpeedInfo::getExtendMovementLimits() const
{
    return m_iExtendMovementLimits;
}
// Movement Limit Fix Start End
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

This...
C++:
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
    pXML->GetChildXmlValByName(&m_iUnitMovementPercent, "iUnitMovementPercent");
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

...to this:
C++:
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
    pXML->GetChildXmlValByName(&m_iUnitMovementPercent, "iUnitMovementPercent");
    pXML->GetChildXmlValByName(&m_iExtendMovementLimits, "iExtendMovementLimits"); // <-- Added line
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

(To be continued... )

Source code if needed:

Am I on the right track so far?
 
Last edited:
Can someone help me with GameFont and GameFont_75? They keep breaking the game (Buttons not showing up correctly, letters being wonky, etc.)
 

Attachments

  • GameFont_75Alpha.jpg
    GameFont_75Alpha.jpg
    25.6 KB · Views: 19
  • GameFont_75.jpg
    GameFont_75.jpg
    43.3 KB · Views: 6
  • GameFontAlpha.jpg
    GameFontAlpha.jpg
    36.6 KB · Views: 8
  • GameFont.jpg
    GameFont.jpg
    57.7 KB · Views: 19
So if do the following changes, it should be fine?

EDIT: Better put it into spoiler

Spoiler :


CvTeam.h

This...
C++:
// Movement Limits by 45deg - START
    int getExtendMovementLimitsCount() const;                                                                           
    bool isExtendMovementLimits() const;                                                                                                           
    void changeExtendMovementLimitsCount(int iChange);

    int getRemoveMovementLimitsCount() const;                                                                           
    bool isRemoveMovementLimits() const;                                                                                                           
    void changeRemoveMovementLimitsCount(int iChange);
// Movement Limits by 45deg - END

...to this
C++:
// Movement Limits by 45deg - START
    int getExtendMovementLimits() const;
    void setExtendMovementLimits(int iNewValue);
    void changeExtendMovementLimits(int iChange);
 
    int getRemoveMovementLimitsCount() const;                                                                           
    bool isRemoveMovementLimits() const;                                                                                                           
    void changeRemoveMovementLimitsCount(int iChange);
// Movement Limits by 45deg - END

And leave this part unchanged:
C++:
// Movement Limits by 45deg - START
    int m_iExtendMovementLimitsCount; 
    int m_iRemoveMovementLimitsCount;
// Movement Limits by 45deg - END

CvTeam.cpp

This...
C++:
// Movement Limits by 45deg - START
    if (kTech.isExtendMovementLimits())
    {
        changeExtendMovementLimitsCount(iChange);
    }

    if (kTech.isRemoveMovementLimits())
    {
        changeRemoveMovementLimitsCount(iChange);
    }
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START
    if (kTech.getExtendMovementLimits() != 0)
    {
        changeExtendMovementLimitsCount(kTech.getExtendMovementLimits() * iChange);
    }

    if (kTech.isRemoveMovementLimits())
    {
        changeRemoveMovementLimitsCount(iChange);
    }
// Movement Limits by 45deg - END

And this...
C++:
// Movement Limits by 45deg - START
bool CvTeam::isExtendMovementLimits() const                                        
{
    return (getExtendMovementLimitsCount() > 0);
}

int CvTeam::getExtendMovementLimitsCount() const
{
    return m_iExtendMovementLimitsCount;
}

void CvTeam::changeExtendMovementLimitsCount(int iChange)                      
{
    m_iExtendMovementLimitsCount = (m_iExtendMovementLimitsCount + iChange);
    FAssert(getExtendMovementLimitsCount() >= 0);
}

bool CvTeam::isRemoveMovementLimits() const                                        
{
    return (getRemoveMovementLimitsCount() > 0);
}

int CvTeam::getRemoveMovementLimitsCount() const
{
    return m_iRemoveMovementLimitsCount;
}

void CvTeam::changeRemoveMovementLimitsCount(int iChange)                      
{
    m_iRemoveMovementLimitsCount = (m_iRemoveMovementLimitsCount + iChange);
    FAssert(getRemoveMovementLimitsCount() >= 0);
}
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START

// CHANGED: Return int instead of bool
int CvTeam::getExtendMovementLimits() const
{
    return getExtendMovementLimitsCount();
}

int CvTeam::getExtendMovementLimitsCount() const
{
    return m_iExtendMovementLimitsCount;
}

void CvTeam::changeExtendMovementLimitsCount(int iChange)
{
    m_iExtendMovementLimitsCount = (m_iExtendMovementLimitsCount + iChange);
    FAssert(getExtendMovementLimitsCount() >= 0);
}

// KEPT AS-IS: Still treated as boolean
bool CvTeam::isRemoveMovementLimits() const
{
    return (getRemoveMovementLimitsCount() > 0);
}

int CvTeam::getRemoveMovementLimitsCount() const
{
    return m_iRemoveMovementLimitsCount;
}

void CvTeam::changeRemoveMovementLimitsCount(int iChange)
{
    m_iRemoveMovementLimitsCount = (m_iRemoveMovementLimitsCount + iChange);
    FAssert(getRemoveMovementLimitsCount() >= 0);
}

// Movement Limits by 45deg - END

CvInfos.cpp

This...
C++:
// Movement Limits by 45deg - START
,m_bExtendMovementLimits(false)
,m_bRemoveMovementLimits(false)
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START
,m_iExtendMovementLimits(0)  // Changed from m_bExtendMovementLimits(false)
,m_bRemoveMovementLimits(false)
// Movement Limits by 45deg - END

This...
C++:
CvGameSpeedInfo::CvGameSpeedInfo() :
m_iGrowthPercent(0),
m_iTrainPercent(0),
m_iConstructPercent(0),
m_iCreatePercent(0),
m_iResearchPercent(0),
m_iBuildPercent(0),
m_iImprovementPercent(0),
m_iGreatPeoplePercent(0),
m_iAnarchyPercent(0),
m_iBarbPercent(0),
m_iFeatureProductionPercent(0),
m_iUnitDiscoverPercent(0),
m_iUnitHurryPercent(0),
m_iUnitTradePercent(0),
m_iUnitGreatWorkPercent(0),
m_iGoldenAgePercent(0),
m_iHurryPercent(0),
m_iHurryConscriptAngerPercent(0),
m_iInflationOffset(0),
m_iInflationPercent(0),
//ls612: Begin
m_iGoldModifier(0),
m_iOccupationTimePopulationPercent(0),
//ls612: End
m_iVictoryDelayPercent(0),
m_iNumTurnIncrements(0),
m_iTraitGainPercent(0), // f1rpo: Better initialize this
m_pGameTurnInfo(NULL),
m_bEndDatesCalculated(false)
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
,m_iUnitMovementPercent(0)
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/
,m_Percent()
{
}

...to this:
C++:
CvGameSpeedInfo::CvGameSpeedInfo() :
m_iGrowthPercent(0),
m_iTrainPercent(0),
m_iConstructPercent(0),
m_iCreatePercent(0),
m_iResearchPercent(0),
m_iBuildPercent(0),
m_iImprovementPercent(0),
m_iGreatPeoplePercent(0),
m_iAnarchyPercent(0),
m_iBarbPercent(0),
m_iFeatureProductionPercent(0),
m_iUnitDiscoverPercent(0),
m_iUnitHurryPercent(0),
m_iUnitTradePercent(0),
m_iUnitGreatWorkPercent(0),
m_iGoldenAgePercent(0),
m_iHurryPercent(0),
m_iHurryConscriptAngerPercent(0),
m_iInflationOffset(0),
m_iInflationPercent(0),
//ls612: Begin
m_iGoldModifier(0),
m_iOccupationTimePopulationPercent(0),
//ls612: End
m_iVictoryDelayPercent(0),
m_iNumTurnIncrements(0),
m_iTraitGainPercent(0), // f1rpo: Better initialize this
m_pGameTurnInfo(NULL),
m_bEndDatesCalculated(false)
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
,m_iUnitMovementPercent(0)
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/
// Replace bool initialization with int initialization:
,m_iExtendMovementLimits(0)  // <<<<< CHANGED HERE
,m_Percent()
{
}

This...
C++:
CvGameSpeedInfo::~CvGameSpeedInfo()
{
    SAFE_DELETE_ARRAY(m_pGameTurnInfo);
}

int CvGameSpeedInfo::getGrowthPercent() const        
{
    return m_iGrowthPercent;
}

int CvGameSpeedInfo::getTrainPercent() const        
{
    return m_iTrainPercent;
}

int CvGameSpeedInfo::getConstructPercent() const
{
    return m_iConstructPercent;
}

int CvGameSpeedInfo::getCreatePercent() const        
{
    return m_iCreatePercent;
}

int CvGameSpeedInfo::getResearchPercent() const    
{
    return m_iResearchPercent;
}

int CvGameSpeedInfo::getBuildPercent() const        
{
    return m_iBuildPercent;
}

int CvGameSpeedInfo::getImprovementPercent() const
{
    return m_iImprovementPercent;
}

int CvGameSpeedInfo::getGreatPeoplePercent() const
{
    return m_iGreatPeoplePercent;
}

int CvGameSpeedInfo::getAnarchyPercent() const    
{
    return m_iAnarchyPercent;
}

int CvGameSpeedInfo::getBarbPercent() const
{
    return m_iBarbPercent;
}

int CvGameSpeedInfo::getFeatureProductionPercent() const
{
    return m_iFeatureProductionPercent;
}

int CvGameSpeedInfo::getUnitDiscoverPercent() const
{
    return m_iUnitDiscoverPercent;
}

int CvGameSpeedInfo::getUnitHurryPercent() const
{
    return m_iUnitHurryPercent;
}

int CvGameSpeedInfo::getUnitTradePercent() const
{
    return m_iUnitTradePercent;
}

int CvGameSpeedInfo::getUnitGreatWorkPercent() const
{
    return m_iUnitGreatWorkPercent;
}

int CvGameSpeedInfo::getGoldenAgePercent() const
{
    return m_iGoldenAgePercent;
}

int CvGameSpeedInfo::getHurryPercent() const
{
    return m_iHurryPercent;
}

int CvGameSpeedInfo::getHurryConscriptAngerPercent() const
{
    return m_iHurryConscriptAngerPercent;
}

int CvGameSpeedInfo::getInflationOffset() const
{
    return m_iInflationOffset;
}

int CvGameSpeedInfo::getInflationPercent() const
{
    return m_iInflationPercent;
}

//ls612: Begin
int CvGameSpeedInfo::getGoldModifier() const
{
    return m_iGoldModifier;
}

int CvGameSpeedInfo::getOccupationTimePopulationPercent() const
{
    return m_iOccupationTimePopulationPercent;
}
//ls612: End


int CvGameSpeedInfo::getVictoryDelayPercent() const
{
    return m_iVictoryDelayPercent;
}

int CvGameSpeedInfo::getNumTurnIncrements() const
{
    return m_iNumTurnIncrements;
}

/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
int CvGameSpeedInfo::getUnitMovementPercent() const
{
    return m_iUnitMovementPercent;
}
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

...to this:
C++:
CvGameSpeedInfo::~CvGameSpeedInfo()
{
    SAFE_DELETE_ARRAY(m_pGameTurnInfo);
}

int CvGameSpeedInfo::getGrowthPercent() const        
{
    return m_iGrowthPercent;
}

int CvGameSpeedInfo::getTrainPercent() const        
{
    return m_iTrainPercent;
}

int CvGameSpeedInfo::getConstructPercent() const
{
    return m_iConstructPercent;
}

int CvGameSpeedInfo::getCreatePercent() const        
{
    return m_iCreatePercent;
}

int CvGameSpeedInfo::getResearchPercent() const    
{
    return m_iResearchPercent;
}

int CvGameSpeedInfo::getBuildPercent() const        
{
    return m_iBuildPercent;
}

int CvGameSpeedInfo::getImprovementPercent() const
{
    return m_iImprovementPercent;
}

int CvGameSpeedInfo::getGreatPeoplePercent() const
{
    return m_iGreatPeoplePercent;
}

int CvGameSpeedInfo::getAnarchyPercent() const    
{
    return m_iAnarchyPercent;
}

int CvGameSpeedInfo::getBarbPercent() const
{
    return m_iBarbPercent;
}

int CvGameSpeedInfo::getFeatureProductionPercent() const
{
    return m_iFeatureProductionPercent;
}

int CvGameSpeedInfo::getUnitDiscoverPercent() const
{
    return m_iUnitDiscoverPercent;
}

int CvGameSpeedInfo::getUnitHurryPercent() const
{
    return m_iUnitHurryPercent;
}

int CvGameSpeedInfo::getUnitTradePercent() const
{
    return m_iUnitTradePercent;
}

int CvGameSpeedInfo::getUnitGreatWorkPercent() const
{
    return m_iUnitGreatWorkPercent;
}

int CvGameSpeedInfo::getGoldenAgePercent() const
{
    return m_iGoldenAgePercent;
}

int CvGameSpeedInfo::getHurryPercent() const
{
    return m_iHurryPercent;
}

int CvGameSpeedInfo::getHurryConscriptAngerPercent() const
{
    return m_iHurryConscriptAngerPercent;
}

int CvGameSpeedInfo::getInflationOffset() const
{
    return m_iInflationOffset;
}

int CvGameSpeedInfo::getInflationPercent() const
{
    return m_iInflationPercent;
}

//ls612: Begin
int CvGameSpeedInfo::getGoldModifier() const
{
    return m_iGoldModifier;
}

int CvGameSpeedInfo::getOccupationTimePopulationPercent() const
{
    return m_iOccupationTimePopulationPercent;
}
//ls612: End


int CvGameSpeedInfo::getVictoryDelayPercent() const
{
    return m_iVictoryDelayPercent;
}

int CvGameSpeedInfo::getNumTurnIncrements() const
{
    return m_iNumTurnIncrements;
}

/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
int CvGameSpeedInfo::getUnitMovementPercent() const
{
    return m_iUnitMovementPercent;
}
// Movement Limit Fix Start
int CvGameSpeedInfo::getExtendMovementLimits() const
{
    return m_iExtendMovementLimits;
}
// Movement Limit Fix Start End
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

This...
C++:
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
    pXML->GetChildXmlValByName(&m_iUnitMovementPercent, "iUnitMovementPercent");
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

...to this:
C++:
/************************************************************************************************/
/* Afforess                      Start         12/13/09                                                */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
    pXML->GetChildXmlValByName(&m_iUnitMovementPercent, "iUnitMovementPercent");
    pXML->GetChildXmlValByName(&m_iExtendMovementLimits, "iExtendMovementLimits"); // <-- Added line
/************************************************************************************************/
/* Afforess                         END                                                            */
/************************************************************************************************/

(To be continued... )

Source code if needed:

Am I on the right track so far?

And I continue:

In CvUnit.cpp I would change this:
C++:
bool CvUnit::isInsideMovementLimits (const CvPlot* pPlot) const
{
    if (pPlot->isOwned() || pPlot->isRoute() || isRivalTerritory())
        return true;

    CvPlayer const& kOwner = GET_PLAYER(getOwner());
    CvTeam const& kTeam = GET_TEAM(kOwner.getTeam());
    if (kTeam.isRemoveMovementLimits())
        return true;
    if (kOwner.getNumCities() <= 0 || kOwner.isBarbarian())
        return true;

    static int const iDefaultLimit = GC.getDefineINT("BASE_EXPLORATION_RADIUS")
            + GC.getMap().getWorldSize();
    int iMovementLimit = iDefaultLimit;
    if (kTeam.isExtendMovementLimits())
        iMovementLimit *= 2;
    int iIter;
    for (CvCity const* pCity = kOwner.firstCity(&iIter); pCity != NULL; pCity = kOwner.nextCity(&iIter))
    {
        if (plotDistance(pPlot->getX(), pPlot->getY(), pCity->getX(), pCity->getY()) <= iMovementLimit)
            return true;
    }
    // temporary hack for pitboss
    if (gDLL->IsPitbossHost() || (pPlot->isOwned() && pPlot->getTeam() >= 100))
        return true;

    return false;
}
...to this:
C++:
bool CvUnit::isInsideMovementLimits (const CvPlot* pPlot) const
{
    if (pPlot->isOwned() || pPlot->isRoute() || isRivalTerritory())
        return true;

    CvPlayer const& kOwner = GET_PLAYER(getOwner());
    CvTeam const& kTeam = GET_TEAM(kOwner.getTeam());
    if (kTeam.isRemoveMovementLimits())
        return true;
    if (kOwner.getNumCities() <= 0 || kOwner.isBarbarian())
        return true;

    int iBaseRadius = GC.getDefineINT("BASE_EXPLORATION_RADIUS");
    int iWorldSize = GC.getMap().getWorldSize();
    int iExtendMovementLimits = kTeam.getExtendMovementLimits(); // Now an int
    int iMovementLimit = iBaseRadius + (iWorldSize + 1) * iExtendMovementLimits;

    int iIter;
    for (CvCity const* pCity = kOwner.firstCity(&iIter); pCity != NULL; pCity = kOwner.nextCity(&iIter))
    {
        if (plotDistance(pPlot->getX(), pPlot->getY(), pCity->getX(), pCity->getY()) <= iMovementLimit)
            return true;
    }

    // temporary hack for pitboss
    if (gDLL->IsPitbossHost() || (pPlot->isOwned() && pPlot->getTeam() >= 100))
        return true;

    return false;
}

CvPlayerAI.cpp

This...
C++:
// Movement Limits by 45deg - START
    if (kTech.isExtendMovementLimits())
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 35;
        }
        iValue += iTempValue;
        iTempValue = 0;
    }

    if (kTech.isRemoveMovementLimits())
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 70;
        }
        iValue += iTempValue;
        iTempValue = 0;
    }
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START
    if (kTech.getExtendMovementLimits() > 0)
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 35 * kTech.getExtendMovementLimits(); // Scale with the integer value
        }
        iValue += iTempValue;
        iTempValue = 0;
    }

    if (kTech.isRemoveMovementLimits())
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 70;
        }
        iValue += iTempValue;
        iTempValue = 0;
    }
// Movement Limits by 45deg - END

CyInfoInterface.cpp

This...
C++:
// Movement Limits by 45deg - START
        .def("isExtendMovementLimits", &CvTechInfo::isExtendMovementLimits, "bool ()")       
        .def("isRemoveMovementLimits", &CvTechInfo::isRemoveMovementLimits, "bool ()")           
// Movement Limits by 45deg - END
...to this:
C++:
// Movement Limits by 45deg - START
        .def("getExtendMovementLimits", &CvTechInfo::getExtendMovementLimits, "int ()")
        .def("isRemoveMovementLimits", &CvTechInfo::isRemoveMovementLimits, "bool ()")
// Movement Limits by 45deg - END

In CIV4TechnologiesSchema

XML:
    <ElementType name="bExtendMovementLimits" content="textOnly" dt:type="boolean"/>
...
        <element type="bExtendMovementLimits" minOccurs="0"/>
I also have to change to:
XML:
<ElementType name="iExtendMovementLimits" content="textOnly" dt:type="int"/>
...
<element type="iExtendMovementLimits" minOccurs="0"/>

I hope that's all. Please let me know if I'm doing it right :)
 
And I continue:

In CvUnit.cpp I would change this:
C++:
bool CvUnit::isInsideMovementLimits (const CvPlot* pPlot) const
{
    if (pPlot->isOwned() || pPlot->isRoute() || isRivalTerritory())
        return true;

    CvPlayer const& kOwner = GET_PLAYER(getOwner());
    CvTeam const& kTeam = GET_TEAM(kOwner.getTeam());
    if (kTeam.isRemoveMovementLimits())
        return true;
    if (kOwner.getNumCities() <= 0 || kOwner.isBarbarian())
        return true;

    static int const iDefaultLimit = GC.getDefineINT("BASE_EXPLORATION_RADIUS")
            + GC.getMap().getWorldSize();
    int iMovementLimit = iDefaultLimit;
    if (kTeam.isExtendMovementLimits())
        iMovementLimit *= 2;
    int iIter;
    for (CvCity const* pCity = kOwner.firstCity(&iIter); pCity != NULL; pCity = kOwner.nextCity(&iIter))
    {
        if (plotDistance(pPlot->getX(), pPlot->getY(), pCity->getX(), pCity->getY()) <= iMovementLimit)
            return true;
    }
    // temporary hack for pitboss
    if (gDLL->IsPitbossHost() || (pPlot->isOwned() && pPlot->getTeam() >= 100))
        return true;

    return false;
}
...to this:
C++:
bool CvUnit::isInsideMovementLimits (const CvPlot* pPlot) const
{
    if (pPlot->isOwned() || pPlot->isRoute() || isRivalTerritory())
        return true;

    CvPlayer const& kOwner = GET_PLAYER(getOwner());
    CvTeam const& kTeam = GET_TEAM(kOwner.getTeam());
    if (kTeam.isRemoveMovementLimits())
        return true;
    if (kOwner.getNumCities() <= 0 || kOwner.isBarbarian())
        return true;

    int iBaseRadius = GC.getDefineINT("BASE_EXPLORATION_RADIUS");
    int iWorldSize = GC.getMap().getWorldSize();
    int iExtendMovementLimits = kTeam.getExtendMovementLimits(); // Now an int
    int iMovementLimit = iBaseRadius + (iWorldSize + 1) * iExtendMovementLimits;

    int iIter;
    for (CvCity const* pCity = kOwner.firstCity(&iIter); pCity != NULL; pCity = kOwner.nextCity(&iIter))
    {
        if (plotDistance(pPlot->getX(), pPlot->getY(), pCity->getX(), pCity->getY()) <= iMovementLimit)
            return true;
    }

    // temporary hack for pitboss
    if (gDLL->IsPitbossHost() || (pPlot->isOwned() && pPlot->getTeam() >= 100))
        return true;

    return false;
}

CvPlayerAI.cpp

This...
C++:
// Movement Limits by 45deg - START
    if (kTech.isExtendMovementLimits())
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 35;
        }
        iValue += iTempValue;
        iTempValue = 0;
    }

    if (kTech.isRemoveMovementLimits())
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 70;
        }
        iValue += iTempValue;
        iTempValue = 0;
    }
// Movement Limits by 45deg - END

...to this:
C++:
// Movement Limits by 45deg - START
    if (kTech.getExtendMovementLimits() > 0)
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 35 * kTech.getExtendMovementLimits(); // Scale with the integer value
        }
        iValue += iTempValue;
        iTempValue = 0;
    }

    if (kTech.isRemoveMovementLimits())
    {
        if (GC.getGameINLINE().isOption(GAMEOPTION_MOVEMENT_LIMITS))
        {
            iTempValue += 70;
        }
        iValue += iTempValue;
        iTempValue = 0;
    }
// Movement Limits by 45deg - END

CyInfoInterface.cpp

This...
C++:
// Movement Limits by 45deg - START
        .def("isExtendMovementLimits", &CvTechInfo::isExtendMovementLimits, "bool ()")    
        .def("isRemoveMovementLimits", &CvTechInfo::isRemoveMovementLimits, "bool ()")        
// Movement Limits by 45deg - END
...to this:
C++:
// Movement Limits by 45deg - START
        .def("getExtendMovementLimits", &CvTechInfo::getExtendMovementLimits, "int ()")
        .def("isRemoveMovementLimits", &CvTechInfo::isRemoveMovementLimits, "bool ()")
// Movement Limits by 45deg - END

In CIV4TechnologiesSchema

XML:
    <ElementType name="bExtendMovementLimits" content="textOnly" dt:type="boolean"/>
...
        <element type="bExtendMovementLimits" minOccurs="0"/>
I also have to change to:
XML:
<ElementType name="iExtendMovementLimits" content="textOnly" dt:type="int"/>
...
<element type="iExtendMovementLimits" minOccurs="0"/>

I hope that's all. Please let me know if I'm doing it right :)
You're on the right track but you'll have to deal with some issues 1) Will the int version replace the bool version, if so you may want to migrate the existing savegame format. 2) Will the modifier from the int version be additive ? I suppose that's easier since you could have two separate tech both giving +10 and thus you could just accumulate the contribution of each tech.
 
Last edited:
You're on the right track but you'll have to deal with some issues 1) Will the int version replace the bool version, if so you may want to migrate the existing savegame format. 2) Will the modifier from the int version be additive ? I suppose that's easier since you could have two separate tech both giving +10 and thus you could just accumulate the contribution of each tech.
Yes and yes. How should I go about those?
 
Hi all, I've been away from modding and the B5 Mod for quite a while but have returned only to encounter problems when using the Mod with the Steam version of Civ IV.

I have observed a graphics issue with the units that are unique to the B5 Mod.

If the unit is selected, the graphics are correct.

ODS Selected - Graphics Correct.png



If the unit is not selected it defaults to the FF graphics.

ODS unselected - Graphics are FF.png


The only thing I can find in the CIV4ArtDefines_Unit.xml is shown below.

<UnitArtInfo> <!-- O.D.S. Orbital Defense Satellite -->
<Type>ART_DEF_B5_UNIT_PLANETARY_DEFENSE_I</Type>
<Button>Art/Units/Planetary_Defenses/ODSAT_Early/ODSAT_Early_Button.dds</Button>
<fScale>0.25</fScale>
<fInterfaceScale>.75</fInterfaceScale>
<bActAsLand>0</bActAsLand>
<bActAsAir>1</bActAsAir>
<NIF>Art/Units/Planetary_Defenses/ODSAT_Early/ODSAT_Early.nif</NIF>
<KFM>Art/Units/FinalFrontier_Carrier/Carrier.kfm</KFM>
<SHADERNIF>Art/Units/Planetary_Defenses/ODSAT_Early/ODSAT_Early.nif</SHADERNIF>
<ShadowDef>
<ShadowNIF>Art/Units/01_UnitShadows/BomberShadow.nif</ShadowNIF>
<ShadowAttachNode>BIP Pelvis</ShadowAttachNode>
<fShadowScale>0.75</fShadowScale>
</ShadowDef>

<iDamageStates>4</iDamageStates>
<fBattleDistance>0.35</fBattleDistance>
<fRangedDeathTime>0.31</fRangedDeathTime>
<bSmoothMove>1</bSmoothMove>
<bActAsRanged>0</bActAsRanged>
<TrainSound>AS2D_UNIT_BUILD_UNIT</TrainSound>
<AudioRunSounds>
<AudioRunTypeLoop/>
<AudioRunTypeEnd/>
</AudioRunSounds>
<PatrolSound>AS3D_UN_FF_FIGHTER_PATROL</PatrolSound>
<SelectionSound>AS3D_UN_FF_FIGHTER_COMMAND_PATROL</SelectionSound>
<ActionSound>AS3D_UN_FF_FIGHTER_COMMAND_PATROL</ActionSound>
</UnitArtInfo>

The 2 highlighted sections are the only things that refer to the original FF Mod. It would seem that the game cannot make up it's mind which graphic it should be using. I have made no changes to the Mod that would cause this. The only thing I can think of is it is related to my current installation not having the unofficial patch which I used to have with the disc version.

Does anyone have any suggestions on what I might try?
 
Hi all, I've been away from modding and the B5 Mod for quite a while but have returned only to encounter problems when using the Mod with the Steam version of Civ IV.

I have observed a graphics issue with the units that are unique to the B5 Mod.

If the unit is selected, the graphics are correct.

ODS Selected - Graphics Correct.png



If the unit is not selected it defaults to the FF graphics.

ODS unselected - Graphics are FF.png


The only thing I can find in the CIV4ArtDefines_Unit.xml is shown below.

<UnitArtInfo> <!-- O.D.S. Orbital Defense Satellite -->
<Type>ART_DEF_B5_UNIT_PLANETARY_DEFENSE_I</Type>
<Button>Art/Units/Planetary_Defenses/ODSAT_Early/ODSAT_Early_Button.dds</Button>
<fScale>0.25</fScale>
<fInterfaceScale>.75</fInterfaceScale>
<bActAsLand>0</bActAsLand>
<bActAsAir>1</bActAsAir>
<NIF>Art/Units/Planetary_Defenses/ODSAT_Early/ODSAT_Early.nif</NIF>
<KFM>Art/Units/FinalFrontier_Carrier/Carrier.kfm</KFM>
<SHADERNIF>Art/Units/Planetary_Defenses/ODSAT_Early/ODSAT_Early.nif</SHADERNIF>
<ShadowDef>
<ShadowNIF>Art/Units/01_UnitShadows/BomberShadow.nif</ShadowNIF>
<ShadowAttachNode>BIP Pelvis</ShadowAttachNode>
<fShadowScale>0.75</fShadowScale>
</ShadowDef>

<iDamageStates>4</iDamageStates>
<fBattleDistance>0.35</fBattleDistance>
<fRangedDeathTime>0.31</fRangedDeathTime>
<bSmoothMove>1</bSmoothMove>
<bActAsRanged>0</bActAsRanged>
<TrainSound>AS2D_UNIT_BUILD_UNIT</TrainSound>
<AudioRunSounds>
<AudioRunTypeLoop/>
<AudioRunTypeEnd/>
</AudioRunSounds>
<PatrolSound>AS3D_UN_FF_FIGHTER_PATROL</PatrolSound>
<SelectionSound>AS3D_UN_FF_FIGHTER_COMMAND_PATROL</SelectionSound>
<ActionSound>AS3D_UN_FF_FIGHTER_COMMAND_PATROL</ActionSound>
</UnitArtInfo>

The 2 highlighted sections are the only things that refer to the original FF Mod. It would seem that the game cannot make up it's mind which graphic it should be using. I have made no changes to the Mod that would cause this. The only thing I can think of is it is related to my current installation not having the unofficial patch which I used to have with the disc version.

Does anyone have any suggestions on what I might try?
As a first thing I'd try to copy FF mod parts to the mod's folder and change the paths accordingly.
 
You're on the right track but you'll have to deal with some issues 1) Will the int version replace the bool version, if so you may want to migrate the existing savegame format. 2) Will the modifier from the int version be additive ? I suppose that's easier since you could have two separate tech both giving +10 and thus you could just accumulate the contribution of each tech.
So I turned to the AI again for help:

✅ 1)​


When changing a value from bool to int, existing saved games that reference the bExtendMovementLimits field will either:
  • Not load correctly (crash or ignore the field),
  • Or load with a default value (e.g. false or 0), depending on how your deserialization is handled.

🔧 Solution:​

To support migration from older savegames:

Option A:​

Update the CvInfo (likely CvTechInfo) loading code to accept both bExtendMovementLimits (old) and iExtendMovementLimits (new).

C++:
// In CvTechInfo::read(XMLReader)
if (gDLL->getXMLIFace()->GetChildXmlValByName(pXML, "iExtendMovementLimits", &m_iExtendMovementLimits))
{
    // Modern format, already handled
}
else
{
    bool bOldExtend = false;
    if (gDLL->getXMLIFace()->GetChildXmlValByName(pXML, "bExtendMovementLimits", &bOldExtend))
    {
        m_iExtendMovementLimits = (bOldExtend ? 1 : 0); // Migrate old format to int
    }
}
This allows older mods/savegames to still work without modifying old XMLs immediately.

Option B:​

Manually update all bExtendMovementLimits tags in XMLs to iExtendMovementLimits. This breaks save compatibility unless you invalidate all old saves—which is generally bad UX.
Well, I think I prefer Option B.


✅ 2)​

The person on the forum is right again: if you're moving to int, then make sure to design the system around accumulation.

🔧 Solution:​

Change how you calculate movement limits by summing all techs that contribute to it.

Example implementation in​

Add a helper function that aggregates the total modifier:


C++:
int CvTeam::getExtendMovementLimitsTotal() const
{
    int iTotal = 0;
    for (int i = 0; i < GC.getNumTechInfos(); ++i)
    {
        if (GET_TEAM(getID()).isHasTech((TechTypes)i))
        {
            iTotal += GC.getTechInfo((TechTypes)i).getExtendMovementLimits(); // Now int-based
        }
    }
    return iTotal;
}

Then in movement limit logic, replace:
C++:
if (kTeam.isExtendMovementLimits())
    iMovementLimit *= 2;
With something like:
C++:
int iExtend = kTeam.getExtendMovementLimitsTotal();
iMovementLimit += iExtend * (GC.getDefineINT("EXPLORATION_RADIUS_PER_EXTEND") /* or custom logic */);
Or if you're doing BASE + WorldSize + Extend, you can say:
C++:
int iMovementLimit = GC.getDefineINT("BASE_EXPLORATION_RADIUS")
    + GC.getMap().getWorldSize()
    + kTeam.getExtendMovementLimitsTotal();
I think I only need to do the first part here because I have a BASE + WorldSize + Extend thing.
Am I right?
 
Last edited:
Hi there...I am looking at a mod I haven't loaded in almost a decade ago now.....after the odd XML entry missing message, I get this. Can anyone please help me out with what the problem is?
 

Attachments

  • Capture.PNG
    Capture.PNG
    7.8 KB · Views: 12
I've created a simple mod just to add a custom civ, so my Mod only has the following files under ModName:
Assets/XML/Civilizatoins/CIV4CivilizationInfos.xml
Assets/XML/Interface/CIV4PlayerColorInfos.xml
Assets/XML/Text/CIV4GameText_Objects_ModName.xml


I don't have `GlobalDefines.xml` so I assume it will fall back to the defaults? But when I take more than 50% of a vassal's cities, it doesn't become free from the owner.
I haven't redefined VASSAL_REVOLT_OWN_LOSSES_FACTOR anywhere - how do I find out what the issue is?
 
Hi there...I am looking at a mod I haven't loaded in almost a decade ago now.....after the odd XML entry missing message, I get this. Can anyone please help me out with what the problem is?
The solution to your problem is probably in the "odd XML entry missing message"... Screenshots?
 
Would it be fairly easy to make a mod that adds an option when setting up a game that when enable turns world wonders into national wonders?

I think with a basic outline of the steps involved if possible I could try to go through the process of learning how to do and making it. But if it requires hacking dlls or something then probably not.
 
Would it be fairly easy to make a mod that adds an option when setting up a game that when enable turns world wonders into national wonders?
Easy - yes, but tedious, since you would have to add doubles for every wonder, then lock them behind canConstruct/cannonConstruct in CvGameUtils.py.

More clean solution would be through DLL, but that I wouldn't call easy.
 
The solution to your problem is probably in the "odd XML entry missing message"... Screenshots?
Thank you, I think I need to start over....there are other issues now.

The question is, are they are enough people around here still playing and modding Civ IV?
 
Would it be fairly easy to make a mod that adds an option when setting up a game that when enable turns world wonders into national wonders?

I think with a basic outline of the steps involved if possible I could try to go through the process of learning how to do and making it. But if it requires hacking dlls or something then probably not.
Not sure to exactly understand your intention, but wouldn't it be easier to simply make a mod in which your turn wonders into national wonders? Just XML work...
 
Back
Top Bottom