Ergebnis 1 bis 8 von 8

Thema: Screenshots von weiter weg erstellen

  1. #1
    Registrierter Benutzer Avatar von JohnDay
    Registriert seit
    26.12.12
    Beiträge
    4.819

    Screenshots von weiter weg erstellen

    Ich möchte das hier als Thema aufschreiben, um es mit ehrlich gesagt selber besser merken und von Zeit zu Zeit nachzulesen zu können.

    Screenshots von nahem erstellen hat BogggB unter http://www.civforum.de/showthread.ph...und-Debug-Menu sehr schön erklärt.

    Ich hatte dabei aber stehts das Problem, dass ich nicht wußte, wie ich das einzustellen habe um ganz weit heraus zu zoomen, um zum Beispiel Screenshot von neuen Karten machen zu können. Zwei Änderungen sind nötig und wenn es jemand nach machen möchte, immer an eine Sicherungskopie denken, ok.

    GobalDefines.xml unter PieAncientEuropeV/Assets/XML die Einstellung suchen <DefineName>FIELD_OF_VIEW</DefineName> und den Wert darunter auf 70 einstellen für die Neigung der Kamera. Normal ist 42.

    Ich denke, danach müßte ein Neustart des Programms das erst aktivieren.

    CIV4DetailManager.xml unter Sid Meier's Civilization 4/Beyond the Sword/Assets/XML/Misc die Einstellung suchen <Name>CAMERA_MAX_DISTANCE_FADER </Name> und den Wert auch ruhig über 1 setzen. Normal sind 0,75.

    Diese Auswirkung ist hier sofort im Fenstermodus auch ohne Neustart ansehbar.

    Dann noch vier Tastaturkürzel um die Sache komplett zu machen:

    STRG + Z Schaltet die Sicht auf die ganze Karte frei
    STRG + B Schaltet Details auf der Karte ein/aus
    STRG + I Menü minimieren
    STRG + R Ressourcen ein / ausblenden

    Damit kann man die Karte leeren und einen schön weit heraus gezommten Screentshot machen um die Map vorzustellen.

    Wenn jemand dazu noch Erweiterungen und Vorschläge hat, ich würde mich freuen!

    Grüße John

    P.S. Die Tastaturkürzel setzen Chipotel voraus. Wie man das aktiviert, wird auch in BoggyB´s Threat erklärt: Kamerasteuerung und Debug Menu.

    P.S. Weiß jemand wie man die Wolken auschalten kann wenn man weiter weg gezoomt hat? Sonst finde ich das irgendwann später heraus .
    Geändert von JohnDay (16. April 2014 um 12:38 Uhr)

  2. #2
    Registrierter Benutzer Avatar von Thorgal
    Registriert seit
    06.08.09
    Beiträge
    5.238
    Das Ganze geht auch ohne große XML-Änderungen.

    Mit aktivierten Cheatcode kann man die Kamera selbst übernehmen:
    -) Mit Strg+F kommt man in die Satellitenkamera und die Sicht wechselt in den 90° Winkel.
    -) Mit Strg+Alt+F kommt man in die Flying Kamera und man kann mit Hilfe der Maus und den Pfeiltasten den Kamerawinkel beliebig einstellen und über die Karte und sogar unter die Karte wechseln. Das ist zwar ein bisserl knifflig, weil die Steuerung sehr sensibel reagiert, aber mit ein bisserl Übung geht da vieles. Und die Wolken sind dabei abgeschaltet.
    Pie's Antikes Europa (PAE): Genieße CIV in der Antike.

    PAE - Mythos Antike: Die Geschichte der drei furchtlosesten Herrscher des PBEM 442.

    Kingdom of Africa: Auf Abwegen im PB 73

  3. #3
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.043
    Zitat Zitat von Thorgal Beitrag anzeigen
    Das Ganze geht auch ohne große XML-Änderungen.

    Mit aktivierten Cheatcode kann man die Kamera selbst übernehmen:
    -) Mit Strg+F kommt man in die Satellitenkamera und die Sicht wechselt in den 90° Winkel.
    -) Mit Strg+Alt+F kommt man in die Flying Kamera und man kann mit Hilfe der Maus und den Pfeiltasten den Kamerawinkel beliebig einstellen und über die Karte und sogar unter die Karte wechseln. Das ist zwar ein bisserl knifflig, weil die Steuerung sehr sensibel reagiert, aber mit ein bisserl Übung geht da vieles. Und die Wolken sind dabei abgeschaltet.
    Die zwei Sachen gehen aber auch ohne chipotle, meine ich. Flying Camera braucht auf jeden Fall nur "Allow Flying Camera = 1" in der ini, Satellitenkamer (ist übrigens Alt+F, nicht Strg) sollte auch ohne alles gehen.
    Bei der fliegenden Kamera find ich es wichtig, dass man mit sich auch mit dem Mausrad, Bild oben und Bild unten navigieren und sich mit Enter am Boden festsetzen lassen kann.
    Und wo wir grade bei Field of View sind, in vielen Mods kann man das mittels Schieberegler ingame ändern (ist Teil von BUG, glaub ich):
    Bild
    Bild
    So würd ich zwar nicht normal spielen wollen, aber für verschiedene Kameraperspektiven ist das nützlich. Manches davon kann man auch mittels der fliegenden Kamera erreichen, hat aber trotzdem noch den Vorteil, dass man das Spiel noch normal bedienen, z.B. noch mehrere Atombomben abfeuern kann. Ich spreche da aus Erfahrung Man kann zwar auch in der fliegenden Kamera der momentan ausgewählten Einheit Befehle geben und sogar mit [.] und [,] zwischen den Einheiten auf dem Feld wechseln, aber nicht zwischen Einheiten auf mehreren Feldern. Ohne Flying Camera geht das, gegebenenfalls muss man das Spiel pausieren.
    Außerdem kann man, wenn man mit hohem Field of View in der Flying Camera ist, viel weiter herauszoomen. Mit dem Standardwert von 42 () komm ich bis hierhin,
    Bild
    dann ist Schluss. Zoom ich weiter raus, wird alles schwarz. Mit einem Wert von 100 hingegen
    Bild
    komm ich bis hier. Man beachte zwei Dinge:
    -) Die von mir gemalten roten Striche begrenzen die Spielwelt. Civ hat nur die Eigenschaft, links und rechts unendlich viele Kopien der Welt ranzuhängen, wenn eine Umseglung in dieser Richtung möglich ist (auf den Regionalkarten von PAE wär das also nicht der Fall). Heißt: Mit FOV 100 kann ich so weit rauszoomen, wie ich überhaupt will. Das hier gezeigte Maximum ist schon mehr als nötig, weil die Spielwelt gar nicht so groß ist.
    -) Was man beim andern Bild mit FOV 42 sieht, ist nur der eine Kontinent, es fehlt also die Hälfte der Spielwelt. Natürlich kann ich durch eine geneigte Kamera auch mehr draufbekommen, aber ich muss mich eigentlich immer ein wenig verrenken, um das Schwarzwerden der Karte zu verhindern.

    Wie man sieht, hat eigentlich nur Vorteile. Pie, ich will das haben
    Angehängte Grafiken Angehängte Grafiken
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  4. #4
    Registrierter Benutzer Avatar von JohnDay
    Registriert seit
    26.12.12
    Beiträge
    4.819
    Dankeschön ihr beiden, ich nehme das als Ergänzung, da ich ohne die Änderung des Neigungswinkels (FieldofView) eben wie BoggyB das auch beschreibt, nicht weit genug heraus zoomen kann. Dennoch werde ich damit üben, aber mit meinen Änderung ist es außerdem sehr bequem zu den gewünschten Einstellungen für den richtigen Screenshot zu kommen. Nur die Wolken stören dann noch etwas finde ich.

    Grüße John

    P.S. Stimmt gar nicht, es ist der CAMERA_MAX_DISTANCE_FADER der mich weiter heraus zommen läßt. Sorry, ich lerne ja dazu.
    Geändert von JohnDay (16. April 2014 um 12:44 Uhr)

  5. #5
    Registrierter Benutzer Avatar von Thorgal
    Registriert seit
    06.08.09
    Beiträge
    5.238
    Zitat Zitat von BoggyB Beitrag anzeigen
    Die zwei Sachen gehen aber auch ohne chipotle, meine ich. Flying Camera braucht auf jeden Fall nur "Allow Flying Camera = 1" in der ini, Satellitenkamer (ist übrigens Alt+F, nicht Strg) sollte auch ohne alles gehen.
    Bei der fliegenden Kamera find ich es wichtig, dass man mit sich auch mit dem Mausrad, Bild oben und Bild unten navigieren und sich mit Enter am Boden festsetzen lassen kann.
    Hätt ich doch nachschauen sollen. Stimmt natürlich.

    Das mit dem Enter kenn ich gar nicht. Praktisch.


    Zitat Zitat von BoggyB Beitrag anzeigen
    Und wo wir grade bei Field of View sind, in vielen Mods kann man das mittels Schieberegler ingame ändern (ist Teil von BUG, glaub ich):
    (...)
    Wie man sieht, hat eigentlich nur Vorteile. Pie, ich will das haben
    Ich auch.
    Dieses Schwarz ist extrem nervig, bis man das bei der FlyingCam unter Kontrolle hat. Scheint ja damit super zu gehen und die Kartenbilder werden wahre Panoramen.
    Pie's Antikes Europa (PAE): Genieße CIV in der Antike.

    PAE - Mythos Antike: Die Geschichte der drei furchtlosesten Herrscher des PBEM 442.

    Kingdom of Africa: Auf Abwegen im PB 73

  6. #6
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Wie, was soll ich einbauen? Nur das Field of View? Oder wie?

    Boggy: suchs mir einfach raus, was dazu benötigt wird, damit ichs schnell einbauen kann
    muss ja noch andere Sachen machen... häng ja noch mitten im patch 2 fest.... mit einigen Änderungen... wieso die Listen auch immer so lang werden und die Abende so kurz!
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  7. #7
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.043
    Zitat Zitat von Pie Beitrag anzeigen
    Boggy: suchs mir einfach raus, was dazu benötigt wird, damit ichs schnell einbauen kann
    muss ja noch andere Sachen machen... häng ja noch mitten im patch 2 fest.... mit einigen Änderungen... wieso die Listen auch immer so lang werden und die Abende so kurz!
    Ich hab das jetzt nicht als einzelne Modkomp gefunden, aber das hätte wohl eh nichts mehr gebracht, da du am CvMainInterface im Vergleich zu BtS ja Änderungen gemacht hast...
    Jedenfalls hab ich jetzt einfach mal aus der CvMainInterface.py von HR (hab die Datei mal unten in nen Spoiler gesetzt, falls von Belang) alles an die entsprechenden Stellen rüberkopiert, was mit nem Kommentar "field of view" versehen war, und hab alle übrigen Fehler behoben. Dazu gehörte, dass BUG ja noch ein eigenes Einstellungsmenü hat, wo man wählen kann, ob man das angezeigt haben will oder nicht, da du das nicht hast, ist es standardmäßig an. Außerdem musste ich die Methode initState hinzufügen, hoffe das stimmt so, denn in der waren noch andere Teile von BUG drinnen... Müsste aber.
    Jedenfalls brauchst du jetzt nur noch den Texttag, den du hier oben rechts siehst:
    Bild
    Oder wenn du ihn umbenennen willst, Name ist natürlich in der Datei definiert.

    CvMainInterface hängt als txt an, hoffe, du hast da seit dem letzten Patch nichts dran geändert; und wenn, dann ist es wohl sinnvoller, alles Neue hierein zu integrieren, denn der FOV-Kram muss an mindestens einem Dutzend Stellen eingefügt werden.

    Über allen Änderungen ist ein Kommentar "field of view", nur über einer in der Methode interfaceScreen steht "BUG", da das nichts Spezifisches zum FOV war, aber nötig, da es initState aufruft. Kann sein, dass ich an der Stelle zu viel rüberkopiert hab.
    Ich kann leider nicht garantieren, dass ich das alles richtig gemacht habe, hab das im Wesentlichen nur kopiert. Aber zumindest funktioniert es.

    Achtung Spoiler:
    Code:
    ## Sid Meier's Civilization 4
    ## Copyright Firaxis Games 2005
    from CvPythonExtensions import *
    
    import CvEventInterface
    import CvScreenEnums
    import CvUtil
    import ScreenInput
    
    import HR
    import CivilWar
    import Inquisition
    
    import BugDll
    import BugCore
    import BugOptions
    import BugOptionsScreen
    import BugPath
    import BugUnitPlot
    import BugUtil
    
    import AttitudeUtil
    import CityUtil
    import DiplomacyUtil
    import GameUtil
    import GGUtil
    import PlayerUtil
    import ProgressBarUtil
    import ReligionUtil
    import Scoreboard
    import TradeUtil
    import UnitUtil
    import WidgetUtil
    
    from AStarTools import *
    import MonkeyTools as mt
    import PLE
    import PyHelpers
    import ReminderEventManager
    import string
    import time
    
    
    # Globals
    gc = CyGlobalContext()
    localText = CyTranslator()
    
    PyPlayer = PyHelpers.PyPlayer
    
    MainOpt = BugCore.game.MainInterface
    CityScreenOpt = BugCore.game.CityScreen
    ClockOpt = BugCore.game.NJAGC
    ScoreOpt = BugCore.game.Scores
    PleOpt = BugCore.game.PLE
    
    GP_BAR_WIDTH = 320
    
    g_NumEmphasizeInfos = 0
    g_NumCityTabTypes = 0
    g_NumHurryInfos = 0
    g_NumUnitClassInfos = 0
    g_NumBuildingClassInfos = 0
    g_NumProjectInfos = 0
    g_NumProcessInfos = 0
    g_NumActionInfos = 0
    g_eEndTurnButtonState = -1
    
    MAX_SELECTED_TEXT = 5
    MAX_DISPLAYABLE_BUILDINGS = 15
    MAX_DISPLAYABLE_TRADE_ROUTES = 4
    MAX_BONUS_ROWS = 10
    MAX_CITIZEN_BUTTONS = 8
    
    SELECTION_BUTTON_COLUMNS = 8
    SELECTION_BUTTON_ROWS = 2
    NUM_SELECTION_BUTTONS = SELECTION_BUTTON_ROWS * SELECTION_BUTTON_COLUMNS
    
    g_iNumBuildingWidgets = MAX_DISPLAYABLE_BUILDINGS
    g_iNumTradeRouteWidgets = MAX_DISPLAYABLE_TRADE_ROUTES
    
    # END OF TURN BUTTON POSITIONS
    ######################
    iEndOfTurnButtonSize = 32
    iEndOfTurnPosX = 296 # distance from right
    iEndOfTurnPosY = 147 # distance from bottom
    
    # MINIMAP BUTTON POSITIONS
    ######################
    iMinimapButtonsExtent = 228
    iMinimapButtonsX = 227
    iMinimapButtonsY_Regular = 160
    iMinimapButtonsY_Minimal = 32
    iMinimapButtonWidth = 24
    iMinimapButtonHeight = 24
    
    # Globe button
    iGlobeButtonX = 48
    iGlobeButtonY_Regular = 168
    iGlobeButtonY_Minimal = 40
    iGlobeToggleWidth = 48
    iGlobeToggleHeight = 48
    
    # GLOBE LAYER OPTION POSITIONING
    ######################
    iGlobeLayerOptionsX  = 235
    iGlobeLayerOptionsY_Regular  = 170 # distance from bottom edge
    iGlobeLayerOptionsY_Minimal  = 38 # distance from bottom edge
    iGlobeLayerOptionsWidth = 400
    iGlobeLayerOptionHeight = 24
    
    # STACK BAR
    #####################
    iStackBarHeight = 27
    
    
    # MULTI LIST
    #####################
    iMultiListXL = 318
    iMultiListXR = 332
    
    
    # TOP CENTER TITLE
    #####################
    iCityCenterRow1X = 398
    iCityCenterRow1Y = 78
    iCityCenterRow2X = 398
    iCityCenterRow2Y = 104
    
    iCityCenterRow1Xa = 347
    iCityCenterRow2Xa = 482
    
    
    g_iNumTradeRoutes = 0
    g_iNumBuildings = 0
    g_iNumLeftBonus = 0
    g_iNumCenterBonus = 0
    g_iNumRightBonus = 0
    
    g_szTimeText = ""
    
    # BUG - NJAGC - start
    g_bShowTimeTextAlt = False
    g_iTimeTextCounter = -1
    # BUG - NJAGC - end
    
    # BUG - Raw Yields - start
    import RawYields
    g_bRawShowing = False
    g_bYieldView, g_iYieldType = RawYields.getViewAndType(0)
    g_iYieldTiles = RawYields.WORKED_TILES
    RAW_YIELD_HELP = ( "TXT_KEY_RAW_YIELD_VIEW_TRADE",
    				   "TXT_KEY_RAW_YIELD_VIEW_FOOD",
    				   "TXT_KEY_RAW_YIELD_VIEW_PRODUCTION",
    				   "TXT_KEY_RAW_YIELD_VIEW_COMMERCE",
    				   "TXT_KEY_RAW_YIELD_TILES_WORKED",
    				   "TXT_KEY_RAW_YIELD_TILES_CITY",
    				   "TXT_KEY_RAW_YIELD_TILES_OWNED",
    				   "TXT_KEY_RAW_YIELD_TILES_ALL")
    # BUG - Raw Yields - end
    
    # BUG - field of view slider - start
    DEFAULT_FIELD_OF_VIEW = 42
    # BUG - field of view slider - end
    
    HELP_TEXT_MINIMUM_WIDTH = 300
    
    g_pSelectedUnit = 0
    
    # BUG - start
    g_mainInterface = None
    def onSwitchHotSeatPlayer(argsList):
    	g_mainInterface.resetEndTurnObjects()
    # BUG - end
    
    
    
    class CvMainInterface:
    	"Main Interface Screen"
    	def __init__(self):
    		global g_mainInterface
    		g_mainInterface = self
    
    		self.DRAW_METHOD_PLE = "DRAW_METHOD_PLE"
    		self.DRAW_METHOD_VAN = "DRAW_METHOD_VAN"
    		self.DRAW_METHOD_BUG = "DRAW_METHOD_BUG"
    		self.DRAW_METHODS = (self.DRAW_METHOD_PLE,
    							 self.DRAW_METHOD_VAN,
    							 self.DRAW_METHOD_BUG)
    
    		self.PLE = PLE.PLE()
    
    		self.MainInterfaceInputMap = {
    			self.PLE.PLOT_LIST_BUTTON_NAME	: self.PLE.getPlotListButtonName,
    			self.PLE.PLOT_LIST_MINUS_NAME	: self.PLE.getPlotListMinusName,
    			self.PLE.PLOT_LIST_PLUS_NAME	: self.PLE.getPlotListPlusName,
    			self.PLE.PLOT_LIST_UP_NAME		: self.PLE.getPlotListUpName,
    			self.PLE.PLOT_LIST_DOWN_NAME 	: self.PLE.getPlotListDownName,
    
    			"PleViewModeStyle1"				: self.PLE.onClickPLEViewMode,
    			self.PLE.PLE_VIEW_MODE			: self.PLE.onClickPLEViewMode,
    			self.PLE.PLE_MODE_STANDARD		: self.PLE.onClickPLEModeStandard,
    			self.PLE.PLE_MODE_MULTILINE		: self.PLE.onClickPLEModeMultiline,
    			self.PLE.PLE_MODE_STACK_VERT	: self.PLE.onClickPLEModeStackVert,
    			self.PLE.PLE_MODE_STACK_HORIZ	: self.PLE.onClickPLEModeStackHoriz,
    
    			self.PLE.PLOT_LIST_PROMO_NAME	: self.PLE.unitPromotion,
    			self.PLE.PLOT_LIST_UPGRADE_NAME	: self.PLE.unitUpgrade,
    
    			self.PLE.PLE_RESET_FILTERS		: self.PLE.onClickPLEResetFilters,
    			self.PLE.PLE_FILTER_CANMOVE		: self.PLE.onClickPLEFilterCanMove,
    			self.PLE.PLE_FILTER_CANTMOVE	: self.PLE.onClickPLEFilterCantMove,
    			self.PLE.PLE_FILTER_NOTWOUND	: self.PLE.onClickPLEFilterNotWound,
    			self.PLE.PLE_FILTER_WOUND		: self.PLE.onClickPLEFilterWound,
    			self.PLE.PLE_FILTER_LAND		: self.PLE.onClickPLEFilterLand,
    			self.PLE.PLE_FILTER_SEA			: self.PLE.onClickPLEFilterSea,
    			self.PLE.PLE_FILTER_AIR			: self.PLE.onClickPLEFilterAir,
    			self.PLE.PLE_FILTER_MIL			: self.PLE.onClickPLEFilterMil,
    			self.PLE.PLE_FILTER_DOM			: self.PLE.onClickPLEFilterDom,
    			self.PLE.PLE_FILTER_OWN			: self.PLE.onClickPLEFilterOwn,
    			self.PLE.PLE_FILTER_FOREIGN		: self.PLE.onClickPLEFilterForeign,
    
    			self.PLE.PLE_GRP_UNITTYPE		: self.PLE.onClickPLEGrpUnittype,
    			self.PLE.PLE_GRP_GROUPS			: self.PLE.onClickPLEGrpGroups,
    			self.PLE.PLE_GRP_PROMO			: self.PLE.onClickPLEGrpPromo,
    			self.PLE.PLE_GRP_UPGRADE		: self.PLE.onClickPLEGrpUpgrade,
    		}
    
    #		self.iVisibleUnits 			= 0
    		self.iMaxPlotListIcons 		= 0
    
    		self.bPLECurrentlyShowing	= False
    		self.bVanCurrentlyShowing	= False
    		self.bBUGCurrentlyShowing	= False
    
    		self.xResolution = 0
    		self.yResolution = 0
    
    		self.szSliderTextId = "FieldOfViewSliderText"
    		self.sFieldOfView_Text = ""
    		self.szSliderId = "FieldOfViewSlider"
    		self.iField_View_Prev = -1
    
    	### Resource Display
    		self.iBonusClass = -1
    
    	### Great People Bars
    		self.iSpecGPAnchorX = 246	# Offset from X resolution
    		self.iSpecGPAnchorY = 455	# Offset from Y resolution
    
    	### Widgets
    		WidgetUtil.createWidget("WIDGET_HELP_CIVILWAR")
    		WidgetUtil.createWidget("WIDGET_HELP_DISSENT_BAR")
    		WidgetUtil.createWidget("WIDGET_HELP_GREAT_PERSON_BAR")
    		WidgetUtil.createWidget("WIDGET_HELP_GREAT_PERSON_CITY_BAR")
    		WidgetUtil.createWidget("WIDGET_FOUND_RELIGION")
    		WidgetUtil.createWidget("WIDGET_INQUISITION")
    		WidgetUtil.createWidget("WIDGET_RESOURCE")
    
    
    
    ############## Basic operational functions ###################
    
    #########################################################################################
    #########################################################################################
    #########################################################################################
    #########################################################################################
    
    	def numPlotListButtonsPerRow(self):
    		return self.m_iNumPlotListButtonsPerRow
    
    
    
    # I know that this is redundent, but CyInterface().getPlotListOffset() (and prob the column one too)
    # uses this function
    # it is also used in "...\EntryPoints\CvScreensInterface.py" too
    	def numPlotListButtons(self):
    		return self.numPlotListButtonsPerRow()
    
    
    
    	def numPlotListRows(self):
    		return gc.getMAX_PLOT_LIST_ROWS()
    
    
    
    	def numPlotListButtons_Total(self):
    		return self.numPlotListButtonsPerRow() * self.numPlotListRows()
    
    
    
    	def initState (self, screen=None):
    		"""
    		Initialize screen instance (self.foo) and global variables.
    
    		This function is called before drawing the screen (from interfaceScreen() below)
    		and anytime the Python modules are reloaded (from CvEventInterface).
    
    		THIS FUNCTION MUST NOT ALTER THE SCREEN -- screen.foo()
    		"""
    		if screen is None:
    			screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		self.xResolution = screen.getXResolution()
    		self.yResolution = screen.getYResolution()
    
    # BUG - Raw Yields - begin
    		global g_bYieldView
    		global g_iYieldType
    		g_bYieldView, g_iYieldType = RawYields.getViewAndType(CityScreenOpt.getRawYieldsDefaultView())
    # BUG - Raw Yields - end
    
    # BUG - PLE - begin
    		self.PLE.PLE_CalcConstants(screen)
    # BUG - PLE - end
    
    		# Set up our global variables...
    		global g_NumEmphasizeInfos
    		global g_NumCityTabTypes
    		global g_NumHurryInfos
    		global g_NumUnitClassInfos
    		global g_NumBuildingClassInfos
    		global g_NumProjectInfos
    		global g_NumProcessInfos
    		global g_NumActionInfos
    
    		g_NumEmphasizeInfos = gc.getNumEmphasizeInfos()
    		g_NumCityTabTypes = CityTabTypes.NUM_CITYTAB_TYPES
    		g_NumHurryInfos = gc.getNumHurryInfos()
    		g_NumUnitClassInfos = gc.getNumUnitClassInfos()
    		g_NumBuildingClassInfos = gc.getNumBuildingClassInfos()
    		g_NumProjectInfos = gc.getNumProjectInfos()
    		g_NumProcessInfos = gc.getNumProcessInfos()
    		g_NumActionInfos = gc.getNumActionInfos()
    
    # BUG - field of view slider - start
    		iBtnY = 27
    		self.iX_FoVSlider = self.xResolution - 120
    		self.iY_FoVSlider = iBtnY + 30
    		self.sFieldOfView_Text = localText.getText("TXT_KEY_BUG_OPT_MAININTERFACE__FIELDOFVIEW_TEXT", ())
    		if MainOpt.isRememberFieldOfView():
    			self.iField_View = int(MainOpt.getFieldOfView())
    		else:
    			self.iField_View = DEFAULT_FIELD_OF_VIEW
    # BUG - field of view slider - end
    
    
    # BUG - Progress Bar - Tick Marks - start
    		xCoord = 268 + (self.xResolution - 1024) / 2
    		self.pBarResearchBar_n = ProgressBarUtil.ProgressBar("ResearchBar-Canvas", xCoord, 2, 487, iStackBarHeight, gc.getInfoTypeForString("COLOR_RESEARCH_RATE"), ProgressBarUtil.TICK_MARKS, True)
    		self.pBarResearchBar_n.addBarItem("ResearchBar")
    		self.pBarResearchBar_n.addBarItem("ResearchText")
    # BUG - Progress Bar - Tick Marks - end
    
    # BUG - Progress Bar - Tick Marks - start
    		xCoord = 268 + (self.xResolution - 1440) / 2
    		xCoord += 6 + 84
    		self.pBarResearchBar_w = ProgressBarUtil.ProgressBar("ResearchBar-w-Canvas", xCoord, 2, 487, iStackBarHeight, gc.getInfoTypeForString("COLOR_RESEARCH_RATE"), ProgressBarUtil.TICK_MARKS, True)
    		self.pBarResearchBar_w.addBarItem("ResearchBar-w")
    		self.pBarResearchBar_w.addBarItem("ResearchText")
    # BUG - Progress Bar - Tick Marks - end
    
    # BUG - Progress Bar - Tick Marks - start
    		self.pBarPopulationBar = ProgressBarUtil.ProgressBar("PopulationBar-Canvas", iCityCenterRow1X, iCityCenterRow1Y-4, self.xResolution - (iCityCenterRow1X*2), iStackBarHeight, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType(), ProgressBarUtil.SOLID_MARKS, True)
    		self.pBarPopulationBar.addBarItem("PopulationBar")
    		self.pBarPopulationBar.addBarItem("PopulationText")
    		self.pBarProductionBar = ProgressBarUtil.ProgressBar("ProductionBar-Canvas", iCityCenterRow2X, iCityCenterRow2Y-4, self.xResolution - (iCityCenterRow2X*2), iStackBarHeight, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getColorType(), ProgressBarUtil.TICK_MARKS, True)
    		self.pBarProductionBar.addBarItem("ProductionBar")
    		self.pBarProductionBar.addBarItem("ProductionText")
    		self.pBarProductionBar_Whip = ProgressBarUtil.ProgressBar("ProductionBar-Whip-Canvas", iCityCenterRow2X, iCityCenterRow2Y-4, self.xResolution - (iCityCenterRow2X*2), iStackBarHeight, gc.getInfoTypeForString("COLOR_YELLOW"), ProgressBarUtil.CENTER_MARKS, False)
    		self.pBarProductionBar_Whip.addBarItem("ProductionBar")
    		self.pBarProductionBar_Whip.addBarItem("ProductionText")
    # BUG - Progress Bar - Tick Marks - end
    
    		self.m_iNumPlotListButtonsPerRow = (self.xResolution - (iMultiListXL+iMultiListXR) - 68) / 34
    
    # BUG - BUG unit plot draw method - start
    # bug unit panel
    		self.BupPanel = BugUnitPlot.BupPanel(screen, screen.getXResolution(), screen.getYResolution(), iMultiListXL+iMultiListXR, self.numPlotListButtonsPerRow(), self.numPlotListRows())
    # BUG - BUG unit plot draw method - end
    
    
    
    	def interfaceScreen (self):
    		'Draw all of the screen elements, called once after starting or loading a game'
    		'THIS FUNCTION MUST NOT CREATE ANY INSTANCE OR GLOBAL VARIABLES'
    		'It may alter existing ones created in __init__() or initState(), however'
    
    		if CyGame().isPitbossHost():
    			return
    
    		# This is the main interface screen, create it as such
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		self.initState(screen)
    		screen.setForcedRedraw(True)
    		screen.setDimensions(0, 0, self.xResolution, self.yResolution)
    
    		# to avoid changing all the code below
    		xResolution = self.xResolution
    		yResolution = self.yResolution
    
    		# Help Text Area
    		screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 172, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
    
    		# Center Left
    		screen.addPanel( "InterfaceCenterLeftBackgroundWidget", u"", u"", True, False, 0, 0, 258, yResolution-149, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "InterfaceCenterLeftBackgroundWidget", "Panel_City_Left_Style")
    		screen.hide("InterfaceCenterLeftBackgroundWidget")
    
    		# Top Left
    		screen.addPanel( "InterfaceTopLeftBackgroundWidget", u"", u"", True, False, 258, 0, xResolution - 516, yResolution-149, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "InterfaceTopLeftBackgroundWidget", "Panel_City_Top_Style")
    		screen.hide("InterfaceTopLeftBackgroundWidget")
    
    		# Center Right
    		screen.addPanel( "InterfaceCenterRightBackgroundWidget", u"", u"", True, False, xResolution - 258, 0, 258, yResolution-149, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "InterfaceCenterRightBackgroundWidget", "Panel_City_Right_Style")
    		screen.hide("InterfaceCenterRightBackgroundWidget")
    
    		screen.addPanel( "CityScreenAdjustPanel", u"", u"", True, False, 10, 44, 238, 105, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "CityScreenAdjustPanel", "Panel_City_Info_Style")
    		screen.hide("CityScreenAdjustPanel")
    
    		screen.addPanel( "TopCityPanelLeft", u"", u"", True, False, 260, 70, xResolution/2-260, 60, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "TopCityPanelLeft", "Panel_City_TanTL_Style")
    		screen.hide("TopCityPanelLeft")
    
    		screen.addPanel( "TopCityPanelRight", u"", u"", True, False, xResolution/2, 70, xResolution/2-260, 60, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "TopCityPanelRight", "Panel_City_TanTR_Style")
    		screen.hide("TopCityPanelRight")
    
    		# Top Bar
    
    		# SF CHANGE
    		screen.addPanel( "CityScreenTopWidget", u"", u"", True, False, 0, -2, xResolution, 41, PanelStyles.PANEL_STYLE_STANDARD )
    
    		screen.setStyle( "CityScreenTopWidget", "Panel_TopBar_Style")
    		screen.hide("CityScreenTopWidget")
    
    		# Top Center Title
    		screen.addPanel( "CityNameBackground", u"", u"", True, False, 260, 31, xResolution - (260 * 2), 38, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "CityNameBackground", "Panel_City_Title_Style")
    		screen.hide("CityNameBackground")
    
    		# Left Background Widget
    		screen.addDDSGFC( "InterfaceLeftBackgroundWidget", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BOTTOM_LEFT").getPath(), 0, yResolution - 164, 304, 164, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    		screen.hide("InterfaceLeftBackgroundWidget")
    
    		# Center Background Widget
    		screen.addPanel( "InterfaceCenterBackgroundWidget", u"", u"", True, False, 296, yResolution - 133, xResolution - (296*2), 133, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle( "InterfaceCenterBackgroundWidget", "Panel_Game_HudBC_Style")
    		screen.hide("InterfaceCenterBackgroundWidget")
    
    		# Left Background Widget
    		screen.addPanel( "InterfaceLeftBackgroundWidget", u"", u"", True, False, 0, yResolution - 168, 304, 168, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle( "InterfaceLeftBackgroundWidget", "Panel_Game_HudBL_Style")
    		screen.hide("InterfaceLeftBackgroundWidget")
    
    		# Right Background Widget
    		screen.addPanel( "InterfaceRightBackgroundWidget", u"", u"", True, False, xResolution - 304, yResolution - 168, 304, 168, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle( "InterfaceRightBackgroundWidget", "Panel_Game_HudBR_Style")
    		screen.hide("InterfaceRightBackgroundWidget")
    
    		# Top Center Background
    
    		# SF CHANGE
    		screen.addPanel( "InterfaceTopCenter", u"", u"", True, False, 257, -2, xResolution-(257*2), 48, PanelStyles.PANEL_STYLE_STANDARD)
    
    		screen.setStyle( "InterfaceTopCenter", "Panel_Game_HudTC_Style")
    		screen.hide("InterfaceTopCenter")
    
    		# Top Left Background
    		screen.addPanel( "InterfaceTopLeft", u"", u"", True, False, 0, -2, 267, 60, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle( "InterfaceTopLeft", "Panel_Game_HudTL_Style")
    		screen.hide("InterfaceTopLeft")
    
    		# Top Right Background
    		screen.addPanel( "InterfaceTopRight", u"", u"", True, False, xResolution - 267, -2, 267, 60, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle( "InterfaceTopRight", "Panel_Game_HudTR_Style")
    		screen.hide("InterfaceTopRight")
    
    		iBtnWidth	= 28
    		iBtnAdvance = 25
    		iBtnY = 27
    		iBtnX = 27
    		iBtnX = 10  # moving the log button left = BUG Option Button
    
    		# Event Log Button
    		screen.setImageButton("TurnLogButton", "", iBtnX, iBtnY - 2, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_TURN_LOG).getActionInfoIndex(), -1)
    		screen.setStyle( "TurnLogButton", "Button_HUDLog_Style")
    		screen.hide("TurnLogButton")
    
    		# BUG Option Button
    		iBtnX += iBtnAdvance
    		sBUGOptionsScreenButton = CyArtFileMgr().getInterfaceArtInfo("BUG_OPTIONS_SCREEN_BUTTON").getPath()
    		screen.setImageButton("BUGOptionsScreenWidget", sBUGOptionsScreenButton,  iBtnX, iBtnY - 2, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_BUG_OPTION_SCREEN, -1, -1)
    		screen.hide("BUGOptionsScreenWidget")
    
    		# Civil War Tracker Button
    		iBtnX += iBtnAdvance
    		screen.setImageButton("CivilWarButton", "Art/BUG/National_Off.dds", iBtnX, iBtnY - 2, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_HELP_CIVILWAR, 7474, -1)
    		screen.hide("CivilWarButton")
    
    		# Advisor Buttons
    		iBtnX = xResolution - 277
    		screen.setImageButton( "DomesticAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_DOMESTIC_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "DomesticAdvisorButton", "Button_HUDAdvisorDomestic_Style")
    		screen.hide("DomesticAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "FinanceAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_FINANCIAL_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "FinanceAdvisorButton", "Button_HUDAdvisorFinance_Style")
    		screen.hide("FinanceAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "CivicsAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_CIVICS_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "CivicsAdvisorButton", "Button_HUDAdvisorCivics_Style")
    		screen.hide("CivicsAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "ForeignAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_FOREIGN_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "ForeignAdvisorButton", "Button_HUDAdvisorForeign_Style")
    		screen.hide("ForeignAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "MilitaryAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_MILITARY_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "MilitaryAdvisorButton", "Button_HUDAdvisorMilitary_Style")
    		screen.hide("MilitaryAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "TechAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_TECH_CHOOSER).getActionInfoIndex(), -1 )
    		screen.setStyle( "TechAdvisorButton", "Button_HUDAdvisorTechnology_Style")
    		screen.hide("TechAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "ReligiousAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_RELIGION_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "ReligiousAdvisorButton", "Button_HUDAdvisorReligious_Style")
    		screen.hide("ReligiousAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "CorporationAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_CORPORATION_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "CorporationAdvisorButton", "Button_HUDAdvisorCorporation_Style")
    		screen.hide("CorporationAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "VictoryAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_VICTORY_SCREEN).getActionInfoIndex(), -1 )
    		screen.setStyle( "VictoryAdvisorButton", "Button_HUDAdvisorVictory_Style")
    		screen.hide("VictoryAdvisorButton")
    
    		iBtnX += iBtnAdvance
    		screen.setImageButton( "InfoAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_INFO).getActionInfoIndex(), -1 )
    		screen.setStyle( "InfoAdvisorButton", "Button_HUDAdvisorRecord_Style")
    		screen.hide("InfoAdvisorButton")
    
    # BUG - 3.17 No Espionage - start
    		if GameUtil.isEspionage():
    			iBtnX += iBtnAdvance
    			screen.setImageButton( "EspionageAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_ESPIONAGE_SCREEN).getActionInfoIndex(), -1 )
    			screen.setStyle( "EspionageAdvisorButton", "Button_HUDAdvisorEspionage_Style")
    			screen.hide("EspionageAdvisorButton")
    # BUG - 3.17 No Espionage - end
    
    		# Field of View slider
    		self.setFieldofView_Text(screen)
    		iW = 100
    		iH = 15
    		screen.addSlider(self.szSliderId, self.iX_FoVSlider + 5, self.iY_FoVSlider, iW, iH, self.iField_View - 1, 0, 100 - 1, WidgetTypes.WIDGET_GENERAL, -1, -1, False);
    		screen.hide(self.szSliderTextId)
    		screen.hide(self.szSliderId)
    
    		# City Tabs
    		iBtnX = xResolution - 324
    		iBtnY = yResolution - 94
    		iBtnWidth = 24
    		iBtnAdvance = 24
    
    		screen.setButtonGFC( "CityTab0", "", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_CITY_TAB, 0, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
    		screen.setStyle( "CityTab0", "Button_HUDJumpUnit_Style")
    		screen.hide("CityTab0")
    
    		iBtnY += iBtnAdvance
    		screen.setButtonGFC( "CityTab1", "", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_CITY_TAB, 1, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
    		screen.setStyle( "CityTab1", "Button_HUDJumpBuilding_Style")
    		screen.hide("CityTab1")
    
    		iBtnY += iBtnAdvance
    		screen.setButtonGFC( "CityTab2", "", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_CITY_TAB, 2, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
    		screen.setStyle( "CityTab2", "Button_HUDJumpWonder_Style")
    		screen.hide("CityTab2")
    
    		# Minimap initialization
    		screen.setMainInterface(True)
    
    		screen.addPanel( "MiniMapPanel", u"", u"", True, False, xResolution - 214, yResolution - 151, 208, 151, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "MiniMapPanel", "Panel_Game_HudMap_Style")
    		screen.hide("MiniMapPanel")
    
    		screen.initMinimap( xResolution - 210, xResolution - 9, yResolution - 131, yResolution - 9, -0.1 )
    		gc.getMap().updateMinimapColor()
    
    		self.createMinimapButtons()
    
    		# Help button (always visible)
    		screen.setImageButton( "InterfaceHelpButton", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_GENERAL_CIVILOPEDIA_ICON").getPath(), xResolution - 28, 2, 24, 24, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_CIVILOPEDIA).getActionInfoIndex(), -1 )
    		screen.hide("InterfaceHelpButton")
    
    		screen.setImageButton( "MainMenuButton", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_GENERAL_MENU_ICON").getPath(), xResolution - 54, 2, 24, 24, WidgetTypes.WIDGET_MENU_ICON, -1, -1 )
    		screen.hide("MainMenuButton")
    
    		# Globeview buttons
    		self.createGlobeviewButtons( )
    
    		screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 100, 4, 48, 48, TableStyles.TABLE_STYLE_STANDARD )
    		screen.hide("BottomButtonContainer")
    
    		# *********************************************************************************
    		# PLOT LIST BUTTONS
    		# *********************************************************************************
    
    # BUG - PLE - begin
    		for j in xrange(self.numPlotListRows()):
    			yRow = (j - self.numPlotListRows() + 1) * 34
    			yPixel = yResolution - 169 + yRow - 3
    			xPixel = 315 - 3
    			xWidth = self.numPlotListButtonsPerRow() * 34 + 3
    			yHeight = 32 + 3
    
    			szStringPanel = "PlotListPanel" + str(j)
    			screen.addPanel(szStringPanel, u"", u"", True, False, xPixel, yPixel, xWidth, yHeight, PanelStyles.PANEL_STYLE_EMPTY)
    
    			for i in xrange(self.numPlotListButtonsPerRow()):
    				k = j * self.numPlotListButtonsPerRow() + i
    
    				xOffset = i * 34
    				szString = "PlotListButton" + str(k)
    
    # BUG - plot list - start
    				szFileNamePromo = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_PROMOTION_FRAME").getPath()
    				szStringPromoFrame  = szString + "PromoFrame"
    				screen.addDDSGFCAt( szStringPromoFrame , szStringPanel, szFileNamePromo, xOffset +  2,  2, 32, 32, WidgetTypes.WIDGET_PLOT_LIST, k, -1, False )
    				screen.hide( szStringPromoFrame  )
    # BUG - plot list - end
    
    				screen.addCheckBoxGFCAt(szStringPanel, szString, CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTONS_GOVERNOR").getPath(), CyArtFileMgr().getInterfaceArtInfo("BUTTON_HILITE_SQUARE").getPath(), xOffset + 3, 3, 32, 32, WidgetTypes.WIDGET_PLOT_LIST, k, -1, ButtonStyles.BUTTON_STYLE_LABEL, True )
    				screen.hide( szString )
    
    				szStringHealth = szString + "Health"
    				screen.addStackedBarGFCAt( szStringHealth, szStringPanel, xOffset + 3, 26, 32, 11, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_GENERAL, k, -1 )
    				screen.hide( szStringHealth )
    
    				szStringIcon = szString + "Icon"
    				szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_MOVE").getPath()
    				screen.addDDSGFCAt( szStringIcon, szStringPanel, szFileName, xOffset, 0, 12, 12, WidgetTypes.WIDGET_PLOT_LIST, k, -1, False )
    				screen.hide( szStringIcon )
    
    		self.PLE.preparePlotListObjects(screen)
    # BUG - PLE - end
    
    
    		# End Turn Text
    		screen.setLabel( "EndTurnText", "Background", u"", CvUtil.FONT_CENTER_JUSTIFY, 0, yResolution - 188, -0.1, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    		screen.setHitTest( "EndTurnText", HitTestTypes.HITTEST_NOHIT )
    
    		# Three states for end turn button...
    		screen.setImageButton( "EndTurnButton", "", xResolution - (iEndOfTurnButtonSize/2) - iEndOfTurnPosX, yResolution - (iEndOfTurnButtonSize/2) - iEndOfTurnPosY, iEndOfTurnButtonSize, iEndOfTurnButtonSize, WidgetTypes.WIDGET_END_TURN, -1, -1 )
    		screen.setStyle( "EndTurnButton", "Button_HUDEndTurn_Style")
    		screen.setEndTurnState( "EndTurnButton", "Red")
    		screen.hide("EndTurnButton")
    
    	# *********************************************************************************
    	# RESEARCH BUTTONS
    	# *********************************************************************************
    
    		i = 0
    		for i in xrange(gc.getNumTechInfos()):
    			szName = "ResearchButton" + str(i)
    			screen.setImageButton(szName, gc.getTechInfo(i).getButton(), 0, 0, 32, 32, WidgetTypes.WIDGET_RESEARCH, i, -1)
    			screen.hide(szName)
    
    		i = 0
    		for i in xrange(gc.getNumReligionInfos()):
    			szName = "ReligionButton" + str(i)
    			if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_PICK_RELIGION):
    				szButton = gc.getReligionInfo(i).getGenericTechButton()
    			else:
    				szButton = gc.getReligionInfo(i).getTechButton()
    			screen.setImageButton( szName, szButton, 0, 0, 32, 32, WidgetTypes.WIDGET_RESEARCH, gc.getReligionInfo(i).getTechPrereq(), -1 )
    			screen.hide( szName )
    
    	# *********************************************************************************
    	# SPECIALIST BUTTONS
    	# *********************************************************************************
    
    	### Specialists Header
    		xHeader = xResolution - self.iSpecGPAnchorX
    		yHeader = yResolution - self.iSpecGPAnchorY
    		wHeader = xResolution - xHeader - 10
    		screen.addPanel("SpecialistBackground", u"", u"", True, False, xHeader, yHeader, wHeader, 30, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle("SpecialistBackground", "Panel_City_Header_Style")
    		screen.hide("SpecialistBackground")
    		screen.setLabel("SpecialistLabel", "Background", localText.getText("TXT_KEY_CONCEPT_SPECIALISTS", ()), CvUtil.FONT_CENTER_JUSTIFY, xHeader + (wHeader / 2), yHeader + 8, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    		screen.hide("SpecialistLabel")
    
    	### Increase Specialist Buttons
    		i = 0
    		iCount = 0
    		for i in xrange(gc.getNumSpecialistInfos()):
    			if (gc.getSpecialistInfo(i).isVisible()):
    				szName = "IncreaseSpecialist" + str(i)
    				screen.setButtonGFC(szName, u"", "", xResolution - 46, (yResolution - 270 - (26 * iCount)), 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, i, 1, ButtonStyles.BUTTON_STYLE_CITY_PLUS)
    				screen.hide(szName)
    				iCount += 1
    
    	### Decrease Specialist Buttons
    		i = 0
    		iCount = 0
    		for i in xrange(gc.getNumSpecialistInfos()):
    			if (gc.getSpecialistInfo(i).isVisible()):
    				szName = "DecreaseSpecialist" + str(i)
    				screen.setButtonGFC(szName, u"", "", xResolution - 24, (yResolution - 270 - (26 * iCount)), 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, i, -1, ButtonStyles.BUTTON_STYLE_CITY_MINUS)
    				screen.hide(szName)
    				iCount += 1
    
    	### Specialist Buttons
    		i = 0
    		iCount = 0
    		for i in xrange(gc.getNumSpecialistInfos()):
    			if (gc.getSpecialistInfo(i).isVisible()):
    				szName = "CitizenDisabledButton" + str(i)
    				screen.setImageButton(szName, gc.getSpecialistInfo(i).getTexture(), xResolution - 74, (yResolution - 272 - (26 * i)), 24, 24, WidgetTypes.WIDGET_DISABLED_CITIZEN, i, -1)
    				screen.enable(szName, False)
    				screen.hide(szName)
    
    				for j in xrange(MAX_CITIZEN_BUTTONS):
    					szName = "SpecialistButton" + str((i * 100) + j)
    					screen.addCheckBoxGFC(szName, gc.getSpecialistInfo(i).getTexture(), "", xResolution - 74 - (26 * j), (yResolution - 272 - (26 * i)), 24, 24, WidgetTypes.WIDGET_CITIZEN, i, j, ButtonStyles.BUTTON_STYLE_LABEL)
    					screen.hide(szName)
    
    	# **********************************************************
    	# GAME DATA STRINGS
    	# **********************************************************
    
    		szGameDataList = []
    
    		xCoord = 268 + (xResolution - 1024) / 2
    		screen.addStackedBarGFC( "ResearchBar", xCoord, 2, 487, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_RESEARCH, -1, -1 )
    		screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RESEARCH_STORED") )
    		screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_RESEARCH_RATE") )
    		screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("ResearchBar")
    
    # BUG - Great General Bar - start
    		screen.addStackedBarGFC( "GreatGeneralBar", xCoord, 27, 100, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_GENERAL, -1, -1 )
    		screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_NEGATIVE_RATE") ) #gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
    		screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("GreatGeneralBar")
    # BUG - Great General Bar - end
    
    # BUG - Great Person Bar - start
    		xCoord += 7 + 100
    		screen.addStackedBarGFC( "GreatPersonBar", xCoord, 27, 380, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_PERSON_BAR, -1, -1 )
    		screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
    		screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_RATE") )
    		screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("GreatPersonBar")
    # BUG - Great Person Bar - end
    
    # BUG - Bars on single line for higher resolution screens - start
    		xCoord = 268 + (xResolution - 1440) / 2
    		screen.addStackedBarGFC( "GreatGeneralBar-w", xCoord, 2, 84, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_GENERAL, -1, -1 )
    		screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_NEGATIVE_RATE") ) #gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
    		screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("GreatGeneralBar-w")
    
    		xCoord += 6 + 84
    		screen.addStackedBarGFC( "ResearchBar-w", xCoord, 2, 487, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_RESEARCH, -1, -1 )
    		screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RESEARCH_STORED") )
    		screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_RESEARCH_RATE") )
    		screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("ResearchBar-w")
    
    		xCoord += 6 + 487
    		screen.addStackedBarGFC( "GreatPersonBar-w", xCoord, 2, 320, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_PERSON_BAR, -1, -1 )
    		screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
    		screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_RATE") )
    		screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("GreatPersonBar-w")
    # BUG - Bars on single line for higher resolution screens - end
    
    
    		# *********************************************************************************
    		# SELECTION DATA BUTTONS/STRINGS
    		# *********************************************************************************
    
    		szHideSelectionDataList = []
    
    	### City Screen - Population Bar
    		screen.addStackedBarGFC( "PopulationBar", iCityCenterRow1X, iCityCenterRow1Y-4, xResolution - (iCityCenterRow1X * 2), iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_POPULATION, -1, -1 )
    		screen.setStackedBarColors( "PopulationBar", InfoBarTypes.INFOBAR_STORED, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType() )
    		screen.setStackedBarColorsAlpha( "PopulationBar", InfoBarTypes.INFOBAR_RATE, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType(), 0.8 )
    		screen.setStackedBarColors( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_NEGATIVE_RATE") )
    		screen.setStackedBarColors( "PopulationBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("PopulationBar")
    
    	### City Screen - Production Bar
    		screen.addStackedBarGFC("ProductionBar", iCityCenterRow2X, iCityCenterRow2Y-4, xResolution - (iCityCenterRow2X * 2), iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_PRODUCTION, -1, -1)
    		screen.setStackedBarColors("ProductionBar", InfoBarTypes.INFOBAR_STORED, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getColorType())
    		screen.setStackedBarColorsAlpha("ProductionBar", InfoBarTypes.INFOBAR_RATE, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getColorType(), 0.8)
    		screen.setStackedBarColors("ProductionBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType())
    		screen.setStackedBarColors("ProductionBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
    		screen.hide("ProductionBar")
    
    	### City Screen - Culture Bar
    		screen.addStackedBarGFC("CultureBar", 6, yResolution - 240, 240, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_CULTURE, -1, -1)
    		screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_CULTURE_STORED"))
    		screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_CULTURE_RATE"))
    		screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY"))
    		screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY"))
    		screen.hide("CultureBar")
    
    	### City Screen - Nationality Bar
    		screen.addStackedBarGFC("NationalityBar", 6, yResolution - 214, 240, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_NATIONALITY, -1, -1)
    		screen.hide("NationalityBar")
    
    	### City Screen - Dissent Bar
    		screen.addStackedBarGFC("DissentBar", 6, yResolution - 188, 240, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_DISSENT_BAR, -1, -1)
    		screen.hide("DissentBar")
    
    	### City Arrows
    		screen.setButtonGFC("CityScrollMinus", u"", "", 274, 32, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT)
    		screen.hide("CityScrollMinus")
    		screen.setButtonGFC("CityScrollPlus", u"", "", 288, 32, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT)
    		screen.hide("CityScrollPlus")
    
    		screen.setButtonGFC("MainCityScrollMinus", u"", "", xResolution - 275, yResolution - 165, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT)
    		screen.hide("MainCityScrollMinus")
    		screen.setButtonGFC("MainCityScrollPlus", u"", "", xResolution - 255, yResolution - 165, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT)
    		screen.hide("MainCityScrollPlus")
    
    
    # BUG - PLE - begin
    		screen.setButtonGFC( "PlotListMinus", u"", "", 315 + ( xResolution - (iMultiListXL+iMultiListXR) - 68 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_PLOT_LIST_SHIFT, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT )
    		screen.hide("PlotListMinus")
    
    		screen.setButtonGFC( "PlotListPlus", u"", "", 298 + ( xResolution - (iMultiListXL+iMultiListXR) - 34 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_PLOT_LIST_SHIFT, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT )
    		screen.hide("PlotListPlus")
    
    		screen.setButtonGFC( self.PLE.PLOT_LIST_MINUS_NAME, u"", "", 315 + ( xResolution - (iMultiListXL+iMultiListXR) - 68 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_GENERAL, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT )
    		screen.hide( self.PLE.PLOT_LIST_MINUS_NAME )
    		screen.setButtonGFC( self.PLE.PLOT_LIST_PLUS_NAME, u"", "", 298 + ( xResolution - (iMultiListXL+iMultiListXR) - 34 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_GENERAL, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT )
    		screen.hide( self.PLE.PLOT_LIST_PLUS_NAME )
    
    		screen.setImageButton( self.PLE.PLOT_LIST_UP_NAME, CyArtFileMgr().getInterfaceArtInfo("PLE_ARROW_UP").getPath(), 315 + ( xResolution - (iMultiListXL+iMultiListXR) - 68 ) + 5, yResolution - 171 + 5, 20, 20, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    		screen.hide( self.PLE.PLOT_LIST_UP_NAME )
    		screen.setImageButton( self.PLE.PLOT_LIST_DOWN_NAME, CyArtFileMgr().getInterfaceArtInfo("PLE_ARROW_DOWN").getPath(), 298 + ( xResolution - (iMultiListXL+iMultiListXR) - 34 ) + 5, yResolution - 171 + 5, 20, 20, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    		screen.hide( self.PLE.PLOT_LIST_DOWN_NAME )
    # BUG - PLE - end
    
    		screen.addPanel("TradeRouteListBackground", u"", u"", True, False, 10, 157, 238, 30, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle("TradeRouteListBackground", "Panel_City_Header_Style")
    		screen.hide("TradeRouteListBackground")
    
    		screen.setLabel("TradeRouteListLabel", "Background", localText.getText("TXT_KEY_HEADING_TRADEROUTE_LIST", ()), CvUtil.FONT_CENTER_JUSTIFY, 129, 165, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    		screen.hide("TradeRouteListLabel")
    
    # BUG - Raw Yields - start
    		nX = 10 + 24
    		nY = 157 + 5
    		nSize = 24
    		nDist = 24
    		nGap = 10
    		szHighlightButton = CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_HIGHLIGHT").getPath()
    
    		# Trade
    		screen.addCheckBoxGFC( "RawYieldsTrade0", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_TRADE").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 0, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.hide("RawYieldsTrade0")
    
    		# Yields
    		nX += nDist + nGap
    		screen.addCheckBoxGFC( "RawYieldsFood1", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_FOOD").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 1, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.hide("RawYieldsFood1")
    		nX += nDist
    		screen.addCheckBoxGFC( "RawYieldsProduction2", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_PRODUCTION").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 2, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.hide("RawYieldsProduction2")
    		nX += nDist
    		screen.addCheckBoxGFC( "RawYieldsCommerce3", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_COMMERCE").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 3, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.hide("RawYieldsCommerce3")
    
    		# Tile Selection
    		nX += nDist + nGap
    		screen.addCheckBoxGFC( "RawYieldsWorkedTiles4", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_WORKED_TILES").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 4, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.hide("RawYieldsWorkedTiles4")
    		nX += nDist
    		screen.addCheckBoxGFC( "RawYieldsCityTiles5", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_CITY_TILES").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 5, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.hide("RawYieldsCityTiles5")
    		nX += nDist
    		screen.addCheckBoxGFC( "RawYieldsOwnedTiles6", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_OWNED_TILES").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 6, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.hide("RawYieldsOwnedTiles6")
    # BUG - Raw Yields - end
    
    		screen.addPanel( "BuildingListBackground", u"", u"", True, False, 10, 287, 238, 30, PanelStyles.PANEL_STYLE_STANDARD )
    		screen.setStyle( "BuildingListBackground", "Panel_City_Header_Style")
    		screen.hide("BuildingListBackground")
    
    		screen.setLabel( "BuildingListLabel", "Background", localText.getText("TXT_KEY_CONCEPT_BUILDINGS", ()), CvUtil.FONT_CENTER_JUSTIFY, 129, 295, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    		screen.hide("BuildingListLabel")
    
    		# *********************************************************************************
    		# UNIT INFO ELEMENTS
    		# *********************************************************************************
    
    		i = 0
    		for i in xrange(gc.getNumPromotionInfos()):
    			szName = "PromotionButton" + str(i)
    			screen.addDDSGFC( szName, gc.getPromotionInfo(i).getButton(), 180, yResolution - 18, 24, 24, WidgetTypes.WIDGET_ACTION, gc.getPromotionInfo(i).getActionInfoIndex(), -1 )
    			screen.hide( szName )
    
    # BUG - PLE - begin
    			szName = self.PLE.PLE_PROMO_BUTTONS_UNITINFO + str(i)
    			screen.addDDSGFC( szName, gc.getPromotionInfo(i).getButton(), \
    								180, yResolution - 18, \
    								self.PLE.CFG_INFOPANE_BUTTON_SIZE, self.PLE.CFG_INFOPANE_BUTTON_SIZE, \
    								WidgetTypes.WIDGET_ACTION, gc.getPromotionInfo(i).getActionInfoIndex(), -1 )
    			screen.hide( szName )
    # BUG - PLE - end
    
    		# *********************************************************************************
    		# SCORES
    		# *********************************************************************************
    
    		screen.addPanel( "ScoreBackground", u"", u"", True, False, 0, 0, 0, 0, PanelStyles.PANEL_STYLE_HUD_HELP )
    		screen.hide("ScoreBackground")
    
    		for i in xrange( gc.getMAX_PLAYERS() ):
    			szName = "ScoreText" + str(i)
    			screen.setText( szName, "Background", u"", CvUtil.FONT_RIGHT_JUSTIFY, 996, 622, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_CONTACT_CIV, i, -1 )
    			screen.hide( szName )
    
    		# This should be a forced redraw screen
    		screen.setForcedRedraw( True )
    
    		# This should show the screen immidiately and pass input to the game
    		screen.showScreen(PopupStates.POPUPSTATE_IMMEDIATE, True)
    
    		szHideList = []
    
    		szHideList.append( "CreateGroup")
    		szHideList.append( "DeleteGroup")
    
    		# City Tabs
    		for i in xrange( g_NumCityTabTypes ):
    			szButtonID = "CityTab" + str(i)
    			szHideList.append( szButtonID )
    
    		for i in xrange( g_NumHurryInfos ):
    			szButtonID = "Hurry" + str(i)
    			szHideList.append( szButtonID )
    
    		szHideList.append( "Hurry0")
    		szHideList.append( "Hurry1")
    
    		screen.registerHideList( szHideList, len(szHideList), 0 )
    
    		return 0
    
    	# Will update the screen (every 250 MS)
    	def updateScreen(self):
    
    		global g_szTimeText
    		global g_iTimeTextCounter
    
    #		BugUtil.debug("update - Turn %d, Player %d, Interface %d, End Turn Button %d ===",
    #				gc.getGame().getGameTurn(), gc.getGame().getActivePlayer(), CyInterface().getShowInterface(), CyInterface().getEndTurnState())
    
    # BUG - Options - start
    		BugOptions.write()
    # BUG - Options - end
    
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    
    		# Find out our resolution
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    #		self.m_iNumPlotListButtons = (xResolution - (iMultiListXL+iMultiListXR) - 68) / 34
    
    		# This should recreate the minimap on load games and returns if already exists -JW
    		screen.initMinimap( xResolution - 210, xResolution - 9, yResolution - 131, yResolution - 9, -0.1 )
    
    		messageControl = CyMessageControl()
    
    		bShow = False
    
    		# Hide all interface widgets
    		#screen.hide("EndTurnText")
    
    		if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY ):
    			if (gc.getGame().isPaused()):
    				# Pause overrides other messages
    				acOutput = localText.getText("SYSTEM_GAME_PAUSED", (gc.getPlayer(gc.getGame().getPausePlayer()).getNameKey(), ))
    				#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    				screen.setEndTurnState( "EndTurnText", acOutput )
    				bShow = True
    			elif (messageControl.GetFirstBadConnection() != -1):
    				# Waiting on a bad connection to resolve
    				if (messageControl.GetConnState(messageControl.GetFirstBadConnection()) == 1):
    					if (gc.getGame().isMPOption(MultiplayerOptionTypes.MPOPTION_ANONYMOUS)):
    						acOutput = localText.getText("SYSTEM_WAITING_FOR_PLAYER", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), 0))
    					else:
    						acOutput = localText.getText("SYSTEM_WAITING_FOR_PLAYER", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), (messageControl.GetFirstBadConnection() + 1)))
    					#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    					screen.setEndTurnState( "EndTurnText", acOutput )
    					bShow = True
    				elif (messageControl.GetConnState(messageControl.GetFirstBadConnection()) == 2):
    					if (gc.getGame().isMPOption(MultiplayerOptionTypes.MPOPTION_ANONYMOUS)):
    						acOutput = localText.getText("SYSTEM_PLAYER_JOINING", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), 0))
    					else:
    						acOutput = localText.getText("SYSTEM_PLAYER_JOINING", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), (messageControl.GetFirstBadConnection() + 1)))
    					#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    					screen.setEndTurnState( "EndTurnText", acOutput )
    					bShow = True
    			else:
    				# Flash select messages if no popups are present
    				if ( CyInterface().shouldDisplayReturn() ):
    					acOutput = localText.getText("SYSTEM_RETURN", ())
    					#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    					screen.setEndTurnState( "EndTurnText", acOutput )
    					bShow = True
    				elif ( CyInterface().shouldDisplayWaitingOthers() ):
    					acOutput = localText.getText("SYSTEM_WAITING", ())
    					#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    					screen.setEndTurnState( "EndTurnText", acOutput )
    					bShow = True
    				elif ( CyInterface().shouldDisplayEndTurn() ):
    # BUG - Reminders - start
    					if ( ReminderEventManager.g_turnReminderTexts ):
    						acOutput = u"%s" % ReminderEventManager.g_turnReminderTexts
    					else:
    						acOutput = localText.getText("SYSTEM_END_TURN", ())
    # BUG - Reminders - end
    					#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    					screen.setEndTurnState( "EndTurnText", acOutput )
    					bShow = True
    				elif ( CyInterface().shouldDisplayWaitingYou() ):
    					acOutput = localText.getText("SYSTEM_WAITING_FOR_YOU", ())
    					#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    					screen.setEndTurnState( "EndTurnText", acOutput )
    					bShow = True
    # BUG - Options - start
    				elif ( MainOpt.isShowOptionsKeyReminder() ):
    					if BugPath.isMac():
    						acOutput = localText.getText("TXT_KEY_BUG_OPTIONS_KEY_REMINDER_MAC", (BugPath.getModName(),))
    					else:
    						acOutput = localText.getText("TXT_KEY_BUG_OPTIONS_KEY_REMINDER", (BugPath.getModName(),))
    					#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
    					screen.setEndTurnState( "EndTurnText", acOutput )
    					bShow = True
    # BUG - Options - end
    
    		if ( bShow ):
    			screen.showEndTurn( "EndTurnText")
    			if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isCityScreenUp() ):
    				screen.moveItem( "EndTurnText", 0, yResolution - 194, -0.1 )
    			else:
    				screen.moveItem( "EndTurnText", 0, yResolution - 86, -0.1 )
    		else:
    			screen.hideEndTurn( "EndTurnText")
    
    		self.updateEndTurnButton()
    
    # BUG - NJAGC - start
    		global g_bShowTimeTextAlt
    		if (CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY  and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START):
    			if (ClockOpt.isEnabled()):
    				screen.show("EraText")
    
    				if (ClockOpt.isAlternateTimeText()):
    					#global g_iTimeTextCounter (already done above)
    					if (CyUserProfile().wasClockJustTurnedOn() or g_iTimeTextCounter <= 0):
    						# reset timer, display primary
    						g_bShowTimeTextAlt = False
    						g_iTimeTextCounter = ClockOpt.getAlternatePeriod() * 1000
    						CyUserProfile().setClockJustTurnedOn(False)
    					else:
    						# countdown timer
    						g_iTimeTextCounter -= 250
    						if (g_iTimeTextCounter <= 0):
    							# timer elapsed, toggle between primary and alternate
    							g_iTimeTextCounter = ClockOpt.getAlternatePeriod() * 1000
    							g_bShowTimeTextAlt = not g_bShowTimeTextAlt
    				else:
    					g_bShowTimeTextAlt = False
    
    				self.updateTimeText()
    				screen.setLabel( "TimeText", "Background", g_szTimeText, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 56, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    				screen.show("TimeText")
    			else:
    				self.updateTimeText()
    				screen.setLabel( "TimeText", "Background", g_szTimeText, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 56, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    				screen.show("TimeText")
    		else:
    			screen.hide("TimeText")
    			screen.hide("EraText")
    # BUG - NJAGC - end
    
    # BUG - PLE - start
    		# this ensures that the info pane is closed after a greater mouse pos change
    		self.PLE.checkInfoPane(CyInterface().getMousePos())
    # BUG - PLE - end
    
    		return 0
    
    	# Will redraw the interface
    	def redraw( self ):
    
    #		BugUtil.debug("redraw - Turn %d, Player %d, Interface %d, End Turn Button %d",
    #				gc.getGame().getGameTurn(), gc.getGame().getActivePlayer(), CyInterface().getShowInterface(), CyInterface().getEndTurnState())
    
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    
    # BUG - Field of View - start
    		self.setFieldofView(screen, CyInterface().isCityScreenUp())
    # BUG - Field of View - end
    
    		# Check Dirty Bits, see what we need to redraw...
    		if (CyInterface().isDirty(InterfaceDirtyBits.PercentButtons_DIRTY_BIT) == True):
    			# Percent Buttons
    			self.updatePercentButtons()
    			CyInterface().setDirty(InterfaceDirtyBits.PercentButtons_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.Flag_DIRTY_BIT) == True):
    			# Percent Buttons
    			self.updateFlag()
    			CyInterface().setDirty(InterfaceDirtyBits.Flag_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.MiscButtons_DIRTY_BIT) == True):
    			# Miscellaneous buttons (civics screen, etc)
    			self.updateMiscButtons()
    			CyInterface().setDirty(InterfaceDirtyBits.MiscButtons_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.InfoPane_DIRTY_BIT) == True):
    			# Info Pane Dirty Bit
    			# This must come before updatePlotListButtons so that the entity widget appears in front of the stats
    			self.updateInfoPaneStrings()
    			CyInterface().setDirty(InterfaceDirtyBits.InfoPane_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.PlotListButtons_DIRTY_BIT) == True):
    #			BugUtil.debug("dirty PlotListButtons end - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
    			# Plot List Buttons Dirty
    			self.updatePlotListButtons()
    			CyInterface().setDirty(InterfaceDirtyBits.PlotListButtons_DIRTY_BIT, False)
    #			BugUtil.debug("dirty PlotListButtons start - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.SelectionButtons_DIRTY_BIT) == True):
    			# Selection Buttons Dirty
    			self.updateSelectionButtons()
    			CyInterface().setDirty(InterfaceDirtyBits.SelectionButtons_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.ResearchButtons_DIRTY_BIT) == True):
    			# Research Buttons Dirty
    			self.updateResearchButtons()
    			CyInterface().setDirty(InterfaceDirtyBits.ResearchButtons_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.CitizenButtons_DIRTY_BIT) == True):
    			# Citizen Buttons Dirty
    			self.updateCitizenButtons()
    			CyInterface().setDirty(InterfaceDirtyBits.CitizenButtons_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.GameData_DIRTY_BIT) == True):
    			# Game Data Strings Dirty
    			self.updateGameDataStrings()
    			CyInterface().setDirty(InterfaceDirtyBits.GameData_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.Help_DIRTY_BIT) == True):
    			# Help Dirty bit
    			self.updateHelpStrings()
    			CyInterface().setDirty(InterfaceDirtyBits.Help_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.CityScreen_DIRTY_BIT) == True):
    			# Selection Data Dirty Bit
    			self.updateCityScreen()
    			CyInterface().setDirty(InterfaceDirtyBits.Domestic_Advisor_DIRTY_BIT, True)
    			CyInterface().setDirty(InterfaceDirtyBits.CityScreen_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.Score_DIRTY_BIT) == True or CyInterface().checkFlashUpdate() ):
    			# Scores!
    			self.updateScoreStrings()
    			CyInterface().setDirty(InterfaceDirtyBits.Score_DIRTY_BIT, False)
    
    		if (CyInterface().isDirty(InterfaceDirtyBits.GlobeInfo_DIRTY_BIT) == True):
    			# Globeview and Globelayer buttons
    			CyInterface().setDirty(InterfaceDirtyBits.GlobeInfo_DIRTY_BIT, False)
    			self.updateGlobeviewButtons()
    
    		return 0
    
    
    
    	# Will update the percent buttons
    	def updatePercentButtons( self ):
    
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    
    		for iI in xrange( CommerceTypes.NUM_COMMERCE_TYPES ):
    			szString = "IncreasePercent" + str(iI)
    			screen.hide( szString )
    			szString = "DecreasePercent" + str(iI)
    			screen.hide( szString )
    # BUG - Min/Max Sliders - start
    			szString = "MaxPercent" + str(iI)
    			screen.hide( szString )
    			szString = "MinPercent" + str(iI)
    			screen.hide( szString )
    # BUG - Min/Max Sliders - start
    
    		pHeadSelectedCity = CyInterface().getHeadSelectedCity()
    		if ( not CyInterface().isCityScreenUp() or ( pHeadSelectedCity.getOwner() == gc.getGame().getActivePlayer() ) or gc.getGame().isDebugMode() ):
    			iCount = 0
    
    			if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START):
    				for iI in xrange( CommerceTypes.NUM_COMMERCE_TYPES ):
    					# Intentional offset...
    					eCommerce = (iI + 1) % CommerceTypes.NUM_COMMERCE_TYPES
    
    					if (gc.getActivePlayer().isCommerceFlexible(eCommerce) or (CyInterface().isCityScreenUp() and (eCommerce == CommerceTypes.COMMERCE_GOLD))):
    # BUG - Min/Max Sliders - start
    						bEnable = gc.getActivePlayer().isCommerceFlexible(eCommerce)
    						if MainOpt.isShowMinMaxCommerceButtons() and not CyInterface().isCityScreenUp():
    							iMinMaxAdjustX = 20
    							szString = "MaxPercent" + str(eCommerce)
    							screen.setButtonGFC( szString, u"", "", 70, 50 + (19 * iCount), 20, 20,
    												 *BugDll.widget("WIDGET_SET_PERCENT", eCommerce, 100,
    												 				WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, 100,
    												 				ButtonStyles.BUTTON_STYLE_CITY_PLUS) )
    							screen.show( szString )
    							screen.enable( szString, bEnable )
    							szString = "MinPercent" + str(eCommerce)
    							screen.setButtonGFC( szString, u"", "", 130, 50 + (19 * iCount), 20, 20,
    												 *BugDll.widget("WIDGET_SET_PERCENT", eCommerce, 0,
    												 				WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, -100,
    												 				ButtonStyles.BUTTON_STYLE_CITY_MINUS) )
    							screen.show( szString )
    							screen.enable( szString, bEnable )
    						else:
    							iMinMaxAdjustX = 0
    
    						szString = "IncreasePercent" + str(eCommerce)
    						screen.setButtonGFC( szString, u"", "", 70 + iMinMaxAdjustX, 50 + (19 * iCount), 20, 20, WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, gc.getDefineINT("COMMERCE_PERCENT_CHANGE_INCREMENTS"), ButtonStyles.BUTTON_STYLE_CITY_PLUS )
    						screen.show( szString )
    						screen.enable( szString, bEnable )
    						szString = "DecreasePercent" + str(eCommerce)
    						screen.setButtonGFC( szString, u"", "", 90 + iMinMaxAdjustX, 50 + (19 * iCount), 20, 20, WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, -gc.getDefineINT("COMMERCE_PERCENT_CHANGE_INCREMENTS"), ButtonStyles.BUTTON_STYLE_CITY_MINUS )
    						screen.show( szString )
    						screen.enable( szString, bEnable )
    
    						iCount = iCount + 1
    						# moved enabling above
    # BUG - Min/Max Sliders - end
    
    		return 0
    
    # BUG - start
    	def resetEndTurnObjects(self):
    		"""
    		Clears the end turn text and hides it and the button.
    		"""
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		screen.setEndTurnState( "EndTurnText", u"")
    		screen.hideEndTurn( "EndTurnText")
    		screen.hideEndTurn( "EndTurnButton")
    # BUG - end
    
    	# Will update the end Turn Button
    	def updateEndTurnButton(self):
    		global g_eEndTurnButtonState
    
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    
    		if CyInterface().shouldDisplayEndTurnButton() and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
    			eState = CyInterface().getEndTurnState()
    			bShow = False
    
    			if eState == EndTurnButtonStates.END_TURN_OVER_HIGHLIGHT:
    				screen.setEndTurnState( "EndTurnButton", u"Red")
    				bShow = True
    			elif eState == EndTurnButtonStates.END_TURN_OVER_DARK:
    				screen.setEndTurnState( "EndTurnButton", u"Red")
    				bShow = True
    			elif eState == EndTurnButtonStates.END_TURN_GO:
    				screen.setEndTurnState( "EndTurnButton", u"Green")
    				bShow = True
    
    			if bShow:
    				screen.showEndTurn("EndTurnButton")
    			else:
    				screen.hideEndTurn("EndTurnButton")
    
    			if g_eEndTurnButtonState == eState:
    				return
    
    			g_eEndTurnButtonState = eState
    
    		else:
    			screen.hideEndTurn( "EndTurnButton")
    
    		return 0
    
    
    
    	def updateMiscButtons( self ):
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		xResolution = screen.getXResolution()
    
    	### Great Person Bar
    		if CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START:
    			self.updateGreatPersonBar(screen)
    		###
    
    		if CyInterface().shouldDisplayFlag() and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
    			screen.show("CivilizationFlag")
    			screen.show("InterfaceHelpButton")
    			screen.show("MainMenuButton")
    
    		else:
    			screen.hide("CivilizationFlag")
    			screen.hide("InterfaceHelpButton")
    			screen.hide("MainMenuButton")
    
    		if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE_ALL or CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_MINIMAP_ONLY:
    			screen.hide("InterfaceTopLeft")
    			screen.hide("InterfaceTopCenter")
    			screen.hide("InterfaceTopRight")
    			screen.hide("InterfaceLeftBackgroundWidget")
    			screen.hide("InterfaceTopBackgroundWidget")
    			screen.hide("InterfaceCenterBackgroundWidget")
    			screen.hide("InterfaceRightBackgroundWidget")
    			screen.hide("MiniMapPanel")
    
    			screen.hide("TurnLogButton")
    			screen.hide("BUGOptionsScreenWidget")
    			screen.hide("CivilWarButton")
    
    			screen.hide("DomesticAdvisorButton")
    			screen.hide("FinanceAdvisorButton")
    			screen.hide("CivicsAdvisorButton")
    			screen.hide("ForeignAdvisorButton")
    			screen.hide("MilitaryAdvisorButton")
    			screen.hide("TechAdvisorButton")
    			screen.hide("ReligiousAdvisorButton")
    			screen.hide("CorporationAdvisorButton")
    			screen.hide("VictoryAdvisorButton")
    			screen.hide("InfoAdvisorButton")
    			screen.hide("EspionageAdvisorButton")
    
    			screen.hide("MainCityScrollMinus")
    			screen.hide("MainCityScrollPlus")
    
    			# Field of View slider
    			screen.hide(self.szSliderTextId)
    			screen.hide(self.szSliderId)
    
    		elif CyInterface().isCityScreenUp():
    			screen.hide("InterfaceTopLeft")
    			screen.hide("InterfaceTopCenter")
    			screen.hide("InterfaceTopRight")
    			screen.show("InterfaceLeftBackgroundWidget")
    			screen.show("InterfaceTopBackgroundWidget")
    			screen.show("InterfaceCenterBackgroundWidget")
    			screen.show("InterfaceRightBackgroundWidget")
    			screen.show("MiniMapPanel")
    
    			screen.hide("TurnLogButton")
    			screen.hide("BUGOptionsScreenWidget")
    			screen.hide("CivilWarButton")
    
    			screen.hide("DomesticAdvisorButton")
    			screen.hide("FinanceAdvisorButton")
    			screen.hide("CivicsAdvisorButton")
    			screen.hide("MilitaryAdvisorButton")
    			screen.hide("ForeignAdvisorButton")
    			screen.hide("TechAdvisorButton")
    			screen.hide("ReligiousAdvisorButton")
    			screen.hide("CorporationAdvisorButton")
    			screen.hide("VictoryAdvisorButton")
    			screen.hide("InfoAdvisorButton")
    			screen.hide("EspionageAdvisorButton")
    
    			screen.hide("MainCityScrollMinus")
    			screen.hide("MainCityScrollPlus")
    
    			# Field of View slider
    			screen.hide(self.szSliderTextId)
    			screen.hide(self.szSliderId)
    
    		elif CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE:
    			screen.show("InterfaceTopLeft")
    			screen.show("InterfaceTopCenter")
    			screen.show("InterfaceTopRight")
    			screen.hide("InterfaceLeftBackgroundWidget")
    			screen.show("InterfaceTopBackgroundWidget")
    			screen.hide("InterfaceCenterBackgroundWidget")
    			screen.hide("InterfaceRightBackgroundWidget")
    			screen.hide("MiniMapPanel")
    
    			screen.show("TurnLogButton")
    			screen.show("BUGOptionsScreenWidget")
    			screen.show("CivilWarButton")
    
    			screen.show("DomesticAdvisorButton")
    			screen.show("FinanceAdvisorButton")
    			screen.show("CivicsAdvisorButton")
    			screen.show("MilitaryAdvisorButton")
    			screen.show("ForeignAdvisorButton")
    			screen.show("TechAdvisorButton")
    			screen.show("ReligiousAdvisorButton")
    			screen.show("CorporationAdvisorButton")
    			screen.show("VictoryAdvisorButton")
    			screen.show("InfoAdvisorButton")
    			screen.show("EspionageAdvisorButton")
    
    			screen.hide("MainCityScrollMinus")
    			screen.hide("MainCityScrollPlus")
    
    			# Field of View
    			screen.hide(self.szSliderTextId)
    			screen.hide(self.szSliderId)
    
    			screen.moveToFront("TurnLogButton")
    			screen.moveToFront("BUGOptionsScreenWidget")
    			screen.moveToFront("CivilWarButton")
    
    			screen.moveToFront("DomesticAdvisorButton")
    			screen.moveToFront("FinanceAdvisorButton")
    			screen.moveToFront("CivicsAdvisorButton")
    			screen.moveToFront("MilitaryAdvisorButton")
    			screen.moveToFront("ForeignAdvisorButton")
    			screen.moveToFront("TechAdvisorButton")
    			screen.moveToFront("ReligiousAdvisorButton")
    			screen.moveToFront("CorporationAdvisorButton")
    			screen.moveToFront("VictoryAdvisorButton")
    			screen.moveToFront("InfoAdvisorButton")
    			screen.moveToFront("EspionageAdvisorButton")
    
    		elif CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_ADVANCED_START:
    			screen.hide("InterfaceTopLeft")
    			screen.hide("InterfaceTopCenter")
    			screen.hide("InterfaceTopRight")
    			screen.hide("InterfaceLeftBackgroundWidget")
    			screen.hide("InterfaceTopBackgroundWidget")
    			screen.hide("InterfaceCenterBackgroundWidget")
    			screen.hide("InterfaceRightBackgroundWidget")
    			screen.show("MiniMapPanel")
    
    			screen.hide("TurnLogButton")
    			screen.hide("BUGOptionsScreenWidget")
    			screen.hide("CivilWarButton")
    
    			screen.hide("DomesticAdvisorButton")
    			screen.hide("FinanceAdvisorButton")
    			screen.hide("CivicsAdvisorButton")
    			screen.hide("MilitaryAdvisorButton")
    			screen.hide("ForeignAdvisorButton")
    			screen.hide("TechAdvisorButton")
    			screen.hide("ReligiousAdvisorButton")
    			screen.hide("CorporationAdvisorButton")
    			screen.hide("VictoryAdvisorButton")
    			screen.hide("InfoAdvisorButton")
    			screen.hide("EspionageAdvisorButton")
    
    			screen.hide("MainCityScrollMinus")
    			screen.hide("MainCityScrollPlus")
    
    		elif CyEngine().isGlobeviewUp():
    			screen.show("InterfaceTopLeft")
    			screen.show("InterfaceTopCenter")
    			screen.show("InterfaceTopRight")
    			screen.hide("InterfaceLeftBackgroundWidget")
    			screen.hide("InterfaceTopBackgroundWidget")
    			screen.hide("InterfaceCenterBackgroundWidget")
    			screen.show("InterfaceRightBackgroundWidget")
    			screen.show("MiniMapPanel")
    
    			screen.show("TurnLogButton")
    			screen.show("BUGOptionsScreenWidget")
    			screen.show("CivilWarButton")
    
    			screen.show("DomesticAdvisorButton")
    			screen.show("FinanceAdvisorButton")
    			screen.show("CivicsAdvisorButton")
    			screen.show("MilitaryAdvisorButton")
    			screen.show("ForeignAdvisorButton")
    			screen.show("TechAdvisorButton")
    			screen.show("ReligiousAdvisorButton")
    			screen.show("CorporationAdvisorButton")
    			screen.show("VictoryAdvisorButton")
    			screen.show("InfoAdvisorButton")
    			screen.show("EspionageAdvisorButton")
    
    			screen.hide("MainCityScrollMinus")
    			screen.hide("MainCityScrollPlus")
    
    			# Field of View slider
    			screen.hide(self.szSliderTextId)
    			screen.hide(self.szSliderId)
    
    			screen.moveToFront("TurnLogButton")
    			screen.moveToFront("BUGOptionsScreenWidget")
    			screen.moveToFront("CivilWarButton")
    
    			screen.moveToFront("DomesticAdvisorButton")
    			screen.moveToFront("FinanceAdvisorButton")
    			screen.moveToFront("CivicsAdvisorButton")
    			screen.moveToFront("MilitaryAdvisorButton")
    			screen.moveToFront("ForeignAdvisorButton")
    			screen.moveToFront("TechAdvisorButton")
    			screen.moveToFront("ReligiousAdvisorButton")
    			screen.moveToFront("CorporationAdvisorButton")
    			screen.moveToFront("VictoryAdvisorButton")
    			screen.moveToFront("InfoAdvisorButton")
    			screen.moveToFront("EspionageAdvisorButton")
    
    		else:
    			screen.show("InterfaceTopLeft")
    			screen.show("InterfaceTopCenter")
    			screen.show("InterfaceTopRight")
    			screen.show("InterfaceLeftBackgroundWidget")
    			screen.show("InterfaceTopBackgroundWidget")
    			screen.show("InterfaceCenterBackgroundWidget")
    			screen.show("InterfaceRightBackgroundWidget")
    			screen.show("MiniMapPanel")
    
    			screen.show("TurnLogButton")
    			screen.show("BUGOptionsScreenWidget")
    			screen.show("CivilWarButton")
    
    			screen.show("DomesticAdvisorButton")
    			screen.show("FinanceAdvisorButton")
    			screen.show("CivicsAdvisorButton")
    			screen.show("MilitaryAdvisorButton")
    			screen.show("ForeignAdvisorButton")
    			screen.show("TechAdvisorButton")
    			screen.show("ReligiousAdvisorButton")
    			screen.show("CorporationAdvisorButton")
    			screen.show("VictoryAdvisorButton")
    			screen.show("InfoAdvisorButton")
    			screen.show("EspionageAdvisorButton")
    
    			screen.show("MainCityScrollMinus")
    			screen.show("MainCityScrollPlus")
    
    			# Field of View slider
    			if MainOpt.isShowFieldOfView():
    				screen.show(self.szSliderTextId)
    				screen.show(self.szSliderId)
    			else:
    				screen.hide(self.szSliderTextId)
    				screen.hide(self.szSliderId)
    
    			screen.moveToFront("TurnLogButton")
    			screen.moveToFront("BUGOptionsScreenWidget")
    			screen.moveToFront("CivilWarButton")
    
    			screen.moveToFront("DomesticAdvisorButton")
    			screen.moveToFront("FinanceAdvisorButton")
    			screen.moveToFront("CivicsAdvisorButton")
    			screen.moveToFront("MilitaryAdvisorButton")
    			screen.moveToFront("ForeignAdvisorButton")
    			screen.moveToFront("TechAdvisorButton")
    			screen.moveToFront("ReligiousAdvisorButton")
    			screen.moveToFront("CorporationAdvisorButton")
    			screen.moveToFront("VictoryAdvisorButton")
    			screen.moveToFront("InfoAdvisorButton")
    			screen.moveToFront("EspionageAdvisorButton")
    
    		screen.updateMinimapVisibility()
    		return 0
    
    
    
    	def updatePlotListButtons( self ):
    #		BugUtil.debug("updatePlotListButtons start - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		self.updatePlotListButtons_Hide(screen)
    		self.updatePlotListButtons_Common(screen)
    
    # BUG - draw methods
    		sDrawMethod = self.DRAW_METHODS[PleOpt.getDrawMethod()]
    		if sDrawMethod == self.DRAW_METHOD_PLE:
    			self.PLE.updatePlotListButtons_PLE(screen, self.xResolution, self.yResolution)
    			self.bPLECurrentlyShowing = True
    		elif sDrawMethod == self.DRAW_METHOD_VAN:
    			self.updatePlotListButtons_Orig(screen)
    			self.bVanCurrentlyShowing = True
    		else:  # self.DRAW_METHOD_BUG
    			self.updatePlotListButtons_BUG(screen)
    			self.bBUGCurrentlyShowing = True
    # BUG - draw methods
    
    #		BugUtil.debug("updatePlotListButtons end - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
    		return 0
    
    #		if PleOpt.isPLE_Style():
    #			self.updatePlotListButtons_PLE(screen)
    #			self.bPLECurrentlyShowing = True
    #		else:
    #			self.updatePlotListButtons_Orig(screen)
    #			self.bVanCurrentlyShowing = True
    #		return 0
    
    	def updatePlotListButtons_Hide( self, screen ):
    #		BugUtil.debug("updatePlotListButtons_Hide - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
    
    		# hide all buttons
    		if self.bPLECurrentlyShowing:
    #			BugUtil.debug("updatePlotListButtons_Hide - hiding PLE")
    			self.PLE.hidePlotListButtonPLEObjects(screen)
    			self.PLE.hideUnitInfoPane()
    			self.bPLECurrentlyShowing = False
    
    		if self.bVanCurrentlyShowing:
    #			BugUtil.debug("updatePlotListButtons_Hide - hiding Vanilla")
    			self.hidePlotListButton_Orig(screen)
    			self.bVanCurrentlyShowing = False
    
    # BUG - BUG unit plot draw method - start
    		if self.bBUGCurrentlyShowing:
    #			BugUtil.debug("updatePlotListButtons_Hide - hiding BUG")
    			self.hidePlotListButton_BUG(screen)
    			self.bBUGCurrentlyShowing = False
    # BUG - BUG unit plot draw method - end
    
    
    
    	def updatePlotListButtons_Common( self, screen ):
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		# Capture these for looping over the plot's units
    		self.PLE.UnitPlotList_BUGOptions()
    
    		bHandled = False
    		if ( CyInterface().shouldDisplayUnitModel() and not CyEngine().isGlobeviewUp() and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL ):
    			if ( CyInterface().isCitySelection() ):
    
    				iOrders = CyInterface().getNumOrdersQueued()
    
    				for i in xrange( iOrders ):
    					if ( bHandled == False ):
    						eOrderNodeType = CyInterface().getOrderNodeType(i)
    						if (eOrderNodeType  == OrderTypes.ORDER_TRAIN ):
    							screen.addUnitGraphicGFC( "InterfaceUnitModel", CyInterface().getOrderNodeData1(i), 170, yResolution - 138, 128, 128, WidgetTypes.WIDGET_HELP_SELECTED, 0, -1,  -20, 30, 1, False )
    							bHandled = True
    						elif ( eOrderNodeType == OrderTypes.ORDER_CONSTRUCT ):
    							screen.addBuildingGraphicGFC( "InterfaceUnitModel", CyInterface().getOrderNodeData1(i), 170, yResolution - 138, 128, 128, WidgetTypes.WIDGET_HELP_SELECTED, 0, -1,  -20, 30, 0.8, False )
    							bHandled = True
    						elif ( eOrderNodeType == OrderTypes.ORDER_CREATE ):
    							if(gc.getProjectInfo(CyInterface().getOrderNodeData1(i)).isSpaceship()):
    								modelType = 0
    								screen.addSpaceShipWidgetGFC("InterfaceUnitModel", 170, yResolution - 138, 128, 128, CyInterface().getOrderNodeData1(i), modelType, WidgetTypes.WIDGET_HELP_SELECTED, 0, -1)
    							else:
    								screen.hide("InterfaceUnitModel")
    							bHandled = True
    						elif eOrderNodeType == OrderTypes.ORDER_MAINTAIN:
    							screen.hide("InterfaceUnitModel")
    							bHandled = True
    
    				if not bHandled:
    					screen.hide("InterfaceUnitModel")
    					bHandled = True
    
    				screen.moveToFront("SelectedCityText")
    
    			elif CyInterface().getHeadSelectedUnit():
    				screen.addUnitGraphicGFC("InterfaceUnitModel", CyInterface().getHeadSelectedUnit().getUnitType(), 170, yResolution - 138, 128, 128, WidgetTypes.WIDGET_UNIT_MODEL, CyInterface().getHeadSelectedUnit().getUnitType(), -1, -20, 30, 1, False)
    				screen.moveToFront("SelectedUnitText")
    			else:
    				screen.hide("InterfaceUnitModel")
    		else:
    			screen.hide("InterfaceUnitModel")
    
    
    
    	def hidePlotListButton_Orig(self, screen):
    #		BugUtil.debug("hidePlotListButton_Orig - %i", self.numPlotListButtons_Total())
    		# hides all unit button objects
    		for i in xrange( self.numPlotListButtons_Total() ):
    			szString = "PlotListButton" + str(i)
    			screen.hide( szString )
    			screen.hide( szString + "Icon")
    			screen.hide( szString + "Health")
    			screen.hide( szString + "MoveBar")
    			screen.hide( szString + "PromoFrame")
    			screen.hide( szString + "ActionIcon")
    			screen.hide( szString + "Upgrade")
    
    
    
    # BUG - draw method
    	def hidePlotListButton_BUG(self, screen):
    		if self.DRAW_METHODS[PleOpt.getDrawMethod()] != self.DRAW_METHOD_BUG:
    			self.BupPanel.clearUnits()
    			self.BupPanel.Hide()
    
    		return
    		# hides all unit button objects
    #		for i in xrange( self.iMaxPlotListIcons ):
    #			szString = "PlotListButton" + str(i)
    #			screen.hide( szString )
    #			screen.hide( szString + "Icon")
    #			screen.hide( szString + "Health")
    #			screen.hide( szString + "MoveBar")
    #			screen.hide( szString + "PromoFrame")
    #			screen.hide( szString + "ActionIcon")
    #			screen.hide( szString + "Upgrade")
    # BUG - draw method
    
    
    	def updatePlotListButtons_Orig( self, screen ):
    
    # need to put in something similar to 	def displayUnitPlotListObjects( self, screen, pLoopUnit, nRow, nCol ):
    
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		pPlot = CyInterface().getSelectionPlot()
    
    		for i in xrange(gc.getNumPromotionInfos()):
    			szName = "PromotionButton" + str(i)
    			screen.moveToFront( szName )
    
    		screen.hide("PlotListMinus")
    		screen.hide("PlotListPlus")
    
    		BugUtil.debug("updatePlotListButtons_Orig - column %i, offset %i", CyInterface().getPlotListColumn(), CyInterface().getPlotListOffset())
    
    		if ( pPlot and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyEngine().isGlobeviewUp() == False):
    
    			iVisibleUnits = CyInterface().getNumVisibleUnits()
    			iCount = -(CyInterface().getPlotListColumn())
    
    			bLeftArrow = False
    			bRightArrow = False
    
    			if (CyInterface().isCityScreenUp()):
    				iMaxRows = 1
    				iSkipped = (self.numPlotListRows() - 1) * self.numPlotListButtonsPerRow()
    				iCount += iSkipped
    			else:
    				iMaxRows = self.numPlotListRows()
    				iCount += CyInterface().getPlotListOffset()
    				iSkipped = 0
    
    			BugUtil.debug("updatePlotListButtons_Orig - iCount(%i), iSkipped(%i)", iCount, iSkipped)
    
    			CyInterface().cacheInterfacePlotUnits(pPlot)
    			for i in xrange(CyInterface().getNumCachedInterfacePlotUnits()):
    				pLoopUnit = CyInterface().getCachedInterfacePlotUnit(i)
    				if (pLoopUnit):
    
    					if ((iCount == 0) and (CyInterface().getPlotListColumn() > 0)):
    						bLeftArrow = True
    					elif ((iCount == (self.numPlotListRows() * self.numPlotListButtonsPerRow() - 1)) and ((iVisibleUnits - iCount - CyInterface().getPlotListColumn() + iSkipped) > 1)):
    						bRightArrow = True
    
    					if ((iCount >= 0) and (iCount <  self.numPlotListButtonsPerRow() * self.numPlotListRows())):
    						if ((pLoopUnit.getTeam() != gc.getGame().getActiveTeam()) or pLoopUnit.isWaiting()):
    							szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_FORTIFY").getPath()
    
    						elif (pLoopUnit.canMove()):
    							if (pLoopUnit.hasMoved()):
    								szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_HASMOVED").getPath()
    							else:
    								szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_MOVE").getPath()
    						else:
    							szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_NOMOVE").getPath()
    
    						szString = "PlotListButton" + str(iCount)
    						screen.changeImageButton( szString, gc.getUnitInfo(pLoopUnit.getUnitType()).getButton() )
    						if ( pLoopUnit.getOwner() == gc.getGame().getActivePlayer() ):
    							bEnable = True
    						else:
    							bEnable = False
    						screen.enable(szString, bEnable)
    
    						if (pLoopUnit.IsSelected()):
    							screen.setState(szString, True)
    						else:
    							screen.setState(szString, False)
    						screen.show( szString )
    
    						# place the health bar
    						if (pLoopUnit.isFighting()):
    							bShowHealth = False
    						elif (pLoopUnit.getDomainType() == DomainTypes.DOMAIN_AIR):
    							bShowHealth = pLoopUnit.canAirAttack()
    						else:
    							bShowHealth = pLoopUnit.canFight()
    
    						if bShowHealth:
    							szStringHealth = szString + "Health"
    							screen.setBarPercentage( szStringHealth, InfoBarTypes.INFOBAR_STORED, float( pLoopUnit.currHitPoints() ) / float( pLoopUnit.maxHitPoints() ) )
    							if (pLoopUnit.getDamage() >= ((pLoopUnit.maxHitPoints() * 2) / 3)):
    								screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RED"))
    							elif (pLoopUnit.getDamage() >= (pLoopUnit.maxHitPoints() / 3)):
    								screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_YELLOW"))
    							else:
    								screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREEN"))
    							screen.show( szStringHealth )
    
    						# Adds the overlay first
    						szStringIcon = szString + "Icon"
    						screen.changeDDSGFC( szStringIcon, szFileName )
    						screen.show( szStringIcon )
    
    						if bEnable:
    							x = 315 + ((iCount % self.numPlotListButtonsPerRow()) * 34)
    							y = yResolution - 169 + (iCount / self.numPlotListButtonsPerRow() - self.numPlotListRows() + 1) * 34
    
    							self.PLE._displayUnitPlotList_Dot( screen, pLoopUnit, szString, iCount, x, y + 4 )
    							self.PLE._displayUnitPlotList_Promo( screen, pLoopUnit, szString )
    							self.PLE._displayUnitPlotList_Upgrade( screen, pLoopUnit, szString, iCount, x, y )
    							self.PLE._displayUnitPlotList_Mission( screen, pLoopUnit, szString, iCount, x, y - 22, 12)
    
    					iCount = iCount + 1
    
    #			BugUtil.debug("updatePlotListButtons_Orig - vis units(%i), buttons per row(%i), max rows(%i)", iVisibleUnits, self.numPlotListButtonsPerRow(), iMaxRows)
    			if (iVisibleUnits > self.numPlotListButtonsPerRow() * iMaxRows):
    #				BugUtil.debug("updatePlotListButtons_Orig - show arrows %s %s", bLeftArrow, bRightArrow)
    				screen.enable("PlotListMinus", bLeftArrow)
    				screen.show("PlotListMinus")
    
    				screen.enable("PlotListPlus", bRightArrow)
    				screen.show("PlotListPlus")
    
    		return 0
    
    # BUG - BUG unit plot draw method - start
    	def updatePlotListButtons_BUG( self, screen ):
    
    # need to put in something similar to 	def displayUnitPlotListObjects( self, screen, pLoopUnit, nRow, nCol ):
    
    #		xResolution = screen.getXResolution()
    #		yResolution = screen.getYResolution()
    
    		pPlot = CyInterface().getSelectionPlot()
    
    		# this moves the promotions for the unit shown in the
    		# bottom left so that they sit on top of the unit picture
    		for i in xrange(gc.getNumPromotionInfos()):
    			szName = "PromotionButton" + str(i)
    			screen.moveToFront( szName )
    
    #		screen.hide("PlotListMinus")
    #		screen.hide("PlotListPlus")
    
    #		BugUtil.debug("updatePlotListButtons_BUG - A")
    
    
    #		if ( pPlot and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyEngine().isGlobeviewUp() == False):
    
    
    
    		# skip this if we don't need to display any units
    #		if not (pPlot
    #		and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL
    #		and CyEngine().isGlobeviewUp() == False):
    		if (not pPlot
    		or CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE_ALL
    		or CyEngine().isGlobeviewUp() == True):
    			self.BupPanel.clearUnits()
    			self.BupPanel.Hide()
    			return 0
    
    #		BugUtil.debug("updatePlotListButtons_BUG - B")
    
    #		self.BupPanel.clearUnits()
    
    		self.BupPanel.addPlot(pPlot.getX(), pPlot.getY())
    
    		CyInterface().cacheInterfacePlotUnits(pPlot)
    		for i in xrange(CyInterface().getNumCachedInterfacePlotUnits()):
    			pLoopUnit = CyInterface().getCachedInterfacePlotUnit(i)
    			if (pLoopUnit):
    				self.BupPanel.addUnit(pLoopUnit)
    
    #		BugUtil.debug("updatePlotListButtons_BUG - C")
    
    #		self.BupPanel.UpdateBUGOptions()
    
    		timer = BugUtil.Timer("draw plot list")
    		self.BupPanel.Draw()
    		timer.log()
    
    
    
    #
    
    
    
    
    
    
    
    #		iVisibleUnits = CyInterface().getNumVisibleUnits()
    #		iCount = -(CyInterface().getPlotListColumn())
    
    #		bLeftArrow = False
    #		bRightArrow = False
    
    #		if (CyInterface().isCityScreenUp()):
    #			iMaxRows = 1
    #			iSkipped = (gc.getMAX_PLOT_LIST_ROWS() - 1) * self.numPlotListButtons()
    #			iCount += iSkipped
    #		else:
    #			iMaxRows = gc.getMAX_PLOT_LIST_ROWS()
    #			iCount += CyInterface().getPlotListOffset()
    #			iSkipped = 0
    
    #		CyInterface().cacheInterfacePlotUnits(pPlot)
    #		for i in xrange(CyInterface().getNumCachedInterfacePlotUnits()):
    #			pLoopUnit = CyInterface().getCachedInterfacePlotUnit(i)
    #			if (pLoopUnit):
    
    #				if ((iCount == 0) and (CyInterface().getPlotListColumn() > 0)):
    #					bLeftArrow = True
    #				elif ((iCount == (gc.getMAX_PLOT_LIST_ROWS() * self.numPlotListButtons() - 1)) and ((iVisibleUnits - iCount - CyInterface().getPlotListColumn() + iSkipped) > 1)):
    #					bRightArrow = True
    
    #				if ((iCount >= 0) and (iCount <  self.numPlotListButtons() * gc.getMAX_PLOT_LIST_ROWS())):
    #					if ((pLoopUnit.getTeam() != gc.getGame().getActiveTeam()) or pLoopUnit.isWaiting()):
    #						szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_FORTIFY").getPath()
    
    #					elif (pLoopUnit.canMove()):
    #						if (pLoopUnit.hasMoved()):
    #							szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_HASMOVED").getPath()
    #						else:
    #							szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_MOVE").getPath()
    #					else:
    #						szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_NOMOVE").getPath()
    
    #					szString = "PlotListButton" + str(iCount)
    #					screen.changeImageButton( szString, gc.getUnitInfo(pLoopUnit.getUnitType()).getButton() )
    #					if ( pLoopUnit.getOwner() == gc.getGame().getActivePlayer() ):
    #						bEnable = True
    #					else:
    #						bEnable = False
    #					screen.enable(szString, bEnable)
    
    #					if (pLoopUnit.IsSelected()):
    #						screen.setState(szString, True)
    #					else:
    #						screen.setState(szString, False)
    #					screen.show( szString )
    
    #					# place the health bar
    #					if (pLoopUnit.isFighting()):
    #						bShowHealth = False
    #					elif (pLoopUnit.getDomainType() == DomainTypes.DOMAIN_AIR):
    #						bShowHealth = pLoopUnit.canAirAttack()
    #					else:
    #						bShowHealth = pLoopUnit.canFight()
    
    #					if bShowHealth:
    #						szStringHealth = szString + "Health"
    #						screen.setBarPercentage( szStringHealth, InfoBarTypes.INFOBAR_STORED, float( pLoopUnit.currHitPoints() ) / float( pLoopUnit.maxHitPoints() ) )
    #						if (pLoopUnit.getDamage() >= ((pLoopUnit.maxHitPoints() * 2) / 3)):
    #							screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RED"))
    #						elif (pLoopUnit.getDamage() >= (pLoopUnit.maxHitPoints() / 3)):
    #							screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_YELLOW"))
    #						else:
    #							screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREEN"))
    #						screen.show( szStringHealth )
    
    #					# Adds the overlay first
    #					szStringIcon = szString + "Icon"
    #					screen.changeDDSGFC( szStringIcon, szFileName )
    #					screen.show( szStringIcon )
    
    #					if bEnable:#
    #						x = 315 + ((iCount % self.numPlotListButtons()) * 34)
    #						y = yResolution - 169 + (iCount / self.numPlotListButtons() - gc.getMAX_PLOT_LIST_ROWS() + 1) * 34
    
    #						self.displayUnitPlotList_Dot( screen, pLoopUnit, szString, iCount, x, y + 4 )
    #						self.displayUnitPlotList_Promo( screen, pLoopUnit, szString )
    #						self.displayUnitPlotList_Upgrade( screen, pLoopUnit, szString, iCount, x, y )
    #						self.displayUnitPlotList_Mission( screen, pLoopUnit, szString, iCount, x, y - 22, 12)
    
    #				iCount = iCount + 1
    
    #		if (iVisibleUnits > self.numPlotListButtons() * iMaxRows):
    #			screen.enable("PlotListMinus", bLeftArrow)
    #			screen.show("PlotListMinus")
    
    #			screen.enable("PlotListPlus", bRightArrow)
    #			screen.show("PlotListPlus")
    #		else:
    #			screen.hide("PlotListMinus")
    #			screen.hide("PlotListPlus")
    
    		return 0
    # BUG - BUG unit plot draw method - end
    
    
    
    	# This will update the flag widget for SP hotseat and dbeugging
    	def updateFlag(self):
    
    		if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START ):
    			screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    			xResolution = screen.getXResolution()
    			yResolution = screen.getYResolution()
    			screen.addFlagWidgetGFC( "CivilizationFlag", xResolution - 288, yResolution - 138, 68, 250, gc.getGame().getActivePlayer(), WidgetTypes.WIDGET_FLAG, gc.getGame().getActivePlayer(), -1)
    
    	# Will hide and show the selection buttons and their associated buttons
    	def updateSelectionButtons( self ):
    
    		global SELECTION_BUTTON_COLUMNS
    		global MAX_SELECTION_BUTTONS
    		global g_pSelectedUnit
    
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    
    		pHeadSelectedCity = CyInterface().getHeadSelectedCity()
    		pHeadSelectedUnit = CyInterface().getHeadSelectedUnit()
    
    		global g_NumEmphasizeInfos
    		global g_NumCityTabTypes
    		global g_NumHurryInfos
    		global g_NumUnitClassInfos
    		global g_NumBuildingClassInfos
    		global g_NumProjectInfos
    		global g_NumProcessInfos
    		global g_NumActionInfos
    
    		# Find out our resolution
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    # BUG - Build/Action Icon Size - start
    		if MainOpt.isBuildIconSizeLarge():
    			screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113 + 18, xResolution - (iMultiListXL+iMultiListXR), 64, 4, 64, 64, TableStyles.TABLE_STYLE_STANDARD )
    		elif MainOpt.isBuildIconSizeMedium():
    			screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 100, 4, 48, 48, TableStyles.TABLE_STYLE_STANDARD )
    		else:
    			screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 114, 4, 36, 36, TableStyles.TABLE_STYLE_STANDARD )
    		# EF: minimum icon size for disabled buttons to work is 33 so these sizes won't fly
    #		screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 102, 4, 32, 32, TableStyles.TABLE_STYLE_STANDARD )
    #		screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 104, 4, 24, 24, TableStyles.TABLE_STYLE_STANDARD )
    # BUG - Build/Action Icon Size - end
    		screen.clearMultiList( "BottomButtonContainer")
    		screen.hide("BottomButtonContainer")
    
    		# All of the hides...
    		self.setMinimapButtonVisibility(False)
    
    		screen.hideList( 0 )
    
    		for i in range (g_NumEmphasizeInfos):
    			szButtonID = "Emphasize" + str(i)
    			screen.hide( szButtonID )
    
    		# Hurry button show...
    		for i in xrange( g_NumHurryInfos ):
    			szButtonID = "Hurry" + str(i)
    			screen.hide( szButtonID )
    
    		# Conscript Button Show
    		screen.hide("Conscript")
    		#screen.hide("Liberate")
    		screen.hide("AutomateProduction")
    		screen.hide("AutomateCitizens")
    
    		if not CyEngine().isGlobeviewUp() and pHeadSelectedCity:
    			self.setMinimapButtonVisibility(True)
    
    			if pHeadSelectedCity.getOwner() == gc.getGame().getActivePlayer() or gc.getGame().isDebugMode():
    				iBtnX = xResolution - 284
    				iBtnY = yResolution - 177
    				iBtnW = 64
    				iBtnH = 30
    
    				# Liberate button
    				#szText = "<font=1>" + localText.getText("TXT_KEY_LIBERATE_CITY", ()) + "</font>"
    				#screen.setButtonGFC( "Liberate", szText, "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_LIBERATE_CITY, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
    				#screen.setStyle( "Liberate", "Button_CityT1_Style")
    				#screen.hide("Liberate")
    
    				iBtnSX = xResolution - 284
    				iBtnX = iBtnSX
    				iBtnY = yResolution - 140
    				iBtnW = 64
    				iBtnH = 30
    
    				# Conscript button
    				szText = "<font=1>" + localText.getText("TXT_KEY_DRAFT", ()) + "</font>"
    				screen.setButtonGFC("Conscript", szText, "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_CONSCRIPT, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
    				screen.setStyle("Conscript", "Button_CityT1_Style")
    				screen.hide("Conscript")
    
    				iBtnY += iBtnH
    				iBtnW = 32
    				iBtnH = 28
    
    				# Hurry Buttons
    				screen.setButtonGFC("Hurry0", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_HURRY, 0, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
    				screen.setStyle("Hurry0", "Button_CityC1_Style")
    				screen.hide("Hurry0")
    
    				iBtnX += iBtnW
    
    				screen.setButtonGFC("Hurry1", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_HURRY, 1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
    				screen.setStyle("Hurry1", "Button_CityC2_Style")
    				screen.hide("Hurry1")
    
    				iBtnX = iBtnSX
    				iBtnY += iBtnH
    
    				# Automate Production Button
    				screen.addCheckBoxGFC("AutomateProduction", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_AUTOMATE_PRODUCTION, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
    				screen.setStyle("AutomateProduction", "Button_CityC3_Style")
    
    				iBtnX += iBtnW
    
    				# Automate Citizens Button
    				screen.addCheckBoxGFC("AutomateCitizens", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_AUTOMATE_CITIZENS, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
    				screen.setStyle("AutomateCitizens", "Button_CityC4_Style")
    
    				iBtnY += iBtnH
    				iBtnX = iBtnSX
    
    				iBtnW	= 22
    				iBtnWa	= 20
    				iBtnH	= 24
    				iBtnHa	= 27
    
    				# Set Emphasize buttons
    				i = 0
    				szButtonID = "Emphasize" + str(i)
    				screen.addCheckBoxGFC(szButtonID, "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL)
    				szStyle = "Button_CityB" + str(i+1) + "_Style"
    				screen.setStyle(szButtonID, szStyle)
    				screen.hide(szButtonID)
    
    				i+=1
    				szButtonID = "Emphasize" + str(i)
    				screen.addCheckBoxGFC( szButtonID, "", "", iBtnX+iBtnW, iBtnY, iBtnWa, iBtnH, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    				szStyle = "Button_CityB" + str(i+1) + "_Style"
    				screen.setStyle( szButtonID, szStyle )
    				screen.hide( szButtonID )
    
    				i+=1
    				szButtonID = "Emphasize" + str(i)
    				screen.addCheckBoxGFC( szButtonID, "", "", iBtnX+iBtnW+iBtnWa, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    				szStyle = "Button_CityB" + str(i+1) + "_Style"
    				screen.setStyle( szButtonID, szStyle )
    				screen.hide( szButtonID )
    
    				iBtnY += iBtnH
    
    				i+=1
    				szButtonID = "Emphasize" + str(i)
    				screen.addCheckBoxGFC( szButtonID, "", "", iBtnX, iBtnY, iBtnW, iBtnHa, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    				szStyle = "Button_CityB" + str(i+1) + "_Style"
    				screen.setStyle( szButtonID, szStyle )
    				screen.hide( szButtonID )
    
    				i+=1
    				szButtonID = "Emphasize" + str(i)
    				screen.addCheckBoxGFC( szButtonID, "", "", iBtnX+iBtnW, iBtnY, iBtnWa, iBtnHa, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    				szStyle = "Button_CityB" + str(i+1) + "_Style"
    				screen.setStyle( szButtonID, szStyle )
    				screen.hide( szButtonID )
    
    				i+=1
    				szButtonID = "Emphasize" + str(i)
    				screen.addCheckBoxGFC(szButtonID, "", "", iBtnX+iBtnW+iBtnWa, iBtnY, iBtnW, iBtnHa, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL)
    				szStyle = "Button_CityB" + str(i+1) + "_Style"
    				screen.setStyle(szButtonID, szStyle)
    				screen.hide(szButtonID)
    
    				g_pSelectedUnit = 0
    				screen.setState("AutomateCitizens", pHeadSelectedCity.isCitizensAutomated())
    				screen.setState("AutomateProduction", pHeadSelectedCity.isProductionAutomated())
    
    				for i in range (g_NumEmphasizeInfos):
    					szButtonID = "Emphasize" + str(i)
    					screen.show(szButtonID)
    					if pHeadSelectedCity.AI_isEmphasize(i):
    						screen.setState(szButtonID, True)
    					else:
    						screen.setState(szButtonID, False)
    
    				# City Tabs
    				for i in xrange( g_NumCityTabTypes ):
    					szButtonID = "CityTab" + str(i)
    					screen.show( szButtonID )
    
    				# Show Hurry buttons
    				for i in xrange(g_NumHurryInfos):
    					szButtonID = "Hurry" + str(i)
    					screen.show(szButtonID)
    					screen.enable(szButtonID, pHeadSelectedCity.canHurry(i, False))
    
    				# Show Conscript button
    				screen.show("Conscript")
    				if (pHeadSelectedCity.canConscript()):
    					screen.enable( "Conscript", True )
    				else:
    					screen.enable( "Conscript", False )
    
    				# Liberate Button Show
    				#screen.show("Liberate")
    				#if (-1 != pHeadSelectedCity.getLiberationPlayer()):
    				#	screen.enable( "Liberate", True )
    				#else:
    				#	screen.enable( "Liberate", False )
    
    				iCount = 0
    				iRow = 0
    				bFound = False
    
    				# Units to construct
    				for i in xrange(g_NumUnitClassInfos):
    					eLoopUnit = gc.getCivilizationInfo(pHeadSelectedCity.getCivilizationType()).getCivilizationUnits(i)
    
    					if pHeadSelectedCity.canTrain(eLoopUnit, False, True):
    						szButton = gc.getPlayer(pHeadSelectedCity.getOwner()).getUnitButton(eLoopUnit)
    						screen.appendMultiListButton("BottomButtonContainer", szButton, iRow, WidgetTypes.WIDGET_TRAIN, i, -1, False)
    						screen.show("BottomButtonContainer")
    
    						if not pHeadSelectedCity.canTrain(eLoopUnit, False, False):
    							screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, szButton)
    
    						iCount += 1
    						bFound = True
    
    				iCount = 0
    				if bFound:
    					iRow += 1
    				bFound = False
    
    				# Buildings to construct
    				for i in xrange(g_NumBuildingClassInfos):
    					if not isLimitedWonderClass(i):
    						eLoopBuilding = gc.getCivilizationInfo(pHeadSelectedCity.getCivilizationType()).getCivilizationBuildings(i)
    						if pHeadSelectedCity.canConstruct(eLoopBuilding, False, True, False):
    							screen.appendMultiListButton("BottomButtonContainer", gc.getBuildingInfo(eLoopBuilding).getButton(), iRow, WidgetTypes.WIDGET_CONSTRUCT, i, -1, False)
    							screen.show("BottomButtonContainer")
    
    							if not pHeadSelectedCity.canConstruct(eLoopBuilding, False, False, False):
    								screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, gc.getBuildingInfo(eLoopBuilding).getButton())
    
    							iCount += 1
    							bFound = True
    
    				iCount = 0
    				if bFound:
    					iRow += 1
    				bFound = False
    
    				# Wonders to construct
    				i = 0
    				for i in xrange(g_NumBuildingClassInfos):
    					if isLimitedWonderClass(i):
    						eLoopBuilding = gc.getCivilizationInfo(pHeadSelectedCity.getCivilizationType()).getCivilizationBuildings(i)
    						if pHeadSelectedCity.canConstruct(eLoopBuilding, False, True, False):
    							screen.appendMultiListButton("BottomButtonContainer", gc.getBuildingInfo(eLoopBuilding).getButton(), iRow, WidgetTypes.WIDGET_CONSTRUCT, i, -1, False)
    							screen.show("BottomButtonContainer")
    
    							if not pHeadSelectedCity.canConstruct(eLoopBuilding, False, False, False):
    								screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, gc.getBuildingInfo(eLoopBuilding).getButton())
    
    							iCount += 1
    							bFound = True
    
    				iCount = 0
    				if bFound:
    					iRow += 1
    				bFound = False
    
    				# Projects to construct
    				i = 0
    				for i in xrange(g_NumProjectInfos):
    					if pHeadSelectedCity.canCreate(i, False, True):
    						screen.appendMultiListButton("BottomButtonContainer", gc.getProjectInfo(i).getButton(), iRow, WidgetTypes.WIDGET_CREATE, i, -1, False)
    						screen.show("BottomButtonContainer")
    
    						if not pHeadSelectedCity.canCreate(i, False, False):
    							screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, gc.getProjectInfo(i).getButton())
    
    						iCount += 1
    						bFound = True
    
    				# Processes
    				i = 0
    				for i in xrange(g_NumProcessInfos):
    					if pHeadSelectedCity.canMaintain(i, False):
    						screen.appendMultiListButton("BottomButtonContainer", gc.getProcessInfo(i).getButton(), iRow, WidgetTypes.WIDGET_MAINTAIN, i, -1, False)
    						screen.show("BottomButtonContainer")
    
    						iCount += 1
    						bFound = True
    
    				screen.selectMultiList("BottomButtonContainer", CyInterface().getCityTabSelectionRow())
    
    		elif not CyEngine().isGlobeviewUp() and pHeadSelectedUnit and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY:
    			self.setMinimapButtonVisibility(True)
    
    			if CyInterface().getInterfaceMode() == InterfaceModeTypes.INTERFACEMODE_SELECTION:
    				if pHeadSelectedUnit.getOwner() == gc.getGame().getActivePlayer() and g_pSelectedUnit != pHeadSelectedUnit:
    					actions = CyInterface().getActionsToShow()
    					g_pSelectedUnit = pHeadSelectedUnit
    					iCount = 0
    
    					for i in actions:
    						screen.appendMultiListButton("BottomButtonContainer", gc.getActionInfo(i).getButton(), 0, WidgetTypes.WIDGET_ACTION, i, -1, False)
    						screen.show("BottomButtonContainer")
    
    						if not CyInterface().canHandleAction(i, False):
    							screen.disableMultiListButton("BottomButtonContainer", 0, iCount, gc.getActionInfo(i).getButton())
    
    						if pHeadSelectedUnit.isActionRecommended(i):
    							screen.enableMultiListPulse("BottomButtonContainer", True, 0, iCount)
    						else:
    							screen.enableMultiListPulse("BottomButtonContainer", False, 0, iCount)
    
    						iCount += 1
    
    					if CyInterface().canCreateGroup():
    						screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTONS_CREATEGROUP").getPath(), 0, WidgetTypes.WIDGET_CREATE_GROUP, -1, -1, False)
    						screen.show("BottomButtonContainer")
    						iCount += 1
    
    					if CyInterface().canDeleteGroup():
    						screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTONS_SPLITGROUP").getPath(), 0, WidgetTypes.WIDGET_DELETE_GROUP, -1, -1, False)
    						screen.show("BottomButtonContainer")
    						iCount += 1
    
    				### Great People Missions
    					iUnitType = g_pSelectedUnit.getUnitType()
    					iPlayer = g_pSelectedUnit.getOwner()
    					pPlayer = gc.getPlayer(iPlayer)
    					pPlot = g_pSelectedUnit.plot()
    
    					if pPlayer.isTurnActive():
    
    						#if iUnitType == gc.getInfoTypeForString('UNIT_ARTIST'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_PROPAGANDA").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 901, -1, False)
    						#	iCount += 1
    
    						#elif iUnitType == gc.getInfoTypeForString('UNIT_DOCTOR'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_INOCULATION").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 911, -1, False)
    						#	iCount += 1
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_HUMANITARIAN").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 912, -1, False)
    						#	iCount += 1
    
    						#elif iUnitType == gc.getInfoTypeForString('UNIT_ENGINEER'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_RESUPPLY").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 921, -1, False)
    						#	iCount += 1
    
    						#elif iUnitType == gc.getInfoTypeForString('UNIT_MERCHANT'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_EXPEDITION").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 931, -1, False)
    						#	iCount += 1
    
    						if iUnitType == gc.getInfoTypeForString('UNIT_PROPHET'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_PILGRIMAGE").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 941, -1, False)
    						#	iCount += 1
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_MEDIATION").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 942, -1, False)
    						#	iCount += 1
    
    						### Founding Religions
    							if pPlot.isCity():
    								pCity = pPlot.getPlotCity()
    								if not pCity.isHolyCity():
    									if pCity.getOwner() == iPlayer:
    										iReligionCount = 0
    										lReligion = []
    										for iReligion in xrange(gc.getNumReligionInfos()):
    											if CyGame().isReligionFounded(iReligion):
    												iReligionCount += 1
    											else:
    												lReligion.append(iReligion)
    
    										if iReligionCount < HR.getReligionLimit():
    											for iReligion in lReligion:
    												screen.appendMultiListButton("BottomButtonContainer", gc.getReligionInfo(iReligion).getButton(), 0, WidgetTypes.WIDGET_FOUND_RELIGION, 1748, iReligion, False)
    												iCount += 1
    											screen.show("BottomButtonContainer")
    
    						#elif iUnitType == gc.getInfoTypeForString('UNIT_SCIENTIST'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_ENCYCLOPEDIA").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 751, -1, False)
    						#	iCount += 1
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_MYSTERY").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 952, -1, False)
    						#	iCount += 1
    
    						#elif iUnitType == gc.getInfoTypeForString('UNIT_SPY_GREAT'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_COUP").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 961, -1, False)
    						#	iCount += 1
    
    						#elif iUnitType == gc.getInfoTypeForString('UNIT_GREAT_GENERAL'):
    						#	screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_RALLY").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 971, -1, False)
    						#	iCount += 1
    
    					### Inquisition
    						elif iUnitType == gc.getInfoTypeForString('UNIT_INQUISITOR'):
    							if pPlot.isCity():
    								pCity = pPlot.getPlotCity()
    								iTeam = pPlayer.getTeam()
    								pTeam = gc.getTeam(iTeam)
    								iPlotTeam = pPlot.getTeam()
    								if iPlotTeam == iTeam:
    									for iReligion in xrange(gc.getNumReligionInfos()):
    										if pCity.isHasReligion(iReligion) and not pCity.isHolyCityByType(iReligion):
    											screen.appendMultiListButton("BottomButtonContainer", gc.getReligionInfo(iReligion).getButton(), 0, WidgetTypes.WIDGET_INQUISITION, 8586, iReligion, False)
    											iCount += 1
    									screen.show("BottomButtonContainer")
    						###
    
    		elif CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY:
    			self.setMinimapButtonVisibility(True)
    
    		return 0
    
    
    
    	# Will update the research buttons
    	def updateResearchButtons( self ):
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    
    		for i in xrange( gc.getNumTechInfos() ):
    			szName = "ResearchButton" + str(i)
    			screen.hide( szName )
    
    		# Find out our resolution
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		#screen.hide("InterfaceOrnamentLeftLow")
    		#screen.hide("InterfaceOrnamentRightLow")
    
    		for i in xrange(gc.getNumReligionInfos()):
    			szName = "ReligionButton" + str(i)
    			screen.hide( szName )
    
    		i = 0
    		if ( CyInterface().shouldShowResearchButtons() and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW ):
    			iCount = 0
    
    			for i in xrange( gc.getNumTechInfos() ):
    				if (gc.getActivePlayer().canResearch(i, False)):
    					if (iCount < 20):
    						szName = "ResearchButton" + str(i)
    
    						bDone = False
    						for j in xrange( gc.getNumReligionInfos() ):
    							if ( not bDone ):
    								if (gc.getReligionInfo(j).getTechPrereq() == i):
    									if not (gc.getGame().isReligionSlotTaken(j)):
    										szName = "ReligionButton" + str(j)
    										bDone = True
    
    						screen.show( szName )
    						self.setResearchButtonPosition(szName, iCount)
    
    					iCount = iCount + 1
    
    		return 0
    
    
    
    	def updateCitizenButtons(self):
    		''
    		pHeadSelectedCity = CyInterface().getHeadSelectedCity()
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		for i in xrange(gc.getNumSpecialistInfos()):
    			screen.hide("IncreaseSpecialist" + str(i))
    			screen.hide("DecreaseSpecialist" + str(i))
    			screen.hide("SpecialistButton" + str(i))
    			screen.hide("SpecialistCount" + str(i))
    			screen.hide("GreatSpecialistButton" + str(i))
    			screen.hide("GreatSpecialistCount" + str(i))
    
    		if CyInterface().isCityScreenUp():
    			if pHeadSelectedCity and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
    				lSpecialist = []
    				lGreatSpecialist = []
    				for i in xrange(gc.getNumSpecialistInfos()):
    					if gc.getSpecialistInfo(i).isVisible():
    						lSpecialist.append(i)
    					else:
    						lGreatSpecialist.append(i)
    
    				iX = xResolution - self.iSpecGPAnchorX
    				iY = yResolution - self.iSpecGPAnchorY + 10
    
    				for i in xrange(len(lSpecialist)):
    					iSpecialist = lSpecialist[i]
    					iSpecialistCount = pHeadSelectedCity.getSpecialistCount(iSpecialist)
    					iFreeSpecialistCount = pHeadSelectedCity.getFreeSpecialistCount(iSpecialist)
    					szBuffer = u"<font=2>" + str(iSpecialistCount + iFreeSpecialistCount) + u"</font>"
    					iY += iStackBarHeight
    					screen.setImageButton("SpecialistButton" + str(i), gc.getSpecialistInfo(iSpecialist).getTexture(), iX + 50, iY, 24, 24, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
    					screen.setText("SpecialistCount" + str(i), "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, iX + 50, iY, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
    					screen.setHitTest("SpecialistCount" + str(i), HitTestTypes.HITTEST_NOHIT)
    
    					if pHeadSelectedCity.getOwner() == CyGame().getActivePlayer() or CyGame().isDebugMode():
    						szName = "IncreaseSpecialist" + str(i)
    						screen.setButtonGFC(szName, u"", "", iX, iY + 2, 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, iSpecialist, 1, ButtonStyles.BUTTON_STYLE_CITY_PLUS)
    						if not (pHeadSelectedCity.isSpecialistValid(iSpecialist, 1) and (pHeadSelectedCity.isCitizensAutomated() or iSpecialistCount < (pHeadSelectedCity.getPopulation() + pHeadSelectedCity.totalFreeSpecialists()))):
    							screen.enable(szName, False)
    
    						szName = "DecreaseSpecialist" + str(i)
    						screen.setButtonGFC(szName, u"", "", iX + 20, iY + 2, 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, iSpecialist, -1, ButtonStyles.BUTTON_STYLE_CITY_MINUS)
    						if iSpecialistCount <= 0:
    							screen.enable(szName, False)
    
    				iY += 40
    				iXSpacing = ((xResolution - iX) / len(lGreatSpecialist)) + 1
    				for i in xrange(len(lGreatSpecialist)):
    					iSpecialist = lGreatSpecialist[i]
    					iSpecialistCount = pHeadSelectedCity.getSpecialistCount(iSpecialist)
    					iFreeSpecialistCount = pHeadSelectedCity.getFreeSpecialistCount(iSpecialist)
    					szBuffer = u"<font=2>" + str(iSpecialistCount + iFreeSpecialistCount) + u"</font>"
    					screen.setImageButton("GreatSpecialistButton" + str(i), gc.getSpecialistInfo(iSpecialist).getTexture(), iX, iY, 24, 24, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
    					screen.setText("GreatSpecialistCount" + str(i), "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, iX , iY, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
    					screen.setHitTest("GreatSpecialistCount" + str(i), HitTestTypes.HITTEST_NOHIT)
    					iX += iXSpacing
    
    		return 0
    
    
    
    	# Will update the game data strings
    	def updateGameDataStrings( self ):
    		''
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    
    		screen.hide("ResearchText")
    		screen.hide("GoldText")
    		screen.hide("TimeText")
    		screen.hide("ResearchBar")
    		screen.hide("EraText")
    
    	### Great Person Bar
    		screen.hide("GreatPersonBar")
    		screen.hide("GreatPersonBar-w")
    		screen.hide("GreatPersonBarText")
    
    # BUG - Great General Bar - start
    		screen.hide("GreatGeneralBar")
    		screen.hide("GreatGeneralBarText")
    # BUG - Great General Bar - end
    
    # BUG - Bars on single line for higher resolution screens - start
    		screen.hide("GreatGeneralBar-w")
    		screen.hide("ResearchBar-w")
    # BUG - Bars on single line for higher resolution screens - end
    
    # BUG - Progress Bar - Tick Marks - start
    		self.pBarResearchBar_n.hide(screen)
    		self.pBarResearchBar_w.hide(screen)
    # BUG - Progress Bar - Tick Marks - end
    
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		pHeadSelectedCity = CyInterface().getHeadSelectedCity()
    
    		if (pHeadSelectedCity):
    			ePlayer = pHeadSelectedCity.getOwner()
    		else:
    			ePlayer = gc.getGame().getActivePlayer()
    
    		if ( ePlayer < 0 or ePlayer >= gc.getMAX_PLAYERS() ):
    			return 0
    
    		for iI in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
    			szString = "PercentText" + str(iI)
    			screen.hide(szString)
    			szString = "RateText" + str(iI)
    			screen.hide(szString)
    
    		if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY  and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START):
    
    			# Percent of commerce
    			if (gc.getPlayer(ePlayer).isAlive()):
    				iCount = 0
    				for iI in xrange( CommerceTypes.NUM_COMMERCE_TYPES ):
    					eCommerce = (iI + 1) % CommerceTypes.NUM_COMMERCE_TYPES
    					if (gc.getPlayer(ePlayer).isCommerceFlexible(eCommerce) or (CyInterface().isCityScreenUp() and (eCommerce == CommerceTypes.COMMERCE_GOLD))):
    						szOutText = u"<font=2>%c:%d%%</font>" %(gc.getCommerceInfo(eCommerce).getChar(), gc.getPlayer(ePlayer).getCommercePercent(eCommerce))
    						szString = "PercentText" + str(iI)
    						screen.setLabel( szString, "Background", szOutText, CvUtil.FONT_LEFT_JUSTIFY, 14, 50 + (iCount * 19), -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    						screen.show( szString )
    
    						if not CyInterface().isCityScreenUp():
    							szOutText = u"<font=2>" + localText.getText("TXT_KEY_MISC_POS_GOLD_PER_TURN", (gc.getPlayer(ePlayer).getCommerceRate(CommerceTypes(eCommerce)), )) + u"</font>"
    							szString = "RateText" + str(iI)
    # BUG - Min/Max Sliders - start
    							if MainOpt.isShowMinMaxCommerceButtons():
    								iMinMaxAdjustX = 40
    							else:
    								iMinMaxAdjustX = 0
    							screen.setLabel( szString, "Background", szOutText, CvUtil.FONT_LEFT_JUSTIFY, 112 + iMinMaxAdjustX, 50 + (iCount * 19), -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    # BUG - Min/Max Sliders - end
    							screen.show( szString )
    
    						iCount = iCount + 1;
    
    			self.updateTimeText()
    			screen.setLabel( "TimeText", "Background", g_szTimeText, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 56, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    			screen.show("TimeText")
    
    			if (gc.getPlayer(ePlayer).isAlive()):
    
    # BUG - Gold Rate Warning - start
    				if MainOpt.isGoldRateWarning():
    					pPlayer = gc.getPlayer(ePlayer)
    					iGold = pPlayer.getGold()
    					iGoldRate = pPlayer.calculateGoldRate()
    					if iGold < 0:
    						szText = BugUtil.getText("TXT_KEY_MISC_NEG_GOLD", iGold)
    						if iGoldRate != 0:
    							if iGold + iGoldRate >= 0:
    								szText += BugUtil.getText("TXT_KEY_MISC_POS_GOLD_PER_TURN", iGoldRate)
    							elif iGoldRate >= 0:
    								szText += BugUtil.getText("TXT_KEY_MISC_POS_WARNING_GOLD_PER_TURN", iGoldRate)
    							else:
    								szText += BugUtil.getText("TXT_KEY_MISC_NEG_GOLD_PER_TURN", iGoldRate)
    					else:
    						szText = BugUtil.getText("TXT_KEY_MISC_POS_GOLD", iGold)
    						if iGoldRate != 0:
    							if iGoldRate >= 0:
    								szText += BugUtil.getText("TXT_KEY_MISC_POS_GOLD_PER_TURN", iGoldRate)
    							elif iGold + iGoldRate >= 0:
    								szText += BugUtil.getText("TXT_KEY_MISC_NEG_WARNING_GOLD_PER_TURN", iGoldRate)
    							else:
    								szText += BugUtil.getText("TXT_KEY_MISC_NEG_GOLD_PER_TURN", iGoldRate)
    					if pPlayer.isStrike():
    						szText += BugUtil.getPlainText("TXT_KEY_MISC_STRIKE")
    				else:
    					szText = CyGameTextMgr().getGoldStr(ePlayer)
    # BUG - Gold Rate Warning - end
    				screen.setLabel( "GoldText", "Background", szText, CvUtil.FONT_LEFT_JUSTIFY, 12, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    				screen.show("GoldText")
    
    				if (((gc.getPlayer(ePlayer).calculateGoldRate() != 0) and not (gc.getPlayer(ePlayer).isAnarchy())) or (gc.getPlayer(ePlayer).getGold() != 0)):
    					screen.show("GoldText")
    
    			### Era Text
    				szText = localText.getText("TXT_KEY_BUG_ERA", (gc.getEraInfo(gc.getPlayer(ePlayer).getCurrentEra()).getDescription(), ))
    				screen.setLabel("EraText", "Background", szText, CvUtil.FONT_RIGHT_JUSTIFY, 250, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    				screen.show("EraText")
    
    			### Research Bar
    				if gc.getPlayer(ePlayer).isAnarchy():
    					if self.xResolution >= 1440:
    						xCoord = 268 + (xResolution - 1440) / 2 + 84 + 6 + 487 / 2
    					else:
    						xCoord = screen.centerX(512)
    
    					yCoord = 5  # Ruff: this use to be 3 but I changed it so it lines up with the Great Person Bar
    					szText = localText.getText("INTERFACE_ANARCHY", (gc.getPlayer(ePlayer).getAnarchyTurns(), ))
    					screen.setText("ResearchText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_RESEARCH, -1, -1)
    
    					if gc.getPlayer(ePlayer).getCurrentResearch() != -1:
    						screen.show("ResearchText")
    					else:
    						screen.hide("ResearchText")
    
    				elif gc.getPlayer(ePlayer).getCurrentResearch() != -1:
    					szText = CyGameTextMgr().getResearchStr(ePlayer)
    					if self.xResolution >= 1440:
    						szResearchBar = "ResearchBar-w"
    						xCoord = 268 + (xResolution - 1440) / 2 + 84 + 6 + 487 / 2
    					else:
    						szResearchBar = "ResearchBar"
    						xCoord = screen.centerX(512)
    
    					yCoord = 5  # Ruff: this use to be 3 but I changed it so it lines up with the Great Person Bar
    					screen.setText("ResearchText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_RESEARCH, -1, -1)
    					screen.show("ResearchText")
    
    					researchProgress = gc.getTeam(gc.getPlayer(ePlayer).getTeam()).getResearchProgress(gc.getPlayer(ePlayer).getCurrentResearch())
    					overflowResearch = (gc.getPlayer(ePlayer).getOverflowResearch() * gc.getPlayer(ePlayer).calculateResearchModifier(gc.getPlayer(ePlayer).getCurrentResearch())) / 100
    					researchCost = gc.getTeam(gc.getPlayer(ePlayer).getTeam()).getResearchCost(gc.getPlayer(ePlayer).getCurrentResearch())
    					researchRate = gc.getPlayer(ePlayer).calculateResearchRate(-1)
    
    					screen.setBarPercentage( szResearchBar, InfoBarTypes.INFOBAR_STORED, float(researchProgress + overflowResearch) / researchCost )
    					if researchCost > researchProgress + overflowResearch:
    						screen.setBarPercentage(szResearchBar, InfoBarTypes.INFOBAR_RATE, float(researchRate) / (researchCost - researchProgress - overflowResearch))
    					else:
    						screen.setBarPercentage(szResearchBar, InfoBarTypes.INFOBAR_RATE, 0.0)
    
    					screen.show(szResearchBar)
    
    # BUG - Progress Bar - Tick Marks - start
    					if MainOpt.isShowpBarTickMarks():
    						if szResearchBar == "ResearchBar":
    							self.pBarResearchBar_n.drawTickMarks(screen, researchProgress + overflowResearch, researchCost, researchRate, researchRate, False)
    						else:
    							self.pBarResearchBar_w.drawTickMarks(screen, researchProgress + overflowResearch, researchCost, researchRate, researchRate, False)
    # BUG - Progress Bar - Tick Marks - end
    
    				self.updateGreatPersonBar(screen)
    				self.updateGreatGeneralBar(screen)
    
    		return 0
    
    
    
    	def updateGreatPersonBar(self, screen):
    		''
    		if self.xResolution >= 1440 or not CyInterface().isCityScreenUp():
    			pPlayer = gc.getPlayer(CyGame().getActivePlayer())
    			GPCityList = HR.getGreatPersonTopCities(pPlayer, 1)
    
    			if GPCityList:
    				iTurns = GPCityList[0][0]
    				iGP = GPCityList[0][1]
    				displayCity = GPCityList[0][2]
    			else:
    				iTurns = -1
    				iGP = -1
    				displayCity = None
    
    			if self.xResolution >= 1440:
    				szGreatPersonBar = "GreatPersonBar-w"
    				xCoord = 268 + (self.xResolution - 1440) / 2 + 84 + 6 + 487 + 6 + 320 / 2
    				yCoord = 5
    			else:
    				szGreatPersonBar = "GreatPersonBar"
    				xCoord = 268 + (self.xResolution - 1024) / 2 + 100 + 7 + 380 / 2
    				yCoord = 30
    
    			if displayCity and iTurns > -1:
    				szText = CyTranslator().getText('TXT_KEY_INTERFACE_GREAT_PEOPLE_BAR', (gc.getUnitInfo(iGP).getDescription(), displayCity.getName(), iTurns))
    			else:
    				szText = CyTranslator().getText('TXT_KEY_INTERFACE_GREAT_PEOPLE_BAR_EMPTY', ())
    			szText = u"<font=2>%s</font>" % (szText)
    			screen.setText("GreatPersonBarText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_GREAT_PERSON_BAR, -1, -1)
    			if not displayCity:
    				screen.setHitTest("GreatPersonBarText", HitTestTypes.HITTEST_NOHIT)
    			screen.show("GreatPersonBarText")
    
    			if displayCity:
    				fThreshold = float(pPlayer.greatPeopleThreshold(False))
    				fRate = float(HR.getGreatPersonRate(displayCity, iGP))
    				fFirst = float(HR.getGreatPersonProgress(displayCity, iGP)) / fThreshold
    
    				screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_STORED, fFirst)
    				if fFirst == 1:
    					screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_RATE, fRate / fThreshold)
    				else:
    					screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_RATE, fRate / fThreshold / (1 - fFirst))
    			else:
    				screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_STORED, 0)
    				screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_RATE, 0)
    
    			screen.show(szGreatPersonBar)
    
    
    
    	def updateGreatGeneralBar(self, screen):
    		''
    		if self.xResolution >= 1440 or not CyInterface().isCityScreenUp():
    			pPlayer = gc.getActivePlayer()
    			iCombatExp = pPlayer.getCombatExperience()
    			iThresholdExp = pPlayer.greatPeopleThreshold(True)
    			iNeededExp = iThresholdExp - iCombatExp
    			szText = u"<font=2>%s</font>" %(GGUtil.getGreatGeneralText(iNeededExp))
    
    			if self.xResolution >= 1440:
    				szGreatGeneralBar = "GreatGeneralBar-w"
    				xCoord = 268 + (self.xResolution - 1440) / 2 + 84 / 2
    				yCoord = 5
    			else:
    				szGreatGeneralBar = "GreatGeneralBar"
    				xCoord = 268 + (self.xResolution - 1024) / 2 + 100 / 2
    				yCoord = 32
    
    			screen.setLabel("GreatGeneralBarText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_GREAT_GENERAL, -1, -1)
    			screen.show("GreatGeneralBarText")
    
    			fProgress = float(iCombatExp) / float(iThresholdExp)
    			screen.setBarPercentage(szGreatGeneralBar, InfoBarTypes.INFOBAR_STORED, fProgress)
    			screen.show(szGreatGeneralBar)
    
    
    
    	def updateTimeText( self ):
    		global g_szTimeText
    		ePlayer = gc.getGame().getActivePlayer()
    
    # BUG - NJAGC - start
    		if (ClockOpt.isEnabled()):
    			"""
    			Format: Time - GameTurn/Total Percent - GA (TurnsLeft) Date
    
    			Ex: 10:37 - 220/660 33% - GA (3) 1925
    			"""
    			if (g_bShowTimeTextAlt):
    				bShowTime = ClockOpt.isShowAltTime()
    				bShowGameTurn = ClockOpt.isShowAltGameTurn()
    				bShowTotalTurns = ClockOpt.isShowAltTotalTurns()
    				bShowPercentComplete = ClockOpt.isShowAltPercentComplete()
    				bShowDateGA = ClockOpt.isShowAltDateGA()
    			else:
    				bShowTime = ClockOpt.isShowTime()
    				bShowGameTurn = ClockOpt.isShowGameTurn()
    				bShowTotalTurns = ClockOpt.isShowTotalTurns()
    				bShowPercentComplete = ClockOpt.isShowPercentComplete()
    				bShowDateGA = ClockOpt.isShowDateGA()
    
    			if (not gc.getGame().getMaxTurns() > 0):
    				bShowTotalTurns = False
    				bShowPercentComplete = False
    
    			bFirst = True
    			g_szTimeText = ""
    
    			if (bShowTime):
    				bFirst = False
    				g_szTimeText += getClockText()
    
    			if (bShowGameTurn):
    				if (bFirst):
    					bFirst = False
    				else:
    					g_szTimeText += u" - "
    				g_szTimeText += u"%d" %( gc.getGame().getElapsedGameTurns() )
    				if (bShowTotalTurns):
    					g_szTimeText += u"/%d" %( gc.getGame().getMaxTurns() )
    
    			if (bShowPercentComplete):
    				if (bFirst):
    					bFirst = False
    				else:
    					if (not bShowGameTurn):
    						g_szTimeText += u" - "
    					else:
    						g_szTimeText += u" "
    				g_szTimeText += u"%2.2f%%" %( 100 *(float(gc.getGame().getElapsedGameTurns()) / float(gc.getGame().getMaxTurns())) )
    
    			if (bShowDateGA):
    				if (bFirst):
    					bFirst = False
    				else:
    					g_szTimeText += u" - "
    				szDateGA = unicode(CyGameTextMgr().getInterfaceTimeStr(ePlayer))
    				if(ClockOpt.isUseEraColor()):
    					iEraColor = ClockOpt.getEraColor(gc.getEraInfo(gc.getPlayer(ePlayer).getCurrentEra()).getType())
    					if (iEraColor >= 0):
    						szDateGA = localText.changeTextColor(szDateGA, iEraColor)
    				g_szTimeText += szDateGA
    		else:
    			"""
    			Original Clock
    			Format: Time - 'Turn' GameTurn - GA (TurnsLeft) Date
    
    			Ex: 10:37 - Turn 220 - GA (3) 1925
    			"""
    			g_szTimeText = localText.getText("TXT_KEY_TIME_TURN", (CyGame().getGameTurn(), )) + u" - " + unicode(CyGameTextMgr().getInterfaceTimeStr(ePlayer))
    			if (CyUserProfile().isClockOn()):
    				g_szTimeText = getClockText() + u" - " + g_szTimeText
    # BUG - NJAGC - end
    
    
    
    	def updateCityScreen( self ):
    		''
    		global MAX_DISPLAYABLE_BUILDINGS
    		global MAX_DISPLAYABLE_TRADE_ROUTES
    		global MAX_BONUS_ROWS
    		global g_iNumTradeRoutes
    		global g_iNumBuildings
    		global g_iNumLeftBonus
    		global g_iNumCenterBonus
    		global g_iNumRightBonus
    
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		pHeadSelectedCity = CyInterface().getHeadSelectedCity()
    
    		# Top Panel
    		screen.hide("CityNameText")
    		screen.hide("PopulationBar")
    		screen.hide("PopulationText")
    		screen.hide("PopulationInputText")
    		screen.hide("HappinessText")
    		screen.hide("HealthText")
    
    		screen.hide("CityScrollPlus")
    		screen.hide("CityScrollMinus")
    		screen.hide("DefenseText")
    
    		screen.hide("ProductionBar")
    		screen.hide("ProductionText")
    		screen.hide("ProductionInputText")
    
    		# Left Panel
    		for i in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
    			szName = "CityPercentText" + str(i)
    			screen.hide(szName)
    
    		screen.hide("MaintenanceText")
    		screen.hide("MaintenanceAmountText")
    		screen.hide("TradeRouteListLabel")
    		screen.hide("TradeRouteListBackground")
    		screen.hide("TradeRouteTable")
    		screen.hide("RawYieldsTrade0")
    		screen.hide("RawYieldsFood1")
    		screen.hide("RawYieldsProduction2")
    		screen.hide("RawYieldsCommerce3")
    		screen.hide("RawYieldsWorkedTiles4")
    		screen.hide("RawYieldsCityTiles5")
    		screen.hide("RawYieldsOwnedTiles6")
    		screen.hide("BuildingListLabel")
    		screen.hide("BuildingListBackground")
    		screen.hide("BuildingListTable")
    		screen.hide("CultureBar")
    		screen.hide("CultureText")
    		screen.hide("NationalityBar")
    		screen.hide("NationalityText")
    		screen.hide("DissentBar")
    		screen.hide("DissentText")
    
    		# Centre
    		screen.hide("CityReligions")
    		screen.hide("CityCorporations")
    
    		# Right Panel
    		screen.hide("ResourceTable")
    		screen.hide("ResourceFilter")
    		screen.hide("ResourceFilter2")
    		screen.hide("SpecialistBackground")
    		screen.hide("SpecialistLabel")
    		screen.hide("GreatPeopleThreshold")
    
    		for i in xrange(len(HR.GreatPeople)):
    			szName = "CityGPBar" + str(i)
    			screen.hide(szName)
    			szName = "CityGPText" + str(i)
    			screen.hide(szName)
    
    		# BUG - Progress Bar Tick Marks
    		self.pBarPopulationBar.hide(screen)
    		self.pBarProductionBar.hide(screen)
    		self.pBarProductionBar_Whip.hide(screen)
    
    		# Update City Screen
    		if CyInterface().isCityScreenUp():
    			if pHeadSelectedCity:
    				screen.show("InterfaceTopLeftBackgroundWidget")
    				screen.show("InterfaceTopRightBackgroundWidget")
    				screen.show("InterfaceCenterLeftBackgroundWidget")
    				screen.show("CityScreenTopWidget")
    				screen.show("CityNameBackground")
    				screen.show("TopCityPanelLeft")
    				screen.show("TopCityPanelRight")
    				screen.show("CityScreenAdjustPanel")
    				screen.show("InterfaceCenterRightBackgroundWidget")
    
    				if pHeadSelectedCity.getTeam() == gc.getGame().getActiveTeam():
    					if gc.getActivePlayer().getNumCities() > 1:
    						screen.show("CityScrollPlus")
    						screen.show("CityScrollMinus")
    
    			### Help Text Area
    				screen.setHelpTextArea(390, FontTypes.SMALL_FONT, 0, 0, -2.2, True, CyArtFileMgr().getInterfaceArtInfo("POPUPS_BACKGROUND_TRANSPARENT").getPath(), True, True, CvUtil.FONT_LEFT_JUSTIFY, 0)
    
    			### Name Display
    				szBuffer = u"<font=4>"
    				if pHeadSelectedCity.isCapital():
    					szBuffer += u"%c" %(CyGame().getSymbolID(FontSymbols.STAR_CHAR))
    				elif pHeadSelectedCity.isGovernmentCenter():
    					szBuffer += u"%c" %(CyGame().getSymbolID(FontSymbols.SILVER_STAR_CHAR))
    
    				#if pHeadSelectedCity.isPower():
    				#	szBuffer += u"%c" %(CyGame().getSymbolID(FontSymbols.POWER_CHAR))
    
    				szBuffer += u"%s: %d" %(pHeadSelectedCity.getName(), pHeadSelectedCity.getPopulation())
    				if pHeadSelectedCity.isOccupation():
    					szBuffer += u" (%c:%d)" %(CyGame().getSymbolID(FontSymbols.OCCUPATION_CHAR), pHeadSelectedCity.getOccupationTimer())
    
    				szBuffer += u"</font>"
    				screen.setText("CityNameText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, screen.centerX(512), 35, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_CITY_NAME, -1, -1)
    				screen.setStyle("CityNameText", "Button_Stone_Style")
    				screen.show("CityNameText")
    
    			### Defense Display
    				iDefenseModifier = pHeadSelectedCity.getDefenseModifier(False)
    				if iDefenseModifier != 0:
    					szBuffer = localText.getText("TXT_KEY_MAIN_CITY_DEFENSE", (CyGame().getSymbolID(FontSymbols.DEFENSE_CHAR), iDefenseModifier))
    					if pHeadSelectedCity.getDefenseDamage() > 0:
    						szTempBuffer = u" (%d%%)" % (((gc.getMAX_CITY_DEFENSE_DAMAGE() - pHeadSelectedCity.getDefenseDamage()) * 100 ) / gc.getMAX_CITY_DEFENSE_DAMAGE())
    						szBuffer = szBuffer + szTempBuffer
    					szNewBuffer = "<font=4>"
    					szNewBuffer = szNewBuffer + szBuffer
    					szNewBuffer = szNewBuffer + "</font>"
    					screen.setLabel("DefenseText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, self.xResolution - 270, 40, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_HELP_DEFENSE, -1, -1)
    					screen.show("DefenseText")
    
    
    
    				iFoodDifference = pHeadSelectedCity.foodDifference(True)
    
    				### HR - Pyramids
    				bWorker = pHeadSelectedCity.getProductionUnit() == gc.getInfoTypeForString('UNIT_WORKER') or pHeadSelectedCity.getProductionUnit() == gc.getInfoTypeForString('UNIT_LABOURER')
    				if not pHeadSelectedCity.isDisorder():
    					iPlayer = pHeadSelectedCity.getOwner()
    					if gc.getPlayer(iPlayer).getBuildingClassCount(gc.getInfoTypeForString('BUILDINGCLASS_PYRAMID')) == 1:
    						if bWorker:
    							iFoodDifference += pHeadSelectedCity.getYieldRate(0) - pHeadSelectedCity.foodConsumption(False, 0)
    				###
    
    				iProductionDiffNoFood = pHeadSelectedCity.getCurrentProductionDifference(True, True)
    				iProductionDiffJustFood = (pHeadSelectedCity.getCurrentProductionDifference(False, True) - iProductionDiffNoFood)
    
    
    
    
    			### BUG - Food Assist
    				if (CityUtil.willGrowThisTurn(pHeadSelectedCity) or (iFoodDifference != 0) or not (pHeadSelectedCity.isFoodProduction())):
    					if (CityUtil.willGrowThisTurn(pHeadSelectedCity)):
    						szBuffer = localText.getText("INTERFACE_CITY_GROWTH", ())
    					elif (iFoodDifference > 0):
    
    				### HR - Pyramids
    						iFoodTurnsLeft = (pHeadSelectedCity.growthThreshold() - pHeadSelectedCity.getFood()) / iFoodDifference
    						if (pHeadSelectedCity.growthThreshold() - pHeadSelectedCity.getFood()) % iFoodDifference > 0:
    							iFoodTurnsLeft += 1
    						szBuffer = localText.getText("INTERFACE_CITY_GROWING", (iFoodTurnsLeft, ))
    					###
    
    					elif iFoodDifference < 0:
    						if CityScreenOpt.isShowFoodAssist():
    							iTurnsToStarve = pHeadSelectedCity.getFood() / -iFoodDifference + 1
    							if iTurnsToStarve > 1:
    								szBuffer = localText.getText("INTERFACE_CITY_SHRINKING", (iTurnsToStarve, ))
    							else:
    								szBuffer = localText.getText("INTERFACE_CITY_STARVING", ())
    						else:
    							szBuffer = localText.getText("INTERFACE_CITY_STARVING", ())
    				###
    					else:
    						szBuffer = localText.getText("INTERFACE_CITY_STAGNANT", ())
    
    					screen.setLabel( "PopulationText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, screen.centerX(512), iCityCenterRow1Y, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    					screen.setHitTest( "PopulationText", HitTestTypes.HITTEST_NOHIT )
    					screen.show("PopulationText")
    
    			### HR - Pyramids
    				if not pHeadSelectedCity.isDisorder():
    					if not pHeadSelectedCity.isFoodProduction() or (gc.getPlayer(iPlayer).getBuildingClassCount(gc.getInfoTypeForString("BUILDINGCLASS_PYRAMID")) == 1 and bWorker):
    
    					### BUG - Food Assist
    						if (CityScreenOpt.isShowFoodAssist()):
    							iFoodYield = pHeadSelectedCity.getYieldRate(YieldTypes.YIELD_FOOD)
    							iFoodEaten = pHeadSelectedCity.foodConsumption(False, 0)
    							if iFoodYield == iFoodEaten:
    								szBuffer = localText.getText("INTERFACE_CITY_FOOD_STAGNATE", (iFoodYield, iFoodEaten))
    							elif iFoodYield > iFoodEaten:
    								szBuffer = localText.getText("INTERFACE_CITY_FOOD_GROW", (iFoodYield, iFoodEaten, iFoodYield - iFoodEaten))
    							else:
    								szBuffer = localText.getText("INTERFACE_CITY_FOOD_SHRINK", (iFoodYield, iFoodEaten, iFoodYield - iFoodEaten))
    						else:
    							szBuffer = u"%d%c - %d%c" %(pHeadSelectedCity.getYieldRate(YieldTypes.YIELD_FOOD), gc.getYieldInfo(YieldTypes.YIELD_FOOD).getChar(), pHeadSelectedCity.foodConsumption(False, 0), CyGame().getSymbolID(FontSymbols.EATEN_FOOD_CHAR))
    						###
    
    						screen.setLabel("PopulationInputText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, iCityCenterRow1X - 6, iCityCenterRow1Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    						screen.show("PopulationInputText")
    
    				else:
    					if not pHeadSelectedCity.isFoodProduction():
    						szBuffer = u"%d%c" %(iFoodDifference, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getChar())
    
    					screen.setLabel( "PopulationInputText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, iCityCenterRow1X - 6, iCityCenterRow1Y, -0.3, FontTypes.GAME_FONT,
    						*BugDll.widget("WIDGET_FOOD_MOD_HELP", -1, -1) )
    					screen.show("PopulationInputText")
    				###
    
    				if ((pHeadSelectedCity.badHealth(False) > 0) or (pHeadSelectedCity.goodHealth() >= 0)):
    					if (pHeadSelectedCity.healthRate(False, 0) < 0):
    						szBuffer = localText.getText("INTERFACE_CITY_HEALTH_BAD", (pHeadSelectedCity.goodHealth(), pHeadSelectedCity.badHealth(False), pHeadSelectedCity.healthRate(False, 0)))
    					elif (pHeadSelectedCity.badHealth(False) > 0):
    						szBuffer = localText.getText("INTERFACE_CITY_HEALTH_GOOD", (pHeadSelectedCity.goodHealth(), pHeadSelectedCity.badHealth(False)))
    					else:
    						szBuffer = localText.getText("INTERFACE_CITY_HEALTH_GOOD_NO_BAD", (pHeadSelectedCity.goodHealth(), ))
    
    					screen.setLabel( "HealthText", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, self.xResolution - iCityCenterRow1X + 6, iCityCenterRow1Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_HEALTH, -1, -1 )
    					screen.show("HealthText")
    
    				if iFoodDifference < 0:
    					if pHeadSelectedCity.getFood() + iFoodDifference > 0:
    						iDeltaFood = pHeadSelectedCity.getFood() + iFoodDifference
    					else:
    						iDeltaFood = 0
    					if ( -iFoodDifference < pHeadSelectedCity.getFood() ):
    						iExtraFood = -iFoodDifference
    					else:
    						iExtraFood = pHeadSelectedCity.getFood()
    					screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_STORED, float(iDeltaFood) / pHeadSelectedCity.growthThreshold() )
    					screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE, 0.0 )
    					if ( pHeadSelectedCity.growthThreshold() > iDeltaFood):
    						screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, float(iExtraFood) / (pHeadSelectedCity.growthThreshold() - iDeltaFood) )
    					else:
    						screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, 0.0)
    
    				else:
    
    					screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_STORED, float(pHeadSelectedCity.getFood()) / pHeadSelectedCity.growthThreshold() )
    					if ( pHeadSelectedCity.growthThreshold() >  pHeadSelectedCity.getFood()):
    						screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE, float(iFoodDifference) / (pHeadSelectedCity.growthThreshold() - pHeadSelectedCity.getFood()) )
    					else:
    						screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE, 0.0 )
    					screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, 0.0 )
    
    				screen.show("PopulationBar")
    
    			### BUG - Progress Bar Tick Marks
    				if MainOpt.isShowpBarTickMarks():
    					self.pBarPopulationBar.drawTickMarks(screen, pHeadSelectedCity.getFood(), pHeadSelectedCity.growthThreshold(), iFoodDifference, iFoodDifference, False)
    				###
    
    				if (pHeadSelectedCity.getOrderQueueLength() > 0):
    					if (pHeadSelectedCity.isProductionProcess()):
    						szBuffer = pHeadSelectedCity.getProductionName()
    # BUG - Whip Assist - start
    					else:
    						HURRY_WHIP = gc.getInfoTypeForString("HURRY_POPULATION")
    						HURRY_BUY = gc.getInfoTypeForString("HURRY_GOLD")
    						if (CityScreenOpt.isShowWhipAssist() and pHeadSelectedCity.canHurry(HURRY_WHIP, False)):
    							iHurryPop = pHeadSelectedCity.hurryPopulation(HURRY_WHIP)
    							iOverflow = pHeadSelectedCity.hurryProduction(HURRY_WHIP) - pHeadSelectedCity.productionLeft()
    							if CityScreenOpt.isWhipAssistOverflowCountCurrentProduction():
    								iOverflow += pHeadSelectedCity.getCurrentProductionDifference(False, True)
    							iMaxOverflow = max(pHeadSelectedCity.getProductionNeeded(), pHeadSelectedCity.getCurrentProductionDifference(False, False))
    							iLost = max(0, iOverflow - iMaxOverflow)
    							iOverflow = min(iOverflow, iMaxOverflow)
    							iItemModifier = pHeadSelectedCity.getProductionModifier()
    							iBaseModifier = pHeadSelectedCity.getBaseYieldRateModifier(YieldTypes.YIELD_PRODUCTION, 0)
    							iTotalModifier = pHeadSelectedCity.getBaseYieldRateModifier(YieldTypes.YIELD_PRODUCTION, iItemModifier)
    							iLost *= iBaseModifier
    							iLost /= max(1, iTotalModifier)
    							iOverflow = (iBaseModifier * iOverflow) / max(1, iTotalModifier)
    							if iLost > 0:
    								if pHeadSelectedCity.isProductionUnit():
    									iGoldPercent = gc.getDefineINT("MAXED_UNIT_GOLD_PERCENT")
    								elif pHeadSelectedCity.isProductionBuilding():
    									iGoldPercent = gc.getDefineINT("MAXED_BUILDING_GOLD_PERCENT")
    								elif pHeadSelectedCity.isProductionProject():
    									iGoldPercent = gc.getDefineINT("MAXED_PROJECT_GOLD_PERCENT")
    								else:
    									iGoldPercent = 0
    								iOverflowGold = iLost * iGoldPercent / 100
    								szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION_WHIP_PLUS_GOLD", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft(), iHurryPop, iOverflow, iOverflowGold))
    							else:
    								szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION_WHIP", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft(), iHurryPop, iOverflow))
    						elif (CityScreenOpt.isShowWhipAssist() and pHeadSelectedCity.canHurry(HURRY_BUY, False)):
    							iHurryCost = pHeadSelectedCity.hurryGold(HURRY_BUY)
    							szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION_BUY", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft(), iHurryCost))
    						else:
    							szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft()))
    # BUG - Whip Assist - end
    
    					screen.setLabel( "ProductionText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, screen.centerX(512), iCityCenterRow2Y, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
    					screen.setHitTest( "ProductionText", HitTestTypes.HITTEST_NOHIT )
    					screen.show("ProductionText")
    
    				if (pHeadSelectedCity.isProductionProcess()):
    					szBuffer = u"%d%c" %(pHeadSelectedCity.getYieldRate(YieldTypes.YIELD_PRODUCTION), gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar())
    				elif (pHeadSelectedCity.isFoodProduction() and (iProductionDiffJustFood > 0)):
    					szBuffer = u"%d%c + %d%c" %(iProductionDiffJustFood, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getChar(), iProductionDiffNoFood, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar())
    				else:
    					szBuffer = u"%d%c" %(iProductionDiffNoFood, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar())
    
    				screen.setLabel( "ProductionInputText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, iCityCenterRow1X - 6, iCityCenterRow2Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_PRODUCTION_MOD_HELP, -1, -1 )
    				screen.show("ProductionInputText")
    
    				if ((pHeadSelectedCity.happyLevel() >= 0) or (pHeadSelectedCity.unhappyLevel(0) > 0)):
    					if (pHeadSelectedCity.isDisorder()):
    						szBuffer = u"%d%c" %(pHeadSelectedCity.angryPopulation(0), CyGame().getSymbolID(FontSymbols.ANGRY_POP_CHAR))
    					elif (pHeadSelectedCity.angryPopulation(0) > 0):
    						szBuffer = localText.getText("INTERFACE_CITY_UNHAPPY", (pHeadSelectedCity.happyLevel(), pHeadSelectedCity.unhappyLevel(0), pHeadSelectedCity.angryPopulation(0)))
    					elif (pHeadSelectedCity.unhappyLevel(0) > 0):
    						szBuffer = localText.getText("INTERFACE_CITY_HAPPY", (pHeadSelectedCity.happyLevel(), pHeadSelectedCity.unhappyLevel(0)))
    					else:
    						szBuffer = localText.getText("INTERFACE_CITY_HAPPY_NO_UNHAPPY", (pHeadSelectedCity.happyLevel(), ))
    
    				### BUG - Anger Display
    					if (CityScreenOpt.isShowAngerCounter()
    					and pHeadSelectedCity.getTeam() == gc.getGame().getActiveTeam()):
    						iAngerTimer = max(pHeadSelectedCity.getHurryAngerTimer(), pHeadSelectedCity.getConscriptAngerTimer())
    						if iAngerTimer > 0:
    							szBuffer += u" (%i)" % iAngerTimer
    					###
    
    					screen.setLabel( "HappinessText", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, self.xResolution - iCityCenterRow1X + 6, iCityCenterRow2Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_HAPPINESS, -1, -1 )
    					screen.show("HappinessText")
    
    				if (not(pHeadSelectedCity.isProductionProcess())):
    					iNeeded = pHeadSelectedCity.getProductionNeeded()
    					iStored = pHeadSelectedCity.getProduction()
    					screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_STORED, float(iStored) / iNeeded )
    
    					if iNeeded > iStored:
    						screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE, float(iProductionDiffNoFood) / (iNeeded - iStored) )
    					else:
    						screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE, 0.0 )
    					if iNeeded > iStored + iProductionDiffNoFood:
    						screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE_EXTRA, float(iProductionDiffJustFood) / (iNeeded - iStored - iProductionDiffNoFood) )
    					else:
    						screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE_EXTRA, 0.0)
    
    					screen.show("ProductionBar")
    
    				### BUG - Progress Bar Tick Marks
    					if MainOpt.isShowpBarTickMarks():
    						if (pHeadSelectedCity.isProductionProcess()):
    							iFirst = 0
    							iRate = 0
    						elif (pHeadSelectedCity.isFoodProduction() and (iProductionDiffJustFood > 0)):
    							iFirst = pHeadSelectedCity.getCurrentProductionDifference(False, True)
    							iRate = pHeadSelectedCity.getCurrentProductionDifference(False, False)
    						else:
    							iFirst = pHeadSelectedCity.getCurrentProductionDifference(True, True)
    							iRate = pHeadSelectedCity.getCurrentProductionDifference(True, False)
    						self.pBarProductionBar.drawTickMarks(screen, pHeadSelectedCity.getProduction(), pHeadSelectedCity.getProductionNeeded(), iFirst, iRate, False)
    
    						HURRY_WHIP = gc.getInfoTypeForString("HURRY_POPULATION")
    						if pHeadSelectedCity.canHurry(HURRY_WHIP, False):
    							iRate = pHeadSelectedCity.hurryProduction(HURRY_WHIP) / pHeadSelectedCity.hurryPopulation(HURRY_WHIP)
    							self.pBarProductionBar_Whip.drawTickMarks(screen, pHeadSelectedCity.getProduction(), pHeadSelectedCity.getProductionNeeded(), iFirst, iRate, True)
    					###
    
    				iCount = 0
    
    				for i in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
    					eCommerce = (i + 1) % CommerceTypes.NUM_COMMERCE_TYPES
    
    					if ((gc.getPlayer(pHeadSelectedCity.getOwner()).isCommerceFlexible(eCommerce)) or (eCommerce == CommerceTypes.COMMERCE_GOLD)):
    						szBuffer = u"%d.%02d %c" %(pHeadSelectedCity.getCommerceRate(eCommerce), pHeadSelectedCity.getCommerceRateTimes100(eCommerce)%100, gc.getCommerceInfo(eCommerce).getChar())
    
    						iHappiness = pHeadSelectedCity.getCommerceHappinessByType(eCommerce)
    
    						if (iHappiness != 0):
    							if ( iHappiness > 0 ):
    								szTempBuffer = u", %d%c" %(iHappiness, CyGame().getSymbolID(FontSymbols.HAPPY_CHAR))
    							else:
    								szTempBuffer = u", %d%c" %(-iHappiness, CyGame().getSymbolID(FontSymbols.UNHAPPY_CHAR))
    							szBuffer = szBuffer + szTempBuffer
    
    						szName = "CityPercentText" + str(iCount)
    						screen.setLabel( szName, "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, 220, 45 + (19 * iCount) + 4, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_COMMERCE_MOD_HELP, eCommerce, -1 )
    						screen.show( szName )
    						iCount = iCount + 1
    
    				iCount = 0
    
    			### BUG - Raw Yields
    				bShowRawYields = g_bYieldView and CityScreenOpt.isShowRawYields()
    				if bShowRawYields:
    					screen.addTableControlGFC( "TradeRouteTable", 4, 10, 187, 238, 98, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD )
    					screen.setStyle( "TradeRouteTable", "Table_City_Style")
    					screen.setTableColumnHeader( "TradeRouteTable", 0, u"", 111 )
    					screen.setTableColumnHeader( "TradeRouteTable", 1, u"", 60 )
    					screen.setTableColumnHeader( "TradeRouteTable", 2, u"", 55 )
    					screen.setTableColumnHeader( "TradeRouteTable", 3, u"", 10 )
    					screen.setTableColumnRightJustify( "TradeRouteTable", 1 )
    					screen.setTableColumnRightJustify( "TradeRouteTable", 2 )
    
    				else:
    					screen.addTableControlGFC( "TradeRouteTable", 3, 10, 187, 238, 98, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD )
    					screen.setStyle( "TradeRouteTable", "Table_City_Style")
    					screen.setTableColumnHeader( "TradeRouteTable", 0, u"", 158 )
    					screen.setTableColumnHeader( "TradeRouteTable", 1, u"", 68 )
    					screen.setTableColumnHeader( "TradeRouteTable", 2, u"", 10 )
    					screen.setTableColumnRightJustify( "TradeRouteTable", 1 )
    				###
    
    				screen.show("TradeRouteListBackground")
    
    			### BUG - Raw Yields
    				if (CityScreenOpt.isShowRawYields()):
    					screen.setState("RawYieldsTrade0", not g_bYieldView)
    					screen.show("RawYieldsTrade0")
    
    					screen.setState("RawYieldsFood1", g_bYieldView and g_iYieldType == YieldTypes.YIELD_FOOD)
    					screen.show("RawYieldsFood1")
    					screen.setState("RawYieldsProduction2", g_bYieldView and g_iYieldType == YieldTypes.YIELD_PRODUCTION)
    					screen.show("RawYieldsProduction2")
    					screen.setState("RawYieldsCommerce3", g_bYieldView and g_iYieldType == YieldTypes.YIELD_COMMERCE)
    					screen.show("RawYieldsCommerce3")
    
    					screen.setState("RawYieldsWorkedTiles4", g_iYieldTiles == RawYields.WORKED_TILES)
    					screen.show("RawYieldsWorkedTiles4")
    					screen.setState("RawYieldsCityTiles5", g_iYieldTiles == RawYields.CITY_TILES)
    					screen.show("RawYieldsCityTiles5")
    					screen.setState("RawYieldsOwnedTiles6", g_iYieldTiles == RawYields.OWNED_TILES)
    					screen.show("RawYieldsOwnedTiles6")
    				else:
    					screen.show("TradeRouteListLabel")
    				###
    
    				i = 0
    				iNumBuildings = 0
    
    			### BUG - Raw Yields
    				self.yields = RawYields.Tracker()
    				###
    
    			### Building Display
    				screen.addTableControlGFC("BuildingListTable", 3, 10, 317, 238, self.yResolution - 562, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD)
    				screen.setStyle("BuildingListTable", "Table_City_Style")
    				screen.setTableColumnHeader("BuildingListTable", 0, u"", 142)
    				screen.setTableColumnHeader("BuildingListTable", 1, u"", 84)
    				screen.setTableColumnHeader("BuildingListTable", 2, u"", 10)
    				screen.setTableColumnRightJustify("BuildingListTable", 1)
    				screen.show("BuildingListBackground")
    				screen.show("BuildingListLabel")
    
    				for i in xrange(gc.getNumBuildingInfos()):
    					if pHeadSelectedCity.getNumBuilding(i) > 0:
    						if not gc.getBuildingInfo(i).getArtDefineTag() == "ART_DEF_BUILDING_FAKE":
    							for k in xrange(pHeadSelectedCity.getNumBuilding(i)):
    								szLeftBuffer = gc.getBuildingInfo(i).getDescription()
    								szRightBuffer = u""
    								szIcon = gc.getBuildingInfo(i).getButton()
    
    								bFirst = True
    								if pHeadSelectedCity.getNumActiveBuilding(i) > 0:
    									iHealth = pHeadSelectedCity.getBuildingHealth(i)
    									if iHealth != 0:
    										if not bFirst:
    											szRightBuffer = szRightBuffer + ", "
    										else:
    											bFirst = False
    
    										if iHealth > 0:
    											szTempBuffer = u"+%d%c" % (iHealth, CyGame().getSymbolID(FontSymbols.HEALTHY_CHAR))
    											szRightBuffer = szRightBuffer + szTempBuffer
    										else:
    											szTempBuffer = u"+%d%c" % (-(iHealth), CyGame().getSymbolID(FontSymbols.UNHEALTHY_CHAR))
    											szRightBuffer = szRightBuffer + szTempBuffer
    
    									iHappiness = pHeadSelectedCity.getBuildingHappiness(i)
    									if iHappiness != 0:
    										if not bFirst:
    											szRightBuffer = szRightBuffer + ", "
    										else:
    											bFirst = False
    
    										if iHappiness > 0:
    											szTempBuffer = u"+%d%c" % (iHappiness, CyGame().getSymbolID(FontSymbols.HAPPY_CHAR))
    											szRightBuffer = szRightBuffer + szTempBuffer
    										else:
    											szTempBuffer = u"+%d%c" % (-(iHappiness), CyGame().getSymbolID(FontSymbols.UNHAPPY_CHAR))
    											szRightBuffer = szRightBuffer + szTempBuffer
    
    									for j in xrange(YieldTypes.NUM_YIELD_TYPES):
    										iYield = gc.getBuildingInfo(i).getYieldChange(j) + pHeadSelectedCity.getNumBuilding(i) * pHeadSelectedCity.getBuildingYieldChange(gc.getBuildingInfo(i).getBuildingClassType(), j)
    
    										if iYield != 0:
    											if not bFirst:
    												szRightBuffer = szRightBuffer + ", "
    											else:
    												bFirst = False
    
    											if iYield > 0:
    												szTempBuffer = u"%s%d%c" % ("+", iYield, gc.getYieldInfo(j).getChar())
    												szRightBuffer = szRightBuffer + szTempBuffer
    											else:
    												szTempBuffer = u"%s%d%c" % ("", iYield, gc.getYieldInfo(j).getChar())
    												szRightBuffer = szRightBuffer + szTempBuffer
    
    										### BUG - Raw Yields
    											self.yields.addBuilding(j, iYield)
    											###
    
    								for j in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
    									iCommerce = pHeadSelectedCity.getBuildingCommerceByBuilding(j, i) / pHeadSelectedCity.getNumBuilding(i)
    
    									if iCommerce != 0:
    										if not bFirst:
    											szRightBuffer = szRightBuffer + ", "
    										else:
    											bFirst = False
    
    										if iCommerce > 0:
    											szTempBuffer = u"%s%d%c" % ("+", iCommerce, gc.getCommerceInfo(j).getChar())
    											szRightBuffer = szRightBuffer + szTempBuffer
    										else:
    											szTempBuffer = u"%s%d%c" % ("", iCommerce, gc.getCommerceInfo(j).getChar())
    											szRightBuffer = szRightBuffer + szTempBuffer
    
    								screen.appendTableRow("BuildingListTable")
    								screen.setTableText("BuildingListTable", 0, iNumBuildings, "<font=1>" + szLeftBuffer + "</font>", szIcon, WidgetTypes.WIDGET_PEDIA_JUMP_TO_BUILDING, i, 1, CvUtil.FONT_LEFT_JUSTIFY)
    								screen.setTableText("BuildingListTable", 1, iNumBuildings, "<font=1>" + szRightBuffer + "</font>", "", WidgetTypes.WIDGET_PEDIA_JUMP_TO_BUILDING, i, 1, CvUtil.FONT_RIGHT_JUSTIFY)
    								iNumBuildings += 1
    
    				if iNumBuildings > g_iNumBuildings:
    					g_iNumBuildings = iNumBuildings
    
    
    			### Trade Route Display
    				iNumTradeRoutes = 0
    				for i in xrange(gc.getDefineINT("MAX_TRADE_ROUTES")):
    					pLoopCity = pHeadSelectedCity.getTradeCity(i)
    
    					if (pLoopCity and pLoopCity.getOwner() >= 0):
    						player = gc.getPlayer(pLoopCity.getOwner())
    						szLeftBuffer = u"<color=%d,%d,%d,%d>%s</color>" %(player.getPlayerTextColorR(), player.getPlayerTextColorG(), player.getPlayerTextColorB(), player.getPlayerTextColorA(), pLoopCity.getName() )
    						szRightBuffer = u""
    
    						for j in xrange( YieldTypes.NUM_YIELD_TYPES ):
    
    						### BUG - Fractional Trade
    							iTradeProfit = TradeUtil.calculateTradeRouteYield(pHeadSelectedCity, i, j)
    
    							if (iTradeProfit != 0):
    								if ( iTradeProfit > 0 ):
    									if TradeUtil.isFractionalTrade():
    										szTempBuffer = u"%s%d.%02d%c" %( "+", iTradeProfit // 100,  iTradeProfit % 100, gc.getYieldInfo(j).getChar() )
    									else:
    										szTempBuffer = u"%s%d%c" %( "+", iTradeProfit, gc.getYieldInfo(j).getChar() )
    									szRightBuffer = szRightBuffer + szTempBuffer
    								else:
    									if TradeUtil.isFractionalTrade():
    										szTempBuffer = u"%s%d.%02d%c" %( "", iTradeProfit // 100,  iTradeProfit % 100, gc.getYieldInfo(j).getChar() )
    									else:
    										szTempBuffer = u"%s%d%c" %( "", iTradeProfit, gc.getYieldInfo(j).getChar() )
    									szRightBuffer = szRightBuffer + szTempBuffer
    
    							### BUG - Raw Yields
    								if j == YieldTypes.YIELD_COMMERCE:
    									if pHeadSelectedCity.getTeam() == pLoopCity.getTeam():
    										self.yields.addDomesticTrade(iTradeProfit)
    									else:
    										self.yields.addForeignTrade(iTradeProfit)
    
    						if not bShowRawYields:
    							screen.appendTableRow( "TradeRouteTable")
    							iCiv = player.getCivilizationType()
    							screen.setTableText( "TradeRouteTable", 0, iNumTradeRoutes, "<font=1>" + szLeftBuffer + "</font>", gc.getCivilizationInfo(iCiv).getButton(), WidgetTypes.WIDGET_HELP_TRADE_ROUTE_CITY, i, -1, CvUtil.FONT_LEFT_JUSTIFY )
    							screen.setTableText( "TradeRouteTable", 1, iNumTradeRoutes, "<font=1>" + szRightBuffer + "</font>", "", WidgetTypes.WIDGET_HELP_TRADE_ROUTE_CITY, i, -1, CvUtil.FONT_RIGHT_JUSTIFY )
    							###
    
    						iNumTradeRoutes = iNumTradeRoutes + 1
    
    				if iNumTradeRoutes > g_iNumTradeRoutes:
    					g_iNumTradeRoutes = iNumTradeRoutes
    
    			### Resource Display
    				screen.addDropDownBoxGFC("ResourceFilter", self.xResolution - 247, 38, 115, WidgetTypes.WIDGET_GENERAL, -1, -1, FontTypes.GAME_FONT)
    				screen.addPullDownString("ResourceFilter", "All", -1, -1, True)
    				screen.addPullDownString("ResourceFilter", "Crops", 0, 0, 0 == self.iBonusClass)
    				iBonusClass = 1
    				while not gc.getBonusClassInfo(iBonusClass) is None:
    					sText = gc.getBonusClassInfo(iBonusClass).getType()
    					sText = sText[sText.find("_") + 1:]
    					sText = sText.lower()
    					sText = sText.capitalize()
    					screen.addPullDownString("ResourceFilter", sText, iBonusClass, iBonusClass, iBonusClass == self.iBonusClass)
    					iBonusClass += 1
    
    				screen.addDropDownBoxGFC("ResourceFilter2", self.xResolution - 123, 38, 115, WidgetTypes.WIDGET_GENERAL, -1, -1, FontTypes.GAME_FONT)
    				screen.addPullDownString("ResourceFilter2", " ", -1, -1, True)
    
    				sTableHeight = self.yResolution - 70 - self.iSpecGPAnchorY - 5
    				sTableHeight = (sTableHeight - 2) / 24 * 24 - 1
    				screen.addTableControlGFC("ResourceTable", 4, self.xResolution - 245, 72, 235, sTableHeight, True, True, 24, 24, TableStyles.TABLE_STYLE_CITY)
    				screen.setTableColumnHeader("ResourceTable", 0, "<font=2>" + CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_BONUS", ()) + "</font>", 135)
    				screen.setTableColumnHeader("ResourceTable", 1, "", 30)
    				screen.setTableColumnHeader("ResourceTable", 2, "<font=2>" + CyTranslator().getText("[ICON_HAPPY]" + "</font>", ()), 30)
    				screen.setTableColumnHeader("ResourceTable", 3, "<font=2>" + CyTranslator().getText("[ICON_HEALTHY]" + "</font>", ()), 30)
    				screen.enableSort("ResourceTable")
    
    				lBonus = []
    				for iBonus in xrange(gc.getNumBonusInfos()):
    					ItemInfo = gc.getBonusInfo(iBonus)
    					iClass = ItemInfo.getBonusClassType()
    					if self.iBonusClass != iClass and self.iBonusClass > -1:
    						continue
    					lBonus.append([iClass, ItemInfo.getDescription(), iBonus])
    
    				lBonus.sort()
    				for i in lBonus:
    					iBonus = i[2]
    					ItemInfo = gc.getBonusInfo(iBonus)
    					if pHeadSelectedCity.hasBonus(iBonus):
    						iHealth = pHeadSelectedCity.getBonusHealth(iBonus)
    						iHappiness = pHeadSelectedCity.getBonusHappiness(iBonus)
    						iNumBonus = pHeadSelectedCity.getNumBonuses(iBonus)
    						iRow = screen.appendTableRow("ResourceTable")
    						screen.setTableText("ResourceTable", 0, iRow, "<font=1>" + i[1] + "</font>", ItemInfo.getButton(), WidgetTypes.WIDGET_RESOURCE, iBonus, -1, CvUtil.FONT_LEFT_JUSTIFY)
    						screen.setTableInt("ResourceTable", 1, iRow, str(iNumBonus), "", WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_CENTER_JUSTIFY)
    						screen.setTableInt("ResourceTable", 2, iRow, str(iHappiness), "", WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_CENTER_JUSTIFY)
    						screen.setTableInt("ResourceTable", 3, iRow, str(iHealth), "", WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_CENTER_JUSTIFY)
    				###
    
    				iMaintenance = pHeadSelectedCity.getMaintenanceTimes100()
    				szBuffer = localText.getText("INTERFACE_CITY_MAINTENANCE", ())
    
    				screen.setLabel( "MaintenanceText", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, 15, 126, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_HELP_MAINTENANCE, -1, -1 )
    				screen.show("MaintenanceText")
    
    				szBuffer = u"-%d.%02d %c" %(iMaintenance/100, iMaintenance%100, gc.getCommerceInfo(CommerceTypes.COMMERCE_GOLD).getChar())
    				screen.setLabel( "MaintenanceAmountText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, 220, 125, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_HELP_MAINTENANCE, -1, -1 )
    				screen.show("MaintenanceAmountText")
    
    			### BUG - Raw Yields
    				if bShowRawYields:
    					self.yields.processCity(pHeadSelectedCity)
    					self.yields.fillTable(screen, "TradeRouteTable", g_iYieldType, g_iYieldTiles)
    
    			### Religion Display
    				nColumns = 9
    				screen.addTableControlGFC("CityReligions", nColumns, 265, iCityCenterRow1Y + 65, 275, 75, False, False, 0, 0, TableStyles.TABLE_STYLE_EMPTY)
    				for i in xrange(nColumns):
    					screen.setTableColumnHeader("CityReligions", i, "", 30)
    
    				iCount = 0
    				for i in xrange(gc.getNumReligionInfos()):
    					if pHeadSelectedCity.isHasReligion(i):
    						iColumn = iCount % nColumns
    						if iColumn == 0:
    							iRow = screen.appendTableRow("CityReligions")
    						sText = u"%c" %(gc.getReligionInfo(i).getChar())
    						if pHeadSelectedCity.isHolyCityByType(i):
    							sText = u"%c" %(gc.getReligionInfo(i).getHolyCityChar())
    						screen.setTableText("CityReligions", iColumn, iRow, "<font=4>" + sText + "</font>","", WidgetTypes.WIDGET_HELP_RELIGION_CITY, i, -1, CvUtil.FONT_CENTER_JUSTIFY)
    						iCount += 1
    
    			### Corporation Display
    				nColumns = 9
    				screen.addTableControlGFC("CityCorporations", nColumns, self.xResolution - 530, iCityCenterRow1Y + 65, 275, 75, False, False, 0, 0, TableStyles.TABLE_STYLE_EMPTY)
    				for i in xrange(nColumns):
    					screen.setTableColumnHeader("CityCorporations", i, "", 30)
    
    				iNumCorps = 0
    				for i in xrange(gc.getNumCorporationInfos()):
    					if pHeadSelectedCity.isHasCorporation(i):
    						iNumCorps += 1
    
    				iCount = 0
    				for i in xrange(gc.getNumCorporationInfos()):
    					if pHeadSelectedCity.isHasCorporation(i):
    						iColumn = nColumns - (iNumCorps % nColumns) + iCount
    						sText = u"%c" %(gc.getCorporationInfo(i).getChar())
    						if pHeadSelectedCity.isHeadquartersByType(i):
    							sText = u"%c" %(gc.getCorporationInfo(i).getHeadquarterChar())
    						screen.setTableText("CityCorporations", iColumn, iRow, "<font=4>" + sText + "</font>","", WidgetTypes.WIDGET_HELP_CORPORATION_CITY, i, -1, CvUtil.FONT_CENTER_JUSTIFY)
    						iCount += 1
    
    			### Culture Bar
    				if pHeadSelectedCity.getCultureLevel != CultureLevelTypes.NO_CULTURELEVEL:
    					iRate = pHeadSelectedCity.getCommerceRateTimes100(CommerceTypes.COMMERCE_CULTURE)
    					sLevel = gc.getCultureLevelInfo(pHeadSelectedCity.getCultureLevel()).getTextKey()
    
    					if iRate % 100 == 0:
    						szBuffer = localText.getText("INTERFACE_CITY_COMMERCE_RATE", (sLevel, iRate / 100, gc.getCommerceInfo(CommerceTypes.COMMERCE_CULTURE).getChar()))
    					else:
    						szRate = u"+%d.%02d" % (iRate / 100, iRate % 100)
    						szBuffer = localText.getText("INTERFACE_CITY_COMMERCE_RATE_FLOAT", (sLevel, szRate, gc.getCommerceInfo(CommerceTypes.COMMERCE_CULTURE).getChar()))
    
    					if CityScreenOpt.isShowCultureTurns() and iRate > 0:
    						iCultureTimes100 = pHeadSelectedCity.getCultureTimes100(pHeadSelectedCity.getOwner())
    						iCultureLeftTimes100 = 100 * pHeadSelectedCity.getCultureThreshold() - iCultureTimes100
    						szBuffer += u" " + localText.getText("INTERFACE_CITY_TURNS", (((iCultureLeftTimes100 + iRate - 1) / iRate), ))
    
    					screen.setLabel("CultureText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, 125, self.yResolution - 234, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    					screen.setHitTest("CultureText", HitTestTypes.HITTEST_NOHIT)
    					screen.show("CultureText")
    
    				iFirst = float(pHeadSelectedCity.getCultureTimes100(pHeadSelectedCity.getOwner())) / float(100 * pHeadSelectedCity.getCultureThreshold())
    				screen.setBarPercentage("CultureBar", InfoBarTypes.INFOBAR_STORED, iFirst)
    				if iFirst == 1:
    					screen.setBarPercentage("CultureBar", InfoBarTypes.INFOBAR_RATE, (float(pHeadSelectedCity.getCommerceRate(CommerceTypes.COMMERCE_CULTURE)) / float(pHeadSelectedCity.getCultureThreshold())))
    				else:
    					screen.setBarPercentage("CultureBar", InfoBarTypes.INFOBAR_RATE, ((float(pHeadSelectedCity.getCommerceRate(CommerceTypes.COMMERCE_CULTURE)) / float(pHeadSelectedCity.getCultureThreshold()))) / ( 1 - iFirst ))
    				screen.show("CultureBar")
    
    			### Nationality Bar
    				szBuffer = u"%d%% %s" %(pHeadSelectedCity.plot().calculateCulturePercent(pHeadSelectedCity.getOwner()), gc.getPlayer(pHeadSelectedCity.getOwner()).getCivilizationAdjective(0) )
    				screen.setLabel("NationalityText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, 125, self.yResolution - 208, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    				screen.setHitTest("NationalityText", HitTestTypes.HITTEST_NOHIT)
    				screen.show("NationalityText")
    				iRemainder = 100
    				iWhichBar = 0
    				for h in xrange(gc.getMAX_PLAYERS()):
    					if gc.getPlayer(h).isAlive():
    						iPercent = pHeadSelectedCity.plot().calculateCulturePercent(h)
    						if iPercent > 0:
    							screen.setStackedBarColorsRGB("NationalityBar", iWhichBar, gc.getPlayer(h).getPlayerTextColorR(), gc.getPlayer(h).getPlayerTextColorG(), gc.getPlayer(h).getPlayerTextColorB(), gc.getPlayer(h).getPlayerTextColorA())
    							if iRemainder <= 0:
    								screen.setBarPercentage("NationalityBar", iWhichBar, 0.0)
    							else:
    								screen.setBarPercentage("NationalityBar", iWhichBar, float(iPercent) / iRemainder)
    							iRemainder -= iPercent
    							iWhichBar += 1
    
    				screen.show("NationalityBar")
    
    			### Dissent Bar
    				iDissent = CivilWar.CivilWar().getCityDissent(pHeadSelectedCity)
    				iLevel = CivilWar.CivilWar().getDissentLevel(iDissent)
    				iThreshold, sLevel, iColor = CivilWar.CivilWar().DissentLevels[iLevel]
    				lowerThreshold, lowerLevel, lowerColor = CivilWar.CivilWar().DissentLevels[max(0, iLevel - 1)]
    				upperThreshold, upperLevel, upperColor = CivilWar.CivilWar().DissentLevels[min(iLevel + 1, len(CivilWar.CivilWar().DissentLevels) - 1)]
    				iRate = CivilWar.CivilWar().getCityDissentRate(pHeadSelectedCity)
    				nextLevel, iTurns = CivilWar.CivilWar().getCityDissentTurns(pHeadSelectedCity)
    
    				if iRate == 0:
    					szBuffer = sLevel
    				else:
    					szBuffer = localText.getText("INTERFACE_CITY_DISSENT_RATE", (sLevel, iRate, CyGame().getSymbolID(FontSymbols.OCCUPATION_CHAR)))
    					if nextLevel != iLevel:
    						szBuffer += u" " + localText.getText("INTERFACE_CITY_TURNS", (iTurns, ))
    
    				screen.setLabel("DissentText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, 125, self.yResolution - 182, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    				screen.setHitTest("DissentText", HitTestTypes.HITTEST_NOHIT)
    				screen.show("DissentText")
    
    				iRange = float(upperThreshold - iThreshold)
    				if iRange == 0:
    					iFill = 1.0
    				else:
    					iFill = float(iDissent - iThreshold) / iRange
    
    				screen.setBarPercentage("DissentBar", InfoBarTypes.INFOBAR_STORED, iFill)
    				screen.setBarPercentage("DissentBar", InfoBarTypes.INFOBAR_RATE, 1.0)
    				if iRate < 0:
    					screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_STORED, iColor)
    					screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_RATE, lowerColor)
    				elif iRate >= 0:
    					screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_STORED, upperColor)
    					screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_RATE, iColor)
    
    				screen.show("DissentBar")
    
    			### Great People Bars
    				screen.show("SpecialistLabel")
    				screen.show("SpecialistBackground")
    
    				xBar = self.xResolution - self.iSpecGPAnchorX + 80
    				yBar = self.yResolution - self.iSpecGPAnchorY + iStackBarHeight + 9
    				wBar = self.xResolution - xBar - 10
    				xText = self.xResolution - ((self.iSpecGPAnchorX - 75) / 2)
    				yText = self.yResolution - self.iSpecGPAnchorY + iStackBarHeight + 14
    
    				GPProgress = HR.getCityData(pHeadSelectedCity, 1).split(",")
    				iThreshold = gc.getPlayer(pHeadSelectedCity.getOwner()).greatPeopleThreshold(False)
    				sThreshold = localText.getText('TXT_KEY_INTERFACE_CITY_GREAT_PEOPLE_THRESHOLD', (iThreshold, ))
    				screen.setText("GreatPeopleThreshold", "Background", "<font=2>" + sThreshold + "</font>", CvUtil.FONT_RIGHT_JUSTIFY, self.xResolution - 10, yText, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    				screen.setHitTest("GreatPeopleThreshold", HitTestTypes.HITTEST_NOHIT)
    
    				for i in xrange(len(HR.GreatPeople)):
    					iUnit = HR.GreatPeople[i]
    					if len(GPProgress) > 1:
    						iProgress = int(GPProgress[i])
    					else:
    						iProgress = 0
    
    					iFirst = float(iProgress) / float(iThreshold)
    					iModifier = HR.getGreatPersonModifier(pHeadSelectedCity, iUnit)
    					iRate = pHeadSelectedCity.getGreatPeopleUnitRate(iUnit)
    					iRate += ((iRate * iModifier) / 100)
    					if iRate > 0:
    						iTurns = (iThreshold - iProgress + iRate - 1) / iRate
    						szBuffer = localText.getText('TXT_KEY_INTERFACE_CITY_GREAT_PEOPLE_TURNS', (iRate, iTurns))
    					else:
    						szBuffer = ""
    
    					sBar = "CityGPBar" + str(i)
    					yBar += iStackBarHeight
    					screen.addStackedBarGFC(sBar, xBar, yBar, wBar, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_PERSON_CITY_BAR, HR.GreatPeople[i], -1)
    					screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString('COLOR_GREAT_PEOPLE_STORED'))
    					screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString('COLOR_GREAT_PEOPLE_RATE'))
    					screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString('COLOR_EMPTY'))
    					screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString('COLOR_EMPTY'))
    					screen.setBarPercentage(sBar, InfoBarTypes.INFOBAR_STORED, iFirst)
    
    					if iFirst == 1:
    						screen.setBarPercentage(sBar, InfoBarTypes.INFOBAR_RATE, float(iRate) / float(iThreshold))
    					else:
    						screen.setBarPercentage(sBar, InfoBarTypes.INFOBAR_RATE, (float(iRate) / float(iThreshold)) / (1 - iFirst))
    
    					screen.show(sBar)
    
    					sText = "CityGPText" + str(i)
    					yText += iStackBarHeight
    					screen.setLabel(sText, "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, xText, yText, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    					screen.setHitTest(sText, HitTestTypes.HITTEST_NOHIT)
    					screen.show(sText)
    
    		else:
    			# Help Text Area
    			if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
    				screen.setHelpTextArea(350, FontTypes.SMALL_FONT, 7, self.yResolution - 172, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH)
    			else:
    				screen.setHelpTextArea(350, FontTypes.SMALL_FONT, 7, self.yResolution - 50, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH)
    
    			screen.hide("InterfaceTopLeftBackgroundWidget")
    			screen.hide("InterfaceTopRightBackgroundWidget")
    			screen.hide("InterfaceCenterLeftBackgroundWidget")
    			screen.hide("CityScreenTopWidget")
    			screen.hide("CityNameBackground")
    			screen.hide("TopCityPanelLeft")
    			screen.hide("TopCityPanelRight")
    			screen.hide("CityScreenAdjustPanel")
    			screen.hide("InterfaceCenterRightBackgroundWidget")
    
    			if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
    				self.setMinimapButtonVisibility(True)
    
    		return 0
    
    
    
    	def updateInfoPaneStrings(self):
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		pHeadSelectedCity = CyInterface().getHeadSelectedCity()
    		pHeadSelectedUnit = CyInterface().getHeadSelectedUnit()
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    		iRow = 0
    
    		screen.addPanel("SelectedUnitPanel", u"", u"", True, False, 8, yResolution - 140, 280, 130, PanelStyles.PANEL_STYLE_STANDARD)
    		screen.setStyle("SelectedUnitPanel", "Panel_Game_HudStat_Style")
    		screen.hide("SelectedUnitPanel")
    
    		screen.addTableControlGFC("SelectedUnitText", 2, 10, yResolution - 109, 180, 102, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD)
    		screen.setStyle("SelectedUnitText", "Table_EmptyScroll_Style")
    		screen.hide("SelectedUnitText")
    		screen.hide("SelectedUnitLabel")
    
    		screen.addTableControlGFC("SelectedCityText", 2, 10, yResolution - 139, 180, 128, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD)
    		screen.setStyle("SelectedCityText", "Table_EmptyScroll_Style")
    		screen.hide("SelectedCityText")
    
    		for i in xrange(gc.getNumPromotionInfos()):
    			szName = "PromotionButton" + str(i)
    			screen.hide(szName)
    
    		if CyEngine().isGlobeviewUp():
    			return
    
    		if pHeadSelectedCity:
    			screen.setTableColumnHeader("SelectedCityText", 0, u"", 120)
    			screen.setTableColumnHeader("SelectedCityText", 1, u"", 50)
    			screen.setTableColumnRightJustify("SelectedCityText", 1)
    
    			iOrders = CyInterface().getNumOrdersQueued()
    			for i in xrange(iOrders):
    				szLeftBuffer = u""
    				szRightBuffer = u""
    
    				if CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_TRAIN:
    					szLeftBuffer = gc.getUnitInfo(CyInterface().getOrderNodeData1(i)).getDescription()
    					szButton = gc.getUnitInfo(CyInterface().getOrderNodeData1(i)).getButton()
    					szRightBuffer = "(" + str(pHeadSelectedCity.getUnitProductionTurnsLeft(CyInterface().getOrderNodeData1(i), i)) + ")"
    
    					if CyInterface().getOrderNodeSave(i):
    						szLeftBuffer = u"*" + szLeftBuffer
    
    				### BUG - Production Started
    					if CityScreenOpt.isShowProductionStarted():
    						eUnit = CyInterface().getOrderNodeData1(i)
    						if pHeadSelectedCity.getUnitProduction(eUnit) > 0:
    							szRightBuffer = BugUtil.colorText(szRightBuffer, "COLOR_CYAN")
    
    				### BUG - Production Decay
    					if BugDll.isPresent() and CityScreenOpt.isShowProductionDecayQueue():
    						eUnit = CyInterface().getOrderNodeData1(i)
    						if pHeadSelectedCity.getUnitProduction(eUnit) > 0:
    							if pHeadSelectedCity.isUnitProductionDecay(eUnit):
    								szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_THIS_TURN", (szLeftBuffer,))
    							elif pHeadSelectedCity.getUnitProductionTime(eUnit) > 0:
    								iDecayTurns = pHeadSelectedCity.getUnitProductionDecayTurns(eUnit)
    								if iDecayTurns <= CityScreenOpt.getProductionDecayQueueUnitThreshold():
    									szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_WARNING", (szLeftBuffer,))
    					###
    
    				elif CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_CONSTRUCT:
    					szLeftBuffer = gc.getBuildingInfo(CyInterface().getOrderNodeData1(i)).getDescription()
    					szButton = gc.getBuildingInfo(CyInterface().getOrderNodeData1(i)).getButton()
    					szRightBuffer = "(" + str(pHeadSelectedCity.getBuildingProductionTurnsLeft(CyInterface().getOrderNodeData1(i), i)) + ")"
    
    				### BUG - Production Started
    					if CityScreenOpt.isShowProductionStarted():
    						eBuilding = CyInterface().getOrderNodeData1(i)
    						if pHeadSelectedCity.getBuildingProduction(eBuilding) > 0:
    							szRightBuffer = BugUtil.colorText(szRightBuffer, "COLOR_CYAN")
    
    				### BUG - Production Decay
    					if BugDll.isPresent() and CityScreenOpt.isShowProductionDecayQueue():
    						eBuilding = CyInterface().getOrderNodeData1(i)
    						if pHeadSelectedCity.getBuildingProduction(eBuilding) > 0:
    							if pHeadSelectedCity.isBuildingProductionDecay(eBuilding):
    								szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_THIS_TURN", (szLeftBuffer,))
    							elif pHeadSelectedCity.getBuildingProductionTime(eBuilding) > 0:
    								iDecayTurns = pHeadSelectedCity.getBuildingProductionDecayTurns(eBuilding)
    								if iDecayTurns <= CityScreenOpt.getProductionDecayQueueBuildingThreshold():
    									szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_WARNING", (szLeftBuffer,))
    					###
    
    				elif ( CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_CREATE ):
    					szLeftBuffer = gc.getProjectInfo(CyInterface().getOrderNodeData1(i)).getDescription()
    					szButton = gc.getProjectInfo(CyInterface().getOrderNodeData1(i)).getButton()
    					szRightBuffer = "(" + str(pHeadSelectedCity.getProjectProductionTurnsLeft(CyInterface().getOrderNodeData1(i), i)) + ")"
    
    				### BUG - Production Started
    					if BugDll.isVersion(3) and CityScreenOpt.isShowProductionStarted():
    						eProject = CyInterface().getOrderNodeData1(i)
    						if pHeadSelectedCity.getProjectProduction(eProject) > 0:
    							szRightBuffer = BugUtil.colorText(szRightBuffer, "COLOR_CYAN")
    					###
    
    				elif CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_MAINTAIN:
    					szLeftBuffer = gc.getProcessInfo(CyInterface().getOrderNodeData1(i)).getDescription()
    					szButton = gc.getProcessInfo(CyInterface().getOrderNodeData1(i)).getButton()
    
    				screen.appendTableRow("SelectedCityText")
    				screen.setTableText("SelectedCityText", 0, iRow, szLeftBuffer, szButton, WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_LEFT_JUSTIFY)
    				screen.setTableText("SelectedCityText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_RIGHT_JUSTIFY)
    				screen.show("SelectedCityText")
    				screen.show("SelectedUnitPanel")
    				iRow += 1
    
    		elif pHeadSelectedUnit and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
    			screen.setTableColumnHeader("SelectedUnitText", 0, u"", 100)
    			screen.setTableColumnHeader("SelectedUnitText", 1, u"", 75)
    			screen.setTableColumnRightJustify("SelectedUnitText", 1)
    
    			if CyInterface().mirrorsSelectionGroup():
    				pSelectedGroup = pHeadSelectedUnit.getGroup()
    			else:
    				pSelectedGroup = 0
    
    			if CyInterface().getLengthSelectionList() > 1:
    				szBuffer = localText.getText("TXT_KEY_UNIT_STACK", (CyInterface().getLengthSelectionList(), ))
    				if MainOpt.isShowStackMovementPoints():
    					iMinMoves = 100000
    					iMaxMoves = 0
    					for i in xrange(CyInterface().getLengthSelectionList()):
    						pUnit = CyInterface().getSelectionUnit(i)
    						if pUnit != None:
    							iLoopMoves = pUnit.movesLeft()
    							if iLoopMoves > iMaxMoves:
    								iMaxMoves = iLoopMoves
    							if iLoopMoves < iMinMoves:
    								iMinMoves = iLoopMoves
    					if iMinMoves == iMaxMoves:
    						fMinMoves = float(iMinMoves) / gc.getMOVE_DENOMINATOR()
    						szBuffer += u" %.1f%c" % (fMinMoves, CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
    					else:
    						fMinMoves = float(iMinMoves) / gc.getMOVE_DENOMINATOR()
    						fMaxMoves = float(iMaxMoves) / gc.getMOVE_DENOMINATOR()
    						szBuffer += u" %.1f - %.1f%c" % (fMinMoves, fMaxMoves, CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
    
    				screen.setText("SelectedUnitLabel", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, 18, yResolution - 137, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_UNIT_NAME, -1, -1)
    
    				if pSelectedGroup == 0 or pSelectedGroup.getLengthMissionQueue() <= 1:
    					if pHeadSelectedUnit:
    						for i in xrange(gc.getNumUnitInfos()):
    							iCount = CyInterface().countEntities(i)
    							if iCount > 0:
    								szRightBuffer = u""
    								szLeftBuffer = gc.getUnitInfo(i).getDescription()
    								if iCount > 1:
    									szRightBuffer = u"(" + str(iCount) + u")"
    								szBuffer = szLeftBuffer + u"  " + szRightBuffer
    								screen.appendTableRow("SelectedUnitText")
    								screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_LEFT_JUSTIFY)
    								screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_RIGHT_JUSTIFY)
    								screen.show("SelectedUnitText")
    								screen.show("SelectedUnitPanel")
    								iRow += 1
    			else:
    				if pHeadSelectedUnit.getHotKeyNumber() == -1:
    					szBuffer = localText.getText("INTERFACE_PANE_UNIT_NAME", (pHeadSelectedUnit.getName(), ))
    				else:
    					szBuffer = localText.getText("INTERFACE_PANE_UNIT_NAME_HOT_KEY", (pHeadSelectedUnit.getHotKeyNumber(), pHeadSelectedUnit.getName()))
    
    				if len(szBuffer) > 60:
    					szBuffer = "<font=2>" + szBuffer + "</font>"
    				screen.setText("SelectedUnitLabel", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, 18, yResolution - 137, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_UNIT_NAME, -1, -1)
    
    				if pSelectedGroup == 0 or pSelectedGroup.getLengthMissionQueue() <= 1:
    					screen.show("SelectedUnitText")
    					screen.show("SelectedUnitPanel")
    
    					szBuffer = u""
    					szLeftBuffer = u""
    					szRightBuffer = u""
    
    					if pHeadSelectedUnit.getDomainType() == DomainTypes.DOMAIN_AIR:
    						if pHeadSelectedUnit.airBaseCombatStr() > 0:
    							szLeftBuffer = localText.getText("INTERFACE_PANE_AIR_STRENGTH", ())
    							if pHeadSelectedUnit.isFighting():
    								szRightBuffer = u"?/%d%c" %(pHeadSelectedUnit.airBaseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
    							elif pHeadSelectedUnit.isHurt():
    								szRightBuffer = u"%.1f/%d%c" %(((float(pHeadSelectedUnit.airBaseCombatStr() * pHeadSelectedUnit.currHitPoints())) / (float(pHeadSelectedUnit.maxHitPoints()))), pHeadSelectedUnit.airBaseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
    							else:
    								szRightBuffer = u"%d%c" %(pHeadSelectedUnit.airBaseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
    					else:
    						if pHeadSelectedUnit.canFight():
    							szLeftBuffer = localText.getText("INTERFACE_PANE_STRENGTH", ())
    							if pHeadSelectedUnit.isFighting():
    								szRightBuffer = u"?/%d%c" %(pHeadSelectedUnit.baseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
    							elif pHeadSelectedUnit.isHurt():
    								szRightBuffer = u"%.1f/%d%c" %(((float(pHeadSelectedUnit.baseCombatStr() * pHeadSelectedUnit.currHitPoints())) / (float(pHeadSelectedUnit.maxHitPoints()))), pHeadSelectedUnit.baseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
    							else:
    								szRightBuffer = u"%d%c" %(pHeadSelectedUnit.baseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
    
    					szBuffer = szLeftBuffer + szRightBuffer
    					if szBuffer:
    						screen.appendTableRow("SelectedUnitText")
    						screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
    						screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
    						screen.show("SelectedUnitText")
    						screen.show("SelectedUnitPanel")
    						iRow += 1
    
    				### Unit Movement
    					szLeftBuffer = localText.getText("INTERFACE_PANE_MOVEMENT", ())
    					szRightBuffer = u""
    					if MainOpt.isShowUnitMovementPointsFraction():
    						szRightBuffer = u"%d%c" %(pHeadSelectedUnit.baseMoves(), CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
    						if (pHeadSelectedUnit.movesLeft() == 0):
    							szRightBuffer = u"0/" + szRightBuffer
    						elif (pHeadSelectedUnit.movesLeft() == pHeadSelectedUnit.baseMoves() * gc.getMOVE_DENOMINATOR()):
    							pass
    						else:
    							fCurrMoves = float(pHeadSelectedUnit.movesLeft()) / gc.getMOVE_DENOMINATOR()
    							szRightBuffer = (u"%.1f/" % fCurrMoves) + szRightBuffer
    					else:
    						if (pHeadSelectedUnit.movesLeft() % gc.getMOVE_DENOMINATOR()) > 0:
    							iDenom = 1
    						else:
    							iDenom = 0
    						iCurrMoves = ((pHeadSelectedUnit.movesLeft() / gc.getMOVE_DENOMINATOR()) + iDenom)
    						if (pHeadSelectedUnit.baseMoves() == iCurrMoves):
    							szRightBuffer = u"%d%c" %(pHeadSelectedUnit.baseMoves(), CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
    						else:
    							szRightBuffer = u"%d/%d%c" %(iCurrMoves, pHeadSelectedUnit.baseMoves(), CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
    
    					screen.appendTableRow("SelectedUnitText")
    					screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
    					screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
    					screen.show("SelectedUnitText")
    					screen.show("SelectedUnitPanel")
    					iRow += 1
    
    				### Unit Level
    					if pHeadSelectedUnit.getLevel() > 0:
    						szLeftBuffer = localText.getText("INTERFACE_PANE_LEVEL", ())
    						szRightBuffer = u"%d" %(pHeadSelectedUnit.getLevel())
    						screen.appendTableRow("SelectedUnitText")
    						screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
    						screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
    						screen.show("SelectedUnitText")
    						screen.show("SelectedUnitPanel")
    						iRow += 1
    
    				### Unit Experience
    					if pHeadSelectedUnit.getExperience() > 0 and not pHeadSelectedUnit.isFighting():
    						szLeftBuffer = localText.getText("INTERFACE_PANE_EXPERIENCE", ())
    						szRightBuffer = u"(%d/%d)" %(pHeadSelectedUnit.getExperience(), pHeadSelectedUnit.experienceNeeded())
    						screen.appendTableRow("SelectedUnitText")
    						screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
    						screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
    						screen.show("SelectedUnitText")
    						screen.show("SelectedUnitPanel")
    						iRow += 1
    
    				### Unit Promotions
    					iPromotionCount = 0
    					i = 0
    					for i in xrange(gc.getNumPromotionInfos()):
    						if pHeadSelectedUnit.isHasPromotion(i):
    							sPromotion = gc.getPromotionInfo(i).getType()
    							sLast = sPromotion[len(sPromotion) -1]
    							if sLast.isdigit():
    								sPromotion = sPromotion[:len(sPromotion) -1] + str(int(sLast) +1)
    								if gc.getInfoTypeForString(sPromotion) > -1:
    									if pHeadSelectedUnit.isHasPromotion(gc.getInfoTypeForString(sPromotion)):
    										continue
    
    							szName = "PromotionButton" + str(i)
    							self.setPromotionButtonPosition(szName, iPromotionCount)
    							screen.moveToFront(szName)
    							screen.show(szName)
    							iPromotionCount = iPromotionCount + 1
    
    			if pSelectedGroup:
    				iNodeCount = pSelectedGroup.getLengthMissionQueue()
    				if iNodeCount > 1:
    					for i in xrange(iNodeCount):
    						szLeftBuffer = u""
    						szRightBuffer = u""
    
    						if gc.getMissionInfo(pSelectedGroup.getMissionType(i)).isBuild():
    							if i == 0:
    								szLeftBuffer = gc.getBuildInfo(pSelectedGroup.getMissionData1(i)).getDescription()
    								szRightBuffer = localText.getText("INTERFACE_CITY_TURNS", (pSelectedGroup.plot().getBuildTurnsLeft(pSelectedGroup.getMissionData1(i), 0, 0), ))
    							else:
    								szLeftBuffer = u"%s..." %(gc.getBuildInfo(pSelectedGroup.getMissionData1(i)).getDescription())
    						else:
    							szLeftBuffer = u"%s..." %(gc.getMissionInfo(pSelectedGroup.getMissionType(i)).getDescription())
    
    						szBuffer = szLeftBuffer + "  " + szRightBuffer
    						screen.appendTableRow("SelectedUnitText")
    						screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_LEFT_JUSTIFY)
    						screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_RIGHT_JUSTIFY)
    						screen.show("SelectedUnitText")
    						screen.show("SelectedUnitPanel")
    						iRow += 1
    
    		return 0
    
    
    
    	# Will update the scores
    	def updateScoreStrings( self ):
    
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		screen.hide("ScoreBackground")
    
    # BUG - Align Icons - start
    		for i in xrange( gc.getMAX_PLAYERS() ):
    			szName = "ScoreText" + str(i)
    			screen.hide( szName )
    			szName = "ScoreTech" + str(i)
    			screen.hide( szName )
    			for j in xrange( Scoreboard.NUM_PARTS ):
    				szName = "ScoreText%d-%d" %( i, j )
    				screen.hide( szName )
    # BUG - Align Icons - end
    
    		iWidth = 0
    		iCount = 0
    		iBtnHeight = 22
    
    		if ((CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY)):
    			if (CyInterface().isScoresVisible() and not CyInterface().isCityScreenUp() and CyEngine().isGlobeviewUp() == false):
    
    # BUG - Align Icons - start
    				bAlignIcons = ScoreOpt.isAlignIcons()
    				if (bAlignIcons):
    					scores = Scoreboard.Scoreboard()
    # BUG - Align Icons - end
    
    # BUG - 3.17 No Espionage - start
    				bEspionage = GameUtil.isEspionage()
    # BUG - 3.17 No Espionage - end
    
    # BUG - Power Rating - start
    				bShowPower = ScoreOpt.isShowPower()
    				if (bShowPower):
    					iPlayerPower = gc.getActivePlayer().getPower()
    					iPowerColor = ScoreOpt.getPowerColor()
    					iHighPowerColor = ScoreOpt.getHighPowerColor()
    					iLowPowerColor = ScoreOpt.getLowPowerColor()
    
    					if (bEspionage):
    						iDemographicsMission = -1
    						for iMissionLoop in xrange(gc.getNumEspionageMissionInfos()):
    							if (gc.getEspionageMissionInfo(iMissionLoop).isSeeDemographics()):
    								iDemographicsMission = iMissionLoop
    								break
    						if (iDemographicsMission == -1):
    							bShowPower = False
    # BUG - Power Rating - end
    
    				i = gc.getMAX_CIV_TEAMS() - 1
    				while (i > -1):
    					eTeam = gc.getGame().getRankTeam(i)
    
    					if (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet(eTeam) or gc.getTeam(eTeam).isHuman() or gc.getGame().isDebugMode()):
    # BUG - Align Icons - start
    						if (bAlignIcons):
    							scores.addTeam(gc.getTeam(eTeam), i)
    # BUG - Align Icons - end
    						j = gc.getMAX_CIV_PLAYERS() - 1
    						while (j > -1):
    							ePlayer = gc.getGame().getRankPlayer(j)
    
    							if (not CyInterface().isScoresMinimized() or gc.getGame().getActivePlayer() == ePlayer):
    # BUG - Dead Civs - start
    								if (gc.getPlayer(ePlayer).isEverAlive() and not gc.getPlayer(ePlayer).isBarbarian()
    									and (gc.getPlayer(ePlayer).isAlive() or ScoreOpt.isShowDeadCivs())):
    # BUG - Dead Civs - end
    # BUG - Minor Civs - start
    									if (not gc.getPlayer(ePlayer).isMinorCiv() or ScoreOpt.isShowMinorCivs()):
    # BUG - Minor Civs - end
    										if (gc.getPlayer(ePlayer).getTeam() == eTeam):
    											szBuffer = u"<font=2>"
    # BUG - Align Icons - start
    											if (bAlignIcons):
    												scores.addPlayer(gc.getPlayer(ePlayer), j)
    												# BUG: Align Icons continues throughout -- if (bAlignIcons): scores.setFoo(foo)
    # BUG - Align Icons - end
    
    											if (gc.getGame().isGameMultiPlayer()):
    												if (not (gc.getPlayer(ePlayer).isTurnActive())):
    													szBuffer = szBuffer + "*"
    													if (bAlignIcons):
    														scores.setWaiting()
    
    # BUG - Dead Civs - start
    											if (ScoreOpt.isUsePlayerName()):
    												szPlayerName = gc.getPlayer(ePlayer).getName()
    											else:
    												szPlayerName = gc.getLeaderHeadInfo(gc.getPlayer(ePlayer).getLeaderType()).getDescription()
    											if (ScoreOpt.isShowBothNames()):
    												szCivName = gc.getPlayer(ePlayer).getCivilizationShortDescription(0)
    												szPlayerName = szPlayerName + "/" + szCivName
    											elif (ScoreOpt.isShowBothNamesShort()):
    												szCivName = gc.getPlayer(ePlayer).getCivilizationDescription(0)
    												szPlayerName = szPlayerName + "/" + szCivName
    											elif (ScoreOpt.isShowLeaderName()):
    												szPlayerName = szPlayerName
    											elif (ScoreOpt.isShowCivName()):
    												szCivName = gc.getPlayer(ePlayer).getCivilizationShortDescription(0)
    												szPlayerName = szCivName
    											else:
    												szCivName = gc.getPlayer(ePlayer).getCivilizationDescription(0)
    												szPlayerName = szCivName
    
    											if (not gc.getPlayer(ePlayer).isAlive() and ScoreOpt.isShowDeadTag()):
    												szPlayerScore = localText.getText("TXT_KEY_BUG_DEAD_CIV", ())
    												if (bAlignIcons):
    													scores.setScore(szPlayerScore)
    											else:
    												iScore = gc.getGame().getPlayerScore(ePlayer)
    												szPlayerScore = u"%d" % iScore
    												if (bAlignIcons):
    													scores.setScore(szPlayerScore)
    # BUG - Score Delta - start
    												if (ScoreOpt.isShowScoreDelta()):
    													iGameTurn = gc.getGame().getGameTurn()
    													if (ePlayer >= gc.getGame().getActivePlayer()):
    														iGameTurn -= 1
    													if (ScoreOpt.isScoreDeltaIncludeCurrentTurn()):
    														iScoreDelta = iScore
    													elif (iGameTurn >= 0):
    														iScoreDelta = gc.getPlayer(ePlayer).getScoreHistory(iGameTurn)
    													else:
    														iScoreDelta = 0
    													iPrevGameTurn = iGameTurn - 1
    													if (iPrevGameTurn >= 0):
    														iScoreDelta -= gc.getPlayer(ePlayer).getScoreHistory(iPrevGameTurn)
    													if (iScoreDelta != 0):
    														if (iScoreDelta > 0):
    															iColorType = gc.getInfoTypeForString("COLOR_GREEN")
    														elif (iScoreDelta < 0):
    															iColorType = gc.getInfoTypeForString("COLOR_RED")
    														szScoreDelta = "%+d" % iScoreDelta
    														if (iColorType >= 0):
    															szScoreDelta = localText.changeTextColor(szScoreDelta, iColorType)
    														szPlayerScore += szScoreDelta + u" "
    														if (bAlignIcons):
    															scores.setScoreDelta(szScoreDelta)
    # BUG - Score Delta - end
    
    											if (not CyInterface().isFlashingPlayer(ePlayer) or CyInterface().shouldFlash(ePlayer)):
    												if (ePlayer == gc.getGame().getActivePlayer()):
    													szPlayerName = u"[<color=%d,%d,%d,%d>%s</color>]" %(gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), szPlayerName)
    												else:
    													if (not gc.getPlayer(ePlayer).isAlive() and ScoreOpt.isGreyOutDeadCivs()):
    														szPlayerName = u"<color=%d,%d,%d,%d>%s</color>" %(175, 175, 175, gc.getPlayer(ePlayer).getPlayerTextColorA(), szPlayerName)
    													else:
    														szPlayerName = u"<color=%d,%d,%d,%d>%s</color>" %(gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), szPlayerName)
    											szTempBuffer = u"%s: %s" %(szPlayerScore, szPlayerName)
    											szBuffer = szBuffer + szTempBuffer
    											if (bAlignIcons):
    												scores.setName(szPlayerName)
    												scores.setID(u"<color=%d,%d,%d,%d>%d</color>" %(gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), ePlayer))
    
    											if (gc.getPlayer(ePlayer).isAlive()):
    												if (bAlignIcons):
    													scores.setAlive()
    												# BUG: Rest of Dead Civs change is merely indentation by 1 level ...
    												if (gc.getTeam(eTeam).isAlive()):
    													if ( not (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet(eTeam)) ):
    														szBuffer = szBuffer + (" ?")
    														if (bAlignIcons):
    															scores.setNotMet()
    													if (gc.getTeam(eTeam).isAtWar(gc.getGame().getActiveTeam())):
    														szBuffer = szBuffer + "("  + localText.getColorText("TXT_KEY_CONCEPT_WAR", (), gc.getInfoTypeForString("COLOR_RED")).upper() + ")"
    														if (bAlignIcons):
    															scores.setWar()
    													elif (gc.getTeam(gc.getGame().getActiveTeam()).isForcePeace(eTeam)):
    														if (bAlignIcons):
    															scores.setPeace()
    													elif (gc.getTeam(eTeam).isAVassal()):
    														for iOwnerTeam in xrange(gc.getMAX_TEAMS()):
    															if (gc.getTeam(eTeam).isVassal(iOwnerTeam) and gc.getTeam(gc.getGame().getActiveTeam()).isForcePeace(iOwnerTeam)):
    																if (bAlignIcons):
    																	scores.setPeace()
    																break
    													if (gc.getPlayer(ePlayer).canTradeNetworkWith(gc.getGame().getActivePlayer()) and (ePlayer != gc.getGame().getActivePlayer())):
    														szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.TRADE_CHAR))
    														szBuffer = szBuffer + szTempBuffer
    														if (bAlignIcons):
    															scores.setTrade()
    													if (gc.getTeam(eTeam).isOpenBorders(gc.getGame().getActiveTeam())):
    														szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.OPEN_BORDERS_CHAR))
    														szBuffer = szBuffer + szTempBuffer
    														if (bAlignIcons):
    															scores.setBorders()
    													if (gc.getTeam(eTeam).isDefensivePact(gc.getGame().getActiveTeam())):
    														szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.DEFENSIVE_PACT_CHAR))
    														szBuffer = szBuffer + szTempBuffer
    														if (bAlignIcons):
    															scores.setPact()
    													if (gc.getPlayer(ePlayer).getStateReligion() != -1):
    														if (gc.getPlayer(ePlayer).hasHolyCity(gc.getPlayer(ePlayer).getStateReligion())):
    															szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStateReligion()).getHolyCityChar())
    														else:
    															szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStateReligion()).getChar())
    														szBuffer = szBuffer + szTempBuffer
    														if (bAlignIcons):
    															scores.setReligion(szTempBuffer)
    
    													if (bEspionage and gc.getTeam(eTeam).getEspionagePointsAgainstTeam(gc.getGame().getActiveTeam()) < gc.getTeam(gc.getGame().getActiveTeam()).getEspionagePointsAgainstTeam(eTeam)):
    														szTempBuffer = u"%c" %(gc.getCommerceInfo(CommerceTypes.COMMERCE_ESPIONAGE).getChar())
    														szBuffer = szBuffer + szTempBuffer
    														if (bAlignIcons):
    															scores.setEspionage()
    
    												bEspionageCanSeeResearch = False
    												if (bEspionage):
    													for iMissionLoop in xrange(gc.getNumEspionageMissionInfos()):
    														if (gc.getEspionageMissionInfo(iMissionLoop).isSeeResearch()):
    															bEspionageCanSeeResearch = gc.getActivePlayer().canDoEspionageMission(iMissionLoop, ePlayer, None, -1)
    															break
    
    												if (((gc.getPlayer(ePlayer).getTeam() == gc.getGame().getActiveTeam()) and (gc.getTeam(gc.getGame().getActiveTeam()).getNumMembers() > 1)) or (gc.getTeam(gc.getPlayer(ePlayer).getTeam()).isVassal(gc.getGame().getActiveTeam())) or gc.getGame().isDebugMode() or bEspionageCanSeeResearch):
    													if (gc.getPlayer(ePlayer).getCurrentResearch() != -1):
    														szTempBuffer = u"-%s (%d)" %(gc.getTechInfo(gc.getPlayer(ePlayer).getCurrentResearch()).getDescription(), gc.getPlayer(ePlayer).getResearchTurnsLeft(gc.getPlayer(ePlayer).getCurrentResearch(), True))
    														szBuffer = szBuffer + szTempBuffer
    														if (bAlignIcons):
    															scores.setResearch(gc.getPlayer(ePlayer).getCurrentResearch(), gc.getPlayer(ePlayer).getResearchTurnsLeft(gc.getPlayer(ePlayer).getCurrentResearch(), True))
    												# BUG: ...end of indentation
    # BUG - Dead Civs - end
    # BUG - Power Rating - start
    												# if on, show according to espionage "see demographics" mission
    												if (bShowPower
    													and (gc.getGame().getActivePlayer() != ePlayer
    														 and (not bEspionage or gc.getActivePlayer().canDoEspionageMission(iDemographicsMission, ePlayer, None, -1)))):
    													iPower = gc.getPlayer(ePlayer).getPower()
    													if (iPower > 0): # avoid divide by zero
    														fPowerRatio = float(iPlayerPower) / float(iPower)
    														if (ScoreOpt.isPowerThemVersusYou()):
    															if (fPowerRatio > 0):
    																fPowerRatio = 1.0 / fPowerRatio
    															else:
    																fPowerRatio = 99.0
    														cPower = gc.getGame().getSymbolID(FontSymbols.STRENGTH_CHAR)
    														szTempBuffer = BugUtil.formatFloat(fPowerRatio, ScoreOpt.getPowerDecimals()) + u"%c" % (cPower)
    														if (iHighPowerColor >= 0 and fPowerRatio >= ScoreOpt.getHighPowerRatio()):
    															szTempBuffer = localText.changeTextColor(szTempBuffer, iHighPowerColor)
    														elif (iLowPowerColor >= 0 and fPowerRatio <= ScoreOpt.getLowPowerRatio()):
    															szTempBuffer = localText.changeTextColor(szTempBuffer, iLowPowerColor)
    														elif (iPowerColor >= 0):
    															szTempBuffer = localText.changeTextColor(szTempBuffer, iPowerColor)
    														szBuffer = szBuffer + u" " + szTempBuffer
    														if (bAlignIcons):
    															scores.setPower(szTempBuffer)
    # BUG - Power Rating - end
    # BUG - Attitude Icons - start
    												if (ScoreOpt.isShowAttitude()):
    													if (not gc.getPlayer(ePlayer).isHuman()):
    														iAtt = gc.getPlayer(ePlayer).AI_getAttitude(gc.getGame().getActivePlayer())
    														cAtt =  unichr(ord(unichr(CyGame().getSymbolID(FontSymbols.POWER_CHAR) + 4)) + iAtt)
    														szBuffer += cAtt
    														if (bAlignIcons):
    															scores.setAttitude(cAtt)
    # BUG - Attitude Icons - end
    # BUG - Refuses to Talk - start
    												if (not DiplomacyUtil.isWillingToTalk(ePlayer, gc.getGame().getActivePlayer())):
    													cRefusesToTalk = u"!"
    													szBuffer += cRefusesToTalk
    													if (bAlignIcons):
    														scores.setWontTalk()
    # BUG - Refuses to Talk - end
    
    # BUG - Worst Enemy - start
    												if (ScoreOpt.isShowWorstEnemy()):
    													if (AttitudeUtil.isWorstEnemy(ePlayer, gc.getGame().getActivePlayer())):
    														cWorstEnemy = u"%c" %(CyGame().getSymbolID(FontSymbols.ANGRY_POP_CHAR))
    														szBuffer += cWorstEnemy
    														if (bAlignIcons):
    															scores.setWorstEnemy()
    # BUG - Worst Enemy - end
    # BUG - WHEOOH - start
    												if (ScoreOpt.isShowWHEOOH()):
    													if (PlayerUtil.isWHEOOH(ePlayer, PlayerUtil.getActivePlayerID())):
    														szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.OCCUPATION_CHAR))
    														szBuffer = szBuffer + szTempBuffer
    														if (bAlignIcons):
    															scores.setWHEOOH()
    # BUG - WHEOOH - end
    # BUG - Num Cities - start
    												if (ScoreOpt.isShowCountCities()):
    													if (PlayerUtil.canSeeCityList(ePlayer)):
    														szTempBuffer = u"%d" % PlayerUtil.getNumCities(ePlayer)
    													else:
    														szTempBuffer = BugUtil.colorText(u"%d" % PlayerUtil.getNumRevealedCities(ePlayer), "COLOR_CYAN")
    													szBuffer = szBuffer + " " + szTempBuffer
    													if (bAlignIcons):
    														scores.setNumCities(szTempBuffer)
    # BUG - Num Cities - end
    
    											if (CyGame().isNetworkMultiPlayer()):
    												szTempBuffer = CyGameTextMgr().getNetStats(ePlayer)
    												szBuffer = szBuffer + szTempBuffer
    												if (bAlignIcons):
    													scores.setNetStats(szTempBuffer)
    
    											if (gc.getPlayer(ePlayer).isHuman() and CyInterface().isOOSVisible()):
    												szTempBuffer = u" <color=255,0,0>* %s *</color>" %(CyGameTextMgr().getOOSSeeds(ePlayer))
    												szBuffer = szBuffer + szTempBuffer
    												if (bAlignIcons):
    													scores.setNetStats(szTempBuffer)
    
    											szBuffer = szBuffer + "</font>"
    
    # BUG - Align Icons - start
    											if (not bAlignIcons):
    												if ( CyInterface().determineWidth( szBuffer ) > iWidth ):
    													iWidth = CyInterface().determineWidth( szBuffer )
    
    												szName = "ScoreText" + str(ePlayer)
    												if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
    													yCoord = yResolution - 206
    												else:
    													yCoord = yResolution - 88
    
    # BUG - Dead Civs - start
    												# Don't try to contact dead civs
    												if (gc.getPlayer(ePlayer).isAlive()):
    													iWidgetType = WidgetTypes.WIDGET_CONTACT_CIV
    													iPlayer = ePlayer
    												else:
    													iWidgetType = WidgetTypes.WIDGET_GENERAL
    													iPlayer = -1
    												screen.setText( szName, "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 12, yCoord - (iCount * iBtnHeight), -0.3, FontTypes.SMALL_FONT, iWidgetType, iPlayer, -1 )
    # BUG - Dead Civs - end
    												screen.show( szName )
    
    												CyInterface().checkFlashReset(ePlayer)
    
    												iCount = iCount + 1
    # BUG - Align Icons - end
    							j = j - 1
    					i = i - 1
    
    # BUG - Align Icons - start
    				if (bAlignIcons):
    					scores.draw(screen)
    				else:
    					if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
    						yCoord = yResolution - 186
    					else:
    						yCoord = yResolution - 68
    					screen.setPanelSize( "ScoreBackground", xResolution - 21 - iWidth, yCoord - (iBtnHeight * iCount) - 4, iWidth + 12, (iBtnHeight * iCount) + 8 )
    					screen.show("ScoreBackground")
    # BUG - Align Icons - end
    
    
    
    	def updateHelpStrings(self):
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE_ALL:
    			screen.setHelpTextString("")
    		else:
    			screen.setHelpTextString(CyInterface().getHelpString())
    		return 0
    
    
    
    	# Will set the promotion button position
    	def setPromotionButtonPosition(self, szName, iPromotionCount):
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		yResolution = screen.getYResolution()
    		if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
    			screen.moveItem(szName, 266 - (24 * (iPromotionCount / 6)), yResolution - 144 + (24 * (iPromotionCount % 6)), -0.3)
    
    
    
    	# Will set the selection button position
    	def setResearchButtonPosition(self, szButtonID, iCount ):
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		xResolution = screen.getXResolution()
    
    # BUG - Bars on single line for higher resolution screens - start
    		if (xResolution >= 1440
    		and (MainOpt.isShowGGProgressBar() or MainOpt.isShowGPProgressBar())):
    			xCoord = 268 + (xResolution - 1440) / 2
    			xCoord += 6 + 84
    			screen.moveItem( szButtonID, 264 + ( ( xResolution - 1024 ) / 2 ) + ( 34 * ( iCount % 15 ) ), 0 + ( 34 * ( iCount / 15 ) ), -0.3 )
    		else:
    			xCoord = 264 + ( ( xResolution - 1024 ) / 2 )
    
    		screen.moveItem( szButtonID, xCoord + ( 34 * ( iCount % 15 ) ), 0 + ( 34 * ( iCount / 15 ) ), -0.3 )
    # BUG - Bars on single line for higher resolution screens - end
    
    
    
    	# Will set the selection button position
    	def setScoreTextPosition( self, szButtonID, iWhichLine ):
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		yResolution = screen.getYResolution()
    		if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW ):
    			yCoord = yResolution - 180
    		else:
    			yCoord = yResolution - 88
    		screen.moveItem( szButtonID, 996, yCoord - (iWhichLine * 18), -0.3 )
    
    
    
    	# Will build the globeview UI
    	def updateGlobeviewButtons( self ):
    		kInterface = CyInterface()
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		kEngine = CyEngine()
    		kGLM = CyGlobeLayerManager()
    		iNumLayers = kGLM.getNumLayers()
    		iCurrentLayerID = kGLM.getCurrentLayerID()
    
    		# Positioning things based on the visibility of the globe
    		if kEngine.isGlobeviewUp():
    			screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 50, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
    		else:
    			if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW ):
    				screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 172, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
    			else:
    				screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 50, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
    
    
    		# Set base Y position for the LayerOptions, if we find them
    		if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE:
    			iY = yResolution - iGlobeLayerOptionsY_Minimal
    		else:
    			iY = yResolution - iGlobeLayerOptionsY_Regular
    
    		# Hide the layer options ... all of them
    		for i in range (20):
    			szName = "GlobeLayerOption" + str(i)
    			screen.hide(szName)
    
    		# Setup the GlobeLayer panel
    		iNumLayers = kGLM.getNumLayers()
    		if kEngine.isGlobeviewUp() and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL:
    			# set up panel
    			if iCurrentLayerID != -1 and kGLM.getLayer(iCurrentLayerID).getNumOptions() != 0:
    				bHasOptions = True
    			else:
    				bHasOptions = False
    				screen.hide("ScoreBackground")
    
    			# set up toggle button
    			screen.setState("GlobeToggle", True)
    
    			# Set GlobeLayer indicators correctly
    			for i in xrange(kGLM.getNumLayers()):
    				szButtonID = "GlobeLayer" + str(i)
    				screen.setState( szButtonID, iCurrentLayerID == i )
    
    			# Set up options pane
    			if bHasOptions:
    				kLayer = kGLM.getLayer(iCurrentLayerID)
    
    				iCurY = iY
    				iNumOptions = kLayer.getNumOptions()
    				iCurOption = kLayer.getCurrentOption()
    				iMaxTextWidth = -1
    				for iTmp in xrange(iNumOptions):
    					iOption = iTmp # iNumOptions - iTmp - 1
    					szName = "GlobeLayerOption" + str(iOption)
    					szCaption = kLayer.getOptionName(iOption)
    					if(iOption == iCurOption):
    						szBuffer = "  <color=0,255,0>%s</color>  " % (szCaption)
    					else:
    						szBuffer = "  %s  " % (szCaption)
    					iTextWidth = CyInterface().determineWidth( szBuffer )
    
    					screen.setText( szName, "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, xResolution - 9 - iTextWidth, iCurY-iGlobeLayerOptionHeight-10, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GLOBELAYER_OPTION, iOption, -1 )
    					screen.show( szName )
    
    					iCurY -= iGlobeLayerOptionHeight
    
    					if iTextWidth > iMaxTextWidth:
    						iMaxTextWidth = iTextWidth
    
    				#make extra space
    				iCurY -= iGlobeLayerOptionHeight;
    				iPanelWidth = iMaxTextWidth + 32
    				iPanelHeight = iY - iCurY
    				iPanelX = xResolution - 14 - iPanelWidth
    				iPanelY = iCurY
    				screen.setPanelSize( "ScoreBackground", iPanelX, iPanelY, iPanelWidth, iPanelHeight )
    				screen.show("ScoreBackground")
    
    		else:
    			if iCurrentLayerID != -1:
    				kLayer = kGLM.getLayer(iCurrentLayerID)
    				if kLayer.getName() == "RESOURCES":
    					screen.setState("ResourceIcons", True)
    				else:
    					screen.setState("ResourceIcons", False)
    
    				if kLayer.getName() == "UNITS":
    					screen.setState("UnitIcons", True)
    				else:
    					screen.setState("UnitIcons", False)
    			else:
    				screen.setState("ResourceIcons", False)
    				screen.setState("UnitIcons", False)
    
    			screen.setState("Grid", CyUserProfile().getGrid())
    			screen.setState("BareMap", CyUserProfile().getMap())
    			screen.setState("Yields", CyUserProfile().getYields())
    			screen.setState("ScoresVisible", CyUserProfile().getScores())
    
    			screen.hide("InterfaceGlobeLayerPanel")
    			screen.setState("GlobeToggle", False )
    
    
    
    	# Update minimap buttons
    	def setMinimapButtonVisibility(self, bVisible):
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		kInterface = CyInterface()
    		kGLM = CyGlobeLayerManager()
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		if ( CyInterface().isCityScreenUp() ):
    			bVisible = False
    
    		kMainButtons = ["UnitIcons", "Grid", "BareMap", "Yields", "ScoresVisible", "ResourceIcons"]
    		kGlobeButtons = []
    		for i in xrange(kGLM.getNumLayers()):
    			szButtonID = "GlobeLayer" + str(i)
    			kGlobeButtons.append(szButtonID)
    
    		if bVisible:
    			if CyEngine().isGlobeviewUp():
    				kHide = kMainButtons
    				kShow = kGlobeButtons
    			else:
    				kHide = kGlobeButtons
    				kShow = kMainButtons
    			screen.show("GlobeToggle")
    
    		else:
    			kHide = kMainButtons + kGlobeButtons
    			kShow = []
    			screen.hide("GlobeToggle")
    
    		for szButton in kHide:
    			screen.hide(szButton)
    
    		if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE:
    			iY = yResolution - iMinimapButtonsY_Minimal
    			iGlobeY = yResolution - iGlobeButtonY_Minimal
    		else:
    			iY = yResolution - iMinimapButtonsY_Regular
    			iGlobeY = yResolution - iGlobeButtonY_Regular
    
    		iBtnX = xResolution - 39
    		screen.moveItem("GlobeToggle", iBtnX, iGlobeY, 0.0)
    
    		iBtnAdvance = 28
    		iBtnX = iBtnX - len(kShow)*iBtnAdvance - 10
    		if len(kShow) > 0:
    			i = 0
    			for szButton in kShow:
    				screen.moveItem(szButton, iBtnX, iY, 0.0)
    				screen.moveToFront(szButton)
    				screen.show(szButton)
    				iBtnX += iBtnAdvance
    				i += 1
    
    
    
    	def createGlobeviewButtons( self ):
    		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		kEngine = CyEngine()
    		kGLM = CyGlobeLayerManager()
    		iNumLayers = kGLM.getNumLayers()
    
    		for i in range (kGLM.getNumLayers()):
    			szButtonID = "GlobeLayer" + str(i)
    
    			kLayer = kGLM.getLayer(i)
    			szStyle = kLayer.getButtonStyle()
    
    			if szStyle == 0 or szStyle == "":
    				szStyle = "Button_HUDSmall_Style"
    
    			screen.addCheckBoxGFC( szButtonID, "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_GLOBELAYER, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
    			screen.setStyle( szButtonID, szStyle )
    			screen.hide( szButtonID )
    
    
    
    	def createMinimapButtons( self ):
    		screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    		xResolution = screen.getXResolution()
    		yResolution = screen.getYResolution()
    
    		screen.addCheckBoxGFC( "UnitIcons", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_UNIT_ICONS).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.setStyle( "UnitIcons", "Button_HUDGlobeUnit_Style")
    		screen.setState( "UnitIcons", False )
    		screen.hide("UnitIcons")
    
    		screen.addCheckBoxGFC( "Grid", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_GRID).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.setStyle( "Grid", "Button_HUDBtnGrid_Style")
    		screen.setState( "Grid", False )
    		screen.hide("Grid")
    
    		screen.addCheckBoxGFC( "BareMap", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_BARE_MAP).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.setStyle( "BareMap", "Button_HUDBtnClearMap_Style")
    		screen.setState( "BareMap", False )
    		screen.hide("BareMap")
    
    		screen.addCheckBoxGFC( "Yields", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_YIELDS).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.setStyle( "Yields", "Button_HUDBtnTileAssets_Style")
    		screen.setState( "Yields", False )
    		screen.hide("Yields")
    
    		screen.addCheckBoxGFC( "ScoresVisible", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_SCORES).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.setStyle( "ScoresVisible", "Button_HUDBtnRank_Style")
    		screen.setState( "ScoresVisible", True )
    		screen.hide("ScoresVisible")
    
    		screen.addCheckBoxGFC( "ResourceIcons", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_RESOURCE_ALL).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.setStyle( "ResourceIcons", "Button_HUDBtnResources_Style")
    		screen.setState( "ResourceIcons", False )
    		screen.hide("ResourceIcons")
    
    		screen.addCheckBoxGFC( "GlobeToggle", "", "", -1, -1, 36, 36, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_GLOBELAYER).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
    		screen.setStyle( "GlobeToggle", "Button_HUDZoom_Style")
    		screen.setState( "GlobeToggle", False )
    		screen.hide("GlobeToggle")
    
    
    
    	def handleInput (self, inputClass):
    		'Handles input for this screen'
    
    		if inputClass.getNotifyCode() == 11:
    			# Great People Actions
    			if inputClass.getData1() > 899 and inputClass.getData1() < 1000:
    				if CyInterface().shiftKey():
    					return
    				CyMessageControl().sendModNetMessage(3010, g_pSelectedUnit.getOwner(), g_pSelectedUnit.getID(), inputClass.getData1(), inputClass.getData2())
    
    			# Founding Religions
    			elif inputClass.getData1() == 1748:
    				CyMessageControl().sendModNetMessage(1748, g_pSelectedUnit.getOwner(), g_pSelectedUnit.getID(), inputClass.getData2(), -1)
    
    			# Inquisition
    			elif inputClass.getData1() == 8586:
    				CyMessageControl().sendModNetMessage(inputClass.getData1(), g_pSelectedUnit.getOwner(), g_pSelectedUnit.getID(), inputClass.getData2(), -1)
    
    		# Great Person Bar
    		elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED and inputClass.getFunctionName().startswith("GreatPersonBar"):
    			pPlayer = gc.getActivePlayer()
    			iCity = inputClass.getData1()
    			if iCity == -1:
    				GPCityList = HR.getGreatPersonTopCities(pPlayer, 1)
    				if GPCityList:
    					iTurns, iGP, pCity = GPCityList[0]
    				else:
    					pCity = None
    
    			else:
    				pCity = gc.getActivePlayer().getCity(iCity)
    
    			if pCity:
    				CyInterface().selectCity(pCity, False)
    
    			return 1
    
    		# Field of View
    		elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_SLIDER_NEWSTOP:
    			if inputClass.getFunctionName() == self.szSliderId:
    				screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
    				self.iField_View = inputClass.getData() + 1
    				self.setFieldofView(screen, False)
    				self.setFieldofView_Text(screen)
    				MainOpt.setFieldOfView(self.iField_View)
    
    		# Civil War
    		if inputClass.getFunctionName() == "CivilWarButton":
    			CivilWar.CivilWar().interfaceScreen()
    
    		# Raw Yields
    		elif inputClass.getFunctionName().startswith("RawYields"):
    			return self.handleRawYieldsButtons(inputClass)
    
    		# Resource Display
    		elif inputClass.getFunctionName() == "ResourceFilter":
    			self.iBonusClass = inputClass.getData() - 1
    			self.updateCityScreen()
    
    		# PLE
    		if  (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_ON) or \
    			(inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_OFF) or \
    			(inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED):
    			if self.MainInterfaceInputMap.has_key(inputClass.getFunctionName()):
    				return self.MainInterfaceInputMap.get(inputClass.getFunctionName())(inputClass)
    			if self.MainInterfaceInputMap.has_key(inputClass.getFunctionName() + "1"):
    				return self.MainInterfaceInputMap.get(inputClass.getFunctionName() + "1")(inputClass)
    
    			# BUG Options Button
    			if inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED:
    				if inputClass.getFunctionName() == "BUGOptionsScreenWidget":
    					BugOptionsScreen.showOptionsScreen()
    					return 1
    
    		return 0
    
    
    
    	def handleRawYieldsButtons(self, inputClass):
    		iButton = inputClass.getID()
    		if inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_ON:
    			self.PLE.displayHelpHover(RAW_YIELD_HELP[iButton])
    
    		elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_OFF:
    			self.PLE.hideInfoPane()
    
    		elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED:
    			global g_bYieldView
    			global g_iYieldType
    			global g_iYieldTiles
    			if iButton == 0:
    				g_bYieldView = False
    			elif iButton in (1, 2, 3):
    				g_bYieldView = True
    				g_iYieldType = RawYields.YIELDS[iButton - 1]
    			elif iButton in (4, 5, 6):
    				g_bYieldView = True
    				g_iYieldTiles = RawYields.TILES[iButton - 4]
    			else:
    				return 0
    
    			CyInterface().setDirty(InterfaceDirtyBits.CityScreen_DIRTY_BIT, True)
    			return 1
    
    		else:
    			return 0
    
    
    
    	def update(self, fDelta):
    		return
    
    
    
    	def forward(self):
    		if (not CyInterface().isFocused() or CyInterface().isCityScreenUp()):
    			if (CyInterface().isCitySelection()):
    				CyGame().doControl(ControlTypes.CONTROL_NEXTCITY)
    			else:
    				CyGame().doControl(ControlTypes.CONTROL_NEXTUNIT)
    
    
    
    	def back(self):
    		if (not CyInterface().isFocused() or CyInterface().isCityScreenUp()):
    			if (CyInterface().isCitySelection()):
    				CyGame().doControl(ControlTypes.CONTROL_PREVCITY)
    			else:
    				CyGame().doControl(ControlTypes.CONTROL_PREVUNIT)
    
    
    
    	def setFieldofView(self, screen, bDefault):
    		if bDefault or not MainOpt.isShowFieldOfView():
    			self._setFieldofView(screen, DEFAULT_FIELD_OF_VIEW)
    		else:
    			self._setFieldofView(screen, self.iField_View)
    
    
    
    	def _setFieldofView(self, screen, iFoV):
    		if self.iField_View_Prev != iFoV:
    			gc.setDefineFLOAT("FIELD_OF_VIEW", float(iFoV))
    			self.iField_View_Prev = iFoV
    
    
    
    	def setFieldofView_Text(self, screen):
    		zsFieldOfView_Text = "%s [%i]" % (self.sFieldOfView_Text, self.iField_View)
    		screen.setLabel(self.szSliderTextId, "", zsFieldOfView_Text, CvUtil.FONT_RIGHT_JUSTIFY, self.iX_FoVSlider, self.iY_FoVSlider + 6, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    Angehängte Grafiken Angehängte Grafiken
    Angehängte Dateien Angehängte Dateien
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  8. #8
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Danke Boggy! Funzt. Wird im Patch 2 nun mitgeliefert. Extra für euch! Ich brauch sowas net.

    Hach is das ein Klump! Wenn ich im MainInterface ne Änderung mach, kann ich CIV wegen dem Field of View komplett neu starten, weil endlos Fehler kommen!!! so ein schmarrn. Das war vorher nicht so. Jetzt muss ich den Dreck jedesmal deaktivieren, wenn ich im MainInterface herumschiebe (Buttons hinzufüge) oder jedesmal komplett neu starten!
    Wer programmiert so SCH...E?!?
    Geändert von Pie (17. April 2014 um 21:41 Uhr)
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •