// BEGIN: Show Hidden Attitude Mod 01/22/2009
bool isShowPersonalityModifiers()
{
#ifdef _MOD_SHAM_SPOILER
return true;
#else
return !GC.getGameINLINE().isOption(GAMEOPTION_RANDOM_PERSONALITIES) || GC.getGameINLINE().isDebugMode();
#endif
}
bool isShowSpoilerModifiers()
{
#ifdef _MOD_SHAM_SPOILER
return true;
#else
return GC.getGameINLINE().isDebugMode();
#endif
}
int CvPlayerAI::AI_getFirstImpressionAttitude(PlayerTypes ePlayer) const
{
bool bShowPersonalityAttitude = isShowPersonalityModifiers();
CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);
int iAttitude = GC.getHandicapInfo(kPlayer.getHandicapType()).getAttitudeChange();
if (bShowPersonalityAttitude)
{
iAttitude += GC.getLeaderHeadInfo(getPersonalityType()).getBaseAttitude();
if (!kPlayer.isHuman())
{
if (isShowSpoilerModifiers())
{
// iBasePeaceWeight + iPeaceWeightRand
iAttitude += (4 - abs(AI_getPeaceWeight() - kPlayer.AI_getPeaceWeight()));
}
else
{
// iBasePeaceWeight
iAttitude += (4 - abs(GC.getLeaderHeadInfo(getPersonalityType()).getBasePeaceWeight() - GC.getLeaderHeadInfo(kPlayer.getPersonalityType()).getBasePeaceWeight()));
}
iAttitude += std::min(GC.getLeaderHeadInfo(getPersonalityType()).getWarmongerRespect(), GC.getLeaderHeadInfo(kPlayer.getPersonalityType()).getWarmongerRespect());
}
}
return iAttitude;
}
int CvPlayerAI::AI_getTeamSizeAttitude(PlayerTypes ePlayer) const
{
return -std::max(0, (GET_TEAM(GET_PLAYER(ePlayer).getTeam()).getNumMembers() - GET_TEAM(getTeam()).getNumMembers()));
}
// Count only players visible on the active player's scoreboard
int CvPlayerAI::AI_getKnownPlayerRank(PlayerTypes ePlayer) const
{
PlayerTypes eActivePlayer = GC.getGameINLINE().getActivePlayer();
if (NO_PLAYER == eActivePlayer || GC.getGameINLINE().isDebugMode()) {
// Use the full scoreboard
return GC.getGameINLINE().getPlayerRank(ePlayer);
}
TeamTypes eActiveTeam = GC.getGameINLINE().getActiveTeam();
int iRank = 0;
for (int iI = 0; iI < MAX_CIV_PLAYERS; iI++)
{
PlayerTypes eRankPlayer = GC.getGameINLINE().getRankPlayer(iI);
if (eRankPlayer != NO_PLAYER)
{
CvTeam& kRankTeam = GET_TEAM(GET_PLAYER(eRankPlayer).getTeam());
if (kRankTeam.isAlive() && (kRankTeam.isHasMet(eActiveTeam) || kRankTeam.isHuman()))
{
if (eRankPlayer == ePlayer) {
return iRank;
}
iRank++;
}
}
}
// Should only get here if we tried to find the rank of an unknown player
return iRank + 1;
}
int CvPlayerAI::AI_getBetterRankDifferenceAttitude(PlayerTypes ePlayer) const
{
if (!isShowPersonalityModifiers())
{
return 0;
}
int iRankDifference;
if (isShowSpoilerModifiers())
{
iRankDifference = GC.getGameINLINE().getPlayerRank(ePlayer) - GC.getGameINLINE().getPlayerRank(getID());
}
else
{
iRankDifference = AI_getKnownPlayerRank(ePlayer) - AI_getKnownPlayerRank(getID());
}
if (iRankDifference > 0)
{
return GC.getLeaderHeadInfo(getPersonalityType()).getBetterRankDifferenceAttitudeChange() * iRankDifference / (GC.getGameINLINE().countCivPlayersEverAlive() + 1);
}
return 0;
}
int CvPlayerAI::AI_getWorseRankDifferenceAttitude(PlayerTypes ePlayer) const
{
if (!isShowPersonalityModifiers())
{
return 0;
}
int iRankDifference;
if (isShowSpoilerModifiers())
{
iRankDifference = GC.getGameINLINE().getPlayerRank(getID()) - GC.getGameINLINE().getPlayerRank(ePlayer);
}
else
{
iRankDifference = AI_getKnownPlayerRank(getID()) - AI_getKnownPlayerRank(ePlayer);
}
if (iRankDifference > 0)
{
return GC.getLeaderHeadInfo(getPersonalityType()).getWorseRankDifferenceAttitudeChange() * iRankDifference / (GC.getGameINLINE().countCivPlayersEverAlive() + 1);
}
return 0;
}
int CvPlayerAI::AI_getLowRankAttitude(PlayerTypes ePlayer) const
{
int iThisPlayerRank;
int iPlayerRank;
if (isShowSpoilerModifiers())
{
iThisPlayerRank = GC.getGameINLINE().getPlayerRank(getID());
iPlayerRank = GC.getGameINLINE().getPlayerRank(ePlayer);
}
else
{
iThisPlayerRank = AI_getKnownPlayerRank(getID());
iPlayerRank = AI_getKnownPlayerRank(ePlayer);
}
int iMedianRank = GC.getGameINLINE().countCivPlayersEverAlive() / 2;
return (iThisPlayerRank >= iMedianRank && iPlayerRank >= iMedianRank) ? 1 : 0;
}
int CvPlayerAI::AI_getLostWarAttitude(PlayerTypes ePlayer) const
{
if (!isShowPersonalityModifiers())
{
return 0;
}
TeamTypes eTeam = GET_PLAYER(ePlayer).getTeam();
if (!isShowSpoilerModifiers() && NO_PLAYER != GC.getGameINLINE().getActivePlayer())
{
// Hide war success for wars you are not involved in
if (GC.getGameINLINE().getActiveTeam() != getTeam() && GC.getGameINLINE().getActiveTeam() != eTeam)
{
return 0;
}
}
if (GET_TEAM(eTeam).AI_getWarSuccess(getTeam()) > GET_TEAM(getTeam()).AI_getWarSuccess(eTeam))
{
return GC.getLeaderHeadInfo(getPersonalityType()).getLostWarAttitudeChange();
}
return 0;
}
// END: Show Hidden Attitude Mod