We-the-People-civ4col-mod / Mod

This is the repository where the mod resides.
89 stars 37 forks source link

Diplomatic attitude change parameters do not scale with game speed #965

Closed victorxup closed 9 months ago

victorxup commented 9 months ago

Seems that highlighted parameters below do not scale with game speed. I suppose, they should.

image

raystuttgart commented 9 months ago

No, attitude / diplomacy is never scaled / affected by GameSpeed.

Summary: No bug. (Issue is rejected.) You are consufing Difficulty with GameSpeed as it seems.

Diplomacy / Attitude settings are related to Difficulty and are NEVER scaled by GameSpeed. GameSpeeds make things faster / slower ... not easier / harder.


These settings are only used to fine tune AI behaviour related to the Attitude it has towards you. (Meaning how strongly a leader reacts to ongoing War / Open Borders / ... or other diplomatic actions.)


e.g. iAtPeaceAittudeDivisor = 50 --> This means attitude will increase by +1 after 50 turns of peace.


Edit: I adjusted this post, as my origianl explanation was wrong.

victorxup commented 9 months ago

Those parameters defines how many turns must pass before the attitude changes, not how much it changes. So I suppose, the issue should be re-opened

raystuttgart commented 9 months ago

No, it impacts how strongly the AI player reacts to the duration of Wars, Peace, Open Borders, ... Meaning how much attitude is added depending on the length that you have different diplomacy status.

It is not dependend on GameSpeed directly. It is dependend how peaceful / aggressive / diplomatic you play.

Meaning how long you keep peace, how long you are at war, how long you have open borders. It depends on your actions and should thus not be directly modified scaled by GameSpeed.

Thus I stand to my opinion: No scaling to GameSpeed.


But yes, my explanation above was wrong. I remebered it the wrong way around.

but see e.g. here:

int CvPlayerAI::AI_getOpenBordersAttitude(PlayerTypes ePlayer)
{
    if (!atWar(getTeam(), GET_PLAYER(ePlayer).getTeam()))
    {
        if (GC.getLeaderHeadInfo(getPersonalityType()).getOpenBordersAttitudeDivisor() != 0)
        {
            int iAttitudeChange = (GET_TEAM(getTeam()).AI_getOpenBordersCounter(GET_PLAYER(ePlayer).getTeam()) / GC.getLeaderHeadInfo(getPersonalityType()).getOpenBordersAttitudeDivisor());
            return range(iAttitudeChange, -(abs(GC.getLeaderHeadInfo(getPersonalityType()).getOpenBordersAttitudeChangeLimit())), abs(GC.getLeaderHeadInfo(getPersonalityType()).getOpenBordersAttitudeChangeLimit()));
        }
    }

    return 0;
}

By the way: If this was wrong, then there would be a bug in Vanilla Civ4Col, Vanilla Civ4BTS, and all mods ever created for Civ4Col or Civ4BTS. Do you really think that this is the case?


Again: No scaling on Diplomacy / Attitude logic EVER related to GameSpeed as this depends on player actions, not just pure time. Just because you play Marathon does not mean that the War will take longer ... as your Units will e.g. have the same speed to move.

Seriously, this is no bug. What you suggest would mess up the balancing of the AI Players / leaders as they would either hardly react on your diplomatic actions (war, peace, open borders, ...) considering their attitude or overreact ... depending if you intend to divide or multiply.

victorxup commented 9 months ago

You are talking about param AttitudeChangeLimit. It impacts how much attitude changes I'm taliking about AttitudeDivisor. it impacts how many turns must pass for this change

Just look at this this piece of code:

int iAttitudeChange = (GET_TEAM(getTeam()).AI_getOpenBordersCounter(GET_PLAYER(ePlayer).getTeam()) / GC.getLeaderHeadInfo(getPersonalityType()).getOpenBordersAttitudeDivisor());

raystuttgart commented 9 months ago

Yes, as I said, it is about the "Attitude Change". Some leaders react less / slower e.g. on Open Borders, some more / faster.

victorxup commented 9 months ago

BTW, I accept your explanation, so I'm OK with any outcome.

raystuttgart commented 9 months ago

Great, then let us please close this. :) As it would really mess up the AI behaviour.

As I said, attitude and diplomacy should never be scaled by GameSpeed, as it depends on Player actions. It is very unlikely that Civ4BTS, Civ4Col and all mods ever created missed such a bug. ;)

The player decides how long wars / peace / open borders, ... take.

e.g. Wars in Marathon really do not take longer than in Normal. As you have similar amounts of Units, same Unit Combat Strengths, same Movement Speed, ...

The only thing that will be different is that in Marathon it takes longer to prepare / start the first Wars. (But as I said, the duration affecting the counter will usually be the same.)