Questions about The BUG Mod

@kormer - BUG doesn't have anything to help here unfortunately. Civ4 itself allows you to save build queues (CTRL + <number>) in one city and then load that queue into another city (<number>), but that's not exactly what you wanted.

Thanks, I never knew about that. Not exactly what I wanted, but it'll still help for defining queues for newly built/conquered cities.
 
...and also anytime a new tech is researched, have a way to add the new improvement to all cities already fully developed.

You can select multiple city bars at the same time by SHIFT clicking on them. In addition you can use CTRL click to select all cities on a continent and ATL click to select all cities in the world. Once you have multiple cities selected, you can CTRL click on a building which will add that building to the beginning of the queue of every city selected. This does allow you to have multiple cities build the same thing with just a few clicks.
 
You can also modify city queues from the Domestic Advisor (F1). Say you pick up Currency and want to build Markets in your older cities. Hit F1, CTRL + Click on the cities that you think will benefit from a Market, and CTRL + Click the Market button below to insert it into their queues. They'll all start building a Market right away and then continue on with whatever they were producing before. Or use SHIFT + Click and they'll finish their current queues before starting on the Market.

Since the screen comes up sorted by city age, you can quickly tell which cities are more likely to make good use of a new building.
 
Trying to install by making the folder listed in the notes does not work for me. It says that BAT is not installed. I'm running on Vista, if that matters.
 
Trying to install by making the folder listed in the notes does not work for me. It says that BAT is not installed. I'm running on Vista, if that matters.
Please post problems and install issues in the bug reporting thread, for the reason stated below:
stop posting in this thread damn it!!
This thread is for BUG/BULL/BAT release announcements.

I will post a workaround in the bug thread. Join me there, k? :)
 
Does GameSetUpCheck.txt serve any purpose without BUFFY?

.. answering my own question, probably not. Same likely goes for a few other BUG files but I guess it's not worth the time to find and remove them all.
 
I'm probably going to have similar concerns. Taking a quick look at the latest SVN logs has my head spinning, especially because I don't intend to use BUFFY. I thought BUFFY and BUG were essentially the same thing only that BUFFY was tailored to HOF games.

I also see that the BUG options file has been split up to many files. After I make this change, is there an easy way to save my settings, or do I have to manually merge the big settings file into the individual ones? I imagine this presents a problem for those of us tracking the SVN as well as installer users that will have to go through settings migration when they upgrade to the newest BUG/BUFFY release.
 
relations hover is not working the way I expect it to, did I break that or is it supposed to behave this way?
Spoiler :

pic #1: 1st line (mine), 2nd row (Boudica):
:health: You are Worst Enemy.
:health: Worst Enemy of Montezuma, Ghandi
:yuck: but there is no "War with Fuyu" ("We are at War" would work too)

pic #2: 2nd line (Tokugawa), 3rd row (Montezuma):
:health: Boudica is worst enemy
:yuck: same problem: Where did the "War with Tokugawa" go?

pic #3: 4th line (Montezuma), 1st row (Tokugawa):
:yuck: "You are Worst Enemy" - which makes sense in line 1 were I am the relevant player. I'd like a "Fuyu is Worst Enemy" in all other lines.
:yuck: Not a word about the war, again.

pic #4: 4th line, 2nd row:
:yuck: "You are Worst Enemy" instead of "Fuyu is Worst Enemy" again
:health: Worst Enemy of Ghandi
:health: War with Fuyu


So basically, all entries in row 1 and 2 will say "You are Worst Enemy" instead of just one ("Fuyu is Worst Enemy" for the rest), yet when all entries in row1 should tell about the War with Montezuma, the Montezuma line says nothing.

If that's how it is supposed to work then that just shows how little I ever paid attention to diplomacy, I only started looking at it now because BBAI and BULL clash a bit here, and I'm assuming I did something wrong.

For the "You are Worst Enemy" everywhere issue: There's only a check for ActiveTeam, so I guess the behaviour is intended, or at least to be expected.
Possible solution:
Code:
// BUG - Leaderhead Worst Enemy - start
	if (getBugOptionBOOL("MiscHover__LeaderheadWorstEnemy", true, "BUG_LEADERHEAD_HOVER_WORST_ENEMY"))
	{
		CvTeamAI& kThisTeam = GET_TEAM(kThisPlayer.getTeam());
		if (!kThisTeam.isHuman())
		{
			TeamTypes eWorstEnemy = kThisTeam.AI_getWorstEnemy();
			if ([B]eWorstEnemy == kOtherPlayer.getTeam() &&[/B] eWorstEnemy == GC.getGame().getActiveTeam()) //Fuyu trying something
			{
				szString.append(NEWLINE);
				szString.append(gDLL->getText(L"TXT_KEY_WORST_ENEMY_IS_YOU"));
			}
			else if (eWorstEnemy != NO_TEAM)
			{
				szString.append(NEWLINE);
				szString.append(gDLL->getText(L"TXT_KEY_WORST_ENEMY_IS", GET_TEAM(eWorstEnemy).getName().GetCString()));
			}
		}
	}
// BUG - Leaderhead Worst Enemy - end

edit: I now think all behaviour is intended. Could be wrong though so I'm leaving this question as is.
I still can't figure out why I don't get the Worst Enemy lines twice after merging CvGameTextMgr::getOtherRelationsString though.

edit2: ok, Worst Enemy IS != Worst Enemy OF
stupid me. No more mysteries here.

Leaves only one question: if kThisPlayer.getTeam() is at war with kOtherPlayer.getTeam(), should hover text tell me?
 

Attachments

  • Civ4ScreenShot0048.JPG
    Civ4ScreenShot0048.JPG
    135.9 KB · Views: 88
  • Civ4ScreenShot0049.JPG
    Civ4ScreenShot0049.JPG
    133.9 KB · Views: 78
  • Civ4ScreenShot0050.JPG
    Civ4ScreenShot0050.JPG
    131.4 KB · Views: 62
  • Civ4ScreenShot0051.JPG
    Civ4ScreenShot0051.JPG
    134.3 KB · Views: 96
I'm not sure where you left off in the end, so let me summarize.

1. There is definitely a lack of saying when you are at war with a player you are hovering over. I think this was in the original game, wasn't it? I don't remember specifically removing it, but perhaps my check to omit the active player from the "Fuyu is Worst Enemy" checks also had this consequence. I will add in a "At was with you" back in.

2. I swapped the "X is Worst Enemy" text specifically to make it easier to tell what was happening, but I still don't like it. "X is Worst Enemy" is definitely different from "Worst Enemy of X" as you noticed. I should probably recode this to do what the UP does and merge all rivals with the same status onto a single line:

  • War with you, Mansa Musa
  • Worst Enemy of Mansa Musa, Isabella
  • Montezuma is Worst Enemy
  • Defensive Pact with Ghandi (obviously not possible while at war, just an example)
BTW, what do you think of the yellow color choice? I wanted something that would stand out from the red, negative diplomatic modifiers. While I wanted each type of status to have a different color, I think it would suffer too much Christmas-Treeism.

3. Do you really want different messages for "You/Fuyu are/is Worst Enemy" depending on whether the hover text is about you and that rival versus about two other rivals?
 
For 3 I can answer really quickly: yes that's what I want. The "You" only makes sense to me when the whole thing is about me, that might be a personal preference though.

2. Yes your intentions are very clear now, I'm just that slow.
One AI player can only have 1 worst enemy (X is Worst Enemy), no need for merging here.
Wars and Worst Enemy of X is being reduced to one line already here, and I just made the changes for Defensive pacts too. Now I'd only need to know what would be the best order. First: We are at War! (TXT_KEY_AT_WAR_WITH_YOU), next You are Worst Enemy / Worst Enemy Is, then War with X,Y, followed by Worst Emeny of A,B, last but not least Defensive Pact with C,Z ? Yeah I guess that could be the right order*
Using a different color is a good idea. If yellow is the perfect choice, I don't know but I have no better idea either. It is a bit on the bright side but easy enough to get used to.

1. It might have been in the original game, it might have even been that way with Better AI though I'm not so sure there. I just noticed that I was expecting it and it wasn't there. Coding that was simple enough though, it is already part if BULLAI r14 (not in the right order* though)

edit; or should the order be War-WorstEnemy-DefensivePact
edit2: I think I forgot to add the TXT_KEY_DEFENSIVE_PACT_WITH_YOU case ("We protect each other" / "We are allies" / "We signed a Defensive Pact" <- still not sure what text to use)
 
I think I'd go with

  • War with you
  • You are WE
  • You have DP
  • Wars with rivals (merged)
  • Rival is WE (single)
  • WE of rivals (merged)
  • DPs with rivals (merged)
Cyan makes another good highlight color, and it's nice that it doesn't have another meaning like red/green/yellow. I might check it out this weekend as I'll be (hopefully) finally merging in the latest UP before releasing BULL 1.1.

I know merging BULL with BAI is going to be a PITA right after I merge in the latest UP, so I apologize up front for letting that slide for so long (BULL has 0.9 or 1.0 IIRC). I really hate merging code and far prefer writing new code which is probably why I tend to rewrite whatever I merge.
 
Don't worry about UP, that is already in Better AI, so unless you create something completely new from it, I'm simply going to ignore it and leave jdog's code the way it is.

As for the order, yours makes most sense, I was just not sure if I want to seperate You are WE and Rival is WE. But I guess that can be done, just needs another temp variable to store the Rival is WE sting.

For simplicity reasons I'll skip any extra handling of DefensivePactsWithYou though.

  • War with you
  • You are WE
  • Wars with rivals (merged)
  • Rival is WE (single)
  • WE of rivals (merged)
  • DPs with rivals (merged)
Leaders should only tell about their Worst Enemy if the OtherPlayer and ActiveTeam has already met that civ.

Why are you using GC.getGame() instead of GC.getGameINLINE()? (Of course I don't know the difference, I'm just seeing the INLINE version more often in the code)
 
So I'm working on the code now and it quickly became a huge rat's nest until I realized why I was having so much trouble: adding these relations to the scoreboard. But I finally had an epiphany; please tell me if this makes sense or not.

There should be two views (and probably two separate functions):

Single Leader

This would be in the scoreboard and most leaderheads. This functions should show you all of the relations that leader has with all rivals that you've both met. It could call out cases where you are involved in the relation if we want.

This is the view we were mostly discussing in the last few posts where you want to find out every relation that a single rival is involved in, including with you. Who is their WE? Who hates them? Who are they fighting? Who do they have a DP with?

Two Leaders

This only shows up on the F4:GLANCE tab (the smilies in the cells--not the row/column leaderheads) and the F5:SIT-REP tab. [Did I miss one?] This should show only the relations between the two leaders.

Thus when you hover over the :( at the intersection of Mansa Musa's column and Montezuma's row it will show you if they are each other's WE, if they are at war, and if they have a DP. It won't show you anything about any other rivals.

This is the view you seek when you want to know what these rivals think of each other and what relations they have. I think this will clear up a lot of the confusion on these tabs.
 
I have no interest in the Two Leaders version, getOtherRelations should show other relations, as the name says, I'm just changing it right now to also show relations with each other.
I just want Single Leader everywhere, and "_YOU"-special treatment only for glance 1st line/scoreboard/other default views where otherPlayer == ActiveTeam.

I am also wondering whether I'm making sense or not. Well the behaviour I want is now coded (as I said, missing "Defensive Pact with YOU" special treatment)

Spoiler :
Code:
[COLOR="Blue"]void[/COLOR] CvGameTextMgr::getOtherRelationsString(CvWStringBuffer& szString, PlayerTypes eThisPlayer, PlayerTypes eOtherPlayer)
{
	[COLOR="Blue"]if[/COLOR] (eThisPlayer == NO_PLAYER || eOtherPlayer == NO_PLAYER)
	{
		[COLOR="Blue"]return[/COLOR];
	}
	CvPlayer& kThisPlayer = GET_PLAYER(eThisPlayer);
	CvPlayer& kOtherPlayer = GET_PLAYER(eOtherPlayer);

/[COLOR="Green"]************************************************************************************************/
/* BETTER_BTS_AI                         11/08/08                                jdog5000       */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
/* original code
	for (int iTeam = 0; iTeam < MAX_CIV_TEAMS; ++iTeam)
	{
		CvTeamAI& kTeam = GET_TEAM((TeamTypes) iTeam);
		if (kTeam.isAlive() && !kTeam.isMinorCiv() && iTeam != kThisPlayer.getTeam() && iTeam != kOtherPlayer.getTeam())
		{
			if (kTeam.isHasMet(kOtherPlayer.getTeam()))
			{
				if (::atWar((TeamTypes) iTeam, kThisPlayer.getTeam()))
				{
					szString.append(NEWLINE);
					szString.append(gDLL->getText(L"TXT_KEY_AT_WAR_WITH", kTeam.getName().GetCString()));
				}

				if (!kTeam.isHuman() && kTeam.AI_getWorstEnemy() == kThisPlayer.getTeam())
				{
					szString.append(NEWLINE);
					szString.append(gDLL->getText(L"TXT_KEY_WORST_ENEMY_OF", kTeam.getName().GetCString()));
				}
			}
		}
	}
*/
	// Put all war, worst enemy strings on one line[/COLOR]
	CvWStringBuffer szWarWithString;
	CvWStringBuffer szWorstEnemyString;
	CvWStringBuffer szDefensivePactString;
	[COLOR="Blue"]bool[/COLOR] bFirst = [COLOR="Blue"]true[/COLOR];
	[COLOR="Blue"]bool[/COLOR] bFirst2 = [COLOR="Blue"]true[/COLOR];
	[COLOR="Blue"]bool[/COLOR] bFirst3 = [COLOR="Blue"]true[/COLOR];
	f[COLOR="Blue"]or[/COLOR] ([COLOR="Blue"]int[/COLOR] iTeam = 0; iTeam < MAX_CIV_TEAMS; ++iTeam)
	{
		CvTeamAI& kTeam = GET_TEAM((TeamTypes) iTeam);
		[COLOR="Blue"]if[/COLOR] (kTeam.isAlive() && !kTeam.isMinorCiv() && iTeam != kThisPlayer.getTeam()) //Fuyu trying something: removed " && iTeam != kOtherPlayer.getTeam()"
		{
/[COLOR="Green"]************************************************************************************************/
/* UNOFFICIAL_PATCH                       09/28/09                 Emperor Fool & jdog5000      */
/*                                                                                              */
/*                                                                                              */
/************************************************************************************************/
/* original bts code
			if (kTeam.isHasMet(kOtherPlayer.getTeam()))
*/[/COLOR]
			[COLOR="Blue"]if[/COLOR] (kTeam.isHasMet(kOtherPlayer.getTeam()) && kTeam.isHasMet(kThisPlayer.getTeam()) && kTeam.isHasMet(GC.getGameINLINE().getActiveTeam()))
[COLOR="Green"]/************************************************************************************************/
/* UNOFFICIAL_PATCH                        END                                                  */
/************************************************************************************************/[/COLOR]
			{
				[COLOR="Blue"]if[/COLOR] (::atWar((TeamTypes) iTeam, kThisPlayer.getTeam()))
				{
					[COLOR="Blue"]if[/COLOR] (iTeam == kOtherPlayer.getTeam() && iTeam == GC.getGameINLINE().getActiveTeam())
					{
						szString.append(NEWLINE);
						szString.append(gDLL->getText(L"TXT_KEY_AT_WAR_WITH_YOU"));
					}
					[COLOR="Blue"]else[/COLOR]
					{
						setListHelp(szWarWithString, L"", kTeam.getName().GetCString(), L", ", bFirst);
						bFirst = [COLOR="Blue"]false[/COLOR];
					}
				}
				[COLOR="Blue"]if[/COLOR] ( !kTeam.isHuman() && kTeam.AI_getWorstEnemy() == kThisPlayer.getTeam() )
				{
					setListHelp(szWorstEnemyString, L"", kTeam.getName().GetCString(), L", ", bFirst2);
					bFirst2 = [COLOR="Blue"]false[/COLOR];
				}
[COLOR="Green"]// BUG - Leaderhead Defensive Pacts - start[/COLOR]
				[COLOR="Blue"]if[/COLOR] (kTeam.isDefensivePact(kThisPlayer.getTeam()) && getBugOptionBOOL("MiscHover__LeaderheadDefensivePacts", true, "BUG_LEADERHEAD_HOVER_DEFENSIVE_PACTS"))
				{
					setListHelp(szDefensivePactString, L"", kTeam.getName().GetCString(), L", ", bFirst3);
					bFirst3 = [COLOR="Blue"]false[/COLOR];
				}
[COLOR="Green"]// BUG - Leaderhead Defensive Pacts - end[/COLOR]
			}
		}
	}

[COLOR="Green"]// BUG - Leaderhead Worst Enemy - start[/COLOR]
	CvWStringBuffer szWorstEnemyIsString;
	[COLOR="Blue"]if[/COLOR] (getBugOptionBOOL("MiscHover__LeaderheadWorstEnemy", [COLOR="Blue"]true[/COLOR], "BUG_LEADERHEAD_HOVER_WORST_ENEMY"))
	{
		CvTeamAI& kThisTeam = GET_TEAM(kThisPlayer.getTeam());
		[COLOR="Blue"]if[/COLOR] (!kThisTeam.isHuman())
		{
			TeamTypes eWorstEnemy = kThisTeam.AI_getWorstEnemy();
			CvTeamAI& kWorstEnemy = GET_TEAM((TeamTypes) eWorstEnemy);
			[COLOR="Blue"]if[/COLOR] ([B]eWorstEnemy == kOtherPlayer.getTeam() &&[/B] eWorstEnemy == GC.getGameINLINE().getActiveTeam()) [COLOR="Green"]//Fuyu only for kOtherPlayer[/COLOR]
			{
				szString.append(NEWLINE);
				szString.append(gDLL->getText(L"TXT_KEY_WORST_ENEMY_IS_YOU"));
			}
			[COLOR="Blue"]else if[/COLOR] (eWorstEnemy != NO_TEAM [B]&& kWorstEnemy.isHasMet(kOtherPlayer.getTeam()) && kWorstEnemy.isHasMet(GC.getGameINLINE().getActiveTeam())[/B]) [COLOR="Green"]//Fuyu: having met is requirement, as always[/COLOR]
			{
				setListHelp(szWorstEnemyIsString, L"", GET_TEAM(eWorstEnemy).getName().GetCString(), L", ", true);
			}
		}
	}
[COLOR="Green"]// BUG - Leaderhead Worst Enemy - end[/COLOR]

	[COLOR="Blue"]if[/COLOR]( !szWarWithString.isEmpty() )
	{
		CvWString szTempBuffer;

		szTempBuffer.assign(gDLL->getText(L"TXT_KEY_AT_WAR_WITH", szWarWithString));

		szString.append(NEWLINE);
		szString.append(szTempBuffer);
	}
	[COLOR="Blue"]if[/COLOR]( !szWorstEnemyIsString.isEmpty() )
	{
		CvWString szTempBuffer;

		szTempBuffer.assign(gDLL->getText(L"TXT_KEY_WORST_ENEMY_IS", szWorstEnemyIsString));

		szString.append(NEWLINE);
		szString.append(szTempBuffer);
	}
	[COLOR="Blue"]if[/COLOR]( !szWorstEnemyString.isEmpty() )
	{
		CvWString szTempBuffer;

		szTempBuffer.assign(gDLL->getText(L"TXT_KEY_WORST_ENEMY_OF", szWorstEnemyString));

		szString.append(NEWLINE);
		szString.append(szTempBuffer);
	}
	[COLOR="Blue"]if[/COLOR]( !szDefensivePactString.isEmpty() )
	{
		CvWString szTempBuffer;

		szTempBuffer.assign(gDLL->getText(L"TXT_KEY_DEFENSIVE_PACT_WITH", szDefensivePactString));

		szString.append(NEWLINE);
		szString.append(szTempBuffer);
	}
[COLOR="Green"]/************************************************************************************************/
/* BETTER_BTS_AI                          END                                                   */
/************************************************************************************************/[/COLOR]
}

myself said:
Why are you using GC.getGame() instead of GC.getGameINLINE()? (Of course I don't know the difference, I'm just seeing the INLINE version more often in the code)
 
The reason for the two player view is for the GLANCE tab when you are pointing at an intersection. When you hover over the spot that shows what player A thinks of player B, it is confusing to show what player A (or is it B?) thinks of players C, D, and E. Oh, and what players D and G think of A (or is it B? Wait, J? :p).

I'm sick of hovering over Mansa Musa + Montezuma and seeing "Worst enemy of Isabella" and not being able to tell which of them that means. When I ask Ragnar, "What do you think of Genghis?" he shouldn't reply, "Roosevelt is Genghis's worst enemy." or "He has a defensive pact with Louis XIV."

My train of thought goes like this:

  • If I want to know what a player thinks of me specifically, I'll hover over their smilie on my row on the GLANCE tab. I can also hover over their leaderhead in the scoreboard and it will call out my relations with them separately.
  • If I want to know how two players relate without regard to third parties, I'll hover over their intersection on the GLANCE tab. This is exactly why this tab exists--to drill down on two rivals relationship with minimal noise.
  • If I want to know how a rival relates to all other players, I'll hover over their leaderhead in the scoreboard or most other places (along top row and left column of GLANCE tab too).
Any getGame() is a mistake and should be replaced with getGameINLINE(). The difference is an infinitesimal increase in speed at a tiny cost of memory. More it's about consistency, and I've just been doing more Python lately which doesn't have inline functions.
 
I think I know what you mean, I still disagree. Relations between 2 civs is what you should see at an intersection of the glance page WITHOUT having to hover over it. Hover gives info that is not directly visible, my changes just add what is already visible to that hover info, while what you propose removes some additional info. And that's simply where we disagree: I say hover shows litterally everything, as long as the relevant players have met each other and have met me.
You could emphasize relations with each other by giving it special treatment (WITH_EACH_OTHER similar to WITH_YOU) but that would probably get too confusing.
 
Relations between 2 civs is what you should see at an intersection of the glance page WITHOUT having to hover over it.

Yes, that's a good point, though only war and enemy status (one-way: column leader hates row leader) is shown right now as icons. For a while I've wanted to add more icons above and below the smily for certain attitude modifiers. For example, +X for shared religion would show the :religion: icon above; -Y for different would show it below.

I guess why I am considering removing the extra relations (those not concerning the pair of leaders) is that it's not clear which one I should show. Should I show leader A's worst enemy or leader B's? Show I show leaders that hate leader A or leader B? What I don't like is that when you hover over an icon representing leader A's (column) attitude toward leader B (row), it's not really obvious which makes more sense.

Okay, leader A's worst enemy makes sense since that is who leader A has a strong opinion about. But it doesn't seem right to show who hates leader A. It makes more sense to show who also hates leader B. And showing wars is even worse. If showing wars with one of the leaders, I'd lean toward leader B because I tend to hover over a cell when I am considering going to war against or trading with leader B.

Actually, deciding the use case is what's missing here. Why do you hover over a cell on the GLANCE screen? What decision are you trying to make?

Here's what I want to see and when. Items marked (x) aren't in the hover yet.

  1. Going to War against leader B?
    • What does A think of B? (diplo modifiers)
    • Who has B as a worst enemy? (x)
    • Who likes B (x, but can see the smilies along the row)
    • Who has a DP with B (x)
  2. Trading with leader B?
    • Who has B as a worst enemy? (x)
    • Who is at war with B? (x)
All the things above marked (x) are shown for leader A, but I don't need that information for leader A--I need it for leader B.

Of course, I can would actually hover over leader B's leaderhead to get this information, so why would I ever hover over the smily? What should it tell me that I can't see by hovering over leader B (not counting diplo modifiers ofc)?
 
You are definitely right about
it's not really obvious which makes more sense.
as I'm a bit confused right now. What you want is entirely new behaviour, probably useful but not what I'm used to, which would be: leader A (column) dictates what info is shown, all info is about A, as the very first line in the hover is A's leadername, followed by his traits. (The next lines are attitude modifiers from A towards B, which imo means you can't just make the whole hover about B)
I'm sure you have a point with the use case just be aware that (at least in my eyes) you are reinventing something, not simply applying minor changes.

For a while I've wanted to add more icons above and below the smily for certain attitude modifiers. For example, +X for shared religion would show the icon above; -Y for different would show it below.
do not want. The same icon for opposite meanings, only difference being position? Not acceptable. Different icons, same position could work though, but I am very happy with the current smily + number, with occasional war and worst enemy symols.

As for colors I was considering to use green for alliances* (same team, different player - but I'm not adding that since I don't know how) & Defensinve Pacts & Vassal/Master relations*, Yellow for Worst Enemies (of&is), and red for wars. "_You"-stuff first, then the order goes green->yellow->red, similar to how the green positive attitude modifieres are shown first. Just as an alternative to all yellow/ all cyan.
 
The next lines are attitude modifiers from A towards B, which imo means you can't just make the whole hover about B.

That's why I am thinking to change it so the A + B hover only shows relations between A and B--no one else. That way there cannot be any confusion, and you can always move your mouse to the top or left of the screen and hover over the leaderhead image itself to see all relations that leader has with everyone.

The same icon for opposite meanings, only difference being position? Not acceptable. Different icons, same position could work though.

Different icons would of course be my preference, but having zero art skills I'm stuck working with the existing icons. This is most of the reason I haven't bothered adding this feature: a lot of work only to find it is too confusing and must be removed (high risk). The other component is that when people play large games the screen is already too crowded.

As for colors I was considering to use green for alliances* (same team, different player - but I'm not adding that since I don't know how) & Defensinve Pacts & Vassal/Master relations*, Yellow for Worst Enemies (of&is), and red for wars. "_You"-stuff first, then the order goes green->yellow->red, similar to how the green positive attitude modifieres are shown first. Just as an alternative to all yellow/ all cyan.

Yes, I thought of that too, but I'm concerned about having the same colors for different things right next to each other (next line). I suppose if I moved the espionage points (white line) to just after the attitude modifiers it would make for a nice separator.

When I modify existing BTS code, I strive to do it in such a way as I make as few separate code alterations as possible, thinking it would make it harder for mergers if there were 10 changes throughout the function. Maybe that doesn't even matter, and I can more freely rewrite entire functions.
 
And you are right about the no seperation issue with colors; all yellow is fine with me.

I didn't even think about space but you are right again, some people play games with dozens of civs/teams, which is a very good point against adding more icons, even if someone here had the artistic skills required.

It's not my preference but making A+B hover only about A+B relations (if B != ActiveTeam) sounds ok, not sure if you want to hijack OtherRelations for this though, since the BTS version of that function does the exact opposite: it returns every relation BUT those between A and B. (But I already said most of that in #1371.)
 
Back
Top Bottom