RB Mod Approval for the BUG Mod

ruff_hi

Live 4ever! Or die trying
Joined
Oct 24, 2005
Messages
9,135
Location
an Aussie in Boston
We are currently preparing a document to try and get the BUG Mod approved for events at Realms Beyond. Obviously this is a slow process as we need to illustrate the non-spoiler nature of this mod and also work from a stable mod version. We currently have the following sections:
  • Preliminary
  • General
  • Advisors
  • Clock
  • Scoreboard
  • Alerts
  • Logging
  • Unit Naming
 
  • Bug Option Screens - finished
  • Preliminary - finished
  • General - finished
  • Advisors - finished
  • Clock - finished
  • Scoreboard - finished
  • Alerts - finished
  • Logging - finished
  • Unit Naming - finished
  • Credits - finished (it didn't take long :D)
 
I will say that there is one group of columns in CDA that could be considered spoilerish: the Global Rank columns. I haven't looked closely at the code, but as I understand it you can see where your cities rank in various areas (gold, science, prod, food, etc.) compared to all other cities in the world, known or unknown.

Other than that, I think we adhere to a non-spoiler nature.
 
Is there a document somewhere that gives you all the CDA columns that are available?
 
Sadly, right now it's the CDA.py file. A bunch are mentioned in the comments at the top, and I tried to sync them up, but I may have missed some.

Otherwise, just customize a new page and you see all the columns on the right. They are the "GRANK_foo" ones, IIRC.
 
perfect documentation :D
 
Are we going to use 2.0 or 2.1 for our "stable release"? I've noticed that our bug reporting has dropped off a bit, so think we have most of the kinks worked out in the SVN, and the installation issues resolved. If it's 2.1, we should release that this weekend, because otherwise I'll be gone for about 2 weeks. If it is 2.1, I'll try to take some screen shots for what's required. Is so easy to do, but we're all so lazy about screenies.:p
 
I'm waiting for the next release to finalize the screenies. I have a collection of screenshots that show most / all of the features.

Please can you do a release this week end - that would be great.
 
Looked for CDA.py and couldn't find it. Then I remembered that EF is a lazy bar***d and looked for CvCustomizableDomesticAdvisor.py - ahh, there it is :D.

Anyway, opened up the python file and found this nice array (see spoiler) ... is this the complete list of columns available?

Spoiler :
PHP:
self.COLUMNS_LIST = [
				# Name                      Width    Type   CyCityFunction0			CyCityFunction1			Arg									selfFunction							Arg							Title

				("NAME",					95,		"text",	CyCity.getName,			None,					0,									None,									None,						"localText.getText(\"TXT_KEY_DOMESTIC_ADVISOR_NAME\", ()).upper()"),
				("ADVISE_CULTURE",			150,	"text",	None,					None,					0,									self.advise,							"Culture",					"localText.getText(\"TXT_KEY_CONCEPT_CULTURE\", ()).upper()"),
				("ADVISE_MILITARY",			150,	"text",	None,					None,					0,									self.advise,							"Military",					"localText.getText(\"TXT_KEY_ADVISOR_MILITARY\", ()).upper()"),
				("ADVISE_NUTTY",			150,	"text",	None,					None,					0,									self.advise,							"Nutty",					"u\"NUTTY\""),
				("ADVISE_RELIGION",			150,	"text",	None,					None,					0,									self.advise,							"Religion",					"localText.getText(\"TXT_KEY_CONCEPT_RELIGION\", ()).upper()"),
				("ADVISE_RESEARCH",			150,	"text",	None,					None,					0,									self.advise,							"Research",					"localText.getText(\"TXT_KEY_COMMERCE_RESEARCH\", ()).upper()"),
				("ADVISE_SPACESHIP",		150,	"text",	None,					None,					0,									self.advise,							"Spaceship",				"localText.getText(\"TXT_KEY_CONCEPT_SPACESHIP\", ()).upper()"),
				("AUTOMATION",				80,		"text",	None,					None,					0,									self.calculateAutomation,				None,						"u\"AUTO\""),
				("BASE_COMMERCE",			38,		"int",	None,					CyCity.getBaseYieldRate, YieldTypes.YIELD_COMMERCE,			None,									None,						"u\"B\" + self.commerceIcon"),
				("BASE_FOOD",				38,		"int",	None,					CyCity.getBaseYieldRate, YieldTypes.YIELD_FOOD,				None,									None,						"u\"B\" + self.foodIcon"),
				("BASE_PRODUCTION",			38,		"int",	None,					CyCity.getBaseYieldRate, YieldTypes.YIELD_PRODUCTION,		None,									None,						"u\"B\" + self.hammerIcon"),
				("CONSCRIPT_UNIT",			90,		"text",	None,					None,					0,									self.calculateConscriptUnit,			None,						"localText.getText(\"TXT_KEY_CONCEPT_DRAFT\", ()).upper()"),
				("COULD_CONSCRIPT_UNIT",	90,		"text",	None,					None,					0,									self.calculatePotentialConscriptUnit,	None,						"localText.getText(\"TXT_KEY_CONCEPT_DRAFT\", ()).upper() + u\"#\""),
				("CORPORATIONS",			90,		"text",	None,					None,					0,									self.calculateCorporations,				None,						"localText.getText(\"TXT_KEY_CONCEPT_CORPORATIONS\", ()).upper()"),
				("CULTURE",					53,		"int",	None,					None,					0,									self.calculateTotalCulture,				None,						"self.cultureIcon"),
				("CULTURE_RATE",			38,		"int",	None,					CyCity.getCommerceRate, CommerceTypes.COMMERCE_CULTURE,		None,									None,						"self.cultureIcon + u\"R\""),
				("CULTURE_TURNS",			38,		"int",	None,					None,					None,								self.calculateCultureTurns,				None,						"self.cultureIcon + u\"T\""),
				("DEFENSE",					60,		"int",	None,					None,					0,									self.calculateDefense,					None,						"self.defenseIcon"),
				("ESPIONAGE",			    38,		"int",	None,					CyCity.getCommerceRate, CommerceTypes.COMMERCE_ESPIONAGE,	None,									None,						"self.espionageIcon"),
				("ESPIONAGE_DEF",			60,		"int",	CyCity.getEspionageDefenseModifier,	None,		0,									self.calculateEspionageDefense,			None,						"self.espionageIcon + u\"%\""),
				("FEATURES",				106,	"text",	None,					None,					0,									self.calculateFeatures,					None,						"localText.getText(\"TXT_KEY_MISC_FEATURES\", ())"),
				("FOOD",					35,		"int",	None,					None,					0,									self.calculateFood,						None,						"self.foodIcon"),
				("FOUNDED",					80,		"date",	None,					None,					0,									self.calculateFounded,					None,						"localText.getText(\"TXT_KEY_DOMESTIC_ADVISOR_FOUNDED\", ()).upper()"),
				("GARRISON",				30,		"int",	CyCity.getMilitaryHappinessUnits,	None,		0,									None,									None,						"self.militaryIcon"),
				("GOLD",					38,		"int",	None,					CyCity.getCommerceRate, CommerceTypes.COMMERCE_GOLD,		None,									None,						"self.goldIcon"),
				("GRANK_BASE_COMMERCE",		42,		"int",	None,					None,					0,									self.findGlobalBaseYieldRateRank, YieldTypes.YIELD_COMMERCE,		"u\"B\" + self.commerceIcon + u\"g\""),
				("GRANK_BASE_FOOD",			42,		"int",	None,					None,					0,									self.findGlobalBaseYieldRateRank, YieldTypes.YIELD_FOOD,			"u\"B\" + self.foodIcon + u\"g\""),
				("GRANK_BASE_PRODUCTION",	42,		"int",	None,					None,					0,									self.findGlobalBaseYieldRateRank, YieldTypes.YIELD_PRODUCTION,		"u\"B\" + self.hammerIcon + u\"g\""),
				("GRANK_COMMERCE",			38,		"int",	None,					None,					0,									self.findGlobalYieldRateRank, YieldTypes.YIELD_COMMERCE,			"self.commerceIcon + u\"g\""),
				("GRANK_FOOD",				38,		"int",	None,					None,					0,									self.findGlobalYieldRateRank, YieldTypes.YIELD_FOOD,				"self.foodIcon + u\"g\""),
				("GRANK_PRODUCTION",		38,		"int",	None,					None,					0,									self.findGlobalYieldRateRank, YieldTypes.YIELD_PRODUCTION,			"self.hammerIcon + u\"g\""),
				("GRANK_CULTURE",			38,		"int",	None,					None,					0,									self.findGlobalCommerceRateRank, CommerceTypes.COMMERCE_CULTURE,	"self.cultureIcon + u\"g\""),
				("GRANK_GOLD",				38,		"int",	None,					None,					0,									self.findGlobalCommerceRateRank, CommerceTypes.COMMERCE_GOLD,		"self.goldIcon + u\"g\""),
				("GRANK_RESEARCH",			38,		"int",	None,					None,					0,									self.findGlobalCommerceRateRank, CommerceTypes.COMMERCE_RESEARCH,	"self.researchIcon + u\"g\""),
				("GREATPEOPLE",				45,		"int",	CyCity.getGreatPeopleProgress,	None,			0,									None,									None,						"self.figureheadIcon"),
				("GREATPEOPLE_RATE",		38,		"int",	CyCity.getGreatPeopleRate,		None,			0,									None,									None,						"self.figureheadIcon + u\"R\""),
				("GREATPEOPLE_TURNS",		38,		"int",	None,					None,					None,								self.calculateGreatPeopleTurns,			None,						"self.figureheadIcon + u\"T\""),
				("GROWTH",					35,		"int",	None,					None,					0,									self.calculateGrowth,					None,						"self.redfoodIcon"),
				("HAPPY",					30,		"int",	None,					None,					0,									self.calculateNetHappiness,				None,						"self.happyIcon"),
				("HEALTH",					30,		"int",	None,					None,					0,									self.calculateNetHealth,				None,						"self.healthIcon"),
				("LOCATION_X",				50,		"int",	CyCity.getX,			None,					0,									None,									None,						"u\"X\""),
				("LOCATION_Y",				50,		"int",	CyCity.getY,			None,					0,									None,									None,						"u\"Y\""),
				("MAINTENANCE",				30,		"int",	CyCity.getMaintenance,	None,					0,									None,									None,						"u\"%c\" % CyGame().getSymbolID(FontSymbols.BAD_GOLD_CHAR)"),
				("POPULATION",				35,		"int",	CyCity.getPopulation,	None,					0,									None,									None,						"localText.getText(\"TXT_KEY_POPULATION\", ()).upper()"),
				("POPULATION_REAL",			65,		"int",	CyCity.getRealPopulation,	None,				0,									None,									None,						"localText.getText(\"TXT_KEY_POPULATION\", ()).upper() + u\"#\""),
				("POWER",					50,		"text",	None,					None,					0,									self.calculatePower,					None,						"self.powerIcon"),
				("PRODUCING",				90,		"text",	None,					None,					0,									self.calculateProducing,				None,						"localText.getText(\"TXT_KEY_DOMESTIC_ADVISOR_PRODUCING\", ())"),
				("PRODUCING_TURNS",			33,		"int",	None,					None,					0,									self.calculateProducingTurns,			None,						"self.hammerIcon + u\"T\""),
				("PRODUCTION",				38,		"int",	None,					None,					0,									self.calculateProduction,				None,						"self.hammerIcon"),
				("NRANK_BASE_COMMERCE",		42,		"int",	None,					CyCity.findBaseYieldRateRank, YieldTypes.YIELD_COMMERCE,	None,									None,						"u\"B\" + self.commerceIcon + u\"n\""),
				("NRANK_BASE_FOOD",			42,		"int",	None,					CyCity.findBaseYieldRateRank, YieldTypes.YIELD_FOOD,		None,									None,						"u\"B\" + self.foodIcon + u\"n\""),
				("NRANK_BASE_PRODUCTION",	42,		"int",	None,					CyCity.findBaseYieldRateRank, YieldTypes.YIELD_PRODUCTION,	None,									None,						"u\"B\" + self.hammerIcon + u\"n\""),
				("NRANK_COMMERCE",			38,		"int",	None,					CyCity.findYieldRateRank, YieldTypes.YIELD_COMMERCE,		None,									None,						"self.commerceIcon + u\"n\""),
				("NRANK_FOOD",				38,		"int",	None,					CyCity.findYieldRateRank, YieldTypes.YIELD_FOOD,			None,									None,						"self.foodIcon + u\"n\""),
				("NRANK_PRODUCTION",		38,		"int",	None,					CyCity.findYieldRateRank, YieldTypes.YIELD_PRODUCTION,		None,									None,						"self.hammerIcon + u\"n\""),
				("NRANK_CULTURE",			38,		"int",	None,					CyCity.findCommerceRateRank, CommerceTypes.COMMERCE_CULTURE,	None,								None,						"self.cultureIcon + u\"n\""),
				("NRANK_GOLD",				38,		"int",	None,					CyCity.findCommerceRateRank, CommerceTypes.COMMERCE_GOLD,	None,									None,						"self.goldIcon + u\"n\""),
				("NRANK_RESEARCH",			38,		"int",	None,					CyCity.findCommerceRateRank, CommerceTypes.COMMERCE_RESEARCH,	None,								None,						"self.researchIcon + u\"n\""),
				("RELIGIONS",				90,		"text",	None,					None,					0,									self.calculateReligions,				None,						"localText.getText(\"TXT_KEY_ADVISOR_RELIGION\", ()).upper()"),
				("RESEARCH",				38,		"int",	None,					CyCity.getCommerceRate, CommerceTypes.COMMERCE_RESEARCH,	None,									None,						"self.researchIcon"),
				("SPECIALISTS",				209,	"text",	None,					None,					0,									self.calculateSpecialists,				None,						"localText.getText(\"TXT_KEY_CONCEPT_SPECIALISTS\", ()).upper()"),
				("THREATS",					60,		"text",	None,					None,					0,									self.calculateThreats,					None,						"u\"Threats\""),
				("TRADE",					30,		"int",	None,					None,					0,									self.calculateTrade,					None,						"self.tradeIcon"),
			]
I prefer php because it is color coded, not that it actually means anything to me - code has wrapping issues with this text too.
The GRANK_* look like a bit of a 'no spoiler' problem. Can we either remove them or put in an option to disable their display? I think the quickest way is to mod the following items ...

def findGlobalBaseYieldRateRank (self, city, szKey, arg):
def findGlobalYieldRateRank (self, city, szKey, arg):
def findGlobalCommerceRateRank (self, city, szKey, arg):

... with this bit of code at the top (also need to create the BUG option ... DUH!)
PHP:
if not BugScreens.isShowCDAGlobals:
    return 0
PS: Is there a write up on how to create your own layout and / or use Cammagno's pre-defined layout?
 
@ ruff ~ has RB ever ruled on features that present data which is technically available in-game, but, through the use of a mod, eg, BUG, is more easily available, such as, happy limits, trade possibilities, etc, being spoiler (or spoiler-ish)?
 
I'm lazy? You couldn't even finish your word -- just typed a bunch of easy asterisks. :p Besides, all good coders are lazy.

Your plan to hide the columns optionally intrigues me. This would be an option on the Options screen that they can enable/disable themselves ... so I guess RB is on the honor system? That shouldn't be too hard.

@Cammagno - You know that screen the best. Are there any other spoiler columns we should hide?
 
@ ruff ~ has RB ever ruled on features that present data which is technically available in-game, but, through the use of a mod, eg, BUG, is more easily available, such as, happy limits, trade possibilities, etc, being spoiler (or spoiler-ish)?
They did approve one of my clock mods that shows the current turn number. That information isn't available in the game (you have to know the max turns and deduct the F8 (or is it F9) turns to go from that max). They have also approved BlueMarble, editing themes and editing another theme type file that made the city labels bigger when zooming out. They haven't approved anything of BUGs size. I am not knowing what to expect when I lodge my 'approval application'.

I'm lazy? You couldn't even finish your word -- just typed a bunch of easy asterisks. :p Besides, all good coders are lazy.
I was half way thru typing that and then thought "wait, EF has done 95% of the coding for BUG, don't want to pi$$ him off" :hide:

EmperorFool said:
Your plan to hide the columns optionally intrigues me. This would be an option on the Options screen that they can enable/disable themselves ... so I guess RB is on the honor system? That shouldn't be too hard.
I wasn't planning to hide them, just change the function so that it returned a '0' instead of the actual rank. That seemed like the easiest way to fix the issue.

And, yes RB is definitely on the honor system. That said, the RB events are about playing the game and reporting (with screenshots) so it is fairly easy to see who used a mod. A number of people have been sprung inadvertently using non approved mods (me included). All this does is move your report to a shadow report (ie not technically included in the list of results). RB says that it doesn't approves of people deliberately using a non approved mod but I haven't seen that in the time that I have been there.
 
"wait, EP has done 95% of the coding for BUG, don't want to pi$$ him off"

:lol: Then perhaps consider calling me "EF" instead of "EP". Heck, it's even easier to type "EF"! :mischief:

I wasn't planning to hide them, just change the function so that it returned a '0' instead of the actual rank.

Agreed. I was just being lazy in my description. I'd probably define a constant called "HIDDEN_VALUE" that equals "?" that we can return from any function that gets "hidden". That way someone could make us a pretty font glyph to use later.
 
Have I called you EP in all my posts? What a bunt I am! Sorry mate.

Going back and editing all of my posts now.
 
Agreed. I was just being lazy in my description. I'd probably define a constant called "HIDDEN_VALUE" that equals "?" that we can return from any function that gets "hidden". That way someone could make us a pretty font glyph to use later.
"?" might be a little misleading ... people could think "drats, I must have done something wrong". How about "n/a" or "~" or "*"?
 
Anyway, opened up the python file and found this nice array (see spoiler) ... is this the complete list of columns available?

No, it is from the original mod.

The GRANK_* look like a bit of a 'no spoiler' problem. Can we either remove them or put in an option to disable their display? I think the quickest way is to mod the following items ...

I think it's even more easy if I simple remove them from my pages... :)

PS: Is there a write up on how to create your own layout and / or use Cammagno's pre-defined layout?

All the info about how to customize the CDA are in the included readme of the original mod, but anyway it's rather easy.
Use of my pages is thery simple, it's automatic :)
If someone doesn't want to use my layout, he simply has to delete the CustomDomAdv.txt file, and a default one will be created by CDA.
 
I think it's even more easy if I simple remove them from my pages... :)
Is that the answer? Because, couldn't a player just put the 'spoiler' columns back in? I would prefer a version that couldn't display the spoiler columns.

Where should the CDA.txt file go? And I did read the readme's and must have overlooked that information.
 
Is that the answer? Because, couldn't a player just put the 'spoiler' columns back in? I would prefer a version that couldn't display the spoiler columns..

Of course a player can put the coloumn back in, but he can do the same if you make them optionally hidden. If you don't want that he can bring them back, we can simply remove them not only from my pages but also from from CDA. This is BUG, so I think its better to remove them.

Where should the CDA.txt file go? And I did read the readme's and must have overlooked that information.

It is CustomDomAdv.txt, it is in the CustomDomAdv folder (which is inside the main dir, at the same level of CustomAssets), and it is placed there automatically by the setup. It can be deleted, and the games create a default one.
 
further discussion of CDA custom files and spoiler nature of columns moved to here.
 
Back
Top Bottom